aboutsummaryrefslogtreecommitdiff
path: root/macros/src/codegen.rs
diff options
context:
space:
mode:
Diffstat (limited to 'macros/src/codegen.rs')
-rw-r--r--macros/src/codegen.rs25
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)*
}
)