Loading...
Searching...
No Matches
Hardfault trace defines
My Libs » General Tools » Trace defines

Модуль трассировки HardFault с возможностью сохранения RTT буфера во Flash. More...

Collaboration diagram for Hardfault trace defines:

## Classes

struct | HF_StackFrame_t
| Контекст стек-фрейма процессора при HardFault. More...

## Functions

__STATIC_FORCEINLINE int | HF_CheckRecovered (int erase)
| Проверка и вывод последнего HardFault-трейса из Flash.
__STATIC_FORCEINLINE void | HF_HandleFault (void)
| Обработчик HardFault.

## Detailed Description

Модуль трассировки HardFault с возможностью сохранения RTT буфера во Flash.

Этот модуль позволяет сохранять контекст процессора и последние символы RTT буфера при возникновении HardFault.

Механизм работы:

- При срабатывании HardFault вызывается HF_HandleFault(), который:
  1. Получает указатель на стек, где произошёл HardFault (MSP или PSP).
  2. Выводит значения регистров R0-R3, R12, LR, PC, PSR и системных регистров SCB.
  3. Формирует строку с регистрами и копирует последние символы RTT буфера.
  4. Сохраняет данные во Flash с базовым тегом HF_RTT_TAG_BASE.
- Для восстановления последнего HardFault используется HF_CheckRecovered(), который:
  1. Читает запись во Flash по базовому тегу.
  2. Выводит сохранённый RTT буфер и контекст регистров.
  3. Опционально стирает 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))
{
//set hardfault error
RTT_EraseFlash(); // erase rtt flash after message readed
}
}
HF_CheckRecovered
__STATIC_FORCEINLINE int HF_CheckRecovered(int erase)
Проверка и вывод последнего HardFault-трейса из Flash.
Definition trace.h:499
HF_HandleFault
__STATIC_FORCEINLINE void HF_HandleFault(void)
Обработчик HardFault.
Definition trace.h:540
RTT_EraseFlash
__STATIC_FORCEINLINE int RTT_EraseFlash(void)
Стирание сектора Flash с RTT-буфером
Definition trace.h:388

## Function Documentation

## HF_CheckRecovered()

__STATIC_FORCEINLINE int HF_CheckRecovered | ( | int | erase | ) |

Проверка и вывод последнего HardFault-трейса из Flash.

Функция ищет последнюю запись HardFault по базовому тегу HF_RTT_TAG_BASE и выводит её содержимое в консоль. После успешного вывода Flash можно опционально очистить.

Returns
  int
  - 1 — данные HardFault найдены и выведены
  - 0 — данные отсутствуют или тег не найден

Note
  Вызов рекомендуется при инициализации приложения для анализа предыдущего сбоя.

Definition at line 499 of file trace.h.

## HF_HandleFault()

__STATIC_FORCEINLINE void HF_HandleFault | ( | void |  | ) |

Обработчик HardFault.

Вызывается из прерывания HardFault или в любом месте где понятно что ошибка критическая. Последовательно выполняет:

1. Определяет активный стек (MSP или PSP) на момент сбоя.
2. Сохраняет значения регистров R0-R3, R12, LR, PC, PSR.
3. Выводит системные регистры CFSR, HFSR, DFSR, AFSR, MMFAR, BFAR.
4. Формирует stack trace с 3 уровнями возврата.
5. Копирует последние символы RTT буфера.
6. Сохраняет все данные во Flash через RTT_SaveToFlash с базовым тегом HF_RTT_TAG_BASE.

Note
  Функция защищена, так как вызывается в контексте сбоя — минимизирует использование вызовов HAL.

Definition at line 540 of file trace.h.