1. 1- Introduction
    1. Hardware
      1. Constraints
        1. Memory
        2. Speed
        3. Code space
        4. Power consumption
    2. Software
      1. Performance
        1. Deterministic
        2. Realtime
      2. Cross-compiled
      3. Cross-debugged
        1. Breakpoint
          1. Software
          2. 1- Modify memory loaded code
          3. 2- Insert 'stop' instruction
          4. RAM execution
          5. Hardware
          6. ROM/Flash execution
          7. 1- Load breakpoint into an internal register
          8. 2- Compare it with at each execution
          9. 3- Stop if matched.
          10. Side-effects
          11. Change
          12. Timing
          13. Bugs
          14. Intermittent
      4. Documentation
        1. What code does
        2. Not How it does
      5. Optimization
        1. Later
        2. Implement, test, then optimize
    3. Challenges
      1. Largest
        1. Change
    4. Design
      1. Principles
        1. Predict changes
        2. Flexibility
        3. Modularity
          1. How to break up a system
          2. Which part can change independently
          3. Example
          4. Sensor X talks over communication channel Y
          5. Both independent
          6. Hence separate sub-systems
        4. Encapsulation
    5. Life
      1. Conception
      2. Prototyping
      3. Board bring up
      4. Debugging
      5. Testing
      6. Release
      7. Maintenance