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.rs22
1 files changed, 20 insertions, 2 deletions
diff --git a/embassy-executor-macros/src/macros/main.rs b/embassy-executor-macros/src/macros/main.rs
index 95722b19b..dc470e51c 100644
--- a/embassy-executor-macros/src/macros/main.rs
+++ b/embassy-executor-macros/src/macros/main.rs
@@ -37,6 +37,12 @@ pub static ARCH_CORTEX_M: Arch = Arch {
37 executor_required: false, 37 executor_required: false,
38}; 38};
39 39
40pub static ARCH_CORTEX_AR: Arch = Arch {
41 default_entry: None,
42 flavor: Flavor::Standard,
43 executor_required: false,
44};
45
40pub static ARCH_SPIN: Arch = Arch { 46pub static ARCH_SPIN: Arch = Arch {
41 default_entry: None, 47 default_entry: None,
42 flavor: Flavor::Standard, 48 flavor: Flavor::Standard,
@@ -164,6 +170,14 @@ For example: `#[embassy_executor::main(entry = ..., executor = \"some_crate::Exe
164 let f_body = f.body; 170 let f_body = f.body;
165 let out = &f.sig.output; 171 let out = &f.sig.output;
166 172
173 let name_main_task = if cfg!(feature = "metadata-name") {
174 quote!(
175 main_task.metadata().set_name("main\0");
176 )
177 } else {
178 quote!()
179 };
180
167 let (main_ret, mut main_body) = match arch.flavor { 181 let (main_ret, mut main_body) = match arch.flavor {
168 Flavor::Standard => ( 182 Flavor::Standard => (
169 quote!(!), 183 quote!(!),
@@ -175,7 +189,9 @@ For example: `#[embassy_executor::main(entry = ..., executor = \"some_crate::Exe
175 let mut executor = #executor::new(); 189 let mut executor = #executor::new();
176 let executor = unsafe { __make_static(&mut executor) }; 190 let executor = unsafe { __make_static(&mut executor) };
177 executor.run(|spawner| { 191 executor.run(|spawner| {
178 spawner.must_spawn(__embassy_main(spawner)); 192 let main_task = __embassy_main(spawner).unwrap();
193 #name_main_task
194 spawner.spawn(main_task);
179 }) 195 })
180 }, 196 },
181 ), 197 ),
@@ -185,7 +201,9 @@ For example: `#[embassy_executor::main(entry = ..., executor = \"some_crate::Exe
185 let executor = ::std::boxed::Box::leak(::std::boxed::Box::new(#executor::new())); 201 let executor = ::std::boxed::Box::leak(::std::boxed::Box::new(#executor::new()));
186 202
187 executor.start(|spawner| { 203 executor.start(|spawner| {
188 spawner.must_spawn(__embassy_main(spawner)); 204 let main_task = __embassy_main(spawner).unwrap();
205 #name_main_task
206 spawner.spawn(main_task);
189 }); 207 });
190 208
191 Ok(()) 209 Ok(())