ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
23 апреля
971572 Топик полностью
Nikolay_Po (19.01.2020 00:29, просмотров: 661) ответил Nikolay_Po на [РЕШЕНО] GNU Tools for STM32 7-2018-q2-update (и вообще любой arm-none-eabi). Не могу добиться появления глобальных массивов в *.map
Вроде накопал зацепку. Что имею: 
  • Работает только в режиме отладки. Заливка прошивки "релиз" без отладчика не работает, контроллер на Reset не реагирует, сигнал на отладочном выводе не появляется.
  • Самого факта подключения, прошивки и начала отладки добился с большим трудом. Может, что-то осталось не в порядке, см. следующий пункт.
  • Долго не удавалось найти комбинацию GDB-OpenOCD, дающую исполнение кода в отладке. Заработал только режим GDB, пришлось собрать свой v8.3, в связке с самособранным же OpenOCD. Режим "Remote target", GDB connection string: | openocd --pipe -f interface/cmsis-dap.cfg -c "transport select swd" -f target/stm32f1x.cfg
  • Несмотря на то, что отладка заработала, осталась странность. Вместо того, чтобы выходить сразу на main() и останавливаться там, отладчик останавливался на странных адресах. И лишь после нажатия "Resume" попадал на штатную точку останова main(). См. лог OpenOCD ниже.
  • В попытке найти адрес вектора Reset и куда он программируется, наткнулся на журнал OpenOCD. А в нём - адрес msp очень похожий на адрес места, где происходит коллизия нормально расположенных данных с ненормально расположенным стеком.
  • Вот лог нештатного останова при старте отладки:
    Warn : deprecated option: -p/--pipe. Use '-c "gdb_port pipe; log_output openocd.log"' instead.
    swd
    Info : Listening on port 6666 for tcl connections
    Info : Listening on port 4444 for telnet connections
    Info : CMSIS-DAP: SWD  Supported
    Info : CMSIS-DAP: JTAG Supported
    Info : CMSIS-DAP: FW Version = 1.10
    Info : CMSIS-DAP: Interface Initialised (SWD)
    Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 0 TDO = 1 nTRST = 0 nRESET = 0
    Info : CMSIS-DAP: Interface ready
    Info : clock speed 1000 kHz
    Info : SWD DPIDR 0x1ba01477
    Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
    Info : accepting 'gdb' connection from pipe
    Info : device id = 0x10016418
    Info : flash size = 256kbytes
    undefined debug reason 8 - target needs reset
    target halted due to debug-request, current mode: Thread 
    xPSR: 0x01000000 pc: 0x1fffe9c0 msp: 0x20000ff0
    target halted due to debug-request, current mode: Thread 
    xPSR: 0x01000000 pc: 0x1fffe9c0 msp: 0x20000ff0
    Жму "Resume". Штатный останов в main(). В логе новых записей не появляется. Жму Resume ещё раз, чтобы выполнить программу. Прогамма работает, потом сбоит. При сбое появляется продолжение лога:
    Error: stm32f1x.cpu -- clearing lockup after double fault
    Polling target stm32f1x.cpu failed, trying to reexamine
    Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
    Info : SWD DPIDR 0x1ba01477
    Error: Failed to read memory at 0x06ad4714
    Info : SWD DPIDR 0x1ba01477
    Error: Failed to read memory at 0x06ad4704
    Info : SWD DPIDR 0x1ba01477
    Error: Failed to read memory at 0x0000ffc4
    Info : SWD DPIDR 0x1ba01477
    Error: Failed to read memory at 0x07cdfffc
    Info : SWD DPIDR 0x1ba01477
    Error: Failed to read memory at 0x07cdfffa
    IDE показывает картинку:
    image