In an embedded system, firmware is the software that directly interfaces with the microcontroller, controlling the system's function. The major forces driving the embedded firmware development process today are reduced development times, increased complexity, and the need to handle multiple tasks simultaneously. These forces translate into strenuous design requirements for embedded engineers and programmers. Many low-level embedded microcontroller designs have insufficient memory and/or architectural limitations that make the use of a real-time operating system impractical. The techniques presented in this book allow the design of robust multitasking firmware through the use of interleaved state machines. This book presents a complete overview of multitasking terminology and basic concepts. Practical criteria for task selection and state machine design are also discussed.Designing multitasking firmware is arduous, complex and fraught with potential for errors, and there is no one, "standard way to do it. This book will present a complete and well-organized design approach with examples and sample source code that designers can follow.* Covers every aspect of design from the system level to the component level, including system timing, communicating with the hardware, integration and testing.* Accompanying companion website contains the source code for the text examples and other useful design tools.