STM32Cube IDE Тот же код в конечном итоге запускается или находится в жестком сбое ... Русский рулет
Я столкнулся с проблемой, когда моя IDE меня троллит.
У меня есть простой проект, в котором я отслеживаю обратную связь с mcu через ITM (SWO), и в основном то, что происходит, - это когда я запускаю отладчик STlink, он подключается к программе мигания устройства, а затем IDE игнорирует все точки останова. Я останавливаю его вручную, чтобы обнаружить, что я перешел от обработчика сброса к обработчику по умолчанию, я присвоил ему псевдонимы всех обработчиков, кроме жесткого сбоя.
И тогда начали происходить странные вещи. я проверил свой код... ничего криминального. вообще.. проверил память, все там где положено быть. проверил память для таблицы векторов... снова сначала указатель стека, затем адрес обработчика сброса (режим большого пальца). все в порядке. Я снова запускаю отладчик, и он работает как шарм.
Поэтому я решил снова перезапустить отладчик, ничего не меняя в коде, и я оказался в состоянии жесткого сбоя... затем я снова запускаю его без жесткого сбоя, но я использую обработчик по умолчанию. и он случайно выходит из строя или работает. Я потратил 2-3 часа, проверяя каждый бит и инструкции, чтобы увидеть, что может пойти не так. но похоже, что он случайным образом выбирает, куда идти - hardfault, запускать нормально или решил, что ему нужен обработчик по умолчанию.
Согласно этой памяти он должен хотя бы попытаться перейти к обработчику сброса
0x20010000 Указатель стека - адрес правильный, проверил.
0x080001D5 указывает на сброс обработчика 0x080001D4.
0x080001C9 Адрес обработчика по умолчанию, следующий - hardfault.
Теперь еще более странные вещи... Я переключил отладчик на OPENOCD и...
xPSR: 0x61000000 pc: 0x20000084 msp: 0x20010000
он явно пытается загрузиться из ОЗУ, не знаю, почему и что происходит, мой обработчик сброса ясно говорит ему искать что-то еще. а затем после нескольких перезапусков отладчика он работает нормально.
ОБНОВИТЬ:
Теперь я на 100% уверен, что это фанковое поведение IDE. Я просматриваю всю программу в отдельном клиенте openOCD, и она работает как шарм. никаких аппаратных сбоев или других неожиданных переходов к обработчикам.