Модуль трассировки HardFault с возможностью сохранения RTT буфера во Flash.
More...
Модуль трассировки HardFault с возможностью сохранения RTT буфера во Flash.
Этот модуль позволяет сохранять контекст процессора и последние символы RTT буфера при возникновении HardFault.
Механизм работы:
- При срабатывании HardFault вызывается HF_HandleFault(), который:
- Получает указатель на стек, где произошёл HardFault (MSP или PSP).
- Выводит значения регистров R0-R3, R12, LR, PC, PSR и системных регистров SCB.
- Формирует строку с регистрами и копирует последние символы RTT буфера.
- Сохраняет данные во Flash с базовым тегом HF_RTT_TAG_BASE.
- Для восстановления последнего HardFault используется HF_CheckRecovered(), который:
- Читает запись во Flash по базовому тегу.
- Выводит сохранённый RTT буфер и контекст регистров.
- Опционально стирает Flash после восстановления.
Параметры:
- HARDFAULT_SERIAL_TRACE - Включить обработку и serial трассировку Hardfault Если отключена то вставляются заглушки, никак не влияющие на параметры и остальную программу
- HF_RTT_TAG_BASE - Базовый тег RTT Flash для HardFault
- HF_RTT_TAIL_SIZE - Размер буфера RTT, который сохранится при Hardfault
- HF_STACK_DUMP_WORDS - Сколько слов стека будет проанализировано во время Hardfault
- HF_FLASH_ADDR - Адрес FLASH куда положится RTT буфер
- HF_RAM_END - Конец RAM памяти (чтобы во время анализа стека не выйти за пределы)
void Hardfault()
{
HF_HandleFault();
NVIC_SystemReset();
}
int main()
{
if(HF_CheckRecovered(0))
{
}
}
__STATIC_FORCEINLINE int RTT_EraseFlash(void)
Стирание сектора Flash с RTT-буфером
◆ HF_CheckRecovered
| #define HF_CheckRecovered |
( |
| ... | ) |
|
◆ HF_HandleFault
| #define HF_HandleFault |
( |
| ... | ) |
|