Программирование STM32F0 с помощью GCC arm-none-eabi: ошибка в __libc_init_array - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь сделать прошивку для микроконтроллера 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?

Большое спасибо заранее

1 Ответ

0 голосов
/ 28 сентября 2018

Поскольку размеры флэш-памяти различны, я соответственно изменил скрипт компоновщика

Могу поспорить, что вы не изменили начальный адрес стека (и, вероятно, размер ОЗУ) в таблице векторов, поэтомупервый вызов вызывает HF.

Кстати, командная строка GDB в 21 веке?Пустая трата времени и крайне неудобно.Установите Atollic Studio - это бесплатно и поддерживается STM (собственно, STM является владельцем компании).Легко создавать проекты.

Если вы собираетесь делать это вручную, это будет способом стресса и разочарования.

...