Do nothing but yielding in error handlers (saves roughly 1150 bytes)
diff --git a/src/alloc.rs b/src/alloc.rs index 523cb64..bcc5d6e 100644 --- a/src/alloc.rs +++ b/src/alloc.rs
@@ -1,14 +1,8 @@ -use crate::drivers; -use crate::leds::LedsDriver; -use crate::result::TockResult; -use crate::timer::Duration; -use crate::timer::ParallelSleepDriver; +use crate::syscalls; use core::alloc::GlobalAlloc; use core::alloc::Layout; -use core::executor; use core::ptr; use core::ptr::NonNull; -use futures::future; use linked_list_allocator::Heap; pub static mut HEAP: Heap = Heap::empty(); @@ -32,31 +26,7 @@ #[alloc_error_handler] unsafe fn alloc_error_handler(_: Layout) -> ! { - executor::block_on(async { - let mut drivers = drivers::retrieve_drivers_unsafe(); - - let leds_driver = drivers.leds.init_driver(); - let mut timer_driver = drivers.timer.create_timer_driver(); - let timer_driver = timer_driver.activate(); - - if let (Ok(leds_driver), Ok(timer_driver)) = (leds_driver, timer_driver) { - let _ = cycle_all_leds(&leds_driver, &timer_driver).await; - } else { - future::pending::<()>().await - } - loop {} - }) -} - -async fn cycle_all_leds( - leds_driver: &LedsDriver<'_>, - timer_driver: &ParallelSleepDriver<'_>, -) -> TockResult<()> { loop { - for led in leds_driver.leds() { - led.on()?; - timer_driver.sleep(Duration::from_ms(100)).await?; - led.off()?; - } + syscalls::raw::yieldk(); } }
diff --git a/src/lang_items.rs b/src/lang_items.rs index 91a20a1..5a28186 100644 --- a/src/lang_items.rs +++ b/src/lang_items.rs
@@ -18,14 +18,9 @@ //! `rustc_main`. That's covered by the `_start` function in the root of this //! crate. -use crate::drivers; -use crate::leds::LedsDriver; use crate::result::TockResult; -use crate::timer::Duration; -use crate::timer::ParallelSleepDriver; -use core::executor; +use crate::syscalls; use core::panic::PanicInfo; -use futures::future; #[lang = "start"] extern "C" fn start<T>(main: fn() -> T, _argc: isize, _argv: *const *const u8) -> bool @@ -62,35 +57,7 @@ // Signal a panic using the LowLevelDebug capsule (if available). super::debug::low_level_status_code(1); - // Flash all LEDs (if available). - executor::block_on(async { - let mut drivers = drivers::retrieve_drivers_unsafe(); - - let leds_driver = drivers.leds.init_driver(); - let mut timer_driver = drivers.timer.create_timer_driver(); - let timer_driver = timer_driver.activate(); - - if let (Ok(leds_driver), Ok(timer_driver)) = (leds_driver, timer_driver) { - let _ = blink_all_leds(&leds_driver, &timer_driver).await; - } else { - future::pending::<()>().await - } - loop {} - }) -} - -async fn blink_all_leds( - leds_driver: &LedsDriver<'_>, - timer_driver: &ParallelSleepDriver<'_>, -) -> TockResult<()> { loop { - for led in leds_driver.leds() { - led.on()?; - } - timer_driver.sleep(Duration::from_ms(100)).await?; - for led in leds_driver.leds() { - led.off()?; - } - timer_driver.sleep(Duration::from_ms(100)).await?; + syscalls::raw::yieldk(); } }