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