aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Emil Fresk <emil.fresk@gmail.com> 2022-05-17 20:12:36 +0200
committerGravatar Emil Fresk <emil.fresk@gmail.com> 2022-05-17 20:20:59 +0200
commitcd445165c50a46042e0cf17eb0081879f9cf4d52 (patch)
treef81f8a85fe9331216a3203542d2ee6da3f4d90a3
parent6896749f7b8d35a53e359cf90758e2790ad95b19 (diff)
downloadrtic-cd445165c50a46042e0cf17eb0081879f9cf4d52.tar.gz
rtic-cd445165c50a46042e0cf17eb0081879f9cf4d52.tar.zst
rtic-cd445165c50a46042e0cf17eb0081879f9cf4d52.zip
More ergonomic error from static asserts messages
-rw-r--r--macros/src/codegen/pre_init.rs25
-rw-r--r--ui/task-priority-too-high.stderr14
2 files changed, 33 insertions, 6 deletions
diff --git a/macros/src/codegen/pre_init.rs b/macros/src/codegen/pre_init.rs
index 91c99912..ae2fd050 100644
--- a/macros/src/codegen/pre_init.rs
+++ b/macros/src/codegen/pre_init.rs
@@ -49,8 +49,14 @@ pub fn codegen(app: &App, analysis: &Analysis, extra: &Extra) -> Vec<TokenStream
Some((&task.args.priority, &task.args.binds))
}
})) {
+ let es = format!(
+ "Maximum priority used by interrupt vector '{}' is more than supported by hardware",
+ name
+ );
// Compile time assert that this priority is supported by the device
- stmts.push(quote!(let _ = [(); ((1 << #nvic_prio_bits) - #priority as usize)];));
+ stmts.push(quote!(
+ const _: () = assert!((1 << #nvic_prio_bits) >= #priority as usize, #es);
+ ));
stmts.push(quote!(
core.NVIC.set_priority(
@@ -72,8 +78,14 @@ pub fn codegen(app: &App, analysis: &Analysis, extra: &Extra) -> Vec<TokenStream
None
}
}) {
+ let es = format!(
+ "Maximum priority used by interrupt vector '{}' is more than supported by hardware",
+ name
+ );
// Compile time assert that this priority is supported by the device
- stmts.push(quote!(let _ = [(); ((1 << #nvic_prio_bits) - #priority as usize)];));
+ stmts.push(quote!(
+ const _: () = assert!((1 << #nvic_prio_bits) >= #priority as usize, #es);
+ ));
stmts.push(quote!(core.SCB.set_priority(
rtic::export::SystemHandler::#name,
@@ -90,8 +102,15 @@ pub fn codegen(app: &App, analysis: &Analysis, extra: &Extra) -> Vec<TokenStream
};
let binds = &monotonic.args.binds;
+ let name = &monotonic.ident;
+ let es = format!(
+ "Maximum priority used by monotonic '{}' is more than supported by hardware",
+ name
+ );
// Compile time assert that this priority is supported by the device
- stmts.push(quote!(let _ = [(); ((1 << #nvic_prio_bits) - #priority as usize)];));
+ stmts.push(quote!(
+ const _: () = assert!((1 << #nvic_prio_bits) >= #priority as usize, #es);
+ ));
let mono_type = &monotonic.ty;
diff --git a/ui/task-priority-too-high.stderr b/ui/task-priority-too-high.stderr
index e0978f71..a5ce918a 100644
--- a/ui/task-priority-too-high.stderr
+++ b/ui/task-priority-too-high.stderr
@@ -1,7 +1,15 @@
+warning: unused variable: `cx`
+ --> ui/task-priority-too-high.rs:12:13
+ |
+12 | fn init(cx: init::Context) -> (Shared, Local, init::Monotonics) {
+ | ^^ help: if this is intentional, prefix it with an underscore: `_cx`
+ |
+ = note: `#[warn(unused_variables)]` on by default
+
error[E0080]: evaluation of constant value failed
- --> $DIR/task-priority-too-high.rs:3:1
+ --> ui/task-priority-too-high.rs:3:1
|
3 | #[rtic::app(device = lm3s6965)]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ attempt to compute `8_usize - 9_usize`, which would overflow
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'Maximum priority used by interrupt vector 'I2C0' is more than supported by hardware', $DIR/ui/task-priority-too-high.rs:3:1
|
- = note: this error originates in the attribute macro `rtic::app` (in Nightly builds, run with -Z macro-backtrace for more info)
+ = note: this error originates in the macro `$crate::panic::panic_2015` (in Nightly builds, run with -Z macro-backtrace for more info)