Embedded Software Design

Over the course of the last several weeks, I’ve been slowly realizing that there is a really large difference in embedded software design(done in classes such as ECE2534) and just regular software design(ECE 2574, ECE 2524).  Both types of design can utilize similar languages or even the same language (C vs C++), yet have completely different purposes and methods in implementation.  When I was coding in C for the ECE 2534, I realized that nothing I was doing was similar to any of the other programming classes I had taken previously.  Almost every function called and every method used had some sort of physical manipulation of the attached microcontroller.  I say “physical” mostly because everything done has some sort of external effect, such as a pin wired high or setting an external bit in a register.  This is in contrast with conventional coding where everything is done within the computer itself, which I think is more “virtual.”

Rethinking what I just typed, I guess both types of design are also essentially the same.  The both read from some sort of memory or register where data with some meaning is stored.  Embedded design just takes it from an external source while conventional software design is all internal.  At the lowest level, all the processes and actions that occur are the exact same. Despite this, the additional extra layer of accessing pins and registers on an external device when coding embedded software still seems to completely change the way it’s designed.

I guess what it all really comes down to is the high level approach to coding and this seems to be the defining difference between CS majors and CPE majors.  Even though both practices utilize the same programming languages and skillsets, the difference in embedded and conventional software design at the highest level is just so different. I doubt that a CS student would be able to do the coursework of an CPE student without having to learn a large amount of material, and vice versa.