diff options
180 files changed, 520 insertions, 529 deletions
diff --git a/.github/ci/test.sh b/.github/ci/test.sh index c9b332cf8..33dfa48c9 100755 --- a/.github/ci/test.sh +++ b/.github/ci/test.sh | |||
| @@ -12,7 +12,7 @@ export CARGO_TARGET_DIR=/ci/cache/target | |||
| 12 | # used when pointing stm32-metapac to a CI-built one. | 12 | # used when pointing stm32-metapac to a CI-built one. |
| 13 | export CARGO_NET_GIT_FETCH_WITH_CLI=true | 13 | export CARGO_NET_GIT_FETCH_WITH_CLI=true |
| 14 | 14 | ||
| 15 | cargo test --manifest-path ./embassy-executor/Cargo.toml | 15 | cargo test --manifest-path ./embassy-executor/Cargo.toml --features metadata-name |
| 16 | cargo test --manifest-path ./embassy-futures/Cargo.toml | 16 | cargo test --manifest-path ./embassy-futures/Cargo.toml |
| 17 | cargo test --manifest-path ./embassy-sync/Cargo.toml | 17 | cargo test --manifest-path ./embassy-sync/Cargo.toml |
| 18 | cargo test --manifest-path ./embassy-embedded-hal/Cargo.toml | 18 | cargo test --manifest-path ./embassy-embedded-hal/Cargo.toml |
| @@ -80,7 +80,7 @@ async fn main(spawner: Spawner) { | |||
| 80 | let p = embassy_nrf::init(Default::default()); | 80 | let p = embassy_nrf::init(Default::default()); |
| 81 | 81 | ||
| 82 | // Spawned tasks run in the background, concurrently. | 82 | // Spawned tasks run in the background, concurrently. |
| 83 | spawner.spawn(blink(p.P0_13.into())).unwrap(); | 83 | spawner.spawn(blink(p.P0_13.into()).unwrap()); |
| 84 | 84 | ||
| 85 | let mut button = Input::new(p.P0_11, Pull::Up); | 85 | let mut button = Input::new(p.P0_11, Pull::Up); |
| 86 | loop { | 86 | loop { |
| @@ -31,7 +31,10 @@ cargo batch \ | |||
| 31 | --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv6m-none-eabi --features defmt \ | 31 | --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv6m-none-eabi --features defmt \ |
| 32 | --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv6m-none-eabi --features defmt,arch-cortex-m,executor-thread,executor-interrupt \ | 32 | --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv6m-none-eabi --features defmt,arch-cortex-m,executor-thread,executor-interrupt \ |
| 33 | --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features arch-cortex-m \ | 33 | --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features arch-cortex-m \ |
| 34 | --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features arch-cortex-m,metadata-name \ | ||
| 35 | --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features arch-cortex-m,trace \ | ||
| 34 | --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features arch-cortex-m,rtos-trace \ | 36 | --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features arch-cortex-m,rtos-trace \ |
| 37 | --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features arch-cortex-m,trace,rtos-trace \ | ||
| 35 | --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features arch-cortex-m,executor-thread \ | 38 | --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features arch-cortex-m,executor-thread \ |
| 36 | --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features arch-cortex-m,executor-interrupt \ | 39 | --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features arch-cortex-m,executor-interrupt \ |
| 37 | --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features arch-cortex-m,executor-thread,executor-interrupt \ | 40 | --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features arch-cortex-m,executor-thread,executor-interrupt \ |
diff --git a/docs/examples/basic/src/main.rs b/docs/examples/basic/src/main.rs index 4412712c8..6e274bacb 100644 --- a/docs/examples/basic/src/main.rs +++ b/docs/examples/basic/src/main.rs | |||
| @@ -22,5 +22,5 @@ async fn main(spawner: Spawner) { | |||
| 22 | let p = embassy_nrf::init(Default::default()); | 22 | let p = embassy_nrf::init(Default::default()); |
| 23 | 23 | ||
| 24 | let led = Output::new(p.P0_13, Level::Low, OutputDrive::Standard); | 24 | let led = Output::new(p.P0_13, Level::Low, OutputDrive::Standard); |
| 25 | unwrap!(spawner.spawn(blinker(led, Duration::from_millis(300)))); | 25 | spawner.spawn(unwrap!(blinker(led, Duration::from_millis(300)))); |
| 26 | } | 26 | } |
diff --git a/docs/pages/sharing_peripherals.adoc b/docs/pages/sharing_peripherals.adoc index dfb8c1ffe..70b4210e6 100644 --- a/docs/pages/sharing_peripherals.adoc +++ b/docs/pages/sharing_peripherals.adoc | |||
| @@ -36,8 +36,8 @@ async fn main(spawner: Spawner) { | |||
| 36 | let dt = 100 * 1_000_000; | 36 | let dt = 100 * 1_000_000; |
| 37 | let k = 1.003; | 37 | let k = 1.003; |
| 38 | 38 | ||
| 39 | unwrap!(spawner.spawn(toggle_led(&LED, Duration::from_nanos(dt)))); | 39 | spawner.spawn(unwrap!(toggle_led(&LED, Duration::from_nanos(dt)))); |
| 40 | unwrap!(spawner.spawn(toggle_led(&LED, Duration::from_nanos((dt as f64 * k) as u64)))); | 40 | spawner.spawn(unwrap!(toggle_led(&LED, Duration::from_nanos((dt as f64 * k) as u64)))); |
| 41 | } | 41 | } |
| 42 | 42 | ||
| 43 | // A pool size of 2 means you can spawn two instances of this task. | 43 | // A pool size of 2 means you can spawn two instances of this task. |
| @@ -103,8 +103,8 @@ async fn main(spawner: Spawner) { | |||
| 103 | let dt = 100 * 1_000_000; | 103 | let dt = 100 * 1_000_000; |
| 104 | let k = 1.003; | 104 | let k = 1.003; |
| 105 | 105 | ||
| 106 | unwrap!(spawner.spawn(toggle_led(CHANNEL.sender(), Duration::from_nanos(dt)))); | 106 | spawner.spawn(unwrap!(toggle_led(CHANNEL.sender(), Duration::from_nanos(dt)))); |
| 107 | unwrap!(spawner.spawn(toggle_led(CHANNEL.sender(), Duration::from_nanos((dt as f64 * k) as u64)))); | 107 | spawner.spawn(unwrap!(toggle_led(CHANNEL.sender(), Duration::from_nanos((dt as f64 * k) as u64)))); |
| 108 | 108 | ||
| 109 | loop { | 109 | loop { |
| 110 | match CHANNEL.receive().await { | 110 | match CHANNEL.receive().await { |
diff --git a/embassy-executor-macros/src/macros/main.rs b/embassy-executor-macros/src/macros/main.rs index a0e7b3401..fcc04d9c0 100644 --- a/embassy-executor-macros/src/macros/main.rs +++ b/embassy-executor-macros/src/macros/main.rs | |||
| @@ -181,7 +181,7 @@ For example: `#[embassy_executor::main(entry = ..., executor = \"some_crate::Exe | |||
| 181 | let mut executor = #executor::new(); | 181 | let mut executor = #executor::new(); |
| 182 | let executor = unsafe { __make_static(&mut executor) }; | 182 | let executor = unsafe { __make_static(&mut executor) }; |
| 183 | executor.run(|spawner| { | 183 | executor.run(|spawner| { |
| 184 | spawner.must_spawn(__embassy_main(spawner)); | 184 | spawner.spawn(__embassy_main(spawner).unwrap()); |
| 185 | }) | 185 | }) |
| 186 | }, | 186 | }, |
| 187 | ), | 187 | ), |
| @@ -191,7 +191,7 @@ For example: `#[embassy_executor::main(entry = ..., executor = \"some_crate::Exe | |||
| 191 | let executor = ::std::boxed::Box::leak(::std::boxed::Box::new(#executor::new())); | 191 | let executor = ::std::boxed::Box::leak(::std::boxed::Box::new(#executor::new())); |
| 192 | 192 | ||
| 193 | executor.start(|spawner| { | 193 | executor.start(|spawner| { |
| 194 | spawner.must_spawn(__embassy_main(spawner)); | 194 | spawner.spawn(__embassy_main(spawner).unwrap()); |
| 195 | }); | 195 | }); |
| 196 | 196 | ||
| 197 | Ok(()) | 197 | Ok(()) |
diff --git a/embassy-executor-macros/src/macros/task.rs b/embassy-executor-macros/src/macros/task.rs index fc8673743..755948882 100644 --- a/embassy-executor-macros/src/macros/task.rs +++ b/embassy-executor-macros/src/macros/task.rs | |||
| @@ -234,7 +234,7 @@ pub fn run(args: TokenStream, item: TokenStream) -> TokenStream { | |||
| 234 | if !errors.is_empty() { | 234 | if !errors.is_empty() { |
| 235 | task_outer_body = quote! { | 235 | task_outer_body = quote! { |
| 236 | #![allow(unused_variables, unreachable_code)] | 236 | #![allow(unused_variables, unreachable_code)] |
| 237 | let _x: #embassy_executor::SpawnToken<()> = ::core::todo!(); | 237 | let _x: ::core::result::Result<#embassy_executor::SpawnToken<()>, #embassy_executor::SpawnError> = ::core::todo!(); |
| 238 | _x | 238 | _x |
| 239 | }; | 239 | }; |
| 240 | } | 240 | } |
| @@ -248,7 +248,7 @@ pub fn run(args: TokenStream, item: TokenStream) -> TokenStream { | |||
| 248 | #task_inner | 248 | #task_inner |
| 249 | 249 | ||
| 250 | #(#task_outer_attrs)* | 250 | #(#task_outer_attrs)* |
| 251 | #visibility #unsafety fn #task_ident #generics (#fargs) -> #embassy_executor::SpawnToken<impl Sized> #where_clause{ | 251 | #visibility #unsafety fn #task_ident #generics (#fargs) -> ::core::result::Result<#embassy_executor::SpawnToken<impl Sized>, #embassy_executor::SpawnError> #where_clause{ |
| 252 | #task_outer_body | 252 | #task_outer_body |
| 253 | } | 253 | } |
| 254 | 254 | ||
diff --git a/embassy-executor/CHANGELOG.md b/embassy-executor/CHANGELOG.md index f301429c0..f2db46ef9 100644 --- a/embassy-executor/CHANGELOG.md +++ b/embassy-executor/CHANGELOG.md | |||
| @@ -8,6 +8,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |||
| 8 | <!-- next-header --> | 8 | <!-- next-header --> |
| 9 | ## Unreleased - ReleaseDate | 9 | ## Unreleased - ReleaseDate |
| 10 | 10 | ||
| 11 | - Added new metadata API for tasks | ||
| 12 | |||
| 11 | ## 0.9.0 - 2025-08-26 | 13 | ## 0.9.0 - 2025-08-26 |
| 12 | 14 | ||
| 13 | - Added `extern "Rust" fn __embassy_time_queue_item_from_waker` | 15 | - Added `extern "Rust" fn __embassy_time_queue_item_from_waker` |
diff --git a/embassy-executor/Cargo.toml b/embassy-executor/Cargo.toml index d89e85cb7..79680ae74 100644 --- a/embassy-executor/Cargo.toml +++ b/embassy-executor/Cargo.toml | |||
| @@ -109,13 +109,35 @@ arch-avr = ["_arch", "dep:portable-atomic", "dep:avr-device"] | |||
| 109 | ## spin (architecture agnostic; never sleeps) | 109 | ## spin (architecture agnostic; never sleeps) |
| 110 | arch-spin = ["_arch"] | 110 | arch-spin = ["_arch"] |
| 111 | 111 | ||
| 112 | #! ### Metadata | ||
| 113 | |||
| 114 | ## Enable the `name` field in task metadata. | ||
| 115 | metadata-name = [] | ||
| 116 | |||
| 112 | #! ### Executor | 117 | #! ### Executor |
| 113 | 118 | ||
| 114 | ## Enable the thread-mode executor (using WFE/SEV in Cortex-M, WFI in other embedded archs) | 119 | ## Enable the thread-mode executor (using WFE/SEV in Cortex-M, WFI in other embedded archs) |
| 115 | executor-thread = [] | 120 | executor-thread = [] |
| 116 | ## Enable the interrupt-mode executor (available in Cortex-M only) | 121 | ## Enable the interrupt-mode executor (available in Cortex-M only) |
| 117 | executor-interrupt = [] | 122 | executor-interrupt = [] |
| 118 | ## Enable tracing support (adds some overhead) | 123 | ## Enable tracing hooks |
| 119 | trace = [] | 124 | trace = ["_any_trace"] |
| 120 | ## Enable support for rtos-trace framework | 125 | ## Enable support for rtos-trace framework |
| 121 | rtos-trace = ["dep:rtos-trace", "trace", "dep:embassy-time-driver"] | 126 | rtos-trace = ["_any_trace", "metadata-name", "dep:rtos-trace", "dep:embassy-time-driver"] |
| 127 | _any_trace = [] | ||
| 128 | |||
| 129 | #! ### Timer Item Payload Size | ||
| 130 | #! Sets the size of the payload for timer items, allowing integrated timer implementors to store | ||
| 131 | #! additional data in the timer item. The payload field will be aligned to this value as well. | ||
| 132 | #! If these features are not defined, the timer item will contain no payload field. | ||
| 133 | |||
| 134 | _timer-item-payload = [] # A size was picked | ||
| 135 | |||
| 136 | ## 1 bytes | ||
| 137 | timer-item-payload-size-1 = ["_timer-item-payload"] | ||
| 138 | ## 2 bytes | ||
| 139 | timer-item-payload-size-2 = ["_timer-item-payload"] | ||
| 140 | ## 4 bytes | ||
| 141 | timer-item-payload-size-4 = ["_timer-item-payload"] | ||
| 142 | ## 8 bytes | ||
| 143 | timer-item-payload-size-8 = ["_timer-item-payload"] | ||
diff --git a/embassy-executor/src/lib.rs b/embassy-executor/src/lib.rs index 0747db032..e47b8eb9f 100644 --- a/embassy-executor/src/lib.rs +++ b/embassy-executor/src/lib.rs | |||
| @@ -54,6 +54,9 @@ pub mod raw; | |||
| 54 | mod spawner; | 54 | mod spawner; |
| 55 | pub use spawner::*; | 55 | pub use spawner::*; |
| 56 | 56 | ||
| 57 | mod metadata; | ||
| 58 | pub use metadata::*; | ||
| 59 | |||
| 57 | /// Implementation details for embassy macros. | 60 | /// Implementation details for embassy macros. |
| 58 | /// Do not use. Used for macros and HALs only. Not covered by semver guarantees. | 61 | /// Do not use. Used for macros and HALs only. Not covered by semver guarantees. |
| 59 | #[doc(hidden)] | 62 | #[doc(hidden)] |
diff --git a/embassy-executor/src/metadata.rs b/embassy-executor/src/metadata.rs new file mode 100644 index 000000000..f92c9b37c --- /dev/null +++ b/embassy-executor/src/metadata.rs | |||
| @@ -0,0 +1,55 @@ | |||
| 1 | #[cfg(feature = "metadata-name")] | ||
| 2 | use core::cell::Cell; | ||
| 3 | use core::future::{poll_fn, Future}; | ||
| 4 | use core::task::Poll; | ||
| 5 | |||
| 6 | #[cfg(feature = "metadata-name")] | ||
| 7 | use critical_section::Mutex; | ||
| 8 | |||
| 9 | use crate::raw; | ||
| 10 | |||
| 11 | /// Metadata associated with a task. | ||
| 12 | pub struct Metadata { | ||
| 13 | #[cfg(feature = "metadata-name")] | ||
| 14 | name: Mutex<Cell<Option<&'static str>>>, | ||
| 15 | } | ||
| 16 | |||
| 17 | impl Metadata { | ||
| 18 | pub(crate) const fn new() -> Self { | ||
| 19 | Self { | ||
| 20 | #[cfg(feature = "metadata-name")] | ||
| 21 | name: Mutex::new(Cell::new(None)), | ||
| 22 | } | ||
| 23 | } | ||
| 24 | |||
| 25 | pub(crate) fn reset(&self) { | ||
| 26 | #[cfg(feature = "metadata-name")] | ||
| 27 | critical_section::with(|cs| self.name.borrow(cs).set(None)); | ||
| 28 | } | ||
| 29 | |||
| 30 | /// Get the metadata for the current task. | ||
| 31 | /// | ||
| 32 | /// You can use this to read or modify the current task's metadata. | ||
| 33 | /// | ||
| 34 | /// This function is `async` just to get access to the current async | ||
| 35 | /// context. It returns instantly, it does not block/yield. | ||
| 36 | pub fn for_current_task() -> impl Future<Output = &'static Self> { | ||
| 37 | poll_fn(|cx| Poll::Ready(raw::task_from_waker(cx.waker()).metadata())) | ||
| 38 | } | ||
| 39 | |||
| 40 | /// Get this task's name | ||
| 41 | /// | ||
| 42 | /// NOTE: this takes a critical section. | ||
| 43 | #[cfg(feature = "metadata-name")] | ||
| 44 | pub fn name(&self) -> Option<&'static str> { | ||
| 45 | critical_section::with(|cs| self.name.borrow(cs).get()) | ||
| 46 | } | ||
| 47 | |||
| 48 | /// Set this task's name | ||
| 49 | /// | ||
| 50 | /// NOTE: this takes a critical section. | ||
| 51 | #[cfg(feature = "metadata-name")] | ||
| 52 | pub fn set_name(&self, name: &'static str) { | ||
| 53 | critical_section::with(|cs| self.name.borrow(cs).set(Some(name))) | ||
| 54 | } | ||
| 55 | } | ||
diff --git a/embassy-executor/src/raw/mod.rs b/embassy-executor/src/raw/mod.rs index 4b17d4982..bdaa32951 100644 --- a/embassy-executor/src/raw/mod.rs +++ b/embassy-executor/src/raw/mod.rs | |||
| @@ -16,7 +16,7 @@ mod run_queue; | |||
| 16 | #[cfg_attr(not(target_has_atomic = "8"), path = "state_critical_section.rs")] | 16 | #[cfg_attr(not(target_has_atomic = "8"), path = "state_critical_section.rs")] |
| 17 | mod state; | 17 | mod state; |
| 18 | 18 | ||
| 19 | #[cfg(feature = "trace")] | 19 | #[cfg(feature = "_any_trace")] |
| 20 | pub mod trace; | 20 | pub mod trace; |
| 21 | pub(crate) mod util; | 21 | pub(crate) mod util; |
| 22 | #[cfg_attr(feature = "turbowakers", path = "waker_turbo.rs")] | 22 | #[cfg_attr(feature = "turbowakers", path = "waker_turbo.rs")] |
| @@ -41,6 +41,7 @@ use self::state::State; | |||
| 41 | use self::util::{SyncUnsafeCell, UninitCell}; | 41 | use self::util::{SyncUnsafeCell, UninitCell}; |
| 42 | pub use self::waker::task_from_waker; | 42 | pub use self::waker::task_from_waker; |
| 43 | use super::SpawnToken; | 43 | use super::SpawnToken; |
| 44 | use crate::{Metadata, SpawnError}; | ||
| 44 | 45 | ||
| 45 | #[no_mangle] | 46 | #[no_mangle] |
| 46 | extern "Rust" fn __embassy_time_queue_item_from_waker(waker: &Waker) -> &'static mut TimerQueueItem { | 47 | extern "Rust" fn __embassy_time_queue_item_from_waker(waker: &Waker) -> &'static mut TimerQueueItem { |
| @@ -94,11 +95,10 @@ pub(crate) struct TaskHeader { | |||
| 94 | 95 | ||
| 95 | /// Integrated timer queue storage. This field should not be accessed outside of the timer queue. | 96 | /// Integrated timer queue storage. This field should not be accessed outside of the timer queue. |
| 96 | pub(crate) timer_queue_item: TimerQueueItem, | 97 | pub(crate) timer_queue_item: TimerQueueItem, |
| 97 | #[cfg(feature = "trace")] | 98 | |
| 98 | pub(crate) name: Option<&'static str>, | 99 | pub(crate) metadata: Metadata, |
| 99 | #[cfg(feature = "trace")] | 100 | |
| 100 | pub(crate) id: u32, | 101 | #[cfg(feature = "rtos-trace")] |
| 101 | #[cfg(feature = "trace")] | ||
| 102 | all_tasks_next: AtomicPtr<TaskHeader>, | 102 | all_tasks_next: AtomicPtr<TaskHeader>, |
| 103 | } | 103 | } |
| 104 | 104 | ||
| @@ -129,6 +129,10 @@ impl TaskRef { | |||
| 129 | unsafe { self.ptr.as_ref() } | 129 | unsafe { self.ptr.as_ref() } |
| 130 | } | 130 | } |
| 131 | 131 | ||
| 132 | pub(crate) fn metadata(self) -> &'static Metadata { | ||
| 133 | unsafe { &self.ptr.as_ref().metadata } | ||
| 134 | } | ||
| 135 | |||
| 132 | /// Returns a reference to the executor that the task is currently running on. | 136 | /// Returns a reference to the executor that the task is currently running on. |
| 133 | pub unsafe fn executor(self) -> Option<&'static Executor> { | 137 | pub unsafe fn executor(self) -> Option<&'static Executor> { |
| 134 | let executor = self.header().executor.load(Ordering::Relaxed); | 138 | let executor = self.header().executor.load(Ordering::Relaxed); |
| @@ -148,6 +152,12 @@ impl TaskRef { | |||
| 148 | pub(crate) fn as_ptr(self) -> *const TaskHeader { | 152 | pub(crate) fn as_ptr(self) -> *const TaskHeader { |
| 149 | self.ptr.as_ptr() | 153 | self.ptr.as_ptr() |
| 150 | } | 154 | } |
| 155 | |||
| 156 | /// Returns the task ID. | ||
| 157 | /// This can be used in combination with rtos-trace to match task names with IDs | ||
| 158 | pub fn id(&self) -> u32 { | ||
| 159 | self.as_ptr() as u32 | ||
| 160 | } | ||
| 151 | } | 161 | } |
| 152 | 162 | ||
| 153 | /// Raw storage in which a task can be spawned. | 163 | /// Raw storage in which a task can be spawned. |
| @@ -189,11 +199,8 @@ impl<F: Future + 'static> TaskStorage<F> { | |||
| 189 | poll_fn: SyncUnsafeCell::new(None), | 199 | poll_fn: SyncUnsafeCell::new(None), |
| 190 | 200 | ||
| 191 | timer_queue_item: TimerQueueItem::new(), | 201 | timer_queue_item: TimerQueueItem::new(), |
| 192 | #[cfg(feature = "trace")] | 202 | metadata: Metadata::new(), |
| 193 | name: None, | 203 | #[cfg(feature = "rtos-trace")] |
| 194 | #[cfg(feature = "trace")] | ||
| 195 | id: 0, | ||
| 196 | #[cfg(feature = "trace")] | ||
| 197 | all_tasks_next: AtomicPtr::new(core::ptr::null_mut()), | 204 | all_tasks_next: AtomicPtr::new(core::ptr::null_mut()), |
| 198 | }, | 205 | }, |
| 199 | future: UninitCell::uninit(), | 206 | future: UninitCell::uninit(), |
| @@ -213,11 +220,11 @@ impl<F: Future + 'static> TaskStorage<F> { | |||
| 213 | /// | 220 | /// |
| 214 | /// Once the task has finished running, you may spawn it again. It is allowed to spawn it | 221 | /// Once the task has finished running, you may spawn it again. It is allowed to spawn it |
| 215 | /// on a different executor. | 222 | /// on a different executor. |
| 216 | pub fn spawn(&'static self, future: impl FnOnce() -> F) -> SpawnToken<impl Sized> { | 223 | pub fn spawn(&'static self, future: impl FnOnce() -> F) -> Result<SpawnToken<impl Sized>, SpawnError> { |
| 217 | let task = AvailableTask::claim(self); | 224 | let task = AvailableTask::claim(self); |
| 218 | match task { | 225 | match task { |
| 219 | Some(task) => task.initialize(future), | 226 | Some(task) => Ok(task.initialize(future)), |
| 220 | None => SpawnToken::new_failed(), | 227 | None => Err(SpawnError::Busy), |
| 221 | } | 228 | } |
| 222 | } | 229 | } |
| 223 | 230 | ||
| @@ -229,7 +236,7 @@ impl<F: Future + 'static> TaskStorage<F> { | |||
| 229 | let mut cx = Context::from_waker(&waker); | 236 | let mut cx = Context::from_waker(&waker); |
| 230 | match future.poll(&mut cx) { | 237 | match future.poll(&mut cx) { |
| 231 | Poll::Ready(_) => { | 238 | Poll::Ready(_) => { |
| 232 | #[cfg(feature = "trace")] | 239 | #[cfg(feature = "_any_trace")] |
| 233 | let exec_ptr: *const SyncExecutor = this.raw.executor.load(Ordering::Relaxed); | 240 | let exec_ptr: *const SyncExecutor = this.raw.executor.load(Ordering::Relaxed); |
| 234 | 241 | ||
| 235 | // As the future has finished and this function will not be called | 242 | // As the future has finished and this function will not be called |
| @@ -244,7 +251,7 @@ impl<F: Future + 'static> TaskStorage<F> { | |||
| 244 | // after we're done with it. | 251 | // after we're done with it. |
| 245 | this.raw.state.despawn(); | 252 | this.raw.state.despawn(); |
| 246 | 253 | ||
| 247 | #[cfg(feature = "trace")] | 254 | #[cfg(feature = "_any_trace")] |
| 248 | trace::task_end(exec_ptr, &p); | 255 | trace::task_end(exec_ptr, &p); |
| 249 | } | 256 | } |
| 250 | Poll::Pending => {} | 257 | Poll::Pending => {} |
| @@ -279,6 +286,7 @@ impl<F: Future + 'static> AvailableTask<F> { | |||
| 279 | 286 | ||
| 280 | fn initialize_impl<S>(self, future: impl FnOnce() -> F) -> SpawnToken<S> { | 287 | fn initialize_impl<S>(self, future: impl FnOnce() -> F) -> SpawnToken<S> { |
| 281 | unsafe { | 288 | unsafe { |
| 289 | self.task.raw.metadata.reset(); | ||
| 282 | self.task.raw.poll_fn.set(Some(TaskStorage::<F>::poll)); | 290 | self.task.raw.poll_fn.set(Some(TaskStorage::<F>::poll)); |
| 283 | self.task.future.write_in_place(future); | 291 | self.task.future.write_in_place(future); |
| 284 | 292 | ||
| @@ -345,10 +353,10 @@ impl<F: Future + 'static, const N: usize> TaskPool<F, N> { | |||
| 345 | } | 353 | } |
| 346 | } | 354 | } |
| 347 | 355 | ||
| 348 | fn spawn_impl<T>(&'static self, future: impl FnOnce() -> F) -> SpawnToken<T> { | 356 | fn spawn_impl<T>(&'static self, future: impl FnOnce() -> F) -> Result<SpawnToken<T>, SpawnError> { |
| 349 | match self.pool.iter().find_map(AvailableTask::claim) { | 357 | match self.pool.iter().find_map(AvailableTask::claim) { |
| 350 | Some(task) => task.initialize_impl::<T>(future), | 358 | Some(task) => Ok(task.initialize_impl::<T>(future)), |
| 351 | None => SpawnToken::new_failed(), | 359 | None => Err(SpawnError::Busy), |
| 352 | } | 360 | } |
| 353 | } | 361 | } |
| 354 | 362 | ||
| @@ -359,7 +367,7 @@ impl<F: Future + 'static, const N: usize> TaskPool<F, N> { | |||
| 359 | /// This will loop over the pool and spawn the task in the first storage that | 367 | /// This will loop over the pool and spawn the task in the first storage that |
| 360 | /// is currently free. If none is free, a "poisoned" SpawnToken is returned, | 368 | /// is currently free. If none is free, a "poisoned" SpawnToken is returned, |
| 361 | /// which will cause [`Spawner::spawn()`](super::Spawner::spawn) to return the error. | 369 | /// which will cause [`Spawner::spawn()`](super::Spawner::spawn) to return the error. |
| 362 | pub fn spawn(&'static self, future: impl FnOnce() -> F) -> SpawnToken<impl Sized> { | 370 | pub fn spawn(&'static self, future: impl FnOnce() -> F) -> Result<SpawnToken<impl Sized>, SpawnError> { |
| 363 | self.spawn_impl::<F>(future) | 371 | self.spawn_impl::<F>(future) |
| 364 | } | 372 | } |
| 365 | 373 | ||
| @@ -372,7 +380,7 @@ impl<F: Future + 'static, const N: usize> TaskPool<F, N> { | |||
| 372 | /// SAFETY: `future` must be a closure of the form `move || my_async_fn(args)`, where `my_async_fn` | 380 | /// SAFETY: `future` must be a closure of the form `move || my_async_fn(args)`, where `my_async_fn` |
| 373 | /// is an `async fn`, NOT a hand-written `Future`. | 381 | /// is an `async fn`, NOT a hand-written `Future`. |
| 374 | #[doc(hidden)] | 382 | #[doc(hidden)] |
| 375 | pub unsafe fn _spawn_async_fn<FutFn>(&'static self, future: FutFn) -> SpawnToken<impl Sized> | 383 | pub unsafe fn _spawn_async_fn<FutFn>(&'static self, future: FutFn) -> Result<SpawnToken<impl Sized>, SpawnError> |
| 376 | where | 384 | where |
| 377 | FutFn: FnOnce() -> F, | 385 | FutFn: FnOnce() -> F, |
| 378 | { | 386 | { |
| @@ -417,7 +425,7 @@ impl SyncExecutor { | |||
| 417 | /// - `task` must NOT be already enqueued (in this executor or another one). | 425 | /// - `task` must NOT be already enqueued (in this executor or another one). |
| 418 | #[inline(always)] | 426 | #[inline(always)] |
| 419 | unsafe fn enqueue(&self, task: TaskRef, l: state::Token) { | 427 | unsafe fn enqueue(&self, task: TaskRef, l: state::Token) { |
| 420 | #[cfg(feature = "trace")] | 428 | #[cfg(feature = "_any_trace")] |
| 421 | trace::task_ready_begin(self, &task); | 429 | trace::task_ready_begin(self, &task); |
| 422 | 430 | ||
| 423 | if self.run_queue.enqueue(task, l) { | 431 | if self.run_queue.enqueue(task, l) { |
| @@ -430,7 +438,7 @@ impl SyncExecutor { | |||
| 430 | .executor | 438 | .executor |
| 431 | .store((self as *const Self).cast_mut(), Ordering::Relaxed); | 439 | .store((self as *const Self).cast_mut(), Ordering::Relaxed); |
| 432 | 440 | ||
| 433 | #[cfg(feature = "trace")] | 441 | #[cfg(feature = "_any_trace")] |
| 434 | trace::task_new(self, &task); | 442 | trace::task_new(self, &task); |
| 435 | 443 | ||
| 436 | state::locked(|l| { | 444 | state::locked(|l| { |
| @@ -442,23 +450,23 @@ impl SyncExecutor { | |||
| 442 | /// | 450 | /// |
| 443 | /// Same as [`Executor::poll`], plus you must only call this on the thread this executor was created. | 451 | /// Same as [`Executor::poll`], plus you must only call this on the thread this executor was created. |
| 444 | pub(crate) unsafe fn poll(&'static self) { | 452 | pub(crate) unsafe fn poll(&'static self) { |
| 445 | #[cfg(feature = "trace")] | 453 | #[cfg(feature = "_any_trace")] |
| 446 | trace::poll_start(self); | 454 | trace::poll_start(self); |
| 447 | 455 | ||
| 448 | self.run_queue.dequeue_all(|p| { | 456 | self.run_queue.dequeue_all(|p| { |
| 449 | let task = p.header(); | 457 | let task = p.header(); |
| 450 | 458 | ||
| 451 | #[cfg(feature = "trace")] | 459 | #[cfg(feature = "_any_trace")] |
| 452 | trace::task_exec_begin(self, &p); | 460 | trace::task_exec_begin(self, &p); |
| 453 | 461 | ||
| 454 | // Run the task | 462 | // Run the task |
| 455 | task.poll_fn.get().unwrap_unchecked()(p); | 463 | task.poll_fn.get().unwrap_unchecked()(p); |
| 456 | 464 | ||
| 457 | #[cfg(feature = "trace")] | 465 | #[cfg(feature = "_any_trace")] |
| 458 | trace::task_exec_end(self, &p); | 466 | trace::task_exec_end(self, &p); |
| 459 | }); | 467 | }); |
| 460 | 468 | ||
| 461 | #[cfg(feature = "trace")] | 469 | #[cfg(feature = "_any_trace")] |
| 462 | trace::executor_idle(self) | 470 | trace::executor_idle(self) |
| 463 | } | 471 | } |
| 464 | } | 472 | } |
diff --git a/embassy-executor/src/raw/trace.rs b/embassy-executor/src/raw/trace.rs index f484abf58..b3086948c 100644 --- a/embassy-executor/src/raw/trace.rs +++ b/embassy-executor/src/raw/trace.rs | |||
| @@ -95,17 +95,20 @@ use crate::spawner::{SpawnError, SpawnToken, Spawner}; | |||
| 95 | /// This static provides access to the global task tracker which maintains | 95 | /// This static provides access to the global task tracker which maintains |
| 96 | /// a list of all tasks in the system. It's automatically updated by the | 96 | /// a list of all tasks in the system. It's automatically updated by the |
| 97 | /// task lifecycle hooks in the trace module. | 97 | /// task lifecycle hooks in the trace module. |
| 98 | pub static TASK_TRACKER: TaskTracker = TaskTracker::new(); | 98 | #[cfg(feature = "rtos-trace")] |
| 99 | pub(crate) static TASK_TRACKER: TaskTracker = TaskTracker::new(); | ||
| 99 | 100 | ||
| 100 | /// A thread-safe tracker for all tasks in the system | 101 | /// A thread-safe tracker for all tasks in the system |
| 101 | /// | 102 | /// |
| 102 | /// This struct uses an intrusive linked list approach to track all tasks | 103 | /// This struct uses an intrusive linked list approach to track all tasks |
| 103 | /// without additional memory allocations. It maintains a global list of | 104 | /// without additional memory allocations. It maintains a global list of |
| 104 | /// tasks that can be traversed to find all currently existing tasks. | 105 | /// tasks that can be traversed to find all currently existing tasks. |
| 105 | pub struct TaskTracker { | 106 | #[cfg(feature = "rtos-trace")] |
| 107 | pub(crate) struct TaskTracker { | ||
| 106 | head: AtomicPtr<TaskHeader>, | 108 | head: AtomicPtr<TaskHeader>, |
| 107 | } | 109 | } |
| 108 | 110 | ||
| 111 | #[cfg(feature = "rtos-trace")] | ||
| 109 | impl TaskTracker { | 112 | impl TaskTracker { |
| 110 | /// Creates a new empty task tracker | 113 | /// Creates a new empty task tracker |
| 111 | /// | 114 | /// |
| @@ -125,7 +128,7 @@ impl TaskTracker { | |||
| 125 | /// # Arguments | 128 | /// # Arguments |
| 126 | /// * `task` - The task reference to add to the tracker | 129 | /// * `task` - The task reference to add to the tracker |
| 127 | pub fn add(&self, task: TaskRef) { | 130 | pub fn add(&self, task: TaskRef) { |
| 128 | let task_ptr = task.as_ptr() as *mut TaskHeader; | 131 | let task_ptr = task.as_ptr(); |
| 129 | 132 | ||
| 130 | loop { | 133 | loop { |
| 131 | let current_head = self.head.load(Ordering::Acquire); | 134 | let current_head = self.head.load(Ordering::Acquire); |
| @@ -135,7 +138,7 @@ impl TaskTracker { | |||
| 135 | 138 | ||
| 136 | if self | 139 | if self |
| 137 | .head | 140 | .head |
| 138 | .compare_exchange(current_head, task_ptr, Ordering::Release, Ordering::Relaxed) | 141 | .compare_exchange(current_head, task_ptr.cast_mut(), Ordering::Release, Ordering::Relaxed) |
| 139 | .is_ok() | 142 | .is_ok() |
| 140 | { | 143 | { |
| 141 | break; | 144 | break; |
| @@ -165,50 +168,7 @@ impl TaskTracker { | |||
| 165 | } | 168 | } |
| 166 | } | 169 | } |
| 167 | 170 | ||
| 168 | /// Extension trait for `TaskRef` that provides tracing functionality. | 171 | #[cfg(feature = "trace")] |
| 169 | /// | ||
| 170 | /// This trait is only available when the `trace` feature is enabled. | ||
| 171 | /// It extends `TaskRef` with methods for accessing and modifying task identifiers | ||
| 172 | /// and names, which are useful for debugging, logging, and performance analysis. | ||
| 173 | pub trait TaskRefTrace { | ||
| 174 | /// Get the name for a task | ||
| 175 | fn name(&self) -> Option<&'static str>; | ||
| 176 | |||
| 177 | /// Set the name for a task | ||
| 178 | fn set_name(&self, name: Option<&'static str>); | ||
| 179 | |||
| 180 | /// Get the ID for a task | ||
| 181 | fn id(&self) -> u32; | ||
| 182 | |||
| 183 | /// Set the ID for a task | ||
| 184 | fn set_id(&self, id: u32); | ||
| 185 | } | ||
| 186 | |||
| 187 | impl TaskRefTrace for TaskRef { | ||
| 188 | fn name(&self) -> Option<&'static str> { | ||
| 189 | self.header().name | ||
| 190 | } | ||
| 191 | |||
| 192 | fn set_name(&self, name: Option<&'static str>) { | ||
| 193 | unsafe { | ||
| 194 | let header_ptr = self.ptr.as_ptr() as *mut TaskHeader; | ||
| 195 | (*header_ptr).name = name; | ||
| 196 | } | ||
| 197 | } | ||
| 198 | |||
| 199 | fn id(&self) -> u32 { | ||
| 200 | self.header().id | ||
| 201 | } | ||
| 202 | |||
| 203 | fn set_id(&self, id: u32) { | ||
| 204 | unsafe { | ||
| 205 | let header_ptr = self.ptr.as_ptr() as *mut TaskHeader; | ||
| 206 | (*header_ptr).id = id; | ||
| 207 | } | ||
| 208 | } | ||
| 209 | } | ||
| 210 | |||
| 211 | #[cfg(not(feature = "rtos-trace"))] | ||
| 212 | extern "Rust" { | 172 | extern "Rust" { |
| 213 | /// This callback is called when the executor begins polling. This will always | 173 | /// This callback is called when the executor begins polling. This will always |
| 214 | /// be paired with a later call to `_embassy_trace_executor_idle`. | 174 | /// be paired with a later call to `_embassy_trace_executor_idle`. |
| @@ -270,7 +230,7 @@ extern "Rust" { | |||
| 270 | 230 | ||
| 271 | #[inline] | 231 | #[inline] |
| 272 | pub(crate) fn poll_start(executor: &SyncExecutor) { | 232 | pub(crate) fn poll_start(executor: &SyncExecutor) { |
| 273 | #[cfg(not(feature = "rtos-trace"))] | 233 | #[cfg(feature = "trace")] |
| 274 | unsafe { | 234 | unsafe { |
| 275 | _embassy_trace_poll_start(executor as *const _ as u32) | 235 | _embassy_trace_poll_start(executor as *const _ as u32) |
| 276 | } | 236 | } |
| @@ -278,7 +238,7 @@ pub(crate) fn poll_start(executor: &SyncExecutor) { | |||
| 278 | 238 | ||
| 279 | #[inline] | 239 | #[inline] |
| 280 | pub(crate) fn task_new(executor: &SyncExecutor, task: &TaskRef) { | 240 | pub(crate) fn task_new(executor: &SyncExecutor, task: &TaskRef) { |
| 281 | #[cfg(not(feature = "rtos-trace"))] | 241 | #[cfg(feature = "trace")] |
| 282 | unsafe { | 242 | unsafe { |
| 283 | _embassy_trace_task_new(executor as *const _ as u32, task.as_ptr() as u32) | 243 | _embassy_trace_task_new(executor as *const _ as u32, task.as_ptr() as u32) |
| 284 | } | 244 | } |
| @@ -286,7 +246,7 @@ pub(crate) fn task_new(executor: &SyncExecutor, task: &TaskRef) { | |||
| 286 | #[cfg(feature = "rtos-trace")] | 246 | #[cfg(feature = "rtos-trace")] |
| 287 | { | 247 | { |
| 288 | rtos_trace::trace::task_new(task.as_ptr() as u32); | 248 | rtos_trace::trace::task_new(task.as_ptr() as u32); |
| 289 | let name = task.name().unwrap_or("unnamed task\0"); | 249 | let name = task.metadata().name().unwrap_or("unnamed task\0"); |
| 290 | let info = rtos_trace::TaskInfo { | 250 | let info = rtos_trace::TaskInfo { |
| 291 | name, | 251 | name, |
| 292 | priority: 0, | 252 | priority: 0, |
| @@ -302,7 +262,7 @@ pub(crate) fn task_new(executor: &SyncExecutor, task: &TaskRef) { | |||
| 302 | 262 | ||
| 303 | #[inline] | 263 | #[inline] |
| 304 | pub(crate) fn task_end(executor: *const SyncExecutor, task: &TaskRef) { | 264 | pub(crate) fn task_end(executor: *const SyncExecutor, task: &TaskRef) { |
| 305 | #[cfg(not(feature = "rtos-trace"))] | 265 | #[cfg(feature = "trace")] |
| 306 | unsafe { | 266 | unsafe { |
| 307 | _embassy_trace_task_end(executor as u32, task.as_ptr() as u32) | 267 | _embassy_trace_task_end(executor as u32, task.as_ptr() as u32) |
| 308 | } | 268 | } |
| @@ -310,7 +270,7 @@ pub(crate) fn task_end(executor: *const SyncExecutor, task: &TaskRef) { | |||
| 310 | 270 | ||
| 311 | #[inline] | 271 | #[inline] |
| 312 | pub(crate) fn task_ready_begin(executor: &SyncExecutor, task: &TaskRef) { | 272 | pub(crate) fn task_ready_begin(executor: &SyncExecutor, task: &TaskRef) { |
| 313 | #[cfg(not(feature = "rtos-trace"))] | 273 | #[cfg(feature = "trace")] |
| 314 | unsafe { | 274 | unsafe { |
| 315 | _embassy_trace_task_ready_begin(executor as *const _ as u32, task.as_ptr() as u32) | 275 | _embassy_trace_task_ready_begin(executor as *const _ as u32, task.as_ptr() as u32) |
| 316 | } | 276 | } |
| @@ -320,7 +280,7 @@ pub(crate) fn task_ready_begin(executor: &SyncExecutor, task: &TaskRef) { | |||
| 320 | 280 | ||
| 321 | #[inline] | 281 | #[inline] |
| 322 | pub(crate) fn task_exec_begin(executor: &SyncExecutor, task: &TaskRef) { | 282 | pub(crate) fn task_exec_begin(executor: &SyncExecutor, task: &TaskRef) { |
| 323 | #[cfg(not(feature = "rtos-trace"))] | 283 | #[cfg(feature = "trace")] |
| 324 | unsafe { | 284 | unsafe { |
| 325 | _embassy_trace_task_exec_begin(executor as *const _ as u32, task.as_ptr() as u32) | 285 | _embassy_trace_task_exec_begin(executor as *const _ as u32, task.as_ptr() as u32) |
| 326 | } | 286 | } |
| @@ -330,7 +290,7 @@ pub(crate) fn task_exec_begin(executor: &SyncExecutor, task: &TaskRef) { | |||
| 330 | 290 | ||
| 331 | #[inline] | 291 | #[inline] |
| 332 | pub(crate) fn task_exec_end(executor: &SyncExecutor, task: &TaskRef) { | 292 | pub(crate) fn task_exec_end(executor: &SyncExecutor, task: &TaskRef) { |
| 333 | #[cfg(not(feature = "rtos-trace"))] | 293 | #[cfg(feature = "trace")] |
| 334 | unsafe { | 294 | unsafe { |
| 335 | _embassy_trace_task_exec_end(executor as *const _ as u32, task.as_ptr() as u32) | 295 | _embassy_trace_task_exec_end(executor as *const _ as u32, task.as_ptr() as u32) |
| 336 | } | 296 | } |
| @@ -340,7 +300,7 @@ pub(crate) fn task_exec_end(executor: &SyncExecutor, task: &TaskRef) { | |||
| 340 | 300 | ||
| 341 | #[inline] | 301 | #[inline] |
| 342 | pub(crate) fn executor_idle(executor: &SyncExecutor) { | 302 | pub(crate) fn executor_idle(executor: &SyncExecutor) { |
| 343 | #[cfg(not(feature = "rtos-trace"))] | 303 | #[cfg(feature = "trace")] |
| 344 | unsafe { | 304 | unsafe { |
| 345 | _embassy_trace_executor_idle(executor as *const _ as u32) | 305 | _embassy_trace_executor_idle(executor as *const _ as u32) |
| 346 | } | 306 | } |
| @@ -356,6 +316,7 @@ pub(crate) fn executor_idle(executor: &SyncExecutor) { | |||
| 356 | /// | 316 | /// |
| 357 | /// # Returns | 317 | /// # Returns |
| 358 | /// An iterator that yields `TaskRef` items for each task | 318 | /// An iterator that yields `TaskRef` items for each task |
| 319 | #[cfg(feature = "rtos-trace")] | ||
| 359 | fn get_all_active_tasks() -> impl Iterator<Item = TaskRef> + 'static { | 320 | fn get_all_active_tasks() -> impl Iterator<Item = TaskRef> + 'static { |
| 360 | struct TaskIterator<'a> { | 321 | struct TaskIterator<'a> { |
| 361 | tracker: &'a TaskTracker, | 322 | tracker: &'a TaskTracker, |
| @@ -384,6 +345,7 @@ fn get_all_active_tasks() -> impl Iterator<Item = TaskRef> + 'static { | |||
| 384 | } | 345 | } |
| 385 | 346 | ||
| 386 | /// Perform an action on each active task | 347 | /// Perform an action on each active task |
| 348 | #[cfg(feature = "rtos-trace")] | ||
| 387 | fn with_all_active_tasks<F>(f: F) | 349 | fn with_all_active_tasks<F>(f: F) |
| 388 | where | 350 | where |
| 389 | F: FnMut(TaskRef), | 351 | F: FnMut(TaskRef), |
| @@ -395,9 +357,8 @@ where | |||
| 395 | impl rtos_trace::RtosTraceOSCallbacks for crate::raw::SyncExecutor { | 357 | impl rtos_trace::RtosTraceOSCallbacks for crate::raw::SyncExecutor { |
| 396 | fn task_list() { | 358 | fn task_list() { |
| 397 | with_all_active_tasks(|task| { | 359 | with_all_active_tasks(|task| { |
| 398 | let name = task.name().unwrap_or("unnamed task\0"); | ||
| 399 | let info = rtos_trace::TaskInfo { | 360 | let info = rtos_trace::TaskInfo { |
| 400 | name, | 361 | name: task.metadata().name().unwrap_or("unnamed task\0"), |
| 401 | priority: 0, | 362 | priority: 0, |
| 402 | stack_base: 0, | 363 | stack_base: 0, |
| 403 | stack_size: 0, | 364 | stack_size: 0, |
diff --git a/embassy-executor/src/spawner.rs b/embassy-executor/src/spawner.rs index 2909d19a0..83d896b76 100644 --- a/embassy-executor/src/spawner.rs +++ b/embassy-executor/src/spawner.rs | |||
| @@ -5,8 +5,7 @@ use core::sync::atomic::Ordering; | |||
| 5 | use core::task::Poll; | 5 | use core::task::Poll; |
| 6 | 6 | ||
| 7 | use super::raw; | 7 | use super::raw; |
| 8 | #[cfg(feature = "trace")] | 8 | use crate::Metadata; |
| 9 | use crate::raw::trace::TaskRefTrace; | ||
| 10 | 9 | ||
| 11 | /// Token to spawn a newly-created task in an executor. | 10 | /// Token to spawn a newly-created task in an executor. |
| 12 | /// | 11 | /// |
| @@ -24,33 +23,28 @@ use crate::raw::trace::TaskRefTrace; | |||
| 24 | /// Once you've invoked a task function and obtained a SpawnToken, you *must* spawn it. | 23 | /// Once you've invoked a task function and obtained a SpawnToken, you *must* spawn it. |
| 25 | #[must_use = "Calling a task function does nothing on its own. You must spawn the returned SpawnToken, typically with Spawner::spawn()"] | 24 | #[must_use = "Calling a task function does nothing on its own. You must spawn the returned SpawnToken, typically with Spawner::spawn()"] |
| 26 | pub struct SpawnToken<S> { | 25 | pub struct SpawnToken<S> { |
| 27 | pub(crate) raw_task: Option<raw::TaskRef>, | 26 | pub(crate) raw_task: raw::TaskRef, |
| 28 | phantom: PhantomData<*mut S>, | 27 | phantom: PhantomData<*mut S>, |
| 29 | } | 28 | } |
| 30 | 29 | ||
| 31 | impl<S> SpawnToken<S> { | 30 | impl<S> SpawnToken<S> { |
| 32 | pub(crate) unsafe fn new(raw_task: raw::TaskRef) -> Self { | 31 | pub(crate) unsafe fn new(raw_task: raw::TaskRef) -> Self { |
| 33 | Self { | 32 | Self { |
| 34 | raw_task: Some(raw_task), | 33 | raw_task, |
| 35 | phantom: PhantomData, | 34 | phantom: PhantomData, |
| 36 | } | 35 | } |
| 37 | } | 36 | } |
| 38 | 37 | ||
| 39 | /// Returns the task id if available, otherwise 0 | 38 | /// Returns the task ID. |
| 40 | /// This can be used in combination with rtos-trace to match task names with id's | 39 | /// This can be used in combination with rtos-trace to match task names with IDs |
| 41 | pub fn id(&self) -> u32 { | 40 | pub fn id(&self) -> u32 { |
| 42 | match self.raw_task { | 41 | self.raw_task.id() |
| 43 | None => 0, | ||
| 44 | Some(t) => t.as_ptr() as u32, | ||
| 45 | } | ||
| 46 | } | 42 | } |
| 47 | 43 | ||
| 48 | /// Return a SpawnToken that represents a failed spawn. | 44 | /// Get the metadata for this task. You can use this to set metadata fields |
| 49 | pub fn new_failed() -> Self { | 45 | /// prior to spawning it. |
| 50 | Self { | 46 | pub fn metadata(&self) -> &Metadata { |
| 51 | raw_task: None, | 47 | self.raw_task.metadata() |
| 52 | phantom: PhantomData, | ||
| 53 | } | ||
| 54 | } | 48 | } |
| 55 | } | 49 | } |
| 56 | 50 | ||
| @@ -159,30 +153,10 @@ impl Spawner { | |||
| 159 | /// Spawn a task into an executor. | 153 | /// Spawn a task into an executor. |
| 160 | /// | 154 | /// |
| 161 | /// You obtain the `token` by calling a task function (i.e. one marked with `#[embassy_executor::task]`). | 155 | /// You obtain the `token` by calling a task function (i.e. one marked with `#[embassy_executor::task]`). |
| 162 | pub fn spawn<S>(&self, token: SpawnToken<S>) -> Result<(), SpawnError> { | 156 | pub fn spawn<S>(&self, token: SpawnToken<S>) { |
| 163 | let task = token.raw_task; | 157 | let task = token.raw_task; |
| 164 | mem::forget(token); | 158 | mem::forget(token); |
| 165 | 159 | unsafe { self.executor.spawn(task) } | |
| 166 | match task { | ||
| 167 | Some(task) => { | ||
| 168 | unsafe { self.executor.spawn(task) }; | ||
| 169 | Ok(()) | ||
| 170 | } | ||
| 171 | None => Err(SpawnError::Busy), | ||
| 172 | } | ||
| 173 | } | ||
| 174 | |||
| 175 | // Used by the `embassy_executor_macros::main!` macro to throw an error when spawn | ||
| 176 | // fails. This is here to allow conditional use of `defmt::unwrap!` | ||
| 177 | // without introducing a `defmt` feature in the `embassy_executor_macros` package, | ||
| 178 | // which would require use of `-Z namespaced-features`. | ||
| 179 | /// Spawn a task into an executor, panicking on failure. | ||
| 180 | /// | ||
| 181 | /// # Panics | ||
| 182 | /// | ||
| 183 | /// Panics if the spawning fails. | ||
| 184 | pub fn must_spawn<S>(&self, token: SpawnToken<S>) { | ||
| 185 | unwrap!(self.spawn(token)); | ||
| 186 | } | 160 | } |
| 187 | 161 | ||
| 188 | /// Convert this Spawner to a SendSpawner. This allows you to send the | 162 | /// Convert this Spawner to a SendSpawner. This allows you to send the |
| @@ -198,53 +172,6 @@ impl Spawner { | |||
| 198 | } | 172 | } |
| 199 | } | 173 | } |
| 200 | 174 | ||
| 201 | /// Extension trait adding tracing capabilities to the Spawner | ||
| 202 | /// | ||
| 203 | /// This trait provides an additional method to spawn tasks with an associated name, | ||
| 204 | /// which can be useful for debugging and tracing purposes. | ||
| 205 | pub trait SpawnerTraceExt { | ||
| 206 | /// Spawns a new task with a specified name. | ||
| 207 | /// | ||
| 208 | /// # Arguments | ||
| 209 | /// * `name` - Static string name to associate with the task | ||
| 210 | /// * `token` - Token representing the task to spawn | ||
| 211 | /// | ||
| 212 | /// # Returns | ||
| 213 | /// Result indicating whether the spawn was successful | ||
| 214 | fn spawn_named<S>(&self, name: &'static str, token: SpawnToken<S>) -> Result<(), SpawnError>; | ||
| 215 | } | ||
| 216 | |||
| 217 | /// Implementation of the SpawnerTraceExt trait for Spawner when trace is enabled | ||
| 218 | #[cfg(feature = "trace")] | ||
| 219 | impl SpawnerTraceExt for Spawner { | ||
| 220 | fn spawn_named<S>(&self, name: &'static str, token: SpawnToken<S>) -> Result<(), SpawnError> { | ||
| 221 | let task = token.raw_task; | ||
| 222 | core::mem::forget(token); | ||
| 223 | |||
| 224 | match task { | ||
| 225 | Some(task) => { | ||
| 226 | // Set the name and ID when trace is enabled | ||
| 227 | task.set_name(Some(name)); | ||
| 228 | let task_id = task.as_ptr() as u32; | ||
| 229 | task.set_id(task_id); | ||
| 230 | |||
| 231 | unsafe { self.executor.spawn(task) }; | ||
| 232 | Ok(()) | ||
| 233 | } | ||
| 234 | None => Err(SpawnError::Busy), | ||
| 235 | } | ||
| 236 | } | ||
| 237 | } | ||
| 238 | |||
| 239 | /// Implementation of the SpawnerTraceExt trait for Spawner when trace is disabled | ||
| 240 | #[cfg(not(feature = "trace"))] | ||
| 241 | impl SpawnerTraceExt for Spawner { | ||
| 242 | fn spawn_named<S>(&self, _name: &'static str, token: SpawnToken<S>) -> Result<(), SpawnError> { | ||
| 243 | // When trace is disabled, just forward to regular spawn and ignore the name | ||
| 244 | self.spawn(token) | ||
| 245 | } | ||
| 246 | } | ||
| 247 | |||
| 248 | /// Handle to spawn tasks into an executor from any thread. | 175 | /// Handle to spawn tasks into an executor from any thread. |
| 249 | /// | 176 | /// |
| 250 | /// This Spawner can be used from any thread (it is Send), but it can | 177 | /// This Spawner can be used from any thread (it is Send), but it can |
| @@ -287,25 +214,9 @@ impl SendSpawner { | |||
| 287 | /// Spawn a task into an executor. | 214 | /// Spawn a task into an executor. |
| 288 | /// | 215 | /// |
| 289 | /// You obtain the `token` by calling a task function (i.e. one marked with `#[embassy_executor::task]`). | 216 | /// You obtain the `token` by calling a task function (i.e. one marked with `#[embassy_executor::task]`). |
| 290 | pub fn spawn<S: Send>(&self, token: SpawnToken<S>) -> Result<(), SpawnError> { | 217 | pub fn spawn<S: Send>(&self, token: SpawnToken<S>) { |
| 291 | let header = token.raw_task; | 218 | let header = token.raw_task; |
| 292 | mem::forget(token); | 219 | mem::forget(token); |
| 293 | 220 | unsafe { self.executor.spawn(header) } | |
| 294 | match header { | ||
| 295 | Some(header) => { | ||
| 296 | unsafe { self.executor.spawn(header) }; | ||
| 297 | Ok(()) | ||
| 298 | } | ||
| 299 | None => Err(SpawnError::Busy), | ||
| 300 | } | ||
| 301 | } | ||
| 302 | |||
| 303 | /// Spawn a task into an executor, panicking on failure. | ||
| 304 | /// | ||
| 305 | /// # Panics | ||
| 306 | /// | ||
| 307 | /// Panics if the spawning fails. | ||
| 308 | pub fn must_spawn<S: Send>(&self, token: SpawnToken<S>) { | ||
| 309 | unwrap!(self.spawn(token)); | ||
| 310 | } | 221 | } |
| 311 | } | 222 | } |
diff --git a/embassy-executor/tests/test.rs b/embassy-executor/tests/test.rs index b84d3785a..6baf3dc21 100644 --- a/embassy-executor/tests/test.rs +++ b/embassy-executor/tests/test.rs | |||
| @@ -65,7 +65,7 @@ fn executor_task() { | |||
| 65 | } | 65 | } |
| 66 | 66 | ||
| 67 | let (executor, trace) = setup(); | 67 | let (executor, trace) = setup(); |
| 68 | executor.spawner().spawn(task1(trace.clone())).unwrap(); | 68 | executor.spawner().spawn(task1(trace.clone()).unwrap()); |
| 69 | 69 | ||
| 70 | unsafe { executor.poll() }; | 70 | unsafe { executor.poll() }; |
| 71 | unsafe { executor.poll() }; | 71 | unsafe { executor.poll() }; |
| @@ -93,7 +93,7 @@ fn executor_task_rpit() { | |||
| 93 | } | 93 | } |
| 94 | 94 | ||
| 95 | let (executor, trace) = setup(); | 95 | let (executor, trace) = setup(); |
| 96 | executor.spawner().spawn(task1(trace.clone())).unwrap(); | 96 | executor.spawner().spawn(task1(trace.clone()).unwrap()); |
| 97 | 97 | ||
| 98 | unsafe { executor.poll() }; | 98 | unsafe { executor.poll() }; |
| 99 | unsafe { executor.poll() }; | 99 | unsafe { executor.poll() }; |
| @@ -120,7 +120,7 @@ fn executor_task_self_wake() { | |||
| 120 | } | 120 | } |
| 121 | 121 | ||
| 122 | let (executor, trace) = setup(); | 122 | let (executor, trace) = setup(); |
| 123 | executor.spawner().spawn(task1(trace.clone())).unwrap(); | 123 | executor.spawner().spawn(task1(trace.clone()).unwrap()); |
| 124 | 124 | ||
| 125 | unsafe { executor.poll() }; | 125 | unsafe { executor.poll() }; |
| 126 | unsafe { executor.poll() }; | 126 | unsafe { executor.poll() }; |
| @@ -152,7 +152,7 @@ fn executor_task_self_wake_twice() { | |||
| 152 | } | 152 | } |
| 153 | 153 | ||
| 154 | let (executor, trace) = setup(); | 154 | let (executor, trace) = setup(); |
| 155 | executor.spawner().spawn(task1(trace.clone())).unwrap(); | 155 | executor.spawner().spawn(task1(trace.clone()).unwrap()); |
| 156 | 156 | ||
| 157 | unsafe { executor.poll() }; | 157 | unsafe { executor.poll() }; |
| 158 | unsafe { executor.poll() }; | 158 | unsafe { executor.poll() }; |
| @@ -188,7 +188,7 @@ fn waking_after_completion_does_not_poll() { | |||
| 188 | let waker = Box::leak(Box::new(AtomicWaker::new())); | 188 | let waker = Box::leak(Box::new(AtomicWaker::new())); |
| 189 | 189 | ||
| 190 | let (executor, trace) = setup(); | 190 | let (executor, trace) = setup(); |
| 191 | executor.spawner().spawn(task1(trace.clone(), waker)).unwrap(); | 191 | executor.spawner().spawn(task1(trace.clone(), waker).unwrap()); |
| 192 | 192 | ||
| 193 | unsafe { executor.poll() }; | 193 | unsafe { executor.poll() }; |
| 194 | waker.wake(); | 194 | waker.wake(); |
| @@ -200,7 +200,7 @@ fn waking_after_completion_does_not_poll() { | |||
| 200 | unsafe { executor.poll() }; // Clears running status | 200 | unsafe { executor.poll() }; // Clears running status |
| 201 | 201 | ||
| 202 | // Can respawn waken-but-dead task | 202 | // Can respawn waken-but-dead task |
| 203 | executor.spawner().spawn(task1(trace.clone(), waker)).unwrap(); | 203 | executor.spawner().spawn(task1(trace.clone(), waker).unwrap()); |
| 204 | 204 | ||
| 205 | unsafe { executor.poll() }; | 205 | unsafe { executor.poll() }; |
| 206 | 206 | ||
| @@ -250,7 +250,7 @@ fn waking_with_old_waker_after_respawn() { | |||
| 250 | let waker = Box::leak(Box::new(AtomicWaker::new())); | 250 | let waker = Box::leak(Box::new(AtomicWaker::new())); |
| 251 | 251 | ||
| 252 | let (executor, trace) = setup(); | 252 | let (executor, trace) = setup(); |
| 253 | executor.spawner().spawn(task1(trace.clone(), waker)).unwrap(); | 253 | executor.spawner().spawn(task1(trace.clone(), waker).unwrap()); |
| 254 | 254 | ||
| 255 | unsafe { executor.poll() }; | 255 | unsafe { executor.poll() }; |
| 256 | unsafe { executor.poll() }; // progress to registering the waker | 256 | unsafe { executor.poll() }; // progress to registering the waker |
| @@ -273,8 +273,7 @@ fn waking_with_old_waker_after_respawn() { | |||
| 273 | let (other_executor, other_trace) = setup(); | 273 | let (other_executor, other_trace) = setup(); |
| 274 | other_executor | 274 | other_executor |
| 275 | .spawner() | 275 | .spawner() |
| 276 | .spawn(task1(other_trace.clone(), waker)) | 276 | .spawn(task1(other_trace.clone(), waker).unwrap()); |
| 277 | .unwrap(); | ||
| 278 | 277 | ||
| 279 | unsafe { other_executor.poll() }; // just run to the yield_now | 278 | unsafe { other_executor.poll() }; // just run to the yield_now |
| 280 | waker.wake(); // trigger old waker registration | 279 | waker.wake(); // trigger old waker registration |
| @@ -323,6 +322,37 @@ fn recursive_task() { | |||
| 323 | #[embassy_executor::task(pool_size = 2)] | 322 | #[embassy_executor::task(pool_size = 2)] |
| 324 | async fn task1() { | 323 | async fn task1() { |
| 325 | let spawner = unsafe { Spawner::for_current_executor().await }; | 324 | let spawner = unsafe { Spawner::for_current_executor().await }; |
| 326 | spawner.spawn(task1()); | 325 | spawner.spawn(task1().unwrap()); |
| 327 | } | 326 | } |
| 328 | } | 327 | } |
| 328 | |||
| 329 | #[cfg(feature = "metadata-name")] | ||
| 330 | #[test] | ||
| 331 | fn task_metadata() { | ||
| 332 | #[task] | ||
| 333 | async fn task1(expected_name: Option<&'static str>) { | ||
| 334 | use embassy_executor::Metadata; | ||
| 335 | assert_eq!(Metadata::for_current_task().await.name(), expected_name); | ||
| 336 | } | ||
| 337 | |||
| 338 | // check no task name | ||
| 339 | let (executor, _) = setup(); | ||
| 340 | executor.spawner().spawn(task1(None).unwrap()); | ||
| 341 | unsafe { executor.poll() }; | ||
| 342 | |||
| 343 | // check setting task name | ||
| 344 | let token = task1(Some("foo")).unwrap(); | ||
| 345 | token.metadata().set_name("foo"); | ||
| 346 | executor.spawner().spawn(token); | ||
| 347 | unsafe { executor.poll() }; | ||
| 348 | |||
| 349 | let token = task1(Some("bar")).unwrap(); | ||
| 350 | token.metadata().set_name("bar"); | ||
| 351 | executor.spawner().spawn(token); | ||
| 352 | unsafe { executor.poll() }; | ||
| 353 | |||
| 354 | // check name is cleared if the task pool slot is recycled. | ||
| 355 | let (executor, _) = setup(); | ||
| 356 | executor.spawner().spawn(task1(None).unwrap()); | ||
| 357 | unsafe { executor.poll() }; | ||
| 358 | } | ||
diff --git a/embassy-executor/tests/ui/return_impl_future_nonsend.rs b/embassy-executor/tests/ui/return_impl_future_nonsend.rs index b8c184b21..77b3119d6 100644 --- a/embassy-executor/tests/ui/return_impl_future_nonsend.rs +++ b/embassy-executor/tests/ui/return_impl_future_nonsend.rs | |||
| @@ -15,7 +15,7 @@ fn task() -> impl Future<Output = ()> { | |||
| 15 | } | 15 | } |
| 16 | 16 | ||
| 17 | fn send_spawn(s: SendSpawner) { | 17 | fn send_spawn(s: SendSpawner) { |
| 18 | s.spawn(task()).unwrap(); | 18 | s.spawn(task().unwrap()); |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | fn main() {} | 21 | fn main() {} |
diff --git a/embassy-executor/tests/ui/return_impl_future_nonsend.stderr b/embassy-executor/tests/ui/return_impl_future_nonsend.stderr index 8aeb9738a..51944ad65 100644 --- a/embassy-executor/tests/ui/return_impl_future_nonsend.stderr +++ b/embassy-executor/tests/ui/return_impl_future_nonsend.stderr | |||
| @@ -1,8 +1,8 @@ | |||
| 1 | error: future cannot be sent between threads safely | 1 | error: future cannot be sent between threads safely |
| 2 | --> tests/ui/return_impl_future_nonsend.rs:18:13 | 2 | --> tests/ui/return_impl_future_nonsend.rs:18:13 |
| 3 | | | 3 | | |
| 4 | 18 | s.spawn(task()).unwrap(); | 4 | 18 | s.spawn(task().unwrap()); |
| 5 | | ^^^^^^ future created by async block is not `Send` | 5 | | ^^^^^^^^^^^^^^^ future created by async block is not `Send` |
| 6 | | | 6 | | |
| 7 | = help: within `impl Sized`, the trait `Send` is not implemented for `*mut ()` | 7 | = help: within `impl Sized`, the trait `Send` is not implemented for `*mut ()` |
| 8 | note: captured value is not `Send` | 8 | note: captured value is not `Send` |
| @@ -13,5 +13,5 @@ note: captured value is not `Send` | |||
| 13 | note: required by a bound in `SendSpawner::spawn` | 13 | note: required by a bound in `SendSpawner::spawn` |
| 14 | --> src/spawner.rs | 14 | --> src/spawner.rs |
| 15 | | | 15 | | |
| 16 | | pub fn spawn<S: Send>(&self, token: SpawnToken<S>) -> Result<(), SpawnError> { | 16 | | pub fn spawn<S: Send>(&self, token: SpawnToken<S>) { |
| 17 | | ^^^^ required by this bound in `SendSpawner::spawn` | 17 | | ^^^^ required by this bound in `SendSpawner::spawn` |
diff --git a/embassy-executor/tests/ui/return_impl_send.stderr b/embassy-executor/tests/ui/return_impl_send.stderr index 759be1cde..5d19465ec 100644 --- a/embassy-executor/tests/ui/return_impl_send.stderr +++ b/embassy-executor/tests/ui/return_impl_send.stderr | |||
| @@ -97,7 +97,7 @@ note: required by a bound in `TaskPool::<F, N>::spawn` | |||
| 97 | | impl<F: Future + 'static, const N: usize> TaskPool<F, N> { | 97 | | impl<F: Future + 'static, const N: usize> TaskPool<F, N> { |
| 98 | | ^^^^^^ required by this bound in `TaskPool::<F, N>::spawn` | 98 | | ^^^^^^ required by this bound in `TaskPool::<F, N>::spawn` |
| 99 | ... | 99 | ... |
| 100 | | pub fn spawn(&'static self, future: impl FnOnce() -> F) -> SpawnToken<impl Sized> { | 100 | | pub fn spawn(&'static self, future: impl FnOnce() -> F) -> Result<SpawnToken<impl Sized>, SpawnError> { |
| 101 | | ----- required by a bound in this associated function | 101 | | ----- required by a bound in this associated function |
| 102 | = note: this error originates in the attribute macro `embassy_executor::task` (in Nightly builds, run with -Z macro-backtrace for more info) | 102 | = note: this error originates in the attribute macro `embassy_executor::task` (in Nightly builds, run with -Z macro-backtrace for more info) |
| 103 | 103 | ||
diff --git a/embassy-executor/tests/ui/spawn_nonsend.rs b/embassy-executor/tests/ui/spawn_nonsend.rs index 4c4cc7697..601041941 100644 --- a/embassy-executor/tests/ui/spawn_nonsend.rs +++ b/embassy-executor/tests/ui/spawn_nonsend.rs | |||
| @@ -10,7 +10,7 @@ async fn task(non_send: *mut ()) { | |||
| 10 | } | 10 | } |
| 11 | 11 | ||
| 12 | fn send_spawn(s: SendSpawner) { | 12 | fn send_spawn(s: SendSpawner) { |
| 13 | s.spawn(task(core::ptr::null_mut())).unwrap(); | 13 | s.spawn(task(core::ptr::null_mut()).unwrap()); |
| 14 | } | 14 | } |
| 15 | 15 | ||
| 16 | fn main() {} | 16 | fn main() {} |
diff --git a/embassy-executor/tests/ui/spawn_nonsend.stderr b/embassy-executor/tests/ui/spawn_nonsend.stderr index 2a06c8b94..25bd7d78d 100644 --- a/embassy-executor/tests/ui/spawn_nonsend.stderr +++ b/embassy-executor/tests/ui/spawn_nonsend.stderr | |||
| @@ -12,8 +12,8 @@ error[E0277]: `*mut ()` cannot be sent between threads safely | |||
| 12 | 7 | #[embassy_executor::task] | 12 | 7 | #[embassy_executor::task] |
| 13 | | ------------------------- within this `impl Sized` | 13 | | ------------------------- within this `impl Sized` |
| 14 | ... | 14 | ... |
| 15 | 13 | s.spawn(task(core::ptr::null_mut())).unwrap(); | 15 | 13 | s.spawn(task(core::ptr::null_mut()).unwrap()); |
| 16 | | ----- ^^^^^^^^^^^^^^^^^^^^^^^^^^^ `*mut ()` cannot be sent between threads safely | 16 | | ----- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `*mut ()` cannot be sent between threads safely |
| 17 | | | | 17 | | | |
| 18 | | required by a bound introduced by this call | 18 | | required by a bound introduced by this call |
| 19 | | | 19 | | |
| @@ -26,8 +26,8 @@ note: required because it's used within this closure | |||
| 26 | note: required because it appears within the type `impl Sized` | 26 | note: required because it appears within the type `impl Sized` |
| 27 | --> src/raw/mod.rs | 27 | --> src/raw/mod.rs |
| 28 | | | 28 | | |
| 29 | | pub unsafe fn _spawn_async_fn<FutFn>(&'static self, future: FutFn) -> SpawnToken<impl Sized> | 29 | | pub unsafe fn _spawn_async_fn<FutFn>(&'static self, future: FutFn) -> Result<SpawnToken<impl Sized>, SpawnError> |
| 30 | | ^^^^^^^^^^ | 30 | | ^^^^^^^^^^ |
| 31 | note: required because it appears within the type `impl Sized` | 31 | note: required because it appears within the type `impl Sized` |
| 32 | --> tests/ui/spawn_nonsend.rs:7:1 | 32 | --> tests/ui/spawn_nonsend.rs:7:1 |
| 33 | | | 33 | | |
| @@ -36,6 +36,6 @@ note: required because it appears within the type `impl Sized` | |||
| 36 | note: required by a bound in `SendSpawner::spawn` | 36 | note: required by a bound in `SendSpawner::spawn` |
| 37 | --> src/spawner.rs | 37 | --> src/spawner.rs |
| 38 | | | 38 | | |
| 39 | | pub fn spawn<S: Send>(&self, token: SpawnToken<S>) -> Result<(), SpawnError> { | 39 | | pub fn spawn<S: Send>(&self, token: SpawnToken<S>) { |
| 40 | | ^^^^ required by this bound in `SendSpawner::spawn` | 40 | | ^^^^ required by this bound in `SendSpawner::spawn` |
| 41 | = note: this error originates in the attribute macro `embassy_executor::task` (in Nightly builds, run with -Z macro-backtrace for more info) | 41 | = note: this error originates in the attribute macro `embassy_executor::task` (in Nightly builds, run with -Z macro-backtrace for more info) |
diff --git a/embassy-net/src/lib.rs b/embassy-net/src/lib.rs index 0bc6ffe6c..3f0634849 100644 --- a/embassy-net/src/lib.rs +++ b/embassy-net/src/lib.rs | |||
| @@ -464,7 +464,7 @@ impl<'d> Stack<'d> { | |||
| 464 | /// seed | 464 | /// seed |
| 465 | /// ); | 465 | /// ); |
| 466 | /// // Launch network task that runs `runner.run().await` | 466 | /// // Launch network task that runs `runner.run().await` |
| 467 | /// spawner.spawn(net_task(runner)).unwrap(); | 467 | /// spawner.spawn(net_task(runner).unwrap()); |
| 468 | /// // Wait for DHCP config | 468 | /// // Wait for DHCP config |
| 469 | /// stack.wait_config_up().await; | 469 | /// stack.wait_config_up().await; |
| 470 | /// // use the network stack | 470 | /// // use the network stack |
diff --git a/embassy-rp/src/multicore.rs b/embassy-rp/src/multicore.rs index 64065fcba..adedc98ad 100644 --- a/embassy-rp/src/multicore.rs +++ b/embassy-rp/src/multicore.rs | |||
| @@ -38,11 +38,11 @@ | |||
| 38 | //! | 38 | //! |
| 39 | //! embassy_rp::multicore::spawn_core1(p.CORE1, unsafe { &mut CORE1_STACK }, move || { | 39 | //! embassy_rp::multicore::spawn_core1(p.CORE1, unsafe { &mut CORE1_STACK }, move || { |
| 40 | //! let executor1 = EXECUTOR1.init(Executor::new()); | 40 | //! let executor1 = EXECUTOR1.init(Executor::new()); |
| 41 | //! executor1.run(|spawner| spawner.spawn(core1_task()).unwrap()); | 41 | //! executor1.run(|spawner| spawner.spawn(core1_task().unwrap())); |
| 42 | //! }); | 42 | //! }); |
| 43 | //! | 43 | //! |
| 44 | //! let executor0 = EXECUTOR0.init(Executor::new()); | 44 | //! let executor0 = EXECUTOR0.init(Executor::new()); |
| 45 | //! executor0.run(|spawner| spawner.spawn(core0_task()).unwrap()) | 45 | //! executor0.run(|spawner| spawner.spawn(core0_task().unwrap())) |
| 46 | //! } | 46 | //! } |
| 47 | //! ``` | 47 | //! ``` |
| 48 | 48 | ||
diff --git a/embassy-stm32/src/low_power.rs b/embassy-stm32/src/low_power.rs index d13df5a6b..342f73bc8 100644 --- a/embassy-stm32/src/low_power.rs +++ b/embassy-stm32/src/low_power.rs | |||
| @@ -29,7 +29,7 @@ | |||
| 29 | //! #[cortex_m_rt::entry] | 29 | //! #[cortex_m_rt::entry] |
| 30 | //! fn main() -> ! { | 30 | //! fn main() -> ! { |
| 31 | //! Executor::take().run(|spawner| { | 31 | //! Executor::take().run(|spawner| { |
| 32 | //! unwrap!(spawner.spawn(async_main(spawner))); | 32 | //! spawner.spawn(unwrap!(async_main(spawner))); |
| 33 | //! }); | 33 | //! }); |
| 34 | //! } | 34 | //! } |
| 35 | //! | 35 | //! |
diff --git a/examples/mimxrt6/src/bin/uart-async.rs b/examples/mimxrt6/src/bin/uart-async.rs index 58e31f379..d808d755c 100644 --- a/examples/mimxrt6/src/bin/uart-async.rs +++ b/examples/mimxrt6/src/bin/uart-async.rs | |||
| @@ -69,7 +69,7 @@ async fn main(spawner: Spawner) { | |||
| 69 | Default::default(), | 69 | Default::default(), |
| 70 | ) | 70 | ) |
| 71 | .unwrap(); | 71 | .unwrap(); |
| 72 | spawner.must_spawn(usart4_task(usart4)); | 72 | spawner.spawn(usart4_task(usart4).unwrap()); |
| 73 | 73 | ||
| 74 | let usart2 = Uart::new_with_rtscts( | 74 | let usart2 = Uart::new_with_rtscts( |
| 75 | p.FLEXCOMM2, | 75 | p.FLEXCOMM2, |
| @@ -83,5 +83,5 @@ async fn main(spawner: Spawner) { | |||
| 83 | Default::default(), | 83 | Default::default(), |
| 84 | ) | 84 | ) |
| 85 | .unwrap(); | 85 | .unwrap(); |
| 86 | spawner.must_spawn(usart2_task(usart2)); | 86 | spawner.spawn(usart2_task(usart2).unwrap()); |
| 87 | } | 87 | } |
diff --git a/examples/mimxrt6/src/bin/uart.rs b/examples/mimxrt6/src/bin/uart.rs index d6a75f85d..1636c958f 100644 --- a/examples/mimxrt6/src/bin/uart.rs +++ b/examples/mimxrt6/src/bin/uart.rs | |||
| @@ -48,8 +48,8 @@ async fn main(spawner: Spawner) { | |||
| 48 | let usart4 = Uart::new_blocking(p.FLEXCOMM4, p.PIO0_29, p.PIO0_30, Default::default()).unwrap(); | 48 | let usart4 = Uart::new_blocking(p.FLEXCOMM4, p.PIO0_29, p.PIO0_30, Default::default()).unwrap(); |
| 49 | 49 | ||
| 50 | let (_, usart4) = usart4.split(); | 50 | let (_, usart4) = usart4.split(); |
| 51 | spawner.must_spawn(usart4_task(usart4)); | 51 | spawner.spawn(usart4_task(usart4).unwrap()); |
| 52 | 52 | ||
| 53 | let usart2 = UartTx::new_blocking(p.FLEXCOMM2, p.PIO0_15, Default::default()).unwrap(); | 53 | let usart2 = UartTx::new_blocking(p.FLEXCOMM2, p.PIO0_15, Default::default()).unwrap(); |
| 54 | spawner.must_spawn(usart2_task(usart2)); | 54 | spawner.spawn(usart2_task(usart2).unwrap()); |
| 55 | } | 55 | } |
diff --git a/examples/nrf-rtos-trace/src/bin/rtos_trace.rs b/examples/nrf-rtos-trace/src/bin/rtos_trace.rs index 41cc06417..c1e7f8f58 100644 --- a/examples/nrf-rtos-trace/src/bin/rtos_trace.rs +++ b/examples/nrf-rtos-trace/src/bin/rtos_trace.rs | |||
| @@ -63,7 +63,7 @@ async fn main(spawner: Spawner) { | |||
| 63 | ::log::set_max_level(::log::LevelFilter::Trace); | 63 | ::log::set_max_level(::log::LevelFilter::Trace); |
| 64 | } | 64 | } |
| 65 | 65 | ||
| 66 | spawner.spawn(run1()).unwrap(); | 66 | spawner.spawn(run1().unwrap()); |
| 67 | spawner.spawn(run2()).unwrap(); | 67 | spawner.spawn(run2().unwrap()); |
| 68 | spawner.spawn(run3()).unwrap(); | 68 | spawner.spawn(run3().unwrap()); |
| 69 | } | 69 | } |
diff --git a/examples/nrf52840/src/bin/channel.rs b/examples/nrf52840/src/bin/channel.rs index e06ba1c73..ffa539808 100644 --- a/examples/nrf52840/src/bin/channel.rs +++ b/examples/nrf52840/src/bin/channel.rs | |||
| @@ -31,7 +31,7 @@ async fn main(spawner: Spawner) { | |||
| 31 | let p = embassy_nrf::init(Default::default()); | 31 | let p = embassy_nrf::init(Default::default()); |
| 32 | let mut led = Output::new(p.P0_13, Level::Low, OutputDrive::Standard); | 32 | let mut led = Output::new(p.P0_13, Level::Low, OutputDrive::Standard); |
| 33 | 33 | ||
| 34 | unwrap!(spawner.spawn(my_task())); | 34 | spawner.spawn(unwrap!(my_task())); |
| 35 | 35 | ||
| 36 | loop { | 36 | loop { |
| 37 | match CHANNEL.receive().await { | 37 | match CHANNEL.receive().await { |
diff --git a/examples/nrf52840/src/bin/channel_sender_receiver.rs b/examples/nrf52840/src/bin/channel_sender_receiver.rs index 74c62ca20..09050db68 100644 --- a/examples/nrf52840/src/bin/channel_sender_receiver.rs +++ b/examples/nrf52840/src/bin/channel_sender_receiver.rs | |||
| @@ -45,6 +45,6 @@ async fn main(spawner: Spawner) { | |||
| 45 | let p = embassy_nrf::init(Default::default()); | 45 | let p = embassy_nrf::init(Default::default()); |
| 46 | let channel = CHANNEL.init(Channel::new()); | 46 | let channel = CHANNEL.init(Channel::new()); |
| 47 | 47 | ||
| 48 | unwrap!(spawner.spawn(send_task(channel.sender()))); | 48 | spawner.spawn(unwrap!(send_task(channel.sender()))); |
| 49 | unwrap!(spawner.spawn(recv_task(p.P0_13.into(), channel.receiver()))); | 49 | spawner.spawn(unwrap!(recv_task(p.P0_13.into(), channel.receiver()))); |
| 50 | } | 50 | } |
diff --git a/examples/nrf52840/src/bin/ethernet_enc28j60.rs b/examples/nrf52840/src/bin/ethernet_enc28j60.rs index 0946492fe..3bb255a72 100644 --- a/examples/nrf52840/src/bin/ethernet_enc28j60.rs +++ b/examples/nrf52840/src/bin/ethernet_enc28j60.rs | |||
| @@ -70,7 +70,7 @@ async fn main(spawner: Spawner) { | |||
| 70 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); | 70 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); |
| 71 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 71 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 72 | 72 | ||
| 73 | unwrap!(spawner.spawn(net_task(runner))); | 73 | spawner.spawn(unwrap!(net_task(runner))); |
| 74 | 74 | ||
| 75 | // And now we can use it! | 75 | // And now we can use it! |
| 76 | 76 | ||
diff --git a/examples/nrf52840/src/bin/executor_fairness_test.rs b/examples/nrf52840/src/bin/executor_fairness_test.rs index df6e7af3f..70c9405f0 100644 --- a/examples/nrf52840/src/bin/executor_fairness_test.rs +++ b/examples/nrf52840/src/bin/executor_fairness_test.rs | |||
| @@ -36,7 +36,7 @@ async fn run3() { | |||
| 36 | #[embassy_executor::main] | 36 | #[embassy_executor::main] |
| 37 | async fn main(spawner: Spawner) { | 37 | async fn main(spawner: Spawner) { |
| 38 | let _p = embassy_nrf::init(Default::default()); | 38 | let _p = embassy_nrf::init(Default::default()); |
| 39 | unwrap!(spawner.spawn(run1())); | 39 | spawner.spawn(unwrap!(run1())); |
| 40 | unwrap!(spawner.spawn(run2())); | 40 | spawner.spawn(unwrap!(run2())); |
| 41 | unwrap!(spawner.spawn(run3())); | 41 | spawner.spawn(unwrap!(run3())); |
| 42 | } | 42 | } |
diff --git a/examples/nrf52840/src/bin/gpiote_port.rs b/examples/nrf52840/src/bin/gpiote_port.rs index 0dddb1a97..66dbd32dc 100644 --- a/examples/nrf52840/src/bin/gpiote_port.rs +++ b/examples/nrf52840/src/bin/gpiote_port.rs | |||
| @@ -26,8 +26,8 @@ async fn main(spawner: Spawner) { | |||
| 26 | let btn3 = Input::new(p.P0_24, Pull::Up); | 26 | let btn3 = Input::new(p.P0_24, Pull::Up); |
| 27 | let btn4 = Input::new(p.P0_25, Pull::Up); | 27 | let btn4 = Input::new(p.P0_25, Pull::Up); |
| 28 | 28 | ||
| 29 | unwrap!(spawner.spawn(button_task(1, btn1))); | 29 | spawner.spawn(unwrap!(button_task(1, btn1))); |
| 30 | unwrap!(spawner.spawn(button_task(2, btn2))); | 30 | spawner.spawn(unwrap!(button_task(2, btn2))); |
| 31 | unwrap!(spawner.spawn(button_task(3, btn3))); | 31 | spawner.spawn(unwrap!(button_task(3, btn3))); |
| 32 | unwrap!(spawner.spawn(button_task(4, btn4))); | 32 | spawner.spawn(unwrap!(button_task(4, btn4))); |
| 33 | } | 33 | } |
diff --git a/examples/nrf52840/src/bin/manually_create_executor.rs b/examples/nrf52840/src/bin/manually_create_executor.rs index 7ca39348e..f0639eb23 100644 --- a/examples/nrf52840/src/bin/manually_create_executor.rs +++ b/examples/nrf52840/src/bin/manually_create_executor.rs | |||
| @@ -42,7 +42,7 @@ fn main() -> ! { | |||
| 42 | // `run` calls the closure then runs the executor forever. It never returns. | 42 | // `run` calls the closure then runs the executor forever. It never returns. |
| 43 | executor.run(|spawner| { | 43 | executor.run(|spawner| { |
| 44 | // Here we get access to a spawner to spawn the initial tasks. | 44 | // Here we get access to a spawner to spawn the initial tasks. |
| 45 | unwrap!(spawner.spawn(run1())); | 45 | spawner.spawn(unwrap!(run1())); |
| 46 | unwrap!(spawner.spawn(run2())); | 46 | spawner.spawn(unwrap!(run2())); |
| 47 | }); | 47 | }); |
| 48 | } | 48 | } |
diff --git a/examples/nrf52840/src/bin/multiprio.rs b/examples/nrf52840/src/bin/multiprio.rs index d58613da4..4d9b986d4 100644 --- a/examples/nrf52840/src/bin/multiprio.rs +++ b/examples/nrf52840/src/bin/multiprio.rs | |||
| @@ -130,16 +130,16 @@ fn main() -> ! { | |||
| 130 | // High-priority executor: EGU1_SWI1, priority level 6 | 130 | // High-priority executor: EGU1_SWI1, priority level 6 |
| 131 | interrupt::EGU1_SWI1.set_priority(Priority::P6); | 131 | interrupt::EGU1_SWI1.set_priority(Priority::P6); |
| 132 | let spawner = EXECUTOR_HIGH.start(interrupt::EGU1_SWI1); | 132 | let spawner = EXECUTOR_HIGH.start(interrupt::EGU1_SWI1); |
| 133 | unwrap!(spawner.spawn(run_high())); | 133 | spawner.spawn(unwrap!(run_high())); |
| 134 | 134 | ||
| 135 | // Medium-priority executor: EGU0_SWI0, priority level 7 | 135 | // Medium-priority executor: EGU0_SWI0, priority level 7 |
| 136 | interrupt::EGU0_SWI0.set_priority(Priority::P7); | 136 | interrupt::EGU0_SWI0.set_priority(Priority::P7); |
| 137 | let spawner = EXECUTOR_MED.start(interrupt::EGU0_SWI0); | 137 | let spawner = EXECUTOR_MED.start(interrupt::EGU0_SWI0); |
| 138 | unwrap!(spawner.spawn(run_med())); | 138 | spawner.spawn(unwrap!(run_med())); |
| 139 | 139 | ||
| 140 | // Low priority executor: runs in thread mode, using WFE/SEV | 140 | // Low priority executor: runs in thread mode, using WFE/SEV |
| 141 | let executor = EXECUTOR_LOW.init(Executor::new()); | 141 | let executor = EXECUTOR_LOW.init(Executor::new()); |
| 142 | executor.run(|spawner| { | 142 | executor.run(|spawner| { |
| 143 | unwrap!(spawner.spawn(run_low())); | 143 | spawner.spawn(unwrap!(run_low())); |
| 144 | }); | 144 | }); |
| 145 | } | 145 | } |
diff --git a/examples/nrf52840/src/bin/mutex.rs b/examples/nrf52840/src/bin/mutex.rs index 5c22279b5..a8e9a82cc 100644 --- a/examples/nrf52840/src/bin/mutex.rs +++ b/examples/nrf52840/src/bin/mutex.rs | |||
| @@ -30,7 +30,7 @@ async fn my_task() { | |||
| 30 | #[embassy_executor::main] | 30 | #[embassy_executor::main] |
| 31 | async fn main(spawner: Spawner) { | 31 | async fn main(spawner: Spawner) { |
| 32 | let _p = embassy_nrf::init(Default::default()); | 32 | let _p = embassy_nrf::init(Default::default()); |
| 33 | unwrap!(spawner.spawn(my_task())); | 33 | spawner.spawn(unwrap!(my_task())); |
| 34 | 34 | ||
| 35 | loop { | 35 | loop { |
| 36 | Timer::after_millis(300).await; | 36 | Timer::after_millis(300).await; |
diff --git a/examples/nrf52840/src/bin/pubsub.rs b/examples/nrf52840/src/bin/pubsub.rs index 5ebea9220..c0392b18c 100644 --- a/examples/nrf52840/src/bin/pubsub.rs +++ b/examples/nrf52840/src/bin/pubsub.rs | |||
| @@ -26,9 +26,9 @@ async fn main(spawner: Spawner) { | |||
| 26 | // It's good to set up the subscribers before publishing anything. | 26 | // It's good to set up the subscribers before publishing anything. |
| 27 | // A subscriber will only yield messages that have been published after its creation. | 27 | // A subscriber will only yield messages that have been published after its creation. |
| 28 | 28 | ||
| 29 | spawner.must_spawn(fast_logger(unwrap!(MESSAGE_BUS.subscriber()))); | 29 | spawner.spawn(fast_logger(unwrap!(MESSAGE_BUS.subscriber())).unwrap()); |
| 30 | spawner.must_spawn(slow_logger(unwrap!(MESSAGE_BUS.dyn_subscriber()))); | 30 | spawner.spawn(slow_logger(unwrap!(MESSAGE_BUS.dyn_subscriber())).unwrap()); |
| 31 | spawner.must_spawn(slow_logger_pure(unwrap!(MESSAGE_BUS.dyn_subscriber()))); | 31 | spawner.spawn(slow_logger_pure(unwrap!(MESSAGE_BUS.dyn_subscriber())).unwrap()); |
| 32 | 32 | ||
| 33 | // Get a publisher | 33 | // Get a publisher |
| 34 | let message_publisher = unwrap!(MESSAGE_BUS.publisher()); | 34 | let message_publisher = unwrap!(MESSAGE_BUS.publisher()); |
diff --git a/examples/nrf52840/src/bin/raw_spawn.rs b/examples/nrf52840/src/bin/raw_spawn.rs index 717b0faa6..b80954408 100644 --- a/examples/nrf52840/src/bin/raw_spawn.rs +++ b/examples/nrf52840/src/bin/raw_spawn.rs | |||
| @@ -42,8 +42,8 @@ fn main() -> ! { | |||
| 42 | let run2_task = unsafe { make_static(&run2_task) }; | 42 | let run2_task = unsafe { make_static(&run2_task) }; |
| 43 | 43 | ||
| 44 | executor.run(|spawner| { | 44 | executor.run(|spawner| { |
| 45 | unwrap!(spawner.spawn(run1_task.spawn(|| run1()))); | 45 | spawner.spawn(unwrap!(run1_task.spawn(|| run1()))); |
| 46 | unwrap!(spawner.spawn(run2_task.spawn(|| run2()))); | 46 | spawner.spawn(unwrap!(run2_task.spawn(|| run2()))); |
| 47 | }); | 47 | }); |
| 48 | } | 48 | } |
| 49 | 49 | ||
diff --git a/examples/nrf52840/src/bin/self_spawn.rs b/examples/nrf52840/src/bin/self_spawn.rs index 5bfefc2af..acb44f98b 100644 --- a/examples/nrf52840/src/bin/self_spawn.rs +++ b/examples/nrf52840/src/bin/self_spawn.rs | |||
| @@ -14,12 +14,12 @@ mod config { | |||
| 14 | async fn my_task(spawner: Spawner, n: u32) { | 14 | async fn my_task(spawner: Spawner, n: u32) { |
| 15 | Timer::after_secs(1).await; | 15 | Timer::after_secs(1).await; |
| 16 | info!("Spawning self! {}", n); | 16 | info!("Spawning self! {}", n); |
| 17 | unwrap!(spawner.spawn(my_task(spawner, n + 1))); | 17 | spawner.spawn(unwrap!(my_task(spawner, n + 1))); |
| 18 | } | 18 | } |
| 19 | 19 | ||
| 20 | #[embassy_executor::main] | 20 | #[embassy_executor::main] |
| 21 | async fn main(spawner: Spawner) { | 21 | async fn main(spawner: Spawner) { |
| 22 | let _p = embassy_nrf::init(Default::default()); | 22 | let _p = embassy_nrf::init(Default::default()); |
| 23 | info!("Hello World!"); | 23 | info!("Hello World!"); |
| 24 | unwrap!(spawner.spawn(my_task(spawner, 0))); | 24 | spawner.spawn(unwrap!(my_task(spawner, 0))); |
| 25 | } | 25 | } |
diff --git a/examples/nrf52840/src/bin/self_spawn_current_executor.rs b/examples/nrf52840/src/bin/self_spawn_current_executor.rs index ddb40dc53..d93067592 100644 --- a/examples/nrf52840/src/bin/self_spawn_current_executor.rs +++ b/examples/nrf52840/src/bin/self_spawn_current_executor.rs | |||
| @@ -11,12 +11,12 @@ async fn my_task(n: u32) { | |||
| 11 | Timer::after_secs(1).await; | 11 | Timer::after_secs(1).await; |
| 12 | info!("Spawning self! {}", n); | 12 | info!("Spawning self! {}", n); |
| 13 | let spawner = unsafe { Spawner::for_current_executor().await }; | 13 | let spawner = unsafe { Spawner::for_current_executor().await }; |
| 14 | unwrap!(spawner.spawn(my_task(n + 1))); | 14 | spawner.spawn(unwrap!(my_task(n + 1))); |
| 15 | } | 15 | } |
| 16 | 16 | ||
| 17 | #[embassy_executor::main] | 17 | #[embassy_executor::main] |
| 18 | async fn main(spawner: Spawner) { | 18 | async fn main(spawner: Spawner) { |
| 19 | let _p = embassy_nrf::init(Default::default()); | 19 | let _p = embassy_nrf::init(Default::default()); |
| 20 | info!("Hello World!"); | 20 | info!("Hello World!"); |
| 21 | unwrap!(spawner.spawn(my_task(0))); | 21 | spawner.spawn(unwrap!(my_task(0))); |
| 22 | } | 22 | } |
diff --git a/examples/nrf52840/src/bin/timer.rs b/examples/nrf52840/src/bin/timer.rs index 365695a20..5331ac246 100644 --- a/examples/nrf52840/src/bin/timer.rs +++ b/examples/nrf52840/src/bin/timer.rs | |||
| @@ -25,6 +25,6 @@ async fn run2() { | |||
| 25 | #[embassy_executor::main] | 25 | #[embassy_executor::main] |
| 26 | async fn main(spawner: Spawner) { | 26 | async fn main(spawner: Spawner) { |
| 27 | let _p = embassy_nrf::init(Default::default()); | 27 | let _p = embassy_nrf::init(Default::default()); |
| 28 | unwrap!(spawner.spawn(run1())); | 28 | spawner.spawn(unwrap!(run1())); |
| 29 | unwrap!(spawner.spawn(run2())); | 29 | spawner.spawn(unwrap!(run2())); |
| 30 | } | 30 | } |
diff --git a/examples/nrf52840/src/bin/uart_split.rs b/examples/nrf52840/src/bin/uart_split.rs index 46be8f636..51af90727 100644 --- a/examples/nrf52840/src/bin/uart_split.rs +++ b/examples/nrf52840/src/bin/uart_split.rs | |||
| @@ -30,7 +30,7 @@ async fn main(spawner: Spawner) { | |||
| 30 | 30 | ||
| 31 | // Spawn a task responsible purely for reading | 31 | // Spawn a task responsible purely for reading |
| 32 | 32 | ||
| 33 | unwrap!(spawner.spawn(reader(rx))); | 33 | spawner.spawn(unwrap!(reader(rx))); |
| 34 | 34 | ||
| 35 | // Message must be in SRAM | 35 | // Message must be in SRAM |
| 36 | { | 36 | { |
diff --git a/examples/nrf52840/src/bin/usb_ethernet.rs b/examples/nrf52840/src/bin/usb_ethernet.rs index 49856012d..87aa4c6c5 100644 --- a/examples/nrf52840/src/bin/usb_ethernet.rs +++ b/examples/nrf52840/src/bin/usb_ethernet.rs | |||
| @@ -86,11 +86,11 @@ async fn main(spawner: Spawner) { | |||
| 86 | // Build the builder. | 86 | // Build the builder. |
| 87 | let usb = builder.build(); | 87 | let usb = builder.build(); |
| 88 | 88 | ||
| 89 | unwrap!(spawner.spawn(usb_task(usb))); | 89 | spawner.spawn(unwrap!(usb_task(usb))); |
| 90 | 90 | ||
| 91 | static NET_STATE: StaticCell<NetState<MTU, 4, 4>> = StaticCell::new(); | 91 | static NET_STATE: StaticCell<NetState<MTU, 4, 4>> = StaticCell::new(); |
| 92 | let (runner, device) = class.into_embassy_net_device::<MTU, 4, 4>(NET_STATE.init(NetState::new()), our_mac_addr); | 92 | let (runner, device) = class.into_embassy_net_device::<MTU, 4, 4>(NET_STATE.init(NetState::new()), our_mac_addr); |
| 93 | unwrap!(spawner.spawn(usb_ncm_task(runner))); | 93 | spawner.spawn(unwrap!(usb_ncm_task(runner))); |
| 94 | 94 | ||
| 95 | let config = embassy_net::Config::dhcpv4(Default::default()); | 95 | let config = embassy_net::Config::dhcpv4(Default::default()); |
| 96 | // let config = embassy_net::Config::ipv4_static(embassy_net::StaticConfigV4 { | 96 | // let config = embassy_net::Config::ipv4_static(embassy_net::StaticConfigV4 { |
| @@ -109,7 +109,7 @@ async fn main(spawner: Spawner) { | |||
| 109 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); | 109 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); |
| 110 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 110 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 111 | 111 | ||
| 112 | unwrap!(spawner.spawn(net_task(runner))); | 112 | spawner.spawn(unwrap!(net_task(runner))); |
| 113 | 113 | ||
| 114 | // And now we can use it! | 114 | // And now we can use it! |
| 115 | 115 | ||
diff --git a/examples/nrf52840/src/bin/usb_serial_multitask.rs b/examples/nrf52840/src/bin/usb_serial_multitask.rs index 5e5b4de35..00a91a233 100644 --- a/examples/nrf52840/src/bin/usb_serial_multitask.rs +++ b/examples/nrf52840/src/bin/usb_serial_multitask.rs | |||
| @@ -76,8 +76,8 @@ async fn main(spawner: Spawner) { | |||
| 76 | // Build the builder. | 76 | // Build the builder. |
| 77 | let usb = builder.build(); | 77 | let usb = builder.build(); |
| 78 | 78 | ||
| 79 | unwrap!(spawner.spawn(usb_task(usb))); | 79 | spawner.spawn(unwrap!(usb_task(usb))); |
| 80 | unwrap!(spawner.spawn(echo_task(class))); | 80 | spawner.spawn(unwrap!(echo_task(class))); |
| 81 | } | 81 | } |
| 82 | 82 | ||
| 83 | struct Disconnected {} | 83 | struct Disconnected {} |
diff --git a/examples/nrf52840/src/bin/wifi_esp_hosted.rs b/examples/nrf52840/src/bin/wifi_esp_hosted.rs index 26eaf485e..2dd9abfaa 100644 --- a/examples/nrf52840/src/bin/wifi_esp_hosted.rs +++ b/examples/nrf52840/src/bin/wifi_esp_hosted.rs | |||
| @@ -70,7 +70,7 @@ async fn main(spawner: Spawner) { | |||
| 70 | ) | 70 | ) |
| 71 | .await; | 71 | .await; |
| 72 | 72 | ||
| 73 | unwrap!(spawner.spawn(wifi_task(runner))); | 73 | spawner.spawn(unwrap!(wifi_task(runner))); |
| 74 | 74 | ||
| 75 | unwrap!(control.init().await); | 75 | unwrap!(control.init().await); |
| 76 | unwrap!(control.connect(WIFI_NETWORK, WIFI_PASSWORD).await); | 76 | unwrap!(control.connect(WIFI_NETWORK, WIFI_PASSWORD).await); |
| @@ -92,7 +92,7 @@ async fn main(spawner: Spawner) { | |||
| 92 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); | 92 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); |
| 93 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 93 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 94 | 94 | ||
| 95 | unwrap!(spawner.spawn(net_task(runner))); | 95 | spawner.spawn(unwrap!(net_task(runner))); |
| 96 | 96 | ||
| 97 | // And now we can use it! | 97 | // And now we can use it! |
| 98 | 98 | ||
diff --git a/examples/nrf9160/src/bin/modem_tcp_client.rs b/examples/nrf9160/src/bin/modem_tcp_client.rs index a36b14626..7d4815699 100644 --- a/examples/nrf9160/src/bin/modem_tcp_client.rs +++ b/examples/nrf9160/src/bin/modem_tcp_client.rs | |||
| @@ -112,7 +112,7 @@ async fn main(spawner: Spawner) { | |||
| 112 | 112 | ||
| 113 | info!("Hello World!"); | 113 | info!("Hello World!"); |
| 114 | 114 | ||
| 115 | unwrap!(spawner.spawn(blink_task(p.P0_02.into()))); | 115 | spawner.spawn(unwrap!(blink_task(p.P0_02.into()))); |
| 116 | 116 | ||
| 117 | let ipc_mem = unsafe { | 117 | let ipc_mem = unsafe { |
| 118 | let ipc_start = &__start_ipc as *const u8 as *mut MaybeUninit<u8>; | 118 | let ipc_start = &__start_ipc as *const u8 as *mut MaybeUninit<u8>; |
| @@ -138,8 +138,8 @@ async fn main(spawner: Spawner) { | |||
| 138 | static TRACE: StaticCell<TraceBuffer> = StaticCell::new(); | 138 | static TRACE: StaticCell<TraceBuffer> = StaticCell::new(); |
| 139 | let (device, control, runner, tracer) = | 139 | let (device, control, runner, tracer) = |
| 140 | embassy_net_nrf91::new_with_trace(STATE.init(State::new()), ipc_mem, TRACE.init(TraceBuffer::new())).await; | 140 | embassy_net_nrf91::new_with_trace(STATE.init(State::new()), ipc_mem, TRACE.init(TraceBuffer::new())).await; |
| 141 | unwrap!(spawner.spawn(modem_task(runner))); | 141 | spawner.spawn(unwrap!(modem_task(runner))); |
| 142 | unwrap!(spawner.spawn(trace_task(uart, tracer))); | 142 | spawner.spawn(unwrap!(trace_task(uart, tracer))); |
| 143 | 143 | ||
| 144 | let config = embassy_net::Config::default(); | 144 | let config = embassy_net::Config::default(); |
| 145 | 145 | ||
| @@ -150,12 +150,12 @@ async fn main(spawner: Spawner) { | |||
| 150 | static RESOURCES: StaticCell<StackResources<2>> = StaticCell::new(); | 150 | static RESOURCES: StaticCell<StackResources<2>> = StaticCell::new(); |
| 151 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::<2>::new()), seed); | 151 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::<2>::new()), seed); |
| 152 | 152 | ||
| 153 | unwrap!(spawner.spawn(net_task(runner))); | 153 | spawner.spawn(unwrap!(net_task(runner))); |
| 154 | 154 | ||
| 155 | static CONTROL: StaticCell<context::Control<'static>> = StaticCell::new(); | 155 | static CONTROL: StaticCell<context::Control<'static>> = StaticCell::new(); |
| 156 | let control = CONTROL.init(context::Control::new(control, 0).await); | 156 | let control = CONTROL.init(context::Control::new(control, 0).await); |
| 157 | 157 | ||
| 158 | unwrap!(spawner.spawn(control_task( | 158 | spawner.spawn(unwrap!(control_task( |
| 159 | control, | 159 | control, |
| 160 | context::Config { | 160 | context::Config { |
| 161 | apn: b"iot.nat.es", | 161 | apn: b"iot.nat.es", |
diff --git a/examples/rp/src/bin/assign_resources.rs b/examples/rp/src/bin/assign_resources.rs index 341f54d22..4ee4278b5 100644 --- a/examples/rp/src/bin/assign_resources.rs +++ b/examples/rp/src/bin/assign_resources.rs | |||
| @@ -26,15 +26,13 @@ async fn main(spawner: Spawner) { | |||
| 26 | let p = embassy_rp::init(Default::default()); | 26 | let p = embassy_rp::init(Default::default()); |
| 27 | 27 | ||
| 28 | // 1) Assigning a resource to a task by passing parts of the peripherals. | 28 | // 1) Assigning a resource to a task by passing parts of the peripherals. |
| 29 | spawner | 29 | spawner.spawn(double_blinky_manually_assigned(spawner, p.PIN_20, p.PIN_21).unwrap()); |
| 30 | .spawn(double_blinky_manually_assigned(spawner, p.PIN_20, p.PIN_21)) | ||
| 31 | .unwrap(); | ||
| 32 | 30 | ||
| 33 | // 2) Using the assign-resources macro to assign resources to a task. | 31 | // 2) Using the assign-resources macro to assign resources to a task. |
| 34 | // we perform the split, see further below for the definition of the resources struct | 32 | // we perform the split, see further below for the definition of the resources struct |
| 35 | let r = split_resources!(p); | 33 | let r = split_resources!(p); |
| 36 | // and then we can use them | 34 | // and then we can use them |
| 37 | spawner.spawn(double_blinky_macro_assigned(spawner, r.leds)).unwrap(); | 35 | spawner.spawn(double_blinky_macro_assigned(spawner, r.leds).unwrap()); |
| 38 | } | 36 | } |
| 39 | 37 | ||
| 40 | // 1) Assigning a resource to a task by passing parts of the peripherals. | 38 | // 1) Assigning a resource to a task by passing parts of the peripherals. |
diff --git a/examples/rp/src/bin/blinky_two_channels.rs b/examples/rp/src/bin/blinky_two_channels.rs index 51e139e94..87f3a3545 100644 --- a/examples/rp/src/bin/blinky_two_channels.rs +++ b/examples/rp/src/bin/blinky_two_channels.rs | |||
| @@ -27,8 +27,8 @@ async fn main(spawner: Spawner) { | |||
| 27 | let dt = 100 * 1_000_000; | 27 | let dt = 100 * 1_000_000; |
| 28 | let k = 1.003; | 28 | let k = 1.003; |
| 29 | 29 | ||
| 30 | unwrap!(spawner.spawn(toggle_led(CHANNEL.sender(), Duration::from_nanos(dt)))); | 30 | spawner.spawn(unwrap!(toggle_led(CHANNEL.sender(), Duration::from_nanos(dt)))); |
| 31 | unwrap!(spawner.spawn(toggle_led( | 31 | spawner.spawn(unwrap!(toggle_led( |
| 32 | CHANNEL.sender(), | 32 | CHANNEL.sender(), |
| 33 | Duration::from_nanos((dt as f64 * k) as u64) | 33 | Duration::from_nanos((dt as f64 * k) as u64) |
| 34 | ))); | 34 | ))); |
diff --git a/examples/rp/src/bin/blinky_two_tasks.rs b/examples/rp/src/bin/blinky_two_tasks.rs index 67a9108c0..aac7d928b 100644 --- a/examples/rp/src/bin/blinky_two_tasks.rs +++ b/examples/rp/src/bin/blinky_two_tasks.rs | |||
| @@ -30,8 +30,8 @@ async fn main(spawner: Spawner) { | |||
| 30 | let dt = 100 * 1_000_000; | 30 | let dt = 100 * 1_000_000; |
| 31 | let k = 1.003; | 31 | let k = 1.003; |
| 32 | 32 | ||
| 33 | unwrap!(spawner.spawn(toggle_led(&LED, Duration::from_nanos(dt)))); | 33 | spawner.spawn(unwrap!(toggle_led(&LED, Duration::from_nanos(dt)))); |
| 34 | unwrap!(spawner.spawn(toggle_led(&LED, Duration::from_nanos((dt as f64 * k) as u64)))); | 34 | spawner.spawn(unwrap!(toggle_led(&LED, Duration::from_nanos((dt as f64 * k) as u64)))); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | #[embassy_executor::task(pool_size = 2)] | 37 | #[embassy_executor::task(pool_size = 2)] |
diff --git a/examples/rp/src/bin/ethernet_w5500_icmp.rs b/examples/rp/src/bin/ethernet_w5500_icmp.rs index e434b3bbc..8c684a791 100644 --- a/examples/rp/src/bin/ethernet_w5500_icmp.rs +++ b/examples/rp/src/bin/ethernet_w5500_icmp.rs | |||
| @@ -61,7 +61,7 @@ async fn main(spawner: Spawner) { | |||
| 61 | ) | 61 | ) |
| 62 | .await | 62 | .await |
| 63 | .unwrap(); | 63 | .unwrap(); |
| 64 | unwrap!(spawner.spawn(ethernet_task(runner))); | 64 | spawner.spawn(unwrap!(ethernet_task(runner))); |
| 65 | 65 | ||
| 66 | // Generate random seed | 66 | // Generate random seed |
| 67 | let seed = rng.next_u64(); | 67 | let seed = rng.next_u64(); |
| @@ -76,7 +76,7 @@ async fn main(spawner: Spawner) { | |||
| 76 | ); | 76 | ); |
| 77 | 77 | ||
| 78 | // Launch network task | 78 | // Launch network task |
| 79 | unwrap!(spawner.spawn(net_task(runner))); | 79 | spawner.spawn(unwrap!(net_task(runner))); |
| 80 | 80 | ||
| 81 | info!("Waiting for DHCP..."); | 81 | info!("Waiting for DHCP..."); |
| 82 | let cfg = wait_for_config(stack).await; | 82 | let cfg = wait_for_config(stack).await; |
diff --git a/examples/rp/src/bin/ethernet_w5500_icmp_ping.rs b/examples/rp/src/bin/ethernet_w5500_icmp_ping.rs index 0ec594fd5..49d28071a 100644 --- a/examples/rp/src/bin/ethernet_w5500_icmp_ping.rs +++ b/examples/rp/src/bin/ethernet_w5500_icmp_ping.rs | |||
| @@ -63,7 +63,7 @@ async fn main(spawner: Spawner) { | |||
| 63 | ) | 63 | ) |
| 64 | .await | 64 | .await |
| 65 | .unwrap(); | 65 | .unwrap(); |
| 66 | unwrap!(spawner.spawn(ethernet_task(runner))); | 66 | spawner.spawn(unwrap!(ethernet_task(runner))); |
| 67 | 67 | ||
| 68 | // Generate random seed | 68 | // Generate random seed |
| 69 | let seed = rng.next_u64(); | 69 | let seed = rng.next_u64(); |
| @@ -78,7 +78,7 @@ async fn main(spawner: Spawner) { | |||
| 78 | ); | 78 | ); |
| 79 | 79 | ||
| 80 | // Launch network task | 80 | // Launch network task |
| 81 | unwrap!(spawner.spawn(net_task(runner))); | 81 | spawner.spawn(unwrap!(net_task(runner))); |
| 82 | 82 | ||
| 83 | info!("Waiting for DHCP..."); | 83 | info!("Waiting for DHCP..."); |
| 84 | let cfg = wait_for_config(stack).await; | 84 | let cfg = wait_for_config(stack).await; |
diff --git a/examples/rp/src/bin/ethernet_w5500_multisocket.rs b/examples/rp/src/bin/ethernet_w5500_multisocket.rs index 27e2f3c30..5c049ddca 100644 --- a/examples/rp/src/bin/ethernet_w5500_multisocket.rs +++ b/examples/rp/src/bin/ethernet_w5500_multisocket.rs | |||
| @@ -64,7 +64,7 @@ async fn main(spawner: Spawner) { | |||
| 64 | ) | 64 | ) |
| 65 | .await | 65 | .await |
| 66 | .unwrap(); | 66 | .unwrap(); |
| 67 | unwrap!(spawner.spawn(ethernet_task(runner))); | 67 | spawner.spawn(unwrap!(ethernet_task(runner))); |
| 68 | 68 | ||
| 69 | // Generate random seed | 69 | // Generate random seed |
| 70 | let seed = rng.next_u64(); | 70 | let seed = rng.next_u64(); |
| @@ -79,7 +79,7 @@ async fn main(spawner: Spawner) { | |||
| 79 | ); | 79 | ); |
| 80 | 80 | ||
| 81 | // Launch network task | 81 | // Launch network task |
| 82 | unwrap!(spawner.spawn(net_task(runner))); | 82 | spawner.spawn(unwrap!(net_task(runner))); |
| 83 | 83 | ||
| 84 | info!("Waiting for DHCP..."); | 84 | info!("Waiting for DHCP..."); |
| 85 | let cfg = wait_for_config(stack).await; | 85 | let cfg = wait_for_config(stack).await; |
| @@ -87,8 +87,8 @@ async fn main(spawner: Spawner) { | |||
| 87 | info!("IP address: {:?}", local_addr); | 87 | info!("IP address: {:?}", local_addr); |
| 88 | 88 | ||
| 89 | // Create two sockets listening to the same port, to handle simultaneous connections | 89 | // Create two sockets listening to the same port, to handle simultaneous connections |
| 90 | unwrap!(spawner.spawn(listen_task(stack, 0, 1234))); | 90 | spawner.spawn(unwrap!(listen_task(stack, 0, 1234))); |
| 91 | unwrap!(spawner.spawn(listen_task(stack, 1, 1234))); | 91 | spawner.spawn(unwrap!(listen_task(stack, 1, 1234))); |
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | #[embassy_executor::task(pool_size = 2)] | 94 | #[embassy_executor::task(pool_size = 2)] |
diff --git a/examples/rp/src/bin/ethernet_w5500_tcp_client.rs b/examples/rp/src/bin/ethernet_w5500_tcp_client.rs index ba82f2a60..7552e4f9b 100644 --- a/examples/rp/src/bin/ethernet_w5500_tcp_client.rs +++ b/examples/rp/src/bin/ethernet_w5500_tcp_client.rs | |||
| @@ -67,7 +67,7 @@ async fn main(spawner: Spawner) { | |||
| 67 | ) | 67 | ) |
| 68 | .await | 68 | .await |
| 69 | .unwrap(); | 69 | .unwrap(); |
| 70 | unwrap!(spawner.spawn(ethernet_task(runner))); | 70 | spawner.spawn(unwrap!(ethernet_task(runner))); |
| 71 | 71 | ||
| 72 | // Generate random seed | 72 | // Generate random seed |
| 73 | let seed = rng.next_u64(); | 73 | let seed = rng.next_u64(); |
| @@ -82,7 +82,7 @@ async fn main(spawner: Spawner) { | |||
| 82 | ); | 82 | ); |
| 83 | 83 | ||
| 84 | // Launch network task | 84 | // Launch network task |
| 85 | unwrap!(spawner.spawn(net_task(runner))); | 85 | spawner.spawn(unwrap!(net_task(runner))); |
| 86 | 86 | ||
| 87 | info!("Waiting for DHCP..."); | 87 | info!("Waiting for DHCP..."); |
| 88 | let cfg = wait_for_config(stack).await; | 88 | let cfg = wait_for_config(stack).await; |
diff --git a/examples/rp/src/bin/ethernet_w5500_tcp_server.rs b/examples/rp/src/bin/ethernet_w5500_tcp_server.rs index 5c56dcafa..7b6fecad4 100644 --- a/examples/rp/src/bin/ethernet_w5500_tcp_server.rs +++ b/examples/rp/src/bin/ethernet_w5500_tcp_server.rs | |||
| @@ -66,7 +66,7 @@ async fn main(spawner: Spawner) { | |||
| 66 | ) | 66 | ) |
| 67 | .await | 67 | .await |
| 68 | .unwrap(); | 68 | .unwrap(); |
| 69 | unwrap!(spawner.spawn(ethernet_task(runner))); | 69 | spawner.spawn(unwrap!(ethernet_task(runner))); |
| 70 | 70 | ||
| 71 | // Generate random seed | 71 | // Generate random seed |
| 72 | let seed = rng.next_u64(); | 72 | let seed = rng.next_u64(); |
| @@ -81,7 +81,7 @@ async fn main(spawner: Spawner) { | |||
| 81 | ); | 81 | ); |
| 82 | 82 | ||
| 83 | // Launch network task | 83 | // Launch network task |
| 84 | unwrap!(spawner.spawn(net_task(runner))); | 84 | spawner.spawn(unwrap!(net_task(runner))); |
| 85 | 85 | ||
| 86 | info!("Waiting for DHCP..."); | 86 | info!("Waiting for DHCP..."); |
| 87 | let cfg = wait_for_config(stack).await; | 87 | let cfg = wait_for_config(stack).await; |
diff --git a/examples/rp/src/bin/ethernet_w5500_udp.rs b/examples/rp/src/bin/ethernet_w5500_udp.rs index c5fc8de1d..f099490f5 100644 --- a/examples/rp/src/bin/ethernet_w5500_udp.rs +++ b/examples/rp/src/bin/ethernet_w5500_udp.rs | |||
| @@ -64,7 +64,7 @@ async fn main(spawner: Spawner) { | |||
| 64 | ) | 64 | ) |
| 65 | .await | 65 | .await |
| 66 | .unwrap(); | 66 | .unwrap(); |
| 67 | unwrap!(spawner.spawn(ethernet_task(runner))); | 67 | spawner.spawn(unwrap!(ethernet_task(runner))); |
| 68 | 68 | ||
| 69 | // Generate random seed | 69 | // Generate random seed |
| 70 | let seed = rng.next_u64(); | 70 | let seed = rng.next_u64(); |
| @@ -79,7 +79,7 @@ async fn main(spawner: Spawner) { | |||
| 79 | ); | 79 | ); |
| 80 | 80 | ||
| 81 | // Launch network task | 81 | // Launch network task |
| 82 | unwrap!(spawner.spawn(net_task(runner))); | 82 | spawner.spawn(unwrap!(net_task(runner))); |
| 83 | 83 | ||
| 84 | info!("Waiting for DHCP..."); | 84 | info!("Waiting for DHCP..."); |
| 85 | let cfg = wait_for_config(stack).await; | 85 | let cfg = wait_for_config(stack).await; |
diff --git a/examples/rp/src/bin/i2c_slave.rs b/examples/rp/src/bin/i2c_slave.rs index 08f31001b..e2b8b0d06 100644 --- a/examples/rp/src/bin/i2c_slave.rs +++ b/examples/rp/src/bin/i2c_slave.rs | |||
| @@ -105,7 +105,7 @@ async fn main(spawner: Spawner) { | |||
| 105 | config.addr = DEV_ADDR as u16; | 105 | config.addr = DEV_ADDR as u16; |
| 106 | let device = i2c_slave::I2cSlave::new(p.I2C1, d_scl, d_sda, Irqs, config); | 106 | let device = i2c_slave::I2cSlave::new(p.I2C1, d_scl, d_sda, Irqs, config); |
| 107 | 107 | ||
| 108 | unwrap!(spawner.spawn(device_task(device))); | 108 | spawner.spawn(unwrap!(device_task(device))); |
| 109 | 109 | ||
| 110 | let c_sda = p.PIN_0; | 110 | let c_sda = p.PIN_0; |
| 111 | let c_scl = p.PIN_1; | 111 | let c_scl = p.PIN_1; |
| @@ -113,5 +113,5 @@ async fn main(spawner: Spawner) { | |||
| 113 | config.frequency = 1_000_000; | 113 | config.frequency = 1_000_000; |
| 114 | let controller = i2c::I2c::new_async(p.I2C0, c_scl, c_sda, Irqs, config); | 114 | let controller = i2c::I2c::new_async(p.I2C0, c_scl, c_sda, Irqs, config); |
| 115 | 115 | ||
| 116 | unwrap!(spawner.spawn(controller_task(controller))); | 116 | spawner.spawn(unwrap!(controller_task(controller))); |
| 117 | } | 117 | } |
diff --git a/examples/rp/src/bin/interrupt.rs b/examples/rp/src/bin/interrupt.rs index 787cdc112..2748f778a 100644 --- a/examples/rp/src/bin/interrupt.rs +++ b/examples/rp/src/bin/interrupt.rs | |||
| @@ -51,7 +51,7 @@ async fn main(spawner: Spawner) { | |||
| 51 | // No Mutex needed when sharing within the same executor/prio level | 51 | // No Mutex needed when sharing within the same executor/prio level |
| 52 | static AVG: StaticCell<Cell<u32>> = StaticCell::new(); | 52 | static AVG: StaticCell<Cell<u32>> = StaticCell::new(); |
| 53 | let avg = AVG.init(Default::default()); | 53 | let avg = AVG.init(Default::default()); |
| 54 | spawner.must_spawn(processing(avg)); | 54 | spawner.spawn(processing(avg).unwrap()); |
| 55 | 55 | ||
| 56 | let mut ticker = Ticker::every(Duration::from_secs(1)); | 56 | let mut ticker = Ticker::every(Duration::from_secs(1)); |
| 57 | loop { | 57 | loop { |
diff --git a/examples/rp/src/bin/multicore.rs b/examples/rp/src/bin/multicore.rs index 7cb546c91..3a6367420 100644 --- a/examples/rp/src/bin/multicore.rs +++ b/examples/rp/src/bin/multicore.rs | |||
| @@ -35,12 +35,12 @@ fn main() -> ! { | |||
| 35 | unsafe { &mut *core::ptr::addr_of_mut!(CORE1_STACK) }, | 35 | unsafe { &mut *core::ptr::addr_of_mut!(CORE1_STACK) }, |
| 36 | move || { | 36 | move || { |
| 37 | let executor1 = EXECUTOR1.init(Executor::new()); | 37 | let executor1 = EXECUTOR1.init(Executor::new()); |
| 38 | executor1.run(|spawner| unwrap!(spawner.spawn(core1_task(led)))); | 38 | executor1.run(|spawner| spawner.spawn(unwrap!(core1_task(led)))); |
| 39 | }, | 39 | }, |
| 40 | ); | 40 | ); |
| 41 | 41 | ||
| 42 | let executor0 = EXECUTOR0.init(Executor::new()); | 42 | let executor0 = EXECUTOR0.init(Executor::new()); |
| 43 | executor0.run(|spawner| unwrap!(spawner.spawn(core0_task()))); | 43 | executor0.run(|spawner| spawner.spawn(unwrap!(core0_task()))); |
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | #[embassy_executor::task] | 46 | #[embassy_executor::task] |
diff --git a/examples/rp/src/bin/multiprio.rs b/examples/rp/src/bin/multiprio.rs index 2b397f97d..96cdf8fb1 100644 --- a/examples/rp/src/bin/multiprio.rs +++ b/examples/rp/src/bin/multiprio.rs | |||
| @@ -130,16 +130,16 @@ fn main() -> ! { | |||
| 130 | // High-priority executor: SWI_IRQ_1, priority level 2 | 130 | // High-priority executor: SWI_IRQ_1, priority level 2 |
| 131 | interrupt::SWI_IRQ_1.set_priority(Priority::P2); | 131 | interrupt::SWI_IRQ_1.set_priority(Priority::P2); |
| 132 | let spawner = EXECUTOR_HIGH.start(interrupt::SWI_IRQ_1); | 132 | let spawner = EXECUTOR_HIGH.start(interrupt::SWI_IRQ_1); |
| 133 | unwrap!(spawner.spawn(run_high())); | 133 | spawner.spawn(unwrap!(run_high())); |
| 134 | 134 | ||
| 135 | // Medium-priority executor: SWI_IRQ_0, priority level 3 | 135 | // Medium-priority executor: SWI_IRQ_0, priority level 3 |
| 136 | interrupt::SWI_IRQ_0.set_priority(Priority::P3); | 136 | interrupt::SWI_IRQ_0.set_priority(Priority::P3); |
| 137 | let spawner = EXECUTOR_MED.start(interrupt::SWI_IRQ_0); | 137 | let spawner = EXECUTOR_MED.start(interrupt::SWI_IRQ_0); |
| 138 | unwrap!(spawner.spawn(run_med())); | 138 | spawner.spawn(unwrap!(run_med())); |
| 139 | 139 | ||
| 140 | // Low priority executor: runs in thread mode, using WFE/SEV | 140 | // Low priority executor: runs in thread mode, using WFE/SEV |
| 141 | let executor = EXECUTOR_LOW.init(Executor::new()); | 141 | let executor = EXECUTOR_LOW.init(Executor::new()); |
| 142 | executor.run(|spawner| { | 142 | executor.run(|spawner| { |
| 143 | unwrap!(spawner.spawn(run_low())); | 143 | spawner.spawn(unwrap!(run_low())); |
| 144 | }); | 144 | }); |
| 145 | } | 145 | } |
diff --git a/examples/rp/src/bin/orchestrate_tasks.rs b/examples/rp/src/bin/orchestrate_tasks.rs index c35679251..9f25e1087 100644 --- a/examples/rp/src/bin/orchestrate_tasks.rs +++ b/examples/rp/src/bin/orchestrate_tasks.rs | |||
| @@ -129,13 +129,13 @@ async fn main(spawner: Spawner) { | |||
| 129 | let p = embassy_rp::init(Default::default()); | 129 | let p = embassy_rp::init(Default::default()); |
| 130 | let r = split_resources! {p}; | 130 | let r = split_resources! {p}; |
| 131 | 131 | ||
| 132 | spawner.spawn(orchestrate(spawner)).unwrap(); | 132 | spawner.spawn(orchestrate(spawner).unwrap()); |
| 133 | spawner.spawn(random_60s(spawner)).unwrap(); | 133 | spawner.spawn(random_60s(spawner).unwrap()); |
| 134 | spawner.spawn(random_90s(spawner)).unwrap(); | 134 | spawner.spawn(random_90s(spawner).unwrap()); |
| 135 | // `random_30s` is not spawned here, butin the orchestrate task depending on state | 135 | // `random_30s` is not spawned here, butin the orchestrate task depending on state |
| 136 | spawner.spawn(usb_power(spawner, r.vbus)).unwrap(); | 136 | spawner.spawn(usb_power(spawner, r.vbus).unwrap()); |
| 137 | spawner.spawn(vsys_voltage(spawner, r.vsys)).unwrap(); | 137 | spawner.spawn(vsys_voltage(spawner, r.vsys).unwrap()); |
| 138 | spawner.spawn(consumer(spawner)).unwrap(); | 138 | spawner.spawn(consumer(spawner).unwrap()); |
| 139 | } | 139 | } |
| 140 | 140 | ||
| 141 | /// Main task that processes all events and updates system state. | 141 | /// Main task that processes all events and updates system state. |
| @@ -198,7 +198,7 @@ async fn orchestrate(spawner: Spawner) { | |||
| 198 | drop(state); | 198 | drop(state); |
| 199 | if respawn_first_random_seed_task { | 199 | if respawn_first_random_seed_task { |
| 200 | info!("(Re)-Starting the first random signal task"); | 200 | info!("(Re)-Starting the first random signal task"); |
| 201 | spawner.spawn(random_30s(spawner)).unwrap(); | 201 | spawner.spawn(random_30s(spawner).unwrap()); |
| 202 | } | 202 | } |
| 203 | } | 203 | } |
| 204 | _ => {} | 204 | _ => {} |
diff --git a/examples/rp/src/bin/pio_async.rs b/examples/rp/src/bin/pio_async.rs index bf6dbee69..1743a417e 100644 --- a/examples/rp/src/bin/pio_async.rs +++ b/examples/rp/src/bin/pio_async.rs | |||
| @@ -125,7 +125,7 @@ async fn main(spawner: Spawner) { | |||
| 125 | setup_pio_task_sm0(&mut common, &mut sm0, p.PIN_0); | 125 | setup_pio_task_sm0(&mut common, &mut sm0, p.PIN_0); |
| 126 | setup_pio_task_sm1(&mut common, &mut sm1); | 126 | setup_pio_task_sm1(&mut common, &mut sm1); |
| 127 | setup_pio_task_sm2(&mut common, &mut sm2); | 127 | setup_pio_task_sm2(&mut common, &mut sm2); |
| 128 | spawner.spawn(pio_task_sm0(sm0)).unwrap(); | 128 | spawner.spawn(pio_task_sm0(sm0).unwrap()); |
| 129 | spawner.spawn(pio_task_sm1(sm1)).unwrap(); | 129 | spawner.spawn(pio_task_sm1(sm1).unwrap()); |
| 130 | spawner.spawn(pio_task_sm2(irq3, sm2)).unwrap(); | 130 | spawner.spawn(pio_task_sm2(irq3, sm2).unwrap()); |
| 131 | } | 131 | } |
diff --git a/examples/rp/src/bin/pio_rotary_encoder.rs b/examples/rp/src/bin/pio_rotary_encoder.rs index 2750f61ae..2fc19970b 100644 --- a/examples/rp/src/bin/pio_rotary_encoder.rs +++ b/examples/rp/src/bin/pio_rotary_encoder.rs | |||
| @@ -50,6 +50,6 @@ async fn main(spawner: Spawner) { | |||
| 50 | let encoder0 = PioEncoder::new(&mut common, sm0, p.PIN_4, p.PIN_5, &prg); | 50 | let encoder0 = PioEncoder::new(&mut common, sm0, p.PIN_4, p.PIN_5, &prg); |
| 51 | let encoder1 = PioEncoder::new(&mut common, sm1, p.PIN_6, p.PIN_7, &prg); | 51 | let encoder1 = PioEncoder::new(&mut common, sm1, p.PIN_6, p.PIN_7, &prg); |
| 52 | 52 | ||
| 53 | spawner.must_spawn(encoder_0(encoder0)); | 53 | spawner.spawn(encoder_0(encoder0).unwrap()); |
| 54 | spawner.must_spawn(encoder_1(encoder1)); | 54 | spawner.spawn(encoder_1(encoder1).unwrap()); |
| 55 | } | 55 | } |
diff --git a/examples/rp/src/bin/pwm.rs b/examples/rp/src/bin/pwm.rs index 04374323d..9dd07ab6e 100644 --- a/examples/rp/src/bin/pwm.rs +++ b/examples/rp/src/bin/pwm.rs | |||
| @@ -18,8 +18,8 @@ use {defmt_rtt as _, panic_probe as _}; | |||
| 18 | #[embassy_executor::main] | 18 | #[embassy_executor::main] |
| 19 | async fn main(spawner: Spawner) { | 19 | async fn main(spawner: Spawner) { |
| 20 | let p = embassy_rp::init(Default::default()); | 20 | let p = embassy_rp::init(Default::default()); |
| 21 | spawner.spawn(pwm_set_config(p.PWM_SLICE4, p.PIN_25)).unwrap(); | 21 | spawner.spawn(pwm_set_config(p.PWM_SLICE4, p.PIN_25).unwrap()); |
| 22 | spawner.spawn(pwm_set_dutycycle(p.PWM_SLICE2, p.PIN_4)).unwrap(); | 22 | spawner.spawn(pwm_set_dutycycle(p.PWM_SLICE2, p.PIN_4).unwrap()); |
| 23 | } | 23 | } |
| 24 | 24 | ||
| 25 | /// Demonstrate PWM by modifying & applying the config | 25 | /// Demonstrate PWM by modifying & applying the config |
diff --git a/examples/rp/src/bin/shared_bus.rs b/examples/rp/src/bin/shared_bus.rs index 9267dfccb..db7566b1a 100644 --- a/examples/rp/src/bin/shared_bus.rs +++ b/examples/rp/src/bin/shared_bus.rs | |||
| @@ -35,8 +35,8 @@ async fn main(spawner: Spawner) { | |||
| 35 | static I2C_BUS: StaticCell<I2c1Bus> = StaticCell::new(); | 35 | static I2C_BUS: StaticCell<I2c1Bus> = StaticCell::new(); |
| 36 | let i2c_bus = I2C_BUS.init(Mutex::new(i2c)); | 36 | let i2c_bus = I2C_BUS.init(Mutex::new(i2c)); |
| 37 | 37 | ||
| 38 | spawner.must_spawn(i2c_task_a(i2c_bus)); | 38 | spawner.spawn(i2c_task_a(i2c_bus).unwrap()); |
| 39 | spawner.must_spawn(i2c_task_b(i2c_bus)); | 39 | spawner.spawn(i2c_task_b(i2c_bus).unwrap()); |
| 40 | 40 | ||
| 41 | // Shared SPI bus | 41 | // Shared SPI bus |
| 42 | let spi_cfg = spi::Config::default(); | 42 | let spi_cfg = spi::Config::default(); |
| @@ -48,8 +48,8 @@ async fn main(spawner: Spawner) { | |||
| 48 | let cs_a = Output::new(p.PIN_0, Level::High); | 48 | let cs_a = Output::new(p.PIN_0, Level::High); |
| 49 | let cs_b = Output::new(p.PIN_1, Level::High); | 49 | let cs_b = Output::new(p.PIN_1, Level::High); |
| 50 | 50 | ||
| 51 | spawner.must_spawn(spi_task_a(spi_bus, cs_a)); | 51 | spawner.spawn(spi_task_a(spi_bus, cs_a).unwrap()); |
| 52 | spawner.must_spawn(spi_task_b(spi_bus, cs_b)); | 52 | spawner.spawn(spi_task_b(spi_bus, cs_b).unwrap()); |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | #[embassy_executor::task] | 55 | #[embassy_executor::task] |
diff --git a/examples/rp/src/bin/sharing.rs b/examples/rp/src/bin/sharing.rs index 856be6ace..d4c89946b 100644 --- a/examples/rp/src/bin/sharing.rs +++ b/examples/rp/src/bin/sharing.rs | |||
| @@ -68,7 +68,7 @@ fn main() -> ! { | |||
| 68 | // High-priority executor: runs in interrupt mode | 68 | // High-priority executor: runs in interrupt mode |
| 69 | interrupt::SWI_IRQ_0.set_priority(Priority::P3); | 69 | interrupt::SWI_IRQ_0.set_priority(Priority::P3); |
| 70 | let spawner = EXECUTOR_HI.start(interrupt::SWI_IRQ_0); | 70 | let spawner = EXECUTOR_HI.start(interrupt::SWI_IRQ_0); |
| 71 | spawner.must_spawn(task_a(uart)); | 71 | spawner.spawn(task_a(uart).unwrap()); |
| 72 | 72 | ||
| 73 | // Low priority executor: runs in thread mode | 73 | // Low priority executor: runs in thread mode |
| 74 | let executor = EXECUTOR_LOW.init(Executor::new()); | 74 | let executor = EXECUTOR_LOW.init(Executor::new()); |
| @@ -83,8 +83,8 @@ fn main() -> ! { | |||
| 83 | static REF_CELL: ConstStaticCell<RefCell<MyType>> = ConstStaticCell::new(RefCell::new(MyType { inner: 0 })); | 83 | static REF_CELL: ConstStaticCell<RefCell<MyType>> = ConstStaticCell::new(RefCell::new(MyType { inner: 0 })); |
| 84 | let ref_cell = REF_CELL.take(); | 84 | let ref_cell = REF_CELL.take(); |
| 85 | 85 | ||
| 86 | spawner.must_spawn(task_b(uart, cell, ref_cell)); | 86 | spawner.spawn(task_b(uart, cell, ref_cell).unwrap()); |
| 87 | spawner.must_spawn(task_c(cell, ref_cell)); | 87 | spawner.spawn(task_c(cell, ref_cell).unwrap()); |
| 88 | }); | 88 | }); |
| 89 | } | 89 | } |
| 90 | 90 | ||
diff --git a/examples/rp/src/bin/uart_buffered_split.rs b/examples/rp/src/bin/uart_buffered_split.rs index 3adbc18ab..820daed96 100644 --- a/examples/rp/src/bin/uart_buffered_split.rs +++ b/examples/rp/src/bin/uart_buffered_split.rs | |||
| @@ -33,7 +33,7 @@ async fn main(spawner: Spawner) { | |||
| 33 | let uart = BufferedUart::new(uart, tx_pin, rx_pin, Irqs, tx_buf, rx_buf, Config::default()); | 33 | let uart = BufferedUart::new(uart, tx_pin, rx_pin, Irqs, tx_buf, rx_buf, Config::default()); |
| 34 | let (mut tx, rx) = uart.split(); | 34 | let (mut tx, rx) = uart.split(); |
| 35 | 35 | ||
| 36 | unwrap!(spawner.spawn(reader(rx))); | 36 | spawner.spawn(unwrap!(reader(rx))); |
| 37 | 37 | ||
| 38 | info!("Writing..."); | 38 | info!("Writing..."); |
| 39 | loop { | 39 | loop { |
diff --git a/examples/rp/src/bin/uart_unidir.rs b/examples/rp/src/bin/uart_unidir.rs index c2c8dfad8..573b45b51 100644 --- a/examples/rp/src/bin/uart_unidir.rs +++ b/examples/rp/src/bin/uart_unidir.rs | |||
| @@ -27,7 +27,7 @@ async fn main(spawner: Spawner) { | |||
| 27 | let mut uart_tx = UartTx::new(p.UART0, p.PIN_0, p.DMA_CH0, Config::default()); | 27 | let mut uart_tx = UartTx::new(p.UART0, p.PIN_0, p.DMA_CH0, Config::default()); |
| 28 | let uart_rx = UartRx::new(p.UART1, p.PIN_5, Irqs, p.DMA_CH1, Config::default()); | 28 | let uart_rx = UartRx::new(p.UART1, p.PIN_5, Irqs, p.DMA_CH1, Config::default()); |
| 29 | 29 | ||
| 30 | unwrap!(spawner.spawn(reader(uart_rx))); | 30 | spawner.spawn(unwrap!(reader(uart_rx))); |
| 31 | 31 | ||
| 32 | info!("Writing..."); | 32 | info!("Writing..."); |
| 33 | loop { | 33 | loop { |
diff --git a/examples/rp/src/bin/usb_ethernet.rs b/examples/rp/src/bin/usb_ethernet.rs index 171f21a75..912e52e96 100644 --- a/examples/rp/src/bin/usb_ethernet.rs +++ b/examples/rp/src/bin/usb_ethernet.rs | |||
| @@ -84,11 +84,11 @@ async fn main(spawner: Spawner) { | |||
| 84 | // Build the builder. | 84 | // Build the builder. |
| 85 | let usb = builder.build(); | 85 | let usb = builder.build(); |
| 86 | 86 | ||
| 87 | unwrap!(spawner.spawn(usb_task(usb))); | 87 | spawner.spawn(unwrap!(usb_task(usb))); |
| 88 | 88 | ||
| 89 | static NET_STATE: StaticCell<NetState<MTU, 4, 4>> = StaticCell::new(); | 89 | static NET_STATE: StaticCell<NetState<MTU, 4, 4>> = StaticCell::new(); |
| 90 | let (runner, device) = class.into_embassy_net_device::<MTU, 4, 4>(NET_STATE.init(NetState::new()), our_mac_addr); | 90 | let (runner, device) = class.into_embassy_net_device::<MTU, 4, 4>(NET_STATE.init(NetState::new()), our_mac_addr); |
| 91 | unwrap!(spawner.spawn(usb_ncm_task(runner))); | 91 | spawner.spawn(unwrap!(usb_ncm_task(runner))); |
| 92 | 92 | ||
| 93 | let config = embassy_net::Config::dhcpv4(Default::default()); | 93 | let config = embassy_net::Config::dhcpv4(Default::default()); |
| 94 | //let config = embassy_net::Config::ipv4_static(embassy_net::StaticConfigV4 { | 94 | //let config = embassy_net::Config::ipv4_static(embassy_net::StaticConfigV4 { |
| @@ -104,7 +104,7 @@ async fn main(spawner: Spawner) { | |||
| 104 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); | 104 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); |
| 105 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 105 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 106 | 106 | ||
| 107 | unwrap!(spawner.spawn(net_task(runner))); | 107 | spawner.spawn(unwrap!(net_task(runner))); |
| 108 | 108 | ||
| 109 | // And now we can use it! | 109 | // And now we can use it! |
| 110 | 110 | ||
diff --git a/examples/rp/src/bin/usb_logger.rs b/examples/rp/src/bin/usb_logger.rs index af401ed63..ed2333efc 100644 --- a/examples/rp/src/bin/usb_logger.rs +++ b/examples/rp/src/bin/usb_logger.rs | |||
| @@ -25,7 +25,7 @@ async fn logger_task(driver: Driver<'static, USB>) { | |||
| 25 | async fn main(spawner: Spawner) { | 25 | async fn main(spawner: Spawner) { |
| 26 | let p = embassy_rp::init(Default::default()); | 26 | let p = embassy_rp::init(Default::default()); |
| 27 | let driver = Driver::new(p.USB, Irqs); | 27 | let driver = Driver::new(p.USB, Irqs); |
| 28 | spawner.spawn(logger_task(driver)).unwrap(); | 28 | spawner.spawn(logger_task(driver).unwrap()); |
| 29 | 29 | ||
| 30 | let mut counter = 0; | 30 | let mut counter = 0; |
| 31 | loop { | 31 | loop { |
diff --git a/examples/rp/src/bin/usb_serial.rs b/examples/rp/src/bin/usb_serial.rs index 5e3f0f378..b79012acb 100644 --- a/examples/rp/src/bin/usb_serial.rs +++ b/examples/rp/src/bin/usb_serial.rs | |||
| @@ -69,7 +69,7 @@ async fn main(spawner: Spawner) { | |||
| 69 | let usb = builder.build(); | 69 | let usb = builder.build(); |
| 70 | 70 | ||
| 71 | // Run the USB device. | 71 | // Run the USB device. |
| 72 | unwrap!(spawner.spawn(usb_task(usb))); | 72 | spawner.spawn(unwrap!(usb_task(usb))); |
| 73 | 73 | ||
| 74 | // Do stuff with the class! | 74 | // Do stuff with the class! |
| 75 | loop { | 75 | loop { |
diff --git a/examples/rp/src/bin/usb_serial_with_handler.rs b/examples/rp/src/bin/usb_serial_with_handler.rs index a9e65be70..b85c9029b 100644 --- a/examples/rp/src/bin/usb_serial_with_handler.rs +++ b/examples/rp/src/bin/usb_serial_with_handler.rs | |||
| @@ -53,7 +53,7 @@ async fn logger_task(driver: Driver<'static, USB>) { | |||
| 53 | async fn main(spawner: Spawner) { | 53 | async fn main(spawner: Spawner) { |
| 54 | let p = embassy_rp::init(Default::default()); | 54 | let p = embassy_rp::init(Default::default()); |
| 55 | let driver = Driver::new(p.USB, Irqs); | 55 | let driver = Driver::new(p.USB, Irqs); |
| 56 | spawner.spawn(logger_task(driver)).unwrap(); | 56 | spawner.spawn(logger_task(driver).unwrap()); |
| 57 | 57 | ||
| 58 | let mut counter = 0; | 58 | let mut counter = 0; |
| 59 | loop { | 59 | loop { |
diff --git a/examples/rp/src/bin/wifi_ap_tcp_server.rs b/examples/rp/src/bin/wifi_ap_tcp_server.rs index 856838a8c..128599e0d 100644 --- a/examples/rp/src/bin/wifi_ap_tcp_server.rs +++ b/examples/rp/src/bin/wifi_ap_tcp_server.rs | |||
| @@ -70,7 +70,7 @@ async fn main(spawner: Spawner) { | |||
| 70 | static STATE: StaticCell<cyw43::State> = StaticCell::new(); | 70 | static STATE: StaticCell<cyw43::State> = StaticCell::new(); |
| 71 | let state = STATE.init(cyw43::State::new()); | 71 | let state = STATE.init(cyw43::State::new()); |
| 72 | let (net_device, mut control, runner) = cyw43::new(state, pwr, spi, fw).await; | 72 | let (net_device, mut control, runner) = cyw43::new(state, pwr, spi, fw).await; |
| 73 | unwrap!(spawner.spawn(cyw43_task(runner))); | 73 | spawner.spawn(unwrap!(cyw43_task(runner))); |
| 74 | 74 | ||
| 75 | control.init(clm).await; | 75 | control.init(clm).await; |
| 76 | control | 76 | control |
| @@ -91,7 +91,7 @@ async fn main(spawner: Spawner) { | |||
| 91 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); | 91 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); |
| 92 | let (stack, runner) = embassy_net::new(net_device, config, RESOURCES.init(StackResources::new()), seed); | 92 | let (stack, runner) = embassy_net::new(net_device, config, RESOURCES.init(StackResources::new()), seed); |
| 93 | 93 | ||
| 94 | unwrap!(spawner.spawn(net_task(runner))); | 94 | spawner.spawn(unwrap!(net_task(runner))); |
| 95 | 95 | ||
| 96 | //control.start_ap_open("cyw43", 5).await; | 96 | //control.start_ap_open("cyw43", 5).await; |
| 97 | control.start_ap_wpa2("cyw43", "password", 5).await; | 97 | control.start_ap_wpa2("cyw43", "password", 5).await; |
diff --git a/examples/rp/src/bin/wifi_blinky.rs b/examples/rp/src/bin/wifi_blinky.rs index 6e91ce167..b2e08c517 100644 --- a/examples/rp/src/bin/wifi_blinky.rs +++ b/examples/rp/src/bin/wifi_blinky.rs | |||
| @@ -55,7 +55,7 @@ async fn main(spawner: Spawner) { | |||
| 55 | static STATE: StaticCell<cyw43::State> = StaticCell::new(); | 55 | static STATE: StaticCell<cyw43::State> = StaticCell::new(); |
| 56 | let state = STATE.init(cyw43::State::new()); | 56 | let state = STATE.init(cyw43::State::new()); |
| 57 | let (_net_device, mut control, runner) = cyw43::new(state, pwr, spi, fw).await; | 57 | let (_net_device, mut control, runner) = cyw43::new(state, pwr, spi, fw).await; |
| 58 | unwrap!(spawner.spawn(cyw43_task(runner))); | 58 | spawner.spawn(unwrap!(cyw43_task(runner))); |
| 59 | 59 | ||
| 60 | control.init(clm).await; | 60 | control.init(clm).await; |
| 61 | control | 61 | control |
diff --git a/examples/rp/src/bin/wifi_scan.rs b/examples/rp/src/bin/wifi_scan.rs index fe9c363d9..c884aa2ba 100644 --- a/examples/rp/src/bin/wifi_scan.rs +++ b/examples/rp/src/bin/wifi_scan.rs | |||
| @@ -59,7 +59,7 @@ async fn main(spawner: Spawner) { | |||
| 59 | static STATE: StaticCell<cyw43::State> = StaticCell::new(); | 59 | static STATE: StaticCell<cyw43::State> = StaticCell::new(); |
| 60 | let state = STATE.init(cyw43::State::new()); | 60 | let state = STATE.init(cyw43::State::new()); |
| 61 | let (_net_device, mut control, runner) = cyw43::new(state, pwr, spi, fw).await; | 61 | let (_net_device, mut control, runner) = cyw43::new(state, pwr, spi, fw).await; |
| 62 | unwrap!(spawner.spawn(cyw43_task(runner))); | 62 | spawner.spawn(unwrap!(cyw43_task(runner))); |
| 63 | 63 | ||
| 64 | control.init(clm).await; | 64 | control.init(clm).await; |
| 65 | control | 65 | control |
diff --git a/examples/rp/src/bin/wifi_tcp_server.rs b/examples/rp/src/bin/wifi_tcp_server.rs index ed1a03fcf..126475779 100644 --- a/examples/rp/src/bin/wifi_tcp_server.rs +++ b/examples/rp/src/bin/wifi_tcp_server.rs | |||
| @@ -74,7 +74,7 @@ async fn main(spawner: Spawner) { | |||
| 74 | static STATE: StaticCell<cyw43::State> = StaticCell::new(); | 74 | static STATE: StaticCell<cyw43::State> = StaticCell::new(); |
| 75 | let state = STATE.init(cyw43::State::new()); | 75 | let state = STATE.init(cyw43::State::new()); |
| 76 | let (net_device, mut control, runner) = cyw43::new(state, pwr, spi, fw).await; | 76 | let (net_device, mut control, runner) = cyw43::new(state, pwr, spi, fw).await; |
| 77 | unwrap!(spawner.spawn(cyw43_task(runner))); | 77 | spawner.spawn(unwrap!(cyw43_task(runner))); |
| 78 | 78 | ||
| 79 | control.init(clm).await; | 79 | control.init(clm).await; |
| 80 | control | 80 | control |
| @@ -95,7 +95,7 @@ async fn main(spawner: Spawner) { | |||
| 95 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); | 95 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); |
| 96 | let (stack, runner) = embassy_net::new(net_device, config, RESOURCES.init(StackResources::new()), seed); | 96 | let (stack, runner) = embassy_net::new(net_device, config, RESOURCES.init(StackResources::new()), seed); |
| 97 | 97 | ||
| 98 | unwrap!(spawner.spawn(net_task(runner))); | 98 | spawner.spawn(unwrap!(net_task(runner))); |
| 99 | 99 | ||
| 100 | while let Err(err) = control | 100 | while let Err(err) = control |
| 101 | .join(WIFI_NETWORK, JoinOptions::new(WIFI_PASSWORD.as_bytes())) | 101 | .join(WIFI_NETWORK, JoinOptions::new(WIFI_PASSWORD.as_bytes())) |
diff --git a/examples/rp/src/bin/wifi_webrequest.rs b/examples/rp/src/bin/wifi_webrequest.rs index a75253bb0..079def370 100644 --- a/examples/rp/src/bin/wifi_webrequest.rs +++ b/examples/rp/src/bin/wifi_webrequest.rs | |||
| @@ -76,7 +76,7 @@ async fn main(spawner: Spawner) { | |||
| 76 | static STATE: StaticCell<cyw43::State> = StaticCell::new(); | 76 | static STATE: StaticCell<cyw43::State> = StaticCell::new(); |
| 77 | let state = STATE.init(cyw43::State::new()); | 77 | let state = STATE.init(cyw43::State::new()); |
| 78 | let (net_device, mut control, runner) = cyw43::new(state, pwr, spi, fw).await; | 78 | let (net_device, mut control, runner) = cyw43::new(state, pwr, spi, fw).await; |
| 79 | unwrap!(spawner.spawn(cyw43_task(runner))); | 79 | spawner.spawn(unwrap!(cyw43_task(runner))); |
| 80 | 80 | ||
| 81 | control.init(clm).await; | 81 | control.init(clm).await; |
| 82 | control | 82 | control |
| @@ -98,7 +98,7 @@ async fn main(spawner: Spawner) { | |||
| 98 | static RESOURCES: StaticCell<StackResources<5>> = StaticCell::new(); | 98 | static RESOURCES: StaticCell<StackResources<5>> = StaticCell::new(); |
| 99 | let (stack, runner) = embassy_net::new(net_device, config, RESOURCES.init(StackResources::new()), seed); | 99 | let (stack, runner) = embassy_net::new(net_device, config, RESOURCES.init(StackResources::new()), seed); |
| 100 | 100 | ||
| 101 | unwrap!(spawner.spawn(net_task(runner))); | 101 | spawner.spawn(unwrap!(net_task(runner))); |
| 102 | 102 | ||
| 103 | while let Err(err) = control | 103 | while let Err(err) = control |
| 104 | .join(WIFI_NETWORK, JoinOptions::new(WIFI_PASSWORD.as_bytes())) | 104 | .join(WIFI_NETWORK, JoinOptions::new(WIFI_PASSWORD.as_bytes())) |
diff --git a/examples/rp/src/bin/zerocopy.rs b/examples/rp/src/bin/zerocopy.rs index d1fb0eb00..d603e1ed3 100644 --- a/examples/rp/src/bin/zerocopy.rs +++ b/examples/rp/src/bin/zerocopy.rs | |||
| @@ -52,8 +52,8 @@ async fn main(spawner: Spawner) { | |||
| 52 | let channel = CHANNEL.init(Channel::new(buf)); | 52 | let channel = CHANNEL.init(Channel::new(buf)); |
| 53 | let (sender, receiver) = channel.split(); | 53 | let (sender, receiver) = channel.split(); |
| 54 | 54 | ||
| 55 | spawner.must_spawn(consumer(receiver)); | 55 | spawner.spawn(consumer(receiver).unwrap()); |
| 56 | spawner.must_spawn(producer(sender, adc_parts)); | 56 | spawner.spawn(producer(sender, adc_parts).unwrap()); |
| 57 | 57 | ||
| 58 | let mut ticker = Ticker::every(Duration::from_secs(1)); | 58 | let mut ticker = Ticker::every(Duration::from_secs(1)); |
| 59 | loop { | 59 | loop { |
diff --git a/examples/rp235x/src/bin/assign_resources.rs b/examples/rp235x/src/bin/assign_resources.rs index 341f54d22..4ee4278b5 100644 --- a/examples/rp235x/src/bin/assign_resources.rs +++ b/examples/rp235x/src/bin/assign_resources.rs | |||
| @@ -26,15 +26,13 @@ async fn main(spawner: Spawner) { | |||
| 26 | let p = embassy_rp::init(Default::default()); | 26 | let p = embassy_rp::init(Default::default()); |
| 27 | 27 | ||
| 28 | // 1) Assigning a resource to a task by passing parts of the peripherals. | 28 | // 1) Assigning a resource to a task by passing parts of the peripherals. |
| 29 | spawner | 29 | spawner.spawn(double_blinky_manually_assigned(spawner, p.PIN_20, p.PIN_21).unwrap()); |
| 30 | .spawn(double_blinky_manually_assigned(spawner, p.PIN_20, p.PIN_21)) | ||
| 31 | .unwrap(); | ||
| 32 | 30 | ||
| 33 | // 2) Using the assign-resources macro to assign resources to a task. | 31 | // 2) Using the assign-resources macro to assign resources to a task. |
| 34 | // we perform the split, see further below for the definition of the resources struct | 32 | // we perform the split, see further below for the definition of the resources struct |
| 35 | let r = split_resources!(p); | 33 | let r = split_resources!(p); |
| 36 | // and then we can use them | 34 | // and then we can use them |
| 37 | spawner.spawn(double_blinky_macro_assigned(spawner, r.leds)).unwrap(); | 35 | spawner.spawn(double_blinky_macro_assigned(spawner, r.leds).unwrap()); |
| 38 | } | 36 | } |
| 39 | 37 | ||
| 40 | // 1) Assigning a resource to a task by passing parts of the peripherals. | 38 | // 1) Assigning a resource to a task by passing parts of the peripherals. |
diff --git a/examples/rp235x/src/bin/blinky_two_channels.rs b/examples/rp235x/src/bin/blinky_two_channels.rs index 51e139e94..87f3a3545 100644 --- a/examples/rp235x/src/bin/blinky_two_channels.rs +++ b/examples/rp235x/src/bin/blinky_two_channels.rs | |||
| @@ -27,8 +27,8 @@ async fn main(spawner: Spawner) { | |||
| 27 | let dt = 100 * 1_000_000; | 27 | let dt = 100 * 1_000_000; |
| 28 | let k = 1.003; | 28 | let k = 1.003; |
| 29 | 29 | ||
| 30 | unwrap!(spawner.spawn(toggle_led(CHANNEL.sender(), Duration::from_nanos(dt)))); | 30 | spawner.spawn(unwrap!(toggle_led(CHANNEL.sender(), Duration::from_nanos(dt)))); |
| 31 | unwrap!(spawner.spawn(toggle_led( | 31 | spawner.spawn(unwrap!(toggle_led( |
| 32 | CHANNEL.sender(), | 32 | CHANNEL.sender(), |
| 33 | Duration::from_nanos((dt as f64 * k) as u64) | 33 | Duration::from_nanos((dt as f64 * k) as u64) |
| 34 | ))); | 34 | ))); |
diff --git a/examples/rp235x/src/bin/blinky_two_tasks.rs b/examples/rp235x/src/bin/blinky_two_tasks.rs index 67a9108c0..aac7d928b 100644 --- a/examples/rp235x/src/bin/blinky_two_tasks.rs +++ b/examples/rp235x/src/bin/blinky_two_tasks.rs | |||
| @@ -30,8 +30,8 @@ async fn main(spawner: Spawner) { | |||
| 30 | let dt = 100 * 1_000_000; | 30 | let dt = 100 * 1_000_000; |
| 31 | let k = 1.003; | 31 | let k = 1.003; |
| 32 | 32 | ||
| 33 | unwrap!(spawner.spawn(toggle_led(&LED, Duration::from_nanos(dt)))); | 33 | spawner.spawn(unwrap!(toggle_led(&LED, Duration::from_nanos(dt)))); |
| 34 | unwrap!(spawner.spawn(toggle_led(&LED, Duration::from_nanos((dt as f64 * k) as u64)))); | 34 | spawner.spawn(unwrap!(toggle_led(&LED, Duration::from_nanos((dt as f64 * k) as u64)))); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | #[embassy_executor::task(pool_size = 2)] | 37 | #[embassy_executor::task(pool_size = 2)] |
diff --git a/examples/rp235x/src/bin/blinky_wifi.rs b/examples/rp235x/src/bin/blinky_wifi.rs index ef6057a1c..b2201f0ae 100644 --- a/examples/rp235x/src/bin/blinky_wifi.rs +++ b/examples/rp235x/src/bin/blinky_wifi.rs | |||
| @@ -71,7 +71,7 @@ async fn main(spawner: Spawner) { | |||
| 71 | static STATE: StaticCell<cyw43::State> = StaticCell::new(); | 71 | static STATE: StaticCell<cyw43::State> = StaticCell::new(); |
| 72 | let state = STATE.init(cyw43::State::new()); | 72 | let state = STATE.init(cyw43::State::new()); |
| 73 | let (_net_device, mut control, runner) = cyw43::new(state, pwr, spi, fw).await; | 73 | let (_net_device, mut control, runner) = cyw43::new(state, pwr, spi, fw).await; |
| 74 | unwrap!(spawner.spawn(cyw43_task(runner))); | 74 | spawner.spawn(unwrap!(cyw43_task(runner))); |
| 75 | 75 | ||
| 76 | control.init(clm).await; | 76 | control.init(clm).await; |
| 77 | control | 77 | control |
diff --git a/examples/rp235x/src/bin/blinky_wifi_pico_plus_2.rs b/examples/rp235x/src/bin/blinky_wifi_pico_plus_2.rs index 0a5bccfb3..e6d6f687b 100644 --- a/examples/rp235x/src/bin/blinky_wifi_pico_plus_2.rs +++ b/examples/rp235x/src/bin/blinky_wifi_pico_plus_2.rs | |||
| @@ -68,7 +68,7 @@ async fn main(spawner: Spawner) { | |||
| 68 | static STATE: StaticCell<cyw43::State> = StaticCell::new(); | 68 | static STATE: StaticCell<cyw43::State> = StaticCell::new(); |
| 69 | let state = STATE.init(cyw43::State::new()); | 69 | let state = STATE.init(cyw43::State::new()); |
| 70 | let (_net_device, mut control, runner) = cyw43::new(state, pwr, spi, fw).await; | 70 | let (_net_device, mut control, runner) = cyw43::new(state, pwr, spi, fw).await; |
| 71 | unwrap!(spawner.spawn(cyw43_task(runner))); | 71 | spawner.spawn(unwrap!(cyw43_task(runner))); |
| 72 | 72 | ||
| 73 | control.init(clm).await; | 73 | control.init(clm).await; |
| 74 | control | 74 | control |
diff --git a/examples/rp235x/src/bin/ethernet_w5500_icmp.rs b/examples/rp235x/src/bin/ethernet_w5500_icmp.rs index f1abd311c..f012c9589 100644 --- a/examples/rp235x/src/bin/ethernet_w5500_icmp.rs +++ b/examples/rp235x/src/bin/ethernet_w5500_icmp.rs | |||
| @@ -61,7 +61,7 @@ async fn main(spawner: Spawner) { | |||
| 61 | ) | 61 | ) |
| 62 | .await | 62 | .await |
| 63 | .unwrap(); | 63 | .unwrap(); |
| 64 | unwrap!(spawner.spawn(ethernet_task(runner))); | 64 | spawner.spawn(unwrap!(ethernet_task(runner))); |
| 65 | 65 | ||
| 66 | // Generate random seed | 66 | // Generate random seed |
| 67 | let seed = rng.next_u64(); | 67 | let seed = rng.next_u64(); |
| @@ -76,7 +76,7 @@ async fn main(spawner: Spawner) { | |||
| 76 | ); | 76 | ); |
| 77 | 77 | ||
| 78 | // Launch network task | 78 | // Launch network task |
| 79 | unwrap!(spawner.spawn(net_task(runner))); | 79 | spawner.spawn(unwrap!(net_task(runner))); |
| 80 | 80 | ||
| 81 | info!("Waiting for DHCP..."); | 81 | info!("Waiting for DHCP..."); |
| 82 | let cfg = wait_for_config(stack).await; | 82 | let cfg = wait_for_config(stack).await; |
diff --git a/examples/rp235x/src/bin/ethernet_w5500_icmp_ping.rs b/examples/rp235x/src/bin/ethernet_w5500_icmp_ping.rs index 1f799a6b0..309d3e4f7 100644 --- a/examples/rp235x/src/bin/ethernet_w5500_icmp_ping.rs +++ b/examples/rp235x/src/bin/ethernet_w5500_icmp_ping.rs | |||
| @@ -63,7 +63,7 @@ async fn main(spawner: Spawner) { | |||
| 63 | ) | 63 | ) |
| 64 | .await | 64 | .await |
| 65 | .unwrap(); | 65 | .unwrap(); |
| 66 | unwrap!(spawner.spawn(ethernet_task(runner))); | 66 | spawner.spawn(unwrap!(ethernet_task(runner))); |
| 67 | 67 | ||
| 68 | // Generate random seed | 68 | // Generate random seed |
| 69 | let seed = rng.next_u64(); | 69 | let seed = rng.next_u64(); |
| @@ -78,7 +78,7 @@ async fn main(spawner: Spawner) { | |||
| 78 | ); | 78 | ); |
| 79 | 79 | ||
| 80 | // Launch network task | 80 | // Launch network task |
| 81 | unwrap!(spawner.spawn(net_task(runner))); | 81 | spawner.spawn(unwrap!(net_task(runner))); |
| 82 | 82 | ||
| 83 | info!("Waiting for DHCP..."); | 83 | info!("Waiting for DHCP..."); |
| 84 | let cfg = wait_for_config(stack).await; | 84 | let cfg = wait_for_config(stack).await; |
diff --git a/examples/rp235x/src/bin/ethernet_w5500_multisocket.rs b/examples/rp235x/src/bin/ethernet_w5500_multisocket.rs index fd8bc5c7a..7cfc00776 100644 --- a/examples/rp235x/src/bin/ethernet_w5500_multisocket.rs +++ b/examples/rp235x/src/bin/ethernet_w5500_multisocket.rs | |||
| @@ -64,7 +64,7 @@ async fn main(spawner: Spawner) { | |||
| 64 | ) | 64 | ) |
| 65 | .await | 65 | .await |
| 66 | .unwrap(); | 66 | .unwrap(); |
| 67 | unwrap!(spawner.spawn(ethernet_task(runner))); | 67 | spawner.spawn(unwrap!(ethernet_task(runner))); |
| 68 | 68 | ||
| 69 | // Generate random seed | 69 | // Generate random seed |
| 70 | let seed = rng.next_u64(); | 70 | let seed = rng.next_u64(); |
| @@ -79,7 +79,7 @@ async fn main(spawner: Spawner) { | |||
| 79 | ); | 79 | ); |
| 80 | 80 | ||
| 81 | // Launch network task | 81 | // Launch network task |
| 82 | unwrap!(spawner.spawn(net_task(runner))); | 82 | spawner.spawn(unwrap!(net_task(runner))); |
| 83 | 83 | ||
| 84 | info!("Waiting for DHCP..."); | 84 | info!("Waiting for DHCP..."); |
| 85 | let cfg = wait_for_config(stack).await; | 85 | let cfg = wait_for_config(stack).await; |
| @@ -87,8 +87,8 @@ async fn main(spawner: Spawner) { | |||
| 87 | info!("IP address: {:?}", local_addr); | 87 | info!("IP address: {:?}", local_addr); |
| 88 | 88 | ||
| 89 | // Create two sockets listening to the same port, to handle simultaneous connections | 89 | // Create two sockets listening to the same port, to handle simultaneous connections |
| 90 | unwrap!(spawner.spawn(listen_task(stack, 0, 1234))); | 90 | spawner.spawn(unwrap!(listen_task(stack, 0, 1234))); |
| 91 | unwrap!(spawner.spawn(listen_task(stack, 1, 1234))); | 91 | spawner.spawn(unwrap!(listen_task(stack, 1, 1234))); |
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | #[embassy_executor::task(pool_size = 2)] | 94 | #[embassy_executor::task(pool_size = 2)] |
diff --git a/examples/rp235x/src/bin/ethernet_w5500_tcp_client.rs b/examples/rp235x/src/bin/ethernet_w5500_tcp_client.rs index b726b9cc6..254aada9a 100644 --- a/examples/rp235x/src/bin/ethernet_w5500_tcp_client.rs +++ b/examples/rp235x/src/bin/ethernet_w5500_tcp_client.rs | |||
| @@ -67,7 +67,7 @@ async fn main(spawner: Spawner) { | |||
| 67 | ) | 67 | ) |
| 68 | .await | 68 | .await |
| 69 | .unwrap(); | 69 | .unwrap(); |
| 70 | unwrap!(spawner.spawn(ethernet_task(runner))); | 70 | spawner.spawn(unwrap!(ethernet_task(runner))); |
| 71 | 71 | ||
| 72 | // Generate random seed | 72 | // Generate random seed |
| 73 | let seed = rng.next_u64(); | 73 | let seed = rng.next_u64(); |
| @@ -82,7 +82,7 @@ async fn main(spawner: Spawner) { | |||
| 82 | ); | 82 | ); |
| 83 | 83 | ||
| 84 | // Launch network task | 84 | // Launch network task |
| 85 | unwrap!(spawner.spawn(net_task(runner))); | 85 | spawner.spawn(unwrap!(net_task(runner))); |
| 86 | 86 | ||
| 87 | info!("Waiting for DHCP..."); | 87 | info!("Waiting for DHCP..."); |
| 88 | let cfg = wait_for_config(stack).await; | 88 | let cfg = wait_for_config(stack).await; |
diff --git a/examples/rp235x/src/bin/ethernet_w5500_tcp_server.rs b/examples/rp235x/src/bin/ethernet_w5500_tcp_server.rs index 32b3880f6..ba812f4fd 100644 --- a/examples/rp235x/src/bin/ethernet_w5500_tcp_server.rs +++ b/examples/rp235x/src/bin/ethernet_w5500_tcp_server.rs | |||
| @@ -66,7 +66,7 @@ async fn main(spawner: Spawner) { | |||
| 66 | ) | 66 | ) |
| 67 | .await | 67 | .await |
| 68 | .unwrap(); | 68 | .unwrap(); |
| 69 | unwrap!(spawner.spawn(ethernet_task(runner))); | 69 | spawner.spawn(unwrap!(ethernet_task(runner))); |
| 70 | 70 | ||
| 71 | // Generate random seed | 71 | // Generate random seed |
| 72 | let seed = rng.next_u64(); | 72 | let seed = rng.next_u64(); |
| @@ -81,7 +81,7 @@ async fn main(spawner: Spawner) { | |||
| 81 | ); | 81 | ); |
| 82 | 82 | ||
| 83 | // Launch network task | 83 | // Launch network task |
| 84 | unwrap!(spawner.spawn(net_task(runner))); | 84 | spawner.spawn(unwrap!(net_task(runner))); |
| 85 | 85 | ||
| 86 | info!("Waiting for DHCP..."); | 86 | info!("Waiting for DHCP..."); |
| 87 | let cfg = wait_for_config(stack).await; | 87 | let cfg = wait_for_config(stack).await; |
diff --git a/examples/rp235x/src/bin/ethernet_w5500_udp.rs b/examples/rp235x/src/bin/ethernet_w5500_udp.rs index cd0824df1..ae74ad518 100644 --- a/examples/rp235x/src/bin/ethernet_w5500_udp.rs +++ b/examples/rp235x/src/bin/ethernet_w5500_udp.rs | |||
| @@ -64,7 +64,7 @@ async fn main(spawner: Spawner) { | |||
| 64 | ) | 64 | ) |
| 65 | .await | 65 | .await |
| 66 | .unwrap(); | 66 | .unwrap(); |
| 67 | unwrap!(spawner.spawn(ethernet_task(runner))); | 67 | spawner.spawn(unwrap!(ethernet_task(runner))); |
| 68 | 68 | ||
| 69 | // Generate random seed | 69 | // Generate random seed |
| 70 | let seed = rng.next_u64(); | 70 | let seed = rng.next_u64(); |
| @@ -79,7 +79,7 @@ async fn main(spawner: Spawner) { | |||
| 79 | ); | 79 | ); |
| 80 | 80 | ||
| 81 | // Launch network task | 81 | // Launch network task |
| 82 | unwrap!(spawner.spawn(net_task(runner))); | 82 | spawner.spawn(unwrap!(net_task(runner))); |
| 83 | 83 | ||
| 84 | info!("Waiting for DHCP..."); | 84 | info!("Waiting for DHCP..."); |
| 85 | let cfg = wait_for_config(stack).await; | 85 | let cfg = wait_for_config(stack).await; |
diff --git a/examples/rp235x/src/bin/i2c_slave.rs b/examples/rp235x/src/bin/i2c_slave.rs index 9fffb4646..02ad9a003 100644 --- a/examples/rp235x/src/bin/i2c_slave.rs +++ b/examples/rp235x/src/bin/i2c_slave.rs | |||
| @@ -105,7 +105,7 @@ async fn main(spawner: Spawner) { | |||
| 105 | config.addr = DEV_ADDR as u16; | 105 | config.addr = DEV_ADDR as u16; |
| 106 | let device = i2c_slave::I2cSlave::new(p.I2C1, d_sda, d_scl, Irqs, config); | 106 | let device = i2c_slave::I2cSlave::new(p.I2C1, d_sda, d_scl, Irqs, config); |
| 107 | 107 | ||
| 108 | unwrap!(spawner.spawn(device_task(device))); | 108 | spawner.spawn(unwrap!(device_task(device))); |
| 109 | 109 | ||
| 110 | let c_sda = p.PIN_1; | 110 | let c_sda = p.PIN_1; |
| 111 | let c_scl = p.PIN_0; | 111 | let c_scl = p.PIN_0; |
| @@ -113,5 +113,5 @@ async fn main(spawner: Spawner) { | |||
| 113 | config.frequency = 1_000_000; | 113 | config.frequency = 1_000_000; |
| 114 | let controller = i2c::I2c::new_async(p.I2C0, c_sda, c_scl, Irqs, config); | 114 | let controller = i2c::I2c::new_async(p.I2C0, c_sda, c_scl, Irqs, config); |
| 115 | 115 | ||
| 116 | unwrap!(spawner.spawn(controller_task(controller))); | 116 | spawner.spawn(unwrap!(controller_task(controller))); |
| 117 | } | 117 | } |
diff --git a/examples/rp235x/src/bin/interrupt.rs b/examples/rp235x/src/bin/interrupt.rs index e9ac76486..88513180c 100644 --- a/examples/rp235x/src/bin/interrupt.rs +++ b/examples/rp235x/src/bin/interrupt.rs | |||
| @@ -51,7 +51,7 @@ async fn main(spawner: Spawner) { | |||
| 51 | // No Mutex needed when sharing within the same executor/prio level | 51 | // No Mutex needed when sharing within the same executor/prio level |
| 52 | static AVG: StaticCell<Cell<u32>> = StaticCell::new(); | 52 | static AVG: StaticCell<Cell<u32>> = StaticCell::new(); |
| 53 | let avg = AVG.init(Default::default()); | 53 | let avg = AVG.init(Default::default()); |
| 54 | spawner.must_spawn(processing(avg)); | 54 | spawner.spawn(processing(avg).unwrap()); |
| 55 | 55 | ||
| 56 | let mut ticker = Ticker::every(Duration::from_secs(1)); | 56 | let mut ticker = Ticker::every(Duration::from_secs(1)); |
| 57 | loop { | 57 | loop { |
diff --git a/examples/rp235x/src/bin/multicore.rs b/examples/rp235x/src/bin/multicore.rs index f02dc3876..4f82801d6 100644 --- a/examples/rp235x/src/bin/multicore.rs +++ b/examples/rp235x/src/bin/multicore.rs | |||
| @@ -35,12 +35,12 @@ fn main() -> ! { | |||
| 35 | unsafe { &mut *core::ptr::addr_of_mut!(CORE1_STACK) }, | 35 | unsafe { &mut *core::ptr::addr_of_mut!(CORE1_STACK) }, |
| 36 | move || { | 36 | move || { |
| 37 | let executor1 = EXECUTOR1.init(Executor::new()); | 37 | let executor1 = EXECUTOR1.init(Executor::new()); |
| 38 | executor1.run(|spawner| unwrap!(spawner.spawn(core1_task(led)))); | 38 | executor1.run(|spawner| spawner.spawn(unwrap!(core1_task(led)))); |
| 39 | }, | 39 | }, |
| 40 | ); | 40 | ); |
| 41 | 41 | ||
| 42 | let executor0 = EXECUTOR0.init(Executor::new()); | 42 | let executor0 = EXECUTOR0.init(Executor::new()); |
| 43 | executor0.run(|spawner| unwrap!(spawner.spawn(core0_task()))); | 43 | executor0.run(|spawner| spawner.spawn(unwrap!(core0_task()))); |
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | #[embassy_executor::task] | 46 | #[embassy_executor::task] |
diff --git a/examples/rp235x/src/bin/multiprio.rs b/examples/rp235x/src/bin/multiprio.rs index 2b397f97d..96cdf8fb1 100644 --- a/examples/rp235x/src/bin/multiprio.rs +++ b/examples/rp235x/src/bin/multiprio.rs | |||
| @@ -130,16 +130,16 @@ fn main() -> ! { | |||
| 130 | // High-priority executor: SWI_IRQ_1, priority level 2 | 130 | // High-priority executor: SWI_IRQ_1, priority level 2 |
| 131 | interrupt::SWI_IRQ_1.set_priority(Priority::P2); | 131 | interrupt::SWI_IRQ_1.set_priority(Priority::P2); |
| 132 | let spawner = EXECUTOR_HIGH.start(interrupt::SWI_IRQ_1); | 132 | let spawner = EXECUTOR_HIGH.start(interrupt::SWI_IRQ_1); |
| 133 | unwrap!(spawner.spawn(run_high())); | 133 | spawner.spawn(unwrap!(run_high())); |
| 134 | 134 | ||
| 135 | // Medium-priority executor: SWI_IRQ_0, priority level 3 | 135 | // Medium-priority executor: SWI_IRQ_0, priority level 3 |
| 136 | interrupt::SWI_IRQ_0.set_priority(Priority::P3); | 136 | interrupt::SWI_IRQ_0.set_priority(Priority::P3); |
| 137 | let spawner = EXECUTOR_MED.start(interrupt::SWI_IRQ_0); | 137 | let spawner = EXECUTOR_MED.start(interrupt::SWI_IRQ_0); |
| 138 | unwrap!(spawner.spawn(run_med())); | 138 | spawner.spawn(unwrap!(run_med())); |
| 139 | 139 | ||
| 140 | // Low priority executor: runs in thread mode, using WFE/SEV | 140 | // Low priority executor: runs in thread mode, using WFE/SEV |
| 141 | let executor = EXECUTOR_LOW.init(Executor::new()); | 141 | let executor = EXECUTOR_LOW.init(Executor::new()); |
| 142 | executor.run(|spawner| { | 142 | executor.run(|spawner| { |
| 143 | unwrap!(spawner.spawn(run_low())); | 143 | spawner.spawn(unwrap!(run_low())); |
| 144 | }); | 144 | }); |
| 145 | } | 145 | } |
diff --git a/examples/rp235x/src/bin/pio_async.rs b/examples/rp235x/src/bin/pio_async.rs index a519b8a50..d76930f5c 100644 --- a/examples/rp235x/src/bin/pio_async.rs +++ b/examples/rp235x/src/bin/pio_async.rs | |||
| @@ -125,7 +125,7 @@ async fn main(spawner: Spawner) { | |||
| 125 | setup_pio_task_sm0(&mut common, &mut sm0, p.PIN_0); | 125 | setup_pio_task_sm0(&mut common, &mut sm0, p.PIN_0); |
| 126 | setup_pio_task_sm1(&mut common, &mut sm1); | 126 | setup_pio_task_sm1(&mut common, &mut sm1); |
| 127 | setup_pio_task_sm2(&mut common, &mut sm2); | 127 | setup_pio_task_sm2(&mut common, &mut sm2); |
| 128 | spawner.spawn(pio_task_sm0(sm0)).unwrap(); | 128 | spawner.spawn(pio_task_sm0(sm0).unwrap()); |
| 129 | spawner.spawn(pio_task_sm1(sm1)).unwrap(); | 129 | spawner.spawn(pio_task_sm1(sm1).unwrap()); |
| 130 | spawner.spawn(pio_task_sm2(irq3, sm2)).unwrap(); | 130 | spawner.spawn(pio_task_sm2(irq3, sm2).unwrap()); |
| 131 | } | 131 | } |
diff --git a/examples/rp235x/src/bin/pio_rotary_encoder.rs b/examples/rp235x/src/bin/pio_rotary_encoder.rs index e820d316d..610d1a40b 100644 --- a/examples/rp235x/src/bin/pio_rotary_encoder.rs +++ b/examples/rp235x/src/bin/pio_rotary_encoder.rs | |||
| @@ -50,6 +50,6 @@ async fn main(spawner: Spawner) { | |||
| 50 | let encoder0 = PioEncoder::new(&mut common, sm0, p.PIN_4, p.PIN_5, &prg); | 50 | let encoder0 = PioEncoder::new(&mut common, sm0, p.PIN_4, p.PIN_5, &prg); |
| 51 | let encoder1 = PioEncoder::new(&mut common, sm1, p.PIN_6, p.PIN_7, &prg); | 51 | let encoder1 = PioEncoder::new(&mut common, sm1, p.PIN_6, p.PIN_7, &prg); |
| 52 | 52 | ||
| 53 | spawner.must_spawn(encoder_0(encoder0)); | 53 | spawner.spawn(encoder_0(encoder0).unwrap()); |
| 54 | spawner.must_spawn(encoder_1(encoder1)); | 54 | spawner.spawn(encoder_1(encoder1).unwrap()); |
| 55 | } | 55 | } |
diff --git a/examples/rp235x/src/bin/pwm.rs b/examples/rp235x/src/bin/pwm.rs index da1acc18a..289480c85 100644 --- a/examples/rp235x/src/bin/pwm.rs +++ b/examples/rp235x/src/bin/pwm.rs | |||
| @@ -18,8 +18,8 @@ use {defmt_rtt as _, panic_probe as _}; | |||
| 18 | #[embassy_executor::main] | 18 | #[embassy_executor::main] |
| 19 | async fn main(spawner: Spawner) { | 19 | async fn main(spawner: Spawner) { |
| 20 | let p = embassy_rp::init(Default::default()); | 20 | let p = embassy_rp::init(Default::default()); |
| 21 | spawner.spawn(pwm_set_config(p.PWM_SLICE4, p.PIN_25)).unwrap(); | 21 | spawner.spawn(pwm_set_config(p.PWM_SLICE4, p.PIN_25).unwrap()); |
| 22 | spawner.spawn(pwm_set_dutycycle(p.PWM_SLICE2, p.PIN_4)).unwrap(); | 22 | spawner.spawn(pwm_set_dutycycle(p.PWM_SLICE2, p.PIN_4).unwrap()); |
| 23 | } | 23 | } |
| 24 | 24 | ||
| 25 | /// Demonstrate PWM by modifying & applying the config | 25 | /// Demonstrate PWM by modifying & applying the config |
diff --git a/examples/rp235x/src/bin/shared_bus.rs b/examples/rp235x/src/bin/shared_bus.rs index 9267dfccb..db7566b1a 100644 --- a/examples/rp235x/src/bin/shared_bus.rs +++ b/examples/rp235x/src/bin/shared_bus.rs | |||
| @@ -35,8 +35,8 @@ async fn main(spawner: Spawner) { | |||
| 35 | static I2C_BUS: StaticCell<I2c1Bus> = StaticCell::new(); | 35 | static I2C_BUS: StaticCell<I2c1Bus> = StaticCell::new(); |
| 36 | let i2c_bus = I2C_BUS.init(Mutex::new(i2c)); | 36 | let i2c_bus = I2C_BUS.init(Mutex::new(i2c)); |
| 37 | 37 | ||
| 38 | spawner.must_spawn(i2c_task_a(i2c_bus)); | 38 | spawner.spawn(i2c_task_a(i2c_bus).unwrap()); |
| 39 | spawner.must_spawn(i2c_task_b(i2c_bus)); | 39 | spawner.spawn(i2c_task_b(i2c_bus).unwrap()); |
| 40 | 40 | ||
| 41 | // Shared SPI bus | 41 | // Shared SPI bus |
| 42 | let spi_cfg = spi::Config::default(); | 42 | let spi_cfg = spi::Config::default(); |
| @@ -48,8 +48,8 @@ async fn main(spawner: Spawner) { | |||
| 48 | let cs_a = Output::new(p.PIN_0, Level::High); | 48 | let cs_a = Output::new(p.PIN_0, Level::High); |
| 49 | let cs_b = Output::new(p.PIN_1, Level::High); | 49 | let cs_b = Output::new(p.PIN_1, Level::High); |
| 50 | 50 | ||
| 51 | spawner.must_spawn(spi_task_a(spi_bus, cs_a)); | 51 | spawner.spawn(spi_task_a(spi_bus, cs_a).unwrap()); |
| 52 | spawner.must_spawn(spi_task_b(spi_bus, cs_b)); | 52 | spawner.spawn(spi_task_b(spi_bus, cs_b).unwrap()); |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | #[embassy_executor::task] | 55 | #[embassy_executor::task] |
diff --git a/examples/rp235x/src/bin/sharing.rs b/examples/rp235x/src/bin/sharing.rs index 856be6ace..d4c89946b 100644 --- a/examples/rp235x/src/bin/sharing.rs +++ b/examples/rp235x/src/bin/sharing.rs | |||
| @@ -68,7 +68,7 @@ fn main() -> ! { | |||
| 68 | // High-priority executor: runs in interrupt mode | 68 | // High-priority executor: runs in interrupt mode |
| 69 | interrupt::SWI_IRQ_0.set_priority(Priority::P3); | 69 | interrupt::SWI_IRQ_0.set_priority(Priority::P3); |
| 70 | let spawner = EXECUTOR_HI.start(interrupt::SWI_IRQ_0); | 70 | let spawner = EXECUTOR_HI.start(interrupt::SWI_IRQ_0); |
| 71 | spawner.must_spawn(task_a(uart)); | 71 | spawner.spawn(task_a(uart).unwrap()); |
| 72 | 72 | ||
| 73 | // Low priority executor: runs in thread mode | 73 | // Low priority executor: runs in thread mode |
| 74 | let executor = EXECUTOR_LOW.init(Executor::new()); | 74 | let executor = EXECUTOR_LOW.init(Executor::new()); |
| @@ -83,8 +83,8 @@ fn main() -> ! { | |||
| 83 | static REF_CELL: ConstStaticCell<RefCell<MyType>> = ConstStaticCell::new(RefCell::new(MyType { inner: 0 })); | 83 | static REF_CELL: ConstStaticCell<RefCell<MyType>> = ConstStaticCell::new(RefCell::new(MyType { inner: 0 })); |
| 84 | let ref_cell = REF_CELL.take(); | 84 | let ref_cell = REF_CELL.take(); |
| 85 | 85 | ||
| 86 | spawner.must_spawn(task_b(uart, cell, ref_cell)); | 86 | spawner.spawn(task_b(uart, cell, ref_cell).unwrap()); |
| 87 | spawner.must_spawn(task_c(cell, ref_cell)); | 87 | spawner.spawn(task_c(cell, ref_cell).unwrap()); |
| 88 | }); | 88 | }); |
| 89 | } | 89 | } |
| 90 | 90 | ||
diff --git a/examples/rp235x/src/bin/uart_buffered_split.rs b/examples/rp235x/src/bin/uart_buffered_split.rs index 7cad09f9b..061be873d 100644 --- a/examples/rp235x/src/bin/uart_buffered_split.rs +++ b/examples/rp235x/src/bin/uart_buffered_split.rs | |||
| @@ -33,7 +33,7 @@ async fn main(spawner: Spawner) { | |||
| 33 | let uart = BufferedUart::new(uart, tx_pin, rx_pin, Irqs, tx_buf, rx_buf, Config::default()); | 33 | let uart = BufferedUart::new(uart, tx_pin, rx_pin, Irqs, tx_buf, rx_buf, Config::default()); |
| 34 | let (mut tx, rx) = uart.split(); | 34 | let (mut tx, rx) = uart.split(); |
| 35 | 35 | ||
| 36 | unwrap!(spawner.spawn(reader(rx))); | 36 | spawner.spawn(unwrap!(reader(rx))); |
| 37 | 37 | ||
| 38 | info!("Writing..."); | 38 | info!("Writing..."); |
| 39 | loop { | 39 | loop { |
diff --git a/examples/rp235x/src/bin/uart_unidir.rs b/examples/rp235x/src/bin/uart_unidir.rs index 45c9c8407..0c80d24c9 100644 --- a/examples/rp235x/src/bin/uart_unidir.rs +++ b/examples/rp235x/src/bin/uart_unidir.rs | |||
| @@ -27,7 +27,7 @@ async fn main(spawner: Spawner) { | |||
| 27 | let mut uart_tx = UartTx::new(p.UART0, p.PIN_0, p.DMA_CH0, Config::default()); | 27 | let mut uart_tx = UartTx::new(p.UART0, p.PIN_0, p.DMA_CH0, Config::default()); |
| 28 | let uart_rx = UartRx::new(p.UART1, p.PIN_5, Irqs, p.DMA_CH1, Config::default()); | 28 | let uart_rx = UartRx::new(p.UART1, p.PIN_5, Irqs, p.DMA_CH1, Config::default()); |
| 29 | 29 | ||
| 30 | unwrap!(spawner.spawn(reader(uart_rx))); | 30 | spawner.spawn(unwrap!(reader(uart_rx))); |
| 31 | 31 | ||
| 32 | info!("Writing..."); | 32 | info!("Writing..."); |
| 33 | loop { | 33 | loop { |
diff --git a/examples/rp235x/src/bin/zerocopy.rs b/examples/rp235x/src/bin/zerocopy.rs index 086c86cac..62ba4cfb8 100644 --- a/examples/rp235x/src/bin/zerocopy.rs +++ b/examples/rp235x/src/bin/zerocopy.rs | |||
| @@ -52,8 +52,8 @@ async fn main(spawner: Spawner) { | |||
| 52 | let channel = CHANNEL.init(Channel::new(buf)); | 52 | let channel = CHANNEL.init(Channel::new(buf)); |
| 53 | let (sender, receiver) = channel.split(); | 53 | let (sender, receiver) = channel.split(); |
| 54 | 54 | ||
| 55 | spawner.must_spawn(consumer(receiver)); | 55 | spawner.spawn(consumer(receiver).unwrap()); |
| 56 | spawner.must_spawn(producer(sender, adc_parts)); | 56 | spawner.spawn(producer(sender, adc_parts).unwrap()); |
| 57 | 57 | ||
| 58 | let mut ticker = Ticker::every(Duration::from_secs(1)); | 58 | let mut ticker = Ticker::every(Duration::from_secs(1)); |
| 59 | loop { | 59 | loop { |
diff --git a/examples/std/src/bin/net.rs b/examples/std/src/bin/net.rs index 232cf494b..fd7b6c930 100644 --- a/examples/std/src/bin/net.rs +++ b/examples/std/src/bin/net.rs | |||
| @@ -56,7 +56,7 @@ async fn main_task(spawner: Spawner) { | |||
| 56 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 56 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 57 | 57 | ||
| 58 | // Launch network task | 58 | // Launch network task |
| 59 | spawner.spawn(net_task(runner)).unwrap(); | 59 | spawner.spawn(net_task(runner).unwrap()); |
| 60 | 60 | ||
| 61 | // Then we can use it! | 61 | // Then we can use it! |
| 62 | let mut rx_buffer = [0; 4096]; | 62 | let mut rx_buffer = [0; 4096]; |
| @@ -95,6 +95,6 @@ fn main() { | |||
| 95 | 95 | ||
| 96 | let executor = EXECUTOR.init(Executor::new()); | 96 | let executor = EXECUTOR.init(Executor::new()); |
| 97 | executor.run(|spawner| { | 97 | executor.run(|spawner| { |
| 98 | spawner.spawn(main_task(spawner)).unwrap(); | 98 | spawner.spawn(main_task(spawner).unwrap()); |
| 99 | }); | 99 | }); |
| 100 | } | 100 | } |
diff --git a/examples/std/src/bin/net_dns.rs b/examples/std/src/bin/net_dns.rs index cf90731dd..dff704b86 100644 --- a/examples/std/src/bin/net_dns.rs +++ b/examples/std/src/bin/net_dns.rs | |||
| @@ -53,7 +53,7 @@ async fn main_task(spawner: Spawner) { | |||
| 53 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 53 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 54 | 54 | ||
| 55 | // Launch network task | 55 | // Launch network task |
| 56 | spawner.spawn(net_task(runner)).unwrap(); | 56 | spawner.spawn(net_task(runner).unwrap()); |
| 57 | 57 | ||
| 58 | let host = "example.com"; | 58 | let host = "example.com"; |
| 59 | info!("querying host {:?}...", host); | 59 | info!("querying host {:?}...", host); |
| @@ -78,6 +78,6 @@ fn main() { | |||
| 78 | 78 | ||
| 79 | let executor = EXECUTOR.init(Executor::new()); | 79 | let executor = EXECUTOR.init(Executor::new()); |
| 80 | executor.run(|spawner| { | 80 | executor.run(|spawner| { |
| 81 | spawner.spawn(main_task(spawner)).unwrap(); | 81 | spawner.spawn(main_task(spawner).unwrap()); |
| 82 | }); | 82 | }); |
| 83 | } | 83 | } |
diff --git a/examples/std/src/bin/net_ppp.rs b/examples/std/src/bin/net_ppp.rs index ac3aea6ff..82272c798 100644 --- a/examples/std/src/bin/net_ppp.rs +++ b/examples/std/src/bin/net_ppp.rs | |||
| @@ -102,8 +102,8 @@ async fn main_task(spawner: Spawner) { | |||
| 102 | ); | 102 | ); |
| 103 | 103 | ||
| 104 | // Launch network task | 104 | // Launch network task |
| 105 | spawner.spawn(net_task(net_runner)).unwrap(); | 105 | spawner.spawn(net_task(net_runner).unwrap()); |
| 106 | spawner.spawn(ppp_task(stack, runner, port)).unwrap(); | 106 | spawner.spawn(ppp_task(stack, runner, port).unwrap()); |
| 107 | 107 | ||
| 108 | // Then we can use it! | 108 | // Then we can use it! |
| 109 | let mut rx_buffer = [0; 4096]; | 109 | let mut rx_buffer = [0; 4096]; |
| @@ -160,6 +160,6 @@ fn main() { | |||
| 160 | 160 | ||
| 161 | let executor = EXECUTOR.init(Executor::new()); | 161 | let executor = EXECUTOR.init(Executor::new()); |
| 162 | executor.run(|spawner| { | 162 | executor.run(|spawner| { |
| 163 | spawner.spawn(main_task(spawner)).unwrap(); | 163 | spawner.spawn(main_task(spawner).unwrap()); |
| 164 | }); | 164 | }); |
| 165 | } | 165 | } |
diff --git a/examples/std/src/bin/net_udp.rs b/examples/std/src/bin/net_udp.rs index 53632a5b4..c5c4da65f 100644 --- a/examples/std/src/bin/net_udp.rs +++ b/examples/std/src/bin/net_udp.rs | |||
| @@ -52,7 +52,7 @@ async fn main_task(spawner: Spawner) { | |||
| 52 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 52 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 53 | 53 | ||
| 54 | // Launch network task | 54 | // Launch network task |
| 55 | spawner.spawn(net_task(runner)).unwrap(); | 55 | spawner.spawn(net_task(runner).unwrap()); |
| 56 | 56 | ||
| 57 | // Then we can use it! | 57 | // Then we can use it! |
| 58 | let mut rx_meta = [PacketMetadata::EMPTY; 16]; | 58 | let mut rx_meta = [PacketMetadata::EMPTY; 16]; |
| @@ -86,6 +86,6 @@ fn main() { | |||
| 86 | 86 | ||
| 87 | let executor = EXECUTOR.init(Executor::new()); | 87 | let executor = EXECUTOR.init(Executor::new()); |
| 88 | executor.run(|spawner| { | 88 | executor.run(|spawner| { |
| 89 | spawner.spawn(main_task(spawner)).unwrap(); | 89 | spawner.spawn(main_task(spawner).unwrap()); |
| 90 | }); | 90 | }); |
| 91 | } | 91 | } |
diff --git a/examples/std/src/bin/serial.rs b/examples/std/src/bin/serial.rs index 10c85511d..1ed9997c4 100644 --- a/examples/std/src/bin/serial.rs +++ b/examples/std/src/bin/serial.rs | |||
| @@ -50,6 +50,6 @@ fn main() { | |||
| 50 | 50 | ||
| 51 | let executor = EXECUTOR.init(Executor::new()); | 51 | let executor = EXECUTOR.init(Executor::new()); |
| 52 | executor.run(|spawner| { | 52 | executor.run(|spawner| { |
| 53 | spawner.spawn(run()).unwrap(); | 53 | spawner.spawn(run().unwrap()); |
| 54 | }); | 54 | }); |
| 55 | } | 55 | } |
diff --git a/examples/std/src/bin/tcp_accept.rs b/examples/std/src/bin/tcp_accept.rs index 961c20e2d..77886f471 100644 --- a/examples/std/src/bin/tcp_accept.rs +++ b/examples/std/src/bin/tcp_accept.rs | |||
| @@ -54,7 +54,7 @@ async fn main_task(spawner: Spawner) { | |||
| 54 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 54 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 55 | 55 | ||
| 56 | // Launch network task | 56 | // Launch network task |
| 57 | spawner.spawn(net_task(runner)).unwrap(); | 57 | spawner.spawn(net_task(runner).unwrap()); |
| 58 | 58 | ||
| 59 | // Then we can use it! | 59 | // Then we can use it! |
| 60 | let mut rx_buffer = [0; 4096]; | 60 | let mut rx_buffer = [0; 4096]; |
| @@ -101,6 +101,6 @@ fn main() { | |||
| 101 | 101 | ||
| 102 | let executor = EXECUTOR.init(Executor::new()); | 102 | let executor = EXECUTOR.init(Executor::new()); |
| 103 | executor.run(|spawner| { | 103 | executor.run(|spawner| { |
| 104 | spawner.spawn(main_task(spawner)).unwrap(); | 104 | spawner.spawn(main_task(spawner).unwrap()); |
| 105 | }); | 105 | }); |
| 106 | } | 106 | } |
diff --git a/examples/std/src/bin/tick.rs b/examples/std/src/bin/tick.rs index f23cf3549..16b82c82b 100644 --- a/examples/std/src/bin/tick.rs +++ b/examples/std/src/bin/tick.rs | |||
| @@ -17,5 +17,5 @@ async fn main(spawner: Spawner) { | |||
| 17 | .format_timestamp_nanos() | 17 | .format_timestamp_nanos() |
| 18 | .init(); | 18 | .init(); |
| 19 | 19 | ||
| 20 | spawner.spawn(run()).unwrap(); | 20 | spawner.spawn(run().unwrap()); |
| 21 | } | 21 | } |
diff --git a/examples/stm32f0/src/bin/button_controlled_blink.rs b/examples/stm32f0/src/bin/button_controlled_blink.rs index 744df3e3b..f232e3290 100644 --- a/examples/stm32f0/src/bin/button_controlled_blink.rs +++ b/examples/stm32f0/src/bin/button_controlled_blink.rs | |||
| @@ -46,7 +46,7 @@ async fn main(spawner: Spawner) { | |||
| 46 | BLINK_MS.store(del_var, Ordering::Relaxed); | 46 | BLINK_MS.store(del_var, Ordering::Relaxed); |
| 47 | 47 | ||
| 48 | // Spawn LED blinking task | 48 | // Spawn LED blinking task |
| 49 | spawner.spawn(led_task(p.PA5.into())).unwrap(); | 49 | spawner.spawn(led_task(p.PA5.into()).unwrap()); |
| 50 | 50 | ||
| 51 | loop { | 51 | loop { |
| 52 | // Check if button got pressed | 52 | // Check if button got pressed |
diff --git a/examples/stm32f0/src/bin/multiprio.rs b/examples/stm32f0/src/bin/multiprio.rs index 84e4077ef..b5244afc8 100644 --- a/examples/stm32f0/src/bin/multiprio.rs +++ b/examples/stm32f0/src/bin/multiprio.rs | |||
| @@ -134,16 +134,16 @@ fn main() -> ! { | |||
| 134 | // High-priority executor: USART1, priority level 6 | 134 | // High-priority executor: USART1, priority level 6 |
| 135 | interrupt::USART1.set_priority(Priority::P6); | 135 | interrupt::USART1.set_priority(Priority::P6); |
| 136 | let spawner = EXECUTOR_HIGH.start(interrupt::USART1); | 136 | let spawner = EXECUTOR_HIGH.start(interrupt::USART1); |
| 137 | unwrap!(spawner.spawn(run_high())); | 137 | spawner.spawn(unwrap!(run_high())); |
| 138 | 138 | ||
| 139 | // Medium-priority executor: USART2, priority level 7 | 139 | // Medium-priority executor: USART2, priority level 7 |
| 140 | interrupt::USART2.set_priority(Priority::P7); | 140 | interrupt::USART2.set_priority(Priority::P7); |
| 141 | let spawner = EXECUTOR_MED.start(interrupt::USART2); | 141 | let spawner = EXECUTOR_MED.start(interrupt::USART2); |
| 142 | unwrap!(spawner.spawn(run_med())); | 142 | spawner.spawn(unwrap!(run_med())); |
| 143 | 143 | ||
| 144 | // Low priority executor: runs in thread mode, using WFE/SEV | 144 | // Low priority executor: runs in thread mode, using WFE/SEV |
| 145 | let executor = EXECUTOR_LOW.init(Executor::new()); | 145 | let executor = EXECUTOR_LOW.init(Executor::new()); |
| 146 | executor.run(|spawner| { | 146 | executor.run(|spawner| { |
| 147 | unwrap!(spawner.spawn(run_low())); | 147 | spawner.spawn(unwrap!(run_low())); |
| 148 | }); | 148 | }); |
| 149 | } | 149 | } |
diff --git a/examples/stm32f1/src/bin/input_capture.rs b/examples/stm32f1/src/bin/input_capture.rs index 84811fb95..d747a43c2 100644 --- a/examples/stm32f1/src/bin/input_capture.rs +++ b/examples/stm32f1/src/bin/input_capture.rs | |||
| @@ -37,7 +37,7 @@ async fn main(spawner: Spawner) { | |||
| 37 | let p = embassy_stm32::init(Default::default()); | 37 | let p = embassy_stm32::init(Default::default()); |
| 38 | info!("Hello World!"); | 38 | info!("Hello World!"); |
| 39 | 39 | ||
| 40 | unwrap!(spawner.spawn(blinky(p.PC13))); | 40 | spawner.spawn(unwrap!(blinky(p.PC13))); |
| 41 | 41 | ||
| 42 | let ch3 = CapturePin::new(p.PA2, Pull::None); | 42 | let ch3 = CapturePin::new(p.PA2, Pull::None); |
| 43 | let mut ic = InputCapture::new(p.TIM2, None, None, Some(ch3), None, Irqs, khz(1000), Default::default()); | 43 | let mut ic = InputCapture::new(p.TIM2, None, None, Some(ch3), None, Irqs, khz(1000), Default::default()); |
diff --git a/examples/stm32f1/src/bin/pwm_input.rs b/examples/stm32f1/src/bin/pwm_input.rs index aa6a11ff8..63b899767 100644 --- a/examples/stm32f1/src/bin/pwm_input.rs +++ b/examples/stm32f1/src/bin/pwm_input.rs | |||
| @@ -36,7 +36,7 @@ async fn main(spawner: Spawner) { | |||
| 36 | let p = embassy_stm32::init(Default::default()); | 36 | let p = embassy_stm32::init(Default::default()); |
| 37 | info!("Hello World!"); | 37 | info!("Hello World!"); |
| 38 | 38 | ||
| 39 | unwrap!(spawner.spawn(blinky(p.PC13))); | 39 | spawner.spawn(unwrap!(blinky(p.PC13))); |
| 40 | 40 | ||
| 41 | let mut pwm_input = PwmInput::new_ch1(p.TIM2, p.PA0, Pull::None, khz(10)); | 41 | let mut pwm_input = PwmInput::new_ch1(p.TIM2, p.PA0, Pull::None, khz(10)); |
| 42 | pwm_input.enable(); | 42 | pwm_input.enable(); |
diff --git a/examples/stm32f3/src/bin/button_events.rs b/examples/stm32f3/src/bin/button_events.rs index f5ed5d2c9..a54d03212 100644 --- a/examples/stm32f3/src/bin/button_events.rs +++ b/examples/stm32f3/src/bin/button_events.rs | |||
| @@ -113,8 +113,8 @@ async fn main(spawner: Spawner) { | |||
| 113 | ]; | 113 | ]; |
| 114 | let leds = Leds::new(leds); | 114 | let leds = Leds::new(leds); |
| 115 | 115 | ||
| 116 | spawner.spawn(button_waiter(button)).unwrap(); | 116 | spawner.spawn(button_waiter(button).unwrap()); |
| 117 | spawner.spawn(led_blinker(leds)).unwrap(); | 117 | spawner.spawn(led_blinker(leds).unwrap()); |
| 118 | } | 118 | } |
| 119 | 119 | ||
| 120 | #[embassy_executor::task] | 120 | #[embassy_executor::task] |
diff --git a/examples/stm32f3/src/bin/multiprio.rs b/examples/stm32f3/src/bin/multiprio.rs index b4620888f..2f2ffdea2 100644 --- a/examples/stm32f3/src/bin/multiprio.rs +++ b/examples/stm32f3/src/bin/multiprio.rs | |||
| @@ -135,16 +135,16 @@ fn main() -> ! { | |||
| 135 | // High-priority executor: UART4, priority level 6 | 135 | // High-priority executor: UART4, priority level 6 |
| 136 | interrupt::UART4.set_priority(Priority::P6); | 136 | interrupt::UART4.set_priority(Priority::P6); |
| 137 | let spawner = EXECUTOR_HIGH.start(interrupt::UART4); | 137 | let spawner = EXECUTOR_HIGH.start(interrupt::UART4); |
| 138 | unwrap!(spawner.spawn(run_high())); | 138 | spawner.spawn(unwrap!(run_high())); |
| 139 | 139 | ||
| 140 | // Medium-priority executor: UART5, priority level 7 | 140 | // Medium-priority executor: UART5, priority level 7 |
| 141 | interrupt::UART5.set_priority(Priority::P7); | 141 | interrupt::UART5.set_priority(Priority::P7); |
| 142 | let spawner = EXECUTOR_MED.start(interrupt::UART5); | 142 | let spawner = EXECUTOR_MED.start(interrupt::UART5); |
| 143 | unwrap!(spawner.spawn(run_med())); | 143 | spawner.spawn(unwrap!(run_med())); |
| 144 | 144 | ||
| 145 | // Low priority executor: runs in thread mode, using WFE/SEV | 145 | // Low priority executor: runs in thread mode, using WFE/SEV |
| 146 | let executor = EXECUTOR_LOW.init(Executor::new()); | 146 | let executor = EXECUTOR_LOW.init(Executor::new()); |
| 147 | executor.run(|spawner| { | 147 | executor.run(|spawner| { |
| 148 | unwrap!(spawner.spawn(run_low())); | 148 | spawner.spawn(unwrap!(run_low())); |
| 149 | }); | 149 | }); |
| 150 | } | 150 | } |
diff --git a/examples/stm32f4/src/bin/adc_dma.rs b/examples/stm32f4/src/bin/adc_dma.rs index 43a761e6d..2ec48640e 100644 --- a/examples/stm32f4/src/bin/adc_dma.rs +++ b/examples/stm32f4/src/bin/adc_dma.rs | |||
| @@ -11,7 +11,7 @@ use {defmt_rtt as _, panic_probe as _}; | |||
| 11 | #[embassy_executor::main] | 11 | #[embassy_executor::main] |
| 12 | async fn main(spawner: Spawner) { | 12 | async fn main(spawner: Spawner) { |
| 13 | let p = embassy_stm32::init(Default::default()); | 13 | let p = embassy_stm32::init(Default::default()); |
| 14 | spawner.must_spawn(adc_task(p)); | 14 | spawner.spawn(adc_task(p).unwrap()); |
| 15 | } | 15 | } |
| 16 | 16 | ||
| 17 | #[embassy_executor::task] | 17 | #[embassy_executor::task] |
diff --git a/examples/stm32f4/src/bin/eth.rs b/examples/stm32f4/src/bin/eth.rs index 634d8e2c6..f41a60529 100644 --- a/examples/stm32f4/src/bin/eth.rs +++ b/examples/stm32f4/src/bin/eth.rs | |||
| @@ -91,7 +91,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 91 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 91 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 92 | 92 | ||
| 93 | // Launch network task | 93 | // Launch network task |
| 94 | unwrap!(spawner.spawn(net_task(runner))); | 94 | spawner.spawn(unwrap!(net_task(runner))); |
| 95 | 95 | ||
| 96 | // Ensure DHCP configuration is up before trying connect | 96 | // Ensure DHCP configuration is up before trying connect |
| 97 | stack.wait_config_up().await; | 97 | stack.wait_config_up().await; |
diff --git a/examples/stm32f4/src/bin/eth_w5500.rs b/examples/stm32f4/src/bin/eth_w5500.rs index 6e6bef08c..7ce3bfe75 100644 --- a/examples/stm32f4/src/bin/eth_w5500.rs +++ b/examples/stm32f4/src/bin/eth_w5500.rs | |||
| @@ -83,7 +83,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 83 | let (device, runner) = embassy_net_wiznet::new(mac_addr, state, spi, w5500_int, w5500_reset) | 83 | let (device, runner) = embassy_net_wiznet::new(mac_addr, state, spi, w5500_int, w5500_reset) |
| 84 | .await | 84 | .await |
| 85 | .unwrap(); | 85 | .unwrap(); |
| 86 | unwrap!(spawner.spawn(ethernet_task(runner))); | 86 | spawner.spawn(unwrap!(ethernet_task(runner))); |
| 87 | 87 | ||
| 88 | let config = embassy_net::Config::dhcpv4(Default::default()); | 88 | let config = embassy_net::Config::dhcpv4(Default::default()); |
| 89 | //let config = embassy_net::Config::ipv4_static(embassy_net::StaticConfigV4 { | 89 | //let config = embassy_net::Config::ipv4_static(embassy_net::StaticConfigV4 { |
| @@ -96,7 +96,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 96 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 96 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 97 | 97 | ||
| 98 | // Launch network task | 98 | // Launch network task |
| 99 | unwrap!(spawner.spawn(net_task(runner))); | 99 | spawner.spawn(unwrap!(net_task(runner))); |
| 100 | 100 | ||
| 101 | // Ensure DHCP configuration is up before trying connect | 101 | // Ensure DHCP configuration is up before trying connect |
| 102 | stack.wait_config_up().await; | 102 | stack.wait_config_up().await; |
diff --git a/examples/stm32f4/src/bin/flash_async.rs b/examples/stm32f4/src/bin/flash_async.rs index 755713542..2feb9de09 100644 --- a/examples/stm32f4/src/bin/flash_async.rs +++ b/examples/stm32f4/src/bin/flash_async.rs | |||
| @@ -21,7 +21,7 @@ async fn main(spawner: Spawner) { | |||
| 21 | let mut f = Flash::new(p.FLASH, Irqs); | 21 | let mut f = Flash::new(p.FLASH, Irqs); |
| 22 | 22 | ||
| 23 | // Led should blink uninterrupted during ~2sec erase operation | 23 | // Led should blink uninterrupted during ~2sec erase operation |
| 24 | spawner.spawn(blinky(p.PB7.into())).unwrap(); | 24 | spawner.spawn(blinky(p.PB7.into()).unwrap()); |
| 25 | 25 | ||
| 26 | // Test on bank 2 in order not to stall CPU. | 26 | // Test on bank 2 in order not to stall CPU. |
| 27 | test_flash(&mut f, 1024 * 1024, 128 * 1024).await; | 27 | test_flash(&mut f, 1024 * 1024, 128 * 1024).await; |
diff --git a/examples/stm32f4/src/bin/input_capture.rs b/examples/stm32f4/src/bin/input_capture.rs index e15b4d26e..9998c4733 100644 --- a/examples/stm32f4/src/bin/input_capture.rs +++ b/examples/stm32f4/src/bin/input_capture.rs | |||
| @@ -37,7 +37,7 @@ async fn main(spawner: Spawner) { | |||
| 37 | let p = embassy_stm32::init(Default::default()); | 37 | let p = embassy_stm32::init(Default::default()); |
| 38 | info!("Hello World!"); | 38 | info!("Hello World!"); |
| 39 | 39 | ||
| 40 | unwrap!(spawner.spawn(blinky(p.PB2))); | 40 | spawner.spawn(unwrap!(blinky(p.PB2))); |
| 41 | 41 | ||
| 42 | let ch3 = CapturePin::new(p.PB10, Pull::None); | 42 | let ch3 = CapturePin::new(p.PB10, Pull::None); |
| 43 | let mut ic = InputCapture::new(p.TIM2, None, None, Some(ch3), None, Irqs, khz(1000), Default::default()); | 43 | let mut ic = InputCapture::new(p.TIM2, None, None, Some(ch3), None, Irqs, khz(1000), Default::default()); |
diff --git a/examples/stm32f4/src/bin/multiprio.rs b/examples/stm32f4/src/bin/multiprio.rs index b4620888f..2f2ffdea2 100644 --- a/examples/stm32f4/src/bin/multiprio.rs +++ b/examples/stm32f4/src/bin/multiprio.rs | |||
| @@ -135,16 +135,16 @@ fn main() -> ! { | |||
| 135 | // High-priority executor: UART4, priority level 6 | 135 | // High-priority executor: UART4, priority level 6 |
| 136 | interrupt::UART4.set_priority(Priority::P6); | 136 | interrupt::UART4.set_priority(Priority::P6); |
| 137 | let spawner = EXECUTOR_HIGH.start(interrupt::UART4); | 137 | let spawner = EXECUTOR_HIGH.start(interrupt::UART4); |
| 138 | unwrap!(spawner.spawn(run_high())); | 138 | spawner.spawn(unwrap!(run_high())); |
| 139 | 139 | ||
| 140 | // Medium-priority executor: UART5, priority level 7 | 140 | // Medium-priority executor: UART5, priority level 7 |
| 141 | interrupt::UART5.set_priority(Priority::P7); | 141 | interrupt::UART5.set_priority(Priority::P7); |
| 142 | let spawner = EXECUTOR_MED.start(interrupt::UART5); | 142 | let spawner = EXECUTOR_MED.start(interrupt::UART5); |
| 143 | unwrap!(spawner.spawn(run_med())); | 143 | spawner.spawn(unwrap!(run_med())); |
| 144 | 144 | ||
| 145 | // Low priority executor: runs in thread mode, using WFE/SEV | 145 | // Low priority executor: runs in thread mode, using WFE/SEV |
| 146 | let executor = EXECUTOR_LOW.init(Executor::new()); | 146 | let executor = EXECUTOR_LOW.init(Executor::new()); |
| 147 | executor.run(|spawner| { | 147 | executor.run(|spawner| { |
| 148 | unwrap!(spawner.spawn(run_low())); | 148 | spawner.spawn(unwrap!(run_low())); |
| 149 | }); | 149 | }); |
| 150 | } | 150 | } |
diff --git a/examples/stm32f4/src/bin/pwm_input.rs b/examples/stm32f4/src/bin/pwm_input.rs index 74167cbf2..e8bfa524f 100644 --- a/examples/stm32f4/src/bin/pwm_input.rs +++ b/examples/stm32f4/src/bin/pwm_input.rs | |||
| @@ -36,7 +36,7 @@ async fn main(spawner: Spawner) { | |||
| 36 | let p = embassy_stm32::init(Default::default()); | 36 | let p = embassy_stm32::init(Default::default()); |
| 37 | info!("Hello World!"); | 37 | info!("Hello World!"); |
| 38 | 38 | ||
| 39 | unwrap!(spawner.spawn(blinky(p.PB2))); | 39 | spawner.spawn(unwrap!(blinky(p.PB2))); |
| 40 | 40 | ||
| 41 | let mut pwm_input = PwmInput::new_ch1(p.TIM3, p.PA6, Pull::None, khz(10)); | 41 | let mut pwm_input = PwmInput::new_ch1(p.TIM3, p.PA6, Pull::None, khz(10)); |
| 42 | pwm_input.enable(); | 42 | pwm_input.enable(); |
diff --git a/examples/stm32f4/src/bin/usb_ethernet.rs b/examples/stm32f4/src/bin/usb_ethernet.rs index 322cb90c7..7abbe8719 100644 --- a/examples/stm32f4/src/bin/usb_ethernet.rs +++ b/examples/stm32f4/src/bin/usb_ethernet.rs | |||
| @@ -118,11 +118,11 @@ async fn main(spawner: Spawner) { | |||
| 118 | // Build the builder. | 118 | // Build the builder. |
| 119 | let usb = builder.build(); | 119 | let usb = builder.build(); |
| 120 | 120 | ||
| 121 | unwrap!(spawner.spawn(usb_task(usb))); | 121 | spawner.spawn(unwrap!(usb_task(usb))); |
| 122 | 122 | ||
| 123 | static NET_STATE: StaticCell<NetState<MTU, 4, 4>> = StaticCell::new(); | 123 | static NET_STATE: StaticCell<NetState<MTU, 4, 4>> = StaticCell::new(); |
| 124 | let (runner, device) = class.into_embassy_net_device::<MTU, 4, 4>(NET_STATE.init(NetState::new()), our_mac_addr); | 124 | let (runner, device) = class.into_embassy_net_device::<MTU, 4, 4>(NET_STATE.init(NetState::new()), our_mac_addr); |
| 125 | unwrap!(spawner.spawn(usb_ncm_task(runner))); | 125 | spawner.spawn(unwrap!(usb_ncm_task(runner))); |
| 126 | 126 | ||
| 127 | let config = embassy_net::Config::dhcpv4(Default::default()); | 127 | let config = embassy_net::Config::dhcpv4(Default::default()); |
| 128 | //let config = embassy_net::Config::ipv4_static(embassy_net::StaticConfigV4 { | 128 | //let config = embassy_net::Config::ipv4_static(embassy_net::StaticConfigV4 { |
| @@ -141,7 +141,7 @@ async fn main(spawner: Spawner) { | |||
| 141 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); | 141 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); |
| 142 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 142 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 143 | 143 | ||
| 144 | unwrap!(spawner.spawn(net_task(runner))); | 144 | spawner.spawn(unwrap!(net_task(runner))); |
| 145 | 145 | ||
| 146 | // And now we can use it! | 146 | // And now we can use it! |
| 147 | 147 | ||
diff --git a/examples/stm32f4/src/bin/usb_uac_speaker.rs b/examples/stm32f4/src/bin/usb_uac_speaker.rs index 654bec498..79bd2d914 100644 --- a/examples/stm32f4/src/bin/usb_uac_speaker.rs +++ b/examples/stm32f4/src/bin/usb_uac_speaker.rs | |||
| @@ -375,9 +375,9 @@ async fn main(spawner: Spawner) { | |||
| 375 | } | 375 | } |
| 376 | 376 | ||
| 377 | // Launch USB audio tasks. | 377 | // Launch USB audio tasks. |
| 378 | unwrap!(spawner.spawn(usb_control_task(control_monitor))); | 378 | spawner.spawn(unwrap!(usb_control_task(control_monitor))); |
| 379 | unwrap!(spawner.spawn(usb_streaming_task(stream, sender))); | 379 | spawner.spawn(unwrap!(usb_streaming_task(stream, sender))); |
| 380 | unwrap!(spawner.spawn(usb_feedback_task(feedback))); | 380 | spawner.spawn(unwrap!(usb_feedback_task(feedback))); |
| 381 | unwrap!(spawner.spawn(usb_task(usb_device))); | 381 | spawner.spawn(unwrap!(usb_task(usb_device))); |
| 382 | unwrap!(spawner.spawn(audio_receiver_task(receiver))); | 382 | spawner.spawn(unwrap!(audio_receiver_task(receiver))); |
| 383 | } | 383 | } |
diff --git a/examples/stm32f7/src/bin/can.rs b/examples/stm32f7/src/bin/can.rs index 58ba940a8..9a91ac814 100644 --- a/examples/stm32f7/src/bin/can.rs +++ b/examples/stm32f7/src/bin/can.rs | |||
| @@ -64,7 +64,7 @@ async fn main(spawner: Spawner) { | |||
| 64 | 64 | ||
| 65 | static CAN_TX: StaticCell<CanTx<'static>> = StaticCell::new(); | 65 | static CAN_TX: StaticCell<CanTx<'static>> = StaticCell::new(); |
| 66 | let tx = CAN_TX.init(tx); | 66 | let tx = CAN_TX.init(tx); |
| 67 | spawner.spawn(send_can_message(tx)).unwrap(); | 67 | spawner.spawn(send_can_message(tx).unwrap()); |
| 68 | 68 | ||
| 69 | loop { | 69 | loop { |
| 70 | let envelope = rx.read().await.unwrap(); | 70 | let envelope = rx.read().await.unwrap(); |
diff --git a/examples/stm32f7/src/bin/eth.rs b/examples/stm32f7/src/bin/eth.rs index 67a2b34bb..b13b7bdda 100644 --- a/examples/stm32f7/src/bin/eth.rs +++ b/examples/stm32f7/src/bin/eth.rs | |||
| @@ -91,7 +91,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 91 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 91 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 92 | 92 | ||
| 93 | // Launch network task | 93 | // Launch network task |
| 94 | unwrap!(spawner.spawn(net_task(runner))); | 94 | spawner.spawn(unwrap!(net_task(runner))); |
| 95 | 95 | ||
| 96 | // Ensure DHCP configuration is up before trying connect | 96 | // Ensure DHCP configuration is up before trying connect |
| 97 | stack.wait_config_up().await; | 97 | stack.wait_config_up().await; |
diff --git a/examples/stm32g0/src/bin/input_capture.rs b/examples/stm32g0/src/bin/input_capture.rs index df339d541..5501a6941 100644 --- a/examples/stm32g0/src/bin/input_capture.rs +++ b/examples/stm32g0/src/bin/input_capture.rs | |||
| @@ -44,7 +44,7 @@ async fn main(spawner: Spawner) { | |||
| 44 | let p = embassy_stm32::init(Default::default()); | 44 | let p = embassy_stm32::init(Default::default()); |
| 45 | info!("Hello World!"); | 45 | info!("Hello World!"); |
| 46 | 46 | ||
| 47 | unwrap!(spawner.spawn(blinky(p.PB1))); | 47 | spawner.spawn(unwrap!(blinky(p.PB1))); |
| 48 | 48 | ||
| 49 | // Connect PB1 and PA8 with a 1k Ohm resistor | 49 | // Connect PB1 and PA8 with a 1k Ohm resistor |
| 50 | let ch1_pin = PwmPin::new(p.PA8, OutputType::PushPull); | 50 | let ch1_pin = PwmPin::new(p.PA8, OutputType::PushPull); |
diff --git a/examples/stm32g0/src/bin/pwm_input.rs b/examples/stm32g0/src/bin/pwm_input.rs index fd4f53f1e..72aa07c03 100644 --- a/examples/stm32g0/src/bin/pwm_input.rs +++ b/examples/stm32g0/src/bin/pwm_input.rs | |||
| @@ -40,7 +40,7 @@ bind_interrupts!(struct Irqs { | |||
| 40 | async fn main(spawner: Spawner) { | 40 | async fn main(spawner: Spawner) { |
| 41 | let p = embassy_stm32::init(Default::default()); | 41 | let p = embassy_stm32::init(Default::default()); |
| 42 | 42 | ||
| 43 | unwrap!(spawner.spawn(blinky(p.PB1))); | 43 | spawner.spawn(unwrap!(blinky(p.PB1))); |
| 44 | // Connect PA8 and PA6 with a 1k Ohm resistor | 44 | // Connect PA8 and PA6 with a 1k Ohm resistor |
| 45 | let ch1_pin = PwmPin::new(p.PA8, OutputType::PushPull); | 45 | let ch1_pin = PwmPin::new(p.PA8, OutputType::PushPull); |
| 46 | let mut pwm = SimplePwm::new(p.TIM1, Some(ch1_pin), None, None, None, khz(1), Default::default()); | 46 | let mut pwm = SimplePwm::new(p.TIM1, Some(ch1_pin), None, None, None, khz(1), Default::default()); |
diff --git a/examples/stm32g4/src/bin/i2c_slave.rs b/examples/stm32g4/src/bin/i2c_slave.rs index 8b255b0e6..65aca1c1b 100644 --- a/examples/stm32g4/src/bin/i2c_slave.rs +++ b/examples/stm32g4/src/bin/i2c_slave.rs | |||
| @@ -139,11 +139,11 @@ async fn main(spawner: Spawner) { | |||
| 139 | let device = | 139 | let device = |
| 140 | i2c::I2c::new(p.I2C2, d_scl, d_sda, Irqs, p.DMA1_CH1, p.DMA1_CH2, config).into_slave_multimaster(d_addr_config); | 140 | i2c::I2c::new(p.I2C2, d_scl, d_sda, Irqs, p.DMA1_CH1, p.DMA1_CH2, config).into_slave_multimaster(d_addr_config); |
| 141 | 141 | ||
| 142 | unwrap!(spawner.spawn(device_task(device))); | 142 | spawner.spawn(unwrap!(device_task(device))); |
| 143 | 143 | ||
| 144 | let c_sda = p.PB8; | 144 | let c_sda = p.PB8; |
| 145 | let c_scl = p.PB7; | 145 | let c_scl = p.PB7; |
| 146 | let controller = i2c::I2c::new(p.I2C1, c_sda, c_scl, Irqs, p.DMA1_CH3, p.DMA1_CH4, config); | 146 | let controller = i2c::I2c::new(p.I2C1, c_sda, c_scl, Irqs, p.DMA1_CH3, p.DMA1_CH4, config); |
| 147 | 147 | ||
| 148 | unwrap!(spawner.spawn(controller_task(controller))); | 148 | spawner.spawn(unwrap!(controller_task(controller))); |
| 149 | } | 149 | } |
diff --git a/examples/stm32h5/src/bin/adc_dma.rs b/examples/stm32h5/src/bin/adc_dma.rs index 20073e22f..fb9fcbc5c 100644 --- a/examples/stm32h5/src/bin/adc_dma.rs +++ b/examples/stm32h5/src/bin/adc_dma.rs | |||
| @@ -42,8 +42,8 @@ async fn main(spawner: Spawner) { | |||
| 42 | } | 42 | } |
| 43 | let p = embassy_stm32::init(config); | 43 | let p = embassy_stm32::init(config); |
| 44 | 44 | ||
| 45 | spawner.must_spawn(adc1_task(p.ADC1, p.GPDMA1_CH0, p.PA0, p.PA2)); | 45 | spawner.spawn(unwrap!(adc1_task(p.ADC1, p.GPDMA1_CH0, p.PA0, p.PA2))); |
| 46 | spawner.must_spawn(adc2_task(p.ADC2, p.GPDMA1_CH1, p.PA1, p.PA3)); | 46 | spawner.spawn(unwrap!(adc2_task(p.ADC2, p.GPDMA1_CH1, p.PA1, p.PA3))); |
| 47 | } | 47 | } |
| 48 | 48 | ||
| 49 | #[embassy_executor::task] | 49 | #[embassy_executor::task] |
diff --git a/examples/stm32h5/src/bin/eth.rs b/examples/stm32h5/src/bin/eth.rs index 1d85cc1e7..a84fe358b 100644 --- a/examples/stm32h5/src/bin/eth.rs +++ b/examples/stm32h5/src/bin/eth.rs | |||
| @@ -94,7 +94,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 94 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 94 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 95 | 95 | ||
| 96 | // Launch network task | 96 | // Launch network task |
| 97 | unwrap!(spawner.spawn(net_task(runner))); | 97 | spawner.spawn(unwrap!(net_task(runner))); |
| 98 | 98 | ||
| 99 | // Ensure DHCP configuration is up before trying connect | 99 | // Ensure DHCP configuration is up before trying connect |
| 100 | stack.wait_config_up().await; | 100 | stack.wait_config_up().await; |
diff --git a/examples/stm32h5/src/bin/stop.rs b/examples/stm32h5/src/bin/stop.rs index e650791c5..3c4f49f64 100644 --- a/examples/stm32h5/src/bin/stop.rs +++ b/examples/stm32h5/src/bin/stop.rs | |||
| @@ -18,7 +18,7 @@ use {defmt_rtt as _, panic_probe as _}; | |||
| 18 | #[cortex_m_rt::entry] | 18 | #[cortex_m_rt::entry] |
| 19 | fn main() -> ! { | 19 | fn main() -> ! { |
| 20 | Executor::take().run(|spawner| { | 20 | Executor::take().run(|spawner| { |
| 21 | unwrap!(spawner.spawn(async_main(spawner))); | 21 | spawner.spawn(unwrap!(async_main(spawner))); |
| 22 | }) | 22 | }) |
| 23 | } | 23 | } |
| 24 | 24 | ||
| @@ -43,8 +43,8 @@ async fn async_main(spawner: Spawner) { | |||
| 43 | let rtc = RTC.init(rtc); | 43 | let rtc = RTC.init(rtc); |
| 44 | embassy_stm32::low_power::stop_with_rtc(rtc); | 44 | embassy_stm32::low_power::stop_with_rtc(rtc); |
| 45 | 45 | ||
| 46 | unwrap!(spawner.spawn(blinky(p.PB4.into()))); | 46 | spawner.spawn(unwrap!(blinky(p.PB4.into()))); |
| 47 | unwrap!(spawner.spawn(timeout())); | 47 | spawner.spawn(unwrap!(timeout())); |
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | #[embassy_executor::task] | 50 | #[embassy_executor::task] |
diff --git a/examples/stm32h5/src/bin/usart.rs b/examples/stm32h5/src/bin/usart.rs index cc49c2fdb..264e7d582 100644 --- a/examples/stm32h5/src/bin/usart.rs +++ b/examples/stm32h5/src/bin/usart.rs | |||
| @@ -34,6 +34,6 @@ fn main() -> ! { | |||
| 34 | let executor = EXECUTOR.init(Executor::new()); | 34 | let executor = EXECUTOR.init(Executor::new()); |
| 35 | 35 | ||
| 36 | executor.run(|spawner| { | 36 | executor.run(|spawner| { |
| 37 | unwrap!(spawner.spawn(main_task())); | 37 | spawner.spawn(unwrap!(main_task())); |
| 38 | }) | 38 | }) |
| 39 | } | 39 | } |
diff --git a/examples/stm32h5/src/bin/usart_dma.rs b/examples/stm32h5/src/bin/usart_dma.rs index c644e84bd..ea48515d7 100644 --- a/examples/stm32h5/src/bin/usart_dma.rs +++ b/examples/stm32h5/src/bin/usart_dma.rs | |||
| @@ -42,6 +42,6 @@ fn main() -> ! { | |||
| 42 | let executor = EXECUTOR.init(Executor::new()); | 42 | let executor = EXECUTOR.init(Executor::new()); |
| 43 | 43 | ||
| 44 | executor.run(|spawner| { | 44 | executor.run(|spawner| { |
| 45 | unwrap!(spawner.spawn(main_task())); | 45 | spawner.spawn(unwrap!(main_task())); |
| 46 | }) | 46 | }) |
| 47 | } | 47 | } |
diff --git a/examples/stm32h5/src/bin/usart_split.rs b/examples/stm32h5/src/bin/usart_split.rs index d26c5003c..f56c1c57d 100644 --- a/examples/stm32h5/src/bin/usart_split.rs +++ b/examples/stm32h5/src/bin/usart_split.rs | |||
| @@ -27,7 +27,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 27 | 27 | ||
| 28 | let (mut tx, rx) = usart.split(); | 28 | let (mut tx, rx) = usart.split(); |
| 29 | 29 | ||
| 30 | unwrap!(spawner.spawn(reader(rx))); | 30 | spawner.spawn(unwrap!(reader(rx))); |
| 31 | 31 | ||
| 32 | loop { | 32 | loop { |
| 33 | let buf = CHANNEL.receive().await; | 33 | let buf = CHANNEL.receive().await; |
diff --git a/examples/stm32h5/src/bin/usb_uac_speaker.rs b/examples/stm32h5/src/bin/usb_uac_speaker.rs index 5d007261c..86873cabd 100644 --- a/examples/stm32h5/src/bin/usb_uac_speaker.rs +++ b/examples/stm32h5/src/bin/usb_uac_speaker.rs | |||
| @@ -366,9 +366,9 @@ async fn main(spawner: Spawner) { | |||
| 366 | } | 366 | } |
| 367 | 367 | ||
| 368 | // Launch USB audio tasks. | 368 | // Launch USB audio tasks. |
| 369 | unwrap!(spawner.spawn(usb_control_task(control_monitor))); | 369 | spawner.spawn(unwrap!(usb_control_task(control_monitor))); |
| 370 | unwrap!(spawner.spawn(usb_streaming_task(stream, sender))); | 370 | spawner.spawn(unwrap!(usb_streaming_task(stream, sender))); |
| 371 | unwrap!(spawner.spawn(usb_feedback_task(feedback))); | 371 | spawner.spawn(unwrap!(usb_feedback_task(feedback))); |
| 372 | unwrap!(spawner.spawn(usb_task(usb_device))); | 372 | spawner.spawn(unwrap!(usb_task(usb_device))); |
| 373 | unwrap!(spawner.spawn(audio_receiver_task(receiver))); | 373 | spawner.spawn(unwrap!(audio_receiver_task(receiver))); |
| 374 | } | 374 | } |
diff --git a/examples/stm32h7/src/bin/dac_dma.rs b/examples/stm32h7/src/bin/dac_dma.rs index 8314754bc..df37e9d78 100644 --- a/examples/stm32h7/src/bin/dac_dma.rs +++ b/examples/stm32h7/src/bin/dac_dma.rs | |||
| @@ -53,8 +53,8 @@ async fn main(spawner: Spawner) { | |||
| 53 | // Obtain two independent channels (p.DAC1 can only be consumed once, though!) | 53 | // Obtain two independent channels (p.DAC1 can only be consumed once, though!) |
| 54 | let (dac_ch1, dac_ch2) = embassy_stm32::dac::Dac::new(p.DAC1, p.DMA1_CH3, p.DMA1_CH4, p.PA4, p.PA5).split(); | 54 | let (dac_ch1, dac_ch2) = embassy_stm32::dac::Dac::new(p.DAC1, p.DMA1_CH3, p.DMA1_CH4, p.PA4, p.PA5).split(); |
| 55 | 55 | ||
| 56 | spawner.spawn(dac_task1(p.TIM6, dac_ch1)).ok(); | 56 | spawner.spawn(dac_task1(p.TIM6, dac_ch1).unwrap()); |
| 57 | spawner.spawn(dac_task2(p.TIM7, dac_ch2)).ok(); | 57 | spawner.spawn(dac_task2(p.TIM7, dac_ch2).unwrap()); |
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | #[embassy_executor::task] | 60 | #[embassy_executor::task] |
diff --git a/examples/stm32h7/src/bin/eth.rs b/examples/stm32h7/src/bin/eth.rs index fc14c1a70..6c215362d 100644 --- a/examples/stm32h7/src/bin/eth.rs +++ b/examples/stm32h7/src/bin/eth.rs | |||
| @@ -93,7 +93,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 93 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 93 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 94 | 94 | ||
| 95 | // Launch network task | 95 | // Launch network task |
| 96 | unwrap!(spawner.spawn(net_task(runner))); | 96 | spawner.spawn(unwrap!(net_task(runner))); |
| 97 | 97 | ||
| 98 | // Ensure DHCP configuration is up before trying connect | 98 | // Ensure DHCP configuration is up before trying connect |
| 99 | stack.wait_config_up().await; | 99 | stack.wait_config_up().await; |
diff --git a/examples/stm32h7/src/bin/eth_client.rs b/examples/stm32h7/src/bin/eth_client.rs index 46301a478..10ac57fc9 100644 --- a/examples/stm32h7/src/bin/eth_client.rs +++ b/examples/stm32h7/src/bin/eth_client.rs | |||
| @@ -95,7 +95,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 95 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 95 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 96 | 96 | ||
| 97 | // Launch network task | 97 | // Launch network task |
| 98 | unwrap!(spawner.spawn(net_task(runner))); | 98 | spawner.spawn(unwrap!(net_task(runner))); |
| 99 | 99 | ||
| 100 | // Ensure DHCP configuration is up before trying connect | 100 | // Ensure DHCP configuration is up before trying connect |
| 101 | stack.wait_config_up().await; | 101 | stack.wait_config_up().await; |
diff --git a/examples/stm32h7/src/bin/eth_client_mii.rs b/examples/stm32h7/src/bin/eth_client_mii.rs index 99cd1a158..c6a108471 100644 --- a/examples/stm32h7/src/bin/eth_client_mii.rs +++ b/examples/stm32h7/src/bin/eth_client_mii.rs | |||
| @@ -101,7 +101,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 101 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 101 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 102 | 102 | ||
| 103 | // Launch network task | 103 | // Launch network task |
| 104 | unwrap!(spawner.spawn(net_task(runner))); | 104 | spawner.spawn(unwrap!(net_task(runner))); |
| 105 | 105 | ||
| 106 | // Ensure DHCP configuration is up before trying connect | 106 | // Ensure DHCP configuration is up before trying connect |
| 107 | stack.wait_config_up().await; | 107 | stack.wait_config_up().await; |
diff --git a/examples/stm32h7/src/bin/i2c_shared.rs b/examples/stm32h7/src/bin/i2c_shared.rs index 560f97aa3..9e45d845f 100644 --- a/examples/stm32h7/src/bin/i2c_shared.rs +++ b/examples/stm32h7/src/bin/i2c_shared.rs | |||
| @@ -95,9 +95,9 @@ async fn main(spawner: Spawner) { | |||
| 95 | 95 | ||
| 96 | // Device 1, using embedded-hal-async compatible driver for TMP117 | 96 | // Device 1, using embedded-hal-async compatible driver for TMP117 |
| 97 | let i2c_dev1 = I2cDevice::new(i2c_bus); | 97 | let i2c_dev1 = I2cDevice::new(i2c_bus); |
| 98 | spawner.spawn(temperature(i2c_dev1)).unwrap(); | 98 | spawner.spawn(temperature(i2c_dev1).unwrap()); |
| 99 | 99 | ||
| 100 | // Device 2, using embedded-hal-async compatible driver for SHTC3 | 100 | // Device 2, using embedded-hal-async compatible driver for SHTC3 |
| 101 | let i2c_dev2 = I2cDevice::new(i2c_bus); | 101 | let i2c_dev2 = I2cDevice::new(i2c_bus); |
| 102 | spawner.spawn(humidity(i2c_dev2)).unwrap(); | 102 | spawner.spawn(humidity(i2c_dev2).unwrap()); |
| 103 | } | 103 | } |
diff --git a/examples/stm32h7/src/bin/multiprio.rs b/examples/stm32h7/src/bin/multiprio.rs index b4620888f..2f2ffdea2 100644 --- a/examples/stm32h7/src/bin/multiprio.rs +++ b/examples/stm32h7/src/bin/multiprio.rs | |||
| @@ -135,16 +135,16 @@ fn main() -> ! { | |||
| 135 | // High-priority executor: UART4, priority level 6 | 135 | // High-priority executor: UART4, priority level 6 |
| 136 | interrupt::UART4.set_priority(Priority::P6); | 136 | interrupt::UART4.set_priority(Priority::P6); |
| 137 | let spawner = EXECUTOR_HIGH.start(interrupt::UART4); | 137 | let spawner = EXECUTOR_HIGH.start(interrupt::UART4); |
| 138 | unwrap!(spawner.spawn(run_high())); | 138 | spawner.spawn(unwrap!(run_high())); |
| 139 | 139 | ||
| 140 | // Medium-priority executor: UART5, priority level 7 | 140 | // Medium-priority executor: UART5, priority level 7 |
| 141 | interrupt::UART5.set_priority(Priority::P7); | 141 | interrupt::UART5.set_priority(Priority::P7); |
| 142 | let spawner = EXECUTOR_MED.start(interrupt::UART5); | 142 | let spawner = EXECUTOR_MED.start(interrupt::UART5); |
| 143 | unwrap!(spawner.spawn(run_med())); | 143 | spawner.spawn(unwrap!(run_med())); |
| 144 | 144 | ||
| 145 | // Low priority executor: runs in thread mode, using WFE/SEV | 145 | // Low priority executor: runs in thread mode, using WFE/SEV |
| 146 | let executor = EXECUTOR_LOW.init(Executor::new()); | 146 | let executor = EXECUTOR_LOW.init(Executor::new()); |
| 147 | executor.run(|spawner| { | 147 | executor.run(|spawner| { |
| 148 | unwrap!(spawner.spawn(run_low())); | 148 | spawner.spawn(unwrap!(run_low())); |
| 149 | }); | 149 | }); |
| 150 | } | 150 | } |
diff --git a/examples/stm32h7/src/bin/signal.rs b/examples/stm32h7/src/bin/signal.rs index b73360f32..97309798e 100644 --- a/examples/stm32h7/src/bin/signal.rs +++ b/examples/stm32h7/src/bin/signal.rs | |||
| @@ -26,7 +26,7 @@ async fn my_sending_task() { | |||
| 26 | #[embassy_executor::main] | 26 | #[embassy_executor::main] |
| 27 | async fn main(spawner: Spawner) { | 27 | async fn main(spawner: Spawner) { |
| 28 | let _p = embassy_stm32::init(Default::default()); | 28 | let _p = embassy_stm32::init(Default::default()); |
| 29 | unwrap!(spawner.spawn(my_sending_task())); | 29 | spawner.spawn(unwrap!(my_sending_task())); |
| 30 | 30 | ||
| 31 | loop { | 31 | loop { |
| 32 | let received_counter = SIGNAL.wait().await; | 32 | let received_counter = SIGNAL.wait().await; |
diff --git a/examples/stm32h7/src/bin/spi.rs b/examples/stm32h7/src/bin/spi.rs index ad4a8aaf7..dce30a4a7 100644 --- a/examples/stm32h7/src/bin/spi.rs +++ b/examples/stm32h7/src/bin/spi.rs | |||
| @@ -66,6 +66,6 @@ fn main() -> ! { | |||
| 66 | let executor = EXECUTOR.init(Executor::new()); | 66 | let executor = EXECUTOR.init(Executor::new()); |
| 67 | 67 | ||
| 68 | executor.run(|spawner| { | 68 | executor.run(|spawner| { |
| 69 | unwrap!(spawner.spawn(main_task(spi))); | 69 | spawner.spawn(unwrap!(main_task(spi))); |
| 70 | }) | 70 | }) |
| 71 | } | 71 | } |
diff --git a/examples/stm32h7/src/bin/spi_bdma.rs b/examples/stm32h7/src/bin/spi_bdma.rs index 5a7dff572..828f687b8 100644 --- a/examples/stm32h7/src/bin/spi_bdma.rs +++ b/examples/stm32h7/src/bin/spi_bdma.rs | |||
| @@ -80,6 +80,6 @@ fn main() -> ! { | |||
| 80 | let executor = EXECUTOR.init(Executor::new()); | 80 | let executor = EXECUTOR.init(Executor::new()); |
| 81 | 81 | ||
| 82 | executor.run(|spawner| { | 82 | executor.run(|spawner| { |
| 83 | unwrap!(spawner.spawn(main_task(spi))); | 83 | spawner.spawn(unwrap!(main_task(spi))); |
| 84 | }) | 84 | }) |
| 85 | } | 85 | } |
diff --git a/examples/stm32h7/src/bin/spi_dma.rs b/examples/stm32h7/src/bin/spi_dma.rs index 731c7fef5..2197fabce 100644 --- a/examples/stm32h7/src/bin/spi_dma.rs +++ b/examples/stm32h7/src/bin/spi_dma.rs | |||
| @@ -63,6 +63,6 @@ fn main() -> ! { | |||
| 63 | let executor = EXECUTOR.init(Executor::new()); | 63 | let executor = EXECUTOR.init(Executor::new()); |
| 64 | 64 | ||
| 65 | executor.run(|spawner| { | 65 | executor.run(|spawner| { |
| 66 | unwrap!(spawner.spawn(main_task(spi))); | 66 | spawner.spawn(unwrap!(main_task(spi))); |
| 67 | }) | 67 | }) |
| 68 | } | 68 | } |
diff --git a/examples/stm32h7/src/bin/usart.rs b/examples/stm32h7/src/bin/usart.rs index cc49c2fdb..264e7d582 100644 --- a/examples/stm32h7/src/bin/usart.rs +++ b/examples/stm32h7/src/bin/usart.rs | |||
| @@ -34,6 +34,6 @@ fn main() -> ! { | |||
| 34 | let executor = EXECUTOR.init(Executor::new()); | 34 | let executor = EXECUTOR.init(Executor::new()); |
| 35 | 35 | ||
| 36 | executor.run(|spawner| { | 36 | executor.run(|spawner| { |
| 37 | unwrap!(spawner.spawn(main_task())); | 37 | spawner.spawn(unwrap!(main_task())); |
| 38 | }) | 38 | }) |
| 39 | } | 39 | } |
diff --git a/examples/stm32h7/src/bin/usart_dma.rs b/examples/stm32h7/src/bin/usart_dma.rs index 6f340d40a..23d7f193a 100644 --- a/examples/stm32h7/src/bin/usart_dma.rs +++ b/examples/stm32h7/src/bin/usart_dma.rs | |||
| @@ -42,6 +42,6 @@ fn main() -> ! { | |||
| 42 | let executor = EXECUTOR.init(Executor::new()); | 42 | let executor = EXECUTOR.init(Executor::new()); |
| 43 | 43 | ||
| 44 | executor.run(|spawner| { | 44 | executor.run(|spawner| { |
| 45 | unwrap!(spawner.spawn(main_task())); | 45 | spawner.spawn(unwrap!(main_task())); |
| 46 | }) | 46 | }) |
| 47 | } | 47 | } |
diff --git a/examples/stm32h7/src/bin/usart_split.rs b/examples/stm32h7/src/bin/usart_split.rs index 2bb58be5e..464ce8d72 100644 --- a/examples/stm32h7/src/bin/usart_split.rs +++ b/examples/stm32h7/src/bin/usart_split.rs | |||
| @@ -27,7 +27,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 27 | 27 | ||
| 28 | let (mut tx, rx) = usart.split(); | 28 | let (mut tx, rx) = usart.split(); |
| 29 | 29 | ||
| 30 | unwrap!(spawner.spawn(reader(rx))); | 30 | spawner.spawn(unwrap!(reader(rx))); |
| 31 | 31 | ||
| 32 | loop { | 32 | loop { |
| 33 | let buf = CHANNEL.receive().await; | 33 | let buf = CHANNEL.receive().await; |
diff --git a/examples/stm32h735/src/bin/ltdc.rs b/examples/stm32h735/src/bin/ltdc.rs index a36fdef2c..8a99f745d 100644 --- a/examples/stm32h735/src/bin/ltdc.rs +++ b/examples/stm32h735/src/bin/ltdc.rs | |||
| @@ -47,7 +47,7 @@ async fn main(spawner: Spawner) { | |||
| 47 | 47 | ||
| 48 | // blink the led on another task | 48 | // blink the led on another task |
| 49 | let led = Output::new(p.PC3, Level::High, Speed::Low); | 49 | let led = Output::new(p.PC3, Level::High, Speed::Low); |
| 50 | unwrap!(spawner.spawn(led_task(led))); | 50 | spawner.spawn(unwrap!(led_task(led))); |
| 51 | 51 | ||
| 52 | // numbers from STMicroelectronics/STM32CubeH7 STM32H735G-DK C-based example | 52 | // numbers from STMicroelectronics/STM32CubeH7 STM32H735G-DK C-based example |
| 53 | const RK043FN48H_HSYNC: u16 = 41; // Horizontal synchronization | 53 | const RK043FN48H_HSYNC: u16 = 41; // Horizontal synchronization |
diff --git a/examples/stm32h755cm4/src/bin/intercore.rs b/examples/stm32h755cm4/src/bin/intercore.rs index d5e3e7648..f584e31e9 100644 --- a/examples/stm32h755cm4/src/bin/intercore.rs +++ b/examples/stm32h755cm4/src/bin/intercore.rs | |||
| @@ -128,7 +128,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 128 | let red_led = Output::new(p.PB14, Level::Low, Speed::Low); // LD3 (heartbeat) | 128 | let red_led = Output::new(p.PB14, Level::Low, Speed::Low); // LD3 (heartbeat) |
| 129 | 129 | ||
| 130 | // Start heartbeat task | 130 | // Start heartbeat task |
| 131 | unwrap!(spawner.spawn(blink_heartbeat(red_led))); | 131 | spawner.spawn(unwrap!(blink_heartbeat(red_led))); |
| 132 | 132 | ||
| 133 | // Track previous values to detect changes | 133 | // Track previous values to detect changes |
| 134 | let mut prev_green = false; | 134 | let mut prev_green = false; |
diff --git a/examples/stm32h7rs/src/bin/eth.rs b/examples/stm32h7rs/src/bin/eth.rs index d8002e9ba..67f541564 100644 --- a/examples/stm32h7rs/src/bin/eth.rs +++ b/examples/stm32h7rs/src/bin/eth.rs | |||
| @@ -94,7 +94,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 94 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 94 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 95 | 95 | ||
| 96 | // Launch network task | 96 | // Launch network task |
| 97 | unwrap!(spawner.spawn(net_task(runner))); | 97 | spawner.spawn(unwrap!(net_task(runner))); |
| 98 | 98 | ||
| 99 | // Ensure DHCP configuration is up before trying connect | 99 | // Ensure DHCP configuration is up before trying connect |
| 100 | //stack.wait_config_up().await; | 100 | //stack.wait_config_up().await; |
diff --git a/examples/stm32h7rs/src/bin/multiprio.rs b/examples/stm32h7rs/src/bin/multiprio.rs index b4620888f..2f2ffdea2 100644 --- a/examples/stm32h7rs/src/bin/multiprio.rs +++ b/examples/stm32h7rs/src/bin/multiprio.rs | |||
| @@ -135,16 +135,16 @@ fn main() -> ! { | |||
| 135 | // High-priority executor: UART4, priority level 6 | 135 | // High-priority executor: UART4, priority level 6 |
| 136 | interrupt::UART4.set_priority(Priority::P6); | 136 | interrupt::UART4.set_priority(Priority::P6); |
| 137 | let spawner = EXECUTOR_HIGH.start(interrupt::UART4); | 137 | let spawner = EXECUTOR_HIGH.start(interrupt::UART4); |
| 138 | unwrap!(spawner.spawn(run_high())); | 138 | spawner.spawn(unwrap!(run_high())); |
| 139 | 139 | ||
| 140 | // Medium-priority executor: UART5, priority level 7 | 140 | // Medium-priority executor: UART5, priority level 7 |
| 141 | interrupt::UART5.set_priority(Priority::P7); | 141 | interrupt::UART5.set_priority(Priority::P7); |
| 142 | let spawner = EXECUTOR_MED.start(interrupt::UART5); | 142 | let spawner = EXECUTOR_MED.start(interrupt::UART5); |
| 143 | unwrap!(spawner.spawn(run_med())); | 143 | spawner.spawn(unwrap!(run_med())); |
| 144 | 144 | ||
| 145 | // Low priority executor: runs in thread mode, using WFE/SEV | 145 | // Low priority executor: runs in thread mode, using WFE/SEV |
| 146 | let executor = EXECUTOR_LOW.init(Executor::new()); | 146 | let executor = EXECUTOR_LOW.init(Executor::new()); |
| 147 | executor.run(|spawner| { | 147 | executor.run(|spawner| { |
| 148 | unwrap!(spawner.spawn(run_low())); | 148 | spawner.spawn(unwrap!(run_low())); |
| 149 | }); | 149 | }); |
| 150 | } | 150 | } |
diff --git a/examples/stm32h7rs/src/bin/signal.rs b/examples/stm32h7rs/src/bin/signal.rs index b73360f32..97309798e 100644 --- a/examples/stm32h7rs/src/bin/signal.rs +++ b/examples/stm32h7rs/src/bin/signal.rs | |||
| @@ -26,7 +26,7 @@ async fn my_sending_task() { | |||
| 26 | #[embassy_executor::main] | 26 | #[embassy_executor::main] |
| 27 | async fn main(spawner: Spawner) { | 27 | async fn main(spawner: Spawner) { |
| 28 | let _p = embassy_stm32::init(Default::default()); | 28 | let _p = embassy_stm32::init(Default::default()); |
| 29 | unwrap!(spawner.spawn(my_sending_task())); | 29 | spawner.spawn(unwrap!(my_sending_task())); |
| 30 | 30 | ||
| 31 | loop { | 31 | loop { |
| 32 | let received_counter = SIGNAL.wait().await; | 32 | let received_counter = SIGNAL.wait().await; |
diff --git a/examples/stm32h7rs/src/bin/spi.rs b/examples/stm32h7rs/src/bin/spi.rs index 8d6ccc58b..8c280fdae 100644 --- a/examples/stm32h7rs/src/bin/spi.rs +++ b/examples/stm32h7rs/src/bin/spi.rs | |||
| @@ -44,6 +44,6 @@ fn main() -> ! { | |||
| 44 | let executor = EXECUTOR.init(Executor::new()); | 44 | let executor = EXECUTOR.init(Executor::new()); |
| 45 | 45 | ||
| 46 | executor.run(|spawner| { | 46 | executor.run(|spawner| { |
| 47 | unwrap!(spawner.spawn(main_task(spi))); | 47 | spawner.spawn(unwrap!(main_task(spi))); |
| 48 | }) | 48 | }) |
| 49 | } | 49 | } |
diff --git a/examples/stm32h7rs/src/bin/spi_dma.rs b/examples/stm32h7rs/src/bin/spi_dma.rs index cb305351b..3fa69fd15 100644 --- a/examples/stm32h7rs/src/bin/spi_dma.rs +++ b/examples/stm32h7rs/src/bin/spi_dma.rs | |||
| @@ -41,6 +41,6 @@ fn main() -> ! { | |||
| 41 | let executor = EXECUTOR.init(Executor::new()); | 41 | let executor = EXECUTOR.init(Executor::new()); |
| 42 | 42 | ||
| 43 | executor.run(|spawner| { | 43 | executor.run(|spawner| { |
| 44 | unwrap!(spawner.spawn(main_task(spi))); | 44 | spawner.spawn(unwrap!(main_task(spi))); |
| 45 | }) | 45 | }) |
| 46 | } | 46 | } |
diff --git a/examples/stm32h7rs/src/bin/usart.rs b/examples/stm32h7rs/src/bin/usart.rs index cc49c2fdb..264e7d582 100644 --- a/examples/stm32h7rs/src/bin/usart.rs +++ b/examples/stm32h7rs/src/bin/usart.rs | |||
| @@ -34,6 +34,6 @@ fn main() -> ! { | |||
| 34 | let executor = EXECUTOR.init(Executor::new()); | 34 | let executor = EXECUTOR.init(Executor::new()); |
| 35 | 35 | ||
| 36 | executor.run(|spawner| { | 36 | executor.run(|spawner| { |
| 37 | unwrap!(spawner.spawn(main_task())); | 37 | spawner.spawn(unwrap!(main_task())); |
| 38 | }) | 38 | }) |
| 39 | } | 39 | } |
diff --git a/examples/stm32h7rs/src/bin/usart_dma.rs b/examples/stm32h7rs/src/bin/usart_dma.rs index c644e84bd..ea48515d7 100644 --- a/examples/stm32h7rs/src/bin/usart_dma.rs +++ b/examples/stm32h7rs/src/bin/usart_dma.rs | |||
| @@ -42,6 +42,6 @@ fn main() -> ! { | |||
| 42 | let executor = EXECUTOR.init(Executor::new()); | 42 | let executor = EXECUTOR.init(Executor::new()); |
| 43 | 43 | ||
| 44 | executor.run(|spawner| { | 44 | executor.run(|spawner| { |
| 45 | unwrap!(spawner.spawn(main_task())); | 45 | spawner.spawn(unwrap!(main_task())); |
| 46 | }) | 46 | }) |
| 47 | } | 47 | } |
diff --git a/examples/stm32h7rs/src/bin/usart_split.rs b/examples/stm32h7rs/src/bin/usart_split.rs index d26c5003c..f56c1c57d 100644 --- a/examples/stm32h7rs/src/bin/usart_split.rs +++ b/examples/stm32h7rs/src/bin/usart_split.rs | |||
| @@ -27,7 +27,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 27 | 27 | ||
| 28 | let (mut tx, rx) = usart.split(); | 28 | let (mut tx, rx) = usart.split(); |
| 29 | 29 | ||
| 30 | unwrap!(spawner.spawn(reader(rx))); | 30 | spawner.spawn(unwrap!(reader(rx))); |
| 31 | 31 | ||
| 32 | loop { | 32 | loop { |
| 33 | let buf = CHANNEL.receive().await; | 33 | let buf = CHANNEL.receive().await; |
diff --git a/examples/stm32l0/src/bin/raw_spawn.rs b/examples/stm32l0/src/bin/raw_spawn.rs index 29c7e0dc7..6385e3c8f 100644 --- a/examples/stm32l0/src/bin/raw_spawn.rs +++ b/examples/stm32l0/src/bin/raw_spawn.rs | |||
| @@ -42,8 +42,8 @@ fn main() -> ! { | |||
| 42 | let run2_task = unsafe { make_static(&run2_task) }; | 42 | let run2_task = unsafe { make_static(&run2_task) }; |
| 43 | 43 | ||
| 44 | executor.run(|spawner| { | 44 | executor.run(|spawner| { |
| 45 | unwrap!(spawner.spawn(run1_task.spawn(|| run1()))); | 45 | spawner.spawn(unwrap!(run1_task.spawn(|| run1()))); |
| 46 | unwrap!(spawner.spawn(run2_task.spawn(|| run2()))); | 46 | spawner.spawn(unwrap!(run2_task.spawn(|| run2()))); |
| 47 | }); | 47 | }); |
| 48 | } | 48 | } |
| 49 | 49 | ||
diff --git a/examples/stm32l4/src/bin/dac_dma.rs b/examples/stm32l4/src/bin/dac_dma.rs index cde24f411..44edec728 100644 --- a/examples/stm32l4/src/bin/dac_dma.rs +++ b/examples/stm32l4/src/bin/dac_dma.rs | |||
| @@ -24,8 +24,8 @@ async fn main(spawner: Spawner) { | |||
| 24 | // Obtain two independent channels (p.DAC1 can only be consumed once, though!) | 24 | // Obtain two independent channels (p.DAC1 can only be consumed once, though!) |
| 25 | let (dac_ch1, dac_ch2) = embassy_stm32::dac::Dac::new(p.DAC1, p.DMA1_CH3, p.DMA1_CH4, p.PA4, p.PA5).split(); | 25 | let (dac_ch1, dac_ch2) = embassy_stm32::dac::Dac::new(p.DAC1, p.DMA1_CH3, p.DMA1_CH4, p.PA4, p.PA5).split(); |
| 26 | 26 | ||
| 27 | spawner.spawn(dac_task1(p.TIM6, dac_ch1)).ok(); | 27 | spawner.spawn(dac_task1(p.TIM6, dac_ch1).unwrap()); |
| 28 | spawner.spawn(dac_task2(p.TIM7, dac_ch2)).ok(); | 28 | spawner.spawn(dac_task2(p.TIM7, dac_ch2).unwrap()); |
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | #[embassy_executor::task] | 31 | #[embassy_executor::task] |
diff --git a/examples/stm32l4/src/bin/spe_adin1110_http_server.rs b/examples/stm32l4/src/bin/spe_adin1110_http_server.rs index 516badcb2..24efe526f 100644 --- a/examples/stm32l4/src/bin/spe_adin1110_http_server.rs +++ b/examples/stm32l4/src/bin/spe_adin1110_http_server.rs | |||
| @@ -181,11 +181,11 @@ async fn main(spawner: Spawner) { | |||
| 181 | .await; | 181 | .await; |
| 182 | 182 | ||
| 183 | // Start task blink_led | 183 | // Start task blink_led |
| 184 | unwrap!(spawner.spawn(heartbeat_led(led_uc3_yellow))); | 184 | spawner.spawn(unwrap!(heartbeat_led(led_uc3_yellow))); |
| 185 | // Start task temperature measurement | 185 | // Start task temperature measurement |
| 186 | unwrap!(spawner.spawn(temp_task(temp_sens_i2c, led_uc4_blue))); | 186 | spawner.spawn(unwrap!(temp_task(temp_sens_i2c, led_uc4_blue))); |
| 187 | // Start ethernet task | 187 | // Start ethernet task |
| 188 | unwrap!(spawner.spawn(ethernet_task(runner))); | 188 | spawner.spawn(unwrap!(ethernet_task(runner))); |
| 189 | 189 | ||
| 190 | let mut rng = Rng::new(dp.RNG, Irqs); | 190 | let mut rng = Rng::new(dp.RNG, Irqs); |
| 191 | // Generate random seed | 191 | // Generate random seed |
| @@ -208,7 +208,7 @@ async fn main(spawner: Spawner) { | |||
| 208 | let (stack, runner) = embassy_net::new(device, ip_cfg, RESOURCES.init(StackResources::new()), seed); | 208 | let (stack, runner) = embassy_net::new(device, ip_cfg, RESOURCES.init(StackResources::new()), seed); |
| 209 | 209 | ||
| 210 | // Launch network task | 210 | // Launch network task |
| 211 | unwrap!(spawner.spawn(net_task(runner))); | 211 | spawner.spawn(unwrap!(net_task(runner))); |
| 212 | 212 | ||
| 213 | let cfg = wait_for_config(stack).await; | 213 | let cfg = wait_for_config(stack).await; |
| 214 | let local_addr = cfg.address.address(); | 214 | let local_addr = cfg.address.address(); |
diff --git a/examples/stm32l5/src/bin/stop.rs b/examples/stm32l5/src/bin/stop.rs index d7a1efea9..c34053190 100644 --- a/examples/stm32l5/src/bin/stop.rs +++ b/examples/stm32l5/src/bin/stop.rs | |||
| @@ -15,7 +15,7 @@ use {defmt_rtt as _, panic_probe as _}; | |||
| 15 | #[cortex_m_rt::entry] | 15 | #[cortex_m_rt::entry] |
| 16 | fn main() -> ! { | 16 | fn main() -> ! { |
| 17 | Executor::take().run(|spawner| { | 17 | Executor::take().run(|spawner| { |
| 18 | unwrap!(spawner.spawn(async_main(spawner))); | 18 | spawner.spawn(unwrap!(async_main(spawner))); |
| 19 | }) | 19 | }) |
| 20 | } | 20 | } |
| 21 | 21 | ||
| @@ -34,8 +34,8 @@ async fn async_main(spawner: Spawner) { | |||
| 34 | let rtc = RTC.init(rtc); | 34 | let rtc = RTC.init(rtc); |
| 35 | embassy_stm32::low_power::stop_with_rtc(rtc); | 35 | embassy_stm32::low_power::stop_with_rtc(rtc); |
| 36 | 36 | ||
| 37 | unwrap!(spawner.spawn(blinky(p.PC7.into()))); | 37 | spawner.spawn(unwrap!(blinky(p.PC7.into()))); |
| 38 | unwrap!(spawner.spawn(timeout())); | 38 | spawner.spawn(unwrap!(timeout())); |
| 39 | } | 39 | } |
| 40 | 40 | ||
| 41 | #[embassy_executor::task] | 41 | #[embassy_executor::task] |
diff --git a/examples/stm32l5/src/bin/usb_ethernet.rs b/examples/stm32l5/src/bin/usb_ethernet.rs index 6c72132c6..25aa9ef69 100644 --- a/examples/stm32l5/src/bin/usb_ethernet.rs +++ b/examples/stm32l5/src/bin/usb_ethernet.rs | |||
| @@ -96,11 +96,11 @@ async fn main(spawner: Spawner) { | |||
| 96 | // Build the builder. | 96 | // Build the builder. |
| 97 | let usb = builder.build(); | 97 | let usb = builder.build(); |
| 98 | 98 | ||
| 99 | unwrap!(spawner.spawn(usb_task(usb))); | 99 | spawner.spawn(unwrap!(usb_task(usb))); |
| 100 | 100 | ||
| 101 | static NET_STATE: StaticCell<NetState<MTU, 4, 4>> = StaticCell::new(); | 101 | static NET_STATE: StaticCell<NetState<MTU, 4, 4>> = StaticCell::new(); |
| 102 | let (runner, device) = class.into_embassy_net_device::<MTU, 4, 4>(NET_STATE.init(NetState::new()), our_mac_addr); | 102 | let (runner, device) = class.into_embassy_net_device::<MTU, 4, 4>(NET_STATE.init(NetState::new()), our_mac_addr); |
| 103 | unwrap!(spawner.spawn(usb_ncm_task(runner))); | 103 | spawner.spawn(unwrap!(usb_ncm_task(runner))); |
| 104 | 104 | ||
| 105 | let config = embassy_net::Config::dhcpv4(Default::default()); | 105 | let config = embassy_net::Config::dhcpv4(Default::default()); |
| 106 | //let config = embassy_net::Config::ipv4_static(embassy_net::StaticConfigV4 { | 106 | //let config = embassy_net::Config::ipv4_static(embassy_net::StaticConfigV4 { |
| @@ -117,7 +117,7 @@ async fn main(spawner: Spawner) { | |||
| 117 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); | 117 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); |
| 118 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 118 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 119 | 119 | ||
| 120 | unwrap!(spawner.spawn(net_task(runner))); | 120 | spawner.spawn(unwrap!(net_task(runner))); |
| 121 | 121 | ||
| 122 | // And now we can use it! | 122 | // And now we can use it! |
| 123 | 123 | ||
diff --git a/examples/stm32u5/src/bin/ltdc.rs b/examples/stm32u5/src/bin/ltdc.rs index bd59a9148..46d1c120f 100644 --- a/examples/stm32u5/src/bin/ltdc.rs +++ b/examples/stm32u5/src/bin/ltdc.rs | |||
| @@ -50,7 +50,7 @@ async fn main(spawner: Spawner) { | |||
| 50 | 50 | ||
| 51 | // blink the led on another task | 51 | // blink the led on another task |
| 52 | let led = Output::new(p.PD2, Level::High, Speed::Low); | 52 | let led = Output::new(p.PD2, Level::High, Speed::Low); |
| 53 | unwrap!(spawner.spawn(led_task(led))); | 53 | spawner.spawn(unwrap!(led_task(led))); |
| 54 | 54 | ||
| 55 | // numbers from STM32U5G9J-DK2.ioc | 55 | // numbers from STM32U5G9J-DK2.ioc |
| 56 | const RK050HR18H_HSYNC: u16 = 5; // Horizontal synchronization | 56 | const RK050HR18H_HSYNC: u16 = 5; // Horizontal synchronization |
diff --git a/examples/stm32wb/src/bin/gatt_server.rs b/examples/stm32wb/src/bin/gatt_server.rs index 9864fa026..5d927bc00 100644 --- a/examples/stm32wb/src/bin/gatt_server.rs +++ b/examples/stm32wb/src/bin/gatt_server.rs | |||
| @@ -71,7 +71,7 @@ async fn main(spawner: Spawner) { | |||
| 71 | let config = Config::default(); | 71 | let config = Config::default(); |
| 72 | let mut mbox = TlMbox::init(p.IPCC, Irqs, config); | 72 | let mut mbox = TlMbox::init(p.IPCC, Irqs, config); |
| 73 | 73 | ||
| 74 | spawner.spawn(run_mm_queue(mbox.mm_subsystem)).unwrap(); | 74 | spawner.spawn(run_mm_queue(mbox.mm_subsystem).unwrap()); |
| 75 | let sys_event = mbox.sys_subsystem.read().await; | 75 | let sys_event = mbox.sys_subsystem.read().await; |
| 76 | info!("sys event: {}", sys_event.payload()); | 76 | info!("sys event: {}", sys_event.payload()); |
| 77 | 77 | ||
diff --git a/examples/stm32wb/src/bin/mac_ffd.rs b/examples/stm32wb/src/bin/mac_ffd.rs index d139aa61b..ede6cf4b9 100644 --- a/examples/stm32wb/src/bin/mac_ffd.rs +++ b/examples/stm32wb/src/bin/mac_ffd.rs | |||
| @@ -56,7 +56,7 @@ async fn main(spawner: Spawner) { | |||
| 56 | let config = Config::default(); | 56 | let config = Config::default(); |
| 57 | let mbox = TlMbox::init(p.IPCC, Irqs, config); | 57 | let mbox = TlMbox::init(p.IPCC, Irqs, config); |
| 58 | 58 | ||
| 59 | spawner.spawn(run_mm_queue(mbox.mm_subsystem)).unwrap(); | 59 | spawner.spawn(run_mm_queue(mbox.mm_subsystem).unwrap()); |
| 60 | 60 | ||
| 61 | let sys_event = mbox.sys_subsystem.read().await; | 61 | let sys_event = mbox.sys_subsystem.read().await; |
| 62 | info!("sys event: {}", sys_event.payload()); | 62 | info!("sys event: {}", sys_event.payload()); |
diff --git a/examples/stm32wb/src/bin/mac_ffd_net.rs b/examples/stm32wb/src/bin/mac_ffd_net.rs index 6a97daf4d..cc3b21e2e 100644 --- a/examples/stm32wb/src/bin/mac_ffd_net.rs +++ b/examples/stm32wb/src/bin/mac_ffd_net.rs | |||
| @@ -62,7 +62,7 @@ async fn main(spawner: Spawner) { | |||
| 62 | let config = Config::default(); | 62 | let config = Config::default(); |
| 63 | let mbox = TlMbox::init(p.IPCC, Irqs, config); | 63 | let mbox = TlMbox::init(p.IPCC, Irqs, config); |
| 64 | 64 | ||
| 65 | spawner.spawn(run_mm_queue(mbox.mm_subsystem)).unwrap(); | 65 | spawner.spawn(run_mm_queue(mbox.mm_subsystem).unwrap()); |
| 66 | 66 | ||
| 67 | let sys_event = mbox.sys_subsystem.read().await; | 67 | let sys_event = mbox.sys_subsystem.read().await; |
| 68 | info!("sys event: {}", sys_event.payload()); | 68 | info!("sys event: {}", sys_event.payload()); |
| @@ -168,7 +168,7 @@ async fn main(spawner: Spawner) { | |||
| 168 | static RUNNER: StaticCell<Runner> = StaticCell::new(); | 168 | static RUNNER: StaticCell<Runner> = StaticCell::new(); |
| 169 | let runner = RUNNER.init(Runner::new(mbox.mac_subsystem, tx_queue)); | 169 | let runner = RUNNER.init(Runner::new(mbox.mac_subsystem, tx_queue)); |
| 170 | 170 | ||
| 171 | spawner.spawn(run_mac(runner)).unwrap(); | 171 | spawner.spawn(run_mac(runner).unwrap()); |
| 172 | 172 | ||
| 173 | let (driver, control) = mac::new(runner).await; | 173 | let (driver, control) = mac::new(runner).await; |
| 174 | 174 | ||
diff --git a/examples/stm32wb/src/bin/mac_rfd.rs b/examples/stm32wb/src/bin/mac_rfd.rs index 9062bdcd2..d872104a8 100644 --- a/examples/stm32wb/src/bin/mac_rfd.rs +++ b/examples/stm32wb/src/bin/mac_rfd.rs | |||
| @@ -58,7 +58,7 @@ async fn main(spawner: Spawner) { | |||
| 58 | let config = Config::default(); | 58 | let config = Config::default(); |
| 59 | let mbox = TlMbox::init(p.IPCC, Irqs, config); | 59 | let mbox = TlMbox::init(p.IPCC, Irqs, config); |
| 60 | 60 | ||
| 61 | spawner.spawn(run_mm_queue(mbox.mm_subsystem)).unwrap(); | 61 | spawner.spawn(run_mm_queue(mbox.mm_subsystem).unwrap()); |
| 62 | 62 | ||
| 63 | let sys_event = mbox.sys_subsystem.read().await; | 63 | let sys_event = mbox.sys_subsystem.read().await; |
| 64 | info!("sys event: {}", sys_event.payload()); | 64 | info!("sys event: {}", sys_event.payload()); |
diff --git a/examples/stm32wb/src/bin/tl_mbox_mac.rs b/examples/stm32wb/src/bin/tl_mbox_mac.rs index 9224e626d..95c73872b 100644 --- a/examples/stm32wb/src/bin/tl_mbox_mac.rs +++ b/examples/stm32wb/src/bin/tl_mbox_mac.rs | |||
| @@ -53,7 +53,7 @@ async fn main(spawner: Spawner) { | |||
| 53 | let config = Config::default(); | 53 | let config = Config::default(); |
| 54 | let mbox = TlMbox::init(p.IPCC, Irqs, config); | 54 | let mbox = TlMbox::init(p.IPCC, Irqs, config); |
| 55 | 55 | ||
| 56 | spawner.spawn(run_mm_queue(mbox.mm_subsystem)).unwrap(); | 56 | spawner.spawn(run_mm_queue(mbox.mm_subsystem).unwrap()); |
| 57 | 57 | ||
| 58 | let sys_event = mbox.sys_subsystem.read().await; | 58 | let sys_event = mbox.sys_subsystem.read().await; |
| 59 | info!("sys event: {}", sys_event.payload()); | 59 | info!("sys event: {}", sys_event.payload()); |
diff --git a/examples/wasm/src/lib.rs b/examples/wasm/src/lib.rs index 71cf980dd..170c97fb7 100644 --- a/examples/wasm/src/lib.rs +++ b/examples/wasm/src/lib.rs | |||
| @@ -24,5 +24,5 @@ async fn ticker() { | |||
| 24 | #[embassy_executor::main] | 24 | #[embassy_executor::main] |
| 25 | async fn main(spawner: Spawner) { | 25 | async fn main(spawner: Spawner) { |
| 26 | wasm_logger::init(wasm_logger::Config::default()); | 26 | wasm_logger::init(wasm_logger::Config::default()); |
| 27 | spawner.spawn(ticker()).unwrap(); | 27 | spawner.spawn(ticker().unwrap()); |
| 28 | } | 28 | } |
diff --git a/tests/nrf/src/bin/ethernet_enc28j60_perf.rs b/tests/nrf/src/bin/ethernet_enc28j60_perf.rs index ed58627f1..5f3fa1fd3 100644 --- a/tests/nrf/src/bin/ethernet_enc28j60_perf.rs +++ b/tests/nrf/src/bin/ethernet_enc28j60_perf.rs | |||
| @@ -68,7 +68,7 @@ async fn main(spawner: Spawner) { | |||
| 68 | static RESOURCES: StaticCell<StackResources<2>> = StaticCell::new(); | 68 | static RESOURCES: StaticCell<StackResources<2>> = StaticCell::new(); |
| 69 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 69 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 70 | 70 | ||
| 71 | unwrap!(spawner.spawn(net_task(runner))); | 71 | spawner.spawn(unwrap!(net_task(runner))); |
| 72 | 72 | ||
| 73 | perf_client::run( | 73 | perf_client::run( |
| 74 | stack, | 74 | stack, |
diff --git a/tests/nrf/src/bin/wifi_esp_hosted_perf.rs b/tests/nrf/src/bin/wifi_esp_hosted_perf.rs index 34fb8103b..34c33a4ad 100644 --- a/tests/nrf/src/bin/wifi_esp_hosted_perf.rs +++ b/tests/nrf/src/bin/wifi_esp_hosted_perf.rs | |||
| @@ -74,7 +74,7 @@ async fn main(spawner: Spawner) { | |||
| 74 | ) | 74 | ) |
| 75 | .await; | 75 | .await; |
| 76 | 76 | ||
| 77 | unwrap!(spawner.spawn(wifi_task(runner))); | 77 | spawner.spawn(unwrap!(wifi_task(runner))); |
| 78 | 78 | ||
| 79 | unwrap!(control.init().await); | 79 | unwrap!(control.init().await); |
| 80 | unwrap!(control.connect(WIFI_NETWORK, WIFI_PASSWORD).await); | 80 | unwrap!(control.connect(WIFI_NETWORK, WIFI_PASSWORD).await); |
| @@ -94,7 +94,7 @@ async fn main(spawner: Spawner) { | |||
| 94 | seed, | 94 | seed, |
| 95 | ); | 95 | ); |
| 96 | 96 | ||
| 97 | unwrap!(spawner.spawn(net_task(runner))); | 97 | spawner.spawn(unwrap!(net_task(runner))); |
| 98 | 98 | ||
| 99 | perf_client::run( | 99 | perf_client::run( |
| 100 | stack, | 100 | stack, |
diff --git a/tests/rp/src/bin/cyw43-perf.rs b/tests/rp/src/bin/cyw43-perf.rs index dba1058a8..555134ffd 100644 --- a/tests/rp/src/bin/cyw43-perf.rs +++ b/tests/rp/src/bin/cyw43-perf.rs | |||
| @@ -70,7 +70,7 @@ async fn main(spawner: Spawner) { | |||
| 70 | static STATE: StaticCell<cyw43::State> = StaticCell::new(); | 70 | static STATE: StaticCell<cyw43::State> = StaticCell::new(); |
| 71 | let state = STATE.init(cyw43::State::new()); | 71 | let state = STATE.init(cyw43::State::new()); |
| 72 | let (net_device, mut control, runner) = cyw43::new(state, pwr, spi, fw).await; | 72 | let (net_device, mut control, runner) = cyw43::new(state, pwr, spi, fw).await; |
| 73 | unwrap!(spawner.spawn(wifi_task(runner))); | 73 | spawner.spawn(unwrap!(wifi_task(runner))); |
| 74 | 74 | ||
| 75 | control.init(clm).await; | 75 | control.init(clm).await; |
| 76 | control | 76 | control |
| @@ -89,7 +89,7 @@ async fn main(spawner: Spawner) { | |||
| 89 | seed, | 89 | seed, |
| 90 | ); | 90 | ); |
| 91 | 91 | ||
| 92 | unwrap!(spawner.spawn(net_task(runner))); | 92 | spawner.spawn(unwrap!(net_task(runner))); |
| 93 | 93 | ||
| 94 | loop { | 94 | loop { |
| 95 | match control | 95 | match control |
diff --git a/tests/rp/src/bin/ethernet_w5100s_perf.rs b/tests/rp/src/bin/ethernet_w5100s_perf.rs index 89e0ad32e..3f2bc728d 100644 --- a/tests/rp/src/bin/ethernet_w5100s_perf.rs +++ b/tests/rp/src/bin/ethernet_w5100s_perf.rs | |||
| @@ -60,7 +60,7 @@ async fn main(spawner: Spawner) { | |||
| 60 | ) | 60 | ) |
| 61 | .await | 61 | .await |
| 62 | .unwrap(); | 62 | .unwrap(); |
| 63 | unwrap!(spawner.spawn(ethernet_task(runner))); | 63 | spawner.spawn(unwrap!(ethernet_task(runner))); |
| 64 | 64 | ||
| 65 | // Generate random seed | 65 | // Generate random seed |
| 66 | let seed = rng.next_u64(); | 66 | let seed = rng.next_u64(); |
| @@ -75,7 +75,7 @@ async fn main(spawner: Spawner) { | |||
| 75 | ); | 75 | ); |
| 76 | 76 | ||
| 77 | // Launch network task | 77 | // Launch network task |
| 78 | unwrap!(spawner.spawn(net_task(runner))); | 78 | spawner.spawn(unwrap!(net_task(runner))); |
| 79 | 79 | ||
| 80 | perf_client::run( | 80 | perf_client::run( |
| 81 | stack, | 81 | stack, |
diff --git a/tests/rp/src/bin/gpio_multicore.rs b/tests/rp/src/bin/gpio_multicore.rs index 857f36975..f48dd207b 100644 --- a/tests/rp/src/bin/gpio_multicore.rs +++ b/tests/rp/src/bin/gpio_multicore.rs | |||
| @@ -30,11 +30,11 @@ fn main() -> ! { | |||
| 30 | unsafe { &mut *core::ptr::addr_of_mut!(CORE1_STACK) }, | 30 | unsafe { &mut *core::ptr::addr_of_mut!(CORE1_STACK) }, |
| 31 | move || { | 31 | move || { |
| 32 | let executor1 = EXECUTOR1.init(Executor::new()); | 32 | let executor1 = EXECUTOR1.init(Executor::new()); |
| 33 | executor1.run(|spawner| unwrap!(spawner.spawn(core1_task(p.PIN_1)))); | 33 | executor1.run(|spawner| spawner.spawn(unwrap!(core1_task(p.PIN_1)))); |
| 34 | }, | 34 | }, |
| 35 | ); | 35 | ); |
| 36 | let executor0 = EXECUTOR0.init(Executor::new()); | 36 | let executor0 = EXECUTOR0.init(Executor::new()); |
| 37 | executor0.run(|spawner| unwrap!(spawner.spawn(core0_task(p.PIN_0)))); | 37 | executor0.run(|spawner| spawner.spawn(unwrap!(core0_task(p.PIN_0)))); |
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | #[embassy_executor::task] | 40 | #[embassy_executor::task] |
diff --git a/tests/rp/src/bin/i2c.rs b/tests/rp/src/bin/i2c.rs index 2c835bd5a..21761b98b 100644 --- a/tests/rp/src/bin/i2c.rs +++ b/tests/rp/src/bin/i2c.rs | |||
| @@ -208,7 +208,7 @@ async fn controller_task(con: &mut i2c::I2c<'static, I2C0, i2c::Async>) { | |||
| 208 | config.addr = DEV_ADDR as u16; | 208 | config.addr = DEV_ADDR as u16; |
| 209 | let device = i2c_slave::I2cSlave::new(p.I2C1, d_sda, d_scl, Irqs, config); | 209 | let device = i2c_slave::I2cSlave::new(p.I2C1, d_sda, d_scl, Irqs, config); |
| 210 | 210 | ||
| 211 | spawner.must_spawn(device_task(device)); | 211 | spawner.spawn(device_task(device).unwrap()); |
| 212 | 212 | ||
| 213 | let c_sda = p.PIN_21; | 213 | let c_sda = p.PIN_21; |
| 214 | let c_scl = p.PIN_20; | 214 | let c_scl = p.PIN_20; |
diff --git a/tests/rp/src/bin/multicore.rs b/tests/rp/src/bin/multicore.rs index 902169c40..11b03cfea 100644 --- a/tests/rp/src/bin/multicore.rs +++ b/tests/rp/src/bin/multicore.rs | |||
| @@ -27,11 +27,11 @@ fn main() -> ! { | |||
| 27 | unsafe { &mut *core::ptr::addr_of_mut!(CORE1_STACK) }, | 27 | unsafe { &mut *core::ptr::addr_of_mut!(CORE1_STACK) }, |
| 28 | move || { | 28 | move || { |
| 29 | let executor1 = EXECUTOR1.init(Executor::new()); | 29 | let executor1 = EXECUTOR1.init(Executor::new()); |
| 30 | executor1.run(|spawner| unwrap!(spawner.spawn(core1_task()))); | 30 | executor1.run(|spawner| spawner.spawn(unwrap!(core1_task()))); |
| 31 | }, | 31 | }, |
| 32 | ); | 32 | ); |
| 33 | let executor0 = EXECUTOR0.init(Executor::new()); | 33 | let executor0 = EXECUTOR0.init(Executor::new()); |
| 34 | executor0.run(|spawner| unwrap!(spawner.spawn(core0_task()))); | 34 | executor0.run(|spawner| spawner.spawn(unwrap!(core0_task()))); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | #[embassy_executor::task] | 37 | #[embassy_executor::task] |
diff --git a/tests/rp/src/bin/spinlock_mutex_multicore.rs b/tests/rp/src/bin/spinlock_mutex_multicore.rs index ebcf1ca32..c56d43ade 100644 --- a/tests/rp/src/bin/spinlock_mutex_multicore.rs +++ b/tests/rp/src/bin/spinlock_mutex_multicore.rs | |||
| @@ -27,11 +27,11 @@ fn main() -> ! { | |||
| 27 | unsafe { &mut *core::ptr::addr_of_mut!(CORE1_STACK) }, | 27 | unsafe { &mut *core::ptr::addr_of_mut!(CORE1_STACK) }, |
| 28 | move || { | 28 | move || { |
| 29 | let executor1 = EXECUTOR1.init(Executor::new()); | 29 | let executor1 = EXECUTOR1.init(Executor::new()); |
| 30 | executor1.run(|spawner| unwrap!(spawner.spawn(core1_task()))); | 30 | executor1.run(|spawner| spawner.spawn(unwrap!(core1_task()))); |
| 31 | }, | 31 | }, |
| 32 | ); | 32 | ); |
| 33 | let executor0 = EXECUTOR0.init(Executor::new()); | 33 | let executor0 = EXECUTOR0.init(Executor::new()); |
| 34 | executor0.run(|spawner| unwrap!(spawner.spawn(core0_task()))); | 34 | executor0.run(|spawner| spawner.spawn(unwrap!(core0_task()))); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | #[embassy_executor::task] | 37 | #[embassy_executor::task] |
diff --git a/tests/stm32/src/bin/eth.rs b/tests/stm32/src/bin/eth.rs index bcb362b42..a65682a02 100644 --- a/tests/stm32/src/bin/eth.rs +++ b/tests/stm32/src/bin/eth.rs | |||
| @@ -101,7 +101,7 @@ async fn main(spawner: Spawner) { | |||
| 101 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); | 101 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 102 | 102 | ||
| 103 | // Launch network task | 103 | // Launch network task |
| 104 | unwrap!(spawner.spawn(net_task(runner))); | 104 | spawner.spawn(unwrap!(net_task(runner))); |
| 105 | 105 | ||
| 106 | perf_client::run( | 106 | perf_client::run( |
| 107 | stack, | 107 | stack, |
diff --git a/tests/stm32/src/bin/stop.rs b/tests/stm32/src/bin/stop.rs index 772bc527c..8119c1f39 100644 --- a/tests/stm32/src/bin/stop.rs +++ b/tests/stm32/src/bin/stop.rs | |||
| @@ -19,7 +19,7 @@ use static_cell::StaticCell; | |||
| 19 | #[entry] | 19 | #[entry] |
| 20 | fn main() -> ! { | 20 | fn main() -> ! { |
| 21 | Executor::take().run(|spawner| { | 21 | Executor::take().run(|spawner| { |
| 22 | unwrap!(spawner.spawn(async_main(spawner))); | 22 | spawner.spawn(unwrap!(async_main(spawner))); |
| 23 | }); | 23 | }); |
| 24 | } | 24 | } |
| 25 | 25 | ||
| @@ -75,6 +75,6 @@ async fn async_main(spawner: Spawner) { | |||
| 75 | 75 | ||
| 76 | stop_with_rtc(rtc); | 76 | stop_with_rtc(rtc); |
| 77 | 77 | ||
| 78 | spawner.spawn(task_1()).unwrap(); | 78 | spawner.spawn(task_1().unwrap()); |
| 79 | spawner.spawn(task_2()).unwrap(); | 79 | spawner.spawn(task_2().unwrap()); |
| 80 | } | 80 | } |
diff --git a/tests/stm32/src/bin/usart_rx_ringbuffered.rs b/tests/stm32/src/bin/usart_rx_ringbuffered.rs index 83c0887ac..15a0b0d60 100644 --- a/tests/stm32/src/bin/usart_rx_ringbuffered.rs +++ b/tests/stm32/src/bin/usart_rx_ringbuffered.rs | |||
| @@ -46,8 +46,8 @@ async fn main(spawner: Spawner) { | |||
| 46 | let rx = rx.into_ring_buffered(unsafe { &mut *core::ptr::addr_of_mut!(DMA_BUF) }); | 46 | let rx = rx.into_ring_buffered(unsafe { &mut *core::ptr::addr_of_mut!(DMA_BUF) }); |
| 47 | 47 | ||
| 48 | info!("Spawning tasks"); | 48 | info!("Spawning tasks"); |
| 49 | spawner.spawn(transmit_task(tx)).unwrap(); | 49 | spawner.spawn(transmit_task(tx).unwrap()); |
| 50 | spawner.spawn(receive_task(rx)).unwrap(); | 50 | spawner.spawn(receive_task(rx).unwrap()); |
| 51 | } | 51 | } |
| 52 | 52 | ||
| 53 | #[embassy_executor::task] | 53 | #[embassy_executor::task] |
diff --git a/tests/stm32/src/bin/wpan_ble.rs b/tests/stm32/src/bin/wpan_ble.rs index fde1dfa9b..8957bfc04 100644 --- a/tests/stm32/src/bin/wpan_ble.rs +++ b/tests/stm32/src/bin/wpan_ble.rs | |||
| @@ -47,7 +47,7 @@ async fn main(spawner: Spawner) { | |||
| 47 | let config = Config::default(); | 47 | let config = Config::default(); |
| 48 | let mut mbox = TlMbox::init(p.IPCC, Irqs, config); | 48 | let mut mbox = TlMbox::init(p.IPCC, Irqs, config); |
| 49 | 49 | ||
| 50 | spawner.spawn(run_mm_queue(mbox.mm_subsystem)).unwrap(); | 50 | spawner.spawn(run_mm_queue(mbox.mm_subsystem).unwrap()); |
| 51 | 51 | ||
| 52 | let sys_event = mbox.sys_subsystem.read().await; | 52 | let sys_event = mbox.sys_subsystem.read().await; |
| 53 | info!("sys event: {}", sys_event.payload()); | 53 | info!("sys event: {}", sys_event.payload()); |
diff --git a/tests/stm32/src/bin/wpan_mac.rs b/tests/stm32/src/bin/wpan_mac.rs index b65ace40f..79e13d524 100644 --- a/tests/stm32/src/bin/wpan_mac.rs +++ b/tests/stm32/src/bin/wpan_mac.rs | |||
| @@ -40,7 +40,7 @@ async fn main(spawner: Spawner) { | |||
| 40 | let config = Config::default(); | 40 | let config = Config::default(); |
| 41 | let mbox = TlMbox::init(p.IPCC, Irqs, config); | 41 | let mbox = TlMbox::init(p.IPCC, Irqs, config); |
| 42 | 42 | ||
| 43 | spawner.spawn(run_mm_queue(mbox.mm_subsystem)).unwrap(); | 43 | spawner.spawn(run_mm_queue(mbox.mm_subsystem).unwrap()); |
| 44 | 44 | ||
| 45 | let sys_event = mbox.sys_subsystem.read().await; | 45 | let sys_event = mbox.sys_subsystem.read().await; |
| 46 | info!("sys event: {}", sys_event.payload()); | 46 | info!("sys event: {}", sys_event.payload()); |
