diff options
author | 2020-10-22 21:36:32 +0200 | |
---|---|---|
committer | 2020-10-23 08:38:18 +0200 | |
commit | e8eca4be37a2fe1af25b203ace5e99b31fcc3972 (patch) | |
tree | c70a80e9bcacb54838f09141bd1d2b27e844760f /examples/big-struct-opt.rs | |
parent | b3aa9e99a975eca637582f31de20fe11ae8f7d64 (diff) | |
download | rtic-e8eca4be37a2fe1af25b203ace5e99b31fcc3972.tar.gz rtic-e8eca4be37a2fe1af25b203ace5e99b31fcc3972.tar.zst rtic-e8eca4be37a2fe1af25b203ace5e99b31fcc3972.zip |
Now all locks are symmetric
Test fixes
Fix test
Fix comment
Diffstat (limited to 'examples/big-struct-opt.rs')
-rw-r--r-- | examples/big-struct-opt.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/examples/big-struct-opt.rs b/examples/big-struct-opt.rs new file mode 100644 index 00000000..85ec5e61 --- /dev/null +++ b/examples/big-struct-opt.rs @@ -0,0 +1,48 @@ +//! examples/big-struct-opt.rs +//! +//! Example on how to initialize a large struct without needing to copy it via `LateResources`, +//! effectively saving stack space needed for the copies. + +#![no_main] +#![no_std] + +use panic_halt as _; + +/// Some big struct +pub struct BigStruct { + /// Big content + pub data: [u8; 2048], +} + +impl BigStruct { + fn new() -> Self { + BigStruct { data: [22; 2048] } + } +} + +#[rtic::app(device = lm3s6965)] +mod app { + use super::BigStruct; + use core::mem::MaybeUninit; + + #[resources] + struct Resources { + big_struct: &'static mut BigStruct, + } + + #[init] + fn init(_: init::Context) -> init::LateResources { + let big_struct = unsafe { + static mut BIG_STRUCT: MaybeUninit<BigStruct> = MaybeUninit::uninit(); + + // write directly into the static storage + BIG_STRUCT.as_mut_ptr().write(BigStruct::new()); + &mut *BIG_STRUCT.as_mut_ptr() + }; + + init::LateResources { + // assign the reference so we can use the resource + big_struct, + } + } +} |