aboutsummaryrefslogtreecommitdiff
path: root/embassy-executor-macros/src/macros/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-executor-macros/src/macros/main.rs')
-rw-r--r--embassy-executor-macros/src/macros/main.rs29
1 files changed, 28 insertions, 1 deletions
diff --git a/embassy-executor-macros/src/macros/main.rs b/embassy-executor-macros/src/macros/main.rs
index 26dfa2397..66a3965d0 100644
--- a/embassy-executor-macros/src/macros/main.rs
+++ b/embassy-executor-macros/src/macros/main.rs
@@ -1,5 +1,5 @@
1use darling::export::NestedMeta; 1use darling::export::NestedMeta;
2use darling::FromMeta; 2use darling::{Error, FromMeta};
3use proc_macro2::TokenStream; 3use proc_macro2::TokenStream;
4use quote::quote; 4use quote::quote;
5use syn::{Expr, ReturnType, Type}; 5use syn::{Expr, ReturnType, Type};
@@ -50,6 +50,33 @@ pub fn riscv(args: &[NestedMeta]) -> TokenStream {
50 } 50 }
51} 51}
52 52
53pub fn spin(args: &[NestedMeta]) -> TokenStream {
54 let maybe_entry = match Args::from_list(args) {
55 Ok(args) => args.entry,
56 Err(e) => return e.write_errors(),
57 };
58
59 let entry = match maybe_entry {
60 Some(str) => str,
61 None => return Error::missing_field("entry").write_errors(),
62 };
63 let entry = match Expr::from_string(&entry) {
64 Ok(expr) => expr,
65 Err(e) => return e.write_errors(),
66 };
67
68 quote! {
69 #[#entry]
70 fn main() -> ! {
71 let mut executor = ::embassy_executor::Executor::new();
72 let executor = unsafe { __make_static(&mut executor) };
73 executor.run(|spawner| {
74 spawner.must_spawn(__embassy_main(spawner));
75 })
76 }
77 }
78}
79
53pub fn cortex_m() -> TokenStream { 80pub fn cortex_m() -> TokenStream {
54 quote! { 81 quote! {
55 #[cortex_m_rt::entry] 82 #[cortex_m_rt::entry]