Skip to content
Snippets Groups Projects
Commit 9865a724 authored by Jorge Aparicio's avatar Jorge Aparicio
Browse files

make resource proxies !Send

parent 0a0e0e2b
Branches
No related tags found
No related merge requests found
...@@ -438,12 +438,14 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) { ...@@ -438,12 +438,14 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
items.push(quote! { items.push(quote! {
#[allow(non_camel_case_types)] #[allow(non_camel_case_types)]
pub struct #name { _0: () } pub struct #name { _0: PhantomData<*const ()> }
unsafe impl Sync for #name {}
#[allow(unsafe_code)] #[allow(unsafe_code)]
impl #name { impl #name {
pub unsafe fn new() -> Self { pub unsafe fn new() -> Self {
#name { _0: () } #name { _0: PhantomData }
} }
} }
}); });
...@@ -455,6 +457,8 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) { ...@@ -455,6 +457,8 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
root.push(quote! { root.push(quote! {
#[allow(unsafe_code)] #[allow(unsafe_code)]
mod _resource { mod _resource {
use core::marker::PhantomData;
#(#items)* #(#items)*
} }
}) })
......
#![deny(warnings)]
#![feature(const_fn)]
#![feature(proc_macro)]
#![no_std]
extern crate cortex_m_rtfm as rtfm;
extern crate stm32f103xx;
use rtfm::{app, Resource, Threshold};
app! {
device: stm32f103xx,
resources: {
static SHARED: bool = false;
},
tasks: {
EXTI0: {
path: exti0,
priority: 1,
resources: [SHARED],
},
EXTI1: {
path: exti1,
priority: 2,
resources: [SHARED],
},
},
}
fn init(_p: init::Peripherals, _r: init::Resources) {}
fn idle() -> ! {
loop {}
}
fn is_send<T>(_: &T) where T: Send {}
fn is_sync<T>(_: &T) where T: Sync {}
fn exti0(_t: &mut Threshold, r: EXTI0::Resources) {
// OK
is_sync(&r.SHARED);
// ERROR resource proxies are not `Send`able across tasks
is_send(&r.SHARED);
//~^ error the trait bound `*const (): core::marker::Send` is not satisfied
}
fn exti1(_t: &mut Threshold, _r: EXTI1::Resources) {
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment