Embedded systems are more narrowly focused and typically do not run a full fledged operating system as one would find on a desktop or laptop. Firmware is software that is permanently stored in memory and typically initializes hardware subsystems and the state of the system.

When designing a system make sure to create a architecture block diagram, followed by a hierarchical diagram, and finally a software layering view that scales the box representing each module by its complexity. Shared resources, as represented by boxes connected to more than one other box, is one of the key problems associated with embedded system design and development. Driver interfaces typically consist of functions named open, close, read, write, and ioctl, while higher level modules normally make use of init and test methods.

Note that a logging module may significantly impact the timing of a system, especially when in debugging mode. An interface to a logging module needs to be consistent, whether it is writing messages over a serial interface to a computer for debugging or simply blinking an LED in production. Alternatively, a debug packet may be sent over a network connection. Logs may be stored in an external RAM source only available when the system is stopped and the source is read using JTAG.


See also