У меня есть приложение, которое я портирую из Keil IDE для сборки с помощью цепочки инструментов GNU из-за проблем с лицензией. Я успешно смог установить, собрать, прошить и запустить приложение на устройстве.
Приложение на стороне GNU по какой-то причине застревает в слабосвязанном обработчике IRQ для WWDG, который представляет собой бесконечный цикл. Приложение не включает WWDG и по умолчанию отключено при сбросе. Я также проверил, что регистры конфигурации имеют начальные значения по умолчанию.
Единственным отличием, кроме компиляторов, являются файлы компоновки и запуска. Однако как файлы запуска, так и файлы компоновщика, используемые обеими цепями инструментов, являются значениями по умолчанию, сгенерированными STM.
Есть идеи, что может быть причиной этого? Я нахожусь в конце моего ума здесь.
Используя stm32f103XX, дайте мне знать, будет ли полезна любая другая информация.
РЕДАКТИРОВАТЬ: Используя комментарии ниже, я смог убедиться, что это на самом деле HardFault_Handler, который запускается. Я включил вывод обратной трассировки ниже, если это может помочь
GDB BT:
0 HardFault_Handler()
1 (обработчик сигнала вызван)
2 0x720a3de в?? ()
3 0x80005534 в foo()
Backtrace остановлен: предыдущий кадр идентичен этому кадру (поврежденный стек?)
2 вещи выделяются для меня, хотя я не эксперт GDB. 1) foo не является функцией, это константный массив символов и 2) 0x0720a3de не является действительным адресом памяти, диапазон адресов флэш-памяти начинается с 0x08000000