- 1. Introduction
- 1.1. Hardware
- 1.2. no_std
- 1.3. Tooling
- 1.4. Installation
- 1.4.1. Linux
- 1.4.2. MacOS
- 1.4.3. Windows
- 1.4.4. Verify Installation
- 2. Getting started
- 2.1. QEMU
- 2.2. Hardware
- 2.3. Memory-mapped Registers
- 2.4. Semihosting
- 2.5. Panicking
- 2.6. Exceptions
- 2.7. Interrupts
- 2.8. IO
- 3. Peripherals
- 3.1. A first attempt in Rust
- 3.2. The Borrow Checker
- 3.3. Singletons
- 4. Static Guarantees
- 4.1. Typestate Programming
- 4.2. Peripherals as State Machines
- 4.3. Design Contracts
- 4.4. Zero Cost Abstractions
- 5. Portability
- 6. Concurrency
- 7. Collections
- 8. Design Patterns
- 8.1. HALs
- 8.1.1. Checklist
- 8.1.2. Naming
- 8.1.3. Interoperability
- 8.1.4. Predictability
- 8.1.5. GPIO
- 9. Tips for embedded C developers
- 10. Interoperability
- 10.1. A little C with your Rust
- 10.2. A little Rust with your C
- 11. Unsorted topics
- 11.1. Optimizations: The speed size tradeoff
- 11.2. Performing Math Functionality
- Appendix A: Glossary