mirror of
https://github.com/rtic-rs/rtic.git
synced 2024-11-25 21:19:35 +01:00
Merge #641
641: More ergonomic error from static asserts messages r=perlindgren a=korken89 Closes #634 Co-authored-by: Emil Fresk <emil.fresk@gmail.com>
This commit is contained in:
commit
1a24c725d2
2 changed files with 33 additions and 6 deletions
|
@ -49,8 +49,14 @@ pub fn codegen(app: &App, analysis: &Analysis, extra: &Extra) -> Vec<TokenStream
|
||||||
Some((&task.args.priority, &task.args.binds))
|
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
|
// 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!(
|
stmts.push(quote!(
|
||||||
core.NVIC.set_priority(
|
core.NVIC.set_priority(
|
||||||
|
@ -72,8 +78,14 @@ pub fn codegen(app: &App, analysis: &Analysis, extra: &Extra) -> Vec<TokenStream
|
||||||
None
|
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
|
// 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(
|
stmts.push(quote!(core.SCB.set_priority(
|
||||||
rtic::export::SystemHandler::#name,
|
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 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
|
// 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;
|
let mono_type = &monotonic.ty;
|
||||||
|
|
||||||
|
|
|
@ -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
|
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)]
|
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)
|
||||||
|
|
Loading…
Reference in a new issue