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

remove special case around peripherals from codegen

parent e97afa71
No related branches found
No related tags found
No related merge requests found
...@@ -27,12 +27,7 @@ pub fn app(app: &App, ownerships: &Ownerships) -> Tokens { ...@@ -27,12 +27,7 @@ pub fn app(app: &App, ownerships: &Ownerships) -> Tokens {
quote!(#(#root)*) quote!(#(#root)*)
} }
fn idle( fn idle(app: &App, ownerships: &Ownerships, main: &mut Vec<Tokens>, root: &mut Vec<Tokens>) {
app: &App,
ownerships: &Ownerships,
main: &mut Vec<Tokens>,
root: &mut Vec<Tokens>,
) {
let krate = krate(); let krate = krate();
let mut mod_items = vec![]; let mut mod_items = vec![];
...@@ -45,8 +40,6 @@ fn idle( ...@@ -45,8 +40,6 @@ fn idle(
} }
if !app.idle.resources.is_empty() { if !app.idle.resources.is_empty() {
let device = &app.device;
let mut needs_reexport = false; let mut needs_reexport = false;
for name in &app.idle.resources { for name in &app.idle.resources {
if ownerships[name].is_owned() { if ownerships[name].is_owned() {
...@@ -66,7 +59,10 @@ fn idle( ...@@ -66,7 +59,10 @@ fn idle(
let mut rfields = vec![]; let mut rfields = vec![];
for name in &app.idle.resources { for name in &app.idle.resources {
if ownerships[name].is_owned() { if ownerships[name].is_owned() {
if let Some(resource) = app.resources.get(name) { let resource = app.resources.get(name).expect(&format!(
"BUG: resource {} assigned to `idle` has no definition",
name
));
let ty = &resource.ty; let ty = &resource.ty;
rfields.push(quote! { rfields.push(quote! {
...@@ -83,15 +79,6 @@ fn idle( ...@@ -83,15 +79,6 @@ fn idle(
#name: #super_::#_name.as_mut(), #name: #super_::#_name.as_mut(),
} }
}); });
} else {
rfields.push(quote! {
pub #name: &'static mut ::#device::#name,
});
rexprs.push(quote! {
#name: &mut *::#device::#name.get(),
});
}
} else { } else {
rfields.push(quote! { rfields.push(quote! {
pub #name: #super_::_resource::#name, pub #name: #super_::_resource::#name,
...@@ -162,16 +149,19 @@ fn init(app: &App, main: &mut Vec<Tokens>, root: &mut Vec<Tokens>) { ...@@ -162,16 +149,19 @@ fn init(app: &App, main: &mut Vec<Tokens>, root: &mut Vec<Tokens>) {
let krate = krate(); let krate = krate();
let mut tys = vec![quote!(init::Peripherals)]; let mut tys = vec![quote!(init::Peripherals)];
let mut exprs = vec![quote!{ let mut exprs = vec![
quote!{
init::Peripherals { init::Peripherals {
core: ::#device::CorePeripherals::steal(), core: ::#device::CorePeripherals::steal(),
device: ::#device::Peripherals::steal(), device: ::#device::Peripherals::steal(),
} }
}]; },
];
let mut ret = None; let mut ret = None;
let mut mod_items = vec![]; let mut mod_items = vec![];
let (init_resources, late_resources): (Vec<_>, Vec<_>) = app.resources.iter() let (init_resources, late_resources): (Vec<_>, Vec<_>) = app.resources
.iter()
.partition(|&(_, res)| res.expr.is_some()); .partition(|&(_, res)| res.expr.is_some());
if !init_resources.is_empty() { if !init_resources.is_empty() {
...@@ -363,7 +353,9 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) { ...@@ -363,7 +353,9 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
// For owned resources we don't need claim() or borrow() // For owned resources we don't need claim() or borrow()
} }
Ownership::Shared { ceiling } => { Ownership::Shared { ceiling } => {
if let Some(resource) = app.resources.get(name) { let resource = app.resources
.get(name)
.expect(&format!("BUG: resource {} has no definition", name));
let ty = &resource.ty; let ty = &resource.ty;
let res_rvalue = if resource.expr.is_some() { let res_rvalue = if resource.expr.is_some() {
quote!(#_name) quote!(#_name)
...@@ -436,81 +428,6 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) { ...@@ -436,81 +428,6 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
} }
} }
}); });
} else {
impl_items.push(quote! {
type Data = #device::#name;
fn borrow<'cs>(
&'cs self,
t: &'cs #krate::Threshold,
) -> &'cs #krate::Static<#device::#name> {
assert!(t.value() >= #ceiling);
unsafe {
#krate::Static::ref_(&*#device::#name.get())
}
}
fn borrow_mut<'cs>(
&'cs mut self,
t: &'cs #krate::Threshold,
) -> &'cs mut #krate::Static<#device::#name> {
assert!(t.value() >= #ceiling);
unsafe {
#krate::Static::ref_mut(
&mut *#device::#name.get(),
)
}
}
fn claim<R, F>(
&self,
t: &mut #krate::Threshold,
f: F,
) -> R
where
F: FnOnce(
&#krate::Static<#device::#name>,
&mut #krate::Threshold) -> R
{
unsafe {
#krate::claim(
#krate::Static::ref_(
&*#device::#name.get(),
),
#ceiling,
#device::NVIC_PRIO_BITS,
t,
f,
)
}
}
fn claim_mut<R, F>(
&mut self,
t: &mut #krate::Threshold,
f: F,
) -> R
where
F: FnOnce(
&mut #krate::Static<#device::#name>,
&mut #krate::Threshold) -> R
{
unsafe {
#krate::claim(
#krate::Static::ref_mut(
&mut *#device::#name.get(),
),
#ceiling,
#device::NVIC_PRIO_BITS,
t,
f,
)
}
}
});
}
impls.push(quote! { impls.push(quote! {
#[allow(unsafe_code)] #[allow(unsafe_code)]
...@@ -568,9 +485,7 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) { ...@@ -568,9 +485,7 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
let _name = Ident::new(format!("_{}", name.as_ref())); let _name = Ident::new(format!("_{}", name.as_ref()));
match ownerships[name] { match ownerships[name] {
Ownership::Shared { ceiling } Ownership::Shared { ceiling } if ceiling > task.priority => {
if ceiling > task.priority =>
{
needs_threshold = true; needs_threshold = true;
fields.push(quote! { fields.push(quote! {
...@@ -585,7 +500,10 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) { ...@@ -585,7 +500,10 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
} }
_ => { _ => {
lifetime = Some(quote!('a)); lifetime = Some(quote!('a));
if let Some(resource) = app.resources.get(name) { let resource = app.resources
.get(name)
.expect(&format!("BUG: resource {} has no definition", name));
needs_reexport = true; needs_reexport = true;
let ty = &resource.ty; let ty = &resource.ty;
...@@ -602,18 +520,6 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) { ...@@ -602,18 +520,6 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
#name: ::#krate::Static::ref_mut(::#_name.as_mut()), #name: ::#krate::Static::ref_mut(::#_name.as_mut()),
} }
}); });
} else {
fields.push(quote! {
pub #name:
&'a mut ::#krate::Static<::#device::#name>,
});
exprs.push(quote! {
#name: ::#krate::Static::ref_mut(
&mut *::#device::#name.get(),
),
});
}
} }
} }
} }
...@@ -674,8 +580,7 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) { ...@@ -674,8 +580,7 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
let path = &task.path; let path = &task.path;
let _name = Ident::new(format!("_{}", name)); let _name = Ident::new(format!("_{}", name));
let export_name = let export_name = Lit::Str(name.as_ref().to_owned(), StrStyle::Cooked);
Lit::Str(name.as_ref().to_owned(), StrStyle::Cooked);
root.push(quote! { root.push(quote! {
#[allow(non_snake_case)] #[allow(non_snake_case)]
#[allow(unsafe_code)] #[allow(unsafe_code)]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment