In previous chapters, we mostly covered topics applicable to relatively powerful embedded systems that have megabytes of memory and run Linux operating systems. Now, we are going to explore the other side of the embedded system spectrum—microcontrollers.
As we discussed in the introduction, microcontrollers are commonly used to perform simple, often real-time tasks, such as collecting data or providing a high-level API to a specific device. Microcontrollers are inexpensive, consume little energy, and can work in a wide range of environmental conditions, making them a perfect choice for IoT applications.
The other side of their low cost is their capabilities. Normally, they have onboard memory that is measured in kilobytes and do not have hardware memory mapping. They do not run any operating system at all, or run a simple real-time operating...