5Embedded software development
- 5.1Cross-development environment
Covers the roles of the cross compiler, linker, and locator, which generate executable code on a host such as a PC for a target (embedded board); how to choose among ICE, JTAG, SWD, and emulators for debugging directly on the target hardware; and the judgment needed for real-hardware debugging in practice.
- 5.2Device drivers & firmware
Covers the role of device drivers, which abstract hardware register operations and interrupt handling, the bootloader, which brings up the system immediately after power-on, and the failsafe and rollback design needed for OTA (Over-The-Air) updates in the field.
- 5.3State-transition design & event-driven programming
Covers state-transition diagrams/tables for organizing embedded-device behavior, the trade-off between the event-driven approach, which reacts to external input, and the polling approach, which checks state at a fixed interval, and designing for exhaustiveness and exception transitions so no undefined transition is left behind.
- 5.4Interrupt handlers & resource management
Covers the design principle of keeping an ISR (interrupt service routine) short and deferring follow-up work, designing reentrant functions and using a critical section for mutual exclusion, and addressing memory exhaustion and leaks to protect limited stack/heap resources.

