Skip to content
Snippets Groups Projects
Commit 52a43e7f authored by Alexandru RADOVICI's avatar Alexandru RADOVICI
Browse files

Merge branch 'slides/fils_en/04' into 'main'

Update slides for Asynchronous Development

See merge request pmrust/pmrust.pages.upb.ro!61
parents a4b13ba5 719a5e20
No related branches found
No related tags found
1 merge request!61Update slides for Asynchronous Development
Pipeline #106915 passed
...@@ -11,7 +11,7 @@ drawings: ...@@ -11,7 +11,7 @@ drawings:
defaults: defaults:
foo: true foo: true
transition: slide-left transition: slide-left
title: MA - 05 - Asynchronous Development title: MA - 04 - Asynchronous Development
mdc: true mdc: true
layout: cover layout: cover
themeConfig: themeConfig:
...@@ -22,7 +22,7 @@ background: ...@@ -22,7 +22,7 @@ background:
--- ---
# Asynchronous Development # Asynchronous Development
Lecture 5 Lecture 4
--- ---
--- ---
......
...@@ -11,7 +11,7 @@ drawings: ...@@ -11,7 +11,7 @@ drawings:
defaults: defaults:
foo: true foo: true
transition: slide-left transition: slide-left
title: MA - 03 - UART & SPI title: MA - 05 - UART & SPI
mdc: true mdc: true
layout: cover layout: cover
themeConfig: themeConfig:
...@@ -22,7 +22,7 @@ background: ...@@ -22,7 +22,7 @@ background:
--- ---
# UART & SPI # UART & SPI
Lecture 6 Lecture 5
--- ---
......
...@@ -11,7 +11,7 @@ drawings: ...@@ -11,7 +11,7 @@ drawings:
defaults: defaults:
foo: true foo: true
transition: slide-left transition: slide-left
title: MA - 07 - I2C & USB 2.0 title: MA - 06 - I2C & USB 2.0
mdc: true mdc: true
layout: cover layout: cover
themeConfig: themeConfig:
...@@ -22,7 +22,7 @@ background: ...@@ -22,7 +22,7 @@ background:
--- ---
# I2C & USB 2.0 # I2C & USB 2.0
Lecture 7 Lecture 6
--- ---
......
...@@ -11,7 +11,7 @@ drawings: ...@@ -11,7 +11,7 @@ drawings:
defaults: defaults:
foo: true foo: true
transition: slide-left transition: slide-left
title: MA - 03 - Exceptions and Interrupts title: MA - 07 - Exceptions and Interrupts
mdc: true mdc: true
layout: cover layout: cover
themeConfig: themeConfig:
...@@ -22,7 +22,7 @@ background: ...@@ -22,7 +22,7 @@ background:
--- ---
# Exceptions and Interrupts # Exceptions and Interrupts
Lecture 3 Lecture 7
--- ---
......
...@@ -119,8 +119,8 @@ Embassy provides four types of channels synchronized using `Mutex`s ...@@ -119,8 +119,8 @@ Embassy provides four types of channels synchronized using `Mutex`s
|-|-| |-|-|
| [`Channel`](https://docs.embassy.dev/embassy-sync/git/default/channel/struct.Channel.html) | A Multiple Producer Multiple Consumer (MPMC) channel. Each message is only received by a single consumer. | | [`Channel`](https://docs.embassy.dev/embassy-sync/git/default/channel/struct.Channel.html) | A Multiple Producer Multiple Consumer (MPMC) channel. Each message is only received by a single consumer. |
| [`PriorityChannel`](https://docs.embassy.dev/embassy-sync/git/default/priority_channel/struct.PriorityChannel.html) | A Multiple Producer Multiple Consumer (MPMC) channel. Each message is only received by a single consumer. Higher priority items are shifted to the front of the channel. | | [`PriorityChannel`](https://docs.embassy.dev/embassy-sync/git/default/priority_channel/struct.PriorityChannel.html) | A Multiple Producer Multiple Consumer (MPMC) channel. Each message is only received by a single consumer. Higher priority items are shifted to the front of the channel. |
| [`Signal`](https://docs.embassy.dev/embassy-sync/git/default/pubsub/struct.PubSubChannel.html) | Signalling latest value to a single consumer. | | [`Signal`](https://docs.embassy.dev/embassy-sync/git/default/signal/struct.Signal.html) | Signalling latest value to a single consumer. |
| [`PubSubChannel`](https://docs.embassy.dev/embassy-sync/git/default/signal/struct.Signal.html) | A broadcast channel (publish-subscribe) channel. Each message is received by all consumers. | | [`PubSubChannel`](https://docs.embassy.dev/embassy-sync/git/default/pubsub/struct.PubSubChannel.html) | A broadcast channel (publish-subscribe) channel. Each message is received by all consumers. |
--- ---
--- ---
...@@ -129,7 +129,7 @@ sends data from one task to another ...@@ -129,7 +129,7 @@ sends data from one task to another
[`Channel`](https://docs.embassy.dev/embassy-sync/git/default/channel/struct.Channel.html) - A Multiple Producer Multiple Consumer (MPMC) channel. Each message is only received by a single consumer. [`Channel`](https://docs.embassy.dev/embassy-sync/git/default/channel/struct.Channel.html) - A Multiple Producer Multiple Consumer (MPMC) channel. Each message is only received by a single consumer.
[`Signal`](https://docs.embassy.dev/embassy-sync/git/default/pubsub/struct.PubSubChannel.html) - Signalling latest value to a single consumer. [`Signal`](https://docs.embassy.dev/embassy-sync/git/default/signal/struct.Signal.html) - Signalling latest value to a single consumer.
```mermaid ```mermaid
flowchart LR flowchart LR
...@@ -166,7 +166,7 @@ flowchart LR ...@@ -166,7 +166,7 @@ flowchart LR
# PubSubChannel # PubSubChannel
sends data from one task to all receiver tasks sends data from one task to all receiver tasks
[`PubSubChannel`](https://docs.embassy.dev/embassy-sync/git/default/signal/struct.Signal.html) - A broadcast channel (publish-subscribe) channel. Each message is received by all consumers. [`PubSubChannel`](https://docs.embassy.dev/embassy-sync/git/default/pubsub/struct.PubSubChannel.html) - A broadcast channel (publish-subscribe) channel. Each message is received by all consumers.
```mermaid ```mermaid
flowchart LR flowchart LR
...@@ -181,7 +181,7 @@ flowchart LR ...@@ -181,7 +181,7 @@ flowchart LR
# Channel Example # Channel Example
```rust{all|1|2|5,7,14,17-25|5,8-14} ```rust{1|2|5,7,14,17-25|5,8-14|all}
enum LedState { On, Off } enum LedState { On, Off }
static CHANNEL: Channel<ThreadModeRawMutex, LedState, 64> = Channel::new(); static CHANNEL: Channel<ThreadModeRawMutex, LedState, 64> = Channel::new();
......
...@@ -22,7 +22,7 @@ layout: two-cols ...@@ -22,7 +22,7 @@ layout: two-cols
} }
</style> </style>
- MCUs are usually *single core*[^rp2040] - MCUs are usually *single core*[^rp2350]
- Tasks in parallel require an OS[^interrupts] - Tasks in parallel require an OS[^interrupts]
- Tasks can be suspended at any time - Tasks can be suspended at any time
- **Switching** the task is **expensive** - **Switching** the task is **expensive**
...@@ -54,7 +54,7 @@ sequenceDiagram ...@@ -54,7 +54,7 @@ sequenceDiagram
end end
``` ```
[^rp2040]: RP2040 is a dual core MCU, we use only one core [^rp2350]: RP2350 is a dual core MCU, we use only one core
[^interrupts]: Running in an ISR is not considered a normal task [^interrupts]: Running in an ISR is not considered a normal task
--- ---
......
...@@ -9,10 +9,10 @@ of Embassy ...@@ -9,10 +9,10 @@ of Embassy
# Bibliography # Bibliography
for this section for this section
**Embassy Documentation**, *[Embassy executor](https://embassy.dev/book/dev/runtime.html)* **Embassy Documentation**, *[Embassy executor](https://embassy.dev/book/#_embassy_executor)*
--- ---
---
# Tasks # Tasks
<div grid="~ cols-2 gap5"> <div grid="~ cols-2 gap5">
...@@ -32,9 +32,9 @@ for this section ...@@ -32,9 +32,9 @@ for this section
</div> </div>
```rust {all|9-22|1-7|18-21|19|3-6|4|5} ```rust {9-22|1-7|18-21|19|3-6|4|5|all}
#[embassy_executor::task(pool_size = 2)] #[embassy_executor::task(pool_size = 2)]
async fn led_blink(mut led:Output<'static, PIN_X>) { async fn led_blink(mut led: AnyPin) {
loop { loop {
led.toogle(); led.toogle();
Timer::after_secs(1).await; Timer::after_secs(1).await;
...@@ -60,7 +60,7 @@ async fn main(spawner: Spawner) { ...@@ -60,7 +60,7 @@ async fn main(spawner: Spawner) {
</div> </div>
--- ---
---
# Tasks can stop the executor # Tasks can stop the executor
<div grid="~ cols-2 gap5"> <div grid="~ cols-2 gap5">
...@@ -73,9 +73,9 @@ async fn main(spawner: Spawner) { ...@@ -73,9 +73,9 @@ async fn main(spawner: Spawner) {
</div> </div>
``` {all|5-8|3-9} ```rust {5-8|3-9|all}
#[embassy_executor::task] #[embassy_executor::task]
async fn led_blink(mut led:Output<'static, PIN_X>) { async fn led_blink(mut led: AnyPin) {
loop { loop {
led.toogle(); led.toogle();
// this does not execute anything // this does not execute anything
...@@ -114,6 +114,7 @@ async fn main(spawner: Spawner) { ...@@ -114,6 +114,7 @@ async fn main(spawner: Spawner) {
--- ---
layout: two-cols layout: two-cols
--- ---
## Priority Tasks ## Priority Tasks
<style> <style>
...@@ -139,7 +140,7 @@ unsafe fn SWI_IRQ_0() { ...@@ -139,7 +140,7 @@ unsafe fn SWI_IRQ_0() {
:: right :: :: right ::
```rust {all|5,6,22|1,7-10|2,12-15|3,17-21} ```rust {5,6,22|1,7-10|2,12-15|3,17-21|all}
static EXECUTOR_HIGH: InterruptExecutor = InterruptExecutor::new(); static EXECUTOR_HIGH: InterruptExecutor = InterruptExecutor::new();
static EXECUTOR_MED: InterruptExecutor = InterruptExecutor::new(); static EXECUTOR_MED: InterruptExecutor = InterruptExecutor::new();
static EXECUTOR_LOW: StaticCell<Executor> = StaticCell::new(); static EXECUTOR_LOW: StaticCell<Executor> = StaticCell::new();
......
...@@ -33,7 +33,7 @@ trait Future { ...@@ -33,7 +33,7 @@ trait Future {
} }
``` ```
```rust {all|5,10|6|6,7|6|6,7|6|6,8|1,8}{lines: false} ```rust {5,10|6|6,7|6|6,7|6|6,8|1,8|all}{lines: false}
fn execute<F>(mut f: F) -> F::Output fn execute<F>(mut f: F) -> F::Output
where where
F: Future F: Future
...@@ -74,7 +74,7 @@ sequenceDiagram ...@@ -74,7 +74,7 @@ sequenceDiagram
<div grid="~ cols-2 gap-5"> <div grid="~ cols-2 gap-5">
```rust {all|1-4|6-9|11-18} ```rust {1-4|6-9|11-18|all}
enum SleepStatus { enum SleepStatus {
SetAlarm, SetAlarm,
WaitForAlarm, WaitForAlarm,
...@@ -97,7 +97,7 @@ impl Sleep { ...@@ -97,7 +97,7 @@ impl Sleep {
<v-click> <v-click>
```rust {all|1,20|1,2,20|4,19|5,18|6-10|11-17|11,12,13|11,14,15}{lines: false} ```rust {1,20|1,2,20|4,19|5,18|6-10|11-17|11,12,13|11,14,15|all}{lines: false}
impl Future for Sleep { impl Future for Sleep {
type Output = (); type Output = ();
...@@ -130,7 +130,7 @@ impl Future for Sleep { ...@@ -130,7 +130,7 @@ impl Future for Sleep {
<div grid="~ cols-2 gap-5"> <div grid="~ cols-2 gap-5">
```rust {all|1,20|1,2,20|4,19|5,18|6-10|11-17|11,12,13|11,14,15}{lines: false} ```rust {1,20|1,2,20|4,19|5,18|6-10|11-17|11,12,13|11,14,15|all}{lines: false}
impl Future for Sleep { impl Future for Sleep {
type Output = (); type Output = ();
...@@ -218,7 +218,7 @@ fn blink(led: Output<'static, PIN_X>) -> Blink { ...@@ -218,7 +218,7 @@ fn blink(led: Output<'static, PIN_X>) -> Blink {
<v-click> <v-click>
```rust {4-23|5-22|5,6-10,22|5,11-17,22|12-14|5,11-17,22|12,14,15,16|5,18-21,22}{lines: false} ```rust {4-23|5-22|5,6-10,22|5,11-17,22|12-14|5,11-17,22|12,14,15,16|5,18-21,22|all}{lines: false}
impl Future for Blink { impl Future for Blink {
type Output = (); type Output = ();
fn poll(&mut self) -> Poll<Self::Output> { fn poll(&mut self) -> Poll<Self::Output> {
...@@ -257,7 +257,7 @@ impl Future for Blink { ...@@ -257,7 +257,7 @@ impl Future for Blink {
- it does not know how to execute them - it does not know how to execute them
- executors are implemented into third party libraries - executors are implemented into third party libraries
```rust {all|12|11,13,15|14} ```rust {12|11,13,15|14|all}
use engine::execute; use engine::execute;
// Rust rewrites the function to a Future // Rust rewrites the function to a Future
...@@ -280,7 +280,7 @@ fn main() -> ! { ...@@ -280,7 +280,7 @@ fn main() -> ! {
--- ---
# Executor # Executor
```rust {all|1|4-16|5-12|14,15} ```rust {1|4-16|5-12|14,15|all}
static TASKS: [Option<impl Future>; N] = [None, N]; static TASKS: [Option<impl Future>; N] = [None, N];
fn executor() { fn executor() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment