From eee1453c808074bb18c072032ee7e3feddd1679a Mon Sep 17 00:00:00 2001 From: guozhanxin Date: Wed, 24 Mar 2021 18:02:11 +0800 Subject: [PATCH] [Fix] the problem of startup failure. --- bsp/raspberry-pico/drivers/board.c | 18 ++++++++++++++++-- .../src/rp2_common/pico_runtime/runtime.c | 14 -------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/bsp/raspberry-pico/drivers/board.c b/bsp/raspberry-pico/drivers/board.c index af8bcb4f80..1a4639095e 100644 --- a/bsp/raspberry-pico/drivers/board.c +++ b/bsp/raspberry-pico/drivers/board.c @@ -45,11 +45,25 @@ uint32_t systick_config(uint32_t ticks) void rt_hw_board_init() { + rt_system_heap_init(heap, (uint8_t *)heap + sizeof(heap)); + + alarm_pool_init_default(); + + // Start and end points of the constructor list, + // defined by the linker script. + extern void (*__init_array_start)(); + extern void (*__init_array_end)(); + + // Call each function in the list. + // We have to take the address of the symbols, as __init_array_start *is* + // the first function pointer, not the address of it. + for (void (**p)() = &__init_array_start; p < &__init_array_end; ++p) { + (*p)(); + } + /* Configure the SysTick */ systick_config(frequency_count_khz(CLOCKS_FC0_SRC_VALUE_ROSC_CLKSRC)*10000/RT_TICK_PER_SECOND); - rt_system_heap_init(heap, (uint8_t *)heap + sizeof(heap)); - stdio_init_all(); rt_hw_uart_init(); diff --git a/bsp/raspberry-pico/libraries/pico-sdk/src/rp2_common/pico_runtime/runtime.c b/bsp/raspberry-pico/libraries/pico-sdk/src/rp2_common/pico_runtime/runtime.c index 98104db73a..af1bdd2b3a 100644 --- a/bsp/raspberry-pico/libraries/pico-sdk/src/rp2_common/pico_runtime/runtime.c +++ b/bsp/raspberry-pico/libraries/pico-sdk/src/rp2_common/pico_runtime/runtime.c @@ -136,20 +136,6 @@ void runtime_init(void) { spin_locks_reset(); irq_init_priorities(); - alarm_pool_init_default(); - - // Start and end points of the constructor list, - // defined by the linker script. - extern void (*__init_array_start)(); - extern void (*__init_array_end)(); - - // Call each function in the list. - // We have to take the address of the symbols, as __init_array_start *is* - // the first function pointer, not the address of it. - for (void (**p)() = &__init_array_start; p < &__init_array_end; ++p) { - (*p)(); - } - } void _exit(int status) {