Embedded systems have become increasingly popular in the last two decades, thanks to the technological progress made by microelectronics manufacturers and designers, aimed at increasing the computing power and decreasing the size of microprocessors' and peripherals' logic.
Designing, implementing, and integrating the software components for these systems requires a direct approach to the hardware functionalities in most cases, where tasks are implemented in a single thread and there is no operating system to provide abstractions to access CPU features and external peripherals. For this reason, embedded development is considered a domain on its own in the universe of software development, where the developer's approach and workflow need to be adapted accordingly.
This book briefly explains the hardware architecture of a typical embedded system, introduces tools and methodologies to get started with development of a target architecture, and then guides the readers through the interaction with system features and peripheral interaction. Some areas, such as energy efficiency and connectivity, are addressed in more detail to give a closer view of the techniques used to design low-power and connected systems. Further on, a more complex design, incorporating a (simplified) real-time operating system, is built from the bottom up, starting from the implementation of single system components. Finally, an overview of valid existing open source operating systems designed for embedded devices is provided, including considerations about their internal implementation and indications about their ideal fields of application.
The discussion is often focused on specific security and safety mechanisms, by suggesting specific technologies aimed at improving the robustness of the system against programming errors in the application code, or even malicious attempts to compromise its integrity.