diff options
author | 2019-10-28 21:11:13 -0500 | |
---|---|---|
committer | 2019-10-28 21:11:13 -0500 | |
commit | a3783a6d3d90ab549766b13651ec8ff8013762c5 (patch) | |
tree | 29fc5a2ed50c73ebfeca65fd52ad241d9995677d /macros/src/codegen/hardware_tasks.rs | |
parent | f9b30a1ff87acd5f3c29a32369f0537e8e3d2bf1 (diff) | |
download | rtic-a3783a6d3d90ab549766b13651ec8ff8013762c5.tar.gz rtic-a3783a6d3d90ab549766b13651ec8ff8013762c5.tar.zst rtic-a3783a6d3d90ab549766b13651ec8ff8013762c5.zip |
WIP generators tasksgenerator-tasks
Diffstat (limited to 'macros/src/codegen/hardware_tasks.rs')
-rw-r--r-- | macros/src/codegen/hardware_tasks.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/macros/src/codegen/hardware_tasks.rs b/macros/src/codegen/hardware_tasks.rs index a9c2a2bd..81f0b62f 100644 --- a/macros/src/codegen/hardware_tasks.rs +++ b/macros/src/codegen/hardware_tasks.rs @@ -29,6 +29,46 @@ pub fn codegen( let mut user_tasks = vec![]; for (name, task) in &app.hardware_tasks { + // TODO split this big conditional to reuse code below + if task.is_generator { + let symbol = task.args.binds.clone(); + let gen_i = util::generator_ident(&name.to_string()); + const_app.push(quote!( + #[allow(non_snake_case)] + #[no_mangle] + unsafe fn #symbol() { + use core::ops::Generator; + + core::pin::Pin::new_unchecked(&mut *#gen_i.as_mut_ptr()).resume(); + } + )); + + let priority = task.args.priority; + // `${task}Resources` + if !task.args.resources.is_empty() { + let (item, constructor) = resources_struct::codegen( + Context::HardwareTask(name), + priority, + &mut false, + app, + analysis, + ); + + root.push(item); + + const_app.push(constructor); + } + + root.push(module::codegen( + Context::HardwareTask(name), + false, + app, + extra, + )); + + continue; + } + let core = task.args.core; let cfg_core = util::cfg_core(core, app.args.cores); |