diff options
Diffstat (limited to 'src/lib.rs')
| -rw-r--r-- | src/lib.rs | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -105,7 +105,9 @@ where lock_check(ceiling); let old_basepri = basepri::read(); basepri_max::write(ceiling); + compiler_barrier(); let ret = f(&*res, ptr::read(0 as *const _)); + compiler_barrier(); basepri::write(old_basepri); ret } @@ -121,11 +123,23 @@ where lock_check(ceiling); let old_basepri = basepri::read(); basepri_max::write(ceiling); + compiler_barrier(); let ret = f(&mut *res, ptr::read(0 as *const _)); + compiler_barrier(); basepri::write(old_basepri); ret } +fn compiler_barrier() { + unsafe { + asm!("" + : + : + : "memory" + : "volatile"); + } +} + /// A peripheral as a resource pub struct ResourceP<P, Ceiling> where |
