From 9377c4a8e7df1fa520fed7b02152b54633d8cee3 Mon Sep 17 00:00:00 2001 From: Jan Niehusmann Date: Sat, 14 Sep 2024 11:54:26 +0000 Subject: [PATCH] Use embassy-executor in rp235x examples --- rp235x-hal-examples/Cargo.toml | 8 +++++++- rp235x-hal-examples/src/bin/i2c_async.rs | 11 ++++++----- rp235x-hal-examples/src/bin/i2c_async_cancelled.rs | 11 ++++++----- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/rp235x-hal-examples/Cargo.toml b/rp235x-hal-examples/Cargo.toml index bb9f25f7e..baa8be660 100644 --- a/rp235x-hal-examples/Cargo.toml +++ b/rp235x-hal-examples/Cargo.toml @@ -29,10 +29,16 @@ futures = {version = "0.3.30", default-features = false, features = ["async-awai hd44780-driver = "0.4.0" heapless = "0.8.0" nb = "1.0" -nostd_async = {version = "0.6.1", features = ["cortex_m"]} panic-halt = "0.2.0" pio = "0.2.0" pio-proc = "0.2.0" rp235x-hal = {path = "../rp235x-hal", version = "0.2.0", features = ["binary-info", "critical-section-impl", "rt", "defmt"]} usb-device = "0.3.2" usbd-serial = "0.2.2" +static_cell = "2.1.0" + +[target.'cfg( target_arch = "arm" )'.dependencies] +embassy-executor = {version = "0.6", features = ["arch-cortex-m", "executor-thread"]} + +[target.'cfg( target_arch = "riscv32" )'.dependencies] +embassy-executor = {version = "0.6", features = ["arch-riscv32", "executor-thread"]} diff --git a/rp235x-hal-examples/src/bin/i2c_async.rs b/rp235x-hal-examples/src/bin/i2c_async.rs index 8b104bc99..c8f43975a 100644 --- a/rp235x-hal-examples/src/bin/i2c_async.rs +++ b/rp235x-hal-examples/src/bin/i2c_async.rs @@ -10,6 +10,7 @@ #![no_std] #![no_main] +use embassy_executor::Executor; // Ensure we halt the program on panic (if we don't mention this crate it won't // be linked) use panic_halt as _; @@ -29,6 +30,7 @@ use hal::{ // Import required types & traits. use embedded_hal_async::i2c::I2c; +use static_cell::StaticCell; /// Tell the Boot ROM about our application #[link_section = ".start_block"] @@ -48,6 +50,7 @@ unsafe fn I2C0_IRQ() { /// The function configures the RP235x peripherals, then performs a single I²C /// write to a fixed address. +#[embassy_executor::task] async fn demo() { let mut pac = hal::pac::Peripherals::take().unwrap(); @@ -112,11 +115,9 @@ async fn demo() { /// Entry point to our bare-metal application. #[hal::entry] fn main() -> ! { - let runtime = nostd_async::Runtime::new(); - let mut task = nostd_async::Task::new(demo()); - let handle = task.spawn(&runtime); - handle.join(); - unreachable!() + static EXECUTOR: StaticCell = StaticCell::new(); + let executor = EXECUTOR.init(Executor::new()); + executor.run(|spawner| spawner.spawn(demo()).unwrap()); } /// Program metadata for `picotool info` diff --git a/rp235x-hal-examples/src/bin/i2c_async_cancelled.rs b/rp235x-hal-examples/src/bin/i2c_async_cancelled.rs index f9b069389..76b276d59 100644 --- a/rp235x-hal-examples/src/bin/i2c_async_cancelled.rs +++ b/rp235x-hal-examples/src/bin/i2c_async_cancelled.rs @@ -15,6 +15,7 @@ use panic_halt as _; use core::task::Poll; +use embassy_executor::Executor; use embedded_hal_async::i2c::I2c; use futures::FutureExt; @@ -32,6 +33,7 @@ use hal::{ }; use defmt_rtt as _; +use static_cell::StaticCell; /// Tell the Boot ROM about our application #[link_section = ".start_block"] @@ -50,6 +52,7 @@ unsafe fn I2C0_IRQ() { /// The function configures the RP235x peripherals, then performs a single I²C /// write to a fixed address. +#[embassy_executor::task] async fn demo() { let mut pac = hal::pac::Peripherals::take().unwrap(); @@ -132,11 +135,9 @@ async fn demo() { /// Entry point to our bare-metal application. #[hal::entry] fn main() -> ! { - let runtime = nostd_async::Runtime::new(); - let mut task = nostd_async::Task::new(demo()); - let handle = task.spawn(&runtime); - handle.join(); - unreachable!() + static EXECUTOR: StaticCell = StaticCell::new(); + let executor = EXECUTOR.init(Executor::new()); + executor.run(|spawner| spawner.spawn(demo()).unwrap()); } /// Program metadata for `picotool info`