aboutsummaryrefslogtreecommitdiff
path: root/macros/src/codegen/module.rs
diff options
context:
space:
mode:
Diffstat (limited to 'macros/src/codegen/module.rs')
-rw-r--r--macros/src/codegen/module.rs48
1 files changed, 25 insertions, 23 deletions
diff --git a/macros/src/codegen/module.rs b/macros/src/codegen/module.rs
index 1b21209f..2e51e7db 100644
--- a/macros/src/codegen/module.rs
+++ b/macros/src/codegen/module.rs
@@ -11,12 +11,11 @@ pub fn codegen(ctxt: Context, resources_tick: bool, app: &App, extra: &Extra) ->
let name = ctxt.ident(app);
- let core = ctxt.core(app);
let mut needs_instant = false;
let mut lt = None;
match ctxt {
- Context::Init(core) => {
- if app.uses_schedule(core) {
+ Context::Init => {
+ if app.uses_schedule() {
let m = extra.monotonic();
fields.push(quote!(
@@ -37,7 +36,7 @@ pub fn codegen(ctxt: Context, resources_tick: bool, app: &App, extra: &Extra) ->
));
}
- if extra.peripherals == Some(core) {
+ if extra.peripherals {
let device = extra.device;
fields.push(quote!(
@@ -48,13 +47,21 @@ pub fn codegen(ctxt: Context, resources_tick: bool, app: &App, extra: &Extra) ->
values.push(quote!(device: #device::Peripherals::steal()));
}
+ lt = Some(quote!('a));
+ fields.push(quote!(
+ /// Critical section token for init
+ pub cs: rtic::export::CriticalSection<#lt>
+ ));
+
+ values.push(quote!(cs: rtic::export::CriticalSection::new()));
+
values.push(quote!(core));
}
- Context::Idle(..) => {}
+ Context::Idle => {}
Context::HardwareTask(..) => {
- if app.uses_schedule(core) {
+ if app.uses_schedule() {
let m = extra.monotonic();
fields.push(quote!(
@@ -69,7 +76,7 @@ pub fn codegen(ctxt: Context, resources_tick: bool, app: &App, extra: &Extra) ->
}
Context::SoftwareTask(..) => {
- if app.uses_schedule(core) {
+ if app.uses_schedule() {
let m = extra.monotonic();
fields.push(quote!(
@@ -205,7 +212,7 @@ pub fn codegen(ctxt: Context, resources_tick: bool, app: &App, extra: &Extra) ->
values.push(quote!(spawn: Spawn { priority }));
} else {
- let instant_field = if app.uses_schedule(core) {
+ let instant_field = if app.uses_schedule() {
let m = extra.monotonic();
needs_instant = true;
@@ -252,27 +259,25 @@ pub fn codegen(ctxt: Context, resources_tick: bool, app: &App, extra: &Extra) ->
}
}
- if let Context::Init(core) = ctxt {
- let init = &app.inits[&core];
- if init.returns_late_resources {
- let late_resources = util::late_resources_ident(&init.name);
+ if let Context::Init = ctxt {
+ let init = &app.inits.first().unwrap();
+ let late_resources = util::late_resources_ident(&init.name);
- items.push(quote!(
- #[doc(inline)]
- pub use super::#late_resources as LateResources;
- ));
- }
+ items.push(quote!(
+ #[doc(inline)]
+ pub use super::#late_resources as LateResources;
+ ));
}
let doc = match ctxt {
- Context::Idle(_) => "Idle loop",
- Context::Init(_) => "Initialization function",
+ Context::Idle => "Idle loop",
+ Context::Init => "Initialization function",
Context::HardwareTask(_) => "Hardware task",
Context::SoftwareTask(_) => "Software task",
};
let core = if ctxt.is_init() {
- if app.uses_schedule(core) {
+ if app.uses_schedule() {
Some(quote!(core: rtic::Peripherals,))
} else {
Some(quote!(core: rtic::export::Peripherals,))
@@ -312,12 +317,9 @@ pub fn codegen(ctxt: Context, resources_tick: bool, app: &App, extra: &Extra) ->
));
if !items.is_empty() {
- let cfg_core = util::cfg_core(ctxt.core(app), app.args.cores);
-
quote!(
#[allow(non_snake_case)]
#[doc = #doc]
- #cfg_core
pub mod #name {
#(#items)*
}