#[rtic::app]
mod app {
#[shared]
struct Shared {
shared: u32,
}
#[local]
struct Local {}
#[init]
fn init(_: init::Context) -> (Shared, Local, init::Monotonics) {
task1::spawn().unwrap();
(Shared { shared: 0 }, Local {}, init::Monotonics())
}
#[task(shared = [shared])]
fn task1(mut c: task1::Context) {
println!("A");
c.shared.shared.lock(|shared| {
*shared += 1;
task2::spawn().unwrap();
println!("C - shared = {}", *shared);
task3::spawn().unwrap();
});
println!("F");
}
#[task(priority = 2, shared = [shared])]
fn task2(mut c: task2::Context) {
println!("B");
let shared = c.shared.shared.lock(|shared| {
*shared += 1;
*shared
});
println!("E - shared = {}", shared);
}
#[task(priority = 3)]
fn task3(_: task3::Context) {
println!("D");
}
}