Как стать автором
Обновить

Комментарии 11

А при сбросе память обнуляется? Я к тому, что нельзя ли все то же самое в начале программы делать, чтобы даже по вотчдогу дамп сохранялся?

Хм, а вот это очень интересный вопрос!
Действительно, у меня кольцевой буфер лога в ОЗУ, которая не обнуляется при старте. Точнее, инициализируется нулем размер занятой памяти, но сами данные в буфере не затираются. И если была перезагрузка по настоящему сторожевому, то можно попытаться проанализировать оставшиеся данные в буфере!!!
Большое спасибо за идею!

Что-то вроде __no_init в GCC? ЕМНИП.

что-то вроде этого

При сбросе память не обнуляется, её обнуляют, если можно так сказать, функции инициализации из crt0.o, если конечно вы не сами это реализуете, а если сами, то и проблем нет перечитать при старте всю оперативу или записать во флэш до момента её инициализации.

Примерно так я и планирую сделать. Должно получиться даже проще, чем текущая реализация, нужно только продумать логику и скорее всего придется задействовать Backup registers (BKP).
Спасибо за статью. Тема интересная, но времени нет самому поэкспериментировать. Нашёл весьма интересный материал по дальнейшему развитию:
embeddedartistry.com/blog/2021/01/18/is-memfault-the-future-of-fault-debugging-we-think-so
По сути, готовое решение для сбора, отправки и исследования дампов.
Спасибо за интересную ссылку. И хотя на первый взгляд там решение более серьезное и фундаментальное, но все равно будет интересно его изучить.
Как вариант, дамп можно еще в цикле выводить в SWO. К контролеру при этом подключаться программатором в hot plug режиме без сброса. Такой варинт хорош, если без вочдога работать.
Такой вариант хорош, если идет отладка устройства, а если устройство находится в эксплуатации и ошибка имеет плавающий характер?
Тогда да, только во флеш контроллера или на внешний носитель.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.