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.rs84
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)*