Сделана независимость .h библиотек от таргета и HAL (насколько возможно)

This commit is contained in:
2025-10-20 08:48:22 +03:00
parent caf08ca619
commit 37843e4bef
48 changed files with 2457 additions and 2078 deletions

View File

@@ -33,13 +33,15 @@ struct \mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}}
\#define \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gaff223481fcffea77394a331afde29fdc}{PARAM\+\_\+\+SCALE\+\_\+\+Q16}}(x, min\+\_\+val, max\+\_\+val)
\begin{DoxyCompactList}\small\item\em Линейное масштабирование x из диапазона \mbox{[}min\+\_\+val, max\+\_\+val\mbox{]} в Q16.\+16 \mbox{[}0, 65536) \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga71a0c240c667e976d9caef391ab767ba}{PARAM\+\_\+\+UNSCALE\+\_\+\+Q16}}(q16\+\_\+val, min\+\_\+val, max\+\_\+val)
\begin{DoxyCompactList}\small\item\em Обратное линейное масштабирование Q16.\+16 значения в диапазон \mbox{[}min\+\_\+val, max\+\_\+val\mbox{]}. \end{DoxyCompactList}\end{DoxyCompactItemize}
\begin{DoxyCompactList}\small\item\em Обратное линейное масштабирование Q16.\+16 значения в диапазон \mbox{[}min\+\_\+val, max\+\_\+val\mbox{]}. \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga9c853b02c22f26023c34d1d404b6d653}{local\+\_\+time}}()
\begin{DoxyCompactList}\small\item\em Локальное время \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsection*{Functions}
\begin{DoxyCompactItemize}
\item
\+\_\+\+\_\+\+STATIC\+\_\+\+INLINE void \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gac21587fe68fe3635525358ac3f4059d9}{Evolve\+Optimizer\+\_\+\+Init}} (\mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}} \texorpdfstring{$\ast$}{*}opt, uint16\+\_\+t n\+\_\+params, uint16\+\_\+t n\+\_\+cand, uint16\+\_\+t n\+\_\+best, uint16\+\_\+t iq\+\_\+mutation, int32\+\_\+t \texorpdfstring{$\ast$}{*}start\+\_\+params)
\+\_\+\+\_\+\+STATIC\+\_\+\+INLINE int \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gadaf3a90724197e1737d5c70c7bcc75e1}{Evolve\+Optimizer\+\_\+\+Init}} (\mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}} \texorpdfstring{$\ast$}{*}opt, uint16\+\_\+t n\+\_\+params, uint16\+\_\+t n\+\_\+cand, uint16\+\_\+t n\+\_\+best, uint16\+\_\+t iq\+\_\+mutation, int32\+\_\+t \texorpdfstring{$\ast$}{*}start\+\_\+params)
\begin{DoxyCompactList}\small\item\em Инициализация эволюционного оптимизатора. \end{DoxyCompactList}\item
\+\_\+\+\_\+\+STATIC\+\_\+\+INLINE void \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga1ba2fa963c9ae12625be1b7c20718563}{Evolve\+Optimizer\+\_\+\+Step}} (\mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}} \texorpdfstring{$\ast$}{*}opt, int32\+\_\+t \texorpdfstring{$\ast$}{*}params, int32\+\_\+t loss)
\+\_\+\+\_\+\+STATIC\+\_\+\+INLINE int \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga75acd71c85d4e60dc0eb31bc5780086a}{Evolve\+Optimizer\+\_\+\+Step}} (\mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}} \texorpdfstring{$\ast$}{*}opt, int32\+\_\+t \texorpdfstring{$\ast$}{*}params, int32\+\_\+t loss)
\begin{DoxyCompactList}\small\item\em Один шаг эволюционного оптимизатора. \end{DoxyCompactList}\end{DoxyCompactItemize}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -62,7 +62,7 @@ Collaboration diagram for GPIO trace defines\+:\nopagebreak
\item GPIO\+\_\+\+TRACE\+\_\+\+ENABLE определён -\/ устанавливает бит сброса через BSRR (({\itshape pin})\texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<}16)
\end{DoxyItemize}
Definition at line \mbox{\hyperlink{trace_8h_source_l00138}{138}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00142}{142}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
\Hypertarget{group___t_r_a_c_e___g_p_i_o_ga02a6a7b273766121db8ad4a1371373eb}\index{GPIO trace defines@{GPIO trace defines}!TRACE\_GPIO\_SET@{TRACE\_GPIO\_SET}}
\index{TRACE\_GPIO\_SET@{TRACE\_GPIO\_SET}!GPIO trace defines@{GPIO trace defines}}
@@ -92,5 +92,5 @@ Definition at line \mbox{\hyperlink{trace_8h_source_l00138}{138}} of file \mbox{
\item GPIO\+\_\+\+TRACE\+\_\+\+ENABLE определён -\/ устанавливает бит установки через BSRR ({\itshape pin})
\end{DoxyItemize}
Definition at line \mbox{\hyperlink{trace_8h_source_l00137}{137}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00141}{141}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.

View File

@@ -44,7 +44,21 @@ struct \mbox{\hyperlink{struct_h_f___stack_frame__t}{HF\+\_\+\+Stack\+Frame\+\_\
\begin{DoxyEnumerate}
\item Читает запись во Flash по базовому тегу.
\item Выводит сохранённый RTT буфер и контекст регистров.
\item Опционально стирает Flash после восстановления.
\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{\{}
@@ -63,8 +77,6 @@ struct \mbox{\hyperlink{struct_h_f___stack_frame__t}{HF\+\_\+\+Stack\+Frame\+\_\
\end{DoxyCode}
\end{DoxyEnumerate}
\end{DoxyItemize}
\label{doc-func-members}
\Hypertarget{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_doc-func-members}
@@ -93,7 +105,7 @@ int
\end{DoxyNote}
Definition at line \mbox{\hyperlink{trace_8h_source_l00464}{464}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00486}{486}} 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}}
@@ -120,5 +132,5 @@ Definition at line \mbox{\hyperlink{trace_8h_source_l00464}{464}} of file \mbox{
\end{DoxyNote}
Definition at line \mbox{\hyperlink{trace_8h_source_l00505}{505}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00527}{527}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.

View File

@@ -44,7 +44,16 @@ struct \mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\+\_\+\+Flash\+Header
если слот с таким тегом уже занят, запись не выполняется. ~\newline
\item Автоинкремент позволяет хранить несколько последовательных записей в пределах одного базового тега, ~\newline
без необходимости вручную отслеживать адреса Flash или позиции буферов.
без необходимости вручную отслеживать адреса Flash или позиции буферов. ~\newline
\end{DoxyItemize}
Параметры\+:
\begin{DoxyItemize}
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_ga501312b24e322de4dd6755ad442f0ba3}{RTT\+\_\+\+FLASH\+\_\+\+BUFFER\+\_\+\+SIZE} -\/ Размер буфера RTT в Flash
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_ga3bc1b76864e1d32cbdd174d4caae7724}{RTT\+\_\+\+FLASH\+\_\+\+SECTOR} -\/ Сектор FLASH куда положится RTT буфер
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_ga8e56f75d3ab8a89ddde1404ae23c3297}{RTT\+\_\+\+FLASH\+\_\+\+SECTOR\+\_\+\+START} -\/ Начало сектора RTT\+\_\+\+FLASH\+\_\+\+SECTOR
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_gafeca0be3688dea07ff443f894668003d}{RTT\+\_\+\+FLASH\+\_\+\+SECTOR\+\_\+\+END} -\/ Конец сектора RTT\+\_\+\+FLASH\+\_\+\+SECTOR
\end{DoxyItemize}
\label{doc-func-members}
@@ -62,7 +71,7 @@ struct \mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\+\_\+\+Flash\+Header
Сбрасывает ошибки Flash и ожидает готовности перед записью
Definition at line \mbox{\hyperlink{trace_8h_source_l00179}{179}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00190}{190}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
\Hypertarget{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga79f222c8ab644de4d47f07528d1edd63}\index{Flash RTT Buffer@{Flash RTT Buffer}!RTT\_SaveToFlash@{RTT\_SaveToFlash}}
\index{RTT\_SaveToFlash@{RTT\_SaveToFlash}!Flash RTT Buffer@{Flash RTT Buffer}}
@@ -92,7 +101,7 @@ Definition at line \mbox{\hyperlink{trace_8h_source_l00179}{179}} of file \mbox{
\item Если конкретный (младший байт != 0) — запись выполняется только с этим тегом, иначе ошибка.
\end{DoxyItemize}
Definition at line \mbox{\hyperlink{trace_8h_source_l00202}{202}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00214}{214}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
\Hypertarget{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga734b2ebbf0c77699b739013878cfd146}\index{Flash RTT Buffer@{Flash RTT Buffer}!RTT\_ReadFromFlash@{RTT\_ReadFromFlash}}
\index{RTT\_ReadFromFlash@{RTT\_ReadFromFlash}!Flash RTT Buffer@{Flash RTT Buffer}}
@@ -124,7 +133,7 @@ Definition at line \mbox{\hyperlink{trace_8h_source_l00202}{202}} of file \mbox{
\item Если конкретный (младший байт != 0) — прочитывается именно эта запись.
\end{DoxyItemize}
Definition at line \mbox{\hyperlink{trace_8h_source_l00299}{299}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00311}{311}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
\Hypertarget{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga8d8c6850e32b42871faefce3352012d1}\index{Flash RTT Buffer@{Flash RTT Buffer}!RTT\_EraseFlash@{RTT\_EraseFlash}}
\index{RTT\_EraseFlash@{RTT\_EraseFlash}!Flash RTT Buffer@{Flash RTT Buffer}}
@@ -138,5 +147,5 @@ Definition at line \mbox{\hyperlink{trace_8h_source_l00299}{299}} of file \mbox{
Definition at line \mbox{\hyperlink{trace_8h_source_l00363}{363}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00375}{375}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.

View File

@@ -24,10 +24,11 @@ Collaboration diagram for Serial trace defines\+:\nopagebreak
\doxysubsubsubsubsection{Detailed Description}
Дефайны для работы с serial трассировкой (SWO, RTT)
Определяется дефайн \doxylink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\+\_\+printf()} и \doxylink{group___t_r_a_c_e___s_e_r_i_a_l_ga730fb7b8d0bbb348dca73c15bd0e0b26}{log\+\_\+printf()} для работы с serial трассировкой\+:
В зависимости от настроек определяется дефайн \doxylink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\+\_\+printf()} и \doxylink{group___t_r_a_c_e___s_e_r_i_a_l_ga730fb7b8d0bbb348dca73c15bd0e0b26}{log\+\_\+printf()} для работы с трассировкой\+:
\begin{DoxyItemize}
\item для RTT это будет вызов функции SEGGER\+\_\+\+RTT\+\_\+printf(), с подключением библиотеки SEGGER\+\_\+\+RTT.\+h
\item для SWO это будет просто printf()
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_ga76936505ca200d2e61226b7ba68f27c6}{SERIAL\+\_\+\+TRACE\+\_\+\+ENABLE} -\/ Если трассировка отключена, то все дефайны определяются как \textquotesingle{}ничего\textquotesingle{} и на производительность кода не влияют
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_ga00ff2175bdc1fb11c8ec970ea3010dd8}{RTT\+\_\+\+TRACE\+\_\+\+ENABLE} -\/ для RTT это будет вызов функции SEGGER\+\_\+\+RTT\+\_\+printf(), с подключением библиотеки SEGGER\+\_\+\+RTT.\+h Предварительно надо подключить библиотеку SEGGER RTT и вызвать функцию SEGGER\+\_\+\+RTT\+\_\+\+Init()
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_gab8db9704b5d11858aa879689b9d36336}{SWO\+\_\+\+TRACE\+\_\+\+ENABLE} для SWO это будет просто printf()
Но библиотеку STDOUT надо подключить самостоятельно\+:
@@ -47,10 +48,8 @@ Collaboration diagram for Serial trace defines\+:\nopagebreak
\item Port = SW В вкладке Trace\+:
\item Указать Core Clock
\item Выставить Trace Port = SWO
\item ITM -\/ выбрать нужный порт (для Keil нулевой порт) ~\newline
\item ITM -\/ выбрать нужный порт (для Keil нулевой порт)
\end{DoxyItemize}
\item Если трассировка \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_ga76936505ca200d2e61226b7ba68f27c6}{SERIAL\+\_\+\+TRACE\+\_\+\+ENABLE} отключена, то все дефайны определяются как \textquotesingle{}ничего\textquotesingle{} и на производительность кода не влияют
\end{DoxyItemize}
\label{doc-define-members}
@@ -78,7 +77,7 @@ Collaboration diagram for Serial trace defines\+:\nopagebreak
\item NO\+\_\+\+TRACE -\/ пустой макрос
\end{DoxyItemize}
Definition at line \mbox{\hyperlink{trace_8h_source_l00067}{67}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00071}{71}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
\Hypertarget{group___t_r_a_c_e___s_e_r_i_a_l_ga730fb7b8d0bbb348dca73c15bd0e0b26}\index{Serial trace defines@{Serial trace defines}!log\_printf@{log\_printf}}
\index{log\_printf@{log\_printf}!Serial trace defines@{Serial trace defines}}
@@ -110,5 +109,5 @@ Definition at line \mbox{\hyperlink{trace_8h_source_l00067}{67}} of file \mbox{\
\item LOG\+\_\+\+LEVEL \texorpdfstring{$>$}{>}= 2 -\/ выводится время, TAG, имя файла и номер строки
\end{DoxyItemize}
Definition at line \mbox{\hyperlink{trace_8h_source_l00092}{92}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00096}{96}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.

View File

@@ -70,8 +70,11 @@ Collaboration diagram for Trackers defines\+:\nopagebreak
Также есть ряд функций (дефайнов) для обращения к элементам этой структуры.
\end{DoxyItemize}
Если трекеры \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_gac9eaedc31ab023ce7d6403999216e496}{TRACKERS\+\_\+\+ENABLE} отключены, то все дефайны определяются как ничего и на производительность кода не влияют ~\newline
Параметры для конфигурации\+:
\begin{DoxyItemize}
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_gac9eaedc31ab023ce7d6403999216e496}{TRACKERS\+\_\+\+ENABLE} -\/ Включить трекеры Если трекеры \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_gac9eaedc31ab023ce7d6403999216e496}{TRACKERS\+\_\+\+ENABLE} отключены, то все дефайны определяются как ничего и на производительность кода не влияют ~\newline
\end{DoxyItemize}
\begin{DoxyParagraph}{Пример\+:}
@@ -145,7 +148,7 @@ Collaboration diagram for Trackers defines\+:\nopagebreak
Также есть возможность объявить пользовательские переменные в количестве $<$num\+\_\+user\+\_\+vars$>$ штук.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00069}{69}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00070}{70}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_ga72be24629fedb8bf70e830373d151fbc}\index{Trackers defines@{Trackers defines}!num\_of\_usercnts@{num\_of\_usercnts}}
\index{num\_of\_usercnts@{num\_of\_usercnts}!Trackers defines@{Trackers defines}}
@@ -164,7 +167,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00069}{69}} of file \mbo
Definition at line \mbox{\hyperlink{trackers_8h_source_l00079}{79}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00080}{80}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_gadd7fd2c6e3a4800f1d5ddab35fd4b43e}\index{Trackers defines@{Trackers defines}!assert\_usertracker@{assert\_usertracker}}
\index{assert\_usertracker@{assert\_usertracker}!Trackers defines@{Trackers defines}}
@@ -183,7 +186,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00079}{79}} of file \mbo
Definition at line \mbox{\hyperlink{trackers_8h_source_l00081}{81}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00082}{82}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_gad91d8ca89074270fc040c0449e57cf07}\index{Trackers defines@{Trackers defines}!if\_assert\_usertracker@{if\_assert\_usertracker}}
\index{if\_assert\_usertracker@{if\_assert\_usertracker}!Trackers defines@{Trackers defines}}
@@ -202,7 +205,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00081}{81}} of file \mbo
Definition at line \mbox{\hyperlink{trackers_8h_source_l00083}{83}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00084}{84}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_ga39b6ffbc561f8caac276415e1ad32c30}\index{Trackers defines@{Trackers defines}!tern\_assert\_usertracker@{tern\_assert\_usertracker}}
\index{tern\_assert\_usertracker@{tern\_assert\_usertracker}!Trackers defines@{Trackers defines}}
@@ -221,7 +224,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00083}{83}} of file \mbo
Definition at line \mbox{\hyperlink{trackers_8h_source_l00085}{85}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00086}{86}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_gab880911066605602a966641682090169}\index{Trackers defines@{Trackers defines}!TrackerGet\_Ok@{TrackerGet\_Ok}}
\index{TrackerGet\_Ok@{TrackerGet\_Ok}!Trackers defines@{Trackers defines}}
@@ -240,7 +243,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00085}{85}} of file \mbo
Definition at line \mbox{\hyperlink{trackers_8h_source_l00089}{89}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00090}{90}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_ga9dc91e6b798a081f95f2ccef2c288e5e}\index{Trackers defines@{Trackers defines}!TrackerGet\_Err@{TrackerGet\_Err}}
\index{TrackerGet\_Err@{TrackerGet\_Err}!Trackers defines@{Trackers defines}}
@@ -259,7 +262,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00089}{89}} of file \mbo
Definition at line \mbox{\hyperlink{trackers_8h_source_l00091}{91}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00092}{92}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_ga47ac59a406ee74d4cd9fe0fbaf63a758}\index{Trackers defines@{Trackers defines}!TrackerGet\_Warn@{TrackerGet\_Warn}}
\index{TrackerGet\_Warn@{TrackerGet\_Warn}!Trackers defines@{Trackers defines}}
@@ -278,7 +281,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00091}{91}} of file \mbo
Definition at line \mbox{\hyperlink{trackers_8h_source_l00093}{93}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00094}{94}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_ga4b08632669043dfdbd219dda03502bdb}\index{Trackers defines@{Trackers defines}!TrackerGet\_User@{TrackerGet\_User}}
\index{TrackerGet\_User@{TrackerGet\_User}!Trackers defines@{Trackers defines}}
@@ -304,7 +307,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00093}{93}} of file \mbo
\end{DoxyNote}
Definition at line \mbox{\hyperlink{trackers_8h_source_l00105}{105}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00106}{106}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_ga23de0006aa08984cfeddb6aa5e512fa1}\index{Trackers defines@{Trackers defines}!TrackerCnt\_Ok@{TrackerCnt\_Ok}}
\index{TrackerCnt\_Ok@{TrackerCnt\_Ok}!Trackers defines@{Trackers defines}}
@@ -323,7 +326,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00105}{105}} of file \mb
Definition at line \mbox{\hyperlink{trackers_8h_source_l00110}{110}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00111}{111}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_ga49af29ab3927cad105c1d2b018a767e9}\index{Trackers defines@{Trackers defines}!TrackerCnt\_Err@{TrackerCnt\_Err}}
\index{TrackerCnt\_Err@{TrackerCnt\_Err}!Trackers defines@{Trackers defines}}
@@ -342,7 +345,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00110}{110}} of file \mb
Definition at line \mbox{\hyperlink{trackers_8h_source_l00112}{112}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00113}{113}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_ga8017fb05a56a1b667244f1f786fa9c57}\index{Trackers defines@{Trackers defines}!TrackerCnt\_Warn@{TrackerCnt\_Warn}}
\index{TrackerCnt\_Warn@{TrackerCnt\_Warn}!Trackers defines@{Trackers defines}}
@@ -361,7 +364,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00112}{112}} of file \mb
Definition at line \mbox{\hyperlink{trackers_8h_source_l00114}{114}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00115}{115}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_ga1b7549afc4a1760b54a9b93b0f6d105e}\index{Trackers defines@{Trackers defines}!TrackerCnt\_User@{TrackerCnt\_User}}
\index{TrackerCnt\_User@{TrackerCnt\_User}!Trackers defines@{Trackers defines}}
@@ -380,7 +383,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00114}{114}} of file \mb
Definition at line \mbox{\hyperlink{trackers_8h_source_l00116}{116}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00117}{117}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_gad2f4062a9ac8c2ab062a364f640ebc51}\index{Trackers defines@{Trackers defines}!TrackerWrite\_User@{TrackerWrite\_User}}
\index{TrackerWrite\_User@{TrackerWrite\_User}!Trackers defines@{Trackers defines}}
@@ -399,7 +402,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00116}{116}} of file \mb
Definition at line \mbox{\hyperlink{trackers_8h_source_l00118}{118}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00119}{119}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_ga704f7b9f8c65c9bcec48ce7cb77a2d3b}\index{Trackers defines@{Trackers defines}!TrackerClear\_All@{TrackerClear\_All}}
\index{TrackerClear\_All@{TrackerClear\_All}!Trackers defines@{Trackers defines}}
@@ -418,7 +421,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00118}{118}} of file \mb
Definition at line \mbox{\hyperlink{trackers_8h_source_l00121}{121}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00122}{122}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_ga5dd8bac8c7ab5832019d55d7a68371b9}\index{Trackers defines@{Trackers defines}!TrackerClear\_Ok@{TrackerClear\_Ok}}
\index{TrackerClear\_Ok@{TrackerClear\_Ok}!Trackers defines@{Trackers defines}}
@@ -437,7 +440,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00121}{121}} of file \mb
Definition at line \mbox{\hyperlink{trackers_8h_source_l00123}{123}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00124}{124}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_gae860b6947c6e317e14d40bd7b4b8eb74}\index{Trackers defines@{Trackers defines}!TrackerClear\_Err@{TrackerClear\_Err}}
\index{TrackerClear\_Err@{TrackerClear\_Err}!Trackers defines@{Trackers defines}}
@@ -456,7 +459,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00123}{123}} of file \mb
Definition at line \mbox{\hyperlink{trackers_8h_source_l00125}{125}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00126}{126}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_ga365a8c60bd13b75154feda649dd21ead}\index{Trackers defines@{Trackers defines}!TrackerClear\_Warn@{TrackerClear\_Warn}}
\index{TrackerClear\_Warn@{TrackerClear\_Warn}!Trackers defines@{Trackers defines}}
@@ -475,7 +478,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00125}{125}} of file \mb
Definition at line \mbox{\hyperlink{trackers_8h_source_l00127}{127}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00128}{128}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_ga063dab1067005e1600ea32531fdf3f8d}\index{Trackers defines@{Trackers defines}!TrackerClear\_User@{TrackerClear\_User}}
\index{TrackerClear\_User@{TrackerClear\_User}!Trackers defines@{Trackers defines}}
@@ -494,7 +497,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00127}{127}} of file \mb
Definition at line \mbox{\hyperlink{trackers_8h_source_l00129}{129}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00130}{130}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
\Hypertarget{group___t_r_a_c_k_e_r_s_gaaec7ec19977bb26fa1919dfe920b82d5}\index{Trackers defines@{Trackers defines}!TrackerClear\_UserAll@{TrackerClear\_UserAll}}
\index{TrackerClear\_UserAll@{TrackerClear\_UserAll}!Trackers defines@{Trackers defines}}
@@ -513,5 +516,5 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00129}{129}} of file \mb
Definition at line \mbox{\hyperlink{trackers_8h_source_l00131}{131}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.
Definition at line \mbox{\hyperlink{trackers_8h_source_l00132}{132}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}.

View File

@@ -25,13 +25,15 @@ uint16\+\_\+t \mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d
int32\+\_\+t \mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}} \mbox{[}100\mbox{]}
\begin{DoxyCompactList}\small\item\em Loss для каждого кандидата \end{DoxyCompactList}\item
int32\+\_\+t \mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}} \mbox{[}100\mbox{]}\mbox{[}20\mbox{]}
\begin{DoxyCompactList}\small\item\em Параметры кандидатов \end{DoxyCompactList}\end{DoxyCompactItemize}
\begin{DoxyCompactList}\small\item\em Параметры кандидатов \end{DoxyCompactList}\item
uint16\+\_\+t \mbox{\hyperlink{struct_evolve_optimizer__t_a74b81df1c298c99162310f3f7d91735a}{sorted\+\_\+idx}} \mbox{[}100\mbox{]}
\begin{DoxyCompactList}\small\item\em Индексы отсортированных кандидатов \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection{Detailed Description}
Структура эволюционного оптимизатора
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00081}{81}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00087}{87}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
@@ -50,7 +52,7 @@ uint16\+\_\+t Evolve\+Optimizer\+\_\+t\+::n\+\_\+params}
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00082}{82}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00088}{88}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
\Hypertarget{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}\index{EvolveOptimizer\_t@{EvolveOptimizer\_t}!n\_cand@{n\_cand}}
\index{n\_cand@{n\_cand}!EvolveOptimizer\_t@{EvolveOptimizer\_t}}
@@ -64,7 +66,7 @@ uint16\+\_\+t Evolve\+Optimizer\+\_\+t\+::n\+\_\+cand}
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00083}{83}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00089}{89}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
\Hypertarget{struct_evolve_optimizer__t_a950cd70cb6bff33b78ad35ee58c729a6}\index{EvolveOptimizer\_t@{EvolveOptimizer\_t}!n\_best@{n\_best}}
\index{n\_best@{n\_best}!EvolveOptimizer\_t@{EvolveOptimizer\_t}}
@@ -78,7 +80,7 @@ uint16\+\_\+t Evolve\+Optimizer\+\_\+t\+::n\+\_\+best}
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00084}{84}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00090}{90}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
\Hypertarget{struct_evolve_optimizer__t_a5391277564b54e2271856a2466033df5}\index{EvolveOptimizer\_t@{EvolveOptimizer\_t}!iq\_mutation@{iq\_mutation}}
\index{iq\_mutation@{iq\_mutation}!EvolveOptimizer\_t@{EvolveOptimizer\_t}}
@@ -92,7 +94,7 @@ uint16\+\_\+t Evolve\+Optimizer\+\_\+t\+::iq\+\_\+mutation}
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00085}{85}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00091}{91}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
\Hypertarget{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}\index{EvolveOptimizer\_t@{EvolveOptimizer\_t}!cand\_index@{cand\_index}}
\index{cand\_index@{cand\_index}!EvolveOptimizer\_t@{EvolveOptimizer\_t}}
@@ -106,7 +108,7 @@ uint16\+\_\+t Evolve\+Optimizer\+\_\+t\+::cand\+\_\+index}
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00086}{86}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00092}{92}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
\Hypertarget{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}\index{EvolveOptimizer\_t@{EvolveOptimizer\_t}!loss@{loss}}
\index{loss@{loss}!EvolveOptimizer\_t@{EvolveOptimizer\_t}}
@@ -120,7 +122,7 @@ Loss для каждого кандидата
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00087}{87}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00093}{93}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
\Hypertarget{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}\index{EvolveOptimizer\_t@{EvolveOptimizer\_t}!candidates@{candidates}}
\index{candidates@{candidates}!EvolveOptimizer\_t@{EvolveOptimizer\_t}}
@@ -134,7 +136,21 @@ int32\+\_\+t Evolve\+Optimizer\+\_\+t\+::candidates\mbox{[}100\mbox{]}\mbox{[}20
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00088}{88}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00094}{94}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
\Hypertarget{struct_evolve_optimizer__t_a74b81df1c298c99162310f3f7d91735a}\index{EvolveOptimizer\_t@{EvolveOptimizer\_t}!sorted\_idx@{sorted\_idx}}
\index{sorted\_idx@{sorted\_idx}!EvolveOptimizer\_t@{EvolveOptimizer\_t}}
\doxysubsubsection{\texorpdfstring{sorted\_idx}{sorted\_idx}}
{\footnotesize\ttfamily \label{struct_evolve_optimizer__t_a74b81df1c298c99162310f3f7d91735a}
uint16\+\_\+t Evolve\+Optimizer\+\_\+t\+::sorted\+\_\+idx\mbox{[}100\mbox{]}}
Индексы отсортированных кандидатов
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00095}{95}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.

View File

@@ -35,7 +35,7 @@ uint32\+\_\+t \mbox{\hyperlink{struct_h_f___stack_frame__t_ae47cb051ee3c94471bfd
Сохраняет регистры R0-\/\+R3, R12, LR, PC, PSR для последующего анализа.
Definition at line \mbox{\hyperlink{trace_8h_source_l00441}{441}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00463}{463}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
@@ -54,7 +54,7 @@ uint32\+\_\+t HF\+\_\+\+Stack\+Frame\+\_\+t\+::r0}
Definition at line \mbox{\hyperlink{trace_8h_source_l00442}{442}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00464}{464}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
\Hypertarget{struct_h_f___stack_frame__t_a286104d19185714940645a9df814ddea}\index{HF\_StackFrame\_t@{HF\_StackFrame\_t}!r1@{r1}}
\index{r1@{r1}!HF\_StackFrame\_t@{HF\_StackFrame\_t}}
@@ -68,7 +68,7 @@ uint32\+\_\+t HF\+\_\+\+Stack\+Frame\+\_\+t\+::r1}
Definition at line \mbox{\hyperlink{trace_8h_source_l00443}{443}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00465}{465}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
\Hypertarget{struct_h_f___stack_frame__t_a5a52e5006dabcf68c0fa4cfb0e03335b}\index{HF\_StackFrame\_t@{HF\_StackFrame\_t}!r2@{r2}}
\index{r2@{r2}!HF\_StackFrame\_t@{HF\_StackFrame\_t}}
@@ -82,7 +82,7 @@ uint32\+\_\+t HF\+\_\+\+Stack\+Frame\+\_\+t\+::r2}
Definition at line \mbox{\hyperlink{trace_8h_source_l00444}{444}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00466}{466}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
\Hypertarget{struct_h_f___stack_frame__t_a453c7af42b6928a693af422e17c981d3}\index{HF\_StackFrame\_t@{HF\_StackFrame\_t}!r3@{r3}}
\index{r3@{r3}!HF\_StackFrame\_t@{HF\_StackFrame\_t}}
@@ -96,7 +96,7 @@ uint32\+\_\+t HF\+\_\+\+Stack\+Frame\+\_\+t\+::r3}
Definition at line \mbox{\hyperlink{trace_8h_source_l00445}{445}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00467}{467}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
\Hypertarget{struct_h_f___stack_frame__t_a819ee3bc518c460ece1b7c4079f8f80b}\index{HF\_StackFrame\_t@{HF\_StackFrame\_t}!r12@{r12}}
\index{r12@{r12}!HF\_StackFrame\_t@{HF\_StackFrame\_t}}
@@ -110,7 +110,7 @@ uint32\+\_\+t HF\+\_\+\+Stack\+Frame\+\_\+t\+::r12}
Definition at line \mbox{\hyperlink{trace_8h_source_l00446}{446}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00468}{468}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
\Hypertarget{struct_h_f___stack_frame__t_a6e51904297f7725e96d5b5fb291ef577}\index{HF\_StackFrame\_t@{HF\_StackFrame\_t}!lr@{lr}}
\index{lr@{lr}!HF\_StackFrame\_t@{HF\_StackFrame\_t}}
@@ -124,7 +124,7 @@ Link Register.
Definition at line \mbox{\hyperlink{trace_8h_source_l00447}{447}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00469}{469}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
\Hypertarget{struct_h_f___stack_frame__t_a16563896004751c90e41c81ae4570732}\index{HF\_StackFrame\_t@{HF\_StackFrame\_t}!pc@{pc}}
\index{pc@{pc}!HF\_StackFrame\_t@{HF\_StackFrame\_t}}
@@ -138,7 +138,7 @@ Program Counter.
Definition at line \mbox{\hyperlink{trace_8h_source_l00448}{448}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00470}{470}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
\Hypertarget{struct_h_f___stack_frame__t_ae47cb051ee3c94471bfd4fe7e49c55f9}\index{HF\_StackFrame\_t@{HF\_StackFrame\_t}!psr@{psr}}
\index{psr@{psr}!HF\_StackFrame\_t@{HF\_StackFrame\_t}}
@@ -152,7 +152,7 @@ Program Status Register.
Definition at line \mbox{\hyperlink{trace_8h_source_l00449}{449}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00471}{471}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.

View File

@@ -23,7 +23,7 @@ char \mbox{\hyperlink{struct_r_t_t___flash_header__t_ae7276198385c8d6f6508f433d0
\doxysubsection{Detailed Description}
Структура RTT, которая будет положена в Flash.
Definition at line \mbox{\hyperlink{trace_8h_source_l00169}{169}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00180}{180}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
@@ -42,7 +42,7 @@ uint32\+\_\+t RTT\+\_\+\+Flash\+Header\+\_\+t\+::tag}
Definition at line \mbox{\hyperlink{trace_8h_source_l00170}{170}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00181}{181}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
\Hypertarget{struct_r_t_t___flash_header__t_afd1a5c51af6f97d170c2ccbbe3e34699}\index{RTT\_FlashHeader\_t@{RTT\_FlashHeader\_t}!size@{size}}
\index{size@{size}!RTT\_FlashHeader\_t@{RTT\_FlashHeader\_t}}
@@ -56,7 +56,7 @@ uint32\+\_\+t RTT\+\_\+\+Flash\+Header\+\_\+t\+::size}
Definition at line \mbox{\hyperlink{trace_8h_source_l00171}{171}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00182}{182}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
\Hypertarget{struct_r_t_t___flash_header__t_ae7276198385c8d6f6508f433d042d52a}\index{RTT\_FlashHeader\_t@{RTT\_FlashHeader\_t}!data@{data}}
\index{data@{data}!RTT\_FlashHeader\_t@{RTT\_FlashHeader\_t}}
@@ -70,7 +70,7 @@ char RTT\+\_\+\+Flash\+Header\+\_\+t\+::data\mbox{[}1024\mbox{]}}
Definition at line \mbox{\hyperlink{trace_8h_source_l00172}{172}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.
Definition at line \mbox{\hyperlink{trace_8h_source_l00183}{183}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}.

View File

@@ -20,543 +20,565 @@
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00016}00016\ \textcolor{comment}{\ \ *\ @addtogroup\ TRACE\_SERIAL\ \ \ \ Serial\ trace\ defines}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00017}00017\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ TRACE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00018}00018\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Дефайны\ для\ работы\ с\ serial\ трассировкой\ (SWO,\ RTT)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00019}00019\ \textcolor{comment}{\ \ *\ @details\ \ \ \ Определяется\ дефайн\ @ref\ my\_printf()\ и\ @ref\ log\_printf()\ для\ работы\ с\ serial\ трассировкой:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00020}00020\ \textcolor{comment}{\ \ \ \ -\/\ для\ RTT\ это\ будет\ вызов\ функции\ SEGGER\_RTT\_printf(),\ с\ подключением\ библиотеки\ SEGGER\_RTT.h}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00021}00021\ \textcolor{comment}{\ \ \ \ -\/\ для\ SWO\ это\ будет\ просто\ printf()}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00022}00022\ \textcolor{comment}{\ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00023}00023\ \textcolor{comment}{\ \ \ \ \ \ Но\ библиотеку\ STDOUT\ надо\ подключить\ самостоятельно:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00024}00024\ \textcolor{comment}{\ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00025}00025\ \textcolor{comment}{\ \ \ \ \ \ @verbatim}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00026}00026\ \textcolor{comment}{\ \ \ \ \ \ \ \ Manage\ Run-\/Time\ Environment\ -\/>\ Compiler\ -\/>\ I/O\ -\/>\ STDOUT\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00027}00027\ \textcolor{comment}{\ \ \ \ \ \ @endverbatim}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00028}00028\ \textcolor{comment}{\ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00029}00029\ \textcolor{comment}{\ \ \ \ \ \ Для\ SWO\ также\ надо\ включить\ трассировку:\ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00030}00030\ \textcolor{comment}{\ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00031}00031\ \textcolor{comment}{\ \ \ \ \ \ @verbatim}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00032}00032\ \textcolor{comment}{\ \ \ \ \ \ \ \ Options\ For\ Target\ -\/>\ Debug\ -\/>\ Debugger\ Settings}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00033}00033\ \textcolor{comment}{\ \ \ \ \ \ @endverbatim}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00034}00034\ \textcolor{comment}{\ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00035}00035\ \textcolor{comment}{\ \ \ \ \ \ В\ вкладке\ Debug:\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00036}00036\ \textcolor{comment}{\ \ \ \ \ \ \ \ -\/\ Port\ =\ SW}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00037}00037\ \textcolor{comment}{\ \ \ \ \ \ В\ вкладке\ Trace:\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00038}00038\ \textcolor{comment}{\ \ \ \ \ \ \ \ -\/\ Указать\ Core\ Clock}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00039}00039\ \textcolor{comment}{\ \ \ \ \ \ \ \ -\/\ Выставить\ Trace\ Port\ =\ SWO}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00040}00040\ \textcolor{comment}{\ \ \ \ \ \ \ \ -\/\ ITM\ -\/\ выбрать\ нужный\ порт\ (для\ Keil\ нулевой\ порт)\ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00041}00041\ \textcolor{comment}{\ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00042}00042\ \textcolor{comment}{\ \ \ \ -\/\ Если\ трассировка\ @ref\ SERIAL\_TRACE\_ENABLE\ отключена,\ то\ все\ дефайны\ определяются\ как\ 'ничего'\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00043}00043\ \textcolor{comment}{\ \ \ \ \ \ и\ на\ производительность\ кода\ не\ влияют}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00044}00044\ \textcolor{comment}{\ \ *\ @\{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00045}00045\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00046}00046\ \textcolor{comment}{\ \ *\ @def\ my\_printf(...)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00047}00047\ \textcolor{comment}{\ \ *\ @brief\ Универсальный\ макрос\ для\ вывода\ трассировки}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00048}00048\ \textcolor{comment}{\ \ *\ @details\ Варианты\ реализации:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00049}00049\ \textcolor{comment}{\ \ *\ \ -\/\ RTT\_TRACE\_ENABLE\ \ \ \ \`{}SEGGER\_RTT\_printf(0,\ ...)`}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00050}00050\ \textcolor{comment}{\ \ *\ \ -\/\ SWO\_TRACE\_ENABLE\ -\/\ \`{}printf(...)`}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00051}00051\ \textcolor{comment}{\ \ *\ \ -\/\ NO\_TRACE\ -\/\ пустой\ макрос}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00052}00052\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00053}00053\ \textcolor{comment}{\ \ *\ @def\ log\_printf(TAG,\ fmt,\ ...)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00054}00054\ \textcolor{comment}{\ \ *\ @brief\ Макрос\ логирования\ с\ поддержкой\ уровней\ LOG\_LEVEL}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00055}00055\ \textcolor{comment}{\ \ *\ @param\ TAG\ \ Тэг\ лога}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00056}00056\ \textcolor{comment}{\ \ *\ @param\ fmt,\ ...\ \ Форматируемая\ строка}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00057}00057\ \textcolor{comment}{\ \ *\ @details\ Варианты\ реализации:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00058}00058\ \textcolor{comment}{\ \ *\ \ -\/\ LOG\_LEVEL\ ==\ 0\ -\/\ логирование\ отключено\ (макрос\ пустой)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00059}00059\ \textcolor{comment}{\ \ *\ \ -\/\ LOG\_LEVEL\ ==\ 1\ -\/\ выводится\ время\ и\ TAG}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00060}00060\ \textcolor{comment}{\ \ *\ \ -\/\ LOG\_LEVEL\ >=\ 2\ -\/\ выводится\ время,\ TAG,\ имя\ файла\ и\ номер\ строки}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00061}00061\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00062}00062\ \textcolor{preprocessor}{\#ifdef\ SERIAL\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00063}00063\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00064}00064\ \textcolor{preprocessor}{\ \ \#if\ defined(RTT\_TRACE\_ENABLE)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00065}00065\ \textcolor{preprocessor}{\ \ \ \ \#undef\ SWO\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00066}00066\ \textcolor{preprocessor}{\ \ \ \ \#include\ "{}SEGGER\_RTT.h"{}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00067}\mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{00067}}\ \textcolor{preprocessor}{\ \ \ \ \#define\ my\_printf(...)\ \ \ \ \ \ \ \ SEGGER\_RTT\_printf(0,\ \_\_VA\_ARGS\_\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00068}00068\ \textcolor{preprocessor}{\ \ \#elif\ defined(SWO\_TRACE\_ENABLE)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00069}00069\ \textcolor{preprocessor}{\ \ \ \ \#undef\ RTT\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00070}00070\ \textcolor{preprocessor}{\ \ \ \ \#define\ my\_printf(...)\ \ \ \ \ \ \ \ printf(\_\_VA\_ARGS\_\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00071}00071\ \textcolor{preprocessor}{\ \ \#else\ }\textcolor{comment}{//\ NO\_TRACE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00072}00072\ \textcolor{preprocessor}{\ \ \ \ \#define\ my\_printf(...)\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00073}00073\ \textcolor{preprocessor}{\ \ \ \ \#warning\ No\ trace\ is\ selected.\ Serial\ debug\ wont\ work.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00074}00074\ \textcolor{preprocessor}{\ \ \#endif\ }\textcolor{comment}{//\ RTT\_TRACE\_ENABLE/SWO\_TRACE\_ENABLE/NO\_TRACE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00075}00075\ \textcolor{preprocessor}{\#else\ }\textcolor{comment}{//SERIAL\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00076}00076\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00077}00077\ \textcolor{preprocessor}{\ \ \#define\ my\_printf(...)\ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00078}00078\ \textcolor{preprocessor}{\ \ \#undef\ RTT\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00079}00079\ \textcolor{preprocessor}{\ \ \#undef\ SWO\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00080}00080\ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00081}00081\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//SERIAL\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00082}00082\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00083}00083\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00084}00084\ \textcolor{preprocessor}{\#ifndef\ LOG\_LEVEL}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00085}00085\ \textcolor{preprocessor}{\#define\ LOG\_LEVEL\ 1\ \ }\textcolor{comment}{///<\ @brief\ Уровень\ логирования\ (по\ умолчанию\ ==\ 1)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00086}00086\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00019}00019\ \textcolor{comment}{\ \ *\ @details\ \ \ \ В\ зависимости\ от\ настроек\ определяется\ дефайн\ @ref\ my\_printf()\ и\ @ref\ log\_printf()\ для\ работы\ с\ трассировкой:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00020}00020\ \textcolor{comment}{\ \ \ \ -\/\ @ref\ SERIAL\_TRACE\_ENABLE\ -\/\ Если\ трассировка\ \ отключена,\ то\ все\ дефайны\ определяются\ как\ 'ничего'\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00021}00021\ \textcolor{comment}{\ \ \ \ \ \ и\ на\ производительность\ кода\ не\ влияют}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00022}00022\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00023}00023\ \textcolor{comment}{\ \ \ \ -\/\ @ref\ RTT\_TRACE\_ENABLE\ -\/\ для\ RTT\ это\ будет\ вызов\ функции\ SEGGER\_RTT\_printf(),\ с\ подключением\ библиотеки\ SEGGER\_RTT.h}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00024}00024\ \textcolor{comment}{\ \ \ \ \ \ Предварительно\ надо\ подключить\ библиотеку\ SEGGER\ RTT\ и\ вызвать\ функцию\ SEGGER\_RTT\_Init()}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00025}00025\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00026}00026\ \textcolor{comment}{\ \ \ \ -\/\ @ref\ SWO\_TRACE\_ENABLE\ для\ SWO\ это\ будет\ просто\ printf()}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00027}00027\ \textcolor{comment}{\ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00028}00028\ \textcolor{comment}{\ \ \ \ \ \ Но\ библиотеку\ STDOUT\ надо\ подключить\ самостоятельно:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00029}00029\ \textcolor{comment}{\ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00030}00030\ \textcolor{comment}{\ \ \ \ \ \ @verbatim}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00031}00031\ \textcolor{comment}{\ \ \ \ \ \ \ \ Manage\ Run-\/Time\ Environment\ -\/>\ Compiler\ -\/>\ I/O\ -\/>\ STDOUT\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00032}00032\ \textcolor{comment}{\ \ \ \ \ \ @endverbatim}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00033}00033\ \textcolor{comment}{\ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00034}00034\ \textcolor{comment}{\ \ \ \ \ \ Для\ SWO\ также\ надо\ включить\ трассировку:\ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00035}00035\ \textcolor{comment}{\ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00036}00036\ \textcolor{comment}{\ \ \ \ \ \ @verbatim}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00037}00037\ \textcolor{comment}{\ \ \ \ \ \ \ \ Options\ For\ Target\ -\/>\ Debug\ -\/>\ Debugger\ Settings}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00038}00038\ \textcolor{comment}{\ \ \ \ \ \ @endverbatim}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00039}00039\ \textcolor{comment}{\ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00040}00040\ \textcolor{comment}{\ \ \ \ \ \ В\ вкладке\ Debug:\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00041}00041\ \textcolor{comment}{\ \ \ \ \ \ \ \ -\/\ Port\ =\ SW}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00042}00042\ \textcolor{comment}{\ \ \ \ \ \ В\ вкладке\ Trace:\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00043}00043\ \textcolor{comment}{\ \ \ \ \ \ \ \ -\/\ Указать\ Core\ Clock}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00044}00044\ \textcolor{comment}{\ \ \ \ \ \ \ \ -\/\ Выставить\ Trace\ Port\ =\ SWO}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00045}00045\ \textcolor{comment}{\ \ \ \ \ \ \ \ -\/\ ITM\ -\/\ выбрать\ нужный\ порт\ (для\ Keil\ нулевой\ порт)\ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00046}00046\ \textcolor{comment}{\ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00047}00047\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00048}00048\ \textcolor{comment}{\ \ *\ @\{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00049}00049\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00050}00050\ \textcolor{comment}{\ \ *\ @def\ my\_printf(...)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00051}00051\ \textcolor{comment}{\ \ *\ @brief\ Универсальный\ макрос\ для\ вывода\ трассировки}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00052}00052\ \textcolor{comment}{\ \ *\ @details\ Варианты\ реализации:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00053}00053\ \textcolor{comment}{\ \ *\ \ -\/\ RTT\_TRACE\_ENABLE\ \ \ \ \`{}SEGGER\_RTT\_printf(0,\ ...)`}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00054}00054\ \textcolor{comment}{\ \ *\ \ -\/\ SWO\_TRACE\_ENABLE\ -\/\ \`{}printf(...)`}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00055}00055\ \textcolor{comment}{\ \ *\ \ -\/\ NO\_TRACE\ -\/\ пустой\ макрос}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00056}00056\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00057}00057\ \textcolor{comment}{\ \ *\ @def\ log\_printf(TAG,\ fmt,\ ...)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00058}00058\ \textcolor{comment}{\ \ *\ @brief\ Макрос\ логирования\ с\ поддержкой\ уровней\ LOG\_LEVEL}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00059}00059\ \textcolor{comment}{\ \ *\ @param\ TAG\ \ Тэг\ лога}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00060}00060\ \textcolor{comment}{\ \ *\ @param\ fmt,\ ...\ \ Форматируемая\ строка}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00061}00061\ \textcolor{comment}{\ \ *\ @details\ Варианты\ реализации:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00062}00062\ \textcolor{comment}{\ \ *\ \ -\/\ LOG\_LEVEL\ ==\ 0\ -\/\ логирование\ отключено\ (макрос\ пустой)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00063}00063\ \textcolor{comment}{\ \ *\ \ -\/\ LOG\_LEVEL\ ==\ 1\ -\/\ выводится\ время\ и\ TAG}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00064}00064\ \textcolor{comment}{\ \ *\ \ -\/\ LOG\_LEVEL\ >=\ 2\ -\/\ выводится\ время,\ TAG,\ имя\ файла\ и\ номер\ строки}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00065}00065\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00066}00066\ \textcolor{preprocessor}{\#ifdef\ SERIAL\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00067}00067\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00068}00068\ \textcolor{preprocessor}{\ \ \#if\ defined(RTT\_TRACE\_ENABLE)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00069}00069\ \textcolor{preprocessor}{\ \ \ \ \#undef\ SWO\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00070}00070\ \textcolor{preprocessor}{\ \ \ \ \#include\ "{}SEGGER\_RTT.h"{}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00071}\mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{00071}}\ \textcolor{preprocessor}{\ \ \ \ \#define\ my\_printf(...)\ \ \ \ \ \ \ \ SEGGER\_RTT\_printf(0,\ \_\_VA\_ARGS\_\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00072}00072\ \textcolor{preprocessor}{\ \ \#elif\ defined(SWO\_TRACE\_ENABLE)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00073}00073\ \textcolor{preprocessor}{\ \ \ \ \#undef\ RTT\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00074}00074\ \textcolor{preprocessor}{\ \ \ \ \#define\ my\_printf(...)\ \ \ \ \ \ \ \ printf(\_\_VA\_ARGS\_\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00075}00075\ \textcolor{preprocessor}{\ \ \#else\ }\textcolor{comment}{//\ NO\_TRACE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00076}00076\ \textcolor{preprocessor}{\ \ \ \ \#define\ my\_printf(...)\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00077}00077\ \textcolor{preprocessor}{\ \ \ \ \#warning\ No\ trace\ is\ selected.\ Serial\ debug\ wont\ work.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00078}00078\ \textcolor{preprocessor}{\ \ \#endif\ }\textcolor{comment}{//\ RTT\_TRACE\_ENABLE/SWO\_TRACE\_ENABLE/NO\_TRACE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00079}00079\ \textcolor{preprocessor}{\#else\ }\textcolor{comment}{//SERIAL\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00080}00080\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00081}00081\ \textcolor{preprocessor}{\ \ \#define\ my\_printf(...)\ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00082}00082\ \textcolor{preprocessor}{\ \ \#undef\ RTT\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00083}00083\ \textcolor{preprocessor}{\ \ \#undef\ SWO\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00084}00084\ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00085}00085\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//SERIAL\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00086}00086\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00087}00087\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00088}00088\ \textcolor{preprocessor}{\#if\ LOG\_LEVEL\ ==\ 0\ }\textcolor{comment}{//\ лог\ отключен}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00089}00089\ \textcolor{preprocessor}{\ \ \ \ \#define\ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00090}00090\ \textcolor{preprocessor}{log\_printf(TAG,\ fmt,\ ...)\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00091}00091\ \textcolor{preprocessor}{\#elif\ LOG\_LEVEL\ ==\ 1\ }\textcolor{comment}{//\ только\ тэг}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00092}\mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_ga730fb7b8d0bbb348dca73c15bd0e0b26}{00092}}\ \textcolor{preprocessor}{\ \ \ \ \#define\ log\_printf(TAG,\ fmt,\ ...)\ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00093}00093\ \textcolor{preprocessor}{my\_printf("{}\(\backslash\)n[\%lu]\ [\%s]\ "{}\ fmt,\ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00094}00094\ \textcolor{preprocessor}{(unsigned\ long)uwTick,\ TAG,\ \#\#\_\_VA\_ARGS\_\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00095}00095\ \textcolor{preprocessor}{\#elif\ LOG\_LEVEL\ >=\ 2\ }\textcolor{comment}{//\ всё}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00096}00096\ \textcolor{preprocessor}{\ \ \ \ \#define\ log\_printf(TAG,\ fmt,\ ...)\ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00097}00097\ \textcolor{preprocessor}{my\_printf("{}\(\backslash\)n[\%lu]\ [\%s]\ (\%s:\%d)\ "{}\ fmt,\ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00098}00098\ \textcolor{preprocessor}{(unsigned\ long)uwTick,\ TAG,\ \_\_FILE\_\_,\ \_\_LINE\_\_,\ \#\#\_\_VA\_ARGS\_\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00099}00099\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00100}00100\ \ \ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00101}00101\ \textcolor{comment}{/**\ TRACE\_SERIAL}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00102}00102\ \textcolor{comment}{\ \ *\ @\}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00103}00103\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00104}00104\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00105}00105\ \textcolor{comment}{/**\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00106}00106\ \textcolor{comment}{\ \ *\ @addtogroup\ TRACE\_GPIO\ \ \ \ GPIO\ trace\ defines}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00107}00107\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ TRACE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00108}00108\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Дефайны\ для\ работы\ с\ GPIO\ трассировкой}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00109}00109\ \textcolor{comment}{\ \ *\ @details\ \ \ \ Определяется\ дефайны\ для\ работы\ с\ GPIO\ трассировкой:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00110}00110\ \textcolor{comment}{\ \ \ \ -\/\ TRACE\_GPIO\_RESET()\ -\/\ для\ сброса\ ножки\ GPIO\ (через\ BSRR)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00111}00111\ \textcolor{comment}{\ \ \ \ -\/\ TRACE\_GPIO\_SET()\ -\/\ для\ выставления\ ножки\ GPIO\ (через\ BSRR)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00112}00112\ \textcolor{comment}{\ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00113}00113\ \textcolor{comment}{\ \ \ \ -\/\ Если\ трассировка\ @ref\ GPIO\_TRACE\_ENABLE\ отключена,\ то\ все\ дефайны\ определяются\ как\ 'ничего'\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00114}00114\ \textcolor{comment}{\ \ \ \ \ \ и\ на\ производительность\ кода\ не\ влияют}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00115}00115\ \textcolor{comment}{\ \ *\ @\{\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00116}00116\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00117}00117\ \textcolor{comment}{\ \ *\ @def\ TRACE\_GPIO\_RESET(\_gpio\_,\ \_pin\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00118}00118\ \textcolor{comment}{\ \ *\ @brief\ Сбросить\ указанную\ ножку\ GPIO}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00119}00119\ \textcolor{comment}{\ \ *\ @param\ \_gpio\_\ \ Указатель\ на\ структуру\ GPIO\ (напр.\ \ GPIOA)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00120}00120\ \textcolor{comment}{\ \ *\ @param\ \_pin\_\ \ \ Номер\ ножки\ (напр.\ GPIO\_PIN\_0)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00121}00121\ \textcolor{comment}{\ \ *\ @details\ Варианты\ реализации:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00122}00122\ \textcolor{comment}{\ \ *\ \ -\/\ GPIO\_TRACE\_ENABLE\ не\ определён\ -\/\ макрос\ пустой}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00123}00123\ \textcolor{comment}{\ \ *\ \ -\/\ GPIO\_TRACE\_ENABLE\ определён\ -\/\ устанавливает\ бит\ сброса\ через\ BSRR\ ((\_pin\_)<<16)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00124}00124\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00125}00125\ \textcolor{comment}{\ \ *\ @def\ TRACE\_GPIO\_SET(\_gpio\_,\ \_pin\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00126}00126\ \textcolor{comment}{\ \ *\ @brief\ Установить\ указанную\ ножку\ GPIO}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00127}00127\ \textcolor{comment}{\ \ *\ @param\ \_gpio\_\ \ Указатель\ на\ структуру\ GPIO\ (например\ GPIOA)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00128}00128\ \textcolor{comment}{\ \ *\ @param\ \_pin\_\ \ \ Номер\ ножки\ (напр.\ GPIO\_PIN\_0)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00129}00129\ \textcolor{comment}{\ \ *\ @details\ Варианты\ реализации:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00130}00130\ \textcolor{comment}{\ \ *\ \ -\/\ GPIO\_TRACE\_ENABLE\ не\ определён\ -\/\ макрос\ пустой}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00131}00131\ \textcolor{comment}{\ \ *\ \ -\/\ GPIO\_TRACE\_ENABLE\ определён\ -\/\ устанавливает\ бит\ установки\ через\ BSRR\ (\_pin\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00132}00132\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00133}00133\ \textcolor{preprocessor}{\#ifndef\ GPIO\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00134}00134\ \textcolor{preprocessor}{\ \ \#define\ TRACE\_GPIO\_SET(\_gpio\_,\_pin\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00135}00135\ \textcolor{preprocessor}{\ \ \#define\ TRACE\_GPIO\_RESET(\_gpio\_,\_pin\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00136}00136\ \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00137}\mbox{\hyperlink{group___t_r_a_c_e___g_p_i_o_ga02a6a7b273766121db8ad4a1371373eb}{00137}}\ \textcolor{preprocessor}{\ \ \#define\ TRACE\_GPIO\_SET(\_gpio\_,\_pin\_)\ \ \ \ \ \ \ \ \ \ (\_gpio\_)-\/>BSRR\ =\ (((\_pin\_)))}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00138}\mbox{\hyperlink{group___t_r_a_c_e___g_p_i_o_ga69741d88c991112e99fe7a62e025108a}{00138}}\ \textcolor{preprocessor}{\ \ \#define\ TRACE\_GPIO\_RESET(\_gpio\_,\_pin\_)\ \ \ \ \ \ \ \ (\_gpio\_)-\/>BSRR\ =\ ((\_pin\_)<<16)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00139}00139\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//GPIO\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00140}00140\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00141}00141\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00142}00142\ \textcolor{comment}{/**\ TRACE\_GPIO}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00143}00143\ \textcolor{comment}{\ \ *\ @\}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00144}00144\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00145}00145\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00146}00146\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00147}00147\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00148}00148\ \textcolor{preprocessor}{\#if\ defined(HAL\_MODULE\_ENABLED)\ \&\&\ defined(RTT\_TRACE\_ENABLE)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00149}00149\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00150}00150\ \textcolor{comment}{/**\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00151}00151\ \textcolor{comment}{\ \ *\ @addtogroup\ TRACE\_RTT\_FLASH\ \ \ \ Flash\ RTT\ Buffer}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00152}00152\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ TRACE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00153}00153\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Макросы\ и\ функции\ для\ сохранения/чтения\ RTT\ буфера\ в\ Flash}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00154}00154\ \textcolor{comment}{\ \ *\ @details\ \ \ \ Модуль\ позволяет\ сохранять\ данные\ RTT\ буфера\ во\ Flash\ и\ читать\ их\ обратно\ по\ тегам.\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00155}00155\ \textcolor{comment}{\ \ *\ Теги\ работают\ следующим\ образом:\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00156}00156\ \textcolor{comment}{\ \ *\ \ -\/\ Базовый\ тег\ (младший\ байт\ =\ 0):\ модуль\ сам\ выбирает\ первый\ свободный\ слот\ во\ Flash;\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00157}00157\ \textcolor{comment}{\ \ *\ \ \ \ новые\ записи\ получают\ автоинкрементированный\ младший\ байт\ тега\ (от\ 0x00\ до\ 0xFF).\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00158}00158\ \textcolor{comment}{\ \ *\ \ -\/\ Конкретный\ тег\ (младший\ байт\ !=\ 0):\ запись\ или\ чтение\ происходит\ строго\ с\ указанным\ тегом;\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00159}00159\ \textcolor{comment}{\ \ *\ \ \ \ если\ слот\ с\ таким\ тегом\ уже\ занят,\ запись\ не\ выполняется.\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00160}00160\ \textcolor{comment}{\ \ *\ \ -\/\ Автоинкремент\ позволяет\ хранить\ несколько\ последовательных\ записей\ в\ пределах\ одного\ базового\ тега,\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00161}00161\ \textcolor{comment}{\ \ *\ \ \ \ без\ необходимости\ вручную\ отслеживать\ адреса\ Flash\ или\ позиции\ буферов.\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00162}00162\ \textcolor{comment}{\ \ *\ @\{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00163}00163\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00164}00164\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00165}00165\ \ \ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00166}00166\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00167}00167\ \textcolor{comment}{\ \ *\ @brief\ Структура\ RTT,\ которая\ будет\ положена\ в\ Flash}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00168}00168\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00169}\mbox{\hyperlink{struct_r_t_t___flash_header__t}{00169}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00170}\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{00170}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Уникальный\ идентификатор\ буфера}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00171}\mbox{\hyperlink{struct_r_t_t___flash_header__t_afd1a5c51af6f97d170c2ccbbe3e34699}{00171}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_r_t_t___flash_header__t_afd1a5c51af6f97d170c2ccbbe3e34699}{size}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Размер\ данных}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00172}\mbox{\hyperlink{struct_r_t_t___flash_header__t_ae7276198385c8d6f6508f433d042d52a}{00172}}\ \ \ \textcolor{keywordtype}{char}\ \ \ \ \ \mbox{\hyperlink{struct_r_t_t___flash_header__t_ae7276198385c8d6f6508f433d042d52a}{data}}[\mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga501312b24e322de4dd6755ad442f0ba3}{RTT\_FLASH\_BUFFER\_SIZE}}];\ \ \textcolor{comment}{///<\ Буфер\ RTT}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00173}00173\ \}\ \mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}};}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00174}00174\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00175}00175\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00176}00176\ \textcolor{comment}{\ \ *\ @brief\ Подготовка\ Flash\ к\ записи}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00177}00177\ \textcolor{comment}{\ \ *\ @details\ Сбрасывает\ ошибки\ Flash\ и\ ожидает\ готовности\ перед\ записью}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00178}00178\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00179}\mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga21353cb4f5af666237739e62ce019cd6}{00179}}\ \_\_STATIC\_FORCEINLINE\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga21353cb4f5af666237739e62ce019cd6}{RTT\_FlashPrepare}}(\textcolor{keywordtype}{void})}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00180}00180\ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00181}00181\ \ \ HAL\_FLASH\_Unlock();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00182}00182\ \ \ \_\_HAL\_FLASH\_CLEAR\_FLAG(FLASH\_FLAG\_PGSERR\ |\ FLASH\_FLAG\_WRPERR\ |\ FLASH\_FLAG\_OPERR);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00183}00183\ \ \ \textcolor{keywordflow}{while}\ (\_\_HAL\_FLASH\_GET\_FLAG(FLASH\_FLAG\_BSY))\ \{\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00184}00184\ \ \ \_\_NOP();\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00185}00185\ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00186}00186\ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00187}00187\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00188}00188\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00189}00189\ \textcolor{comment}{\ \ *\ @brief\ Сохраняет\ последние\ символы\ RTT-\/буфера\ в\ Flash\ по\ тегу}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00190}00190\ \textcolor{comment}{\ \ *\ @param\ tag\ \ \ \ \ \ \ \ Базовый\ или\ конкретный\ идентификатор\ буфера.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00191}00191\ \textcolor{comment}{\ \ *\ @param\ tail\_size\ \ Количество\ последних\ символов\ RTT\ для\ копирования}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00192}00192\ \textcolor{comment}{\ \ *\ @param\ buf\_num\ \ \ \ Указатель\ на\ переменную\ в\ которую\ запишется\ номер\ буфера\ для\ конкретного\ тега}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00193}00193\ \textcolor{comment}{\ \ *\ @return\ >=0\ —\ номер\ буфера\ (тег)\ для\ записи,\ <0\ —\ ошибка\ (нет\ места,\ тег\ уже\ занят,\ ошибка\ записи\ в\ флеш)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00194}00194\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00195}00195\ \textcolor{comment}{\ \ *\ @details\ \ Автоматически\ копирует\ последние\ tail\_size\ символов\ из\ RTT-\/буфера}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00196}00196\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ \ \ и\ записывает\ их\ во\ Flash.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00197}00197\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ \ \ Тег\ может\ быть\ базовым\ или\ конкретным:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00198}00198\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ \ \ \ \ -\/\ Если\ базовый\ (младший\ байт\ ==\ 0)\ —\ будет\ выбран\ первый\ свободный\ слот\ с\ автоинкрементом.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00199}00199\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Автоинкремент\ формируется\ в\ пределах\ от\ 0x1\ до\ 0xFF}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00200}00200\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ \ \ \ \ -\/\ Если\ конкретный\ (младший\ байт\ !=\ 0)\ —\ запись\ выполняется\ только\ с\ этим\ тегом,\ иначе\ ошибка.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00201}00201\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00202}\mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga79f222c8ab644de4d47f07528d1edd63}{00202}}\ \_\_STATIC\_FORCEINLINE\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga79f222c8ab644de4d47f07528d1edd63}{RTT\_SaveToFlash}}(uint32\_t\ tag,\ uint32\_t\ tail\_size)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00203}00203\ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00204}00204\ \ \ \textcolor{keywordflow}{if}\ (tag\ ==\ 0xFFFFFFFF)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00205}00205\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ \textcolor{comment}{//\ Неверный\ тег}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00206}00206\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00207}00207\ \ \ SEGGER\_RTT\_BUFFER\_UP\ *up\ =\ \&\_SEGGER\_RTT.aUp[0];}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00208}00208\ \ \ \textcolor{keywordtype}{unsigned}\ buf\_size\ =\ up-\/>SizeOfBuffer;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00209}00209\ \ \ \textcolor{keywordtype}{unsigned}\ wr\ =\ up-\/>WrOff;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00210}00210\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00211}00211\ \ \ \textcolor{comment}{//\ Ограничиваем\ по\ размеру\ буфера\ RTT\ и\ RTT\_FLASH\_BUFFER\_SIZE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00212}00212\ \ \ \textcolor{keywordtype}{unsigned}\ n\ =\ (tail\_size\ >\ buf\_size)\ ?\ buf\_size\ :\ tail\_size;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00213}00213\ \ \ \textcolor{keywordflow}{if}\ (n\ >\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga501312b24e322de4dd6755ad442f0ba3}{RTT\_FLASH\_BUFFER\_SIZE}})}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00214}00214\ \ \ \ \ n\ =\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga501312b24e322de4dd6755ad442f0ba3}{RTT\_FLASH\_BUFFER\_SIZE}};}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00215}00215\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00216}00216\ \ \ uint32\_t\ addr\ =\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga8e56f75d3ab8a89ddde1404ae23c3297}{RTT\_FLASH\_SECTOR\_START}};}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00217}00217\ \ \ \mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}\ *flash\_hdr\ =\ NULL;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00218}00218\ \ \ uint32\_t\ base\_tag\ =\ tag\ \&\ 0xFFFFFF00;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00219}00219\ \ \ uint32\_t\ next\_tag\ =\ (tag\ \&\ 0xFF)\ ==\ 0\ ?\ tag\ +\ 1\ :\ tag;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00220}00220\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00221}00221\ \ \ \textcolor{comment}{//\ Ищем\ первый\ свободный\ слот,\ параллельно\ автоинкрементируем\ тег}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00222}00222\ \ \ \textcolor{keywordflow}{while}\ ((addr\ +\ \textcolor{keyword}{sizeof}(\mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}))\ <=\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_gafeca0be3688dea07ff443f894668003d}{RTT\_FLASH\_SECTOR\_END}})}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00223}00223\ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00224}00224\ \ \ \ \ flash\_hdr\ =\ (\mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}\ *)addr;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00225}00225\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00226}00226\ \ \ \ \ \textcolor{keywordflow}{if}\ (flash\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ ==\ 0xFFFFFFFF)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00227}00227\ \ \ \ \ \ \ \textcolor{keywordflow}{break};\ \ \textcolor{comment}{//\ Нашли\ свободное\ место}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00228}00228\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00229}00229\ \ \ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00230}00230\ \ \ \ \ \textcolor{keywordflow}{if}((flash\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ \&\ 0xFFFFFF00)\ ==\ base\_tag)\ \textcolor{comment}{//\ выбраный\ тег}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00231}00231\ \ \ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00232}00232\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ ((tag\ \&\ 0xFF)\ ==\ 0)\ \textcolor{comment}{//\ если\ он\ базовый\ -\/\ ищем\ последний}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00233}00233\ \ \ \ \ \ \ \ \ next\_tag\ =\ flash\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ +\ 1;\ \ \textcolor{comment}{//\ автоинкремент}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00234}00234\ \ \ \ \ \ \ \textcolor{keywordflow}{else}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00235}00235\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}(flash\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ ==\ tag)\ \textcolor{comment}{//\ если\ он\ конкретный\ и\ уже\ существует\ -\/\ то\ ошибка}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00236}00236\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ \textcolor{comment}{//\ конкретный\ тег\ уже\ занят}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00237}00237\ \ \ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00238}00238\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00239}00239\ \ \ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00240}00240\ \ \ \ \ \textcolor{keywordflow}{if}(next\_tag\ -\/\ tag\ >\ 0xFF)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00241}00241\ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \textcolor{comment}{//\ автоинкремент\ слишком\ большой}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00242}00242\ \ \ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00243}00243\ \ \ \ \ addr\ +=\ \textcolor{keyword}{sizeof}(\mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}});}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00244}00244\ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00245}00245\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00246}00246\ \ \ \textcolor{keywordflow}{if}\ ((addr\ +\ \textcolor{keyword}{sizeof}(\mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}))\ >\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_gafeca0be3688dea07ff443f894668003d}{RTT\_FLASH\_SECTOR\_END}})}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00247}00247\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ \textcolor{comment}{//\ Нет\ свободного\ места}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00248}00248\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00249}00249\ \ \ \textcolor{comment}{//\ Копируем\ последние\ n\ символов\ из\ RTT}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00250}00250\ \ \ \textcolor{keywordtype}{char}\ temp[\mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga501312b24e322de4dd6755ad442f0ba3}{RTT\_FLASH\_BUFFER\_SIZE}}];}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00251}00251\ \ \ \textcolor{keywordtype}{unsigned}\ valid\_count\ =\ 0;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00252}00252\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00253}00253\ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keywordtype}{unsigned}\ i\ =\ 0;\ i\ <\ n;\ i++)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00254}00254\ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00255}00255\ \ \ \ \ \textcolor{keywordtype}{unsigned}\ idx\ =\ (wr\ +\ buf\_size\ -\/\ n\ +\ i)\ \%\ buf\_size;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00256}00256\ \ \ \ \ \textcolor{keywordtype}{char}\ c\ =\ up-\/>pBuffer[idx];}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00257}00257\ \ \ \ \ \textcolor{keywordflow}{if}\ (c\ !=\ 0)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00258}00258\ \ \ \ \ \ \ temp[valid\_count++]\ =\ c;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00259}00259\ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00088}00088\ \textcolor{preprocessor}{\#ifndef\ LOG\_LEVEL}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00089}00089\ \textcolor{preprocessor}{\#define\ LOG\_LEVEL\ 1\ \ }\textcolor{comment}{///<\ @brief\ Уровень\ логирования\ (по\ умолчанию\ ==\ 1)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00090}00090\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00091}00091\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00092}00092\ \textcolor{preprocessor}{\#if\ LOG\_LEVEL\ ==\ 0\ }\textcolor{comment}{//\ лог\ отключен}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00093}00093\ \textcolor{preprocessor}{\ \ \ \ \#define\ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00094}00094\ \textcolor{preprocessor}{log\_printf(TAG,\ fmt,\ ...)\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00095}00095\ \textcolor{preprocessor}{\#elif\ LOG\_LEVEL\ ==\ 1\ }\textcolor{comment}{//\ только\ тэг}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00096}\mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_ga730fb7b8d0bbb348dca73c15bd0e0b26}{00096}}\ \textcolor{preprocessor}{\ \ \ \ \#define\ log\_printf(TAG,\ fmt,\ ...)\ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00097}00097\ \textcolor{preprocessor}{my\_printf("{}\(\backslash\)n[\%lu]\ [\%s]\ "{}\ fmt,\ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00098}00098\ \textcolor{preprocessor}{(unsigned\ long)uwTick,\ TAG,\ \#\#\_\_VA\_ARGS\_\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00099}00099\ \textcolor{preprocessor}{\#elif\ LOG\_LEVEL\ >=\ 2\ }\textcolor{comment}{//\ всё}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00100}00100\ \textcolor{preprocessor}{\ \ \ \ \#define\ log\_printf(TAG,\ fmt,\ ...)\ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00101}00101\ \textcolor{preprocessor}{my\_printf("{}\(\backslash\)n[\%lu]\ [\%s]\ (\%s:\%d)\ "{}\ fmt,\ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00102}00102\ \textcolor{preprocessor}{(unsigned\ long)uwTick,\ TAG,\ \_\_FILE\_\_,\ \_\_LINE\_\_,\ \#\#\_\_VA\_ARGS\_\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00103}00103\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00104}00104\ \ \ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00105}00105\ \textcolor{comment}{/**\ TRACE\_SERIAL}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00106}00106\ \textcolor{comment}{\ \ *\ @\}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00107}00107\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00108}00108\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00109}00109\ \textcolor{comment}{/**\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00110}00110\ \textcolor{comment}{\ \ *\ @addtogroup\ TRACE\_GPIO\ \ \ \ GPIO\ trace\ defines}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00111}00111\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ TRACE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00112}00112\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Дефайны\ для\ работы\ с\ GPIO\ трассировкой}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00113}00113\ \textcolor{comment}{\ \ *\ @details\ \ \ \ Определяется\ дефайны\ для\ работы\ с\ GPIO\ трассировкой:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00114}00114\ \textcolor{comment}{\ \ \ \ -\/\ TRACE\_GPIO\_RESET()\ -\/\ для\ сброса\ ножки\ GPIO\ (через\ BSRR)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00115}00115\ \textcolor{comment}{\ \ \ \ -\/\ TRACE\_GPIO\_SET()\ -\/\ для\ выставления\ ножки\ GPIO\ (через\ BSRR)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00116}00116\ \textcolor{comment}{\ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00117}00117\ \textcolor{comment}{\ \ \ \ -\/\ Если\ трассировка\ @ref\ GPIO\_TRACE\_ENABLE\ отключена,\ то\ все\ дефайны\ определяются\ как\ 'ничего'\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00118}00118\ \textcolor{comment}{\ \ \ \ \ \ и\ на\ производительность\ кода\ не\ влияют}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00119}00119\ \textcolor{comment}{\ \ *\ @\{\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00120}00120\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00121}00121\ \textcolor{comment}{\ \ *\ @def\ TRACE\_GPIO\_RESET(\_gpio\_,\ \_pin\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00122}00122\ \textcolor{comment}{\ \ *\ @brief\ Сбросить\ указанную\ ножку\ GPIO}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00123}00123\ \textcolor{comment}{\ \ *\ @param\ \_gpio\_\ \ Указатель\ на\ структуру\ GPIO\ (напр.\ \ GPIOA)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00124}00124\ \textcolor{comment}{\ \ *\ @param\ \_pin\_\ \ \ Номер\ ножки\ (напр.\ GPIO\_PIN\_0)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00125}00125\ \textcolor{comment}{\ \ *\ @details\ Варианты\ реализации:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00126}00126\ \textcolor{comment}{\ \ *\ \ -\/\ GPIO\_TRACE\_ENABLE\ не\ определён\ -\/\ макрос\ пустой}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00127}00127\ \textcolor{comment}{\ \ *\ \ -\/\ GPIO\_TRACE\_ENABLE\ определён\ -\/\ устанавливает\ бит\ сброса\ через\ BSRR\ ((\_pin\_)<<16)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00128}00128\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00129}00129\ \textcolor{comment}{\ \ *\ @def\ TRACE\_GPIO\_SET(\_gpio\_,\ \_pin\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00130}00130\ \textcolor{comment}{\ \ *\ @brief\ Установить\ указанную\ ножку\ GPIO}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00131}00131\ \textcolor{comment}{\ \ *\ @param\ \_gpio\_\ \ Указатель\ на\ структуру\ GPIO\ (например\ GPIOA)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00132}00132\ \textcolor{comment}{\ \ *\ @param\ \_pin\_\ \ \ Номер\ ножки\ (напр.\ GPIO\_PIN\_0)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00133}00133\ \textcolor{comment}{\ \ *\ @details\ Варианты\ реализации:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00134}00134\ \textcolor{comment}{\ \ *\ \ -\/\ GPIO\_TRACE\_ENABLE\ не\ определён\ -\/\ макрос\ пустой}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00135}00135\ \textcolor{comment}{\ \ *\ \ -\/\ GPIO\_TRACE\_ENABLE\ определён\ -\/\ устанавливает\ бит\ установки\ через\ BSRR\ (\_pin\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00136}00136\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00137}00137\ \textcolor{preprocessor}{\#ifndef\ GPIO\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00138}00138\ \textcolor{preprocessor}{\ \ \#define\ TRACE\_GPIO\_SET(\_gpio\_,\_pin\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00139}00139\ \textcolor{preprocessor}{\ \ \#define\ TRACE\_GPIO\_RESET(\_gpio\_,\_pin\_)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00140}00140\ \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00141}\mbox{\hyperlink{group___t_r_a_c_e___g_p_i_o_ga02a6a7b273766121db8ad4a1371373eb}{00141}}\ \textcolor{preprocessor}{\ \ \#define\ TRACE\_GPIO\_SET(\_gpio\_,\_pin\_)\ \ \ \ \ \ \ \ \ \ (\_gpio\_)-\/>BSRR\ =\ (((\_pin\_)))}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00142}\mbox{\hyperlink{group___t_r_a_c_e___g_p_i_o_ga69741d88c991112e99fe7a62e025108a}{00142}}\ \textcolor{preprocessor}{\ \ \#define\ TRACE\_GPIO\_RESET(\_gpio\_,\_pin\_)\ \ \ \ \ \ \ \ (\_gpio\_)-\/>BSRR\ =\ ((\_pin\_)<<16)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00143}00143\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//GPIO\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00144}00144\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00145}00145\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00146}00146\ \textcolor{comment}{/**\ TRACE\_GPIO}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00147}00147\ \textcolor{comment}{\ \ *\ @\}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00148}00148\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00149}00149\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00150}00150\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00151}00151\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00152}00152\ \textcolor{preprocessor}{\#if\ defined(HAL\_MODULE\_ENABLED)\ \&\&\ defined(RTT\_TRACE\_ENABLE)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00153}00153\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00154}00154\ \textcolor{comment}{/**\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00155}00155\ \textcolor{comment}{\ \ *\ @addtogroup\ TRACE\_RTT\_FLASH\ \ \ \ Flash\ RTT\ Buffer}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00156}00156\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ TRACE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00157}00157\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Макросы\ и\ функции\ для\ сохранения/чтения\ RTT\ буфера\ в\ Flash}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00158}00158\ \textcolor{comment}{\ \ *\ @details\ \ \ \ Модуль\ позволяет\ сохранять\ данные\ RTT\ буфера\ во\ Flash\ и\ читать\ их\ обратно\ по\ тегам.\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00159}00159\ \textcolor{comment}{\ \ *\ Теги\ работают\ следующим\ образом:\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00160}00160\ \textcolor{comment}{\ \ *\ \ -\/\ Базовый\ тег\ (младший\ байт\ =\ 0):\ модуль\ сам\ выбирает\ первый\ свободный\ слот\ во\ Flash;\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00161}00161\ \textcolor{comment}{\ \ *\ \ \ \ новые\ записи\ получают\ автоинкрементированный\ младший\ байт\ тега\ (от\ 0x00\ до\ 0xFF).\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00162}00162\ \textcolor{comment}{\ \ *\ \ -\/\ Конкретный\ тег\ (младший\ байт\ !=\ 0):\ запись\ или\ чтение\ происходит\ строго\ с\ указанным\ тегом;\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00163}00163\ \textcolor{comment}{\ \ *\ \ \ \ если\ слот\ с\ таким\ тегом\ уже\ занят,\ запись\ не\ выполняется.\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00164}00164\ \textcolor{comment}{\ \ *\ \ -\/\ Автоинкремент\ позволяет\ хранить\ несколько\ последовательных\ записей\ в\ пределах\ одного\ базового\ тега,\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00165}00165\ \textcolor{comment}{\ \ *\ \ \ \ без\ необходимости\ вручную\ отслеживать\ адреса\ Flash\ или\ позиции\ буферов.\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00166}00166\ \textcolor{comment}{\ \ *\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00167}00167\ \textcolor{comment}{\ \ *\ Параметры:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00168}00168\ \textcolor{comment}{\ \ *\ -\/\ @ref\ RTT\_FLASH\_BUFFER\_SIZE\ \ \ \ -\/\ Размер\ буфера\ RTT\ в\ Flash}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00169}00169\ \textcolor{comment}{\ \ *\ -\/\ @ref\ RTT\_FLASH\_SECTOR\ \ \ \ \ \ \ \ \ -\/\ Сектор\ FLASH\ куда\ положится\ RTT\ буфер}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00170}00170\ \textcolor{comment}{\ \ *\ -\/\ @ref\ RTT\_FLASH\_SECTOR\_START\ \ \ -\/\ Начало\ сектора\ RTT\_FLASH\_SECTOR}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00171}00171\ \textcolor{comment}{\ \ *\ -\/\ @ref\ RTT\_FLASH\_SECTOR\_END\ \ \ \ \ -\/\ Конец\ сектора\ RTT\_FLASH\_SECTOR}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00172}00172\ \textcolor{comment}{\ \ *\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00173}00173\ \textcolor{comment}{\ \ *\ @\{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00174}00174\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00175}00175\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00176}00176\ \ \ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00177}00177\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00178}00178\ \textcolor{comment}{\ \ *\ @brief\ Структура\ RTT,\ которая\ будет\ положена\ в\ Flash}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00179}00179\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00180}\mbox{\hyperlink{struct_r_t_t___flash_header__t}{00180}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00181}\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{00181}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Уникальный\ идентификатор\ буфера}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00182}\mbox{\hyperlink{struct_r_t_t___flash_header__t_afd1a5c51af6f97d170c2ccbbe3e34699}{00182}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_r_t_t___flash_header__t_afd1a5c51af6f97d170c2ccbbe3e34699}{size}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Размер\ данных}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00183}\mbox{\hyperlink{struct_r_t_t___flash_header__t_ae7276198385c8d6f6508f433d042d52a}{00183}}\ \ \ \textcolor{keywordtype}{char}\ \ \ \ \ \mbox{\hyperlink{struct_r_t_t___flash_header__t_ae7276198385c8d6f6508f433d042d52a}{data}}[\mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga501312b24e322de4dd6755ad442f0ba3}{RTT\_FLASH\_BUFFER\_SIZE}}];\ \ \textcolor{comment}{///<\ Буфер\ RTT}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00184}00184\ \}\ \mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}};}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00185}00185\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00186}00186\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00187}00187\ \textcolor{comment}{\ \ *\ @brief\ Подготовка\ Flash\ к\ записи}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00188}00188\ \textcolor{comment}{\ \ *\ @details\ Сбрасывает\ ошибки\ Flash\ и\ ожидает\ готовности\ перед\ записью}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00189}00189\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00190}\mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga21353cb4f5af666237739e62ce019cd6}{00190}}\ \_\_STATIC\_FORCEINLINE\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga21353cb4f5af666237739e62ce019cd6}{RTT\_FlashPrepare}}(\textcolor{keywordtype}{void})}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00191}00191\ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00192}00192\ \ \ HAL\_FLASH\_Unlock();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00193}00193\ \ \ \_\_HAL\_FLASH\_CLEAR\_FLAG(FLASH\_FLAG\_PGSERR\ |\ FLASH\_FLAG\_WRPERR\ |\ FLASH\_FLAG\_OPERR);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00194}00194\ \ \ \textcolor{keywordflow}{while}\ (\_\_HAL\_FLASH\_GET\_FLAG(FLASH\_FLAG\_BSY))\ \{\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00195}00195\ \ \ \_\_NOP();\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00196}00196\ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00197}00197\ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00198}00198\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00199}00199\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00200}00200\ \textcolor{comment}{\ \ *\ @brief\ Сохраняет\ последние\ символы\ RTT-\/буфера\ в\ Flash\ по\ тегу}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00201}00201\ \textcolor{comment}{\ \ *\ @param\ tag\ \ \ \ \ \ \ \ Базовый\ или\ конкретный\ идентификатор\ буфера.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00202}00202\ \textcolor{comment}{\ \ *\ @param\ tail\_size\ \ Количество\ последних\ символов\ RTT\ для\ копирования}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00203}00203\ \textcolor{comment}{\ \ *\ @param\ buf\_num\ \ \ \ Указатель\ на\ переменную\ в\ которую\ запишется\ номер\ буфера\ для\ конкретного\ тега}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00204}00204\ \textcolor{comment}{\ \ *\ @return\ >=0\ —\ номер\ буфера\ (тег)\ для\ записи,\ <0\ —\ ошибка\ (нет\ места,\ тег\ уже\ занят,\ ошибка\ записи\ в\ флеш)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00205}00205\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00206}00206\ \textcolor{comment}{\ \ *\ @details\ \ Автоматически\ копирует\ последние\ tail\_size\ символов\ из\ RTT-\/буфера}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00207}00207\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ \ \ и\ записывает\ их\ во\ Flash.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00208}00208\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ \ \ Тег\ может\ быть\ базовым\ или\ конкретным:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00209}00209\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ \ \ \ \ -\/\ Если\ базовый\ (младший\ байт\ ==\ 0)\ —\ будет\ выбран\ первый\ свободный\ слот\ с\ автоинкрементом.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00210}00210\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Автоинкремент\ формируется\ в\ пределах\ от\ 0x1\ до\ 0xFF}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00211}00211\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ \ \ \ \ -\/\ Если\ конкретный\ (младший\ байт\ !=\ 0)\ —\ запись\ выполняется\ только\ с\ этим\ тегом,\ иначе\ ошибка.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00212}00212\ \textcolor{comment}{\ \ *\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00213}00213\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00214}\mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga79f222c8ab644de4d47f07528d1edd63}{00214}}\ \_\_STATIC\_FORCEINLINE\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga79f222c8ab644de4d47f07528d1edd63}{RTT\_SaveToFlash}}(uint32\_t\ tag,\ uint32\_t\ tail\_size)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00215}00215\ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00216}00216\ \ \ \textcolor{keywordflow}{if}\ (tag\ ==\ 0xFFFFFFFF)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00217}00217\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ \textcolor{comment}{//\ Неверный\ тег}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00218}00218\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00219}00219\ \ \ SEGGER\_RTT\_BUFFER\_UP\ *up\ =\ \&\_SEGGER\_RTT.aUp[0];}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00220}00220\ \ \ \textcolor{keywordtype}{unsigned}\ buf\_size\ =\ up-\/>SizeOfBuffer;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00221}00221\ \ \ \textcolor{keywordtype}{unsigned}\ wr\ =\ up-\/>WrOff;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00222}00222\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00223}00223\ \ \ \textcolor{comment}{//\ Ограничиваем\ по\ размеру\ буфера\ RTT\ и\ RTT\_FLASH\_BUFFER\_SIZE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00224}00224\ \ \ \textcolor{keywordtype}{unsigned}\ n\ =\ (tail\_size\ >\ buf\_size)\ ?\ buf\_size\ :\ tail\_size;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00225}00225\ \ \ \textcolor{keywordflow}{if}\ (n\ >\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga501312b24e322de4dd6755ad442f0ba3}{RTT\_FLASH\_BUFFER\_SIZE}})}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00226}00226\ \ \ \ \ n\ =\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga501312b24e322de4dd6755ad442f0ba3}{RTT\_FLASH\_BUFFER\_SIZE}};}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00227}00227\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00228}00228\ \ \ uint32\_t\ addr\ =\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga8e56f75d3ab8a89ddde1404ae23c3297}{RTT\_FLASH\_SECTOR\_START}};}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00229}00229\ \ \ \mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}\ *flash\_hdr\ =\ NULL;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00230}00230\ \ \ uint32\_t\ base\_tag\ =\ tag\ \&\ 0xFFFFFF00;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00231}00231\ \ \ uint32\_t\ next\_tag\ =\ (tag\ \&\ 0xFF)\ ==\ 0\ ?\ tag\ +\ 1\ :\ tag;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00232}00232\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00233}00233\ \ \ \textcolor{comment}{//\ Ищем\ первый\ свободный\ слот,\ параллельно\ автоинкрементируем\ тег}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00234}00234\ \ \ \textcolor{keywordflow}{while}\ ((addr\ +\ \textcolor{keyword}{sizeof}(\mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}))\ <=\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_gafeca0be3688dea07ff443f894668003d}{RTT\_FLASH\_SECTOR\_END}})}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00235}00235\ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00236}00236\ \ \ \ \ flash\_hdr\ =\ (\mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}\ *)addr;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00237}00237\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00238}00238\ \ \ \ \ \textcolor{keywordflow}{if}\ (flash\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ ==\ 0xFFFFFFFF)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00239}00239\ \ \ \ \ \ \ \textcolor{keywordflow}{break};\ \ \textcolor{comment}{//\ Нашли\ свободное\ место}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00240}00240\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00241}00241\ \ \ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00242}00242\ \ \ \ \ \textcolor{keywordflow}{if}((flash\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ \&\ 0xFFFFFF00)\ ==\ base\_tag)\ \textcolor{comment}{//\ выбраный\ тег}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00243}00243\ \ \ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00244}00244\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ ((tag\ \&\ 0xFF)\ ==\ 0)\ \textcolor{comment}{//\ если\ он\ базовый\ -\/\ ищем\ последний}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00245}00245\ \ \ \ \ \ \ \ \ next\_tag\ =\ flash\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ +\ 1;\ \ \textcolor{comment}{//\ автоинкремент}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00246}00246\ \ \ \ \ \ \ \textcolor{keywordflow}{else}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00247}00247\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}(flash\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ ==\ tag)\ \textcolor{comment}{//\ если\ он\ конкретный\ и\ уже\ существует\ -\/\ то\ ошибка}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00248}00248\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ \textcolor{comment}{//\ конкретный\ тег\ уже\ занят}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00249}00249\ \ \ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00250}00250\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00251}00251\ \ \ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00252}00252\ \ \ \ \ \textcolor{keywordflow}{if}(next\_tag\ -\/\ tag\ >\ 0xFF)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00253}00253\ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \textcolor{comment}{//\ автоинкремент\ слишком\ большой}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00254}00254\ \ \ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00255}00255\ \ \ \ \ addr\ +=\ \textcolor{keyword}{sizeof}(\mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}});}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00256}00256\ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00257}00257\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00258}00258\ \ \ \textcolor{keywordflow}{if}\ ((addr\ +\ \textcolor{keyword}{sizeof}(\mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}))\ >\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_gafeca0be3688dea07ff443f894668003d}{RTT\_FLASH\_SECTOR\_END}})}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00259}00259\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ \textcolor{comment}{//\ Нет\ свободного\ места}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00260}00260\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00261}00261\ \ \ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga21353cb4f5af666237739e62ce019cd6}{RTT\_FlashPrepare}}();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00262}00262\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00263}00263\ \ \ \textcolor{comment}{//\ Формируем\ структуру\ в\ RAM}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00264}00264\ \ \ \mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}\ flash\_data;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00265}00265\ \ \ flash\_data.\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ \ =\ next\_tag;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00266}00266\ \ \ flash\_data.\mbox{\hyperlink{struct_r_t_t___flash_header__t_afd1a5c51af6f97d170c2ccbbe3e34699}{size}}\ =\ valid\_count;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00267}00267\ \ \ memcpy(flash\_data.\mbox{\hyperlink{struct_r_t_t___flash_header__t_ae7276198385c8d6f6508f433d042d52a}{data}},\ temp,\ valid\_count);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00268}00268\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00269}00269\ \ \ \textcolor{comment}{//\ Записываем\ структуру\ во\ Flash\ (по\ 4\ байта)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00270}00270\ \ \ \textcolor{keyword}{const}\ uint32\_t\ *p\ =\ (\textcolor{keyword}{const}\ uint32\_t\ *)\&flash\_data;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00271}00271\ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keywordtype}{unsigned}\ i\ =\ 0;\ i\ <\ \textcolor{keyword}{sizeof}(\mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}})\ /\ 4;\ i++)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00272}00272\ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00273}00273\ \ \ \ \ \textcolor{keywordflow}{if}(HAL\_FLASH\_Program(FLASH\_TYPEPROGRAM\_WORD,\ addr\ +\ i\ *\ 4,\ p[i])\ !=\ HAL\_OK)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00274}00274\ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00275}00275\ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00276}00276\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00277}00277\ \ \ HAL\_FLASH\_Lock();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00278}00278\ \ \ \_\_DSB();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00279}00279\ \ \ \_\_ISB();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00280}00280\ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00281}00281\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00282}00282\ \ \ \textcolor{keywordflow}{return}\ (\textcolor{keywordtype}{int})(next\_tag\&0xFF);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00283}00283\ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00284}00284\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00285}00285\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00286}00286\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00287}00287\ \textcolor{comment}{\ \ *\ @brief\ Читает\ последние\ символы\ RTT-\/буфера\ из\ Flash\ по\ тегу}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00288}00288\ \textcolor{comment}{\ \ *\ @param\ tag\ \ \ \ \ \ \ \ Базовый\ или\ конкретный\ идентификатор\ буфера.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00289}00289\ \textcolor{comment}{\ \ *\ @param\ Buffer\ \ \ \ \ Буфер\ назначения\ для\ копирования\ данных}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00290}00290\ \textcolor{comment}{\ \ *\ @param\ tail\_size\ \ Количество\ последних\ символов,\ которые\ нужно\ прочитать}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00291}00291\ \textcolor{comment}{\ \ *\ @param\ read\_size\ \ Количество\ считанных\ символов}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00292}00292\ \textcolor{comment}{\ \ *\ @return\ >=0\ —\ номер\ буфера\ (тег)\ для\ записи,\ <0\ —\ ошибка\ (тег\ не\ найден\ или\ структура\ повреждена)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00293}00293\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00294}00294\ \textcolor{comment}{\ \ *\ @details\ \ Копирует\ последние\ tail\_size\ символов\ из\ найденной\ записи\ Flash\ в\ Buffer.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00295}00295\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ \ \ Тег\ может\ быть\ базовым\ или\ конкретным:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00296}00296\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ \ \ \ \ -\/\ Если\ базовый\ (младший\ байт\ ==\ 0)\ —\ будет\ прочитана\ последняя\ запись\ из\ группы.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00297}00297\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ \ \ \ \ -\/\ Если\ конкретный\ (младший\ байт\ !=\ 0)\ —\ прочитывается\ именно\ эта\ запись.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00298}00298\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00299}\mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga734b2ebbf0c77699b739013878cfd146}{00299}}\ \_\_STATIC\_FORCEINLINE\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga734b2ebbf0c77699b739013878cfd146}{RTT\_ReadFromFlash}}(uint32\_t\ tag,\ \textcolor{keywordtype}{char}\ *Buffer,\ uint32\_t\ tail\_size,\ uint32\_t\ *read\_size)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00300}00300\ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00301}00301\ \ \ \textcolor{keywordflow}{if}\ (!Buffer\ ||\ tail\_size\ ==\ 0)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00302}00302\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ \textcolor{comment}{//\ Неверные\ параметры}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00303}00303\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00304}00304\ \ \ \textcolor{keywordflow}{if}\ (tag\ ==\ 0xFFFFFFFF)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00305}00305\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ \textcolor{comment}{//\ Недопустимый\ тег}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00306}00306\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00307}00307\ \ \ uint32\_t\ addr\ =\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga8e56f75d3ab8a89ddde1404ae23c3297}{RTT\_FLASH\_SECTOR\_START}};}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00308}00308\ \ \ \mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}\ *flash\_hdr\ =\ NULL;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00309}00309\ \ \ \mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}\ *target\_hdr\ =\ NULL;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00310}00310\ \ \ uint32\_t\ base\_tag\ =\ tag\ \&\ 0xFFFFFF00;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00311}00311\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00312}00312\ \ \ \textcolor{comment}{//\ Поиск\ записи\ по\ тегу}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00313}00313\ \ \ \textcolor{keywordflow}{while}\ ((addr\ +\ \textcolor{keyword}{sizeof}(\mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}))\ <=\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_gafeca0be3688dea07ff443f894668003d}{RTT\_FLASH\_SECTOR\_END}})}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00314}00314\ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00315}00315\ \ \ \ \ flash\_hdr\ =\ (\mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}\ *)addr;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00316}00316\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00317}00317\ \ \ \ \ \textcolor{keywordflow}{if}\ (flash\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ ==\ 0xFFFFFFFF)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00318}00318\ \ \ \ \ \ \ \textcolor{keywordflow}{break};\ \ \textcolor{comment}{//\ Достигнут\ конец\ записанных\ структур}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00319}00319\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00320}00320\ \ \ \ \ \textcolor{comment}{//\ выбраный\ тег}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00321}00321\ \ \ \ \ \textcolor{keywordflow}{if}((flash\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ \&\ 0xFFFFFF00)\ ==\ base\_tag)\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00322}00322\ \ \ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00323}00323\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ ((tag\ \&\ 0xFF)\ ==\ 0)\ \textcolor{comment}{//\ если\ он\ базовый\ -\/\ ищем\ последний\ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00324}00324\ \ \ \ \ \ \ \ \ target\_hdr\ =\ flash\_hdr;\ \ \textcolor{comment}{//\ сохраняем\ последний\ в\ группе}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00325}00325\ \ \ \ \ \ \ \textcolor{keywordflow}{else}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00326}00326\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}(flash\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ ==\ tag)\ \textcolor{comment}{//\ если\ он\ конкретный\ и\ найден\ -\/\ берем\ его}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00327}00327\ \ \ \ \ \ \ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00328}00328\ \ \ \ \ \ \ \ \ \ \ target\_hdr\ =\ flash\_hdr;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00329}00329\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};\ \ \textcolor{comment}{//\ конкретный\ тег\ найден}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00330}00330\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00331}00331\ \ \ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00332}00332\ \ \ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00333}00333\ \ \ \ \ addr\ +=\ \textcolor{keyword}{sizeof}(\mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}});}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00334}00334\ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00335}00335\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00336}00336\ \ \ \textcolor{keywordflow}{if}\ (!target\_hdr)\ \textcolor{keywordflow}{return}\ -\/1;\ \textcolor{comment}{//\ Тег\ не\ найден}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00337}00337\ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00338}00338\ \ \ \textcolor{comment}{//\ Проверка\ корректности\ размера}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00339}00339\ \ \ \textcolor{keywordflow}{if}\ (target\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_afd1a5c51af6f97d170c2ccbbe3e34699}{size}}\ >\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga501312b24e322de4dd6755ad442f0ba3}{RTT\_FLASH\_BUFFER\_SIZE}})}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00340}00340\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ \textcolor{comment}{//\ Повреждённая\ запись\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00341}00341\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00342}00342\ \ \ \textcolor{comment}{//\ Определяем\ количество\ читаемых\ символов}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00343}00343\ \ \ uint32\_t\ n\ =\ (tail\_size\ >\ target\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_afd1a5c51af6f97d170c2ccbbe3e34699}{size}})\ ?\ target\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_afd1a5c51af6f97d170c2ccbbe3e34699}{size}}\ :\ tail\_size;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00344}00344\ \ \ \textcolor{comment}{//\ Начальная\ позиция\ для\ чтения\ последних\ tail\_size\ символов}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00345}00345\ \ \ uint32\_t\ start\ =\ target\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_afd1a5c51af6f97d170c2ccbbe3e34699}{size}}\ -\/\ n;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00346}00346\ \ \ \textcolor{comment}{//\ Копируем\ данные\ из\ Flash\ в\ RAM}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00347}00347\ \ \ memcpy(Buffer,\ \&target\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_ae7276198385c8d6f6508f433d042d52a}{data}}[start],\ n);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00348}00348\ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00349}00349\ \ \ \textcolor{keywordflow}{if}(read\_size\ !=\ NULL)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00350}00350\ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00351}00351\ \ \ \ \ *read\_size\ =\ n;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00352}00352\ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00261}00261\ \ \ \textcolor{comment}{//\ Копируем\ последние\ n\ символов\ из\ RTT}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00262}00262\ \ \ \textcolor{keywordtype}{char}\ temp[\mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga501312b24e322de4dd6755ad442f0ba3}{RTT\_FLASH\_BUFFER\_SIZE}}];}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00263}00263\ \ \ \textcolor{keywordtype}{unsigned}\ valid\_count\ =\ 0;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00264}00264\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00265}00265\ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keywordtype}{unsigned}\ i\ =\ 0;\ i\ <\ n;\ i++)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00266}00266\ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00267}00267\ \ \ \ \ \textcolor{keywordtype}{unsigned}\ idx\ =\ (wr\ +\ buf\_size\ -\/\ n\ +\ i)\ \%\ buf\_size;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00268}00268\ \ \ \ \ \textcolor{keywordtype}{char}\ c\ =\ up-\/>pBuffer[idx];}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00269}00269\ \ \ \ \ \textcolor{keywordflow}{if}\ (c\ !=\ 0)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00270}00270\ \ \ \ \ \ \ temp[valid\_count++]\ =\ c;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00271}00271\ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00272}00272\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00273}00273\ \ \ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga21353cb4f5af666237739e62ce019cd6}{RTT\_FlashPrepare}}();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00274}00274\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00275}00275\ \ \ \textcolor{comment}{//\ Формируем\ структуру\ в\ RAM}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00276}00276\ \ \ \mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}\ flash\_data;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00277}00277\ \ \ flash\_data.\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ \ =\ next\_tag;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00278}00278\ \ \ flash\_data.\mbox{\hyperlink{struct_r_t_t___flash_header__t_afd1a5c51af6f97d170c2ccbbe3e34699}{size}}\ =\ valid\_count;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00279}00279\ \ \ memcpy(flash\_data.\mbox{\hyperlink{struct_r_t_t___flash_header__t_ae7276198385c8d6f6508f433d042d52a}{data}},\ temp,\ valid\_count);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00280}00280\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00281}00281\ \ \ \textcolor{comment}{//\ Записываем\ структуру\ во\ Flash\ (по\ 4\ байта)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00282}00282\ \ \ \textcolor{keyword}{const}\ uint32\_t\ *p\ =\ (\textcolor{keyword}{const}\ uint32\_t\ *)\&flash\_data;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00283}00283\ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keywordtype}{unsigned}\ i\ =\ 0;\ i\ <\ \textcolor{keyword}{sizeof}(\mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}})\ /\ 4;\ i++)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00284}00284\ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00285}00285\ \ \ \ \ \textcolor{keywordflow}{if}(HAL\_FLASH\_Program(FLASH\_TYPEPROGRAM\_WORD,\ addr\ +\ i\ *\ 4,\ p[i])\ !=\ HAL\_OK)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00286}00286\ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00287}00287\ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00288}00288\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00289}00289\ \ \ HAL\_FLASH\_Lock();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00290}00290\ \ \ \_\_DSB();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00291}00291\ \ \ \_\_ISB();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00292}00292\ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00293}00293\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00294}00294\ \ \ \textcolor{keywordflow}{return}\ (\textcolor{keywordtype}{int})(next\_tag\&0xFF);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00295}00295\ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00296}00296\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00297}00297\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00298}00298\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00299}00299\ \textcolor{comment}{\ \ *\ @brief\ Читает\ последние\ символы\ RTT-\/буфера\ из\ Flash\ по\ тегу}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00300}00300\ \textcolor{comment}{\ \ *\ @param\ tag\ \ \ \ \ \ \ \ Базовый\ или\ конкретный\ идентификатор\ буфера.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00301}00301\ \textcolor{comment}{\ \ *\ @param\ Buffer\ \ \ \ \ Буфер\ назначения\ для\ копирования\ данных}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00302}00302\ \textcolor{comment}{\ \ *\ @param\ tail\_size\ \ Количество\ последних\ символов,\ которые\ нужно\ прочитать}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00303}00303\ \textcolor{comment}{\ \ *\ @param\ read\_size\ \ Количество\ считанных\ символов}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00304}00304\ \textcolor{comment}{\ \ *\ @return\ >=0\ —\ номер\ буфера\ (тег)\ для\ записи,\ <0\ —\ ошибка\ (тег\ не\ найден\ или\ структура\ повреждена)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00305}00305\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00306}00306\ \textcolor{comment}{\ \ *\ @details\ \ Копирует\ последние\ tail\_size\ символов\ из\ найденной\ записи\ Flash\ в\ Buffer.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00307}00307\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ \ \ Тег\ может\ быть\ базовым\ или\ конкретным:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00308}00308\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ \ \ \ \ -\/\ Если\ базовый\ (младший\ байт\ ==\ 0)\ —\ будет\ прочитана\ последняя\ запись\ из\ группы.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00309}00309\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ \ \ \ \ -\/\ Если\ конкретный\ (младший\ байт\ !=\ 0)\ —\ прочитывается\ именно\ эта\ запись.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00310}00310\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00311}\mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga734b2ebbf0c77699b739013878cfd146}{00311}}\ \_\_STATIC\_FORCEINLINE\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga734b2ebbf0c77699b739013878cfd146}{RTT\_ReadFromFlash}}(uint32\_t\ tag,\ \textcolor{keywordtype}{char}\ *Buffer,\ uint32\_t\ tail\_size,\ uint32\_t\ *read\_size)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00312}00312\ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00313}00313\ \ \ \textcolor{keywordflow}{if}\ (!Buffer\ ||\ tail\_size\ ==\ 0)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00314}00314\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ \textcolor{comment}{//\ Неверные\ параметры}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00315}00315\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00316}00316\ \ \ \textcolor{keywordflow}{if}\ (tag\ ==\ 0xFFFFFFFF)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00317}00317\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ \textcolor{comment}{//\ Недопустимый\ тег}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00318}00318\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00319}00319\ \ \ uint32\_t\ addr\ =\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga8e56f75d3ab8a89ddde1404ae23c3297}{RTT\_FLASH\_SECTOR\_START}};}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00320}00320\ \ \ \mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}\ *flash\_hdr\ =\ NULL;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00321}00321\ \ \ \mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}\ *target\_hdr\ =\ NULL;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00322}00322\ \ \ uint32\_t\ base\_tag\ =\ tag\ \&\ 0xFFFFFF00;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00323}00323\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00324}00324\ \ \ \textcolor{comment}{//\ Поиск\ записи\ по\ тегу}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00325}00325\ \ \ \textcolor{keywordflow}{while}\ ((addr\ +\ \textcolor{keyword}{sizeof}(\mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}))\ <=\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_gafeca0be3688dea07ff443f894668003d}{RTT\_FLASH\_SECTOR\_END}})}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00326}00326\ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00327}00327\ \ \ \ \ flash\_hdr\ =\ (\mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}}\ *)addr;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00328}00328\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00329}00329\ \ \ \ \ \textcolor{keywordflow}{if}\ (flash\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ ==\ 0xFFFFFFFF)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00330}00330\ \ \ \ \ \ \ \textcolor{keywordflow}{break};\ \ \textcolor{comment}{//\ Достигнут\ конец\ записанных\ структур}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00331}00331\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00332}00332\ \ \ \ \ \textcolor{comment}{//\ выбраный\ тег}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00333}00333\ \ \ \ \ \textcolor{keywordflow}{if}((flash\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ \&\ 0xFFFFFF00)\ ==\ base\_tag)\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00334}00334\ \ \ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00335}00335\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ ((tag\ \&\ 0xFF)\ ==\ 0)\ \textcolor{comment}{//\ если\ он\ базовый\ -\/\ ищем\ последний\ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00336}00336\ \ \ \ \ \ \ \ \ target\_hdr\ =\ flash\_hdr;\ \ \textcolor{comment}{//\ сохраняем\ последний\ в\ группе}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00337}00337\ \ \ \ \ \ \ \textcolor{keywordflow}{else}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00338}00338\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}(flash\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ ==\ tag)\ \textcolor{comment}{//\ если\ он\ конкретный\ и\ найден\ -\/\ берем\ его}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00339}00339\ \ \ \ \ \ \ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00340}00340\ \ \ \ \ \ \ \ \ \ \ target\_hdr\ =\ flash\_hdr;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00341}00341\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};\ \ \textcolor{comment}{//\ конкретный\ тег\ найден}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00342}00342\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00343}00343\ \ \ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00344}00344\ \ \ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00345}00345\ \ \ \ \ addr\ +=\ \textcolor{keyword}{sizeof}(\mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\_FlashHeader\_t}});}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00346}00346\ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00347}00347\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00348}00348\ \ \ \textcolor{keywordflow}{if}\ (!target\_hdr)\ \textcolor{keywordflow}{return}\ -\/1;\ \textcolor{comment}{//\ Тег\ не\ найден}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00349}00349\ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00350}00350\ \ \ \textcolor{comment}{//\ Проверка\ корректности\ размера}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00351}00351\ \ \ \textcolor{keywordflow}{if}\ (target\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_afd1a5c51af6f97d170c2ccbbe3e34699}{size}}\ >\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga501312b24e322de4dd6755ad442f0ba3}{RTT\_FLASH\_BUFFER\_SIZE}})}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00352}00352\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ \textcolor{comment}{//\ Повреждённая\ запись\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00353}00353\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00354}00354\ \ \ \_\_DSB();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00355}00355\ \ \ \_\_ISB();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00356}00356\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00357}00357\ \ \ \textcolor{keywordflow}{return}\ (\textcolor{keywordtype}{int})(target\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ \&\ 0xFF);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00358}00358\ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00359}00359\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00360}00360\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00361}00361\ \textcolor{comment}{\ \ *\ @brief\ Стирание\ сектора\ Flash\ с\ RTT-\/буфером}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00362}00362\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00363}\mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga8d8c6850e32b42871faefce3352012d1}{00363}}\ \_\_STATIC\_FORCEINLINE\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga8d8c6850e32b42871faefce3352012d1}{RTT\_EraseFlash}}(\textcolor{keywordtype}{void})}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00364}00364\ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00365}00365\ \ \ FLASH\_EraseInitTypeDef\ eraseInit;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00366}00366\ \ \ uint32\_t\ pageError\ =\ 0;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00367}00367\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00368}00368\ \ \ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga21353cb4f5af666237739e62ce019cd6}{RTT\_FlashPrepare}}();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00369}00369\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00370}00370\ \ \ eraseInit.TypeErase\ \ \ =\ FLASH\_TYPEERASE\_SECTORS;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00371}00371\ \ \ eraseInit.Sector\ \ \ \ \ \ =\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga3bc1b76864e1d32cbdd174d4caae7724}{RTT\_FLASH\_SECTOR}};}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00372}00372\ \ \ eraseInit.NbSectors\ \ \ =\ 1;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00373}00373\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00374}00374\ \ \ \textcolor{keywordflow}{if}\ (HAL\_FLASHEx\_Erase(\&eraseInit,\ \&pageError)\ !=\ HAL\_OK)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00375}00375\ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00376}00376\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00377}00377\ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00378}00378\ \ \ \textcolor{keywordflow}{return}\ 0;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00379}00379\ \ \ HAL\_FLASH\_Lock();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00380}00380\ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00381}00381\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00382}00382\ \textcolor{comment}{/**\ TRACE\_RTT\_FLASH}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00383}00383\ \textcolor{comment}{\ \ *\ @\}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00384}00384\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00354}00354\ \ \ \textcolor{comment}{//\ Определяем\ количество\ читаемых\ символов}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00355}00355\ \ \ uint32\_t\ n\ =\ (tail\_size\ >\ target\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_afd1a5c51af6f97d170c2ccbbe3e34699}{size}})\ ?\ target\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_afd1a5c51af6f97d170c2ccbbe3e34699}{size}}\ :\ tail\_size;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00356}00356\ \ \ \textcolor{comment}{//\ Начальная\ позиция\ для\ чтения\ последних\ tail\_size\ символов}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00357}00357\ \ \ uint32\_t\ start\ =\ target\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_afd1a5c51af6f97d170c2ccbbe3e34699}{size}}\ -\/\ n;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00358}00358\ \ \ \textcolor{comment}{//\ Копируем\ данные\ из\ Flash\ в\ RAM}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00359}00359\ \ \ memcpy(Buffer,\ \&target\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_ae7276198385c8d6f6508f433d042d52a}{data}}[start],\ n);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00360}00360\ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00361}00361\ \ \ \textcolor{keywordflow}{if}(read\_size\ !=\ NULL)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00362}00362\ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00363}00363\ \ \ \ \ *read\_size\ =\ n;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00364}00364\ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00365}00365\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00366}00366\ \ \ \_\_DSB();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00367}00367\ \ \ \_\_ISB();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00368}00368\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00369}00369\ \ \ \textcolor{keywordflow}{return}\ (\textcolor{keywordtype}{int})(target\_hdr-\/>\mbox{\hyperlink{struct_r_t_t___flash_header__t_a844ee5470a323a749856cbb7a682dc57}{tag}}\ \&\ 0xFF);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00370}00370\ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00371}00371\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00372}00372\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00373}00373\ \textcolor{comment}{\ \ *\ @brief\ Стирание\ сектора\ Flash\ с\ RTT-\/буфером}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00374}00374\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00375}\mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga8d8c6850e32b42871faefce3352012d1}{00375}}\ \_\_STATIC\_FORCEINLINE\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga8d8c6850e32b42871faefce3352012d1}{RTT\_EraseFlash}}(\textcolor{keywordtype}{void})}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00376}00376\ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00377}00377\ \ \ FLASH\_EraseInitTypeDef\ eraseInit;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00378}00378\ \ \ uint32\_t\ pageError\ =\ 0;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00379}00379\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00380}00380\ \ \ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga21353cb4f5af666237739e62ce019cd6}{RTT\_FlashPrepare}}();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00381}00381\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00382}00382\ \ \ eraseInit.TypeErase\ \ \ =\ FLASH\_TYPEERASE\_SECTORS;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00383}00383\ \ \ eraseInit.Sector\ \ \ \ \ \ =\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga3bc1b76864e1d32cbdd174d4caae7724}{RTT\_FLASH\_SECTOR}};}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00384}00384\ \ \ eraseInit.NbSectors\ \ \ =\ 1;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00385}00385\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00386}00386\ \textcolor{preprocessor}{\#else\ }\textcolor{comment}{//\ HAL\_MODULE\_ENABLED\ \&\&\ RTT\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00387}00387\ \textcolor{preprocessor}{\#define\ RTT\_FlashPrepare(...)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00388}00388\ \textcolor{preprocessor}{\#define\ RTT\_EraseFlash(...)\ \ \ \ 0}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00389}00389\ \textcolor{preprocessor}{\#define\ RTT\_SaveToFlash(...)\ \ \ 0}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00390}00390\ \textcolor{preprocessor}{\#define\ RTT\_ReadFromFlash(...)\ 0}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00391}00391\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ HAL\_MODULE\_ENABLED\ \&\&\ RTT\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00392}00392\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00393}00393\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00394}00394\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00395}00395\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00396}00396\ \textcolor{comment}{/**\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00397}00397\ \textcolor{comment}{\ \ *\ @addtogroup\ \ TRACE\_HARDFAULT\ \ \ \ Hardfault\ trace\ defines}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00398}00398\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ \ TRACE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00399}00399\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ \ Модуль\ трассировки\ HardFault\ с\ возможностью\ сохранения\ RTT\ буфера\ во\ Flash}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00400}00400\ \textcolor{comment}{\ \ *\ @details}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00401}00401\ \textcolor{comment}{\ \ *\ Этот\ модуль\ позволяет\ сохранять\ контекст\ процессора\ и\ последние\ символы\ RTT\ буфера\ при\ возникновении\ HardFault.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00402}00402\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00403}00403\ \textcolor{comment}{\ \ *\ Механизм\ работы:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00404}00404\ \textcolor{comment}{\ \ *\ \ \ -\/\ При\ срабатывании\ HardFault\ вызывается\ HF\_HandleFault(),\ который:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00405}00405\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ 1.\ Получает\ указатель\ на\ стек,\ где\ произошёл\ HardFault\ (MSP\ или\ PSP).}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00406}00406\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ 2.\ Выводит\ значения\ регистров\ R0-\/R3,\ R12,\ LR,\ PC,\ PSR\ и\ системных\ регистров\ SCB.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00407}00407\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ 3.\ Формирует\ строку\ с\ регистрами\ и\ копирует\ последние\ символы\ RTT\ буфера.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00408}00408\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ 4.\ Сохраняет\ данные\ во\ Flash\ с\ базовым\ тегом\ HF\_RTT\_TAG\_BASE.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00409}00409\ \textcolor{comment}{\ \ *\ \ \ -\/\ Для\ восстановления\ последнего\ HardFault\ используется\ HF\_CheckRecovered(),\ который:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00410}00410\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ 1.\ Читает\ запись\ во\ Flash\ по\ базовому\ тегу.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00411}00411\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ 2.\ Выводит\ сохранённый\ RTT\ буфер\ и\ контекст\ регистров.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00412}00412\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ 3.\ Опционально\ стирает\ Flash\ после\ восстановления.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00413}00413\ \textcolor{comment}{\ \ @code}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00414}00414\ \textcolor{comment}{\ \ void\ Hardfault()}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00415}00415\ \textcolor{comment}{\ \ \{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00416}00416\ \textcolor{comment}{\ \ \ \ HF\_HandleFault();}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00417}00417\ \textcolor{comment}{\ \ \ \ NVIC\_SystemReset();}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00418}00418\ \textcolor{comment}{\ \ \}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00419}00419\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00420}00420\ \textcolor{comment}{\ \ int\ main()}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00421}00421\ \textcolor{comment}{\ \ \{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00422}00422\ \textcolor{comment}{\ \ \ \ if(HF\_CheckRecovered(0))}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00423}00423\ \textcolor{comment}{\ \ \ \ \{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00424}00424\ \textcolor{comment}{\ \ \ \ \ \ //set\ hardfault\ error}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00425}00425\ \textcolor{comment}{\ \ \ \ \ \ RTT\_EraseFlash();\ //\ erase\ rtt\ flash\ after\ message\ readed}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00426}00426\ \textcolor{comment}{\ \ \ \ \}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00427}00427\ \textcolor{comment}{\ \ \}\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00428}00428\ \textcolor{comment}{\ \ @endcode}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00429}00429\ \textcolor{comment}{\ \ *\ @\{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00430}00430\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00431}00431\ \textcolor{preprocessor}{\#if\ defined(HAL\_MODULE\_ENABLED)\ \&\&\ defined(HARDFAULT\_SERIAL\_TRACE)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00432}00432\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00433}00433\ \textcolor{preprocessor}{\#ifndef\ HF\_RTT\_TAIL\_SIZE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00434}00434\ \textcolor{preprocessor}{\#define\ HF\_RTT\_TAIL\_SIZE\ \ RTT\_FLASH\_BUFFER\_SIZE\ }\textcolor{comment}{///<\ Размер\ буфера\ RTT,\ который\ сохранится\ при\ Hardfault}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00435}00435\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00436}00436\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00437}00437\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00438}00438\ \textcolor{comment}{\ \ *\ @brief\ Контекст\ стек-\/фрейма\ процессора\ при\ HardFault}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00439}00439\ \textcolor{comment}{\ \ *\ @details\ Сохраняет\ регистры\ R0-\/R3,\ R12,\ LR,\ PC,\ PSR\ для\ последующего\ анализа.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00440}00440\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00441}\mbox{\hyperlink{struct_h_f___stack_frame__t}{00441}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00442}\mbox{\hyperlink{struct_h_f___stack_frame__t_a4146ed28926b5f234132b7112119a413}{00442}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_h_f___stack_frame__t_a4146ed28926b5f234132b7112119a413}{r0}};\ \ \ \textcolor{comment}{///<\ Регистр\ R0}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00443}\mbox{\hyperlink{struct_h_f___stack_frame__t_a286104d19185714940645a9df814ddea}{00443}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_h_f___stack_frame__t_a286104d19185714940645a9df814ddea}{r1}};\ \ \ \textcolor{comment}{///<\ Регистр\ R1}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00444}\mbox{\hyperlink{struct_h_f___stack_frame__t_a5a52e5006dabcf68c0fa4cfb0e03335b}{00444}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_h_f___stack_frame__t_a5a52e5006dabcf68c0fa4cfb0e03335b}{r2}};\ \ \ \textcolor{comment}{///<\ Регистр\ R2}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00445}\mbox{\hyperlink{struct_h_f___stack_frame__t_a453c7af42b6928a693af422e17c981d3}{00445}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_h_f___stack_frame__t_a453c7af42b6928a693af422e17c981d3}{r3}};\ \ \ \textcolor{comment}{///<\ Регистр\ R3}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00446}\mbox{\hyperlink{struct_h_f___stack_frame__t_a819ee3bc518c460ece1b7c4079f8f80b}{00446}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_h_f___stack_frame__t_a819ee3bc518c460ece1b7c4079f8f80b}{r12}};\ \ \textcolor{comment}{///<\ Регистр\ R12}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00447}\mbox{\hyperlink{struct_h_f___stack_frame__t_a6e51904297f7725e96d5b5fb291ef577}{00447}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_h_f___stack_frame__t_a6e51904297f7725e96d5b5fb291ef577}{lr}};\ \ \ \textcolor{comment}{///<\ Link\ Register}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00448}\mbox{\hyperlink{struct_h_f___stack_frame__t_a16563896004751c90e41c81ae4570732}{00448}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_h_f___stack_frame__t_a16563896004751c90e41c81ae4570732}{pc}};\ \ \ \textcolor{comment}{///<\ Program\ Counter}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00449}\mbox{\hyperlink{struct_h_f___stack_frame__t_ae47cb051ee3c94471bfd4fe7e49c55f9}{00449}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_h_f___stack_frame__t_ae47cb051ee3c94471bfd4fe7e49c55f9}{psr}};\ \ \textcolor{comment}{///<\ Program\ Status\ Register}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00450}00450\ \}\ \mbox{\hyperlink{struct_h_f___stack_frame__t}{HF\_StackFrame\_t}};}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00451}00451\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00452}00452\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00453}00453\ \textcolor{comment}{\ \ *\ @brief\ Проверка\ и\ вывод\ последнего\ HardFault-\/трейса\ из\ Flash}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00454}00454\ \textcolor{comment}{\ \ *\ @details}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00455}00455\ \textcolor{comment}{\ \ *\ Функция\ ищет\ последнюю\ запись\ HardFault\ по\ базовому\ тегу\ HF\_RTT\_TAG\_BASE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00456}00456\ \textcolor{comment}{\ \ *\ и\ выводит\ её\ содержимое\ в\ консоль.\ После\ успешного\ вывода\ Flash\ можно\ опционально\ очистить.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00457}00457\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00458}00458\ \textcolor{comment}{\ \ *\ @return\ int}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00459}00459\ \textcolor{comment}{\ \ *\ \ \ -\/\ 1\ —\ данные\ HardFault\ найдены\ и\ выведены}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00460}00460\ \textcolor{comment}{\ \ *\ \ \ -\/\ 0\ —\ данные\ отсутствуют\ или\ тег\ не\ найден}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00461}00461\ \textcolor{comment}{\ \ *\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00462}00462\ \textcolor{comment}{\ \ *\ @note\ Вызов\ рекомендуется\ при\ инициализации\ приложения\ для\ анализа\ предыдущего\ сбоя.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00463}00463\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00464}\mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_ga03f8b6f3b537ee1c8e91065c60db504f}{00464}}\ \_\_STATIC\_FORCEINLINE\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_ga03f8b6f3b537ee1c8e91065c60db504f}{HF\_CheckRecovered}}(\textcolor{keywordtype}{int}\ erase)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00465}00465\ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00466}00466\ \ \ \textcolor{keywordtype}{char}\ buffer[\mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga501312b24e322de4dd6755ad442f0ba3}{RTT\_FLASH\_BUFFER\_SIZE}}];}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00467}00467\ \ \ uint32\_t\ read\_size\ =\ 0;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00468}00468\ \ \ \textcolor{keywordtype}{int}\ n\_hardfault\ =\ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga734b2ebbf0c77699b739013878cfd146}{RTT\_ReadFromFlash}}(\mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_gadc960255719c7eff4bdfaa850be9b313}{HF\_RTT\_TAG\_BASE}},\ buffer,\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_gafcc7ea03d4df8f1909e580b519a7f3ca}{HF\_RTT\_TAIL\_SIZE}},\ \&read\_size);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00469}00469\ \ \ \textcolor{keywordflow}{if}\ (n\_hardfault\ >\ 0)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00470}00470\ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00471}00471\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}\(\backslash\)n-\/-\/-\/\ Recovered\ HardFault\ RTT\ buffer\ \#\%u\ -\/-\/-\/\(\backslash\)n"{}},\ n\_hardfault);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00472}00472\ \ \ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keywordtype}{int}\ i\ =\ 0;\ i\ <\ read\_size;\ i++)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00473}00473\ \ \ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00474}00474\ \ \ \ \ \ \ \textcolor{keywordtype}{char}\ c\ =\ buffer[i];}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00475}00475\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (c\ ==\ 0\ ||\ c\ ==\ (\textcolor{keywordtype}{char})0xFF)\ \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00476}00476\ \ \ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}\%c"{}},\ c);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00477}00477\ \ \ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00478}00478\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00479}00479\ \ \ \ \ \textcolor{keywordflow}{if}(erase)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00480}00480\ \ \ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga8d8c6850e32b42871faefce3352012d1}{RTT\_EraseFlash}}();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00481}00481\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}\(\backslash\)n-\/-\/-\/-\/-\/-\/-\/-\/-\/\ HardFault\ Dump\ End\ -\/-\/-\/-\/-\/-\/-\/-\/-\/\(\backslash\)n"{}});}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00482}00482\ \ \ \ \ \textcolor{keywordflow}{return}\ 1;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00483}00483\ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00484}00484\ \ \ \textcolor{keywordflow}{return}\ 0;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00485}00485\ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00486}00486\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00487}00487\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00488}00488\ \textcolor{keyword}{static}\ \mbox{\hyperlink{struct_h_f___stack_frame__t}{HF\_StackFrame\_t}}\ *stack\_frame;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00489}00489\ \textcolor{keyword}{static}\ uint32\_t\ stack\_dump[\mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_gaa31234688b333a505aaa57b8ecdedf5b}{HF\_STACK\_DUMP\_WORDS}}];}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00490}00490\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{void}\ *ret\_adr[10]\ =\ \{0\};\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00491}00491\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00492}00492\ \textcolor{comment}{\ \ *\ @brief\ Обработчик\ HardFault}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00493}00493\ \textcolor{comment}{\ \ *\ @details}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00494}00494\ \textcolor{comment}{\ \ *\ Вызывается\ из\ прерывания\ HardFault\ или\ в\ любом\ месте\ где\ понятно\ что\ ошибка\ критическая.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00495}00495\ \textcolor{comment}{\ \ *\ Последовательно\ выполняет:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00496}00496\ \textcolor{comment}{\ \ *\ \ \ 1.\ Определяет\ активный\ стек\ (MSP\ или\ PSP)\ на\ момент\ сбоя.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00497}00497\ \textcolor{comment}{\ \ *\ \ \ 2.\ Сохраняет\ значения\ регистров\ R0-\/R3,\ R12,\ LR,\ PC,\ PSR.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00498}00498\ \textcolor{comment}{\ \ *\ \ \ 3.\ Выводит\ системные\ регистры\ CFSR,\ HFSR,\ DFSR,\ AFSR,\ MMFAR,\ BFAR.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00499}00499\ \textcolor{comment}{\ \ *\ \ \ 4.\ Формирует\ stack\ trace\ с\ 3\ уровнями\ возврата.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00500}00500\ \textcolor{comment}{\ \ *\ \ \ 5.\ Копирует\ последние\ символы\ RTT\ буфера.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00501}00501\ \textcolor{comment}{\ \ *\ \ \ 6.\ Сохраняет\ все\ данные\ во\ Flash\ через\ RTT\_SaveToFlash\ с\ базовым\ тегом\ HF\_RTT\_TAG\_BASE.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00502}00502\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00503}00503\ \textcolor{comment}{\ \ *\ @note\ Функция\ защищена,\ так\ как\ вызывается\ в\ контексте\ сбоя\ —\ минимизирует\ использование\ вызовов\ HAL.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00504}00504\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00505}\mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_gadd8e10e7ec3b0204f7f92062ecd452f7}{00505}}\ \_\_STATIC\_FORCEINLINE\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_gadd8e10e7ec3b0204f7f92062ecd452f7}{HF\_HandleFault}}(\textcolor{keywordtype}{void})}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00506}00506\ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00507}00507\ \ \ \ \ \textcolor{comment}{//\ Получаем\ указатель\ на\ стек,\ где\ произошёл\ HardFault}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00508}00508\ \ \ \ \ \_\_ASM\ \textcolor{keyword}{volatile}(}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00509}00509\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}TST\ lr,\ \#4\ \ \ \ \ \ \ \(\backslash\)n"{}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00510}00510\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}ITE\ EQ\ \ \ \ \ \ \ \ \ \ \ \(\backslash\)n"{}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00511}00511\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}MRSEQ\ \%[ptr],\ MSP\(\backslash\)n"{}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00512}00512\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}MRSNE\ \%[ptr],\ PSP\(\backslash\)n"{}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00513}00513\ \ \ \ \ \ \ \ \ :\ [ptr]\ \textcolor{stringliteral}{"{}=r"{}}(stack\_frame)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00514}00514\ \ \ \ \ );}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00515}00515\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00516}00516\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}\(\backslash\)n=====\ HardFault\ occurred!\ =====\(\backslash\)n"{}});}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00517}00517\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}R0\ \ =\ 0x\%08X\(\backslash\)n"{}},\ stack\_frame-\/>r0);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00518}00518\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}R1\ \ =\ 0x\%08X\(\backslash\)n"{}},\ stack\_frame-\/>r1);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00519}00519\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}R2\ \ =\ 0x\%08X\(\backslash\)n"{}},\ stack\_frame-\/>r2);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00520}00520\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}R3\ \ =\ 0x\%08X\(\backslash\)n"{}},\ stack\_frame-\/>r3);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00521}00521\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}R12\ =\ 0x\%08X\(\backslash\)n"{}},\ stack\_frame-\/>r12);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00522}00522\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}LR\ \ =\ 0x\%08X\(\backslash\)n"{}},\ stack\_frame-\/>lr);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00523}00523\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}PC\ \ =\ 0x\%08X\(\backslash\)n"{}},\ stack\_frame-\/>pc);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00524}00524\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}PSR\ =\ 0x\%08X\(\backslash\)n"{}},\ stack\_frame-\/>psr);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00525}00525\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00526}00526\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}CFSR\ \ =\ 0x\%08X\(\backslash\)n"{}},\ SCB-\/>CFSR);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00527}00527\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}HFSR\ \ =\ 0x\%08X\(\backslash\)n"{}},\ SCB-\/>HFSR);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00528}00528\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}DFSR\ \ =\ 0x\%08X\(\backslash\)n"{}},\ SCB-\/>DFSR);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00529}00529\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}AFSR\ \ =\ 0x\%08X\(\backslash\)n"{}},\ SCB-\/>AFSR);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00530}00530\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}MMFAR\ =\ 0x\%08X\(\backslash\)n"{}},\ SCB-\/>MMFAR);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00531}00531\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}BFAR\ \ =\ 0x\%08X\(\backslash\)n"{}},\ SCB-\/>BFAR);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00532}00532\ \ \ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00533}00533\ \ \ \ \ \textcolor{comment}{//\ -\/-\/-\/\ Stack\ trace\ -\/-\/-\/}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00534}00534\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}-\/-\/-\/\ Stack\ trace\ -\/-\/-\/\(\backslash\)n"{}});}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00535}00535\ \ \ \ \ ret\_adr[0]\ =\ \_\_builtin\_return\_address(0);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00536}00536\ \ \ \ \ ret\_adr[1]\ =\ \_\_builtin\_return\_address(1);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00537}00537\ \ \ \ \ ret\_adr[2]\ =\ \_\_builtin\_return\_address(2);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00538}00538\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00539}00539\ \ \ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keywordtype}{int}\ i\ =\ 0;\ i\ <\ 3;\ i++)\ \ \textcolor{comment}{//\ развернуть\ n\ уровней}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00540}00540\ \ \ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00541}00541\ \ \ \ \ \ \ \textcolor{keywordflow}{if}(ret\_adr[i])}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00542}00542\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}\ \ \#\%d:\ 0x\%08lX\(\backslash\)r\(\backslash\)n"{}},\ i,\ ret\_adr[i]);\ \textcolor{comment}{//\ -\/1\ для\ Thumb}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00543}00543\ \ \ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00544}00544\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga79f222c8ab644de4d47f07528d1edd63}{RTT\_SaveToFlash}}(\mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_gadc960255719c7eff4bdfaa850be9b313}{HF\_RTT\_TAG\_BASE}},\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_gafcc7ea03d4df8f1909e580b519a7f3ca}{HF\_RTT\_TAIL\_SIZE}});}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00545}00545\ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00546}00546\ \textcolor{preprocessor}{\#else\ }\textcolor{comment}{//\ HAL\_MODULE\_ENABLED\ \&\&\ HARDFAULT\_SERIAL\_TRACE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00547}00547\ \textcolor{preprocessor}{\#define\ HF\_CheckRecovered(...)\ 0}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00548}00548\ \textcolor{preprocessor}{\#define\ HF\_HandleFault(...)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00549}00549\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ HAL\_MODULE\_ENABLED\ \&\&\ HARDFAULT\_SERIAL\_TRACE}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00550}00550\ \textcolor{comment}{/**\ TRACE\_HARDFAULT}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00551}00551\ \textcolor{comment}{\ \ *\ @\}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00552}00552\ \textcolor{comment}{\ \ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00553}00553\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00554}00554\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00555}00555\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00556}00556\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\_\_TRACE\_H\_}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00386}00386\ \ \ \textcolor{keywordflow}{if}\ (HAL\_FLASHEx\_Erase(\&eraseInit,\ \&pageError)\ !=\ HAL\_OK)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00387}00387\ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00388}00388\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00389}00389\ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00390}00390\ \ \ \textcolor{keywordflow}{return}\ 0;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00391}00391\ \ \ HAL\_FLASH\_Lock();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00392}00392\ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00393}00393\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00394}00394\ \textcolor{comment}{/**\ TRACE\_RTT\_FLASH}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00395}00395\ \textcolor{comment}{\ \ *\ @\}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00396}00396\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00397}00397\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00398}00398\ \textcolor{preprocessor}{\#else\ }\textcolor{comment}{//\ HAL\_MODULE\_ENABLED\ \&\&\ RTT\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00399}00399\ \textcolor{preprocessor}{\#define\ RTT\_FlashPrepare(...)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00400}00400\ \textcolor{preprocessor}{\#define\ RTT\_EraseFlash(...)\ \ \ \ 0}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00401}00401\ \textcolor{preprocessor}{\#define\ RTT\_SaveToFlash(...)\ \ \ 0}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00402}00402\ \textcolor{preprocessor}{\#define\ RTT\_ReadFromFlash(...)\ 0}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00403}00403\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ HAL\_MODULE\_ENABLED\ \&\&\ RTT\_TRACE\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00404}00404\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00405}00405\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00406}00406\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00407}00407\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00408}00408\ \textcolor{comment}{/**\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00409}00409\ \textcolor{comment}{\ \ *\ @addtogroup\ \ TRACE\_HARDFAULT\ \ \ \ Hardfault\ trace\ defines}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00410}00410\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ \ TRACE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00411}00411\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ \ Модуль\ трассировки\ HardFault\ с\ возможностью\ сохранения\ RTT\ буфера\ во\ Flash}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00412}00412\ \textcolor{comment}{\ \ *\ @details}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00413}00413\ \textcolor{comment}{\ \ *\ Этот\ модуль\ позволяет\ сохранять\ контекст\ процессора\ и\ последние\ символы\ RTT\ буфера\ при\ возникновении\ HardFault.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00414}00414\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00415}00415\ \textcolor{comment}{\ \ *\ Механизм\ работы:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00416}00416\ \textcolor{comment}{\ \ *\ \ \ -\/\ При\ срабатывании\ HardFault\ вызывается\ HF\_HandleFault(),\ который:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00417}00417\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ 1.\ Получает\ указатель\ на\ стек,\ где\ произошёл\ HardFault\ (MSP\ или\ PSP).}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00418}00418\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ 2.\ Выводит\ значения\ регистров\ R0-\/R3,\ R12,\ LR,\ PC,\ PSR\ и\ системных\ регистров\ SCB.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00419}00419\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ 3.\ Формирует\ строку\ с\ регистрами\ и\ копирует\ последние\ символы\ RTT\ буфера.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00420}00420\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ 4.\ Сохраняет\ данные\ во\ Flash\ с\ базовым\ тегом\ HF\_RTT\_TAG\_BASE.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00421}00421\ \textcolor{comment}{\ \ *\ \ \ -\/\ Для\ восстановления\ последнего\ HardFault\ используется\ HF\_CheckRecovered(),\ который:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00422}00422\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ 1.\ Читает\ запись\ во\ Flash\ по\ базовому\ тегу.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00423}00423\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ 2.\ Выводит\ сохранённый\ RTT\ буфер\ и\ контекст\ регистров.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00424}00424\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ 3.\ Опционально\ стирает\ Flash\ после\ восстановления.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00425}00425\ \textcolor{comment}{\ \ *\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00426}00426\ \textcolor{comment}{\ \ *\ Параметры:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00427}00427\ \textcolor{comment}{\ \ *\ -\/\ @ref\ HARDFAULT\_SERIAL\_TRACE\ \ \ -\/\ Включить\ обработку\ и\ serial\ трассировку\ Hardfault}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00428}00428\ \textcolor{comment}{\ \ *\ \ \ Если\ отключена\ то\ вставляются\ заглушки,\ никак\ не\ влияющие\ на\ параметры\ и\ остальную\ программу}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00429}00429\ \textcolor{comment}{\ \ *\ -\/\ @ref\ HF\_RTT\_TAG\_BASE\ \ \ \ \ \ \ \ \ \ -\/\ Базовый\ тег\ RTT\ Flash\ для\ HardFault\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00430}00430\ \textcolor{comment}{\ \ *\ -\/\ @ref\ HF\_RTT\_TAIL\_SIZE\ \ \ \ \ \ \ \ \ -\/\ Размер\ буфера\ RTT,\ который\ сохранится\ при\ Hardfault}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00431}00431\ \textcolor{comment}{\ \ *\ -\/\ @ref\ HF\_STACK\_DUMP\_WORDS\ \ \ \ \ \ -\/\ Сколько\ слов\ стека\ будет\ проанализировано\ во\ время\ Hardfault}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00432}00432\ \textcolor{comment}{\ \ *\ -\/\ @ref\ HF\_FLASH\_ADDR\ \ \ \ \ \ \ \ \ \ \ \ -\/\ Адрес\ FLASH\ куда\ положится\ RTT\ буфер}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00433}00433\ \textcolor{comment}{\ \ *\ -\/\ @ref\ HF\_RAM\_END\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -\/\ Конец\ RAM\ памяти\ (чтобы\ во\ время\ анализа\ стека\ не\ выйти\ за\ пределы)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00434}00434\ \textcolor{comment}{\ \ *\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00435}00435\ \textcolor{comment}{\ \ @code}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00436}00436\ \textcolor{comment}{\ \ void\ Hardfault()}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00437}00437\ \textcolor{comment}{\ \ \{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00438}00438\ \textcolor{comment}{\ \ \ \ HF\_HandleFault();}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00439}00439\ \textcolor{comment}{\ \ \ \ NVIC\_SystemReset();}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00440}00440\ \textcolor{comment}{\ \ \}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00441}00441\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00442}00442\ \textcolor{comment}{\ \ int\ main()}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00443}00443\ \textcolor{comment}{\ \ \{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00444}00444\ \textcolor{comment}{\ \ \ \ if(HF\_CheckRecovered(0))}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00445}00445\ \textcolor{comment}{\ \ \ \ \{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00446}00446\ \textcolor{comment}{\ \ \ \ \ \ //set\ hardfault\ error}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00447}00447\ \textcolor{comment}{\ \ \ \ \ \ RTT\_EraseFlash();\ //\ erase\ rtt\ flash\ after\ message\ readed}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00448}00448\ \textcolor{comment}{\ \ \ \ \}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00449}00449\ \textcolor{comment}{\ \ \}\ \ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00450}00450\ \textcolor{comment}{\ \ @endcode}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00451}00451\ \textcolor{comment}{\ \ *\ @\{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00452}00452\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00453}00453\ \textcolor{preprocessor}{\#if\ defined(HAL\_MODULE\_ENABLED)\ \&\&\ defined(HARDFAULT\_SERIAL\_TRACE)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00454}00454\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00455}00455\ \textcolor{preprocessor}{\#ifndef\ HF\_RTT\_TAIL\_SIZE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00456}00456\ \textcolor{preprocessor}{\#define\ HF\_RTT\_TAIL\_SIZE\ \ RTT\_FLASH\_BUFFER\_SIZE\ }\textcolor{comment}{///<\ Размер\ буфера\ RTT,\ который\ сохранится\ при\ Hardfault}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00457}00457\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00458}00458\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00459}00459\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00460}00460\ \textcolor{comment}{\ \ *\ @brief\ Контекст\ стек-\/фрейма\ процессора\ при\ HardFault}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00461}00461\ \textcolor{comment}{\ \ *\ @details\ Сохраняет\ регистры\ R0-\/R3,\ R12,\ LR,\ PC,\ PSR\ для\ последующего\ анализа.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00462}00462\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00463}\mbox{\hyperlink{struct_h_f___stack_frame__t}{00463}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00464}\mbox{\hyperlink{struct_h_f___stack_frame__t_a4146ed28926b5f234132b7112119a413}{00464}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_h_f___stack_frame__t_a4146ed28926b5f234132b7112119a413}{r0}};\ \ \ \textcolor{comment}{///<\ Регистр\ R0}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00465}\mbox{\hyperlink{struct_h_f___stack_frame__t_a286104d19185714940645a9df814ddea}{00465}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_h_f___stack_frame__t_a286104d19185714940645a9df814ddea}{r1}};\ \ \ \textcolor{comment}{///<\ Регистр\ R1}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00466}\mbox{\hyperlink{struct_h_f___stack_frame__t_a5a52e5006dabcf68c0fa4cfb0e03335b}{00466}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_h_f___stack_frame__t_a5a52e5006dabcf68c0fa4cfb0e03335b}{r2}};\ \ \ \textcolor{comment}{///<\ Регистр\ R2}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00467}\mbox{\hyperlink{struct_h_f___stack_frame__t_a453c7af42b6928a693af422e17c981d3}{00467}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_h_f___stack_frame__t_a453c7af42b6928a693af422e17c981d3}{r3}};\ \ \ \textcolor{comment}{///<\ Регистр\ R3}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00468}\mbox{\hyperlink{struct_h_f___stack_frame__t_a819ee3bc518c460ece1b7c4079f8f80b}{00468}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_h_f___stack_frame__t_a819ee3bc518c460ece1b7c4079f8f80b}{r12}};\ \ \textcolor{comment}{///<\ Регистр\ R12}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00469}\mbox{\hyperlink{struct_h_f___stack_frame__t_a6e51904297f7725e96d5b5fb291ef577}{00469}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_h_f___stack_frame__t_a6e51904297f7725e96d5b5fb291ef577}{lr}};\ \ \ \textcolor{comment}{///<\ Link\ Register}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00470}\mbox{\hyperlink{struct_h_f___stack_frame__t_a16563896004751c90e41c81ae4570732}{00470}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_h_f___stack_frame__t_a16563896004751c90e41c81ae4570732}{pc}};\ \ \ \textcolor{comment}{///<\ Program\ Counter}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00471}\mbox{\hyperlink{struct_h_f___stack_frame__t_ae47cb051ee3c94471bfd4fe7e49c55f9}{00471}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_h_f___stack_frame__t_ae47cb051ee3c94471bfd4fe7e49c55f9}{psr}};\ \ \textcolor{comment}{///<\ Program\ Status\ Register}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00472}00472\ \}\ \mbox{\hyperlink{struct_h_f___stack_frame__t}{HF\_StackFrame\_t}};}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00473}00473\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00474}00474\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00475}00475\ \textcolor{comment}{\ \ *\ @brief\ Проверка\ и\ вывод\ последнего\ HardFault-\/трейса\ из\ Flash}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00476}00476\ \textcolor{comment}{\ \ *\ @details}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00477}00477\ \textcolor{comment}{\ \ *\ Функция\ ищет\ последнюю\ запись\ HardFault\ по\ базовому\ тегу\ HF\_RTT\_TAG\_BASE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00478}00478\ \textcolor{comment}{\ \ *\ и\ выводит\ её\ содержимое\ в\ консоль.\ После\ успешного\ вывода\ Flash\ можно\ опционально\ очистить.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00479}00479\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00480}00480\ \textcolor{comment}{\ \ *\ @return\ int}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00481}00481\ \textcolor{comment}{\ \ *\ \ \ -\/\ 1\ —\ данные\ HardFault\ найдены\ и\ выведены}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00482}00482\ \textcolor{comment}{\ \ *\ \ \ -\/\ 0\ —\ данные\ отсутствуют\ или\ тег\ не\ найден}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00483}00483\ \textcolor{comment}{\ \ *\ }}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00484}00484\ \textcolor{comment}{\ \ *\ @note\ Вызов\ рекомендуется\ при\ инициализации\ приложения\ для\ анализа\ предыдущего\ сбоя.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00485}00485\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00486}\mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_ga03f8b6f3b537ee1c8e91065c60db504f}{00486}}\ \_\_STATIC\_FORCEINLINE\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_ga03f8b6f3b537ee1c8e91065c60db504f}{HF\_CheckRecovered}}(\textcolor{keywordtype}{int}\ erase)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00487}00487\ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00488}00488\ \ \ \textcolor{keywordtype}{char}\ buffer[\mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga501312b24e322de4dd6755ad442f0ba3}{RTT\_FLASH\_BUFFER\_SIZE}}];}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00489}00489\ \ \ uint32\_t\ read\_size\ =\ 0;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00490}00490\ \ \ \textcolor{keywordtype}{int}\ n\_hardfault\ =\ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga734b2ebbf0c77699b739013878cfd146}{RTT\_ReadFromFlash}}(\mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_gadc960255719c7eff4bdfaa850be9b313}{HF\_RTT\_TAG\_BASE}},\ buffer,\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_gafcc7ea03d4df8f1909e580b519a7f3ca}{HF\_RTT\_TAIL\_SIZE}},\ \&read\_size);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00491}00491\ \ \ \textcolor{keywordflow}{if}\ (n\_hardfault\ >\ 0)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00492}00492\ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00493}00493\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}\(\backslash\)n-\/-\/-\/\ Recovered\ HardFault\ RTT\ buffer\ \#\%u\ -\/-\/-\/\(\backslash\)n"{}},\ n\_hardfault);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00494}00494\ \ \ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keywordtype}{int}\ i\ =\ 0;\ i\ <\ read\_size;\ i++)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00495}00495\ \ \ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00496}00496\ \ \ \ \ \ \ \textcolor{keywordtype}{char}\ c\ =\ buffer[i];}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00497}00497\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (c\ ==\ 0\ ||\ c\ ==\ (\textcolor{keywordtype}{char})0xFF)\ \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00498}00498\ \ \ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}\%c"{}},\ c);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00499}00499\ \ \ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00500}00500\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00501}00501\ \ \ \ \ \textcolor{keywordflow}{if}(erase)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00502}00502\ \ \ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga8d8c6850e32b42871faefce3352012d1}{RTT\_EraseFlash}}();}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00503}00503\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}\(\backslash\)n-\/-\/-\/-\/-\/-\/-\/-\/-\/\ HardFault\ Dump\ End\ -\/-\/-\/-\/-\/-\/-\/-\/-\/\(\backslash\)n"{}});}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00504}00504\ \ \ \ \ \textcolor{keywordflow}{return}\ 1;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00505}00505\ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00506}00506\ \ \ \textcolor{keywordflow}{return}\ 0;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00507}00507\ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00508}00508\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00509}00509\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00510}00510\ \textcolor{keyword}{static}\ \mbox{\hyperlink{struct_h_f___stack_frame__t}{HF\_StackFrame\_t}}\ *stack\_frame;}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00511}00511\ \textcolor{keyword}{static}\ uint32\_t\ stack\_dump[\mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_gaa31234688b333a505aaa57b8ecdedf5b}{HF\_STACK\_DUMP\_WORDS}}];}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00512}00512\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{void}\ *ret\_adr[10]\ =\ \{0\};\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00513}00513\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00514}00514\ \textcolor{comment}{\ \ *\ @brief\ Обработчик\ HardFault}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00515}00515\ \textcolor{comment}{\ \ *\ @details}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00516}00516\ \textcolor{comment}{\ \ *\ Вызывается\ из\ прерывания\ HardFault\ или\ в\ любом\ месте\ где\ понятно\ что\ ошибка\ критическая.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00517}00517\ \textcolor{comment}{\ \ *\ Последовательно\ выполняет:}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00518}00518\ \textcolor{comment}{\ \ *\ \ \ 1.\ Определяет\ активный\ стек\ (MSP\ или\ PSP)\ на\ момент\ сбоя.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00519}00519\ \textcolor{comment}{\ \ *\ \ \ 2.\ Сохраняет\ значения\ регистров\ R0-\/R3,\ R12,\ LR,\ PC,\ PSR.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00520}00520\ \textcolor{comment}{\ \ *\ \ \ 3.\ Выводит\ системные\ регистры\ CFSR,\ HFSR,\ DFSR,\ AFSR,\ MMFAR,\ BFAR.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00521}00521\ \textcolor{comment}{\ \ *\ \ \ 4.\ Формирует\ stack\ trace\ с\ 3\ уровнями\ возврата.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00522}00522\ \textcolor{comment}{\ \ *\ \ \ 5.\ Копирует\ последние\ символы\ RTT\ буфера.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00523}00523\ \textcolor{comment}{\ \ *\ \ \ 6.\ Сохраняет\ все\ данные\ во\ Flash\ через\ RTT\_SaveToFlash\ с\ базовым\ тегом\ HF\_RTT\_TAG\_BASE.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00524}00524\ \textcolor{comment}{\ \ *}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00525}00525\ \textcolor{comment}{\ \ *\ @note\ Функция\ защищена,\ так\ как\ вызывается\ в\ контексте\ сбоя\ —\ минимизирует\ использование\ вызовов\ HAL.}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00526}00526\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00527}\mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_gadd8e10e7ec3b0204f7f92062ecd452f7}{00527}}\ \_\_STATIC\_FORCEINLINE\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_gadd8e10e7ec3b0204f7f92062ecd452f7}{HF\_HandleFault}}(\textcolor{keywordtype}{void})}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00528}00528\ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00529}00529\ \ \ \ \ \textcolor{comment}{//\ Получаем\ указатель\ на\ стек,\ где\ произошёл\ HardFault}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00530}00530\ \ \ \ \ \_\_ASM\ \textcolor{keyword}{volatile}(}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00531}00531\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}TST\ lr,\ \#4\ \ \ \ \ \ \ \(\backslash\)n"{}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00532}00532\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}ITE\ EQ\ \ \ \ \ \ \ \ \ \ \ \(\backslash\)n"{}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00533}00533\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}MRSEQ\ \%[ptr],\ MSP\(\backslash\)n"{}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00534}00534\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}MRSNE\ \%[ptr],\ PSP\(\backslash\)n"{}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00535}00535\ \ \ \ \ \ \ \ \ :\ [ptr]\ \textcolor{stringliteral}{"{}=r"{}}(stack\_frame)}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00536}00536\ \ \ \ \ );}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00537}00537\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00538}00538\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}\(\backslash\)n=====\ HardFault\ occurred!\ =====\(\backslash\)n"{}});}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00539}00539\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}R0\ \ =\ 0x\%08X\(\backslash\)n"{}},\ stack\_frame-\/>r0);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00540}00540\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}R1\ \ =\ 0x\%08X\(\backslash\)n"{}},\ stack\_frame-\/>r1);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00541}00541\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}R2\ \ =\ 0x\%08X\(\backslash\)n"{}},\ stack\_frame-\/>r2);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00542}00542\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}R3\ \ =\ 0x\%08X\(\backslash\)n"{}},\ stack\_frame-\/>r3);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00543}00543\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}R12\ =\ 0x\%08X\(\backslash\)n"{}},\ stack\_frame-\/>r12);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00544}00544\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}LR\ \ =\ 0x\%08X\(\backslash\)n"{}},\ stack\_frame-\/>lr);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00545}00545\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}PC\ \ =\ 0x\%08X\(\backslash\)n"{}},\ stack\_frame-\/>pc);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00546}00546\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}PSR\ =\ 0x\%08X\(\backslash\)n"{}},\ stack\_frame-\/>psr);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00547}00547\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00548}00548\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}CFSR\ \ =\ 0x\%08X\(\backslash\)n"{}},\ SCB-\/>CFSR);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00549}00549\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}HFSR\ \ =\ 0x\%08X\(\backslash\)n"{}},\ SCB-\/>HFSR);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00550}00550\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}DFSR\ \ =\ 0x\%08X\(\backslash\)n"{}},\ SCB-\/>DFSR);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00551}00551\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}AFSR\ \ =\ 0x\%08X\(\backslash\)n"{}},\ SCB-\/>AFSR);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00552}00552\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}MMFAR\ =\ 0x\%08X\(\backslash\)n"{}},\ SCB-\/>MMFAR);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00553}00553\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}BFAR\ \ =\ 0x\%08X\(\backslash\)n"{}},\ SCB-\/>BFAR);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00554}00554\ \ \ \ \ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00555}00555\ \ \ \ \ \textcolor{comment}{//\ -\/-\/-\/\ Stack\ trace\ -\/-\/-\/}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00556}00556\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}-\/-\/-\/\ Stack\ trace\ -\/-\/-\/\(\backslash\)n"{}});}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00557}00557\ \ \ \ \ ret\_adr[0]\ =\ \_\_builtin\_return\_address(0);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00558}00558\ \ \ \ \ ret\_adr[1]\ =\ \_\_builtin\_return\_address(1);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00559}00559\ \ \ \ \ ret\_adr[2]\ =\ \_\_builtin\_return\_address(2);}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00560}00560\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00561}00561\ \ \ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keywordtype}{int}\ i\ =\ 0;\ i\ <\ 3;\ i++)\ \ \textcolor{comment}{//\ развернуть\ n\ уровней}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00562}00562\ \ \ \ \ \{}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00563}00563\ \ \ \ \ \ \ \textcolor{keywordflow}{if}(ret\_adr[i])}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00564}00564\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___s_e_r_i_a_l_gae9b9b8a611e291a2f2aa5abf99f3ebaa}{my\_printf}}(\textcolor{stringliteral}{"{}\ \ \#\%d:\ 0x\%08lX\(\backslash\)r\(\backslash\)n"{}},\ i,\ ret\_adr[i]);\ \textcolor{comment}{//\ -\/1\ для\ Thumb}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00565}00565\ \ \ \ \ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00566}00566\ \ \ \ \ \mbox{\hyperlink{group___t_r_a_c_e___r_t_t___f_l_a_s_h_ga79f222c8ab644de4d47f07528d1edd63}{RTT\_SaveToFlash}}(\mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_gadc960255719c7eff4bdfaa850be9b313}{HF\_RTT\_TAG\_BASE}},\ \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_gafcc7ea03d4df8f1909e580b519a7f3ca}{HF\_RTT\_TAIL\_SIZE}});}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00567}00567\ \}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00568}00568\ \textcolor{preprocessor}{\#else\ }\textcolor{comment}{//\ HAL\_MODULE\_ENABLED\ \&\&\ HARDFAULT\_SERIAL\_TRACE}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00569}00569\ \textcolor{preprocessor}{\#define\ HF\_CheckRecovered(...)\ 0}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00570}00570\ \textcolor{preprocessor}{\#define\ HF\_HandleFault(...)}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00571}00571\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ HAL\_MODULE\_ENABLED\ \&\&\ HARDFAULT\_SERIAL\_TRACE}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00572}00572\ \textcolor{comment}{/**\ TRACE\_HARDFAULT}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00573}00573\ \textcolor{comment}{\ \ *\ @\}}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00574}00574\ \textcolor{comment}{\ \ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00575}00575\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00576}00576\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00577}00577\ }
\DoxyCodeLine{\Hypertarget{trace_8h_source_l00578}00578\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\_\_TRACE\_H\_}}
\end{DoxyCode}

View File

@@ -19,150 +19,151 @@
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00015}00015\ \textcolor{comment}{-\/\ user[num\_user\_vars]\ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00016}00016\ \textcolor{comment}{Также\ есть\ ряд\ функций\ (дефайнов)\ для\ обращения\ к\ элементам\ этой\ структуры.}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00017}00017\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00018}00018\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00019}00019\ \textcolor{comment}{Если\ трекеры\ @ref\ TRACKERS\_ENABLE\ отключены,\ то\ все\ дефайны\ определяются\ как\ ничего\ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00020}00020\ \textcolor{comment}{и\ на\ производительность\ кода\ не\ влияют\ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00021}00021\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00022}00022\ \textcolor{comment}{@par\ Пример:}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00023}00023\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00024}00024\ \textcolor{comment}{Определяем\ typedef\ трекера\ измерений\ Measure\_TrackerTypeDef}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00025}00025\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00026}00026\ \textcolor{comment}{@verbatim}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00027}00027\ \textcolor{comment}{\ \ typedef\ TrackerTypeDef(MEASURE\_USER\_VARS\_NUMB)\ Measure\_TrackerTypeDef;}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00028}00028\ \textcolor{comment}{@endverbatim}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00029}00029\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00030}00030\ \textcolor{comment}{И\ через\ @ref\ Measure\_TrackerTypeDef\ структура\ подключается\ в\ другие\ структуры}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00031}00031\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00032}00032\ \textcolor{comment}{Для\ работы\ с\ структурой\ можно\ использовать\ функции:}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00033}00033\ \textcolor{comment}{-\/\ Для\ получения\ значения:}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00034}00034\ \textcolor{comment}{\ \ -\/\ TrackerGet\_Ok()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00035}00035\ \textcolor{comment}{\ \ -\/\ TrackerGet\_Err()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00036}00036\ \textcolor{comment}{\ \ -\/\ TrackerGet\_Warn()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00037}00037\ \textcolor{comment}{\ \ -\/\ TrackerGet\_User(n)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00038}00038\ \textcolor{comment}{\ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00039}00039\ \textcolor{comment}{-\/\ Для\ записи\ значения:}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00040}00040\ \textcolor{comment}{\ \ -\/\ TrackerCnt\_Ok()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00041}00041\ \textcolor{comment}{\ \ -\/\ TrackerCnt\_Err()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00042}00042\ \textcolor{comment}{\ \ -\/\ TrackerCnt\_Warn()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00043}00043\ \textcolor{comment}{\ \ -\/\ TrackerCnt\_User()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00044}00044\ \textcolor{comment}{\ \ -\/\ TrackerWrite\_User(n)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00045}00045\ \textcolor{comment}{\ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00046}00046\ \textcolor{comment}{-\/\ Для\ очищения\ значения:}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00047}00047\ \textcolor{comment}{\ \ -\/\ TrackerClear\_All()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00048}00048\ \textcolor{comment}{\ \ -\/\ TrackerClear\_Ok()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00049}00049\ \textcolor{comment}{\ \ -\/\ TrackerClear\_Err()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00050}00050\ \textcolor{comment}{\ \ -\/\ TrackerClear\_Warn()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00051}00051\ \textcolor{comment}{\ \ -\/\ TrackerClear\_User(n)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00052}00052\ \textcolor{comment}{\ \ -\/\ TrackerClear\_UserAll()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00053}00053\ \textcolor{comment}{*\ @\{\ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00054}00054\ \textcolor{comment}{*************************************************************************/}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00055}00055\ \textcolor{preprocessor}{\#ifndef\ \_\_TRACKERS\_H\_}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00056}00056\ \textcolor{preprocessor}{\#define\ \_\_TRACKERS\_H\_}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00057}00057\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{mylibs__defs_8h}{mylibs\_defs.h}}"{}}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00058}00058\ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00059}00059\ \textcolor{preprocessor}{\#ifdef\ TRACKERS\_ENABLE}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00060}00060\ \textcolor{comment}{\ \ /**\ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00061}00061\ \textcolor{comment}{\ \ \ \ *\ @brief\ Структура\ для\ счетчиков\ отладки}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00062}00062\ \textcolor{comment}{\ \ \ \ *\ @param\ num\_user\_vars\ -\/\ количество\ пользовательских\ переменных}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00063}00063\ \textcolor{comment}{\ \ \ \ *\ @details\ Содержит\ счетчик\ для\ успешных\ событый\ (cnt\_ok),}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00064}00064\ \textcolor{comment}{\ \ \ \ *\ счетчик\ для\ ошибок\ (cnt\_err),\ счетчик\ для\ предупреждений\ (cnt\_warn).}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00065}00065\ \textcolor{comment}{\ \ \ \ *}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00066}00066\ \textcolor{comment}{\ \ \ \ *\ Также\ есть\ возможность\ объявить\ пользовательские\ переменные\ в\ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00067}00067\ \textcolor{comment}{\ \ \ \ *\ количестве\ <num\_user\_vars>\ штук.}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00068}00068\ \textcolor{comment}{\ \ \ \ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00069}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga50ccb119acf302969b7fdcb58f2130e4}{00069}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerTypeDef(num\_user\_vars)\ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00070}00070\ \textcolor{preprocessor}{\ \ struct\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00071}00071\ \textcolor{preprocessor}{\ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00072}00072\ \textcolor{preprocessor}{\ \ \ \ uint32\_t\ cnt\_ok;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00073}00073\ \textcolor{preprocessor}{\ \ \ \ uint32\_t\ cnt\_err;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00074}00074\ \textcolor{preprocessor}{\ \ \ \ uint32\_t\ cnt\_warn;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00075}00075\ \textcolor{preprocessor}{\ \ \ \ uint32\_t\ user[num\_user\_vars];\ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00076}00076\ \textcolor{preprocessor}{\ \ \}}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00077}00077\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00078}00078\ \textcolor{comment}{\ \ /**\ @brief\ Получить\ количетство\ пользовательских\ переменных\ */}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00079}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga72be24629fedb8bf70e830373d151fbc}{00079}}\ \textcolor{preprocessor}{\ \ \#define\ num\_of\_usercnts(\_user\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (sizeof(\_user\_)\ /\ sizeof(uint32\_t))}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00080}00080\ \textcolor{comment}{\ \ /**\ @brief\ Проверка\ существует\ ли\ указанная\ пользовательская\ переменная\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00081}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gadd7fd2c6e3a4800f1d5ddab35fd4b43e}{00081}}\ \textcolor{preprocessor}{\ \ \#define\ assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ ((\_uservarnumb\_)\ <\ num\_of\_usercnts((\_cntstruct\_).user))}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00082}00082\ \textcolor{comment}{\ \ /**\ @brief\ Условие\ для\ проверки\ существует\ ли\ указанная\ пользовательская\ переменная\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00083}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gad91d8ca89074270fc040c0449e57cf07}{00083}}\ \textcolor{preprocessor}{\ \ \#define\ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ if(assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_))}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00084}00084\ \textcolor{comment}{\ \ /**\ @brief\ Тернарный\ оператор\ для\ проверки\ существует\ ли\ указанная\ пользовательская\ переменная\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00085}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga39b6ffbc561f8caac276415e1ad32c30}{00085}}\ \textcolor{preprocessor}{\ \ \#define\ tern\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ (assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_))\ ?\ \_uservarnumb\_\ :\ 0}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00086}00086\ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00087}00087\ \ \ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00088}00088\ \textcolor{comment}{\ \ /**\ @brief\ Считать\ счетчик\ успешных\ событий\ */}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00089}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gab880911066605602a966641682090169}{00089}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_ok}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00090}00090\ \textcolor{comment}{\ \ /**\ @brief\ Считать\ счетчик\ ошибок\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00091}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga9dc91e6b798a081f95f2ccef2c288e5e}{00091}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_err}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00092}00092\ \textcolor{comment}{\ \ /**\ @brief\ Считать\ счетчик\ предупреждений\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00093}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga47ac59a406ee74d4cd9fe0fbaf63a758}{00093}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_warn}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00094}00094\ \textcolor{comment}{\ \ /**\ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00095}00095\ \textcolor{comment}{\ \ \ \ *\ @brief\ Считать\ пользовательскую\ переменную\ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00096}00096\ \textcolor{comment}{\ \ \ \ *\ @note\ \ \ Здесь\ нет\ проверки\ -\/\ существует\ ли\ пользовательская\ переменная!\ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00097}00097\ \textcolor{comment}{\ \ \ \ *\ \ \ \ \ \ \ \ \ Есть\ возможность\ выйти\ за\ границы\ структуры!!!\ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00098}00098\ \textcolor{comment}{\ \ \ \ *\ \ \ \ \ \ \ \ \ Чтобы\ этого\ избежать\ можно\ использовать\ дефайн\ \#ref\ assert\_usertracker()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00099}00099\ \textcolor{comment}{\ \ \ \ @verbatim\ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00100}00100\ \textcolor{comment}{\ \ \ \ \ \ if(assert\_usertracker(struct,\ 0))\ \{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00101}00101\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ TrackerGet\_User(struct,\ 0)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00102}00102\ \textcolor{comment}{\ \ \ \ \ \ \}}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00103}00103\ \textcolor{comment}{\ \ \ \ @endverbatim}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00104}00104\ \textcolor{comment}{\ \ \ \ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00105}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga4b08632669043dfdbd219dda03502bdb}{00105}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).user[tern\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)]}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00106}00106\ \ \ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00018}00018\ \textcolor{comment}{Параметры\ для\ конфигурации:}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00019}00019\ \textcolor{comment}{-\/\ @ref\ TRACKERS\_ENABLE\ -\/\ Включить\ трекеры}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00020}00020\ \textcolor{comment}{\ \ Если\ трекеры\ @ref\ TRACKERS\_ENABLE\ отключены,\ то\ все\ дефайны\ определяются\ как\ ничего\ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00021}00021\ \textcolor{comment}{\ \ и\ на\ производительность\ кода\ не\ влияют\ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00022}00022\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00023}00023\ \textcolor{comment}{@par\ Пример:}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00024}00024\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00025}00025\ \textcolor{comment}{Определяем\ typedef\ трекера\ измерений\ Measure\_TrackerTypeDef}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00026}00026\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00027}00027\ \textcolor{comment}{@verbatim}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00028}00028\ \textcolor{comment}{\ \ typedef\ TrackerTypeDef(MEASURE\_USER\_VARS\_NUMB)\ Measure\_TrackerTypeDef;}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00029}00029\ \textcolor{comment}{@endverbatim}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00030}00030\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00031}00031\ \textcolor{comment}{И\ через\ @ref\ Measure\_TrackerTypeDef\ структура\ подключается\ в\ другие\ структуры}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00032}00032\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00033}00033\ \textcolor{comment}{Для\ работы\ с\ структурой\ можно\ использовать\ функции:}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00034}00034\ \textcolor{comment}{-\/\ Для\ получения\ значения:}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00035}00035\ \textcolor{comment}{\ \ -\/\ TrackerGet\_Ok()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00036}00036\ \textcolor{comment}{\ \ -\/\ TrackerGet\_Err()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00037}00037\ \textcolor{comment}{\ \ -\/\ TrackerGet\_Warn()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00038}00038\ \textcolor{comment}{\ \ -\/\ TrackerGet\_User(n)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00039}00039\ \textcolor{comment}{\ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00040}00040\ \textcolor{comment}{-\/\ Для\ записи\ значения:}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00041}00041\ \textcolor{comment}{\ \ -\/\ TrackerCnt\_Ok()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00042}00042\ \textcolor{comment}{\ \ -\/\ TrackerCnt\_Err()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00043}00043\ \textcolor{comment}{\ \ -\/\ TrackerCnt\_Warn()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00044}00044\ \textcolor{comment}{\ \ -\/\ TrackerCnt\_User()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00045}00045\ \textcolor{comment}{\ \ -\/\ TrackerWrite\_User(n)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00046}00046\ \textcolor{comment}{\ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00047}00047\ \textcolor{comment}{-\/\ Для\ очищения\ значения:}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00048}00048\ \textcolor{comment}{\ \ -\/\ TrackerClear\_All()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00049}00049\ \textcolor{comment}{\ \ -\/\ TrackerClear\_Ok()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00050}00050\ \textcolor{comment}{\ \ -\/\ TrackerClear\_Err()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00051}00051\ \textcolor{comment}{\ \ -\/\ TrackerClear\_Warn()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00052}00052\ \textcolor{comment}{\ \ -\/\ TrackerClear\_User(n)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00053}00053\ \textcolor{comment}{\ \ -\/\ TrackerClear\_UserAll()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00054}00054\ \textcolor{comment}{*\ @\{\ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00055}00055\ \textcolor{comment}{*************************************************************************/}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00056}00056\ \textcolor{preprocessor}{\#ifndef\ \_\_TRACKERS\_H\_}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00057}00057\ \textcolor{preprocessor}{\#define\ \_\_TRACKERS\_H\_}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00058}00058\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{mylibs__defs_8h}{mylibs\_defs.h}}"{}}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00059}00059\ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00060}00060\ \textcolor{preprocessor}{\#ifdef\ TRACKERS\_ENABLE}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00061}00061\ \textcolor{comment}{\ \ /**\ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00062}00062\ \textcolor{comment}{\ \ \ \ *\ @brief\ Структура\ для\ счетчиков\ отладки}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00063}00063\ \textcolor{comment}{\ \ \ \ *\ @param\ num\_user\_vars\ -\/\ количество\ пользовательских\ переменных}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00064}00064\ \textcolor{comment}{\ \ \ \ *\ @details\ Содержит\ счетчик\ для\ успешных\ событый\ (cnt\_ok),}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00065}00065\ \textcolor{comment}{\ \ \ \ *\ счетчик\ для\ ошибок\ (cnt\_err),\ счетчик\ для\ предупреждений\ (cnt\_warn).}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00066}00066\ \textcolor{comment}{\ \ \ \ *}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00067}00067\ \textcolor{comment}{\ \ \ \ *\ Также\ есть\ возможность\ объявить\ пользовательские\ переменные\ в\ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00068}00068\ \textcolor{comment}{\ \ \ \ *\ количестве\ <num\_user\_vars>\ штук.}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00069}00069\ \textcolor{comment}{\ \ \ \ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00070}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga50ccb119acf302969b7fdcb58f2130e4}{00070}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerTypeDef(num\_user\_vars)\ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00071}00071\ \textcolor{preprocessor}{\ \ struct\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00072}00072\ \textcolor{preprocessor}{\ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00073}00073\ \textcolor{preprocessor}{\ \ \ \ uint32\_t\ cnt\_ok;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00074}00074\ \textcolor{preprocessor}{\ \ \ \ uint32\_t\ cnt\_err;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00075}00075\ \textcolor{preprocessor}{\ \ \ \ uint32\_t\ cnt\_warn;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00076}00076\ \textcolor{preprocessor}{\ \ \ \ uint32\_t\ user[num\_user\_vars];\ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00077}00077\ \textcolor{preprocessor}{\ \ \}}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00078}00078\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00079}00079\ \textcolor{comment}{\ \ /**\ @brief\ Получить\ количетство\ пользовательских\ переменных\ */}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00080}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga72be24629fedb8bf70e830373d151fbc}{00080}}\ \textcolor{preprocessor}{\ \ \#define\ num\_of\_usercnts(\_user\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (sizeof(\_user\_)\ /\ sizeof(uint32\_t))}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00081}00081\ \textcolor{comment}{\ \ /**\ @brief\ Проверка\ существует\ ли\ указанная\ пользовательская\ переменная\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00082}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gadd7fd2c6e3a4800f1d5ddab35fd4b43e}{00082}}\ \textcolor{preprocessor}{\ \ \#define\ assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ ((\_uservarnumb\_)\ <\ num\_of\_usercnts((\_cntstruct\_).user))}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00083}00083\ \textcolor{comment}{\ \ /**\ @brief\ Условие\ для\ проверки\ существует\ ли\ указанная\ пользовательская\ переменная\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00084}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gad91d8ca89074270fc040c0449e57cf07}{00084}}\ \textcolor{preprocessor}{\ \ \#define\ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ if(assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_))}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00085}00085\ \textcolor{comment}{\ \ /**\ @brief\ Тернарный\ оператор\ для\ проверки\ существует\ ли\ указанная\ пользовательская\ переменная\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00086}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga39b6ffbc561f8caac276415e1ad32c30}{00086}}\ \textcolor{preprocessor}{\ \ \#define\ tern\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ (assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_))\ ?\ \_uservarnumb\_\ :\ 0}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00087}00087\ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00088}00088\ \ \ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00089}00089\ \textcolor{comment}{\ \ /**\ @brief\ Считать\ счетчик\ успешных\ событий\ */}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00090}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gab880911066605602a966641682090169}{00090}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_ok}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00091}00091\ \textcolor{comment}{\ \ /**\ @brief\ Считать\ счетчик\ ошибок\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00092}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga9dc91e6b798a081f95f2ccef2c288e5e}{00092}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_err}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00093}00093\ \textcolor{comment}{\ \ /**\ @brief\ Считать\ счетчик\ предупреждений\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00094}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga47ac59a406ee74d4cd9fe0fbaf63a758}{00094}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_warn}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00095}00095\ \textcolor{comment}{\ \ /**\ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00096}00096\ \textcolor{comment}{\ \ \ \ *\ @brief\ Считать\ пользовательскую\ переменную\ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00097}00097\ \textcolor{comment}{\ \ \ \ *\ @note\ \ \ Здесь\ нет\ проверки\ -\/\ существует\ ли\ пользовательская\ переменная!\ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00098}00098\ \textcolor{comment}{\ \ \ \ *\ \ \ \ \ \ \ \ \ Есть\ возможность\ выйти\ за\ границы\ структуры!!!\ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00099}00099\ \textcolor{comment}{\ \ \ \ *\ \ \ \ \ \ \ \ \ Чтобы\ этого\ избежать\ можно\ использовать\ дефайн\ \#ref\ assert\_usertracker()}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00100}00100\ \textcolor{comment}{\ \ \ \ @verbatim\ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00101}00101\ \textcolor{comment}{\ \ \ \ \ \ if(assert\_usertracker(struct,\ 0))\ \{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00102}00102\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ TrackerGet\_User(struct,\ 0)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00103}00103\ \textcolor{comment}{\ \ \ \ \ \ \}}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00104}00104\ \textcolor{comment}{\ \ \ \ @endverbatim}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00105}00105\ \textcolor{comment}{\ \ \ \ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00106}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga4b08632669043dfdbd219dda03502bdb}{00106}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).user[tern\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)]}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00107}00107\ \ \ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00108}00108\ \ \ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00109}00109\ \textcolor{comment}{\ \ /**\ @brief\ Инкрементирование\ счетчика\ успешных\ событий\ */}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00110}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga23de0006aa08984cfeddb6aa5e512fa1}{00110}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_ok++}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00111}00111\ \textcolor{comment}{\ \ /**\ @brief\ Инкрементирование\ счетчика\ ошибок\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00112}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga49af29ab3927cad105c1d2b018a767e9}{00112}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_err++}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00113}00113\ \textcolor{comment}{\ \ /**\ @brief\ Инкрементирование\ счетчика\ предупреждений\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00114}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga8017fb05a56a1b667244f1f786fa9c57}{00114}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_warn++}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00115}00115\ \textcolor{comment}{\ \ /**\ @brief\ Инкрементирование\ пользовательской\ переменной\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00116}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga1b7549afc4a1760b54a9b93b0f6d105e}{00116}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ \ \ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ (\_cntstruct\_).user[\_uservarnumb\_]++;}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00117}00117\ \textcolor{comment}{\ \ /**\ @brief\ Запись\ числа\ в\ пользовательскую\ переменную\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00118}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gad2f4062a9ac8c2ab062a364f640ebc51}{00118}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerWrite\_User(\_cntstruct\_,\ \_uservarnumb\_,\ \_val\_)\ \ \ \ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ (\_cntstruct\_).user[\_uservarnumb\_]\ =\ (\_val\_)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00119}00119\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00120}00120\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ всей\ структуры\ */}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00121}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga704f7b9f8c65c9bcec48ce7cb77a2d3b}{00121}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_All(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ memset(\&(\_cntstruct\_),\ 0,\ sizeof(\_cntstruct\_))}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00122}00122\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ счетчика\ успешных\ событий\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00123}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga5dd8bac8c7ab5832019d55d7a68371b9}{00123}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_ok\ =\ 0}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00124}00124\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ счетчика\ ошибок\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00125}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gae860b6947c6e317e14d40bd7b4b8eb74}{00125}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_err\ =\ 0}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00126}00126\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ счетчика\ предупреждений\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00127}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga365a8c60bd13b75154feda649dd21ead}{00127}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_warn\ =\ 0}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00128}00128\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ пользовательской\ переменной\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00129}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga063dab1067005e1600ea32531fdf3f8d}{00129}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ (\_cntstruct\_).user[\_uservarnumb\_]\ =\ 0;}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00130}00130\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ всех\ пользовательских\ переменных\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00131}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gaaec7ec19977bb26fa1919dfe920b82d5}{00131}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_UserAll(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ memset(\&(\_cntstruct\_).user,\ 0,\ sizeof((\_cntstruct\_).user))}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00132}00132\ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00133}00133\ \textcolor{preprocessor}{\#else\ }\textcolor{comment}{//TRACKERS\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00134}00134\ \ \ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00135}00135\ \textcolor{preprocessor}{\ \ \#define\ TrackerTypeDef(num\_user\_vars)\ void\ *}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00136}00136\ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00137}00137\ \textcolor{preprocessor}{\ \ \#define\ num\_of\_usercnts(\_user\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00138}00138\ \textcolor{preprocessor}{\ \ \#define\ assert\_tracecnt(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ 0}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00139}00139\ \textcolor{preprocessor}{\ \ \#define\ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ if(0)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00140}00140\ \textcolor{preprocessor}{\ \ \#define\ tern\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ 0}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00141}00141\ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00142}00142\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dummy}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00143}00143\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dummy}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00144}00144\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dummy\ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00145}00145\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ dummy}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00146}00146\ \ \ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00147}00147\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00148}00148\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00149}00149\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00150}00150\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00151}00151\ \textcolor{preprocessor}{\ \ \#define\ TrackerWrite\_User(\_cntstruct\_,\ \_uservarnumb\_,\ \_val\_)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00152}00152\ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00153}00153\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_All(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00154}00154\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00155}00155\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00156}00156\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00157}00157\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_User(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00158}00158\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_UserAll(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00159}00159\ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00160}00160\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//TRACKERS\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00161}00161\ \ \ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00162}00162\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\_\_TRACKERS\_H\_}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00108}00108\ \ \ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00109}00109\ \ \ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00110}00110\ \textcolor{comment}{\ \ /**\ @brief\ Инкрементирование\ счетчика\ успешных\ событий\ */}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00111}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga23de0006aa08984cfeddb6aa5e512fa1}{00111}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_ok++}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00112}00112\ \textcolor{comment}{\ \ /**\ @brief\ Инкрементирование\ счетчика\ ошибок\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00113}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga49af29ab3927cad105c1d2b018a767e9}{00113}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_err++}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00114}00114\ \textcolor{comment}{\ \ /**\ @brief\ Инкрементирование\ счетчика\ предупреждений\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00115}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga8017fb05a56a1b667244f1f786fa9c57}{00115}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_warn++}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00116}00116\ \textcolor{comment}{\ \ /**\ @brief\ Инкрементирование\ пользовательской\ переменной\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00117}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga1b7549afc4a1760b54a9b93b0f6d105e}{00117}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ \ \ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ (\_cntstruct\_).user[\_uservarnumb\_]++;}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00118}00118\ \textcolor{comment}{\ \ /**\ @brief\ Запись\ числа\ в\ пользовательскую\ переменную\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00119}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gad2f4062a9ac8c2ab062a364f640ebc51}{00119}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerWrite\_User(\_cntstruct\_,\ \_uservarnumb\_,\ \_val\_)\ \ \ \ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ (\_cntstruct\_).user[\_uservarnumb\_]\ =\ (\_val\_)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00120}00120\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00121}00121\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ всей\ структуры\ */}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00122}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga704f7b9f8c65c9bcec48ce7cb77a2d3b}{00122}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_All(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ memset(\&(\_cntstruct\_),\ 0,\ sizeof(\_cntstruct\_))}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00123}00123\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ счетчика\ успешных\ событий\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00124}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga5dd8bac8c7ab5832019d55d7a68371b9}{00124}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_ok\ =\ 0}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00125}00125\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ счетчика\ ошибок\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00126}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gae860b6947c6e317e14d40bd7b4b8eb74}{00126}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_err\ =\ 0}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00127}00127\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ счетчика\ предупреждений\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00128}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga365a8c60bd13b75154feda649dd21ead}{00128}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_warn\ =\ 0}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00129}00129\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ пользовательской\ переменной\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00130}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga063dab1067005e1600ea32531fdf3f8d}{00130}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ (\_cntstruct\_).user[\_uservarnumb\_]\ =\ 0;}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00131}00131\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ всех\ пользовательских\ переменных\ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00132}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gaaec7ec19977bb26fa1919dfe920b82d5}{00132}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_UserAll(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ memset(\&(\_cntstruct\_).user,\ 0,\ sizeof((\_cntstruct\_).user))}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00133}00133\ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00134}00134\ \textcolor{preprocessor}{\#else\ }\textcolor{comment}{//TRACKERS\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00135}00135\ \ \ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00136}00136\ \textcolor{preprocessor}{\ \ \#define\ TrackerTypeDef(num\_user\_vars)\ void\ *}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00137}00137\ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00138}00138\ \textcolor{preprocessor}{\ \ \#define\ num\_of\_usercnts(\_user\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00139}00139\ \textcolor{preprocessor}{\ \ \#define\ assert\_tracecnt(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ 0}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00140}00140\ \textcolor{preprocessor}{\ \ \#define\ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ if(0)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00141}00141\ \textcolor{preprocessor}{\ \ \#define\ tern\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ 0}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00142}00142\ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00143}00143\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dummy}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00144}00144\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dummy}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00145}00145\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dummy\ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00146}00146\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ dummy}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00147}00147\ \ \ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00148}00148\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00149}00149\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00150}00150\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00151}00151\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00152}00152\ \textcolor{preprocessor}{\ \ \#define\ TrackerWrite\_User(\_cntstruct\_,\ \_uservarnumb\_,\ \_val\_)}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00153}00153\ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00154}00154\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_All(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00155}00155\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00156}00156\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00157}00157\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00158}00158\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_User(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00159}00159\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_UserAll(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00160}00160\ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00161}00161\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//TRACKERS\_ENABLE}}
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00162}00162\ \ \ }
\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00163}00163\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\_\_TRACKERS\_H\_}}
\end{DoxyCode}