diff options
author | 2017-09-22 18:19:18 +0200 | |
---|---|---|
committer | 2017-09-22 18:19:18 +0200 | |
commit | 1556948458a386d13ff756e64dc60f8a6198e9d8 (patch) | |
tree | e06c41e37dcc732ef2525cdc676e519564b173bd /macros/src | |
parent | 70e243694dba333c62116e692edecfaf93186413 (diff) | |
download | rtic-1556948458a386d13ff756e64dc60f8a6198e9d8.tar.gz rtic-1556948458a386d13ff756e64dc60f8a6198e9d8.tar.zst rtic-1556948458a386d13ff756e64dc60f8a6198e9d8.zip |
Fix shared resource handling and extend example.
The extended example tests that this actually works this time.
Diffstat (limited to 'macros/src')
-rw-r--r-- | macros/src/trans.rs | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/macros/src/trans.rs b/macros/src/trans.rs index 890e083d..45841e73 100644 --- a/macros/src/trans.rs +++ b/macros/src/trans.rs @@ -351,6 +351,11 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) { Ownership::Shared { ceiling } => { if let Some(resource) = app.resources.get(name) { let ty = &resource.ty; + let res_rvalue = if resource.expr.is_some() { + quote!(#_name) + } else { + quote!(#_name.some) + }; impl_items.push(quote! { type Data = #ty; @@ -361,7 +366,7 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) { ) -> &'cs #krate::Static<#ty> { assert!(t.value() >= #ceiling); - unsafe { #krate::Static::ref_(&#_name) } + unsafe { #krate::Static::ref_(&#res_rvalue) } } fn borrow_mut<'cs>( @@ -371,7 +376,7 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) { assert!(t.value() >= #ceiling); unsafe { - #krate::Static::ref_mut(&mut #_name) + #krate::Static::ref_mut(&mut #res_rvalue) } } @@ -387,7 +392,7 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) { { unsafe { #krate::claim( - #krate::Static::ref_(&#_name), + #krate::Static::ref_(&#res_rvalue), #ceiling, #device::NVIC_PRIO_BITS, t, @@ -408,7 +413,7 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) { { unsafe { #krate::claim( - #krate::Static::ref_mut(&mut #_name), + #krate::Static::ref_mut(&mut #res_rvalue), #ceiling, #device::NVIC_PRIO_BITS, t, |