diff --git a/examples/rtic_bare9.rs b/examples/rtic_bare9.rs index 495730ff8a2d7a0e09d3f220b5659ec985a226de..42e1a6e2197e382bc7a2f2c04132d96a69ac60b6 100644 --- a/examples/rtic_bare9.rs +++ b/examples/rtic_bare9.rs @@ -24,7 +24,11 @@ const APP: () = { // Late resources TX: Tx<USART2>, RX: Rx<USART2>, - } + #[init(0)] + corr: u8, + #[init(0)] + fel: u8, + } // init runs in an interrupt free section #[init] @@ -59,7 +63,7 @@ const APP: () = { let (tx, rx) = serial.split(); // Late resources - init::LateResources { TX: tx, RX: rx } + init::LateResources { TX: tx, RX: rx} } // idle may be interrupted by other interrupts/tasks in the system @@ -71,23 +75,49 @@ const APP: () = { } // capacity sets the size of the input buffer (# outstanding messages) - #[task(resources = [TX], priority = 1, capacity = 128)] + #[task(resources = [TX], priority = 2, capacity = 128)] fn rx(cx: rx::Context, data: u8) { let tx = cx.resources.TX; tx.write(data).unwrap(); + } + + #[task(resources = [fel,corr], priority = 1)] + fn trace(cx: trace::Context, worked: bool,data:u8,){ + match worked{ + true => { + *cx.resources.corr +=1; + rprintln!("Ok {:?}", data); + } + false =>{ + *cx.resources.fel +=1; + rprintln!("some error"); + } + } + rprintln!("correct {}", *cx.resources.corr); + rprintln!("errors {}", *cx.resources.fel); rprintln!("data {}", data); } // Task bound to the USART2 interrupt. - #[task(binds = USART2, priority = 2, resources = [RX], spawn = [rx])] + #[task(binds = USART2, priority = 3, resources = [RX], spawn = [rx, trace])] fn usart2(cx: usart2::Context) { let rx = cx.resources.RX; - let data = rx.read().unwrap(); - cx.spawn.rx(data).unwrap(); + match (rx.read()) { + Ok(data) => { + let _ = cx.spawn.trace(true,data); + cx.spawn.rx(data).unwrap(); + } + Err(err) => { + cx.spawn.trace(false,0).unwrap(); + } + } + //let data = rx.read().unwrap(); } extern "C" { fn EXTI0(); + fn USART1(); + fn USART3(); } };