rtic/examples/declared_locals.rs

47 lines
1 KiB
Rust
Raw Normal View History

2021-09-22 13:22:45 +02:00
//! examples/declared_locals.rs
#![deny(unsafe_code)]
#![deny(warnings)]
#![no_main]
#![no_std]
use panic_semihosting as _;
2023-01-07 17:59:39 +01:00
#[rtic::app(device = lm3s6965)]
2021-09-22 13:22:45 +02:00
mod app {
use cortex_m_semihosting::debug;
#[shared]
struct Shared {}
#[local]
struct Local {}
#[init(local = [a: u32 = 0])]
2023-01-07 17:59:39 +01:00
fn init(cx: init::Context) -> (Shared, Local) {
2021-09-22 13:22:45 +02:00
// Locals in `#[init]` have 'static lifetime
let _a: &'static mut u32 = cx.local.a;
debug::exit(debug::EXIT_SUCCESS); // Exit QEMU simulator
2023-01-07 17:59:39 +01:00
(Shared {}, Local {})
2021-09-22 13:22:45 +02:00
}
#[idle(local = [a: u32 = 0])]
fn idle(cx: idle::Context) -> ! {
// Locals in `#[idle]` have 'static lifetime
let _a: &'static mut u32 = cx.local.a;
loop {}
}
2023-01-07 17:59:39 +01:00
#[task(binds = UART0, local = [a: u32 = 0])]
2021-09-22 13:22:45 +02:00
fn foo(cx: foo::Context) {
// Locals in `#[task]`s have a local lifetime
let _a: &mut u32 = cx.local.a;
// error: explicit lifetime required in the type of `cx`
// let _a: &'static mut u32 = cx.local.a;
}
}