\doxysubsubsubsection{Hardfault trace defines }
\hypertarget{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t}{}\label{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t}\index{Hardfault trace defines@{Hardfault trace defines}}


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


Collaboration diagram for Hardfault trace defines\+:
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=306pt]{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t}
\end{center}
\end{figure}
\doxysubsubsubsubsubsection*{Classes}
\begin{DoxyCompactItemize}
\item 
struct \mbox{\hyperlink{struct_h_f___stack_frame__t}{HF\+\_\+\+Stack\+Frame\+\_\+t}}
\begin{DoxyCompactList}\small\item\em Контекст стек-\/фрейма процессора при Hard\+Fault. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsubsubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
\+\_\+\+\_\+\+STATIC\+\_\+\+FORCEINLINE int \mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_ga03f8b6f3b537ee1c8e91065c60db504f}{HF\+\_\+\+Check\+Recovered}} (int erase)
\begin{DoxyCompactList}\small\item\em Проверка и вывод последнего Hard\+Fault-\/трейса из Flash. \end{DoxyCompactList}\item 
\+\_\+\+\_\+\+STATIC\+\_\+\+FORCEINLINE void \mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_gadd8e10e7ec3b0204f7f92062ecd452f7}{HF\+\_\+\+Handle\+Fault}} (void)
\begin{DoxyCompactList}\small\item\em Обработчик Hard\+Fault. \end{DoxyCompactList}\end{DoxyCompactItemize}


\doxysubsubsubsubsection{Detailed Description}
Модуль трассировки Hard\+Fault с возможностью сохранения RTT буфера во Flash. 

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

Механизм работы\+:
\begin{DoxyItemize}
\item При срабатывании Hard\+Fault вызывается \doxylink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_gadd8e10e7ec3b0204f7f92062ecd452f7}{HF\+\_\+\+Handle\+Fault()}, который\+:
\begin{DoxyEnumerate}
\item Получает указатель на стек, где произошёл Hard\+Fault (MSP или PSP).
\item Выводит значения регистров R0-\/\+R3, R12, LR, PC, PSR и системных регистров SCB.
\item Формирует строку с регистрами и копирует последние символы RTT буфера.
\item Сохраняет данные во Flash с базовым тегом HF\+\_\+\+RTT\+\_\+\+TAG\+\_\+\+BASE.
\end{DoxyEnumerate}
\item Для восстановления последнего Hard\+Fault используется \doxylink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_ga03f8b6f3b537ee1c8e91065c60db504f}{HF\+\_\+\+Check\+Recovered()}, который\+:
\begin{DoxyEnumerate}
\item Читает запись во Flash по базовому тегу.
\item Выводит сохранённый RTT буфер и контекст регистров.
\item Опционально стирает Flash после восстановления.
\end{DoxyEnumerate}
\end{DoxyItemize}

Параметры\+:
\begin{DoxyItemize}
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_ga47f454f804b4dbc26cae079e8d8641e6}{HARDFAULT\+\_\+\+SERIAL\+\_\+\+TRACE} -\/ Включить обработку и serial трассировку Hardfault Если отключена то вставляются заглушки, никак не влияющие на параметры и остальную программу
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_gadc960255719c7eff4bdfaa850be9b313}{HF\+\_\+\+RTT\+\_\+\+TAG\+\_\+\+BASE} -\/ Базовый тег RTT Flash для Hard\+Fault
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_gafcc7ea03d4df8f1909e580b519a7f3ca}{HF\+\_\+\+RTT\+\_\+\+TAIL\+\_\+\+SIZE} -\/ Размер буфера RTT, который сохранится при Hardfault
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_gaa31234688b333a505aaa57b8ecdedf5b}{HF\+\_\+\+STACK\+\_\+\+DUMP\+\_\+\+WORDS} -\/ Сколько слов стека будет проанализировано во время Hardfault
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_ga0c602733a4a359bf8c095d71cd4d0f63}{HF\+\_\+\+FLASH\+\_\+\+ADDR} -\/ Адрес FLASH куда положится RTT буфер
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_ga92d0d14732edb7dfa21d483304bdb051}{HF\+\_\+\+RAM\+\_\+\+END} -\/ Конец RAM памяти (чтобы во время анализа стека не выйти за пределы)
\end{DoxyItemize}


\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keywordtype}{void}\ Hardfault()}
\DoxyCodeLine{\{}
\DoxyCodeLine{\ \ \mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_gadd8e10e7ec3b0204f7f92062ecd452f7}{HF\_HandleFault}}();}
\DoxyCodeLine{\ \ NVIC\_SystemReset();}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keywordtype}{int}\ main()}
\DoxyCodeLine{\{}
\DoxyCodeLine{\ \ \textcolor{keywordflow}{if}(\mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_ga03f8b6f3b537ee1c8e91065c60db504f}{HF\_CheckRecovered}}(0))}
\DoxyCodeLine{\ \ \{}
\DoxyCodeLine{\ \ \ \ \textcolor{comment}{//set\ hardfault\ error}}
\DoxyCodeLine{\ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga8d8c6850e32b42871faefce3352012d1}{RTT\_EraseFlash}}();\ \textcolor{comment}{//\ erase\ rtt\ flash\ after\ message\ readed}}
\DoxyCodeLine{\ \ \}}
\DoxyCodeLine{\}\ \ }

\end{DoxyCode}
 

\label{doc-func-members}
\Hypertarget{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_doc-func-members}
\doxysubsubsubsubsection{Function Documentation}
\Hypertarget{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_ga03f8b6f3b537ee1c8e91065c60db504f}\index{Hardfault trace defines@{Hardfault trace defines}!HF\_CheckRecovered@{HF\_CheckRecovered}}
\index{HF\_CheckRecovered@{HF\_CheckRecovered}!Hardfault trace defines@{Hardfault trace defines}}
\doxysubsubsubsubsubsection{\texorpdfstring{HF\_CheckRecovered()}{HF\_CheckRecovered()}}
{\footnotesize\ttfamily \label{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_ga03f8b6f3b537ee1c8e91065c60db504f} 
\+\_\+\+\_\+\+STATIC\+\_\+\+FORCEINLINE int HF\+\_\+\+Check\+Recovered (\begin{DoxyParamCaption}\item[{int}]{erase}{}\end{DoxyParamCaption})}



Проверка и вывод последнего Hard\+Fault-\/трейса из Flash. 

Функция ищет последнюю запись Hard\+Fault по базовому тегу HF\+\_\+\+RTT\+\_\+\+TAG\+\_\+\+BASE и выводит её содержимое в консоль. После успешного вывода Flash можно опционально очистить.

\begin{DoxyReturn}{Returns}
int
\begin{DoxyItemize}
\item 1 — данные Hard\+Fault найдены и выведены
\item 0 — данные отсутствуют или тег не найден
\end{DoxyItemize}
\end{DoxyReturn}
\begin{DoxyNote}{Note}
Вызов рекомендуется при инициализации приложения для анализа предыдущего сбоя. 
\end{DoxyNote}


Definition at line \mbox{\hyperlink{trace_8h_source_l00499}{499}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.

\Hypertarget{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_gadd8e10e7ec3b0204f7f92062ecd452f7}\index{Hardfault trace defines@{Hardfault trace defines}!HF\_HandleFault@{HF\_HandleFault}}
\index{HF\_HandleFault@{HF\_HandleFault}!Hardfault trace defines@{Hardfault trace defines}}
\doxysubsubsubsubsubsection{\texorpdfstring{HF\_HandleFault()}{HF\_HandleFault()}}
{\footnotesize\ttfamily \label{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_gadd8e10e7ec3b0204f7f92062ecd452f7} 
\+\_\+\+\_\+\+STATIC\+\_\+\+FORCEINLINE void HF\+\_\+\+Handle\+Fault (\begin{DoxyParamCaption}\item[{void}]{}{}\end{DoxyParamCaption})}



Обработчик Hard\+Fault. 

Вызывается из прерывания Hard\+Fault или в любом месте где понятно что ошибка критическая. Последовательно выполняет\+:
\begin{DoxyEnumerate}
\item Определяет активный стек (MSP или PSP) на момент сбоя.
\item Сохраняет значения регистров R0-\/\+R3, R12, LR, PC, PSR.
\item Выводит системные регистры CFSR, HFSR, DFSR, AFSR, MMFAR, BFAR.
\item Формирует stack trace с 3 уровнями возврата.
\item Копирует последние символы RTT буфера.
\item Сохраняет все данные во Flash через RTT\+\_\+\+Save\+To\+Flash с базовым тегом HF\+\_\+\+RTT\+\_\+\+TAG\+\_\+\+BASE.
\end{DoxyEnumerate}

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


Definition at line \mbox{\hyperlink{trace_8h_source_l00540}{540}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.

