use avr_oxide::concurrency;
use avr_oxide::concurrency::thread;
use avr_oxide::hal::generic::cpu::{ClockControl, SleepControl};
use avr_oxide::alloc;
use avr_oxide::deviceconsts::clock;
extern {
fn __oxide_main() -> !;
static __OXIDE_MAIN_THREAD_STACK_SIZE : usize;
}
#[no_mangle]
fn _oxide_boot() {
unsafe {
alloc::initialise();
concurrency::scheduler::initialise();
avr_oxide::hardware::initialise();
avr_oxide::hardware::cpu::sleepctrl().reset();
avr_oxide::hardware::cpu::clock().clk_per_prescaler(clock::MASTER_CLOCK_PRESCALER);
#[cfg(feature="boardcompat")]
avr_oxide::boards::board::initialise();
avr_oxide::oxide::initialise();
let _jh = thread::Builder::new().stack_size(__OXIDE_MAIN_THREAD_STACK_SIZE).spawn(||{
__oxide_main();
});
concurrency::scheduler::restore_first_thread();
}
}