From 719a5e20fe4fc6a2292065a73ab5bb5702db431e Mon Sep 17 00:00:00 2001 From: Alexandru RADOVICI <alexandru.radovici@upb.ro> Date: Thu, 20 Mar 2025 21:56:42 +0000 Subject: [PATCH] Update slides for Asynchronous Development --- slides/lectures/fils_en/04/slides.md | 4 ++-- slides/lectures/fils_en/05/slides.md | 4 ++-- slides/lectures/fils_en/06/slides.md | 4 ++-- slides/lectures/fils_en/07/slides.md | 4 ++-- .../lectures/resources/communication/slides.md | 10 +++++----- slides/lectures/resources/concurrency/slides.md | 4 ++-- slides/lectures/resources/executor/slides.md | 17 +++++++++-------- slides/lectures/resources/future/slides.md | 14 +++++++------- 8 files changed, 31 insertions(+), 30 deletions(-) diff --git a/slides/lectures/fils_en/04/slides.md b/slides/lectures/fils_en/04/slides.md index c2c9713..03459ea 100644 --- a/slides/lectures/fils_en/04/slides.md +++ b/slides/lectures/fils_en/04/slides.md @@ -11,7 +11,7 @@ drawings: defaults: foo: true transition: slide-left -title: MA - 05 - Asynchronous Development +title: MA - 04 - Asynchronous Development mdc: true layout: cover themeConfig: @@ -22,7 +22,7 @@ background: --- # Asynchronous Development -Lecture 5 +Lecture 4 --- --- diff --git a/slides/lectures/fils_en/05/slides.md b/slides/lectures/fils_en/05/slides.md index 2da2050..b46c46e 100644 --- a/slides/lectures/fils_en/05/slides.md +++ b/slides/lectures/fils_en/05/slides.md @@ -11,7 +11,7 @@ drawings: defaults: foo: true transition: slide-left -title: MA - 03 - UART & SPI +title: MA - 05 - UART & SPI mdc: true layout: cover themeConfig: @@ -22,7 +22,7 @@ background: --- # UART & SPI -Lecture 6 +Lecture 5 --- diff --git a/slides/lectures/fils_en/06/slides.md b/slides/lectures/fils_en/06/slides.md index 6483085..eee4ee1 100644 --- a/slides/lectures/fils_en/06/slides.md +++ b/slides/lectures/fils_en/06/slides.md @@ -11,7 +11,7 @@ drawings: defaults: foo: true transition: slide-left -title: MA - 07 - I2C & USB 2.0 +title: MA - 06 - I2C & USB 2.0 mdc: true layout: cover themeConfig: @@ -22,7 +22,7 @@ background: --- # I2C & USB 2.0 -Lecture 7 +Lecture 6 --- diff --git a/slides/lectures/fils_en/07/slides.md b/slides/lectures/fils_en/07/slides.md index 864f980..9df110d 100644 --- a/slides/lectures/fils_en/07/slides.md +++ b/slides/lectures/fils_en/07/slides.md @@ -11,7 +11,7 @@ drawings: defaults: foo: true transition: slide-left -title: MA - 03 - Exceptions and Interrupts +title: MA - 07 - Exceptions and Interrupts mdc: true layout: cover themeConfig: @@ -22,7 +22,7 @@ background: --- # Exceptions and Interrupts -Lecture 3 +Lecture 7 --- diff --git a/slides/lectures/resources/communication/slides.md b/slides/lectures/resources/communication/slides.md index 20a7d83..66ab5ab 100644 --- a/slides/lectures/resources/communication/slides.md +++ b/slides/lectures/resources/communication/slides.md @@ -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. | | [`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. | -| [`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. | +| [`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/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 [`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 flowchart LR @@ -166,7 +166,7 @@ flowchart LR # PubSubChannel 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 flowchart LR @@ -181,7 +181,7 @@ flowchart LR # 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 } static CHANNEL: Channel<ThreadModeRawMutex, LedState, 64> = Channel::new(); diff --git a/slides/lectures/resources/concurrency/slides.md b/slides/lectures/resources/concurrency/slides.md index a00a93d..66e5196 100644 --- a/slides/lectures/resources/concurrency/slides.md +++ b/slides/lectures/resources/concurrency/slides.md @@ -22,7 +22,7 @@ layout: two-cols } </style> -- MCUs are usually *single core*[^rp2040] +- MCUs are usually *single core*[^rp2350] - Tasks in parallel require an OS[^interrupts] - Tasks can be suspended at any time - **Switching** the task is **expensive** @@ -54,7 +54,7 @@ sequenceDiagram 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 --- diff --git a/slides/lectures/resources/executor/slides.md b/slides/lectures/resources/executor/slides.md index b1c101f..4a742b3 100644 --- a/slides/lectures/resources/executor/slides.md +++ b/slides/lectures/resources/executor/slides.md @@ -9,10 +9,10 @@ of Embassy # Bibliography 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 <div grid="~ cols-2 gap5"> @@ -32,9 +32,9 @@ for this section </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)] -async fn led_blink(mut led:Output<'static, PIN_X>) { +async fn led_blink(mut led: AnyPin) { loop { led.toogle(); Timer::after_secs(1).await; @@ -60,7 +60,7 @@ async fn main(spawner: Spawner) { </div> --- ---- + # Tasks can stop the executor <div grid="~ cols-2 gap5"> @@ -73,9 +73,9 @@ async fn main(spawner: Spawner) { </div> -``` {all|5-8|3-9} +```rust {5-8|3-9|all} #[embassy_executor::task] -async fn led_blink(mut led:Output<'static, PIN_X>) { +async fn led_blink(mut led: AnyPin) { loop { led.toogle(); // this does not execute anything @@ -114,6 +114,7 @@ async fn main(spawner: Spawner) { --- layout: two-cols --- + ## Priority Tasks <style> @@ -139,7 +140,7 @@ unsafe fn SWI_IRQ_0() { :: 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_MED: InterruptExecutor = InterruptExecutor::new(); static EXECUTOR_LOW: StaticCell<Executor> = StaticCell::new(); diff --git a/slides/lectures/resources/future/slides.md b/slides/lectures/resources/future/slides.md index 723a8ce..c9d5df8 100644 --- a/slides/lectures/resources/future/slides.md +++ b/slides/lectures/resources/future/slides.md @@ -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 where F: Future @@ -74,7 +74,7 @@ sequenceDiagram <div grid="~ cols-2 gap-5"> -```rust {all|1-4|6-9|11-18} +```rust {1-4|6-9|11-18|all} enum SleepStatus { SetAlarm, WaitForAlarm, @@ -97,7 +97,7 @@ impl Sleep { <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 { type Output = (); @@ -130,7 +130,7 @@ impl Future for Sleep { <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 { type Output = (); @@ -218,7 +218,7 @@ fn blink(led: Output<'static, PIN_X>) -> Blink { <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 { type Output = (); fn poll(&mut self) -> Poll<Self::Output> { @@ -257,7 +257,7 @@ impl Future for Blink { - it does not know how to execute them - executors are implemented into third party libraries -```rust {all|12|11,13,15|14} +```rust {12|11,13,15|14|all} use engine::execute; // Rust rewrites the function to a Future @@ -280,7 +280,7 @@ fn main() -> ! { --- # 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]; fn executor() { -- GitLab