aboutsummaryrefslogtreecommitdiff
path: root/macros/src
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2020-10-15 14:15:35 +0000
committerGitHub <noreply@github.com>2020-10-15 14:15:35 +0000
commitee0885063d5b1cc4eddd3918ff425796f6213464 (patch)
tree7073205b076f168b1c6f5782a278abf11eb7746f /macros/src
parent1db5faad62c89cff19d2a94c8ce7b98bac9439ac (diff)
parent48abc26e8577e6b57c46dce40e63022fac2c9375 (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.rs2
-rw-r--r--macros/src/codegen/pre_init.rs4
-rw-r--r--macros/src/codegen/spawn_body.rs5
-rw-r--r--macros/src/codegen/timer_queue.rs3
-rw-r--r--macros/src/codegen/util.rs2
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