Цитата(Alechek @ May 16 2016, 22:09)

Единственное, для чего мне это понадобилось, это скинуть дамп регистров при возникновении Fault.
Пришлось написать вставку на ASM для копирования регистров в память (структуру). Остальная работа на C.
И где гарантия, что компилятор при очередной перекомпиляции, не разместит какие-то переменные в регистрах которые Вы хотели сохранить до вашей вставки?
Такое надо делать целиком в asm-функциях. Напишите ISR fault-ов полностью на asm, там всё элементарно.
Цитата(adnega @ May 17 2016, 01:59)

Реально, по значениям LR, PC, R0-R4 в подавляющем большинстве случаев можно найти причину фэйла.
Не знаю не знаю... У меня сохраняются все регистры + дамп стека. И то часто не хватает.
Цитата(aaarrr @ May 17 2016, 02:27)

У меня алгоритм такой:
Исключение -> запись контекста исключения в RAM -> перезапуск -> сохранение контекста на внешнем носителе или передача на отладочный сервер -> возобновление работы
У меня
все fault-ы примерно так же обрабатываются, только кроме дампа регистров сохраняю ещё и дамп текущего стека.
Отличия:
Для release-сборки: всё так же, кроме передачи на отладочный сервер.
Для debug-сборки: вместо перезапуска - переинициализация железа в минимальный дефолт-конфиг trap-режима и зацикливание в цикле периодического вывода инфы о событии в лог (UART). Чтобы не пропускать такие ошибки, а исправлять сразу.
Этот-же механизм используется для обработки программных критических ошибок (через SVC).
Цитата(aaarrr @ May 17 2016, 03:24)

На удаленном оборудовании пару раз выручало. Всех подробностей не вспомню, но потребовалось
Помогает очень часто в обнаружении редко проявляющихся ошибок. Когда тестируем сразу несколько десятков (а то и сотни) устройств в течение длительного времени (дни/недели непрерывной работы).
С JTAG-ом тут не посидишь, а вот устройства защёлкнувшиеся в trap-цикле сразу видны. А потом - по регистрам-стеку ищем причину.
И если такие ошибки проявились уже на объектах заказчика - тут другого выбора нет, очень помогает.
Без дампа стека вообще мало когда эта инфа помогает. Типичная ситуация: срабатывание исключения MPU защиты памяти при попытке обращения к недопустимой памяти изнутри memcpy().
От регистров почти никакого толку - в каком месте кода произошёл сбой? Зато по стеку можно легко проследить цепочку вызовов. Уже сколько так багов нашли.