diff --git a/boards/nano_rp2040_connect/src/main.rs b/boards/nano_rp2040_connect/src/main.rs index 573b58ce4e..36b67aa32f 100644 --- a/boards/nano_rp2040_connect/src/main.rs +++ b/boards/nano_rp2040_connect/src/main.rs @@ -253,17 +253,15 @@ fn init_clocks(peripherals: &Rp2040DefaultPeripherals) { /// removed when this function returns. Otherwise, the stack space used for /// these static_inits is wasted. #[inline(never)] -unsafe fn create_peripherals() -> &'static mut Rp2040DefaultPeripherals<'static> { - static_init!(Rp2040DefaultPeripherals, Rp2040DefaultPeripherals::new()) -} - -/// Main function called after RAM initialized. -#[no_mangle] -pub unsafe fn main() { +pub unsafe fn start() -> ( + &'static kernel::Kernel, + NanoRP2040Connect, + &'static rp2040::chip::Rp2040<'static, Rp2040DefaultPeripherals<'static>>, +) { // Loads relocations and clears BSS rp2040::init(); - let peripherals = create_peripherals(); + let peripherals = static_init!(Rp2040DefaultPeripherals, Rp2040DefaultPeripherals::new()); peripherals.resolve_dependencies(); // Reset all peripherals except QSPI (we might be booting from Flash), PLL USB and PLL SYS @@ -322,7 +320,6 @@ pub unsafe fn main() { let process_management_capability = create_capability!(capabilities::ProcessManagementCapability); - let main_loop_capability = create_capability!(capabilities::MainLoopCapability); let memory_allocation_capability = create_capability!(capabilities::MemoryAllocationCapability); let mux_alarm = components::alarm::AlarmMuxComponent::new(&peripherals.timer) @@ -613,10 +610,14 @@ pub unsafe fn main() { debug!("{:?}", err); }); - board_kernel.kernel_loop( - &nano_rp2040_connect, - chip, - Some(&nano_rp2040_connect.ipc), - &main_loop_capability, - ); + (board_kernel, nano_rp2040_connect, chip) +} + +/// Main function called after RAM initialized. +#[no_mangle] +pub unsafe fn main() { + let main_loop_capability = create_capability!(capabilities::MainLoopCapability); + + let (board_kernel, platform, chip) = start(); + board_kernel.kernel_loop(&platform, chip, Some(&platform.ipc), &main_loop_capability); } diff --git a/boards/pico_explorer_base/src/main.rs b/boards/pico_explorer_base/src/main.rs index 319856bc06..64f19cbfe4 100644 --- a/boards/pico_explorer_base/src/main.rs +++ b/boards/pico_explorer_base/src/main.rs @@ -263,17 +263,15 @@ fn init_clocks(peripherals: &Rp2040DefaultPeripherals) { /// removed when this function returns. Otherwise, the stack space used for /// these static_inits is wasted. #[inline(never)] -unsafe fn create_peripherals() -> &'static mut Rp2040DefaultPeripherals<'static> { - static_init!(Rp2040DefaultPeripherals, Rp2040DefaultPeripherals::new()) -} - -/// Main function called after RAM initialized. -#[no_mangle] -pub unsafe fn main() { +pub unsafe fn start() -> ( + &'static kernel::Kernel, + PicoExplorerBase, + &'static rp2040::chip::Rp2040<'static, Rp2040DefaultPeripherals<'static>>, +) { // Loads relocations and clears BSS rp2040::init(); - let peripherals = create_peripherals(); + let peripherals = static_init!(Rp2040DefaultPeripherals, Rp2040DefaultPeripherals::new()); peripherals.resolve_dependencies(); // Reset all peripherals except QSPI (we might be booting from Flash), PLL USB and PLL SYS @@ -335,7 +333,6 @@ pub unsafe fn main() { let process_management_capability = create_capability!(capabilities::ProcessManagementCapability); - let main_loop_capability = create_capability!(capabilities::MainLoopCapability); let memory_allocation_capability = create_capability!(capabilities::MemoryAllocationCapability); let mux_alarm = components::alarm::AlarmMuxComponent::new(&peripherals.timer) @@ -697,10 +694,14 @@ pub unsafe fn main() { debug!("{:?}", err); }); - board_kernel.kernel_loop( - &pico_explorer_base, - chip, - Some(&pico_explorer_base.ipc), - &main_loop_capability, - ); + (board_kernel, pico_explorer_base, chip) +} + +/// Main function called after RAM initialized. +#[no_mangle] +pub unsafe fn main() { + let main_loop_capability = create_capability!(capabilities::MainLoopCapability); + + let (board_kernel, platform, chip) = start(); + board_kernel.kernel_loop(&platform, chip, Some(&platform.ipc), &main_loop_capability); } diff --git a/boards/raspberry_pi_pico/src/main.rs b/boards/raspberry_pi_pico/src/main.rs index f80c6b4adc..e6c8a0ed93 100644 --- a/boards/raspberry_pi_pico/src/main.rs +++ b/boards/raspberry_pi_pico/src/main.rs @@ -254,17 +254,15 @@ fn init_clocks(peripherals: &Rp2040DefaultPeripherals) { /// removed when this function returns. Otherwise, the stack space used for /// these static_inits is wasted. #[inline(never)] -unsafe fn create_peripherals() -> &'static mut Rp2040DefaultPeripherals<'static> { - static_init!(Rp2040DefaultPeripherals, Rp2040DefaultPeripherals::new()) -} - -/// Main function called after RAM initialized. -#[no_mangle] -pub unsafe fn main() { +pub unsafe fn start() -> ( + &'static kernel::Kernel, + RaspberryPiPico, + &'static rp2040::chip::Rp2040<'static, Rp2040DefaultPeripherals<'static>>, +) { // Loads relocations and clears BSS rp2040::init(); - let peripherals = create_peripherals(); + let peripherals = static_init!(Rp2040DefaultPeripherals, Rp2040DefaultPeripherals::new()); peripherals.resolve_dependencies(); // Reset all peripherals except QSPI (we might be booting from Flash), PLL USB and PLL SYS @@ -323,7 +321,6 @@ pub unsafe fn main() { let process_management_capability = create_capability!(capabilities::ProcessManagementCapability); - let main_loop_capability = create_capability!(capabilities::MainLoopCapability); let memory_allocation_capability = create_capability!(capabilities::MemoryAllocationCapability); let mux_alarm = components::alarm::AlarmMuxComponent::new(&peripherals.timer) @@ -606,10 +603,14 @@ pub unsafe fn main() { debug!("{:?}", err); }); - board_kernel.kernel_loop( - &raspberry_pi_pico, - chip, - Some(&raspberry_pi_pico.ipc), - &main_loop_capability, - ); + (board_kernel, raspberry_pi_pico, chip) +} + +/// Main function called after RAM initialized. +#[no_mangle] +pub unsafe fn main() { + let main_loop_capability = create_capability!(capabilities::MainLoopCapability); + + let (board_kernel, platform, chip) = start(); + board_kernel.kernel_loop(&platform, chip, Some(&platform.ipc), &main_loop_capability); }