Part 1 - Software Architecture Design Embedded System Design Philosophy Challenges Facing Embedded Developers Traditional Embedded Software Development The Age of Modeling, Simulation and Off-chip Development SOLID Design Principles Test Driven Development (TDD) Why Best Practices? Embedded Software Architecture Design Architect First, Code Second Architectural Layers Single vs Multicore Architectures Application Domain Decomposition Interface Design Principles Architectural Languages RTOS Application Design Tasks, Threads and Processes Task Decomposition Techniques Task Scheduling Algorithms Setting Task Priorities Schedule-ability using Rate Monotonic Analysis Designing Application Data Flow Producer, Consumer, Processor and Transfer Mechanisms Secure Application Design Platform Security Architecture (PSA) Security through Isolation TrustZone Memory map design Memory Protection Units (MPUs) Secure boot Secure bootloaders and OTAs Design Patterns pub / sub Rtos patterns Handling interrupts State machines Active objects Part 2 - Development Processes Software Quality Coding Standards Code Reviews Code Metrics Code Analysis (static vs dynamic) Software Testing and Verification Integration Testing Performance Testing Regression Testing Software Verification Results Testing of executable object code Code coverage analysis Test Reports Application Modeling and Simulation Modeling Methodologies Simulations Role wxWidgets Example Test Driven Development Overview Test Harnesses Code Coverage Test Design Continuous Integration / Continuous Deployment Process Overview Docker Jenkins Git Integrations Merge Process Deployment Part 3 - Where the Bits hit the Silicon Selecting a Microcontroller Traditional Techniques Modern Selection Process Selection Considerations KT Matrix Design and Use Code Implementation Techniques Interfaces Command Processing Task initialization Assertions Telemetry Diagnostic and Fault Handling Design failure mode and effect analysis (DFMEA) Fault Handling Strategies Diagnostic Tasks Error Checking Code (ECC) Watchdogs Application Optimization Models and Simulation versus Reality Scalability Maintenance Code size versus speed Compilation Settings Memory management The Right Tool for the Job Tracing Code Analyzers Protocol analysis Metric tools Open source versus commercial.
Embedded Software Design : A Practical Approach to Architecture, Processes, and Coding Techniques