From 67319480568a4548f2c784282c8844cd08cda7aa Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Wed, 6 Apr 2022 01:23:42 +0200 Subject: Add async Mutex. --- examples/nrf/src/bin/mutex.rs | 44 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 examples/nrf/src/bin/mutex.rs (limited to 'examples/nrf/src') diff --git a/examples/nrf/src/bin/mutex.rs b/examples/nrf/src/bin/mutex.rs new file mode 100644 index 000000000..db1b72f6d --- /dev/null +++ b/examples/nrf/src/bin/mutex.rs @@ -0,0 +1,44 @@ +#![no_std] +#![no_main] +#![feature(type_alias_impl_trait)] + +use defmt::{info, unwrap}; +use embassy::blocking_mutex::raw::ThreadModeRawMutex; +use embassy::executor::Spawner; +use embassy::mutex::Mutex; +use embassy::time::{Duration, Timer}; +use embassy_nrf::Peripherals; + +use defmt_rtt as _; // global logger +use panic_probe as _; + +static MUTEX: Mutex = Mutex::new(0); + +#[embassy::task] +async fn my_task() { + loop { + { + let mut m = MUTEX.lock().await; + info!("start long operation"); + *m += 1000; + + // Hold the mutex for a long time. + Timer::after(Duration::from_secs(1)).await; + info!("end long operation: count = {}", *m); + } + + Timer::after(Duration::from_secs(1)).await; + } +} + +#[embassy::main] +async fn main(spawner: Spawner, _p: Peripherals) { + unwrap!(spawner.spawn(my_task())); + + loop { + Timer::after(Duration::from_millis(300)).await; + let mut m = MUTEX.lock().await; + *m += 1; + info!("short operation: count = {}", *m); + } +} -- cgit