\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*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_ga8229256a4357011dd0f61965d8388741}{HF\+\_\+\+Check\+Recovered}}(...)
\item 
\#define \mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_ga46c193c1f17abd52f0c4846ef97f7f1a}{HF\+\_\+\+Handle\+Fault}}(...)
\end{DoxyCompactItemize}


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

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

Механизм работы\+:
\begin{DoxyItemize}
\item При срабатывании Hard\+Fault вызывается 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 используется 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{\ \ HF\_HandleFault();}
\DoxyCodeLine{\ \ NVIC\_SystemReset();}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keywordtype}{int}\ main()}
\DoxyCodeLine{\{}
\DoxyCodeLine{\ \ \textcolor{keywordflow}{if}(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-define-members}
\Hypertarget{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_doc-define-members}
\doxysubsubsubsubsection{Macro Definition Documentation}
\Hypertarget{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_ga8229256a4357011dd0f61965d8388741}\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_ga8229256a4357011dd0f61965d8388741} 
\#define HF\+\_\+\+Check\+Recovered(\begin{DoxyParamCaption}\item[{}]{}...{}\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{0}

\end{DoxyCode}


Definition at line \mbox{\hyperlink{trace_8h_source_l00581}{581}} 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_ga46c193c1f17abd52f0c4846ef97f7f1a}\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_ga46c193c1f17abd52f0c4846ef97f7f1a} 
\#define HF\+\_\+\+Handle\+Fault(\begin{DoxyParamCaption}\item[{}]{}...{}\end{DoxyParamCaption})}



Definition at line \mbox{\hyperlink{trace_8h_source_l00582}{582}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.

