diff options
| author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-10-15 14:15:35 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-15 14:15:35 +0000 |
| commit | ee0885063d5b1cc4eddd3918ff425796f6213464 (patch) | |
| tree | 7073205b076f168b1c6f5782a278abf11eb7746f /macros/src | |
| parent | 1db5faad62c89cff19d2a94c8ce7b98bac9439ac (diff) | |
| parent | 48abc26e8577e6b57c46dce40e63022fac2c9375 (diff) | |
Merge #394
394: Detect if the rt flag is defined in the PAC/HAL r=AfoHT a=korken89
This stops RTIC applications from compiling if one has forgotten to set the `rt` flag in the PAC/HAL.
The error:
```
error[E0433]: failed to resolve: could not find `interrupt` in `you_must_enable_the_rt_feature_for_the_pac_in_your_cargo_toml`
--> src/main.rs:8:1
|
8 | #[rtic::app(device = stm32l4xx_hal::pac)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ could not find `interrupt` in `you_must_enable_the_rt_feature_for_the_pac_in_your_cargo_toml`
|
= note: this error originates in an attribute macro (in Nightly builds, run with -Z macro-backtrace for more info)
```
Co-authored-by: Emil Fresk <emil.fresk@gmail.com>
Diffstat (limited to 'macros/src')
| -rw-r--r-- | macros/src/codegen.rs | 2 | ||||
| -rw-r--r-- | macros/src/codegen/pre_init.rs | 4 | ||||
| -rw-r--r-- | macros/src/codegen/spawn_body.rs | 5 | ||||
| -rw-r--r-- | macros/src/codegen/timer_queue.rs | 3 | ||||
| -rw-r--r-- | macros/src/codegen/util.rs | 2 |
5 files changed, 7 insertions, 9 deletions
diff --git a/macros/src/codegen.rs b/macros/src/codegen.rs index f230d39..e89776c 100644 --- a/macros/src/codegen.rs +++ b/macros/src/codegen.rs @@ -144,7 +144,7 @@ pub fn app(app: &App, analysis: &Analysis, extra: &Extra) -> TokenStream2 { /// Implementation details mod #name { /// Always include the device crate which contains the vector table - use #device as _; + use #device as you_must_enable_the_rt_feature_for_the_pac_in_your_cargo_toml; #(#imports)* #(#user_imports)* diff --git a/macros/src/codegen/pre_init.rs b/macros/src/codegen/pre_init.rs index 9c5f35e..2aaf9eb 100644 --- a/macros/src/codegen/pre_init.rs +++ b/macros/src/codegen/pre_init.rs @@ -53,14 +53,14 @@ pub fn codegen(app: &App, analysis: &Analysis, extra: &Extra) -> Vec<TokenStream let interrupt = util::interrupt_ident(); stmts.push(quote!( core.NVIC.set_priority( - #device::#interrupt::#name, + you_must_enable_the_rt_feature_for_the_pac_in_your_cargo_toml::#interrupt::#name, rtic::export::logical2hw(#priority, #nvic_prio_bits), ); )); // NOTE unmask the interrupt *after* setting its priority: changing the priority of a pended // interrupt is implementation defined - stmts.push(quote!(rtic::export::NVIC::unmask(#device::#interrupt::#name);)); + stmts.push(quote!(rtic::export::NVIC::unmask(you_must_enable_the_rt_feature_for_the_pac_in_your_cargo_toml::#interrupt::#name);)); } // Set exception priorities diff --git a/macros/src/codegen/spawn_body.rs b/macros/src/codegen/spawn_body.rs index 4ecd075..f29393a 100644 --- a/macros/src/codegen/spawn_body.rs +++ b/macros/src/codegen/spawn_body.rs @@ -10,7 +10,7 @@ pub fn codegen( name: &Ident, app: &App, analysis: &Analysis, - extra: &Extra, + _extra: &Extra, ) -> TokenStream2 { let spawnee = &app.software_tasks[name]; let priority = spawnee.args.priority; @@ -42,12 +42,11 @@ pub fn codegen( ) }; - let device = extra.device; let enum_ = util::interrupt_ident(); let interrupt = &analysis.interrupts.get(&priority); let pend = { quote!( - rtic::pend(#device::#enum_::#interrupt); + rtic::pend(you_must_enable_the_rt_feature_for_the_pac_in_your_cargo_toml::#enum_::#interrupt); ) }; diff --git a/macros/src/codegen/timer_queue.rs b/macros/src/codegen/timer_queue.rs index 030158e..0abbf49 100644 --- a/macros/src/codegen/timer_queue.rs +++ b/macros/src/codegen/timer_queue.rs @@ -72,7 +72,6 @@ pub fn codegen(app: &App, analysis: &Analysis, extra: &Extra) -> Vec<TokenStream // Timer queue handler { - let device = extra.device; let arms = timer_queue .tasks .iter() @@ -88,7 +87,7 @@ pub fn codegen(app: &App, analysis: &Analysis, extra: &Extra) -> Vec<TokenStream let pend = { quote!( - rtic::pend(#device::#enum_::#interrupt); + rtic::pend(you_must_enable_the_rt_feature_for_the_pac_in_your_cargo_toml::#enum_::#interrupt); ) }; diff --git a/macros/src/codegen/util.rs b/macros/src/codegen/util.rs index 2f9f3cc..41ee3ca 100644 --- a/macros/src/codegen/util.rs +++ b/macros/src/codegen/util.rs @@ -83,7 +83,7 @@ pub fn instants_ident(task: &Ident) -> Ident { pub fn interrupt_ident() -> Ident { let span = Span::call_site(); - Ident::new("Interrupt", span) + Ident::new("interrupt", span) } /// Whether `name` is an exception with configurable priority |
