Я пытаюсь сделать прошивку для микроконтроллера STM32L030x6.
Я сделал простой код, который работает на плате eval с микроконтроллером STM32L030x8.«Кажется, что работает», я имею в виду, что я могу достичь основной функции и переключить gpio.
Но при перепрошивке на мою цель STM32L030x6 я очень рано получаю ошибку в коде запуска:
Reset_Handler:
ldr r0, =_estack
mov sp, r0 /* set stack pointer */
/* Copy the data segment initializers from flash to SRAM */
movs r1, #0
b LoopCopyDataInit
CopyDataInit:
ldr r3, =_sidata
ldr r3, [r3, r1]
str r3, [r0, r1]
adds r1, r1, #4
LoopCopyDataInit:
ldr r0, =_sdata
ldr r3, =_edata
adds r2, r0, r1
cmp r2, r3
bcc CopyDataInit
ldr r2, =_sbss
b LoopFillZerobss
/* Zero fill the bss segment. */
FillZerobss:
movs r3, #0
str r3, [r2]
adds r2, r2, #4
LoopFillZerobss:
ldr r3, = _ebss
cmp r2, r3
bcc FillZerobss
/* Call the clock system intitialization function.*/
bl SystemInit
/* Call static constructors */
bl __libc_init_array <-------------- after a breakpoint here, typing "ni" in gdb hardaulft
/* Call the application's entry point.*/
bl main <----------------------------- never reach here
LoopForever:
b LoopForever
Поскольку размеры флэш-памяти различны, я соответственно изменил скрипт компоновщика, поэтому инициализация памяти должна быть в порядке.
Я не уверен, что делает "__libc_init_array", его часть libc (newlib-nano в моемcase).
Одна интересная вещь заключается в том, что, если я прокомментирую вызов «__libc_init_array», он все равно будет работать нормально на доске eval и по-прежнему будет жестко сбивать мою цель.Так что, возможно, проблема до вызова.
Я вполне уверен с SystemInit, так как это шаблон ST, который обрабатывает оба MCU.
Вероятно, это не аппаратная проблема, так какИспользуя Keil, я могу успешно прошить свою цель и запустить простой код приложения.
Есть идеи, в чем может быть проблема?Итак, понимание этого звонка в libc?
Большое спасибо заранее