aboutsummaryrefslogtreecommitdiff
path: root/macros/src
diff options
context:
space:
mode:
authorGravatar Per Lindgren <per.lindgren@ltu.se> 2020-06-13 00:19:01 +0200
committerGravatar Per Lindgren <per.lindgren@ltu.se> 2020-06-13 00:19:01 +0200
commitc360ffaad8a2349a8bb210c2de2eed40d1765fd7 (patch)
tree99e056d2cec6ed5dad921f80b8876840669d90ec /macros/src
parent3c208003f564c7f256435d1b3845bd1269a8f506 (diff)
downloadrtic-c360ffaad8a2349a8bb210c2de2eed40d1765fd7.tar.gz
rtic-c360ffaad8a2349a8bb210c2de2eed40d1765fd7.tar.zst
rtic-c360ffaad8a2349a8bb210c2de2eed40d1765fd7.zip
wip2
Diffstat (limited to 'macros/src')
-rw-r--r--macros/src/codegen/resources.rs6
-rw-r--r--macros/src/codegen/util.rs12
2 files changed, 12 insertions, 6 deletions
diff --git a/macros/src/codegen/resources.rs b/macros/src/codegen/resources.rs
index 6788648b..d2edaef7 100644
--- a/macros/src/codegen/resources.rs
+++ b/macros/src/codegen/resources.rs
@@ -103,12 +103,12 @@ pub fn codegen(
}
#[inline(always)]
- pub unsafe fn is_locked(&self) -> bool {
+ pub unsafe fn get_locked(&self) -> bool {
self.locked.get()
}
- pub unsafe fn lock(&self) {
- self.locked.set(true);
+ pub unsafe fn set_locked(&self, b: bool) {
+ self.locked.set(b);
}
}
));
diff --git a/macros/src/codegen/util.rs b/macros/src/codegen/util.rs
index 68aca5d1..d8d05453 100644
--- a/macros/src/codegen/util.rs
+++ b/macros/src/codegen/util.rs
@@ -71,13 +71,17 @@ pub fn impl_mutex(
#cfg_core
impl<'a> rtic::Mutex for #path<'a> {
type T = #ty;
-
#[inline(always)]
fn lock<R>(&mut self, f: impl FnOnce(&mut #ty) -> R) -> R {
/// Priority ceiling
const CEILING: u8 = #ceiling;
- unsafe {
+ if unsafe { self.get_locked() } {
+ panic!("Resource locked in sequential context");
+ };
+ unsafe { self.set_locked(true); }
+
+ let r = unsafe {
rtic::export::lock(
#ptr,
#priority,
@@ -85,7 +89,9 @@ pub fn impl_mutex(
#device::NVIC_PRIO_BITS,
f,
)
- }
+ };
+ unsafe { self.set_locked(false); }
+ r
}
}
)