Skip to content

Commit

Permalink
improve the error message
Browse files Browse the repository at this point in the history
  • Loading branch information
japaric committed Jul 5, 2021
1 parent f042807 commit 73a4d7c
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 10 deletions.
3 changes: 2 additions & 1 deletion macros/src/codegen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ pub fn app(app: &App, analysis: &Analysis, extra: &Extra) -> TokenStream2 {

let name = &app.name;
let device = extra.device;
let rt_err = util::rt_err_ident();
quote!(
#(#user)*

Expand All @@ -139,7 +140,7 @@ pub fn app(app: &App, analysis: &Analysis, extra: &Extra) -> TokenStream2 {
// the user can't access the items within this `const` item
const #name: () = {
/// Always include the device crate which contains the vector table
use #device as _;
use #device as #rt_err;

#check_excess_cores

Expand Down
5 changes: 3 additions & 2 deletions macros/src/codegen/pre_init.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ pub fn codegen(
}

let device = extra.device;
let rt_err = util::rt_err_ident();
let nvic_prio_bits = quote!(#device::NVIC_PRIO_BITS);

// unmask interrupts and set their priorities
Expand All @@ -76,14 +77,14 @@ pub fn codegen(
let interrupt = util::interrupt_ident(core, app.args.cores);
stmts.push(quote!(
core.NVIC.set_priority(
#device::#interrupt::#name,
#rt_err::#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(#rt_err::#interrupt::#name);));
}

// cross-spawn barriers: now that priorities have been set and the interrupts have been unmasked
Expand Down
8 changes: 4 additions & 4 deletions macros/src/codegen/spawn_body.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ pub fn codegen(
name: &Ident,
app: &App,
analysis: &Analysis,
extra: &Extra,
_extra: &Extra,
) -> TokenStream2 {
let sender = spawner.core(app);
let spawnee = &app.software_tasks[name];
Expand Down Expand Up @@ -44,16 +44,16 @@ pub fn codegen(
)
};

let device = extra.device;
let rt_err = util::rt_err_ident();
let enum_ = util::interrupt_ident(receiver, app.args.cores);
let interrupt = &analysis.interrupts[&receiver][&priority];
let pend = if sender != receiver {
quote!(
#device::xpend(#receiver, #device::#enum_::#interrupt);
#rt_err::xpend(#receiver, #rt_err::#enum_::#interrupt);
)
} else {
quote!(
rtic::pend(#device::#enum_::#interrupt);
rtic::pend(#rt_err::#enum_::#interrupt);
)
};

Expand Down
6 changes: 3 additions & 3 deletions macros/src/codegen/timer_queue.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ pub fn codegen(app: &App, analysis: &Analysis, extra: &Extra) -> Vec<TokenStream

// Timer queue handler
{
let device = extra.device;
let rt_err = util::rt_err_ident();
let arms = timer_queue
.tasks
.iter()
Expand All @@ -96,11 +96,11 @@ pub fn codegen(app: &App, analysis: &Analysis, extra: &Extra) -> Vec<TokenStream

let pend = if sender != receiver {
quote!(
#device::xpend(#receiver, #device::#enum_::#interrupt);
#rt_err::xpend(#receiver, #rt_err::#enum_::#interrupt);
)
} else {
quote!(
rtic::pend(#device::#enum_::#interrupt);
rtic::pend(#rt_err::#enum_::#interrupt);
)
};

Expand Down
4 changes: 4 additions & 0 deletions macros/src/codegen/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -323,3 +323,7 @@ pub fn suffixed(name: &str, core: u8) -> Ident {
pub fn tq_ident(core: Core) -> Ident {
Ident::new(&format!("TQ{}", core), Span::call_site())
}

pub fn rt_err_ident() -> Ident {
Ident::new("you_must_enable_the_rt_feature_for_the_pac_in_your_cargo_toml", Span::call_site())
}

0 comments on commit 73a4d7c

Please sign in to comment.