1. Introduction
    1. Hardware
    2. no_std
    3. Tooling
    4. Installation
      1. Linux
      2. MacOS
      3. Windows
      4. Verify Installation
  2. Getting started
    1. QEMU
    2. Hardware
    3. Memory-mapped Registers
    4. Semihosting
    5. Panicking
    6. Exceptions
    7. Interrupts
    8. IO
  3. Peripherals
    1. A first attempt in Rust
    2. The Borrow Checker
    3. Singletons
  4. Static Guarantees
    1. Typestate Programming
    2. Peripherals as State Machines
    3. Design Contracts
    4. Zero Cost Abstractions
  5. Portability
  6. Concurrency
  7. Collections
  8. Design Patterns
    1. HALs
      1. Checklist
      2. Naming
      3. Interoperability
      4. Predictability
      5. GPIO
  9. Tips for embedded C developers
  10. Interoperability
    1. A little C with your Rust
    2. A little Rust with your C
  11. Unsorted topics
    1. Optimizations: The speed size tradeoff
    2. Performing Math Functionality
  12. Appendix A: Glossary