use avr_oxide::hal::concurrency;
use avr_oxide::hal::concurrency::thread;
use avr_oxide::hal::generic::cpu::{ClockControl, SleepControl};
#[cfg(feature="alloc_ftr")]
use avr_oxide::alloc;
use avr_oxide::deviceconsts::clock;
use avr_oxide::sleepctrl;
extern {
fn __oxide_main() -> !;
}
#[no_mangle]
fn _oxide_boot() {
unsafe {
#[cfg(feature="alloc_ftr")]
alloc::initialise();
concurrency::internal::initialise();
sleepctrl!().reset();
#[cfg(feature="atmega4809")]
avr_oxide::hal::atmega4809::cpu::clock().clk_per_prescaler(clock::MASTER_CLOCK_PRESCALER);
#[cfg(feature="atmega328p")]
avr_oxide::hal::atmega328p::cpu::clock().clk_per_prescaler(clock::MASTER_CLOCK_PRESCALER);
let mut supervisor = avr_oxide::oxide::create_supervisor();
avr_oxide::oxide::set_global_supervisor(&mut supervisor);
let _jh = thread::spawn_threadunsafe(||{
__oxide_main();
});
concurrency::internal::run_scheduler();
}
}