In today’s embedded designs, more and more functionality is being crammed into smaller packages. As this functionality increases, so does the amount of upper-layer, “OS” software needed to run it. With cost always a driving factor, flash devices used for the system software need to be as small as possible. A combination of cost and increased system functionality means less space available for the boot/initialization code as well, to which there is likewise pressure to add functionality.

As an embedded systems engineer, you must be able to understand the
implications associated with adding all this functionality. You must also be able to communicate these implications and the trade-offs involved, as well as proposed solutions, to your managers and executives.

If we are prepared ahead of time to deal with requests for added features, then “putting 10 lbs of functionality into a 5-lb package” becomes much easier. This paper discusses a couple of things that an engineer can do at the outset of such an undertaking to make it easier: layer the firmware, with a clear plan for that for which each layer of the code is responsible, and add debug code while minimizing the impact to the boot process and avoiding code bloat.