The statement “I/O is everything” captures the essence of an embedded system. Embedded systems often contain the same peripheral device across multiple platforms. It is desirable to write the software that controls the device (device driver) one time and reuse it with minimal or no modifications on any platform, regardless of operating system, RTOS, or architecture. This can be accomplished by defining an interface that abstracts the hardware and RTOS specific functions away from the device.

A common adage is “a thing on a thing, doesn’t run as fast as a thing.” Embedded systems must respond to stimulus in a known or predictable time period. By carefully selecting the interfaces and communication mechanisms of the interfaces between components, acceptable performance can be achieved, yet provide code that is portable, extensible, and maintainable.