Generate mod instead of const, handle import of idle and init

This commit is contained in:
Henrik Tjäder 2020-05-19 09:55:50 +00:00
parent 148ad4045e
commit c718413cb5

View file

@ -26,6 +26,7 @@ mod util;
// TODO document the syntax here or in `rtic-syntax` // TODO document the syntax here or in `rtic-syntax`
pub fn app(app: &App, analysis: &Analysis, extra: &Extra) -> TokenStream2 { pub fn app(app: &App, analysis: &Analysis, extra: &Extra) -> TokenStream2 {
let mut const_app = vec![]; let mut const_app = vec![];
let mut const_app_imports = vec![];
let mut mains = vec![]; let mut mains = vec![];
let mut root = vec![]; let mut root = vec![];
let mut user = vec![]; let mut user = vec![];
@ -41,6 +42,17 @@ pub fn app(app: &App, analysis: &Analysis, extra: &Extra) -> TokenStream2 {
let (const_app_idle, root_idle, user_idle, call_idle) = idle::codegen(app, analysis, extra); let (const_app_idle, root_idle, user_idle, call_idle) = idle::codegen(app, analysis, extra);
if user_init.is_some() {
const_app_imports.push(quote!(
use super::init;
))
}
if user_idle.is_some() {
const_app_imports.push(quote!(
use super::idle;
))
}
user.push(quote!( user.push(quote!(
#user_init #user_init
@ -111,10 +123,11 @@ pub fn app(app: &App, analysis: &Analysis, extra: &Extra) -> TokenStream2 {
#(#root_software_tasks)* #(#root_software_tasks)*
/// Implementation details /// Implementation details
// The user can't access the items within this `const` item // the user can't access the items within this `const` item
const #name: () = { mod #name {
/// Always include the device crate which contains the vector table /// Always include the device crate which contains the vector table
use #device as _; use #device as _;
#(#const_app_imports)*
#(#const_app)* #(#const_app)*
@ -133,6 +146,6 @@ pub fn app(app: &App, analysis: &Analysis, extra: &Extra) -> TokenStream2 {
#(#const_app_schedule)* #(#const_app_schedule)*
#(#mains)* #(#mains)*
}; }
) )
} }