Many of today’s embedded systems involve multiple, independent applications. Take for example, a system that contains both a bootloader and a main application. Both applications do not run at the same time; rather, the bootloader uploads the main application into Flash memory and keeps the system in a known safe state, while the main application runs the desired system behaviors. By sharing common behaviors, or “modules,” the system’s applications will be able to use fewer resources, such as the Flash memory. Additionally, the applications will benefit from updates and fixes to these shared behaviors, without the need to re-compile and re-load all applications into the system. Each of the applications’ behaviors will be contained in its own module, and the modules will be shared by the system’s independent applications.

This paper helps embedded system developers understand and identify which types of modules can be considered “shared.” It explains the placement of shared modules within the system’s resources, as well as how each application can access the shared modules’ functions. It is meant to serve as a guide for designing embedded systems that maximize limited resources.