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();
}
}