Embedded Software Development: The Open-Source Approach (Embedded Systems)
Embedded Software Development: The Open-Source Approach delivers a practical introduction to embedded software development, with a focus on open-source components. This programmer-centric book is written in a way that enables even novice practitioners to grasp the development process as a whole. Incorporating real code fragments and explicit, real-world open-source operating system references (in particular, FreeRTOS) throughout, the text: * Defines the role and purpose of embedded systems, describing their internal structure and interfacing with software development tools * Examines the inner workings of the GNU compiler collection (GCC)-based software development system or, in other words, toolchain * Presents software execution models that can be adopted profitably to model and express concurrency * Addresses the basic nomenclature, models, and concepts related to task-based scheduling algorithms * Shows how an open-source protocol stack can be integrated in an embedded system and interfaced with other software components * Analyzes the main components of the FreeRTOS Application Programming Interface (API), detailing the implementation of key operating system concepts * Discusses advanced topics such as formal verification, model checking, runtime checks, memory corruption, security, and dependability Embedded Software Development: The Open-Source Approach capitalizes on the authors’ extensive research on real-time operating systems and communications used in embedded applications, often carried out in strict cooperation with industry. Thus, the book serves as a springboard for further research.
About the Author
Ivan Cibrario Bertolotti received the Laurea degree (summa cum laude) in computer science from the University of Torino, Turin, Italy, in 1996. Since then, he has been a researcher with the National Research Council of Italy (CNR). Currently, he is with the CNR’s Institute of Electronics, Computer, and Telecommunication Engineering (IEIIT), Turin, Italy. His research interests include real-time operating system design and implementation, industrial communication systems and protocols, and formal methods for vulnerability and dependability analysis of distributed systems. His contributions in this area comprise both theoretical work and practical applications, carried out in cooperation with leading Italian and international companies. He taught several courses on real-time operating systems at Politecnico di Torino, Turin, Italy, from 2003 until 2013, as well as a PhD degree course at the University of Padova in 2009. He regularly serves as a technical referee for the main international conferences and journals on industrial informatics, factory automation, and communication. He has been an IEEE member since 2006. Tingting Hu holds a master’s degree in computer engineering and a PhD degree in computer and control engineering, both from Politecnico di Torino, Turin, Italy. Since 2010, she has been a research fellow with the National Research Council of Italy (CNR). Currently, she is with the CNR’s Institute of Electronics, Computer, and Telecommunication Engineering (IEIIT), Turin, Italy. Her main research interests are the design and implementation of real-time operating systems and communication protocols, focusing on deterministic and flexible execution and communication for distributed real-time embedded systems. A significant amount of her research activities are carried out in strict collaboration with industry. She is actively involved in several regional and national industrial research projects in the context of the Italian “Factory of the Future” framework program. Moreover, in 2014 she taught a postgraduate-level course about real-time operating systems and open-source software for embedded applications aimed at company technical managers. She has been an IEEE member since 2011 and serves as technical referee for several primary conferences in her research area.
Table of Contents
Introduction BASICS OF EMBEDDED SOFTWARE DEVELOPMENT Embedded Applications and Their Requirements Role and Purpose of Embedded Systems Microcontrollers and Their Internal Structure General-Purpose Processors versus Microcontrollers Embedded Software Development Process Summary GCC-Based Software Development Tools Overview Compiler Driver Workflow C Preprocessor Workflow The Linker The C Runtime Library Configuring and Building Open-Source Software Build Process Management: GNU Make Summary Execution Models for Embedded Systems The Cyclic Executive Major and Minor Cycles Task Splitting and Secondary Schedules Task-Based Scheduling Task State Diagram Race Conditions in Task-Based Scheduling Summary Concurrent Programming Techniques Task Management Time and Delays Semaphores Message Passing Summary Scheduling Algorithms and Analysis Scheduling Algorithms for Real-Time Execution Scheduling Analysis Summary Configuration and Usage of Open-Source Protocol Stacks Introduction to the LwIP Protocol Stack Operating System Adaptation Layer Configuration Options Netconn Interface Network Buffer Management POSIX Networking Interface Summary Device Driver Development General Structure of a Device Driver Interrupt Handling Device Driver Interfaces Synchronization Issues Example: Ethernet Device Driver Summary Portable Software Portability in Embedded Software Development Portability Issues in C-Language Development Application Programming Interfaces GCC Extensions to the C Language Summary The FreeRTOS Porting Layer General Information Basic Data Types Time Representation and Architectural Details Context Switch Interrupt Handling and Critical Regions Task Stack Initialization Tick Timer Architecture-Dependent Scheduler Startup Summary Performance and Footprint at the Toolchain Level Overview of the GCC Workflow and Optimizations Optimization-Related Compiler Options Architecture-Dependent Compiler Options Source-Level Optimization: A Case Study Summary Example: A Modbus TCP Device Toolchain and Operating System General Firmware Structure Modbus Slave Protocol Stack USB-Based Filesystem Application Code Performance and Footprint Summary ADVANCED TOPICS Model Checking of Distributed and Concurrent Systems Introduction The SPIN Model Checker The Promela Modeling Language Property Specification Performance Hints Summary Model Checking: An Example Introduction Distributed Master Election Protocol Formal Promela Protocol Model Formal Verification Results Summary Memory Protection Techniques Memory Management Units (MMUS) Memory Protection Units (MPUS) MPUS versus MMUS Memory Checksumming CRC Calculation Data Structure Marking Stack Management and Overflow Detection Summary Security and Dependability Aspects Introduction to Splint Basic Checks Memory Management Buffer Overflows Function Interface Annotations Summary References
Out of stock