mirror of
https://github.com/ferrous-systems/embedded-trainings-2020.git
synced 2024-06-17 04:30:41 +00:00
33778655e4
Has notes on PACs.
85 lines
2 KiB
Markdown
85 lines
2 KiB
Markdown
# Introduction
|
|
|
|
---
|
|
|
|
## A Layered Approach
|
|
|
|
When building Embedded Systems in Rust, we use Rust crates to help us build a modular system.
|
|
|
|
The elements are:
|
|
|
|
* The program you are writing
|
|
* The MCU are running on
|
|
* The PCB (or Board) your MCU is on
|
|
* The external devices connected to your MCU
|
|
|
|
---
|
|
|
|
## The Layers
|
|
|
|
To support these elements, we (usually) have these layers.
|
|
|
|
* Application
|
|
* Board Support
|
|
* External Drivers (e.g. SPI LCD Driver)
|
|
* Hardware Abstraction Layer Traits
|
|
* MCU Hardware Abstraction Layer Implementation
|
|
* MCU Peripheral Access Crate
|
|
* Core Peripherals
|
|
* Core Runtime
|
|
|
|
---
|
|
|
|
```mermaid
|
|
graph TB
|
|
app(Application<br/><tt>my_application</tt>)
|
|
bsc[Board Support<br/><tt>nrf52840_dk</tt>]
|
|
hal[MCU HAL Implementation<br/><tt>nrf52480_hal</tt>]
|
|
lcd_driver[SPI LCD Driver<br/><tt>ssd1306</tt>]
|
|
hal_traits[[HAL Traits<br/><tt>embedded_hal</tt>]]
|
|
pac[MCU PAC<br/><tt>nrf52840</tt>]
|
|
rt[Core Runtime<br/><tt>cortex_m_rt</tt>]
|
|
cp[Core Peripherals<br/><tt>cortex_m</tt>]
|
|
|
|
subgraph Key
|
|
note1[Embedded Working Group]
|
|
note2[nrf-rs]
|
|
note3[You]
|
|
note4[Others]
|
|
end
|
|
|
|
direction TB
|
|
app --> bsc
|
|
app & bsc --> hal
|
|
app --> lcd_driver
|
|
app & lcd_driver --> hal_traits
|
|
hal -- Implements --o hal_traits
|
|
app & hal --> pac
|
|
app & pac --> rt
|
|
app & pac & rt --> cp
|
|
|
|
class app binary;
|
|
class bsc library;
|
|
class lcd_driver library;
|
|
class hal mcu_library;
|
|
class pac mcu_library;
|
|
class hal_traits ewg_library;
|
|
class rt ewg_library;
|
|
class cp ewg_library;
|
|
|
|
class note1 ewg_library;
|
|
class note2 mcu_library;
|
|
class note3 binary;
|
|
class note4 library;
|
|
|
|
classDef binary fill:#fb8,stroke:#333,stroke-width:4px;
|
|
classDef library fill:#cf9,stroke:#333,stroke-width:2px;
|
|
classDef ewg_library fill:#f9c,stroke:#333,stroke-width:2px;
|
|
classDef mcu_library fill:#9cf,stroke:#333,stroke-width:2px;
|
|
```
|
|
---
|
|
|
|
## Don't worry!
|
|
|
|
There's a lot here. We're going to take it step by step, starting at the bottom.
|