diff options
Diffstat (limited to 'macros/src/codegen.rs')
-rw-r--r-- | macros/src/codegen.rs | 84 |
1 files changed, 25 insertions, 59 deletions
diff --git a/macros/src/codegen.rs b/macros/src/codegen.rs index 0cff5bbc..b9755368 100644 --- a/macros/src/codegen.rs +++ b/macros/src/codegen.rs @@ -22,35 +22,20 @@ mod util; // TODO document the syntax here or in `rtic-syntax` pub fn app(app: &App, analysis: &Analysis, extra: &Extra) -> TokenStream2 { let mut mod_app = vec![]; - let mut mod_app_imports = vec![]; let mut mains = vec![]; let mut root = vec![]; let mut user = vec![]; - let mut imports = vec![]; // Generate the `main` function let assertion_stmts = assertions::codegen(analysis); let pre_init_stmts = pre_init::codegen(&app, analysis, extra); - let (mod_app_init, root_init, user_init, user_init_imports, call_init) = - init::codegen(app, analysis, extra); + let (mod_app_init, root_init, user_init, call_init) = init::codegen(app, analysis, extra); let post_init_stmts = post_init::codegen(&app, analysis); - let (mod_app_idle, root_idle, user_idle, user_idle_imports, call_idle) = - idle::codegen(app, analysis, extra); - - if user_init.is_some() { - mod_app_imports.push(quote!( - use super::init; - )) - } - if user_idle.is_some() { - mod_app_imports.push(quote!( - use super::idle; - )) - } + let (mod_app_idle, root_idle, user_idle, call_idle) = idle::codegen(app, analysis, extra); user.push(quote!( #user_init @@ -58,11 +43,6 @@ pub fn app(app: &App, analysis: &Analysis, extra: &Extra) -> TokenStream2 { #user_idle )); - imports.push(quote!( - #(#user_init_imports)* - #(#user_idle_imports)* - )); - root.push(quote!( #(#root_init)* @@ -93,22 +73,13 @@ pub fn app(app: &App, analysis: &Analysis, extra: &Extra) -> TokenStream2 { } )); - let (mod_app_resources, mod_resources, mod_resources_imports) = - resources::codegen(app, analysis, extra); + let (mod_app_resources, mod_resources) = resources::codegen(app, analysis, extra); - let ( - mod_app_hardware_tasks, - root_hardware_tasks, - user_hardware_tasks, - user_hardware_tasks_imports, - ) = hardware_tasks::codegen(app, analysis, extra); + let (mod_app_hardware_tasks, root_hardware_tasks, user_hardware_tasks) = + hardware_tasks::codegen(app, analysis, extra); - let ( - mod_app_software_tasks, - root_software_tasks, - user_software_tasks, - user_software_tasks_imports, - ) = software_tasks::codegen(app, analysis, extra); + let (mod_app_software_tasks, root_software_tasks, user_software_tasks) = + software_tasks::codegen(app, analysis, extra); let mod_app_dispatchers = dispatchers::codegen(app, analysis, extra); let mod_app_timer_queue = timer_queue::codegen(app, analysis, extra); @@ -122,49 +93,44 @@ pub fn app(app: &App, analysis: &Analysis, extra: &Extra) -> TokenStream2 { let task_list = analysis.tasks.clone(); let mut tasks = vec![]; + if !task_list.is_empty() { tasks.push(quote!( - enum Tasks { + #[allow(non_camel_case_types)] + pub enum Tasks { #(#task_list),* } )); } quote!( - #(#user)* - - #(#user_hardware_tasks)* - - #(#user_software_tasks)* - - #(#root)* - - #mod_resources - - #(#root_hardware_tasks)* - - #(#root_software_tasks)* - - /// Unused - #(#tasks)* - /// Implementation details - mod #name { + pub mod #name { /// Always include the device crate which contains the vector table use #device as you_must_enable_the_rt_feature_for_the_pac_in_your_cargo_toml; - #(#imports)* + #(#user_imports)* /// User code from within the module #(#user_code)* /// User code end + #(#user)* + + #(#user_hardware_tasks)* + + #(#user_software_tasks)* + + #(#root)* + + #mod_resources - #(#user_hardware_tasks_imports)* + #(#root_hardware_tasks)* - #(#user_software_tasks_imports)* + #(#root_software_tasks)* - #(#mod_resources_imports)* + /// Unused + #(#tasks)* /// app module #(#mod_app)* |