Skip to content
Snippets Groups Projects
Commit 15569484 authored by Jonas Schievink's avatar Jonas Schievink
Browse files

Fix shared resource handling and extend example.

The extended example tests that this actually works this time.
parent 70e24369
No related branches found
No related tags found
No related merge requests found
......@@ -26,13 +26,24 @@ app! {
// the initializer. Doing that will require `init` to return the values of all "late"
// resources.
static IP_ADDRESS: u32;
// PORT is used by 2 tasks, making it a shared resource. This just tests another internal
// code path and is not important for the example.
static PORT: u16;
},
tasks: {
SYS_TICK: {
priority: 1,
path: sys_tick,
resources: [IP_ADDRESS, ON],
resources: [IP_ADDRESS, PORT, ON],
},
EXTI0: {
priority: 2,
path: exti0,
resources: [PORT],
}
}
}
......@@ -47,6 +58,7 @@ fn init(_p: init::Peripherals, _r: init::Resources) -> init::LateResourceValues
init::LateResourceValues {
// This struct will contain fields for all resources with omitted initializers.
IP_ADDRESS: ip_address,
PORT: 0,
}
}
......@@ -57,6 +69,8 @@ fn sys_tick(_t: &mut Threshold, r: SYS_TICK::Resources) {
r.IP_ADDRESS;
}
fn exti0(_t: &mut Threshold, _r: EXTI0::Resources) {}
fn idle() -> ! {
loop {
rtfm::wfi();
......
......@@ -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,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment