aboutsummaryrefslogtreecommitdiff
path: root/examples/resource.rs
diff options
context:
space:
mode:
authorGravatar Jorge Aparicio <jorge.aparicio@ferrous-systems.com> 2021-07-21 15:46:09 +0200
committerGravatar Jorge Aparicio <jorge.aparicio@ferrous-systems.com> 2021-07-21 15:55:14 +0200
commit6bf1c76d842b40cd1b24b4a517e42e624ade836f (patch)
tree249760c56937bd05536983168c3822e8e89a71a9 /examples/resource.rs
parent2f3b5cba805d7e7b736869249f46298e59bc944d (diff)
downloadrtic-6bf1c76d842b40cd1b24b4a517e42e624ade836f.tar.gz
rtic-6bf1c76d842b40cd1b24b4a517e42e624ade836f.tar.zst
rtic-6bf1c76d842b40cd1b24b4a517e42e624ade836f.zip
book/resources: do not use the lock API in the very first example
instead stick to `#[local]` resources
Diffstat (limited to 'examples/resource.rs')
-rw-r--r--examples/resource.rs65
1 files changed, 39 insertions, 26 deletions
diff --git a/examples/resource.rs b/examples/resource.rs
index 2c7dffe3..260f6753 100644
--- a/examples/resource.rs
+++ b/examples/resource.rs
@@ -13,55 +13,68 @@ mod app {
use lm3s6965::Interrupt;
#[shared]
- struct Shared {
- shared: u32,
- }
+ struct Shared {}
#[local]
- struct Local {}
+ struct Local {
+ local_to_uart0: i64,
+ local_to_uart1: i64,
+ }
#[init]
fn init(_: init::Context) -> (Shared, Local, init::Monotonics) {
rtic::pend(Interrupt::UART0);
rtic::pend(Interrupt::UART1);
- (Shared { shared: 0 }, Local {}, init::Monotonics())
+ (
+ Shared {},
+ Local {
+ local_to_uart0: 0,
+ local_to_uart1: 0,
+ },
+ init::Monotonics(),
+ )
}
- // `shared` cannot be accessed from this context
+ // `#[local]` resources cannot be accessed from this context
#[idle]
fn idle(_cx: idle::Context) -> ! {
debug::exit(debug::EXIT_SUCCESS);
- // error: no `shared` field in `idle::Context`
- // _cx.shared.shared += 1;
+ // error: no `local` field in `idle::Context`
+ // _cx.local.local_to_uart0 += 1;
+
+ // error: no `local` field in `idle::Context`
+ // _cx.local.local_to_uart1 += 1;
loop {
cortex_m::asm::nop();
}
}
- // `shared` can be accessed from this context
+ // `local_to_uart0` can only be accessed from this context
// defaults to priority 1
- #[task(binds = UART0, shared = [shared])]
- fn uart0(mut cx: uart0::Context) {
- let shared = cx.shared.shared.lock(|shared| {
- *shared += 1;
- *shared
- });
-
- hprintln!("UART0: shared = {}", shared).unwrap();
+ #[task(binds = UART0, local = [local_to_uart0])]
+ fn uart0(cx: uart0::Context) {
+ *cx.local.local_to_uart0 += 1;
+ let local_to_uart0 = cx.local.local_to_uart0;
+
+ // error: no `local_to_uart1` field in `uart0::LocalResources`
+ cx.local.local_to_uart1 += 1;
+
+ hprintln!("UART0: local_to_uart0 = {}", local_to_uart0).unwrap();
}
- // `shared` can be accessed from this context
+ // `shared` can only be accessed from this context
// explicitly set to priority 2
- #[task(binds = UART1, shared = [shared], priority = 2)]
- fn uart1(mut cx: uart1::Context) {
- let shared = cx.shared.shared.lock(|shared| {
- *shared += 1;
- *shared
- });
-
- hprintln!("UART1: shared = {}", shared).unwrap();
+ #[task(binds = UART1, local = [local_to_uart1], priority = 2)]
+ fn uart1(cx: uart1::Context) {
+ *cx.local.local_to_uart1 += 1;
+ let local_to_uart1 = cx.local.local_to_uart1;
+
+ // error: no `local_to_uart0` field in `uart1::LocalResources`
+ // cx.local.local_to_uart0 += 1;
+
+ hprintln!("UART1: local_to_uart1 = {}", local_to_uart1).unwrap();
}
}