diff options
Diffstat (limited to 'rtic-macros/src/codegen/pre_init.rs')
-rw-r--r-- | rtic-macros/src/codegen/pre_init.rs | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/rtic-macros/src/codegen/pre_init.rs b/rtic-macros/src/codegen/pre_init.rs new file mode 100644 index 00000000..a2d0e8c1 --- /dev/null +++ b/rtic-macros/src/codegen/pre_init.rs @@ -0,0 +1,24 @@ +use super::bindings::{pre_init_checks, pre_init_enable_interrupts}; +use crate::analyze::Analysis; +use crate::syntax::ast::App; +use proc_macro2::TokenStream as TokenStream2; +use quote::quote; + +/// Generates code that runs before `#[init]` +pub fn codegen(app: &App, analysis: &Analysis) -> Vec<TokenStream2> { + let mut stmts = vec![]; + + // Disable interrupts -- `init` must run with interrupts disabled + stmts.push(quote!(rtic::export::interrupt::disable();)); + + stmts.push(quote!( + // To set the variable in cortex_m so the peripherals cannot be taken multiple times + let mut core: rtic::export::Peripherals = rtic::export::Peripherals::steal().into(); + )); + + stmts.append(&mut pre_init_checks(app, analysis)); + + stmts.append(&mut pre_init_enable_interrupts(app, analysis)); + + stmts +} |