diff --git a/firmware/rust1/src/bin/heizung.rs b/firmware/rust1/src/bin/heizung.rs index b4c27cc8429711a509183eff64ab27b740b67bb3..e47c553c27c67ddc27d83cfe3763b4d788a215d4 100644 --- a/firmware/rust1/src/bin/heizung.rs +++ b/firmware/rust1/src/bin/heizung.rs @@ -419,8 +419,8 @@ impl<'a> ModbusRegisters for ModBusRegs<'a> { } } -#[embassy_executor::main] -async fn main(spawner: Spawner) { +//#[embassy_executor::main] +async fn main2(spawner: Spawner) { let p = embassy_rp::init(Default::default()); info!("starting"); @@ -499,3 +499,37 @@ async fn main(spawner: Spawner) { Timer::after(Duration::from_secs(1)).await; } } + + +/* +#[embassy_executor::main] +async fn main(spawner: Spawner) { + main2(spawner).await; +} +*/ + +#[::embassy_executor::task()] +async fn __embassy_main(spawner: Spawner) { + main2(spawner).await; +} + +unsafe fn __make_static<T>(t: &mut T) -> &'static mut T { + ::core::mem::transmute(t) +} + +#[cortex_m_rt::entry] +fn main() -> ! { + init_early(); + + let mut executor = ::embassy_executor::Executor::new(); + let executor = unsafe { __make_static(&mut executor) }; + executor.run(|spawner| { + spawner.must_spawn(__embassy_main(spawner)); + }) +} + +fn init_early() { + use embassy_rp::pac; + // release spinlock 31 because we sometimes block on this in the init code + unsafe { pac::SIO.spinlock(31).write_value(1); } +}