338: Fixes an issue where one could double take the cortex_m Peripheral r=japaric a=korken89

Closes #321 

Co-authored-by: Emil Fresk <emil.fresk@gmail.com>
This commit is contained in:
bors[bot] 2020-06-30 20:12:17 +00:00 committed by GitHub
commit 629acdd70f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 0 deletions

View file

@ -174,6 +174,8 @@ jobs:
cfg cfg
pool pool
ramfunc ramfunc
peripherals-taken
) )
for ex in ${exs[@]}; do for ex in ${exs[@]}; do

View file

View file

@ -0,0 +1,16 @@
#![deny(unsafe_code)]
#![deny(warnings)]
#![no_main]
#![no_std]
use cortex_m_semihosting::debug;
use panic_semihosting as _;
#[rtic::app(device = lm3s6965)]
const APP: () = {
#[init]
fn main(_: main::Context) {
assert!(cortex_m::Peripherals::take().is_none());
debug::exit(debug::EXIT_SUCCESS);
}
};

View file

@ -43,6 +43,13 @@ pub fn codegen(
let mut core: rtic::export::Peripherals = core::mem::transmute(()); let mut core: rtic::export::Peripherals = core::mem::transmute(());
)); ));
if app.args.cores == 1 {
stmts.push(quote!(
// To set the variable in cortex_m so the peripherals cannot be taken multiple times
let _ = cortex_m::Peripherals::steal();
));
}
let device = extra.device; let device = extra.device;
let nvic_prio_bits = quote!(#device::NVIC_PRIO_BITS); let nvic_prio_bits = quote!(#device::NVIC_PRIO_BITS);