diff options
Diffstat (limited to 'embassy-executor-macros/src/macros/main.rs')
| -rw-r--r-- | embassy-executor-macros/src/macros/main.rs | 22 |
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 | ||
| 40 | pub static ARCH_CORTEX_AR: Arch = Arch { | ||
| 41 | default_entry: None, | ||
| 42 | flavor: Flavor::Standard, | ||
| 43 | executor_required: false, | ||
| 44 | }; | ||
| 45 | |||
| 40 | pub static ARCH_SPIN: Arch = Arch { | 46 | pub 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(()) |
