diff options
Diffstat (limited to 'macros/src/codegen.rs')
-rw-r--r-- | macros/src/codegen.rs | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/macros/src/codegen.rs b/macros/src/codegen.rs index 167ba500..de11cce4 100644 --- a/macros/src/codegen.rs +++ b/macros/src/codegen.rs @@ -66,9 +66,17 @@ pub fn app(app: &App, analysis: &Analysis, extra: &Extra) -> TokenStream2 { #(#pre_init_stmts)* - #call_init + #[inline(never)] + fn __rtic_init_resources<F>(f: F) where F: FnOnce() { + f(); + } + + // Wrap late_init_stmts in a function to ensure that stack space is reclaimed. + __rtic_init_resources(||{ + #call_init - #(#post_init_stmts)* + #(#post_init_stmts)* + }); #call_idle } @@ -111,7 +119,15 @@ pub fn app(app: &App, analysis: &Analysis, extra: &Extra) -> TokenStream2 { ); let user_imports = &app.user_imports; + let default_monotonic = if monotonic.args.default { + quote!(pub use #name::now;) + } else { + quote!() + }; + quote! { + #default_monotonic + #[doc = #doc] #[allow(non_snake_case)] pub mod #name { @@ -147,6 +163,11 @@ pub fn app(app: &App, analysis: &Analysis, extra: &Extra) -> TokenStream2 { /// Holds static methods for each monotonic. pub mod monotonics { + #( + #[allow(unused_imports)] + #user_imports + )* + #(#monotonic_parts)* } ) |