mirror of
https://github.com/rtic-rs/rtic.git
synced 2025-12-16 21:05:35 +01:00
Merge #170
170: check task priority at compile time r=TeXitoi a=japaric before we were checking the priority at runtime. The compile time error message when the priority is too high is kind of awful though. Co-authored-by: Jorge Aparicio <jorge@japaric.io>
This commit is contained in:
commit
77def32454
5 changed files with 55 additions and 6 deletions
|
|
@ -1989,15 +1989,13 @@ fn pre_init(ctxt: &Context, app: &App, analysis: &Analysis) -> proc_macro2::Toke
|
|||
))
|
||||
}
|
||||
|
||||
// TODO turn the assertions that check that the priority is not larger than what's supported by
|
||||
// the device into compile errors
|
||||
let device = &app.args.device;
|
||||
let nvic_prio_bits = quote!(#device::NVIC_PRIO_BITS);
|
||||
for (handler, interrupt) in &app.interrupts {
|
||||
let name = interrupt.args.binds(handler);
|
||||
let priority = interrupt.args.priority;
|
||||
exprs.push(quote!(p.NVIC.enable(#device::Interrupt::#name);));
|
||||
exprs.push(quote!(assert!(#priority <= (1 << #nvic_prio_bits));));
|
||||
exprs.push(quote!(let _ = [(); ((1 << #nvic_prio_bits) - #priority as usize)];));
|
||||
exprs.push(quote!(p.NVIC.set_priority(
|
||||
#device::Interrupt::#name,
|
||||
((1 << #nvic_prio_bits) - #priority) << (8 - #nvic_prio_bits),
|
||||
|
|
@ -2007,7 +2005,7 @@ fn pre_init(ctxt: &Context, app: &App, analysis: &Analysis) -> proc_macro2::Toke
|
|||
for (priority, dispatcher) in &analysis.dispatchers {
|
||||
let name = &dispatcher.interrupt;
|
||||
exprs.push(quote!(p.NVIC.enable(#device::Interrupt::#name);));
|
||||
exprs.push(quote!(assert!(#priority <= (1 << #nvic_prio_bits));));
|
||||
exprs.push(quote!(let _ = [(); ((1 << #nvic_prio_bits) - #priority as usize)];));
|
||||
exprs.push(quote!(p.NVIC.set_priority(
|
||||
#device::Interrupt::#name,
|
||||
((1 << #nvic_prio_bits) - #priority) << (8 - #nvic_prio_bits),
|
||||
|
|
|
|||
|
|
@ -1039,10 +1039,10 @@ fn parse_args(
|
|||
}
|
||||
|
||||
let value = lit.value();
|
||||
if value > u64::from(u8::MAX) {
|
||||
if value > u64::from(u8::MAX) || value == 0 {
|
||||
return Err(parse::Error::new(
|
||||
lit.span(),
|
||||
"this literal must be in the range 0...255",
|
||||
"this literal must be in the range 1...255",
|
||||
));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue