Я хочу отладить мое приложение для микроконтроллера STM32F107 с помощью JLinkGDBServer и клиента arm-none-eabi-gdb. Я использую файл сборки запуска и скрипт компоновщика, предоставленный по умолчанию ST для микроконтроллера STM32F107.

Все работает нормально, если я не изменяю скрипт компоновщика: в одном окне терминала я запускаю arm-none-eabi-gdb , а в другом терминале запускаю сервер GDB как JLinkGDBServer -select USB -device STM32F107RC -if SWD -speed auto . Затем на клиенте GDB я подключаюсь к серверу через порт 2331, load свой файл elf, monitor semihosting enable , monitor reset и, наконец, continue . Программа запускается в Reset_Handler (я вижу, что ее адрес записан в регистр ПК) и отлично работает, и я даже вижу свой стандартный вывод в новом окне терминала, работающем по telnet через порт 2333.

Проблема запускается, когда я изменяю скрипт компоновщика LD, чтобы иметь собственные адреса. Часть FLASH по умолчанию начинается с 0x08000000, но я хочу зарезервировать это место для загрузчика и некоторых других данных и сохранить мою программу в 0x08004000. После этого изменения в скрипте компоновщика я выполняю те же шаги, что и раньше, для отладки, но это не работает. Кажется, мое приложение запускается по некоторому случайному адресу, а не с Reset_Handler. Однако, согласно выводу сервера GDB, адрес Reset_Handler правильно записан в регистр ПК.

Что мне не хватает?

0