STM32Cube IDE Один и тот же код запускается или работает с ошибкой ... Русский рулет - PullRequest
0 голосов
/ 25 февраля 2020

Я столкнулся с проблемой, когда моя IDE троллила меня.

У меня есть простой проект, где я прослеживаю от mcu через ITM (SWO), и в основном происходит, когда я запускаю отладчик STlink, он подключается к программе перепрошивки устройства, а затем IDE игнорирует все точки останова. Я остановил его вручную, чтобы обнаружить, что я перешел от обработчика сброса к обработчику по умолчанию, я назначил ему все обработчики, кроме hardfault.

И тогда началось странное дерьмо. Я проверил свой код ... ничего криминального. вообще .. проверил память, все там, где она должна быть. проверил память для таблицы векторов ... снова сначала указатель стека, затем адрес обработчика сброса (режим большого пальца). все хорошо. я снова запускаю отладчик, и он работает как шарм.

Так что я решил перезапустить отладчик снова, не меняя ничего в коде, и я попал в hardfault ... потом я снова его не исправлю, но я в обработчике по умолчанию. и это случайно ошибается или работает. я потратил 2-3 часа на проверку каждого бита и инструкции, чтобы понять, что может go не так. но похоже, что он случайным образом выбирает, куда go - hardfault, запускается нормально или решил, что ему нужен обработчик по умолчанию.

В соответствии с этой памятью следует по крайней мере попытаться go сбросить обработчик enter image description here

0x20010000 Указатель стека - адрес le git, проверил его.

0x080001D5 указывает на сброс обработчика на 0x080001D4.

0x080001C9 Адрес обработчика по умолчанию, и следующий - hardfault.

Теперь еще больше странные вещи ... я переключил отладчик на OPENOCD и ...

xPSR: 0x61000000 pc: 0x20000084 msp: 0x20010000

он явно старается загрузка из оперативной памяти, не знаю, почему или что происходит в моем обработчике сброса, явно указывает ему искать что-то еще. и затем после нескольких перезапусков отладчика он работает нормально.

ОБНОВЛЕНИЕ:

Теперь я на 100% уверен, что это IDE в стиле фанк. Я прошагал всю программу в отдельном клиенте openOCD, и он работает как шарм. никаких ошибок или других неожиданных переходов к обработчикам.

...