From 4c0fa03c14b95726e4107a65e54601e07d6653ae Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Sat, 16 Oct 2021 04:11:19 +0200 Subject: [PATCH] interrupt: transmute instead of steal. That steal method has a TAKEN=true write [here](https://github.com/rust-embedded/cortex-m/blob/6b013138b734b9bbeb24a345f75d2bcc1c69fa8d/src/peripheral/mod.rs#L180). This is not zero cost, we don't want it. Transmute instead, which is zero cost. --- embassy/src/interrupt.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/embassy/src/interrupt.rs b/embassy/src/interrupt.rs index df3a79cc..7848ee69 100644 --- a/embassy/src/interrupt.rs +++ b/embassy/src/interrupt.rs @@ -1,8 +1,8 @@ +use atomic_polyfill::{compiler_fence, AtomicPtr, Ordering}; +use core::mem; use core::ptr; use cortex_m::peripheral::NVIC; -use atomic_polyfill::{compiler_fence, AtomicPtr, Ordering}; - pub use embassy_macros::interrupt_declare as declare; pub use embassy_macros::interrupt_take as take; @@ -124,9 +124,8 @@ impl InterruptExt for T { #[inline] fn set_priority(&self, prio: Self::Priority) { unsafe { - cortex_m::peripheral::Peripherals::steal() - .NVIC - .set_priority(NrWrap(self.number()), prio.into()) + let mut nvic: cortex_m::peripheral::NVIC = mem::transmute(()); + nvic.set_priority(NrWrap(self.number()), prio.into()) } } }