allow handlers to be named 'main'

`#[init]`, `#[idle]` and `#[task]` handlers can now be named `main`

fixes #311
This commit is contained in:
Jorge Aparicio 2020-05-29 14:50:28 +02:00
parent 1e827e24d0
commit 0ad311074e
7 changed files with 82 additions and 3 deletions

20
examples/t-htask-main.rs Normal file
View file

@ -0,0 +1,20 @@
#![deny(unsafe_code)]
#![deny(warnings)]
#![no_main]
#![no_std]
use cortex_m_semihosting::debug;
use panic_semihosting as _;
#[rtfm::app(device = lm3s6965)]
const APP: () = {
#[init]
fn init(_: init::Context) {
rtfm::pend(lm3s6965::Interrupt::UART0)
}
#[task(binds = UART0)]
fn main(_: main::Context) {
debug::exit(debug::EXIT_SUCCESS);
}
};

20
examples/t-idle-main.rs Normal file
View file

@ -0,0 +1,20 @@
#![deny(unsafe_code)]
#![deny(warnings)]
#![no_main]
#![no_std]
use cortex_m_semihosting::debug;
use panic_semihosting as _;
#[rtfm::app(device = lm3s6965)]
const APP: () = {
#[init]
fn init(_: init::Context) {
}
#[idle]
fn main(_: main::Context) -> ! {
debug::exit(debug::EXIT_SUCCESS);
loop {}
}
};

15
examples/t-init-main.rs Normal file
View file

@ -0,0 +1,15 @@
#![deny(unsafe_code)]
#![deny(warnings)]
#![no_main]
#![no_std]
use cortex_m_semihosting::debug;
use panic_semihosting as _;
#[rtfm::app(device = lm3s6965)]
const APP: () = {
#[init]
fn main(_: main::Context) {
debug::exit(debug::EXIT_SUCCESS);
}
};

24
examples/t-stask-main.rs Normal file
View file

@ -0,0 +1,24 @@
#![deny(unsafe_code)]
#![deny(warnings)]
#![no_main]
#![no_std]
use cortex_m_semihosting::debug;
use panic_semihosting as _;
#[rtfm::app(device = lm3s6965)]
const APP: () = {
#[init(spawn = [main])]
fn init(cx: init::Context) {
cx.spawn.main().ok();
}
#[task]
fn main(_: main::Context) {
debug::exit(debug::EXIT_SUCCESS);
}
extern "C" {
fn UART0();
}
};

View file

@ -141,7 +141,7 @@ pub fn codegen(app: &App, analysis: &Analysis, extra: &Extra) -> Vec<TokenStream
#let_instant #let_instant
#fq.split().0.enqueue_unchecked(index); #fq.split().0.enqueue_unchecked(index);
let priority = &rtfm::export::Priority::new(PRIORITY); let priority = &rtfm::export::Priority::new(PRIORITY);
#name( crate::#name(
#locals_new #locals_new
#name::Context::new(priority #instant) #name::Context::new(priority #instant)
#(,#pats)* #(,#pats)*

View file

@ -72,7 +72,7 @@ pub fn codegen(
)); ));
let locals_new = locals_new.iter(); let locals_new = locals_new.iter();
let call_idle = quote!(#name( let call_idle = quote!(crate::#name(
#(#locals_new,)* #(#locals_new,)*
#name::Context::new(&rtfm::export::Priority::new(0)) #name::Context::new(&rtfm::export::Priority::new(0))
)); ));

View file

@ -105,7 +105,7 @@ pub fn codegen(
let locals_new = locals_new.iter(); let locals_new = locals_new.iter();
let call_init = let call_init =
Some(quote!(let late = #name(#(#locals_new,)* #name::Context::new(core.into()));)); Some(quote!(let late = crate::#name(#(#locals_new,)* #name::Context::new(core.into()));));
root_init.push(module::codegen(Context::Init(core), needs_lt, app, extra)); root_init.push(module::codegen(Context::Init(core), needs_lt, app, extra));