In software, what does the term “Embedded” entail

definitionembedded-systems

So I've been looking at furthering my knowledge into embedded and lower level hardware programming, however, every time I look for jobs that mentions "embedded" it's always high level stuff. To me, that doesn't make a whole lot of sense.

So what exactly does "embedded" entail? When I think of embedded I think of lower-level microcontroller programming and such. If embedded is not the proper title for this, then what should I be searching for?

Best Answer

Define what you mean by higher level stuff. Writing drivers and any other type of software that communicates with hardware is probably what most people think of when you mention embedded software. While that is part of it, that is only a small part. Once you have all that setup there is still the whole application to write that probably never actually talks to the hardware directly and more than likely in most cases this is the majority of the development effort. This can at some level be comparable to "higher" level programing. However, in the embedded world you are probably working under some constraints especially in terms of computational power and memory. Here is list of thing that I think about on daily basis that probably have less importance in higher level development in most cases.

  • Thread concurrency (both protection and timing)
  • Memory allocation and deallocation and usage
  • Heap management (avoiding fragmentation)
  • Meeting real time deadlines
  • Thread prioritization
  • I/0 performance
  • DMA transfers
  • Stack Sizes
  • Library performance
  • Language features (exceptions bloat your code)

Also, embedded platforms tend to be highly specialized to accomplish one specific goal opposed to a PC that is designed to be a platform for general heterogeneousness computing. This mean that you probably have a lot of custom code that may or may not be portable.

Related Topic