Сделана независимость .h библиотек от таргета и HAL (насколько возможно)
This commit is contained in:
parent
caf08ca619
commit
37843e4bef
@ -64,9 +64,10 @@
|
||||
<a href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga7c1396e5c95c766afccdb45cbfcf5971"/>
|
||||
<a href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga80d6162495fc3776d8902610657d4fee"/>
|
||||
<a href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html"/>
|
||||
<a href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga1ba2fa963c9ae12625be1b7c20718563"/>
|
||||
<a href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga71a0c240c667e976d9caef391ab767ba"/>
|
||||
<a href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gac21587fe68fe3635525358ac3f4059d9"/>
|
||||
<a href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga75acd71c85d4e60dc0eb31bc5780086a"/>
|
||||
<a href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga9c853b02c22f26023c34d1d404b6d653"/>
|
||||
<a href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gadaf3a90724197e1737d5c70c7bcc75e1"/>
|
||||
<a href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gaff223481fcffea77394a331afde29fdc"/>
|
||||
<a href="group___g_p_i_o___i_n_i_t.html"/>
|
||||
<a href="group___g_p_i_o___i_n_i_t.html#ga19d9e3aced311179a2914e0c9b13d0f9"/>
|
||||
@ -229,6 +230,7 @@
|
||||
<a href="struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8"/>
|
||||
<a href="struct_evolve_optimizer__t.html#a5391277564b54e2271856a2466033df5"/>
|
||||
<a href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d"/>
|
||||
<a href="struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a"/>
|
||||
<a href="struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6"/>
|
||||
<a href="struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1"/>
|
||||
<a href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d"/>
|
||||
|
||||
@ -150,13 +150,15 @@ Macros</h2></td></tr>
|
||||
<tr class="memdesc:gaff223481fcffea77394a331afde29fdc"><td class="mdescLeft"> </td><td class="mdescRight">Линейное масштабирование x из диапазона [min_val, max_val] в Q16.16 [0, 65536) <br /></td></tr>
|
||||
<tr class="memitem:ga71a0c240c667e976d9caef391ab767ba" id="r_ga71a0c240c667e976d9caef391ab767ba"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga71a0c240c667e976d9caef391ab767ba">PARAM_UNSCALE_Q16</a>(q16_val, min_val, max_val)</td></tr>
|
||||
<tr class="memdesc:ga71a0c240c667e976d9caef391ab767ba"><td class="mdescLeft"> </td><td class="mdescRight">Обратное линейное масштабирование Q16.16 значения в диапазон [min_val, max_val]. <br /></td></tr>
|
||||
<tr class="memitem:ga9c853b02c22f26023c34d1d404b6d653" id="r_ga9c853b02c22f26023c34d1d404b6d653"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga9c853b02c22f26023c34d1d404b6d653">local_time</a>()</td></tr>
|
||||
<tr class="memdesc:ga9c853b02c22f26023c34d1d404b6d653"><td class="mdescLeft"> </td><td class="mdescRight">Локальное время <br /></td></tr>
|
||||
</table><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
|
||||
Functions</h2></td></tr>
|
||||
<tr class="memitem:gac21587fe68fe3635525358ac3f4059d9" id="r_gac21587fe68fe3635525358ac3f4059d9"><td class="memItemLeft" align="right" valign="top">__STATIC_INLINE void </td><td class="memItemRight" valign="bottom"><a class="el" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gac21587fe68fe3635525358ac3f4059d9">EvolveOptimizer_Init</a> (<a class="el" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a> *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, uint16_t iq_mutation, int32_t *start_params)</td></tr>
|
||||
<tr class="memdesc:gac21587fe68fe3635525358ac3f4059d9"><td class="mdescLeft"> </td><td class="mdescRight">Инициализация эволюционного оптимизатора. <br /></td></tr>
|
||||
<tr class="memitem:ga1ba2fa963c9ae12625be1b7c20718563" id="r_ga1ba2fa963c9ae12625be1b7c20718563"><td class="memItemLeft" align="right" valign="top">__STATIC_INLINE void </td><td class="memItemRight" valign="bottom"><a class="el" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga1ba2fa963c9ae12625be1b7c20718563">EvolveOptimizer_Step</a> (<a class="el" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a> *opt, int32_t *params, int32_t loss)</td></tr>
|
||||
<tr class="memdesc:ga1ba2fa963c9ae12625be1b7c20718563"><td class="mdescLeft"> </td><td class="mdescRight">Один шаг эволюционного оптимизатора. <br /></td></tr>
|
||||
<tr class="memitem:gadaf3a90724197e1737d5c70c7bcc75e1" id="r_gadaf3a90724197e1737d5c70c7bcc75e1"><td class="memItemLeft" align="right" valign="top">__STATIC_INLINE int </td><td class="memItemRight" valign="bottom"><a class="el" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gadaf3a90724197e1737d5c70c7bcc75e1">EvolveOptimizer_Init</a> (<a class="el" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a> *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, uint16_t iq_mutation, int32_t *start_params)</td></tr>
|
||||
<tr class="memdesc:gadaf3a90724197e1737d5c70c7bcc75e1"><td class="mdescLeft"> </td><td class="mdescRight">Инициализация эволюционного оптимизатора. <br /></td></tr>
|
||||
<tr class="memitem:ga75acd71c85d4e60dc0eb31bc5780086a" id="r_ga75acd71c85d4e60dc0eb31bc5780086a"><td class="memItemLeft" align="right" valign="top">__STATIC_INLINE int </td><td class="memItemRight" valign="bottom"><a class="el" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga75acd71c85d4e60dc0eb31bc5780086a">EvolveOptimizer_Step</a> (<a class="el" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a> *opt, int32_t *params, int32_t loss)</td></tr>
|
||||
<tr class="memdesc:ga75acd71c85d4e60dc0eb31bc5780086a"><td class="mdescLeft"> </td><td class="mdescRight">Один шаг эволюционного оптимизатора. <br /></td></tr>
|
||||
</table>
|
||||
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock"><p>Заголовочный файл для адаптивного подбора параметров </p>
|
||||
|
||||
@ -2,6 +2,7 @@ var evolve__optimizer_8h =
|
||||
[
|
||||
[ "PARAM_SCALE_Q16", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gaff223481fcffea77394a331afde29fdc", null ],
|
||||
[ "PARAM_UNSCALE_Q16", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga71a0c240c667e976d9caef391ab767ba", null ],
|
||||
[ "EvolveOptimizer_Init", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gac21587fe68fe3635525358ac3f4059d9", null ],
|
||||
[ "EvolveOptimizer_Step", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga1ba2fa963c9ae12625be1b7c20718563", null ]
|
||||
[ "local_time", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga9c853b02c22f26023c34d1d404b6d653", null ],
|
||||
[ "EvolveOptimizer_Init", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gadaf3a90724197e1737d5c70c7bcc75e1", null ],
|
||||
[ "EvolveOptimizer_Step", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga75acd71c85d4e60dc0eb31bc5780086a", null ]
|
||||
];
|
||||
@ -115,233 +115,302 @@ $(function(){initNavTree('evolve__optimizer_8h_source.html','',''); });
|
||||
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment">- Мутацию для поиска оптимальных параметров</span></div>
|
||||
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">- Несколько независимых оптимизаторов в одной программе</span></div>
|
||||
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">Если библиотека отключена @ref ENABLE_EVOLVE_OPTIMIZATION, то вставляются </span></div>
|
||||
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment">заглушки, никак не влияющие на параметры и остальную программу</span></div>
|
||||
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment">@par Пример использования:</span></div>
|
||||
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">@code</span></div>
|
||||
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">#include "evolve_optimizer.h"</span></div>
|
||||
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">#define N_PARAMS 4</span></div>
|
||||
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">#define N_CANDIDATES 100</span></div>
|
||||
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">#define N_BEST 10</span></div>
|
||||
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment">#define IQ_MUTATION 655</span></div>
|
||||
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">int32_t params[N_PARAMS];</span></div>
|
||||
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment">EvolveOptimizer_t optimizer;</span></div>
|
||||
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">// Формирование параметров</span></div>
|
||||
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">uint16_t param_u16 = 800;</span></div>
|
||||
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment">float param_f = 0.01f;</span></div>
|
||||
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">uint8_t param_u8 = 40;</span></div>
|
||||
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">int16_t param_i16 = 1600;</span></div>
|
||||
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment">params[0] = PARAM_SCALE_Q16(param_u16, 0, 1000);</span></div>
|
||||
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment">params[1] = PARAM_SCALE_Q16(param_f, 0.001f, 0.1f);</span></div>
|
||||
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment">params[2] = PARAM_SCALE_Q16(param_u8, 10, 100);</span></div>
|
||||
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment">params[3] = PARAM_SCALE_Q16(param_i16, 500, 5000);</span></div>
|
||||
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment">// Инициалиазция</span></div>
|
||||
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment">EvolveOptimizer_Init(&optimizer, N_PARAMS, N_CANDIDATES, N_BEST, IQ_MUTATION, params);</span></div>
|
||||
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment">// Шаг эволюции</span></div>
|
||||
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="comment">int32_t loss = calc_iq_loss(); // расчет эффективности параметров</span></div>
|
||||
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="comment">EvolveOptimizer_Step(&optimizer, params, loss);</span></div>
|
||||
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment">// Взятие следующих для эволюции параметров</span></div>
|
||||
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment">param_u16 = PARAM_UNSCALE_Q16(params[0], 0, 1000);</span></div>
|
||||
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment">param_f = PARAM_UNSCALE_Q16(params[1], 0.001f, 0.1f);</span></div>
|
||||
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment">param_u8 = PARAM_UNSCALE_Q16(params[2], 10, 100);</span></div>
|
||||
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment">param_i16 = PARAM_UNSCALE_Q16(params[3], 500, 5000);</span></div>
|
||||
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="comment">@endcode</span></div>
|
||||
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="comment">* @{ </span></div>
|
||||
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment">*****************************************************************************/</span></div>
|
||||
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="preprocessor">#ifndef __EVOLVE_OPTIMIZER_H_</span></div>
|
||||
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="preprocessor">#define __EVOLVE_OPTIMIZER_H_</span></div>
|
||||
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
|
||||
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="preprocessor">#include "<a class="code" href="mylibs__defs_8h.html">mylibs_defs.h</a>"</span></div>
|
||||
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="preprocessor">#include <stdint.h></span></div>
|
||||
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="preprocessor">#include <stdlib.h></span></div>
|
||||
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
|
||||
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="preprocessor">#ifdef ENABLE_EVOLVE_OPTIMIZATION</span></div>
|
||||
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment">Параметры для конфигурации:</span></div>
|
||||
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment">- @ref ENABLE_EVOLVE_OPTIMIZATION - Включить оптимизацию параметров</span></div>
|
||||
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment"> Если библиотека отключена @ref ENABLE_EVOLVE_OPTIMIZATION, то вставляются </span></div>
|
||||
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment"> заглушки, никак не влияющие на параметры и остальную программу</span></div>
|
||||
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">- @ref EVOLVE_MAX_PARAMS - Максимальное количество параметров</span></div>
|
||||
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">- @ref EVOLVE_MAX_CANDIDATES - Максимальное количество кандидатов для обучения</span></div>
|
||||
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment">@par Пример использования:</span></div>
|
||||
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">@code</span></div>
|
||||
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment">#include "evolve_optimizer.h"</span></div>
|
||||
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">#define N_PARAMS 4</span></div>
|
||||
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">#define N_CANDIDATES 100</span></div>
|
||||
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">#define N_BEST 10</span></div>
|
||||
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment">#define IQ_MUTATION (PARAM_SCALE_Q16(0.1, 0, 1))</span></div>
|
||||
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">int32_t params[N_PARAMS];</span></div>
|
||||
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">EvolveOptimizer_t optimizer;</span></div>
|
||||
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment">// Формирование параметров</span></div>
|
||||
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment">uint16_t param_u16 = 800;</span></div>
|
||||
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment">float param_f = 0.01f;</span></div>
|
||||
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment">uint8_t param_u8 = 40;</span></div>
|
||||
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment">int16_t param_i16 = 1600;</span></div>
|
||||
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment">params[0] = PARAM_SCALE_Q16(param_u16, 0, 1000);</span></div>
|
||||
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment">params[1] = PARAM_SCALE_Q16(param_f, 0.001f, 0.1f);</span></div>
|
||||
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment">params[2] = PARAM_SCALE_Q16(param_u8, 10, 100);</span></div>
|
||||
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="comment">params[3] = PARAM_SCALE_Q16(param_i16, 500, 5000);</span></div>
|
||||
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment">// Инициалиазция</span></div>
|
||||
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment">EvolveOptimizer_Init(&optimizer, N_PARAMS, N_CANDIDATES, N_BEST, IQ_MUTATION, params);</span></div>
|
||||
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment">// Шаг эволюции</span></div>
|
||||
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment">int32_t loss = calc_iq_loss(); // расчет эффективности параметров</span></div>
|
||||
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment">EvolveOptimizer_Step(&optimizer, params, loss);</span></div>
|
||||
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="comment">// Взятие следующих для эволюции параметров</span></div>
|
||||
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment">param_u16 = PARAM_UNSCALE_Q16(params[0], 0, 1000);</span></div>
|
||||
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="comment">param_f = PARAM_UNSCALE_Q16(params[1], 0.001f, 0.1f);</span></div>
|
||||
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="comment">param_u8 = PARAM_UNSCALE_Q16(params[2], 10, 100);</span></div>
|
||||
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="comment">param_i16 = PARAM_UNSCALE_Q16(params[3], 500, 5000);</span></div>
|
||||
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="comment">@endcode</span></div>
|
||||
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="comment">* @{ </span></div>
|
||||
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment">*****************************************************************************/</span></div>
|
||||
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="preprocessor">#ifndef __EVOLVE_OPTIMIZER_H_</span></div>
|
||||
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="preprocessor">#define __EVOLVE_OPTIMIZER_H_</span></div>
|
||||
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
|
||||
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="preprocessor">#define Q16_MUL(a,b) ((int32_t)(((int64_t)(a) * (int64_t)(b)) >> 16))</span></div>
|
||||
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="comment">/**</span></div>
|
||||
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment"> * @brief Линейное масштабирование x из диапазона [min_val, max_val] в Q16.16 [0, 65536)</span></div>
|
||||
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment"> */</span></div>
|
||||
<div class="foldopen" id="foldopen00068" data-start="" data-end="">
|
||||
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gaff223481fcffea77394a331afde29fdc"> 68</a></span><span class="preprocessor">#define PARAM_SCALE_Q16(x, min_val, max_val) \</span></div>
|
||||
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="preprocessor">((int32_t)((((float)(x) - (float)(min_val)) / ((float)(max_val) - (float)(min_val))) * 65536.0f))</span></div>
|
||||
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="preprocessor">#include "<a class="code" href="mylibs__defs_8h.html">mylibs_defs.h</a>"</span></div>
|
||||
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="preprocessor">#include <stdint.h></span></div>
|
||||
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="preprocessor">#include <stdlib.h></span></div>
|
||||
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
|
||||
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="preprocessor">#ifdef ENABLE_EVOLVE_OPTIMIZATION</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="comment">/**</span></div>
|
||||
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="comment"> * @brief Линейное масштабирование x из диапазона [min_val, max_val] в Q16.16 [0, 65536)</span></div>
|
||||
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="comment"> */</span><span class="preprocessor"></span></div>
|
||||
<div class="foldopen" id="foldopen00071" data-start="" data-end="">
|
||||
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gaff223481fcffea77394a331afde29fdc"> 71</a></span><span class="preprocessor">#define PARAM_SCALE_Q16(x, min_val, max_val) \</span></div>
|
||||
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="preprocessor">((int32_t)((((float)(x) - (float)(min_val)) / ((float)(max_val) - (float)(min_val))) * 65536.0f))</span></div>
|
||||
</div>
|
||||
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="comment">/**</span></div>
|
||||
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="comment"> * @brief Обратное линейное масштабирование Q16.16 значения в диапазон [min_val, max_val]</span></div>
|
||||
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="comment"> */</span></div>
|
||||
<div class="foldopen" id="foldopen00074" data-start="" data-end="">
|
||||
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga71a0c240c667e976d9caef391ab767ba"> 74</a></span><span class="preprocessor">#define PARAM_UNSCALE_Q16(q16_val, min_val, max_val) \</span></div>
|
||||
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor">(((float)(q16_val) / 65536.0f) * ((float)(max_val) - (float)(min_val)) + (float)(min_val))</span></div>
|
||||
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="comment">/**</span></div>
|
||||
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="comment"> * @brief Обратное линейное масштабирование Q16.16 значения в диапазон [min_val, max_val]</span></div>
|
||||
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="comment"> */</span></div>
|
||||
<div class="foldopen" id="foldopen00077" data-start="" data-end="">
|
||||
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga71a0c240c667e976d9caef391ab767ba"> 77</a></span><span class="preprocessor">#define PARAM_UNSCALE_Q16(q16_val, min_val, max_val) \</span></div>
|
||||
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="preprocessor">(((float)(q16_val) / 65536.0f) * ((float)(max_val) - (float)(min_val)) + (float)(min_val))</span></div>
|
||||
</div>
|
||||
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
|
||||
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="comment">/**</span></div>
|
||||
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="comment"> * @brief Структура эволюционного оптимизатора</span></div>
|
||||
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="comment"> */</span></div>
|
||||
<div class="foldopen" id="foldopen00081" data-start="{" data-end="};">
|
||||
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"><a class="line" href="struct_evolve_optimizer__t.html"> 81</a></span><span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
|
||||
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8"> 82</a></span> uint16_t <a class="code hl_variable" href="struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8">n_params</a>; <span class="comment">///< Количество параметров</span></div>
|
||||
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1"> 83</a></span> uint16_t <a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1">n_cand</a>; <span class="comment">///< Количество кандидатов</span></div>
|
||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6"> 84</a></span> uint16_t <a class="code hl_variable" href="struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6">n_best</a>; <span class="comment">///< Количество лучших, усредняемых</span></div>
|
||||
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"><a class="line" href="struct_evolve_optimizer__t.html#a5391277564b54e2271856a2466033df5"> 85</a></span> uint16_t <a class="code hl_variable" href="struct_evolve_optimizer__t.html#a5391277564b54e2271856a2466033df5">iq_mutation</a>; <span class="comment">///< Амплитуда мутации в Q16.16</span></div>
|
||||
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"><a class="line" href="struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae"> 86</a></span> uint16_t <a class="code hl_variable" href="struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae">cand_index</a>; <span class="comment">///< Индекс кандидата для обработки</span></div>
|
||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"><a class="line" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d"> 87</a></span> int32_t <a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[<a class="code hl_define" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga7c1396e5c95c766afccdb45cbfcf5971">EVOLVE_MAX_CANDIDATES</a>]; <span class="comment">///< Loss для каждого кандидата</span></div>
|
||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"><a class="line" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d"> 88</a></span> int32_t <a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[<a class="code hl_define" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga7c1396e5c95c766afccdb45cbfcf5971">EVOLVE_MAX_CANDIDATES</a>][<a class="code hl_define" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga80d6162495fc3776d8902610657d4fee">EVOLVE_MAX_PARAMS</a>]; <span class="comment">///< Параметры кандидатов</span></div>
|
||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span>} <a class="code hl_struct" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a>;</div>
|
||||
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
|
||||
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="preprocessor">#ifndef local_time</span></div>
|
||||
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"><a class="line" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga9c853b02c22f26023c34d1d404b6d653"> 81</a></span><span class="preprocessor">#define local_time() HAL_GetTick() </span><span class="comment">///< Локальное время</span></div>
|
||||
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="preprocessor">#endif</span></div>
|
||||
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="comment">/**</span></div>
|
||||
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="comment"> * @brief Структура эволюционного оптимизатора</span></div>
|
||||
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="comment"> */</span></div>
|
||||
<div class="foldopen" id="foldopen00087" data-start="{" data-end="};">
|
||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"><a class="line" href="struct_evolve_optimizer__t.html"> 87</a></span><span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
|
||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"><a class="line" href="struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8"> 88</a></span> uint16_t <a class="code hl_variable" href="struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8">n_params</a>; <span class="comment">///< Количество параметров</span></div>
|
||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"><a class="line" href="struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1"> 89</a></span> uint16_t <a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1">n_cand</a>; <span class="comment">///< Количество кандидатов</span></div>
|
||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"><a class="line" href="struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6"> 90</a></span> uint16_t <a class="code hl_variable" href="struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6">n_best</a>; <span class="comment">///< Количество лучших, усредняемых</span></div>
|
||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"><a class="line" href="struct_evolve_optimizer__t.html#a5391277564b54e2271856a2466033df5"> 91</a></span> uint16_t <a class="code hl_variable" href="struct_evolve_optimizer__t.html#a5391277564b54e2271856a2466033df5">iq_mutation</a>; <span class="comment">///< Амплитуда мутации в Q16.16</span></div>
|
||||
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"><a class="line" href="struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae"> 92</a></span> uint16_t <a class="code hl_variable" href="struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae">cand_index</a>; <span class="comment">///< Индекс кандидата для обработки</span></div>
|
||||
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"><a class="line" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d"> 93</a></span> int32_t <a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[<a class="code hl_define" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga7c1396e5c95c766afccdb45cbfcf5971">EVOLVE_MAX_CANDIDATES</a>]; <span class="comment">///< Loss для каждого кандидата</span></div>
|
||||
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"><a class="line" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d"> 94</a></span> int32_t <a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[<a class="code hl_define" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga7c1396e5c95c766afccdb45cbfcf5971">EVOLVE_MAX_CANDIDATES</a>][<a class="code hl_define" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga80d6162495fc3776d8902610657d4fee">EVOLVE_MAX_PARAMS</a>]; <span class="comment">///< Параметры кандидатов</span></div>
|
||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"><a class="line" href="struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a"> 95</a></span> uint16_t <a class="code hl_variable" href="struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a">sorted_idx</a>[<a class="code hl_define" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga7c1396e5c95c766afccdb45cbfcf5971">EVOLVE_MAX_CANDIDATES</a>]; <span class="comment">///< Индексы отсортированных кандидатов</span></div>
|
||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span>} <a class="code hl_struct" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a>;</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
|
||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="comment">/**</span></div>
|
||||
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="comment"> * @brief Инициализация эволюционного оптимизатора.</span></div>
|
||||
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="comment"> * @param opt Указатель на структуру оптимизатора</span></div>
|
||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="comment"> * @param n_params Количество параметров в одном кандидате</span></div>
|
||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="comment"> * @param n_cand Количество кандидатов</span></div>
|
||||
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="comment"> * @param n_best Количество лучших, усредняемых</span></div>
|
||||
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="comment"> * @param iq_mutation Амплитуда мутации в Q16.16</span></div>
|
||||
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="comment"> * @param start_params Начальные параметры (Q16.16)</span></div>
|
||||
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="comment"> */</span></div>
|
||||
<div class="foldopen" id="foldopen00101" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"><a class="line" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gac21587fe68fe3635525358ac3f4059d9"> 101</a></span>__STATIC_INLINE <span class="keywordtype">void</span> <a class="code hl_function" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gac21587fe68fe3635525358ac3f4059d9">EvolveOptimizer_Init</a>(<a class="code hl_struct" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a>* opt,</div>
|
||||
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> uint16_t n_params,</div>
|
||||
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> uint16_t n_cand,</div>
|
||||
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> uint16_t n_best,</div>
|
||||
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> uint16_t iq_mutation,</div>
|
||||
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> int32_t* start_params)</div>
|
||||
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span>{</div>
|
||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">if</span>(<a class="code hl_define" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga27b363f333cacdccc15f5174e096b5b3">check_null_ptr_2</a>(opt, start_params))</div>
|
||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">return</span>;</div>
|
||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
|
||||
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8">n_params</a> = n_params;</div>
|
||||
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1">n_cand</a> = n_cand;</div>
|
||||
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6">n_best</a> = n_best;</div>
|
||||
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a5391277564b54e2271856a2466033df5">iq_mutation</a> = iq_mutation;</div>
|
||||
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
|
||||
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">for</span> (uint16_t i = 0; i < n_cand; i++) {</div>
|
||||
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">for</span> (uint16_t j = 0; j < n_params; j++) {</div>
|
||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[i][j] = start_params[j];</div>
|
||||
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> }</div>
|
||||
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[i] = 0;</div>
|
||||
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> }</div>
|
||||
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span>}</div>
|
||||
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div>
|
||||
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div>
|
||||
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="comment">/** </span></div>
|
||||
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="comment"> * @cond EVOLVE_INTERNAL</span></div>
|
||||
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="comment"> */</span></div>
|
||||
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="preprocessor">#define Q16_MUL(a,b) ((int32_t)(((int64_t)(a) * (int64_t)(b)) >> 16))</span></div>
|
||||
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> </div>
|
||||
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="comment">// Вспомогательный указатель для сортировки</span></div>
|
||||
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="keyword">static</span> <a class="code hl_struct" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a> *g_sort_opt; <span class="comment">// глобальный указатель на текущий оптимизатор</span></div>
|
||||
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
|
||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="keyword">static</span> <span class="keywordtype">int</span> cmp_idx(<span class="keyword">const</span> <span class="keywordtype">void</span> *a, <span class="keyword">const</span> <span class="keywordtype">void</span> *b) {</div>
|
||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span> (g_sort_opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[*(<span class="keyword">const</span> uint16_t*)a] < g_sort_opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[*(<span class="keyword">const</span> uint16_t*)b]) </div>
|
||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">return</span> -1;</div>
|
||||
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">if</span> (g_sort_opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[*(<span class="keyword">const</span> uint16_t*)a] > g_sort_opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[*(<span class="keyword">const</span> uint16_t*)b]) </div>
|
||||
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">return</span> 1;</div>
|
||||
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span>}<span class="comment"></span></div>
|
||||
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="comment">/** @endcond */</span></div>
|
||||
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
|
||||
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
|
||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div>
|
||||
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
|
||||
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment">/**</span></div>
|
||||
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="comment"> * @brief Инициализация эволюционного оптимизатора.</span></div>
|
||||
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="comment"> * @param opt Указатель на структуру оптимизатора</span></div>
|
||||
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="comment"> * @param n_params Количество параметров в одном кандидате</span></div>
|
||||
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="comment"> * @param n_cand Количество кандидатов</span></div>
|
||||
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="comment"> * @param n_best Количество лучших, усредняемых</span></div>
|
||||
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span><span class="comment"> * @param iq_mutation Амплитуда мутации в Q16.16</span></div>
|
||||
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="comment"> * @param start_params Начальные параметры (Q16.16)</span></div>
|
||||
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span><span class="comment"> * @return 0 — если окей, </span></div>
|
||||
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span><span class="comment"> * -1 — если ошибка</span></div>
|
||||
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="comment"> */</span></div>
|
||||
<div class="foldopen" id="foldopen00132" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"><a class="line" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gadaf3a90724197e1737d5c70c7bcc75e1"> 132</a></span>__STATIC_INLINE <span class="keywordtype">int</span> <a class="code hl_function" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gadaf3a90724197e1737d5c70c7bcc75e1">EvolveOptimizer_Init</a>(<a class="code hl_struct" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a>* opt,</div>
|
||||
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> uint16_t n_params,</div>
|
||||
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> uint16_t n_cand,</div>
|
||||
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> uint16_t n_best,</div>
|
||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> uint16_t iq_mutation,</div>
|
||||
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> int32_t* start_params)</div>
|
||||
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span>{</div>
|
||||
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">if</span>((opt = NULL) || (start_params == NULL))</div>
|
||||
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">return</span> -1;</div>
|
||||
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
|
||||
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">if</span>(n_params > <a class="code hl_define" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga80d6162495fc3776d8902610657d4fee">EVOLVE_MAX_PARAMS</a>)</div>
|
||||
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">return</span> -1; </div>
|
||||
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8">n_params</a> = n_params;</div>
|
||||
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> </div>
|
||||
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">if</span>(n_cand > <a class="code hl_define" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga7c1396e5c95c766afccdb45cbfcf5971">EVOLVE_MAX_CANDIDATES</a>)</div>
|
||||
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">return</span> -1; </div>
|
||||
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1">n_cand</a> = n_cand;</div>
|
||||
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
|
||||
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">if</span>(n_best > <a class="code hl_define" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga7c1396e5c95c766afccdb45cbfcf5971">EVOLVE_MAX_CANDIDATES</a>/2)</div>
|
||||
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">return</span> -1; </div>
|
||||
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6">n_best</a> = n_best;</div>
|
||||
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
|
||||
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">if</span>(iq_mutation > 32768)</div>
|
||||
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">return</span> -1; </div>
|
||||
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a5391277564b54e2271856a2466033df5">iq_mutation</a> = iq_mutation;</div>
|
||||
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> </div>
|
||||
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">for</span> (uint16_t i = 0; i < n_cand; i++) {</div>
|
||||
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">for</span> (uint16_t j = 0; j < n_params; j++) {</div>
|
||||
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[i][j] = start_params[j];</div>
|
||||
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> }</div>
|
||||
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[i] = 0;</div>
|
||||
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> }</div>
|
||||
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> uint32_t seed = <a class="code hl_define" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga9c853b02c22f26023c34d1d404b6d653">local_time</a>() + (ADC1->DR & 0xFF);</div>
|
||||
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> srand(seed);</div>
|
||||
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> </div>
|
||||
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span>}</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> </div>
|
||||
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="comment">/**</span></div>
|
||||
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="comment"> * @brief Один шаг эволюционного оптимизатора.</span></div>
|
||||
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span><span class="comment"> * @param opt Указатель на структуру оптимизатора</span></div>
|
||||
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="comment"> * @param params Массив параметров, которые будут обновлены (на выходе — новые параметры)</span></div>
|
||||
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span><span class="comment"> * @param loss Loss текущего кандидата (Q16.16)</span></div>
|
||||
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span><span class="comment"> * @details</span></div>
|
||||
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="comment"> * Сохраняет loss текущего кандидата и формирует параметры следующего кандидата.</span></div>
|
||||
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="comment"> * Если накоплено n_cand кандидатов, генерируется новое поколение.</span></div>
|
||||
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="comment"> * Новое поколение формируется случайным выбором из n_best лучших с добавлением мутации.</span></div>
|
||||
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span><span class="comment"> *</span></div>
|
||||
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="comment"> * На выходе params содержит параметры следующего кандидата для измерений.</span></div>
|
||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span><span class="comment"> */</span></div>
|
||||
<div class="foldopen" id="foldopen00137" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"><a class="line" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga1ba2fa963c9ae12625be1b7c20718563"> 137</a></span>__STATIC_INLINE <span class="keywordtype">void</span> <a class="code hl_function" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga1ba2fa963c9ae12625be1b7c20718563">EvolveOptimizer_Step</a>(<a class="code hl_struct" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a>* opt,</div>
|
||||
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> int32_t* params,</div>
|
||||
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> int32_t loss)</div>
|
||||
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span>{</div>
|
||||
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">if</span>(<a class="code hl_define" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga27b363f333cacdccc15f5174e096b5b3">check_null_ptr_2</a>(opt, params))</div>
|
||||
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">return</span>;</div>
|
||||
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
|
||||
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> uint16_t n_params = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8">n_params</a>; </div>
|
||||
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> uint16_t n_cand = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1">n_cand</a>; </div>
|
||||
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> uint16_t n_best = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6">n_best</a>; </div>
|
||||
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> uint16_t mut = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a5391277564b54e2271856a2466033df5">iq_mutation</a>;</div>
|
||||
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
|
||||
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="comment">// 1. Сохраняем loss текущего кандидата</span></div>
|
||||
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae">cand_index</a>] = loss;</div>
|
||||
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div>
|
||||
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae">cand_index</a>++;</div>
|
||||
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
|
||||
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">if</span> (opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae">cand_index</a> >= n_cand) {</div>
|
||||
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="comment">// 2. Сортируем текущее поколение по loss</span></div>
|
||||
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">for</span> (uint16_t i = 0; i < n_cand - 1; i++) {</div>
|
||||
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">for</span> (uint16_t j = i + 1; j < n_cand; j++) {</div>
|
||||
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">if</span> (opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[j] < opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[i]) {</div>
|
||||
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> int32_t tmp_loss = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[i];</div>
|
||||
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[i] = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[j];</div>
|
||||
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[j] = tmp_loss;</div>
|
||||
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> </div>
|
||||
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">for</span> (uint16_t k = 0; k < n_params; k++) {</div>
|
||||
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> int32_t tmp = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[i][k];</div>
|
||||
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[i][k] = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[j][k];</div>
|
||||
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[j][k] = tmp;</div>
|
||||
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> }</div>
|
||||
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> }</div>
|
||||
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> }</div>
|
||||
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> }</div>
|
||||
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
|
||||
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="comment">// 3. Генерируем новое поколение: каждый кандидат берется случайно из лучших с мутацией</span></div>
|
||||
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> uint16_t n_elite = 2; <span class="comment">// количество элитных кандидатов, которые сохраняем без изменений</span></div>
|
||||
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">for</span> (uint16_t c = 0; c < n_cand; c++) {</div>
|
||||
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span> (c < n_elite) {</div>
|
||||
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="comment">// Копируем лучших кандидатов напрямую без мутации</span></div>
|
||||
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">for</span> (uint16_t i = 0; i < n_params; i++) {</div>
|
||||
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[c][i] = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[c][i]; <span class="comment">// просто сохраняем параметры</span></div>
|
||||
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> }</div>
|
||||
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[c] = 0; </div>
|
||||
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="comment">// Остальные кандидаты формируются с кроссовером и мутацией</span></div>
|
||||
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">for</span> (uint16_t i = 0; i < n_params; i++) {</div>
|
||||
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> int32_t noise = (rand() % (2 * mut)) - mut;</div>
|
||||
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> uint16_t parent = rand() % n_best; <span class="comment">// каждый параметр из случайного лучшего</span></div>
|
||||
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[c][i] = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[parent][i] + noise;</div>
|
||||
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> }</div>
|
||||
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[c] = 0;</div>
|
||||
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> }</div>
|
||||
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> }</div>
|
||||
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae">cand_index</a> = 0;</div>
|
||||
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> }</div>
|
||||
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> </div>
|
||||
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span><span class="comment">/**</span></div>
|
||||
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span><span class="comment"> * @brief Один шаг эволюционного оптимизатора.</span></div>
|
||||
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span><span class="comment"> * @param opt Указатель на структуру оптимизатора</span></div>
|
||||
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span><span class="comment"> * @param params Массив параметров, которые будут обновлены (на выходе — новые параметры)</span></div>
|
||||
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span><span class="comment"> * @param loss Loss текущего кандидата (Q16.16)</span></div>
|
||||
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span><span class="comment"> * @return 0 — если окей, </span></div>
|
||||
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span><span class="comment"> * -1 — если ошибка</span></div>
|
||||
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span><span class="comment"> * @details</span></div>
|
||||
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span><span class="comment"> * Сохраняет loss текущего кандидата и формирует параметры следующего кандидата.</span></div>
|
||||
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span><span class="comment"> * Если накоплено n_cand кандидатов, генерируется новое поколение.</span></div>
|
||||
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span><span class="comment"> * Новое поколение формируется случайным выбором из n_best лучших с добавлением мутации.</span></div>
|
||||
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span><span class="comment"> *</span></div>
|
||||
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span><span class="comment"> * На выходе params содержит параметры следующего кандидата для измерений.</span></div>
|
||||
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span><span class="comment"> * @note Функция использует глобальную внутреннюю переменную для сортировки.</span></div>
|
||||
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="comment"> * Надо убедится что только один экземпляр функции запущен в момент времени</span></div>
|
||||
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="comment"> */</span></div>
|
||||
<div class="foldopen" id="foldopen00187" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"><a class="line" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga75acd71c85d4e60dc0eb31bc5780086a"> 187</a></span>__STATIC_INLINE <span class="keywordtype">int</span> <a class="code hl_function" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga75acd71c85d4e60dc0eb31bc5780086a">EvolveOptimizer_Step</a>(<a class="code hl_struct" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a>* opt,</div>
|
||||
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> int32_t* params,</div>
|
||||
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> int32_t loss)</div>
|
||||
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span>{</div>
|
||||
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">if</span>((opt = NULL) || (params == NULL))</div>
|
||||
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">return</span> -1;</div>
|
||||
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> </div>
|
||||
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="comment">// 4. Возвращаем параметры следующего кандидата</span></div>
|
||||
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">for</span> (uint16_t i = 0; i < opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8">n_params</a>; i++)</div>
|
||||
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> params[i] = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae">cand_index</a>][i];</div>
|
||||
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span>}</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span><span class="preprocessor">#else </span><span class="comment">// ENABLE_EVOLVE_OPTIMIZATION</span></div>
|
||||
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span><span class="comment">//заглушки</span></div>
|
||||
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span><span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
|
||||
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> uint16_t n_params; </div>
|
||||
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> uint16_t n_cand; </div>
|
||||
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> uint16_t n_best; </div>
|
||||
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> uint16_t iq_mutation; </div>
|
||||
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> int32_t loss[0]; </div>
|
||||
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> int32_t candidates[0][0]; </div>
|
||||
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span>} <a class="code hl_struct" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a>;</div>
|
||||
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span><span class="preprocessor">#define EvolveOptimizer_Init(opt, n_params, n_cand, n_best, iq_mutation, start_params)</span></div>
|
||||
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span><span class="preprocessor">#define EvolveOptimizer_Step(opt, params, LossFunc)</span></div>
|
||||
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span><span class="preprocessor">#define PARAM_SCALE_Q16(x, min_val, max_val) (x)</span></div>
|
||||
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span><span class="preprocessor">#define PARAM_UNSCALE_Q16(q16_val, min_val, max_val) (q16_val) (q16_val)</span></div>
|
||||
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="preprocessor">#endif </span><span class="comment">// ENABLE_EVOLVE_OPTIMIZATION</span></div>
|
||||
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> uint16_t n_params = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8">n_params</a>; </div>
|
||||
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">if</span>(n_params > <a class="code hl_define" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga80d6162495fc3776d8902610657d4fee">EVOLVE_MAX_PARAMS</a>)</div>
|
||||
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">return</span> -1; </div>
|
||||
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div>
|
||||
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> uint16_t n_cand = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1">n_cand</a>; </div>
|
||||
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">if</span>(n_cand > <a class="code hl_define" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga7c1396e5c95c766afccdb45cbfcf5971">EVOLVE_MAX_CANDIDATES</a>)</div>
|
||||
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">return</span> -1; </div>
|
||||
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> </div>
|
||||
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> uint16_t n_best = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6">n_best</a>; </div>
|
||||
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">if</span>(n_best > <a class="code hl_define" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga7c1396e5c95c766afccdb45cbfcf5971">EVOLVE_MAX_CANDIDATES</a>/2)</div>
|
||||
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">return</span> -1; </div>
|
||||
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div>
|
||||
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> uint16_t mut = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a5391277564b54e2271856a2466033df5">iq_mutation</a>;</div>
|
||||
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">if</span>(mut > 32768)</div>
|
||||
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">return</span> -1; </div>
|
||||
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> </div>
|
||||
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="comment">// 1. Сохраняем loss текущего кандидата</span></div>
|
||||
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae">cand_index</a>] = loss;</div>
|
||||
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae">cand_index</a>++;</div>
|
||||
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div>
|
||||
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span><span class="preprocessor">#endif </span><span class="comment">// __EVOLVE_OPTIMIZER_H_</span></div>
|
||||
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span><span class="comment">/** EVOLVE_OPTIMIZER</span></div>
|
||||
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span><span class="comment"> * @}</span></div>
|
||||
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span><span class="comment"> */</span></div>
|
||||
<div class="ttc" id="agroup___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_html_ga27b363f333cacdccc15f5174e096b5b3"><div class="ttname"><a href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga27b363f333cacdccc15f5174e096b5b3">check_null_ptr_2</a></div><div class="ttdeci">#define check_null_ptr_2(p1, p2)</div><div class="ttdoc">Проверить два указателя на NULL.</div><div class="ttdef"><b>Definition</b> <a href="mylibs__defs_8h_source.html#l00041">mylibs_defs.h:41</a></div></div>
|
||||
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">if</span> (opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae">cand_index</a> >= n_cand) {</div>
|
||||
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="comment">// 2. Сортируем текущее поколение по loss</span></div>
|
||||
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">for</span>(uint16_t i = 0; i < opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1">n_cand</a>; i++)</div>
|
||||
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a">sorted_idx</a>[i] = i;</div>
|
||||
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> </div>
|
||||
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> g_sort_opt = opt;</div>
|
||||
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> qsort(opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a">sorted_idx</a>, opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1">n_cand</a>, <span class="keyword">sizeof</span>(uint16_t), cmp_idx);</div>
|
||||
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> g_sort_opt = NULL;</div>
|
||||
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span><span class="comment">// for (uint16_t i = 0; i < n_cand - 1; i++) {</span></div>
|
||||
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span><span class="comment">// for (uint16_t j = i + 1; j < n_cand; j++) {</span></div>
|
||||
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span><span class="comment">// if (opt->loss[j] < opt->loss[i]) {</span></div>
|
||||
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span><span class="comment">// int32_t tmp_loss = opt->loss[i];</span></div>
|
||||
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span><span class="comment">// opt->loss[i] = opt->loss[j];</span></div>
|
||||
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span><span class="comment">// opt->loss[j] = tmp_loss;</span></div>
|
||||
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> </div>
|
||||
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span><span class="comment">// for (uint16_t k = 0; k < n_params; k++) {</span></div>
|
||||
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span><span class="comment">// int32_t tmp = opt->candidates[i][k];</span></div>
|
||||
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span><span class="comment">// opt->candidates[i][k] = opt->candidates[j][k];</span></div>
|
||||
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span><span class="comment">// opt->candidates[j][k] = tmp;</span></div>
|
||||
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span><span class="comment">// }</span></div>
|
||||
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span><span class="comment">// }</span></div>
|
||||
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span><span class="comment">// }</span></div>
|
||||
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span><span class="comment">// }</span></div>
|
||||
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> </div>
|
||||
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="comment">// 3. Генерируем новое поколение: каждый кандидат берется случайно из лучших с мутацией</span></div>
|
||||
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> uint16_t n_elite = 2; <span class="comment">// количество элитных кандидатов, которые сохраняем без изменений</span></div>
|
||||
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">for</span> (uint16_t c = 0; c < n_cand; c++) {</div>
|
||||
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">if</span> (c < n_elite) {</div>
|
||||
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="comment">// Копируем лучших кандидатов напрямую без мутации</span></div>
|
||||
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">for</span> (uint16_t i = 0; i < n_params; i++) {</div>
|
||||
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[c][i] = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a">sorted_idx</a>[c]][i]; <span class="comment">// просто сохраняем параметры</span></div>
|
||||
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> }</div>
|
||||
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[c] = 0; </div>
|
||||
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="comment">// Остальные кандидаты формируются с кроссовером и мутацией</span></div>
|
||||
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">for</span> (uint16_t i = 0; i < n_params; i++) {</div>
|
||||
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> int32_t noise = (rand() % (2 * mut)) - mut;</div>
|
||||
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> uint16_t parent = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a">sorted_idx</a>[rand() % opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6">n_best</a>]; <span class="comment">// каждый параметр из случайного лучшего</span></div>
|
||||
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[c][i] = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[parent][i] + noise;</div>
|
||||
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> }</div>
|
||||
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">loss</a>[c] = 0;</div>
|
||||
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> }</div>
|
||||
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> }</div>
|
||||
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae">cand_index</a> = 0;</div>
|
||||
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> }</div>
|
||||
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> </div>
|
||||
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <span class="comment">// 4. Возвращаем параметры следующего кандидата</span></div>
|
||||
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">for</span> (uint16_t i = 0; i < opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8">n_params</a>; i++)</div>
|
||||
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> params[i] = opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a>[opt-><a class="code hl_variable" href="struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae">cand_index</a>][i];</div>
|
||||
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> </div>
|
||||
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span>}</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span><span class="preprocessor">#else </span><span class="comment">// ENABLE_EVOLVE_OPTIMIZATION</span></div>
|
||||
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span><span class="comment">//заглушки</span></div>
|
||||
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span><span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
|
||||
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> uint16_t n_params; </div>
|
||||
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> uint16_t n_cand; </div>
|
||||
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> uint16_t n_best; </div>
|
||||
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> uint16_t iq_mutation; </div>
|
||||
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> int32_t loss[0]; </div>
|
||||
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> int32_t candidates[0][0]; </div>
|
||||
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span>} <a class="code hl_struct" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a>;</div>
|
||||
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span><span class="preprocessor">#define EvolveOptimizer_Init(opt, n_params, n_cand, n_best, iq_mutation, start_params)</span></div>
|
||||
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span><span class="preprocessor">#define EvolveOptimizer_Step(opt, params, LossFunc)</span></div>
|
||||
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span><span class="preprocessor">#define PARAM_SCALE_Q16(x, min_val, max_val) (x)</span></div>
|
||||
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span><span class="preprocessor">#define PARAM_UNSCALE_Q16(q16_val, min_val, max_val) (q16_val)</span></div>
|
||||
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span><span class="preprocessor">#endif </span><span class="comment">// ENABLE_EVOLVE_OPTIMIZATION</span></div>
|
||||
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> </div>
|
||||
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span><span class="preprocessor">#endif </span><span class="comment">// __EVOLVE_OPTIMIZER_H_</span></div>
|
||||
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span><span class="comment">/** EVOLVE_OPTIMIZER</span></div>
|
||||
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span><span class="comment"> * @}</span></div>
|
||||
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span><span class="comment"> */</span></div>
|
||||
<div class="ttc" id="agroup___e_v_o_l_v_e___c_o_n_f_i_g_html_ga7c1396e5c95c766afccdb45cbfcf5971"><div class="ttname"><a href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga7c1396e5c95c766afccdb45cbfcf5971">EVOLVE_MAX_CANDIDATES</a></div><div class="ttdeci">#define EVOLVE_MAX_CANDIDATES</div><div class="ttdoc">Максимальное количество кандидатов для обучения</div><div class="ttdef"><b>Definition</b> <a href="mylibs__config_8h_source.html#l00066">mylibs_config.h:66</a></div></div>
|
||||
<div class="ttc" id="agroup___e_v_o_l_v_e___c_o_n_f_i_g_html_ga80d6162495fc3776d8902610657d4fee"><div class="ttname"><a href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga80d6162495fc3776d8902610657d4fee">EVOLVE_MAX_PARAMS</a></div><div class="ttdeci">#define EVOLVE_MAX_PARAMS</div><div class="ttdoc">Максимальное количество параметров</div><div class="ttdef"><b>Definition</b> <a href="mylibs__config_8h_source.html#l00065">mylibs_config.h:65</a></div></div>
|
||||
<div class="ttc" id="agroup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_html_ga1ba2fa963c9ae12625be1b7c20718563"><div class="ttname"><a href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga1ba2fa963c9ae12625be1b7c20718563">EvolveOptimizer_Step</a></div><div class="ttdeci">__STATIC_INLINE void EvolveOptimizer_Step(EvolveOptimizer_t *opt, int32_t *params, int32_t loss)</div><div class="ttdoc">Один шаг эволюционного оптимизатора.</div><div class="ttdef"><b>Definition</b> <a href="#l00137">evolve_optimizer.h:137</a></div></div>
|
||||
<div class="ttc" id="agroup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_html_gac21587fe68fe3635525358ac3f4059d9"><div class="ttname"><a href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gac21587fe68fe3635525358ac3f4059d9">EvolveOptimizer_Init</a></div><div class="ttdeci">__STATIC_INLINE void EvolveOptimizer_Init(EvolveOptimizer_t *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, uint16_t iq_mutation, int32_t *start_params)</div><div class="ttdoc">Инициализация эволюционного оптимизатора.</div><div class="ttdef"><b>Definition</b> <a href="#l00101">evolve_optimizer.h:101</a></div></div>
|
||||
<div class="ttc" id="agroup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_html_ga75acd71c85d4e60dc0eb31bc5780086a"><div class="ttname"><a href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga75acd71c85d4e60dc0eb31bc5780086a">EvolveOptimizer_Step</a></div><div class="ttdeci">__STATIC_INLINE int EvolveOptimizer_Step(EvolveOptimizer_t *opt, int32_t *params, int32_t loss)</div><div class="ttdoc">Один шаг эволюционного оптимизатора.</div><div class="ttdef"><b>Definition</b> <a href="#l00187">evolve_optimizer.h:187</a></div></div>
|
||||
<div class="ttc" id="agroup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_html_ga9c853b02c22f26023c34d1d404b6d653"><div class="ttname"><a href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga9c853b02c22f26023c34d1d404b6d653">local_time</a></div><div class="ttdeci">#define local_time()</div><div class="ttdoc">Локальное время</div><div class="ttdef"><b>Definition</b> <a href="#l00081">evolve_optimizer.h:81</a></div></div>
|
||||
<div class="ttc" id="agroup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_html_gadaf3a90724197e1737d5c70c7bcc75e1"><div class="ttname"><a href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gadaf3a90724197e1737d5c70c7bcc75e1">EvolveOptimizer_Init</a></div><div class="ttdeci">__STATIC_INLINE int EvolveOptimizer_Init(EvolveOptimizer_t *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, uint16_t iq_mutation, int32_t *start_params)</div><div class="ttdoc">Инициализация эволюционного оптимизатора.</div><div class="ttdef"><b>Definition</b> <a href="#l00132">evolve_optimizer.h:132</a></div></div>
|
||||
<div class="ttc" id="amylibs__defs_8h_html"><div class="ttname"><a href="mylibs__defs_8h.html">mylibs_defs.h</a></div><div class="ttdoc">Заголочный файл для дефайнов библиотеки MyLibsGeneral.</div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html"><div class="ttname"><a href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a></div><div class="ttdoc">Структура эволюционного оптимизатора</div><div class="ttdef"><b>Definition</b> <a href="#l00081">evolve_optimizer.h:81</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html_a0ae0e63ba351335d4445d927991c64ae"><div class="ttname"><a href="struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae">EvolveOptimizer_t::cand_index</a></div><div class="ttdeci">uint16_t cand_index</div><div class="ttdoc">Индекс кандидата для обработки</div><div class="ttdef"><b>Definition</b> <a href="#l00086">evolve_optimizer.h:86</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html_a1c270fce82e0c97e6c88fd0971c1eed8"><div class="ttname"><a href="struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8">EvolveOptimizer_t::n_params</a></div><div class="ttdeci">uint16_t n_params</div><div class="ttdoc">Количество параметров</div><div class="ttdef"><b>Definition</b> <a href="#l00082">evolve_optimizer.h:82</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html_a5391277564b54e2271856a2466033df5"><div class="ttname"><a href="struct_evolve_optimizer__t.html#a5391277564b54e2271856a2466033df5">EvolveOptimizer_t::iq_mutation</a></div><div class="ttdeci">uint16_t iq_mutation</div><div class="ttdoc">Амплитуда мутации в Q16.16.</div><div class="ttdef"><b>Definition</b> <a href="#l00085">evolve_optimizer.h:85</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html_a61bd0c8ae322a79936ba1f2ae22e0e0d"><div class="ttname"><a href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">EvolveOptimizer_t::candidates</a></div><div class="ttdeci">int32_t candidates[100][20]</div><div class="ttdoc">Параметры кандидатов</div><div class="ttdef"><b>Definition</b> <a href="#l00088">evolve_optimizer.h:88</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html_a950cd70cb6bff33b78ad35ee58c729a6"><div class="ttname"><a href="struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6">EvolveOptimizer_t::n_best</a></div><div class="ttdeci">uint16_t n_best</div><div class="ttdoc">Количество лучших, усредняемых</div><div class="ttdef"><b>Definition</b> <a href="#l00084">evolve_optimizer.h:84</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html_ac35c7ca8cede4ab9c53a2845a91cd1b1"><div class="ttname"><a href="struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1">EvolveOptimizer_t::n_cand</a></div><div class="ttdeci">uint16_t n_cand</div><div class="ttdoc">Количество кандидатов</div><div class="ttdef"><b>Definition</b> <a href="#l00083">evolve_optimizer.h:83</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html_ac723b265a3d43b754489f14310314f0d"><div class="ttname"><a href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">EvolveOptimizer_t::loss</a></div><div class="ttdeci">int32_t loss[100]</div><div class="ttdoc">Loss для каждого кандидата</div><div class="ttdef"><b>Definition</b> <a href="#l00087">evolve_optimizer.h:87</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html"><div class="ttname"><a href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a></div><div class="ttdoc">Структура эволюционного оптимизатора</div><div class="ttdef"><b>Definition</b> <a href="#l00087">evolve_optimizer.h:87</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html_a0ae0e63ba351335d4445d927991c64ae"><div class="ttname"><a href="struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae">EvolveOptimizer_t::cand_index</a></div><div class="ttdeci">uint16_t cand_index</div><div class="ttdoc">Индекс кандидата для обработки</div><div class="ttdef"><b>Definition</b> <a href="#l00092">evolve_optimizer.h:92</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html_a1c270fce82e0c97e6c88fd0971c1eed8"><div class="ttname"><a href="struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8">EvolveOptimizer_t::n_params</a></div><div class="ttdeci">uint16_t n_params</div><div class="ttdoc">Количество параметров</div><div class="ttdef"><b>Definition</b> <a href="#l00088">evolve_optimizer.h:88</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html_a5391277564b54e2271856a2466033df5"><div class="ttname"><a href="struct_evolve_optimizer__t.html#a5391277564b54e2271856a2466033df5">EvolveOptimizer_t::iq_mutation</a></div><div class="ttdeci">uint16_t iq_mutation</div><div class="ttdoc">Амплитуда мутации в Q16.16.</div><div class="ttdef"><b>Definition</b> <a href="#l00091">evolve_optimizer.h:91</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html_a61bd0c8ae322a79936ba1f2ae22e0e0d"><div class="ttname"><a href="struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d">EvolveOptimizer_t::candidates</a></div><div class="ttdeci">int32_t candidates[100][20]</div><div class="ttdoc">Параметры кандидатов</div><div class="ttdef"><b>Definition</b> <a href="#l00094">evolve_optimizer.h:94</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html_a74b81df1c298c99162310f3f7d91735a"><div class="ttname"><a href="struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a">EvolveOptimizer_t::sorted_idx</a></div><div class="ttdeci">uint16_t sorted_idx[100]</div><div class="ttdoc">Индексы отсортированных кандидатов</div><div class="ttdef"><b>Definition</b> <a href="#l00095">evolve_optimizer.h:95</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html_a950cd70cb6bff33b78ad35ee58c729a6"><div class="ttname"><a href="struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6">EvolveOptimizer_t::n_best</a></div><div class="ttdeci">uint16_t n_best</div><div class="ttdoc">Количество лучших, усредняемых</div><div class="ttdef"><b>Definition</b> <a href="#l00090">evolve_optimizer.h:90</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html_ac35c7ca8cede4ab9c53a2845a91cd1b1"><div class="ttname"><a href="struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1">EvolveOptimizer_t::n_cand</a></div><div class="ttdeci">uint16_t n_cand</div><div class="ttdoc">Количество кандидатов</div><div class="ttdef"><b>Definition</b> <a href="#l00089">evolve_optimizer.h:89</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html_ac723b265a3d43b754489f14310314f0d"><div class="ttname"><a href="struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d">EvolveOptimizer_t::loss</a></div><div class="ttdeci">int32_t loss[100]</div><div class="ttdoc">Loss для каждого кандидата</div><div class="ttdef"><b>Definition</b> <a href="#l00093">evolve_optimizer.h:93</a></div></div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
</div><!-- container -->
|
||||
|
||||
@ -172,6 +172,7 @@ $(function(){initNavTree('functions.html','',''); });
|
||||
<li>sConfig : <a class="el" href="struct_t_i_m___encoder_type_def.html#a021f0c585e9e62d68a4b09f630d8b6e5">TIM_EncoderTypeDef</a></li>
|
||||
<li>size : <a class="el" href="struct_r_t_t___flash_header__t.html#afd1a5c51af6f97d170c2ccbbe3e34699">RTT_FlashHeader_t</a></li>
|
||||
<li>sMasterConfig : <a class="el" href="struct_t_i_m___settings_type_def.html#a2d9d277dd395424b964445ec1bc65b21">TIM_SettingsTypeDef</a></li>
|
||||
<li>sorted_idx : <a class="el" href="struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a">EvolveOptimizer_t</a></li>
|
||||
<li>sSlaveConfig : <a class="el" href="struct_t_i_m___settings_type_def.html#a9694cf0910a69d48ff94f8aeac106969">TIM_SettingsTypeDef</a></li>
|
||||
<li>state : <a class="el" href="struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435">GPIO_LEDTypeDef</a></li>
|
||||
<li>sTickBasePrescaler : <a class="el" href="struct_t_i_m___settings_type_def.html#a11151fe125960cb8e61328ffd06b7718">TIM_SettingsTypeDef</a></li>
|
||||
|
||||
@ -172,6 +172,7 @@ $(function(){initNavTree('functions_vars.html','',''); });
|
||||
<li>sConfig : <a class="el" href="struct_t_i_m___encoder_type_def.html#a021f0c585e9e62d68a4b09f630d8b6e5">TIM_EncoderTypeDef</a></li>
|
||||
<li>size : <a class="el" href="struct_r_t_t___flash_header__t.html#afd1a5c51af6f97d170c2ccbbe3e34699">RTT_FlashHeader_t</a></li>
|
||||
<li>sMasterConfig : <a class="el" href="struct_t_i_m___settings_type_def.html#a2d9d277dd395424b964445ec1bc65b21">TIM_SettingsTypeDef</a></li>
|
||||
<li>sorted_idx : <a class="el" href="struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a">EvolveOptimizer_t</a></li>
|
||||
<li>sSlaveConfig : <a class="el" href="struct_t_i_m___settings_type_def.html#a9694cf0910a69d48ff94f8aeac106969">TIM_SettingsTypeDef</a></li>
|
||||
<li>state : <a class="el" href="struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435">GPIO_LEDTypeDef</a></li>
|
||||
<li>sTickBasePrescaler : <a class="el" href="struct_t_i_m___settings_type_def.html#a11151fe125960cb8e61328ffd06b7718">TIM_SettingsTypeDef</a></li>
|
||||
|
||||
@ -129,8 +129,8 @@ $(function(){initNavTree('globals.html','',''); });
|
||||
<li>ENABLE_EVOLVE_OPTIMIZATION : <a class="el" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga2cac097081444a7a9b040f4b11550e47">mylibs_config.h</a></li>
|
||||
<li>EVOLVE_MAX_CANDIDATES : <a class="el" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga7c1396e5c95c766afccdb45cbfcf5971">mylibs_config.h</a></li>
|
||||
<li>EVOLVE_MAX_PARAMS : <a class="el" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga80d6162495fc3776d8902610657d4fee">mylibs_config.h</a></li>
|
||||
<li>EvolveOptimizer_Init() : <a class="el" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gac21587fe68fe3635525358ac3f4059d9">evolve_optimizer.h</a></li>
|
||||
<li>EvolveOptimizer_Step() : <a class="el" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga1ba2fa963c9ae12625be1b7c20718563">evolve_optimizer.h</a></li>
|
||||
<li>EvolveOptimizer_Init() : <a class="el" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gadaf3a90724197e1737d5c70c7bcc75e1">evolve_optimizer.h</a></li>
|
||||
<li>EvolveOptimizer_Step() : <a class="el" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga75acd71c85d4e60dc0eb31bc5780086a">evolve_optimizer.h</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
@ -181,6 +181,7 @@ $(function(){initNavTree('globals.html','',''); });
|
||||
<li>LED_OFF : <a class="el" href="group___g_p_i_o___i_n_i_t.html#ga80700bb63bd56ebabbb4728aa433fd29">general_gpio.h</a></li>
|
||||
<li>LED_ON : <a class="el" href="group___g_p_i_o___i_n_i_t.html#gaf2e697ac60e05813d45ea2c9c9e79c25">general_gpio.h</a></li>
|
||||
<li>LED_PWM_TICKS : <a class="el" href="group___g_p_i_o___i_n_i_t.html#ga1d42e219765ec526d99e306638ac0023">general_gpio.h</a></li>
|
||||
<li>local_time : <a class="el" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga9c853b02c22f26023c34d1d404b6d653">evolve_optimizer.h</a></li>
|
||||
<li>LOG_LEVEL : <a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga0b87e0d3bf5853bcbb0b66a7c48fdc05">mylibs_config.h</a></li>
|
||||
<li>log_printf : <a class="el" href="group___t_r_a_c_e___s_e_r_i_a_l.html#ga730fb7b8d0bbb348dca73c15bd0e0b26">trace.h</a></li>
|
||||
</ul>
|
||||
|
||||
@ -162,6 +162,7 @@ $(function(){initNavTree('globals_defs.html','',''); });
|
||||
<li>LED_OFF : <a class="el" href="group___g_p_i_o___i_n_i_t.html#ga80700bb63bd56ebabbb4728aa433fd29">general_gpio.h</a></li>
|
||||
<li>LED_ON : <a class="el" href="group___g_p_i_o___i_n_i_t.html#gaf2e697ac60e05813d45ea2c9c9e79c25">general_gpio.h</a></li>
|
||||
<li>LED_PWM_TICKS : <a class="el" href="group___g_p_i_o___i_n_i_t.html#ga1d42e219765ec526d99e306638ac0023">general_gpio.h</a></li>
|
||||
<li>local_time : <a class="el" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga9c853b02c22f26023c34d1d404b6d653">evolve_optimizer.h</a></li>
|
||||
<li>LOG_LEVEL : <a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga0b87e0d3bf5853bcbb0b66a7c48fdc05">mylibs_config.h</a></li>
|
||||
<li>log_printf : <a class="el" href="group___t_r_a_c_e___s_e_r_i_a_l.html#ga730fb7b8d0bbb348dca73c15bd0e0b26">trace.h</a></li>
|
||||
</ul>
|
||||
|
||||
@ -100,8 +100,8 @@ $(function(){initNavTree('globals_func.html','',''); });
|
||||
<div class="textblock">Here is a list of all documented functions with links to the documentation:</div>
|
||||
|
||||
<h3 class="doxsection"><a id="index_e" name="index_e"></a>- e -</h3><ul>
|
||||
<li>EvolveOptimizer_Init() : <a class="el" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gac21587fe68fe3635525358ac3f4059d9">evolve_optimizer.h</a></li>
|
||||
<li>EvolveOptimizer_Step() : <a class="el" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga1ba2fa963c9ae12625be1b7c20718563">evolve_optimizer.h</a></li>
|
||||
<li>EvolveOptimizer_Init() : <a class="el" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gadaf3a90724197e1737d5c70c7bcc75e1">evolve_optimizer.h</a></li>
|
||||
<li>EvolveOptimizer_Step() : <a class="el" href="group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga75acd71c85d4e60dc0eb31bc5780086a">evolve_optimizer.h</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
@ -125,13 +125,15 @@ Macros</h2></td></tr>
|
||||
<tr class="memdesc:gaff223481fcffea77394a331afde29fdc"><td class="mdescLeft"> </td><td class="mdescRight">Линейное масштабирование x из диапазона [min_val, max_val] в Q16.16 [0, 65536) <br /></td></tr>
|
||||
<tr class="memitem:ga71a0c240c667e976d9caef391ab767ba" id="r_ga71a0c240c667e976d9caef391ab767ba"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga71a0c240c667e976d9caef391ab767ba">PARAM_UNSCALE_Q16</a>(q16_val, min_val, max_val)</td></tr>
|
||||
<tr class="memdesc:ga71a0c240c667e976d9caef391ab767ba"><td class="mdescLeft"> </td><td class="mdescRight">Обратное линейное масштабирование Q16.16 значения в диапазон [min_val, max_val]. <br /></td></tr>
|
||||
<tr class="memitem:ga9c853b02c22f26023c34d1d404b6d653" id="r_ga9c853b02c22f26023c34d1d404b6d653"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga9c853b02c22f26023c34d1d404b6d653">local_time</a>()</td></tr>
|
||||
<tr class="memdesc:ga9c853b02c22f26023c34d1d404b6d653"><td class="mdescLeft"> </td><td class="mdescRight">Локальное время <br /></td></tr>
|
||||
</table><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
|
||||
Functions</h2></td></tr>
|
||||
<tr class="memitem:gac21587fe68fe3635525358ac3f4059d9" id="r_gac21587fe68fe3635525358ac3f4059d9"><td class="memItemLeft" align="right" valign="top">__STATIC_INLINE void </td><td class="memItemRight" valign="bottom"><a class="el" href="#gac21587fe68fe3635525358ac3f4059d9">EvolveOptimizer_Init</a> (<a class="el" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a> *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, uint16_t iq_mutation, int32_t *start_params)</td></tr>
|
||||
<tr class="memdesc:gac21587fe68fe3635525358ac3f4059d9"><td class="mdescLeft"> </td><td class="mdescRight">Инициализация эволюционного оптимизатора. <br /></td></tr>
|
||||
<tr class="memitem:ga1ba2fa963c9ae12625be1b7c20718563" id="r_ga1ba2fa963c9ae12625be1b7c20718563"><td class="memItemLeft" align="right" valign="top">__STATIC_INLINE void </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga1ba2fa963c9ae12625be1b7c20718563">EvolveOptimizer_Step</a> (<a class="el" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a> *opt, int32_t *params, int32_t loss)</td></tr>
|
||||
<tr class="memdesc:ga1ba2fa963c9ae12625be1b7c20718563"><td class="mdescLeft"> </td><td class="mdescRight">Один шаг эволюционного оптимизатора. <br /></td></tr>
|
||||
<tr class="memitem:gadaf3a90724197e1737d5c70c7bcc75e1" id="r_gadaf3a90724197e1737d5c70c7bcc75e1"><td class="memItemLeft" align="right" valign="top">__STATIC_INLINE int </td><td class="memItemRight" valign="bottom"><a class="el" href="#gadaf3a90724197e1737d5c70c7bcc75e1">EvolveOptimizer_Init</a> (<a class="el" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a> *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, uint16_t iq_mutation, int32_t *start_params)</td></tr>
|
||||
<tr class="memdesc:gadaf3a90724197e1737d5c70c7bcc75e1"><td class="mdescLeft"> </td><td class="mdescRight">Инициализация эволюционного оптимизатора. <br /></td></tr>
|
||||
<tr class="memitem:ga75acd71c85d4e60dc0eb31bc5780086a" id="r_ga75acd71c85d4e60dc0eb31bc5780086a"><td class="memItemLeft" align="right" valign="top">__STATIC_INLINE int </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga75acd71c85d4e60dc0eb31bc5780086a">EvolveOptimizer_Step</a> (<a class="el" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a> *opt, int32_t *params, int32_t loss)</td></tr>
|
||||
<tr class="memdesc:ga75acd71c85d4e60dc0eb31bc5780086a"><td class="mdescLeft"> </td><td class="mdescRight">Один шаг эволюционного оптимизатора. <br /></td></tr>
|
||||
</table>
|
||||
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
|
||||
<p>Библиотека для эволюционного подбора параметров </p>
|
||||
@ -141,12 +143,16 @@ Functions</h2></td></tr>
|
||||
<li>Мутацию для поиска оптимальных параметров</li>
|
||||
<li>Несколько независимых оптимизаторов в одной программе</li>
|
||||
</ul>
|
||||
<p>Если библиотека отключена <a class="el" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga2cac097081444a7a9b040f4b11550e47">ENABLE_EVOLVE_OPTIMIZATION</a>, то вставляются заглушки, никак не влияющие на параметры и остальную программу</p>
|
||||
<p>Параметры для конфигурации:</p><ul>
|
||||
<li><a class="el" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga2cac097081444a7a9b040f4b11550e47">ENABLE_EVOLVE_OPTIMIZATION</a> - Включить оптимизацию параметров Если библиотека отключена <a class="el" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga2cac097081444a7a9b040f4b11550e47">ENABLE_EVOLVE_OPTIMIZATION</a>, то вставляются заглушки, никак не влияющие на параметры и остальную программу</li>
|
||||
<li><a class="el" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga80d6162495fc3776d8902610657d4fee">EVOLVE_MAX_PARAMS</a> - Максимальное количество параметров</li>
|
||||
<li><a class="el" href="group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga7c1396e5c95c766afccdb45cbfcf5971">EVOLVE_MAX_CANDIDATES</a> - Максимальное количество кандидатов для обучения</li>
|
||||
</ul>
|
||||
<dl class="section user"><dt>Пример использования:</dt><dd><div class="fragment"><div class="line"><span class="preprocessor">#include "<a class="code" href="evolve__optimizer_8h.html">evolve_optimizer.h</a>"</span></div>
|
||||
<div class="line"><span class="preprocessor">#define N_PARAMS 4</span></div>
|
||||
<div class="line"><span class="preprocessor">#define N_CANDIDATES 100</span></div>
|
||||
<div class="line"><span class="preprocessor">#define N_BEST 10</span></div>
|
||||
<div class="line"><span class="preprocessor">#define IQ_MUTATION 655</span></div>
|
||||
<div class="line"><span class="preprocessor">#define IQ_MUTATION (PARAM_SCALE_Q16(0.1, 0, 1))</span></div>
|
||||
<div class="line">int32_t params[N_PARAMS];</div>
|
||||
<div class="line"><a class="code hl_struct" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a> optimizer;</div>
|
||||
<div class="line"> </div>
|
||||
@ -161,11 +167,11 @@ Functions</h2></td></tr>
|
||||
<div class="line">params[3] = <a class="code hl_define" href="#gaff223481fcffea77394a331afde29fdc">PARAM_SCALE_Q16</a>(param_i16, 500, 5000);</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><span class="comment">// Инициалиазция</span></div>
|
||||
<div class="line"><a class="code hl_function" href="#gac21587fe68fe3635525358ac3f4059d9">EvolveOptimizer_Init</a>(&optimizer, N_PARAMS, N_CANDIDATES, N_BEST, IQ_MUTATION, params);</div>
|
||||
<div class="line"><a class="code hl_function" href="#gadaf3a90724197e1737d5c70c7bcc75e1">EvolveOptimizer_Init</a>(&optimizer, N_PARAMS, N_CANDIDATES, N_BEST, IQ_MUTATION, params);</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><span class="comment">// Шаг эволюции</span></div>
|
||||
<div class="line">int32_t loss = calc_iq_loss(); <span class="comment">// расчет эффективности параметров</span></div>
|
||||
<div class="line"><a class="code hl_function" href="#ga1ba2fa963c9ae12625be1b7c20718563">EvolveOptimizer_Step</a>(&optimizer, params, loss);</div>
|
||||
<div class="line"><a class="code hl_function" href="#ga75acd71c85d4e60dc0eb31bc5780086a">EvolveOptimizer_Step</a>(&optimizer, params, loss);</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><span class="comment">// Взятие следующих для эволюции параметров</span></div>
|
||||
<div class="line">param_u16 = <a class="code hl_define" href="#ga71a0c240c667e976d9caef391ab767ba">PARAM_UNSCALE_Q16</a>(params[0], 0, 1000);</div>
|
||||
@ -173,11 +179,11 @@ Functions</h2></td></tr>
|
||||
<div class="line">param_u8 = <a class="code hl_define" href="#ga71a0c240c667e976d9caef391ab767ba">PARAM_UNSCALE_Q16</a>(params[2], 10, 100);</div>
|
||||
<div class="line">param_i16 = <a class="code hl_define" href="#ga71a0c240c667e976d9caef391ab767ba">PARAM_UNSCALE_Q16</a>(params[3], 500, 5000);</div>
|
||||
<div class="ttc" id="aevolve__optimizer_8h_html"><div class="ttname"><a href="evolve__optimizer_8h.html">evolve_optimizer.h</a></div><div class="ttdoc">Заголовочный файл для адаптивного подбора параметров</div></div>
|
||||
<div class="ttc" id="agroup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_html_ga1ba2fa963c9ae12625be1b7c20718563"><div class="ttname"><a href="#ga1ba2fa963c9ae12625be1b7c20718563">EvolveOptimizer_Step</a></div><div class="ttdeci">__STATIC_INLINE void EvolveOptimizer_Step(EvolveOptimizer_t *opt, int32_t *params, int32_t loss)</div><div class="ttdoc">Один шаг эволюционного оптимизатора.</div><div class="ttdef"><b>Definition</b> <a href="evolve__optimizer_8h_source.html#l00137">evolve_optimizer.h:137</a></div></div>
|
||||
<div class="ttc" id="agroup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_html_ga71a0c240c667e976d9caef391ab767ba"><div class="ttname"><a href="#ga71a0c240c667e976d9caef391ab767ba">PARAM_UNSCALE_Q16</a></div><div class="ttdeci">#define PARAM_UNSCALE_Q16(q16_val, min_val, max_val)</div><div class="ttdoc">Обратное линейное масштабирование Q16.16 значения в диапазон [min_val, max_val].</div><div class="ttdef"><b>Definition</b> <a href="evolve__optimizer_8h_source.html#l00074">evolve_optimizer.h:74</a></div></div>
|
||||
<div class="ttc" id="agroup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_html_gac21587fe68fe3635525358ac3f4059d9"><div class="ttname"><a href="#gac21587fe68fe3635525358ac3f4059d9">EvolveOptimizer_Init</a></div><div class="ttdeci">__STATIC_INLINE void EvolveOptimizer_Init(EvolveOptimizer_t *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, uint16_t iq_mutation, int32_t *start_params)</div><div class="ttdoc">Инициализация эволюционного оптимизатора.</div><div class="ttdef"><b>Definition</b> <a href="evolve__optimizer_8h_source.html#l00101">evolve_optimizer.h:101</a></div></div>
|
||||
<div class="ttc" id="agroup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_html_gaff223481fcffea77394a331afde29fdc"><div class="ttname"><a href="#gaff223481fcffea77394a331afde29fdc">PARAM_SCALE_Q16</a></div><div class="ttdeci">#define PARAM_SCALE_Q16(x, min_val, max_val)</div><div class="ttdoc">Линейное масштабирование x из диапазона [min_val, max_val] в Q16.16 [0, 65536)</div><div class="ttdef"><b>Definition</b> <a href="evolve__optimizer_8h_source.html#l00068">evolve_optimizer.h:68</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html"><div class="ttname"><a href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a></div><div class="ttdoc">Структура эволюционного оптимизатора</div><div class="ttdef"><b>Definition</b> <a href="evolve__optimizer_8h_source.html#l00081">evolve_optimizer.h:81</a></div></div>
|
||||
<div class="ttc" id="agroup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_html_ga71a0c240c667e976d9caef391ab767ba"><div class="ttname"><a href="#ga71a0c240c667e976d9caef391ab767ba">PARAM_UNSCALE_Q16</a></div><div class="ttdeci">#define PARAM_UNSCALE_Q16(q16_val, min_val, max_val)</div><div class="ttdoc">Обратное линейное масштабирование Q16.16 значения в диапазон [min_val, max_val].</div><div class="ttdef"><b>Definition</b> <a href="evolve__optimizer_8h_source.html#l00077">evolve_optimizer.h:77</a></div></div>
|
||||
<div class="ttc" id="agroup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_html_ga75acd71c85d4e60dc0eb31bc5780086a"><div class="ttname"><a href="#ga75acd71c85d4e60dc0eb31bc5780086a">EvolveOptimizer_Step</a></div><div class="ttdeci">__STATIC_INLINE int EvolveOptimizer_Step(EvolveOptimizer_t *opt, int32_t *params, int32_t loss)</div><div class="ttdoc">Один шаг эволюционного оптимизатора.</div><div class="ttdef"><b>Definition</b> <a href="evolve__optimizer_8h_source.html#l00187">evolve_optimizer.h:187</a></div></div>
|
||||
<div class="ttc" id="agroup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_html_gadaf3a90724197e1737d5c70c7bcc75e1"><div class="ttname"><a href="#gadaf3a90724197e1737d5c70c7bcc75e1">EvolveOptimizer_Init</a></div><div class="ttdeci">__STATIC_INLINE int EvolveOptimizer_Init(EvolveOptimizer_t *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, uint16_t iq_mutation, int32_t *start_params)</div><div class="ttdoc">Инициализация эволюционного оптимизатора.</div><div class="ttdef"><b>Definition</b> <a href="evolve__optimizer_8h_source.html#l00132">evolve_optimizer.h:132</a></div></div>
|
||||
<div class="ttc" id="agroup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_html_gaff223481fcffea77394a331afde29fdc"><div class="ttname"><a href="#gaff223481fcffea77394a331afde29fdc">PARAM_SCALE_Q16</a></div><div class="ttdeci">#define PARAM_SCALE_Q16(x, min_val, max_val)</div><div class="ttdoc">Линейное масштабирование x из диапазона [min_val, max_val] в Q16.16 [0, 65536)</div><div class="ttdef"><b>Definition</b> <a href="evolve__optimizer_8h_source.html#l00071">evolve_optimizer.h:71</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html"><div class="ttname"><a href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a></div><div class="ttdoc">Структура эволюционного оптимизатора</div><div class="ttdef"><b>Definition</b> <a href="evolve__optimizer_8h_source.html#l00087">evolve_optimizer.h:87</a></div></div>
|
||||
</div><!-- fragment --> </dd></dl>
|
||||
<a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
|
||||
<a id="gaff223481fcffea77394a331afde29fdc" name="gaff223481fcffea77394a331afde29fdc"></a>
|
||||
@ -207,7 +213,7 @@ Functions</h2></td></tr>
|
||||
</div><!-- fragment -->
|
||||
<p>Линейное масштабирование x из диапазона [min_val, max_val] в Q16.16 [0, 65536) </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00068">68</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00071">71</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -238,19 +244,41 @@ Functions</h2></td></tr>
|
||||
</div><!-- fragment -->
|
||||
<p>Обратное линейное масштабирование Q16.16 значения в диапазон [min_val, max_val]. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00074">74</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00077">77</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
|
||||
<a id="gac21587fe68fe3635525358ac3f4059d9" name="gac21587fe68fe3635525358ac3f4059d9"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#gac21587fe68fe3635525358ac3f4059d9">◆ </a></span>EvolveOptimizer_Init()</h2>
|
||||
<a id="ga9c853b02c22f26023c34d1d404b6d653" name="ga9c853b02c22f26023c34d1d404b6d653"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ga9c853b02c22f26023c34d1d404b6d653">◆ </a></span>local_time</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">__STATIC_INLINE void EvolveOptimizer_Init </td>
|
||||
<td class="memname">#define local_time</td>
|
||||
<td>(</td>
|
||||
<td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
<b>Value:</b><div class="fragment"><div class="line">HAL_GetTick()</div>
|
||||
</div><!-- fragment -->
|
||||
<p>Локальное время </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00081">81</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
|
||||
<a id="gadaf3a90724197e1737d5c70c7bcc75e1" name="gadaf3a90724197e1737d5c70c7bcc75e1"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#gadaf3a90724197e1737d5c70c7bcc75e1">◆ </a></span>EvolveOptimizer_Init()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">__STATIC_INLINE int EvolveOptimizer_Init </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype"><a class="el" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a> *</td> <td class="paramname"><span class="paramname"><em>opt</em></span>, </td>
|
||||
</tr>
|
||||
@ -294,19 +322,20 @@ Functions</h2></td></tr>
|
||||
</table>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>0 — если окей, -1 — если ошибка </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00101">101</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00132">132</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="ga1ba2fa963c9ae12625be1b7c20718563" name="ga1ba2fa963c9ae12625be1b7c20718563"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ga1ba2fa963c9ae12625be1b7c20718563">◆ </a></span>EvolveOptimizer_Step()</h2>
|
||||
<a id="ga75acd71c85d4e60dc0eb31bc5780086a" name="ga75acd71c85d4e60dc0eb31bc5780086a"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ga75acd71c85d4e60dc0eb31bc5780086a">◆ </a></span>EvolveOptimizer_Step()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">__STATIC_INLINE void EvolveOptimizer_Step </td>
|
||||
<td class="memname">__STATIC_INLINE int EvolveOptimizer_Step </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype"><a class="el" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a> *</td> <td class="paramname"><span class="paramname"><em>opt</em></span>, </td>
|
||||
</tr>
|
||||
@ -328,14 +357,15 @@ Functions</h2></td></tr>
|
||||
<table class="params">
|
||||
<tr><td class="paramname">opt</td><td>Указатель на структуру оптимизатора </td></tr>
|
||||
<tr><td class="paramname">params</td><td>Массив параметров, которые будут обновлены (на выходе — новые параметры) </td></tr>
|
||||
<tr><td class="paramname">loss</td><td>Loss текущего кандидата (Q16.16)</td></tr>
|
||||
<tr><td class="paramname">loss</td><td>Loss текущего кандидата (Q16.16) </td></tr>
|
||||
</table>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>0 — если окей, -1 — если ошибка</dd></dl>
|
||||
<p>Сохраняет loss текущего кандидата и формирует параметры следующего кандидата. Если накоплено n_cand кандидатов, генерируется новое поколение. Новое поколение формируется случайным выбором из n_best лучших с добавлением мутации.</p>
|
||||
<p>На выходе params содержит параметры следующего кандидата для измерений. </p>
|
||||
<p>На выходе params содержит параметры следующего кандидата для измерений. </p><dl class="section note"><dt>Note</dt><dd>Функция использует глобальную внутреннюю переменную для сортировки. Надо убедится что только один экземпляр функции запущен в момент времени </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00137">137</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00187">187</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -7,10 +7,12 @@ var group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r =
|
||||
[ "iq_mutation", "struct_evolve_optimizer__t.html#a5391277564b54e2271856a2466033df5", null ],
|
||||
[ "cand_index", "struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae", null ],
|
||||
[ "loss", "struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d", null ],
|
||||
[ "candidates", "struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d", null ]
|
||||
[ "candidates", "struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d", null ],
|
||||
[ "sorted_idx", "struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a", null ]
|
||||
] ],
|
||||
[ "PARAM_SCALE_Q16", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gaff223481fcffea77394a331afde29fdc", null ],
|
||||
[ "PARAM_UNSCALE_Q16", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga71a0c240c667e976d9caef391ab767ba", null ],
|
||||
[ "EvolveOptimizer_Init", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gac21587fe68fe3635525358ac3f4059d9", null ],
|
||||
[ "EvolveOptimizer_Step", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga1ba2fa963c9ae12625be1b7c20718563", null ]
|
||||
[ "local_time", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga9c853b02c22f26023c34d1d404b6d653", null ],
|
||||
[ "EvolveOptimizer_Init", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gadaf3a90724197e1737d5c70c7bcc75e1", null ],
|
||||
[ "EvolveOptimizer_Step", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga75acd71c85d4e60dc0eb31bc5780086a", null ]
|
||||
];
|
||||
@ -162,7 +162,7 @@ Macros</h2></td></tr>
|
||||
<li>GPIO_TRACE_ENABLE определён - устанавливает бит сброса через BSRR ((<em>pin</em>)<<16) </li>
|
||||
</ul>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00138">138</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00142">142</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -199,7 +199,7 @@ Macros</h2></td></tr>
|
||||
<li>GPIO_TRACE_ENABLE определён - устанавливает бит установки через BSRR (<em>pin</em>) </li>
|
||||
</ul>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00137">137</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00141">141</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -140,7 +140,19 @@ Functions</h2></td></tr>
|
||||
<li>Для восстановления последнего HardFault используется <a class="el" href="#ga03f8b6f3b537ee1c8e91065c60db504f" title="Проверка и вывод последнего HardFault-трейса из Flash.">HF_CheckRecovered()</a>, который:<ol type="1">
|
||||
<li>Читает запись во Flash по базовому тегу.</li>
|
||||
<li>Выводит сохранённый RTT буфер и контекст регистров.</li>
|
||||
<li>Опционально стирает Flash после восстановления. <div class="fragment"><div class="line"><span class="keywordtype">void</span> Hardfault()</div>
|
||||
<li>Опционально стирает Flash после восстановления.</li>
|
||||
</ol>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Параметры:</p><ul>
|
||||
<li><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga47f454f804b4dbc26cae079e8d8641e6">HARDFAULT_SERIAL_TRACE</a> - Включить обработку и serial трассировку Hardfault Если отключена то вставляются заглушки, никак не влияющие на параметры и остальную программу</li>
|
||||
<li><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gadc960255719c7eff4bdfaa850be9b313">HF_RTT_TAG_BASE</a> - Базовый тег RTT Flash для HardFault</li>
|
||||
<li><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gafcc7ea03d4df8f1909e580b519a7f3ca">HF_RTT_TAIL_SIZE</a> - Размер буфера RTT, который сохранится при Hardfault</li>
|
||||
<li><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gaa31234688b333a505aaa57b8ecdedf5b">HF_STACK_DUMP_WORDS</a> - Сколько слов стека будет проанализировано во время Hardfault</li>
|
||||
<li><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga0c602733a4a359bf8c095d71cd4d0f63">HF_FLASH_ADDR</a> - Адрес FLASH куда положится RTT буфер</li>
|
||||
<li><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga92d0d14732edb7dfa21d483304bdb051">HF_RAM_END</a> - Конец RAM памяти (чтобы во время анализа стека не выйти за пределы)</li>
|
||||
</ul>
|
||||
<div class="fragment"><div class="line"><span class="keywordtype">void</span> Hardfault()</div>
|
||||
<div class="line">{</div>
|
||||
<div class="line"> <a class="code hl_function" href="#gadd8e10e7ec3b0204f7f92062ecd452f7">HF_HandleFault</a>();</div>
|
||||
<div class="line"> NVIC_SystemReset();</div>
|
||||
@ -154,14 +166,10 @@ Functions</h2></td></tr>
|
||||
<div class="line"> <a class="code hl_function" href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga8d8c6850e32b42871faefce3352012d1">RTT_EraseFlash</a>(); <span class="comment">// erase rtt flash after message readed</span></div>
|
||||
<div class="line"> }</div>
|
||||
<div class="line">} </div>
|
||||
<div class="ttc" id="agroup___t_r_a_c_e___h_a_r_d_f_a_u_l_t_html_ga03f8b6f3b537ee1c8e91065c60db504f"><div class="ttname"><a href="#ga03f8b6f3b537ee1c8e91065c60db504f">HF_CheckRecovered</a></div><div class="ttdeci">__STATIC_FORCEINLINE int HF_CheckRecovered(int erase)</div><div class="ttdoc">Проверка и вывод последнего HardFault-трейса из Flash.</div><div class="ttdef"><b>Definition</b> <a href="trace_8h_source.html#l00464">trace.h:464</a></div></div>
|
||||
<div class="ttc" id="agroup___t_r_a_c_e___h_a_r_d_f_a_u_l_t_html_gadd8e10e7ec3b0204f7f92062ecd452f7"><div class="ttname"><a href="#gadd8e10e7ec3b0204f7f92062ecd452f7">HF_HandleFault</a></div><div class="ttdeci">__STATIC_FORCEINLINE void HF_HandleFault(void)</div><div class="ttdoc">Обработчик HardFault.</div><div class="ttdef"><b>Definition</b> <a href="trace_8h_source.html#l00505">trace.h:505</a></div></div>
|
||||
<div class="ttc" id="agroup___t_r_a_c_e___r_t_t___f_l_a_s_h_html_ga8d8c6850e32b42871faefce3352012d1"><div class="ttname"><a href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga8d8c6850e32b42871faefce3352012d1">RTT_EraseFlash</a></div><div class="ttdeci">__STATIC_FORCEINLINE int RTT_EraseFlash(void)</div><div class="ttdoc">Стирание сектора Flash с RTT-буфером</div><div class="ttdef"><b>Definition</b> <a href="trace_8h_source.html#l00363">trace.h:363</a></div></div>
|
||||
</div><!-- fragment --> </li>
|
||||
</ol>
|
||||
</li>
|
||||
</ul>
|
||||
<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
|
||||
<div class="ttc" id="agroup___t_r_a_c_e___h_a_r_d_f_a_u_l_t_html_ga03f8b6f3b537ee1c8e91065c60db504f"><div class="ttname"><a href="#ga03f8b6f3b537ee1c8e91065c60db504f">HF_CheckRecovered</a></div><div class="ttdeci">__STATIC_FORCEINLINE int HF_CheckRecovered(int erase)</div><div class="ttdoc">Проверка и вывод последнего HardFault-трейса из Flash.</div><div class="ttdef"><b>Definition</b> <a href="trace_8h_source.html#l00486">trace.h:486</a></div></div>
|
||||
<div class="ttc" id="agroup___t_r_a_c_e___h_a_r_d_f_a_u_l_t_html_gadd8e10e7ec3b0204f7f92062ecd452f7"><div class="ttname"><a href="#gadd8e10e7ec3b0204f7f92062ecd452f7">HF_HandleFault</a></div><div class="ttdeci">__STATIC_FORCEINLINE void HF_HandleFault(void)</div><div class="ttdoc">Обработчик HardFault.</div><div class="ttdef"><b>Definition</b> <a href="trace_8h_source.html#l00527">trace.h:527</a></div></div>
|
||||
<div class="ttc" id="agroup___t_r_a_c_e___r_t_t___f_l_a_s_h_html_ga8d8c6850e32b42871faefce3352012d1"><div class="ttname"><a href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga8d8c6850e32b42871faefce3352012d1">RTT_EraseFlash</a></div><div class="ttdeci">__STATIC_FORCEINLINE int RTT_EraseFlash(void)</div><div class="ttdoc">Стирание сектора Flash с RTT-буфером</div><div class="ttdef"><b>Definition</b> <a href="trace_8h_source.html#l00375">trace.h:375</a></div></div>
|
||||
</div><!-- fragment --> <a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
|
||||
<a id="ga03f8b6f3b537ee1c8e91065c60db504f" name="ga03f8b6f3b537ee1c8e91065c60db504f"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ga03f8b6f3b537ee1c8e91065c60db504f">◆ </a></span>HF_CheckRecovered()</h2>
|
||||
|
||||
@ -186,7 +194,7 @@ Functions</h2></td></tr>
|
||||
</dd></dl>
|
||||
<dl class="section note"><dt>Note</dt><dd>Вызов рекомендуется при инициализации приложения для анализа предыдущего сбоя. </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00464">464</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00486">486</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -216,7 +224,7 @@ Functions</h2></td></tr>
|
||||
</ol>
|
||||
<dl class="section note"><dt>Note</dt><dd>Функция защищена, так как вызывается в контексте сбоя — минимизирует использование вызовов HAL. </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00505">505</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00527">527</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -142,7 +142,14 @@ Functions</h2></td></tr>
|
||||
если слот с таким тегом уже занят, запись не выполняется. <br />
|
||||
</li>
|
||||
<li>Автоинкремент позволяет хранить несколько последовательных записей в пределах одного базового тега, <br />
|
||||
без необходимости вручную отслеживать адреса Flash или позиции буферов. </li>
|
||||
без необходимости вручную отслеживать адреса Flash или позиции буферов. <br />
|
||||
</li>
|
||||
</ul>
|
||||
<p>Параметры:</p><ul>
|
||||
<li><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga501312b24e322de4dd6755ad442f0ba3">RTT_FLASH_BUFFER_SIZE</a> - Размер буфера RTT в Flash</li>
|
||||
<li><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga3bc1b76864e1d32cbdd174d4caae7724">RTT_FLASH_SECTOR</a> - Сектор FLASH куда положится RTT буфер</li>
|
||||
<li><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga8e56f75d3ab8a89ddde1404ae23c3297">RTT_FLASH_SECTOR_START</a> - Начало сектора RTT_FLASH_SECTOR</li>
|
||||
<li><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gafeca0be3688dea07ff443f894668003d">RTT_FLASH_SECTOR_END</a> - Конец сектора RTT_FLASH_SECTOR </li>
|
||||
</ul>
|
||||
<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
|
||||
<a id="ga21353cb4f5af666237739e62ce019cd6" name="ga21353cb4f5af666237739e62ce019cd6"></a>
|
||||
@ -163,7 +170,7 @@ Functions</h2></td></tr>
|
||||
<p>Подготовка Flash к записи </p>
|
||||
<p>Сбрасывает ошибки Flash и ожидает готовности перед записью </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00179">179</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00190">190</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -201,7 +208,7 @@ Functions</h2></td></tr>
|
||||
<li>Если конкретный (младший байт != 0) — запись выполняется только с этим тегом, иначе ошибка. </li>
|
||||
</ul>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00202">202</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00214">214</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -250,7 +257,7 @@ Functions</h2></td></tr>
|
||||
<li>Если конкретный (младший байт != 0) — прочитывается именно эта запись. </li>
|
||||
</ul>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00299">299</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00311">311</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -271,7 +278,7 @@ Functions</h2></td></tr>
|
||||
|
||||
<p>Стирание сектора Flash с RTT-буфером </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00363">363</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00375">375</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -123,9 +123,10 @@ Macros</h2></td></tr>
|
||||
</table>
|
||||
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
|
||||
<p>Дефайны для работы с serial трассировкой (SWO, RTT) </p>
|
||||
<p>Определяется дефайн <a class="el" href="#gae9b9b8a611e291a2f2aa5abf99f3ebaa">my_printf()</a> и <a class="el" href="#ga730fb7b8d0bbb348dca73c15bd0e0b26">log_printf()</a> для работы с serial трассировкой:</p><ul>
|
||||
<li>для RTT это будет вызов функции SEGGER_RTT_printf(), с подключением библиотеки SEGGER_RTT.h</li>
|
||||
<li><p class="startli">для SWO это будет просто printf()</p>
|
||||
<p>В зависимости от настроек определяется дефайн <a class="el" href="#gae9b9b8a611e291a2f2aa5abf99f3ebaa">my_printf()</a> и <a class="el" href="#ga730fb7b8d0bbb348dca73c15bd0e0b26">log_printf()</a> для работы с трассировкой:</p><ul>
|
||||
<li><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga76936505ca200d2e61226b7ba68f27c6">SERIAL_TRACE_ENABLE</a> - Если трассировка отключена, то все дефайны определяются как 'ничего' и на производительность кода не влияют</li>
|
||||
<li><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga00ff2175bdc1fb11c8ec970ea3010dd8">RTT_TRACE_ENABLE</a> - для RTT это будет вызов функции SEGGER_RTT_printf(), с подключением библиотеки SEGGER_RTT.h Предварительно надо подключить библиотеку SEGGER RTT и вызвать функцию SEGGER_RTT_Init()</li>
|
||||
<li><p class="startli"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gab8db9704b5d11858aa879689b9d36336">SWO_TRACE_ENABLE</a> для SWO это будет просто printf()</p>
|
||||
<p class="startli">Но библиотеку STDOUT надо подключить самостоятельно:</p>
|
||||
<pre class="fragment"> Manage Run-Time Environment -> Compiler -> I/O -> STDOUT
|
||||
</pre><p class="startli">Для SWO также надо включить трассировку: <br />
|
||||
@ -135,11 +136,9 @@ Macros</h2></td></tr>
|
||||
<li>Port = SW В вкладке Trace:</li>
|
||||
<li>Указать Core Clock</li>
|
||||
<li>Выставить Trace Port = SWO</li>
|
||||
<li>ITM - выбрать нужный порт (для Keil нулевой порт) <br />
|
||||
</li>
|
||||
<li>ITM - выбрать нужный порт (для Keil нулевой порт) </li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Если трассировка <a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga76936505ca200d2e61226b7ba68f27c6">SERIAL_TRACE_ENABLE</a> отключена, то все дефайны определяются как 'ничего' и на производительность кода не влияют </li>
|
||||
</ul>
|
||||
<a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
|
||||
<a id="gae9b9b8a611e291a2f2aa5abf99f3ebaa" name="gae9b9b8a611e291a2f2aa5abf99f3ebaa"></a>
|
||||
@ -165,7 +164,7 @@ Macros</h2></td></tr>
|
||||
<li>NO_TRACE - пустой макрос </li>
|
||||
</ul>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00067">67</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00071">71</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -194,7 +193,7 @@ Macros</h2></td></tr>
|
||||
</div><div class="memdoc">
|
||||
<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_define" href="#gae9b9b8a611e291a2f2aa5abf99f3ebaa">my_printf</a>(<span class="stringliteral">"\n[%lu] [%s] "</span> fmt, \</div>
|
||||
<div class="line">(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)uwTick, TAG, ##__VA_ARGS__)</div>
|
||||
<div class="ttc" id="agroup___t_r_a_c_e___s_e_r_i_a_l_html_gae9b9b8a611e291a2f2aa5abf99f3ebaa"><div class="ttname"><a href="#gae9b9b8a611e291a2f2aa5abf99f3ebaa">my_printf</a></div><div class="ttdeci">#define my_printf(...)</div><div class="ttdoc">Универсальный макрос для вывода трассировки</div><div class="ttdef"><b>Definition</b> <a href="trace_8h_source.html#l00067">trace.h:67</a></div></div>
|
||||
<div class="ttc" id="agroup___t_r_a_c_e___s_e_r_i_a_l_html_gae9b9b8a611e291a2f2aa5abf99f3ebaa"><div class="ttname"><a href="#gae9b9b8a611e291a2f2aa5abf99f3ebaa">my_printf</a></div><div class="ttdeci">#define my_printf(...)</div><div class="ttdoc">Универсальный макрос для вывода трассировки</div><div class="ttdef"><b>Definition</b> <a href="trace_8h_source.html#l00071">trace.h:71</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
<p>Макрос логирования с поддержкой уровней LOG_LEVEL. </p>
|
||||
<dl class="params"><dt>Parameters</dt><dd>
|
||||
@ -210,7 +209,7 @@ Macros</h2></td></tr>
|
||||
<li>LOG_LEVEL >= 2 - выводится время, TAG, имя файла и номер строки </li>
|
||||
</ul>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00092">92</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00096">96</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -167,8 +167,10 @@ Macros</h2></td></tr>
|
||||
<li>user[num_user_vars] <br />
|
||||
Также есть ряд функций (дефайнов) для обращения к элементам этой структуры.</li>
|
||||
</ul>
|
||||
<p>Если трекеры <a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gac9eaedc31ab023ce7d6403999216e496">TRACKERS_ENABLE</a> отключены, то все дефайны определяются как ничего и на производительность кода не влияют <br />
|
||||
</p>
|
||||
<p>Параметры для конфигурации:</p><ul>
|
||||
<li><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gac9eaedc31ab023ce7d6403999216e496">TRACKERS_ENABLE</a> - Включить трекеры Если трекеры <a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gac9eaedc31ab023ce7d6403999216e496">TRACKERS_ENABLE</a> отключены, то все дефайны определяются как ничего и на производительность кода не влияют <br />
|
||||
</li>
|
||||
</ul>
|
||||
<dl class="section user"><dt>Пример:</dt><dd></dd></dl>
|
||||
<p>Определяем typedef трекера измерений Measure_TrackerTypeDef</p>
|
||||
<pre class="fragment"> typedef TrackerTypeDef(MEASURE_USER_VARS_NUMB) Measure_TrackerTypeDef;
|
||||
@ -232,7 +234,7 @@ Macros</h2></td></tr>
|
||||
<p>Содержит счетчик для успешных событый (cnt_ok), счетчик для ошибок (cnt_err), счетчик для предупреждений (cnt_warn).</p>
|
||||
<p>Также есть возможность объявить пользовательские переменные в количестве <num_user_vars> штук. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00069">69</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00070">70</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -254,7 +256,7 @@ Macros</h2></td></tr>
|
||||
</div><!-- fragment -->
|
||||
<p>Получить количетство пользовательских переменных </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00079">79</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00080">80</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -277,11 +279,11 @@ Macros</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
<b>Value:</b><div class="fragment"><div class="line">((_uservarnumb_) < <a class="code hl_define" href="#ga72be24629fedb8bf70e830373d151fbc">num_of_usercnts</a>((_cntstruct_).user))</div>
|
||||
<div class="ttc" id="agroup___t_r_a_c_k_e_r_s_html_ga72be24629fedb8bf70e830373d151fbc"><div class="ttname"><a href="#ga72be24629fedb8bf70e830373d151fbc">num_of_usercnts</a></div><div class="ttdeci">#define num_of_usercnts(_user_)</div><div class="ttdoc">Получить количетство пользовательских переменных</div><div class="ttdef"><b>Definition</b> <a href="trackers_8h_source.html#l00079">trackers.h:79</a></div></div>
|
||||
<div class="ttc" id="agroup___t_r_a_c_k_e_r_s_html_ga72be24629fedb8bf70e830373d151fbc"><div class="ttname"><a href="#ga72be24629fedb8bf70e830373d151fbc">num_of_usercnts</a></div><div class="ttdeci">#define num_of_usercnts(_user_)</div><div class="ttdoc">Получить количетство пользовательских переменных</div><div class="ttdef"><b>Definition</b> <a href="trackers_8h_source.html#l00080">trackers.h:80</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
<p>Проверка существует ли указанная пользовательская переменная </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00081">81</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00082">82</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -304,11 +306,11 @@ Macros</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">if</span>(<a class="code hl_define" href="#gadd7fd2c6e3a4800f1d5ddab35fd4b43e">assert_usertracker</a>(_cntstruct_, _uservarnumb_))</div>
|
||||
<div class="ttc" id="agroup___t_r_a_c_k_e_r_s_html_gadd7fd2c6e3a4800f1d5ddab35fd4b43e"><div class="ttname"><a href="#gadd7fd2c6e3a4800f1d5ddab35fd4b43e">assert_usertracker</a></div><div class="ttdeci">#define assert_usertracker(_cntstruct_, _uservarnumb_)</div><div class="ttdoc">Проверка существует ли указанная пользовательская переменная</div><div class="ttdef"><b>Definition</b> <a href="trackers_8h_source.html#l00081">trackers.h:81</a></div></div>
|
||||
<div class="ttc" id="agroup___t_r_a_c_k_e_r_s_html_gadd7fd2c6e3a4800f1d5ddab35fd4b43e"><div class="ttname"><a href="#gadd7fd2c6e3a4800f1d5ddab35fd4b43e">assert_usertracker</a></div><div class="ttdeci">#define assert_usertracker(_cntstruct_, _uservarnumb_)</div><div class="ttdoc">Проверка существует ли указанная пользовательская переменная</div><div class="ttdef"><b>Definition</b> <a href="trackers_8h_source.html#l00082">trackers.h:82</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
<p>Условие для проверки существует ли указанная пользовательская переменная </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00083">83</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00084">84</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -334,7 +336,7 @@ Macros</h2></td></tr>
|
||||
</div><!-- fragment -->
|
||||
<p>Тернарный оператор для проверки существует ли указанная пользовательская переменная </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00085">85</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00086">86</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -356,7 +358,7 @@ Macros</h2></td></tr>
|
||||
</div><!-- fragment -->
|
||||
<p>Считать счетчик успешных событий </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00089">89</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00090">90</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -378,7 +380,7 @@ Macros</h2></td></tr>
|
||||
</div><!-- fragment -->
|
||||
<p>Считать счетчик ошибок </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00091">91</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00092">92</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -400,7 +402,7 @@ Macros</h2></td></tr>
|
||||
</div><!-- fragment -->
|
||||
<p>Считать счетчик предупреждений </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00093">93</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00094">94</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -423,7 +425,7 @@ Macros</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
<b>Value:</b><div class="fragment"><div class="line">(_cntstruct_).user[<a class="code hl_define" href="#ga39b6ffbc561f8caac276415e1ad32c30">tern_assert_usertracker</a>(_cntstruct_, _uservarnumb_)]</div>
|
||||
<div class="ttc" id="agroup___t_r_a_c_k_e_r_s_html_ga39b6ffbc561f8caac276415e1ad32c30"><div class="ttname"><a href="#ga39b6ffbc561f8caac276415e1ad32c30">tern_assert_usertracker</a></div><div class="ttdeci">#define tern_assert_usertracker(_cntstruct_, _uservarnumb_)</div><div class="ttdoc">Тернарный оператор для проверки существует ли указанная пользовательская переменная</div><div class="ttdef"><b>Definition</b> <a href="trackers_8h_source.html#l00085">trackers.h:85</a></div></div>
|
||||
<div class="ttc" id="agroup___t_r_a_c_k_e_r_s_html_ga39b6ffbc561f8caac276415e1ad32c30"><div class="ttname"><a href="#ga39b6ffbc561f8caac276415e1ad32c30">tern_assert_usertracker</a></div><div class="ttdeci">#define tern_assert_usertracker(_cntstruct_, _uservarnumb_)</div><div class="ttdoc">Тернарный оператор для проверки существует ли указанная пользовательская переменная</div><div class="ttdef"><b>Definition</b> <a href="trackers_8h_source.html#l00086">trackers.h:86</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
<p>Считать пользовательскую переменную </p>
|
||||
<dl class="section note"><dt>Note</dt><dd>Здесь нет проверки - существует ли пользовательская переменная! Есть возможность выйти за границы структуры!!! Чтобы этого избежать можно использовать дефайн #ref <a class="el" href="#gadd7fd2c6e3a4800f1d5ddab35fd4b43e" title="Проверка существует ли указанная пользовательская переменная">assert_usertracker()</a> <pre class="fragment"> if(assert_usertracker(struct, 0)) {
|
||||
@ -431,7 +433,7 @@ Macros</h2></td></tr>
|
||||
}
|
||||
</pre> </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00105">105</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00106">106</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -453,7 +455,7 @@ Macros</h2></td></tr>
|
||||
</div><!-- fragment -->
|
||||
<p>Инкрементирование счетчика успешных событий </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00110">110</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00111">111</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -475,7 +477,7 @@ Macros</h2></td></tr>
|
||||
</div><!-- fragment -->
|
||||
<p>Инкрементирование счетчика ошибок </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00112">112</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00113">113</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -497,7 +499,7 @@ Macros</h2></td></tr>
|
||||
</div><!-- fragment -->
|
||||
<p>Инкрементирование счетчика предупреждений </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00114">114</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00115">115</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -520,11 +522,11 @@ Macros</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_define" href="#gad91d8ca89074270fc040c0449e57cf07">if_assert_usertracker</a>(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_]++;</div>
|
||||
<div class="ttc" id="agroup___t_r_a_c_k_e_r_s_html_gad91d8ca89074270fc040c0449e57cf07"><div class="ttname"><a href="#gad91d8ca89074270fc040c0449e57cf07">if_assert_usertracker</a></div><div class="ttdeci">#define if_assert_usertracker(_cntstruct_, _uservarnumb_)</div><div class="ttdoc">Условие для проверки существует ли указанная пользовательская переменная</div><div class="ttdef"><b>Definition</b> <a href="trackers_8h_source.html#l00083">trackers.h:83</a></div></div>
|
||||
<div class="ttc" id="agroup___t_r_a_c_k_e_r_s_html_gad91d8ca89074270fc040c0449e57cf07"><div class="ttname"><a href="#gad91d8ca89074270fc040c0449e57cf07">if_assert_usertracker</a></div><div class="ttdeci">#define if_assert_usertracker(_cntstruct_, _uservarnumb_)</div><div class="ttdoc">Условие для проверки существует ли указанная пользовательская переменная</div><div class="ttdef"><b>Definition</b> <a href="trackers_8h_source.html#l00084">trackers.h:84</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
<p>Инкрементирование пользовательской переменной </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00116">116</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00117">117</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -555,7 +557,7 @@ Macros</h2></td></tr>
|
||||
</div><!-- fragment -->
|
||||
<p>Запись числа в пользовательскую переменную </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00118">118</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00119">119</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -577,7 +579,7 @@ Macros</h2></td></tr>
|
||||
</div><!-- fragment -->
|
||||
<p>Очистка всей структуры </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00121">121</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00122">122</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -599,7 +601,7 @@ Macros</h2></td></tr>
|
||||
</div><!-- fragment -->
|
||||
<p>Очистка счетчика успешных событий </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00123">123</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00124">124</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -621,7 +623,7 @@ Macros</h2></td></tr>
|
||||
</div><!-- fragment -->
|
||||
<p>Очистка счетчика ошибок </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00125">125</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00126">126</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -643,7 +645,7 @@ Macros</h2></td></tr>
|
||||
</div><!-- fragment -->
|
||||
<p>Очистка счетчика предупреждений </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00127">127</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00128">128</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -669,7 +671,7 @@ Macros</h2></td></tr>
|
||||
</div><!-- fragment -->
|
||||
<p>Очистка пользовательской переменной </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00129">129</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00130">130</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -691,7 +693,7 @@ Macros</h2></td></tr>
|
||||
</div><!-- fragment -->
|
||||
<p>Очистка всех пользовательских переменных </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00131">131</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00132">132</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -230,7 +230,7 @@ $(function(){initNavTree('mylibs__include_8h_source.html','',''); });
|
||||
<div class="ttc" id="ageneral__gpio_8h_html"><div class="ttname"><a href="general__gpio_8h.html">general_gpio.h</a></div><div class="ttdoc">Заголовочный файл для модуля инициализации портов и работы с ними.</div></div>
|
||||
<div class="ttc" id="ageneral__tim_8h_html"><div class="ttname"><a href="general__tim_8h.html">general_tim.h</a></div><div class="ttdoc">Заголовочный файл для модуля инициализации таймеров и работы с ними.</div></div>
|
||||
<div class="ttc" id="amylibs__defs_8h_html"><div class="ttname"><a href="mylibs__defs_8h.html">mylibs_defs.h</a></div><div class="ttdoc">Заголочный файл для дефайнов библиотеки MyLibsGeneral.</div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html"><div class="ttname"><a href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a></div><div class="ttdoc">Структура эволюционного оптимизатора</div><div class="ttdef"><b>Definition</b> <a href="evolve__optimizer_8h_source.html#l00081">evolve_optimizer.h:81</a></div></div>
|
||||
<div class="ttc" id="astruct_evolve_optimizer__t_html"><div class="ttname"><a href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a></div><div class="ttdoc">Структура эволюционного оптимизатора</div><div class="ttdef"><b>Definition</b> <a href="evolve__optimizer_8h_source.html#l00087">evolve_optimizer.h:87</a></div></div>
|
||||
<div class="ttc" id="atrace_8h_html"><div class="ttname"><a href="trace_8h.html">trace.h</a></div><div class="ttdoc">Заголочный файл для работы с трассировкой.</div></div>
|
||||
<div class="ttc" id="atrackers_8h_html"><div class="ttname"><a href="trackers_8h.html">trackers.h</a></div><div class="ttdoc">Заголочный файл для работы с трекерами Trackers defines.</div></div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
|
||||
@ -64,7 +64,7 @@ var NAVTREE =
|
||||
var NAVTREEINDEX =
|
||||
[
|
||||
"____general__flash_8c_source.html",
|
||||
"struct_t_i_m___encoder_type_def.html#a4fc05ef011205a6702cb3d006bab677e"
|
||||
"struct_t_i_m___encoder_type_def.html#a021f0c585e9e62d68a4b09f630d8b6e5"
|
||||
];
|
||||
|
||||
var SYNCONMSG = 'click to disable panel synchronization';
|
||||
|
||||
@ -53,9 +53,10 @@ var NAVTREEINDEX0 =
|
||||
"group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga7c1396e5c95c766afccdb45cbfcf5971":[1,0,0,1,2],
|
||||
"group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga80d6162495fc3776d8902610657d4fee":[1,0,0,1,1],
|
||||
"group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html":[1,0,1,1],
|
||||
"group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga1ba2fa963c9ae12625be1b7c20718563":[1,0,1,1,4],
|
||||
"group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga71a0c240c667e976d9caef391ab767ba":[1,0,1,1,2],
|
||||
"group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gac21587fe68fe3635525358ac3f4059d9":[1,0,1,1,3],
|
||||
"group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga75acd71c85d4e60dc0eb31bc5780086a":[1,0,1,1,5],
|
||||
"group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga9c853b02c22f26023c34d1d404b6d653":[1,0,1,1,3],
|
||||
"group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gadaf3a90724197e1737d5c70c7bcc75e1":[1,0,1,1,4],
|
||||
"group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gaff223481fcffea77394a331afde29fdc":[1,0,1,1,1],
|
||||
"group___g_p_i_o___i_n_i_t.html":[1,0,2,0,0,0],
|
||||
"group___g_p_i_o___i_n_i_t.html#ga19d9e3aced311179a2914e0c9b13d0f9":[1,0,2,0,0,0,3],
|
||||
@ -218,6 +219,7 @@ var NAVTREEINDEX0 =
|
||||
"struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8":[1,0,1,1,0,0],
|
||||
"struct_evolve_optimizer__t.html#a5391277564b54e2271856a2466033df5":[1,0,1,1,0,3],
|
||||
"struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d":[1,0,1,1,0,6],
|
||||
"struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a":[1,0,1,1,0,7],
|
||||
"struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6":[1,0,1,1,0,2],
|
||||
"struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1":[1,0,1,1,0,1],
|
||||
"struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d":[1,0,1,1,0,5],
|
||||
@ -247,7 +249,5 @@ var NAVTREEINDEX0 =
|
||||
"struct_r_t_t___flash_header__t.html#ae7276198385c8d6f6508f433d042d52a":[1,0,1,5,2,0,2],
|
||||
"struct_r_t_t___flash_header__t.html#afd1a5c51af6f97d170c2ccbbe3e34699":[1,0,1,5,2,0,1],
|
||||
"struct_s_p_i___settings_type_def.html":[2,0,5],
|
||||
"struct_t_i_m___encoder_type_def.html":[1,0,2,1,1,0],
|
||||
"struct_t_i_m___encoder_type_def.html#a021f0c585e9e62d68a4b09f630d8b6e5":[1,0,2,1,1,0,3],
|
||||
"struct_t_i_m___encoder_type_def.html#a0dacce3dde7df3122583869d96a372a2":[1,0,2,1,1,0,1]
|
||||
"struct_t_i_m___encoder_type_def.html":[1,0,2,1,1,0]
|
||||
};
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
var NAVTREEINDEX1 =
|
||||
{
|
||||
"struct_t_i_m___encoder_type_def.html#a021f0c585e9e62d68a4b09f630d8b6e5":[1,0,2,1,1,0,3],
|
||||
"struct_t_i_m___encoder_type_def.html#a0dacce3dde7df3122583869d96a372a2":[1,0,2,1,1,0,1],
|
||||
"struct_t_i_m___encoder_type_def.html#a4fc05ef011205a6702cb3d006bab677e":[1,0,2,1,1,0,5],
|
||||
"struct_t_i_m___encoder_type_def.html#a67ad037b92162546763fc9c425b5e3c5":[1,0,2,1,1,0,6],
|
||||
"struct_t_i_m___encoder_type_def.html#a6973108a83d2a3ea4fc3e0e8a501af80":[1,0,2,1,1,0,7],
|
||||
|
||||
@ -10,7 +10,7 @@ var searchData=
|
||||
['evolve_5fmax_5fcandidates_7',['EVOLVE_MAX_CANDIDATES',['../group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga7c1396e5c95c766afccdb45cbfcf5971',1,'mylibs_config.h']]],
|
||||
['evolve_5fmax_5fparams_8',['EVOLVE_MAX_PARAMS',['../group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga80d6162495fc3776d8902610657d4fee',1,'mylibs_config.h']]],
|
||||
['evolve_5foptimizer_2eh_9',['evolve_optimizer.h',['../evolve__optimizer_8h.html',1,'']]],
|
||||
['evolveoptimizer_5finit_10',['EvolveOptimizer_Init',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gac21587fe68fe3635525358ac3f4059d9',1,'evolve_optimizer.h']]],
|
||||
['evolveoptimizer_5fstep_11',['EvolveOptimizer_Step',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga1ba2fa963c9ae12625be1b7c20718563',1,'evolve_optimizer.h']]],
|
||||
['evolveoptimizer_5finit_10',['EvolveOptimizer_Init',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gadaf3a90724197e1737d5c70c7bcc75e1',1,'evolve_optimizer.h']]],
|
||||
['evolveoptimizer_5fstep_11',['EvolveOptimizer_Step',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga75acd71c85d4e60dc0eb31bc5780086a',1,'evolve_optimizer.h']]],
|
||||
['evolveoptimizer_5ft_12',['EvolveOptimizer_t',['../struct_evolve_optimizer__t.html',1,'']]]
|
||||
];
|
||||
|
||||
@ -14,8 +14,9 @@ var searchData=
|
||||
['led_5fpwm_5fticks_11',['LED_PWM_TICKS',['../group___g_p_i_o___i_n_i_t.html#ga1d42e219765ec526d99e306638ac0023',1,'general_gpio.h']]],
|
||||
['libraries_20configs_12',['Libraries configs',['../group___l_i_b_s___c_o_n_f_i_g.html',1,'']]],
|
||||
['libs_13',['My Libs',['../group___m_y_l_i_b_s___a_l_l.html',1,'']]],
|
||||
['log_5flevel_14',['LOG_LEVEL',['../group___t_r_a_c_e___c_o_n_f_i_g.html#ga0b87e0d3bf5853bcbb0b66a7c48fdc05',1,'mylibs_config.h']]],
|
||||
['log_5fprintf_15',['log_printf',['../group___t_r_a_c_e___s_e_r_i_a_l.html#ga730fb7b8d0bbb348dca73c15bd0e0b26',1,'trace.h']]],
|
||||
['loss_16',['loss',['../struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d',1,'EvolveOptimizer_t']]],
|
||||
['lr_17',['lr',['../struct_h_f___stack_frame__t.html#a6e51904297f7725e96d5b5fb291ef577',1,'HF_StackFrame_t']]]
|
||||
['local_5ftime_14',['local_time',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga9c853b02c22f26023c34d1d404b6d653',1,'evolve_optimizer.h']]],
|
||||
['log_5flevel_15',['LOG_LEVEL',['../group___t_r_a_c_e___c_o_n_f_i_g.html#ga0b87e0d3bf5853bcbb0b66a7c48fdc05',1,'mylibs_config.h']]],
|
||||
['log_5fprintf_16',['log_printf',['../group___t_r_a_c_e___s_e_r_i_a_l.html#ga730fb7b8d0bbb348dca73c15bd0e0b26',1,'trace.h']]],
|
||||
['loss_17',['loss',['../struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d',1,'EvolveOptimizer_t']]],
|
||||
['lr_18',['lr',['../struct_h_f___stack_frame__t.html#a6e51904297f7725e96d5b5fb291ef577',1,'HF_StackFrame_t']]]
|
||||
];
|
||||
|
||||
@ -7,22 +7,23 @@ var searchData=
|
||||
['serial_5ftrace_5fenable_4',['SERIAL_TRACE_ENABLE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#ga76936505ca200d2e61226b7ba68f27c6',1,'mylibs_config.h']]],
|
||||
['size_5',['size',['../struct_r_t_t___flash_header__t.html#afd1a5c51af6f97d170c2ccbbe3e34699',1,'RTT_FlashHeader_t']]],
|
||||
['smasterconfig_6',['sMasterConfig',['../struct_t_i_m___settings_type_def.html#a2d9d277dd395424b964445ec1bc65b21',1,'TIM_SettingsTypeDef']]],
|
||||
['spi_5fsettingstypedef_7',['SPI_SettingsTypeDef',['../struct_s_p_i___settings_type_def.html',1,'']]],
|
||||
['sslaveconfig_8',['sSlaveConfig',['../struct_t_i_m___settings_type_def.html#a9694cf0910a69d48ff94f8aeac106969',1,'TIM_SettingsTypeDef']]],
|
||||
['state_9',['state',['../struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435',1,'GPIO_LEDTypeDef']]],
|
||||
['stickbaseprescaler_10',['sTickBasePrescaler',['../struct_t_i_m___settings_type_def.html#a11151fe125960cb8e61328ffd06b7718',1,'TIM_SettingsTypeDef']]],
|
||||
['stickbaseus_11',['sTickBaseUS',['../struct_t_i_m___settings_type_def.html#a58da1b4c0f6d12d7d9fb2f170b9b9e6e',1,'TIM_SettingsTypeDef']]],
|
||||
['stimahbfreqmhz_12',['sTimAHBFreqMHz',['../struct_t_i_m___settings_type_def.html#a7073358fd3a722687eb85238ab570014',1,'TIM_SettingsTypeDef']]],
|
||||
['stimfreqhz_13',['sTimFreqHz',['../struct_t_i_m___settings_type_def.html#af6057ff3f60f5e01b41d4a347b79a5e4',1,'TIM_SettingsTypeDef']]],
|
||||
['stimmode_14',['sTimMode',['../struct_t_i_m___settings_type_def.html#ab90e370c3edda88e76583293c250d2b0',1,'TIM_SettingsTypeDef']]],
|
||||
['sw_15',['Sw',['../struct_t_i_m___encoder_type_def.html#a99295760ff8b27d1e6f1710f29383a45',1,'TIM_EncoderTypeDef']]],
|
||||
['sw_5factivelvl_16',['Sw_ActiveLvl',['../struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405',1,'GPIO_SwitchTypeDef']]],
|
||||
['sw_5ffilterdelay_17',['Sw_FilterDelay',['../struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06',1,'GPIO_SwitchTypeDef']]],
|
||||
['sw_5foff_18',['SW_OFF',['../group___g_p_i_o___i_n_i_t.html#gacd8900c9ec0efde1da3253b718574067',1,'general_gpio.h']]],
|
||||
['sw_5fon_19',['SW_ON',['../group___g_p_i_o___i_n_i_t.html#ga19d9e3aced311179a2914e0c9b13d0f9',1,'general_gpio.h']]],
|
||||
['sw_5fpin_20',['Sw_Pin',['../struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032',1,'GPIO_SwitchTypeDef']]],
|
||||
['sw_5fport_21',['Sw_Port',['../struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a',1,'GPIO_SwitchTypeDef']]],
|
||||
['sw_5fprevstate_22',['Sw_PrevState',['../struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89',1,'GPIO_SwitchTypeDef']]],
|
||||
['switch_20tools_23',['Switch tools',['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html',1,'']]],
|
||||
['swo_5ftrace_5fenable_24',['SWO_TRACE_ENABLE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#gab8db9704b5d11858aa879689b9d36336',1,'mylibs_config.h']]]
|
||||
['sorted_5fidx_7',['sorted_idx',['../struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a',1,'EvolveOptimizer_t']]],
|
||||
['spi_5fsettingstypedef_8',['SPI_SettingsTypeDef',['../struct_s_p_i___settings_type_def.html',1,'']]],
|
||||
['sslaveconfig_9',['sSlaveConfig',['../struct_t_i_m___settings_type_def.html#a9694cf0910a69d48ff94f8aeac106969',1,'TIM_SettingsTypeDef']]],
|
||||
['state_10',['state',['../struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435',1,'GPIO_LEDTypeDef']]],
|
||||
['stickbaseprescaler_11',['sTickBasePrescaler',['../struct_t_i_m___settings_type_def.html#a11151fe125960cb8e61328ffd06b7718',1,'TIM_SettingsTypeDef']]],
|
||||
['stickbaseus_12',['sTickBaseUS',['../struct_t_i_m___settings_type_def.html#a58da1b4c0f6d12d7d9fb2f170b9b9e6e',1,'TIM_SettingsTypeDef']]],
|
||||
['stimahbfreqmhz_13',['sTimAHBFreqMHz',['../struct_t_i_m___settings_type_def.html#a7073358fd3a722687eb85238ab570014',1,'TIM_SettingsTypeDef']]],
|
||||
['stimfreqhz_14',['sTimFreqHz',['../struct_t_i_m___settings_type_def.html#af6057ff3f60f5e01b41d4a347b79a5e4',1,'TIM_SettingsTypeDef']]],
|
||||
['stimmode_15',['sTimMode',['../struct_t_i_m___settings_type_def.html#ab90e370c3edda88e76583293c250d2b0',1,'TIM_SettingsTypeDef']]],
|
||||
['sw_16',['Sw',['../struct_t_i_m___encoder_type_def.html#a99295760ff8b27d1e6f1710f29383a45',1,'TIM_EncoderTypeDef']]],
|
||||
['sw_5factivelvl_17',['Sw_ActiveLvl',['../struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405',1,'GPIO_SwitchTypeDef']]],
|
||||
['sw_5ffilterdelay_18',['Sw_FilterDelay',['../struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06',1,'GPIO_SwitchTypeDef']]],
|
||||
['sw_5foff_19',['SW_OFF',['../group___g_p_i_o___i_n_i_t.html#gacd8900c9ec0efde1da3253b718574067',1,'general_gpio.h']]],
|
||||
['sw_5fon_20',['SW_ON',['../group___g_p_i_o___i_n_i_t.html#ga19d9e3aced311179a2914e0c9b13d0f9',1,'general_gpio.h']]],
|
||||
['sw_5fpin_21',['Sw_Pin',['../struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032',1,'GPIO_SwitchTypeDef']]],
|
||||
['sw_5fport_22',['Sw_Port',['../struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a',1,'GPIO_SwitchTypeDef']]],
|
||||
['sw_5fprevstate_23',['Sw_PrevState',['../struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89',1,'GPIO_SwitchTypeDef']]],
|
||||
['switch_20tools_24',['Switch tools',['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html',1,'']]],
|
||||
['swo_5ftrace_5fenable_25',['SWO_TRACE_ENABLE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#gab8db9704b5d11858aa879689b9d36336',1,'mylibs_config.h']]]
|
||||
];
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
var searchData=
|
||||
[
|
||||
['evolveoptimizer_5finit_0',['EvolveOptimizer_Init',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gac21587fe68fe3635525358ac3f4059d9',1,'evolve_optimizer.h']]],
|
||||
['evolveoptimizer_5fstep_1',['EvolveOptimizer_Step',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga1ba2fa963c9ae12625be1b7c20718563',1,'evolve_optimizer.h']]]
|
||||
['evolveoptimizer_5finit_0',['EvolveOptimizer_Init',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gadaf3a90724197e1737d5c70c7bcc75e1',1,'evolve_optimizer.h']]],
|
||||
['evolveoptimizer_5fstep_1',['EvolveOptimizer_Step',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga75acd71c85d4e60dc0eb31bc5780086a',1,'evolve_optimizer.h']]]
|
||||
];
|
||||
|
||||
@ -5,17 +5,18 @@ var searchData=
|
||||
['sconfig_2',['sConfig',['../struct_t_i_m___encoder_type_def.html#a021f0c585e9e62d68a4b09f630d8b6e5',1,'TIM_EncoderTypeDef']]],
|
||||
['size_3',['size',['../struct_r_t_t___flash_header__t.html#afd1a5c51af6f97d170c2ccbbe3e34699',1,'RTT_FlashHeader_t']]],
|
||||
['smasterconfig_4',['sMasterConfig',['../struct_t_i_m___settings_type_def.html#a2d9d277dd395424b964445ec1bc65b21',1,'TIM_SettingsTypeDef']]],
|
||||
['sslaveconfig_5',['sSlaveConfig',['../struct_t_i_m___settings_type_def.html#a9694cf0910a69d48ff94f8aeac106969',1,'TIM_SettingsTypeDef']]],
|
||||
['state_6',['state',['../struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435',1,'GPIO_LEDTypeDef']]],
|
||||
['stickbaseprescaler_7',['sTickBasePrescaler',['../struct_t_i_m___settings_type_def.html#a11151fe125960cb8e61328ffd06b7718',1,'TIM_SettingsTypeDef']]],
|
||||
['stickbaseus_8',['sTickBaseUS',['../struct_t_i_m___settings_type_def.html#a58da1b4c0f6d12d7d9fb2f170b9b9e6e',1,'TIM_SettingsTypeDef']]],
|
||||
['stimahbfreqmhz_9',['sTimAHBFreqMHz',['../struct_t_i_m___settings_type_def.html#a7073358fd3a722687eb85238ab570014',1,'TIM_SettingsTypeDef']]],
|
||||
['stimfreqhz_10',['sTimFreqHz',['../struct_t_i_m___settings_type_def.html#af6057ff3f60f5e01b41d4a347b79a5e4',1,'TIM_SettingsTypeDef']]],
|
||||
['stimmode_11',['sTimMode',['../struct_t_i_m___settings_type_def.html#ab90e370c3edda88e76583293c250d2b0',1,'TIM_SettingsTypeDef']]],
|
||||
['sw_12',['Sw',['../struct_t_i_m___encoder_type_def.html#a99295760ff8b27d1e6f1710f29383a45',1,'TIM_EncoderTypeDef']]],
|
||||
['sw_5factivelvl_13',['Sw_ActiveLvl',['../struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405',1,'GPIO_SwitchTypeDef']]],
|
||||
['sw_5ffilterdelay_14',['Sw_FilterDelay',['../struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06',1,'GPIO_SwitchTypeDef']]],
|
||||
['sw_5fpin_15',['Sw_Pin',['../struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032',1,'GPIO_SwitchTypeDef']]],
|
||||
['sw_5fport_16',['Sw_Port',['../struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a',1,'GPIO_SwitchTypeDef']]],
|
||||
['sw_5fprevstate_17',['Sw_PrevState',['../struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89',1,'GPIO_SwitchTypeDef']]]
|
||||
['sorted_5fidx_5',['sorted_idx',['../struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a',1,'EvolveOptimizer_t']]],
|
||||
['sslaveconfig_6',['sSlaveConfig',['../struct_t_i_m___settings_type_def.html#a9694cf0910a69d48ff94f8aeac106969',1,'TIM_SettingsTypeDef']]],
|
||||
['state_7',['state',['../struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435',1,'GPIO_LEDTypeDef']]],
|
||||
['stickbaseprescaler_8',['sTickBasePrescaler',['../struct_t_i_m___settings_type_def.html#a11151fe125960cb8e61328ffd06b7718',1,'TIM_SettingsTypeDef']]],
|
||||
['stickbaseus_9',['sTickBaseUS',['../struct_t_i_m___settings_type_def.html#a58da1b4c0f6d12d7d9fb2f170b9b9e6e',1,'TIM_SettingsTypeDef']]],
|
||||
['stimahbfreqmhz_10',['sTimAHBFreqMHz',['../struct_t_i_m___settings_type_def.html#a7073358fd3a722687eb85238ab570014',1,'TIM_SettingsTypeDef']]],
|
||||
['stimfreqhz_11',['sTimFreqHz',['../struct_t_i_m___settings_type_def.html#af6057ff3f60f5e01b41d4a347b79a5e4',1,'TIM_SettingsTypeDef']]],
|
||||
['stimmode_12',['sTimMode',['../struct_t_i_m___settings_type_def.html#ab90e370c3edda88e76583293c250d2b0',1,'TIM_SettingsTypeDef']]],
|
||||
['sw_13',['Sw',['../struct_t_i_m___encoder_type_def.html#a99295760ff8b27d1e6f1710f29383a45',1,'TIM_EncoderTypeDef']]],
|
||||
['sw_5factivelvl_14',['Sw_ActiveLvl',['../struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405',1,'GPIO_SwitchTypeDef']]],
|
||||
['sw_5ffilterdelay_15',['Sw_FilterDelay',['../struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06',1,'GPIO_SwitchTypeDef']]],
|
||||
['sw_5fpin_16',['Sw_Pin',['../struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032',1,'GPIO_SwitchTypeDef']]],
|
||||
['sw_5fport_17',['Sw_Port',['../struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a',1,'GPIO_SwitchTypeDef']]],
|
||||
['sw_5fprevstate_18',['Sw_PrevState',['../struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89',1,'GPIO_SwitchTypeDef']]]
|
||||
];
|
||||
|
||||
@ -110,6 +110,7 @@ $(function(){initNavTree('struct_evolve_optimizer__t.html','',''); });
|
||||
<tr class="even"><td class="entry"><a class="el" href="struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6">n_best</a></td><td class="entry"><a class="el" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a></td><td class="entry"></td></tr>
|
||||
<tr class="odd"><td class="entry"><a class="el" href="struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1">n_cand</a></td><td class="entry"><a class="el" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8">n_params</a></td><td class="entry"><a class="el" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a></td><td class="entry"></td></tr>
|
||||
<tr class="odd"><td class="entry"><a class="el" href="struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a">sorted_idx</a></td><td class="entry"><a class="el" href="struct_evolve_optimizer__t.html">EvolveOptimizer_t</a></td><td class="entry"></td></tr>
|
||||
</table></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
</div><!-- container -->
|
||||
|
||||
@ -122,11 +122,13 @@ Public Attributes</h2></td></tr>
|
||||
<tr class="memdesc:ac723b265a3d43b754489f14310314f0d"><td class="mdescLeft"> </td><td class="mdescRight">Loss для каждого кандидата <br /></td></tr>
|
||||
<tr class="memitem:a61bd0c8ae322a79936ba1f2ae22e0e0d" id="r_a61bd0c8ae322a79936ba1f2ae22e0e0d"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="#a61bd0c8ae322a79936ba1f2ae22e0e0d">candidates</a> [100][20]</td></tr>
|
||||
<tr class="memdesc:a61bd0c8ae322a79936ba1f2ae22e0e0d"><td class="mdescLeft"> </td><td class="mdescRight">Параметры кандидатов <br /></td></tr>
|
||||
<tr class="memitem:a74b81df1c298c99162310f3f7d91735a" id="r_a74b81df1c298c99162310f3f7d91735a"><td class="memItemLeft" align="right" valign="top">uint16_t </td><td class="memItemRight" valign="bottom"><a class="el" href="#a74b81df1c298c99162310f3f7d91735a">sorted_idx</a> [100]</td></tr>
|
||||
<tr class="memdesc:a74b81df1c298c99162310f3f7d91735a"><td class="mdescLeft"> </td><td class="mdescRight">Индексы отсортированных кандидатов <br /></td></tr>
|
||||
</table>
|
||||
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock"><p>Структура эволюционного оптимизатора </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00081">81</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00087">87</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
</div><a name="doc-variable-members" id="doc-variable-members"></a><h2 id="header-doc-variable-members" class="groupheader">Member Data Documentation</h2>
|
||||
<a id="a1c270fce82e0c97e6c88fd0971c1eed8" name="a1c270fce82e0c97e6c88fd0971c1eed8"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a1c270fce82e0c97e6c88fd0971c1eed8">◆ </a></span>n_params</h2>
|
||||
@ -142,7 +144,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Количество параметров </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00082">82</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00088">88</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -160,7 +162,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Количество кандидатов </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00083">83</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00089">89</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -178,7 +180,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Количество лучших, усредняемых </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00084">84</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00090">90</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -196,7 +198,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Амплитуда мутации в Q16.16. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00085">85</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00091">91</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -214,7 +216,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Индекс кандидата для обработки </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00086">86</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00092">92</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -232,7 +234,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Loss для каждого кандидата </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00087">87</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00093">93</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -250,7 +252,25 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Параметры кандидатов </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00088">88</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00094">94</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a74b81df1c298c99162310f3f7d91735a" name="a74b81df1c298c99162310f3f7d91735a"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a74b81df1c298c99162310f3f7d91735a">◆ </a></span>sorted_idx</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">uint16_t EvolveOptimizer_t::sorted_idx[100]</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Индексы отсортированных кандидатов </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="evolve__optimizer_8h_source.html#l00095">95</a> of file <a class="el" href="evolve__optimizer_8h_source.html">evolve_optimizer.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -6,5 +6,6 @@ var struct_evolve_optimizer__t =
|
||||
[ "iq_mutation", "struct_evolve_optimizer__t.html#a5391277564b54e2271856a2466033df5", null ],
|
||||
[ "cand_index", "struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae", null ],
|
||||
[ "loss", "struct_evolve_optimizer__t.html#ac723b265a3d43b754489f14310314f0d", null ],
|
||||
[ "candidates", "struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d", null ]
|
||||
[ "candidates", "struct_evolve_optimizer__t.html#a61bd0c8ae322a79936ba1f2ae22e0e0d", null ],
|
||||
[ "sorted_idx", "struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a", null ]
|
||||
];
|
||||
@ -129,7 +129,7 @@ Public Attributes</h2></td></tr>
|
||||
<div class="textblock"><p>Контекст стек-фрейма процессора при HardFault. </p>
|
||||
<p>Сохраняет регистры R0-R3, R12, LR, PC, PSR для последующего анализа. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00441">441</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00463">463</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
</div><a name="doc-variable-members" id="doc-variable-members"></a><h2 id="header-doc-variable-members" class="groupheader">Member Data Documentation</h2>
|
||||
<a id="a4146ed28926b5f234132b7112119a413" name="a4146ed28926b5f234132b7112119a413"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a4146ed28926b5f234132b7112119a413">◆ </a></span>r0</h2>
|
||||
@ -145,7 +145,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Регистр R0. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00442">442</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00464">464</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -163,7 +163,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Регистр R1. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00443">443</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00465">465</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -181,7 +181,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Регистр R2. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00444">444</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00466">466</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -199,7 +199,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Регистр R3. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00445">445</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00467">467</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -217,7 +217,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Регистр R12. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00446">446</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00468">468</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -235,7 +235,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Link Register. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00447">447</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00469">469</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -253,7 +253,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Program Counter. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00448">448</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00470">470</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -271,7 +271,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Program Status Register. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00449">449</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00471">471</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -118,7 +118,7 @@ Public Attributes</h2></td></tr>
|
||||
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock"><p>Структура RTT, которая будет положена в Flash. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00169">169</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00180">180</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
</div><a name="doc-variable-members" id="doc-variable-members"></a><h2 id="header-doc-variable-members" class="groupheader">Member Data Documentation</h2>
|
||||
<a id="a844ee5470a323a749856cbb7a682dc57" name="a844ee5470a323a749856cbb7a682dc57"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a844ee5470a323a749856cbb7a682dc57">◆ </a></span>tag</h2>
|
||||
@ -134,7 +134,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Уникальный идентификатор буфера </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00170">170</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00181">181</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -152,7 +152,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Размер данных </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00171">171</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00182">182</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -170,7 +170,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>Буфер RTT. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00172">172</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00183">183</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -117,153 +117,154 @@ $(function(){initNavTree('trackers_8h_source.html','',''); });
|
||||
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">- user[num_user_vars] </span></div>
|
||||
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">Также есть ряд функций (дефайнов) для обращения к элементам этой структуры.</span></div>
|
||||
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment">Если трекеры @ref TRACKERS_ENABLE отключены, то все дефайны определяются как ничего </span></div>
|
||||
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">и на производительность кода не влияют </span></div>
|
||||
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">@par Пример:</span></div>
|
||||
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">Определяем typedef трекера измерений Measure_TrackerTypeDef</span></div>
|
||||
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">@verbatim</span></div>
|
||||
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment"> typedef TrackerTypeDef(MEASURE_USER_VARS_NUMB) Measure_TrackerTypeDef;</span></div>
|
||||
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">@endverbatim</span></div>
|
||||
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">И через @ref Measure_TrackerTypeDef структура подключается в другие структуры</span></div>
|
||||
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">Для работы с структурой можно использовать функции:</span></div>
|
||||
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">- Для получения значения:</span></div>
|
||||
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment"> - TrackerGet_Ok()</span></div>
|
||||
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment"> - TrackerGet_Err()</span></div>
|
||||
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment"> - TrackerGet_Warn()</span></div>
|
||||
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment"> - TrackerGet_User(n)</span></div>
|
||||
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment"> </span></div>
|
||||
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment">- Для записи значения:</span></div>
|
||||
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment"> - TrackerCnt_Ok()</span></div>
|
||||
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment"> - TrackerCnt_Err()</span></div>
|
||||
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment"> - TrackerCnt_Warn()</span></div>
|
||||
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="comment"> - TrackerCnt_User()</span></div>
|
||||
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="comment"> - TrackerWrite_User(n)</span></div>
|
||||
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment"> </span></div>
|
||||
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment">- Для очищения значения:</span></div>
|
||||
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment"> - TrackerClear_All()</span></div>
|
||||
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment"> - TrackerClear_Ok()</span></div>
|
||||
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment"> - TrackerClear_Err()</span></div>
|
||||
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment"> - TrackerClear_Warn()</span></div>
|
||||
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="comment"> - TrackerClear_User(n)</span></div>
|
||||
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="comment"> - TrackerClear_UserAll()</span></div>
|
||||
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment">* @{ </span></div>
|
||||
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="comment">*************************************************************************/</span></div>
|
||||
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="preprocessor">#ifndef __TRACKERS_H_</span></div>
|
||||
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="preprocessor">#define __TRACKERS_H_</span></div>
|
||||
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="preprocessor">#include "<a class="code" href="mylibs__defs_8h.html">mylibs_defs.h</a>"</span></div>
|
||||
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
|
||||
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="preprocessor">#ifdef TRACKERS_ENABLE</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment"> /** </span></div>
|
||||
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment"> * @brief Структура для счетчиков отладки</span></div>
|
||||
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment"> * @param num_user_vars - количество пользовательских переменных</span></div>
|
||||
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment"> * @details Содержит счетчик для успешных событый (cnt_ok),</span></div>
|
||||
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment"> * счетчик для ошибок (cnt_err), счетчик для предупреждений (cnt_warn).</span></div>
|
||||
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="comment"> *</span></div>
|
||||
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment"> * Также есть возможность объявить пользовательские переменные в </span></div>
|
||||
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment"> * количестве <num_user_vars> штук.</span></div>
|
||||
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="comment"> */</span><span class="preprocessor"></span></div>
|
||||
<div class="foldopen" id="foldopen00069" data-start="" data-end="">
|
||||
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4"> 69</a></span><span class="preprocessor"> #define TrackerTypeDef(num_user_vars) \</span></div>
|
||||
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="preprocessor"> struct \</span></div>
|
||||
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="preprocessor"> { \</span></div>
|
||||
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="preprocessor"> uint32_t cnt_ok; \</span></div>
|
||||
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="preprocessor"> uint32_t cnt_err; \</span></div>
|
||||
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="preprocessor"> uint32_t cnt_warn; \</span></div>
|
||||
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor"> uint32_t user[num_user_vars]; \</span></div>
|
||||
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="preprocessor"> }</span></div>
|
||||
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment">Параметры для конфигурации:</span></div>
|
||||
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment">- @ref TRACKERS_ENABLE - Включить трекеры</span></div>
|
||||
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment"> Если трекеры @ref TRACKERS_ENABLE отключены, то все дефайны определяются как ничего </span></div>
|
||||
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment"> и на производительность кода не влияют </span></div>
|
||||
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">@par Пример:</span></div>
|
||||
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment">Определяем typedef трекера измерений Measure_TrackerTypeDef</span></div>
|
||||
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment">@verbatim</span></div>
|
||||
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment"> typedef TrackerTypeDef(MEASURE_USER_VARS_NUMB) Measure_TrackerTypeDef;</span></div>
|
||||
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">@endverbatim</span></div>
|
||||
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment">И через @ref Measure_TrackerTypeDef структура подключается в другие структуры</span></div>
|
||||
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">Для работы с структурой можно использовать функции:</span></div>
|
||||
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment">- Для получения значения:</span></div>
|
||||
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment"> - TrackerGet_Ok()</span></div>
|
||||
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment"> - TrackerGet_Err()</span></div>
|
||||
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment"> - TrackerGet_Warn()</span></div>
|
||||
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment"> - TrackerGet_User(n)</span></div>
|
||||
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment"> </span></div>
|
||||
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment">- Для записи значения:</span></div>
|
||||
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment"> - TrackerCnt_Ok()</span></div>
|
||||
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment"> - TrackerCnt_Err()</span></div>
|
||||
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="comment"> - TrackerCnt_Warn()</span></div>
|
||||
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="comment"> - TrackerCnt_User()</span></div>
|
||||
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment"> - TrackerWrite_User(n)</span></div>
|
||||
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment"> </span></div>
|
||||
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment">- Для очищения значения:</span></div>
|
||||
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment"> - TrackerClear_All()</span></div>
|
||||
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment"> - TrackerClear_Ok()</span></div>
|
||||
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment"> - TrackerClear_Err()</span></div>
|
||||
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="comment"> - TrackerClear_Warn()</span></div>
|
||||
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="comment"> - TrackerClear_User(n)</span></div>
|
||||
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment"> - TrackerClear_UserAll()</span></div>
|
||||
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="comment">* @{ </span></div>
|
||||
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="comment">*************************************************************************/</span></div>
|
||||
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="preprocessor">#ifndef __TRACKERS_H_</span></div>
|
||||
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="preprocessor">#define __TRACKERS_H_</span></div>
|
||||
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="preprocessor">#include "<a class="code" href="mylibs__defs_8h.html">mylibs_defs.h</a>"</span></div>
|
||||
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
|
||||
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="preprocessor">#ifdef TRACKERS_ENABLE</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment"> /** </span></div>
|
||||
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment"> * @brief Структура для счетчиков отладки</span></div>
|
||||
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment"> * @param num_user_vars - количество пользовательских переменных</span></div>
|
||||
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment"> * @details Содержит счетчик для успешных событый (cnt_ok),</span></div>
|
||||
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="comment"> * счетчик для ошибок (cnt_err), счетчик для предупреждений (cnt_warn).</span></div>
|
||||
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment"> *</span></div>
|
||||
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment"> * Также есть возможность объявить пользовательские переменные в </span></div>
|
||||
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="comment"> * количестве <num_user_vars> штук.</span></div>
|
||||
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="comment"> */</span><span class="preprocessor"></span></div>
|
||||
<div class="foldopen" id="foldopen00070" data-start="" data-end="">
|
||||
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4"> 70</a></span><span class="preprocessor"> #define TrackerTypeDef(num_user_vars) \</span></div>
|
||||
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="preprocessor"> struct \</span></div>
|
||||
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="preprocessor"> { \</span></div>
|
||||
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="preprocessor"> uint32_t cnt_ok; \</span></div>
|
||||
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="preprocessor"> uint32_t cnt_err; \</span></div>
|
||||
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor"> uint32_t cnt_warn; \</span></div>
|
||||
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="preprocessor"> uint32_t user[num_user_vars]; \</span></div>
|
||||
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="preprocessor"> }</span></div>
|
||||
</div>
|
||||
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="comment"> /** @brief Получить количетство пользовательских переменных */</span></div>
|
||||
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga72be24629fedb8bf70e830373d151fbc"> 79</a></span><span class="preprocessor"> #define num_of_usercnts(_user_) (sizeof(_user_) / sizeof(uint32_t))</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="comment"> /** @brief Проверка существует ли указанная пользовательская переменная */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#gadd7fd2c6e3a4800f1d5ddab35fd4b43e"> 81</a></span><span class="preprocessor"> #define assert_usertracker(_cntstruct_, _uservarnumb_) ((_uservarnumb_) < num_of_usercnts((_cntstruct_).user))</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="comment"> /** @brief Условие для проверки существует ли указанная пользовательская переменная */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#gad91d8ca89074270fc040c0449e57cf07"> 83</a></span><span class="preprocessor"> #define if_assert_usertracker(_cntstruct_, _uservarnumb_) if(assert_usertracker(_cntstruct_, _uservarnumb_))</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="comment"> /** @brief Тернарный оператор для проверки существует ли указанная пользовательская переменная */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga39b6ffbc561f8caac276415e1ad32c30"> 85</a></span><span class="preprocessor"> #define tern_assert_usertracker(_cntstruct_, _uservarnumb_) (assert_usertracker(_cntstruct_, _uservarnumb_)) ? _uservarnumb_ : 0</span></div>
|
||||
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
|
||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="comment"></span></div>
|
||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="comment"> /** @brief Считать счетчик успешных событий */</span></div>
|
||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#gab880911066605602a966641682090169"> 89</a></span><span class="preprocessor"> #define TrackerGet_Ok(_cntstruct_) (_cntstruct_).cnt_ok</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="comment"> /** @brief Считать счетчик ошибок */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga9dc91e6b798a081f95f2ccef2c288e5e"> 91</a></span><span class="preprocessor"> #define TrackerGet_Err(_cntstruct_) (_cntstruct_).cnt_err</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="comment"> /** @brief Считать счетчик предупреждений */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga47ac59a406ee74d4cd9fe0fbaf63a758"> 93</a></span><span class="preprocessor"> #define TrackerGet_Warn(_cntstruct_) (_cntstruct_).cnt_warn</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="comment"> /** </span></div>
|
||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="comment"> * @brief Считать пользовательскую переменную </span></div>
|
||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="comment"> * @note Здесь нет проверки - существует ли пользовательская переменная! </span></div>
|
||||
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="comment"> * Есть возможность выйти за границы структуры!!! </span></div>
|
||||
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="comment"> * Чтобы этого избежать можно использовать дефайн #ref assert_usertracker()</span></div>
|
||||
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="comment"> @verbatim </span></div>
|
||||
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="comment"> if(assert_usertracker(struct, 0)) {</span></div>
|
||||
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="comment"> TrackerGet_User(struct, 0)</span></div>
|
||||
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="comment"> }</span></div>
|
||||
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="comment"> @endverbatim</span></div>
|
||||
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="comment"> */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga4b08632669043dfdbd219dda03502bdb"> 105</a></span><span class="preprocessor"> #define TrackerGet_User(_cntstruct_, _uservarnumb_) (_cntstruct_).user[tern_assert_usertracker(_cntstruct_, _uservarnumb_)]</span></div>
|
||||
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div>
|
||||
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="comment"> /** @brief Получить количетство пользовательских переменных */</span></div>
|
||||
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga72be24629fedb8bf70e830373d151fbc"> 80</a></span><span class="preprocessor"> #define num_of_usercnts(_user_) (sizeof(_user_) / sizeof(uint32_t))</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="comment"> /** @brief Проверка существует ли указанная пользовательская переменная */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#gadd7fd2c6e3a4800f1d5ddab35fd4b43e"> 82</a></span><span class="preprocessor"> #define assert_usertracker(_cntstruct_, _uservarnumb_) ((_uservarnumb_) < num_of_usercnts((_cntstruct_).user))</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="comment"> /** @brief Условие для проверки существует ли указанная пользовательская переменная */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#gad91d8ca89074270fc040c0449e57cf07"> 84</a></span><span class="preprocessor"> #define if_assert_usertracker(_cntstruct_, _uservarnumb_) if(assert_usertracker(_cntstruct_, _uservarnumb_))</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="comment"> /** @brief Тернарный оператор для проверки существует ли указанная пользовательская переменная */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga39b6ffbc561f8caac276415e1ad32c30"> 86</a></span><span class="preprocessor"> #define tern_assert_usertracker(_cntstruct_, _uservarnumb_) (assert_usertracker(_cntstruct_, _uservarnumb_)) ? _uservarnumb_ : 0</span></div>
|
||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
|
||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="comment"></span></div>
|
||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="comment"> /** @brief Считать счетчик успешных событий */</span></div>
|
||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#gab880911066605602a966641682090169"> 90</a></span><span class="preprocessor"> #define TrackerGet_Ok(_cntstruct_) (_cntstruct_).cnt_ok</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="comment"> /** @brief Считать счетчик ошибок */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga9dc91e6b798a081f95f2ccef2c288e5e"> 92</a></span><span class="preprocessor"> #define TrackerGet_Err(_cntstruct_) (_cntstruct_).cnt_err</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="comment"> /** @brief Считать счетчик предупреждений */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga47ac59a406ee74d4cd9fe0fbaf63a758"> 94</a></span><span class="preprocessor"> #define TrackerGet_Warn(_cntstruct_) (_cntstruct_).cnt_warn</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="comment"> /** </span></div>
|
||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="comment"> * @brief Считать пользовательскую переменную </span></div>
|
||||
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="comment"> * @note Здесь нет проверки - существует ли пользовательская переменная! </span></div>
|
||||
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="comment"> * Есть возможность выйти за границы структуры!!! </span></div>
|
||||
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="comment"> * Чтобы этого избежать можно использовать дефайн #ref assert_usertracker()</span></div>
|
||||
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="comment"> @verbatim </span></div>
|
||||
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="comment"> if(assert_usertracker(struct, 0)) {</span></div>
|
||||
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="comment"> TrackerGet_User(struct, 0)</span></div>
|
||||
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="comment"> }</span></div>
|
||||
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="comment"> @endverbatim</span></div>
|
||||
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="comment"> */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga4b08632669043dfdbd219dda03502bdb"> 106</a></span><span class="preprocessor"> #define TrackerGet_User(_cntstruct_, _uservarnumb_) (_cntstruct_).user[tern_assert_usertracker(_cntstruct_, _uservarnumb_)]</span></div>
|
||||
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
|
||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="comment"></span></div>
|
||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="comment"> /** @brief Инкрементирование счетчика успешных событий */</span></div>
|
||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga23de0006aa08984cfeddb6aa5e512fa1"> 110</a></span><span class="preprocessor"> #define TrackerCnt_Ok(_cntstruct_) (_cntstruct_).cnt_ok++</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="comment"> /** @brief Инкрементирование счетчика ошибок */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga49af29ab3927cad105c1d2b018a767e9"> 112</a></span><span class="preprocessor"> #define TrackerCnt_Err(_cntstruct_) (_cntstruct_).cnt_err++</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="comment"> /** @brief Инкрементирование счетчика предупреждений */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga8017fb05a56a1b667244f1f786fa9c57"> 114</a></span><span class="preprocessor"> #define TrackerCnt_Warn(_cntstruct_) (_cntstruct_).cnt_warn++</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="comment"> /** @brief Инкрементирование пользовательской переменной */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga1b7549afc4a1760b54a9b93b0f6d105e"> 116</a></span><span class="preprocessor"> #define TrackerCnt_User(_cntstruct_, _uservarnumb_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_]++;</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span><span class="comment"> /** @brief Запись числа в пользовательскую переменную */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#gad2f4062a9ac8c2ab062a364f640ebc51"> 118</a></span><span class="preprocessor"> #define TrackerWrite_User(_cntstruct_, _uservarnumb_, _val_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_] = (_val_)</span></div>
|
||||
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="comment"> /** @brief Очистка всей структуры */</span></div>
|
||||
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga704f7b9f8c65c9bcec48ce7cb77a2d3b"> 121</a></span><span class="preprocessor"> #define TrackerClear_All(_cntstruct_) memset(&(_cntstruct_), 0, sizeof(_cntstruct_))</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="comment"> /** @brief Очистка счетчика успешных событий */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga5dd8bac8c7ab5832019d55d7a68371b9"> 123</a></span><span class="preprocessor"> #define TrackerClear_Ok(_cntstruct_) (_cntstruct_).cnt_ok = 0</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="comment"> /** @brief Очистка счетчика ошибок */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#gae860b6947c6e317e14d40bd7b4b8eb74"> 125</a></span><span class="preprocessor"> #define TrackerClear_Err(_cntstruct_) (_cntstruct_).cnt_err = 0</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="comment"> /** @brief Очистка счетчика предупреждений */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga365a8c60bd13b75154feda649dd21ead"> 127</a></span><span class="preprocessor"> #define TrackerClear_Warn(_cntstruct_) (_cntstruct_).cnt_warn = 0</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="comment"> /** @brief Очистка пользовательской переменной */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga063dab1067005e1600ea32531fdf3f8d"> 129</a></span><span class="preprocessor"> #define TrackerClear_User(_cntstruct_, _uservarnumb_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_] = 0;</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span><span class="comment"> /** @brief Очистка всех пользовательских переменных */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#gaaec7ec19977bb26fa1919dfe920b82d5"> 131</a></span><span class="preprocessor"> #define TrackerClear_UserAll(_cntstruct_) memset(&(_cntstruct_).user, 0, sizeof((_cntstruct_).user))</span></div>
|
||||
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
|
||||
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="preprocessor">#else </span><span class="comment">//TRACKERS_ENABLE</span></div>
|
||||
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div>
|
||||
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="preprocessor"> #define TrackerTypeDef(num_user_vars) void *</span></div>
|
||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> </div>
|
||||
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span><span class="preprocessor"> #define num_of_usercnts(_user_) 0</span></div>
|
||||
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span><span class="preprocessor"> #define assert_tracecnt(_cntstruct_, _uservarnumb_) 0</span></div>
|
||||
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span><span class="preprocessor"> #define if_assert_usertracker(_cntstruct_, _uservarnumb_) if(0)</span></div>
|
||||
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span><span class="preprocessor"> #define tern_assert_usertracker(_cntstruct_, _uservarnumb_) 0</span></div>
|
||||
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
|
||||
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="preprocessor"> #define TrackerGet_Ok(_cntstruct_) dummy</span></div>
|
||||
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span><span class="preprocessor"> #define TrackerGet_Err(_cntstruct_) dummy</span></div>
|
||||
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="preprocessor"> #define TrackerGet_Warn(_cntstruct_) dummy </span></div>
|
||||
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="preprocessor"> #define TrackerGet_User(_cntstruct_, _uservarnumb_) dummy</span></div>
|
||||
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> </div>
|
||||
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span><span class="preprocessor"> #define TrackerCnt_Ok(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span><span class="preprocessor"> #define TrackerCnt_Err(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="preprocessor"> #define TrackerCnt_Warn(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="preprocessor"> #define TrackerCnt_User(_cntstruct_, _uservarnumb_) </span></div>
|
||||
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="preprocessor"> #define TrackerWrite_User(_cntstruct_, _uservarnumb_, _val_)</span></div>
|
||||
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div>
|
||||
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span><span class="preprocessor"> #define TrackerClear_All(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span><span class="preprocessor"> #define TrackerClear_Ok(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="preprocessor"> #define TrackerClear_Err(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="preprocessor"> #define TrackerClear_Warn(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="preprocessor"> #define TrackerClear_User(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="preprocessor"> #define TrackerClear_UserAll(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
|
||||
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="preprocessor">#endif </span><span class="comment">//TRACKERS_ENABLE</span></div>
|
||||
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
|
||||
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="preprocessor">#endif </span><span class="comment">//__TRACKERS_H_</span></div>
|
||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
|
||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="comment"></span></div>
|
||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="comment"> /** @brief Инкрементирование счетчика успешных событий */</span></div>
|
||||
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga23de0006aa08984cfeddb6aa5e512fa1"> 111</a></span><span class="preprocessor"> #define TrackerCnt_Ok(_cntstruct_) (_cntstruct_).cnt_ok++</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="comment"> /** @brief Инкрементирование счетчика ошибок */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga49af29ab3927cad105c1d2b018a767e9"> 113</a></span><span class="preprocessor"> #define TrackerCnt_Err(_cntstruct_) (_cntstruct_).cnt_err++</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="comment"> /** @brief Инкрементирование счетчика предупреждений */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga8017fb05a56a1b667244f1f786fa9c57"> 115</a></span><span class="preprocessor"> #define TrackerCnt_Warn(_cntstruct_) (_cntstruct_).cnt_warn++</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span><span class="comment"> /** @brief Инкрементирование пользовательской переменной */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga1b7549afc4a1760b54a9b93b0f6d105e"> 117</a></span><span class="preprocessor"> #define TrackerCnt_User(_cntstruct_, _uservarnumb_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_]++;</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="comment"> /** @brief Запись числа в пользовательскую переменную */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#gad2f4062a9ac8c2ab062a364f640ebc51"> 119</a></span><span class="preprocessor"> #define TrackerWrite_User(_cntstruct_, _uservarnumb_, _val_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_] = (_val_)</span></div>
|
||||
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="comment"></span> </div>
|
||||
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment"> /** @brief Очистка всей структуры */</span></div>
|
||||
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga704f7b9f8c65c9bcec48ce7cb77a2d3b"> 122</a></span><span class="preprocessor"> #define TrackerClear_All(_cntstruct_) memset(&(_cntstruct_), 0, sizeof(_cntstruct_))</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="comment"> /** @brief Очистка счетчика успешных событий */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga5dd8bac8c7ab5832019d55d7a68371b9"> 124</a></span><span class="preprocessor"> #define TrackerClear_Ok(_cntstruct_) (_cntstruct_).cnt_ok = 0</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="comment"> /** @brief Очистка счетчика ошибок */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#gae860b6947c6e317e14d40bd7b4b8eb74"> 126</a></span><span class="preprocessor"> #define TrackerClear_Err(_cntstruct_) (_cntstruct_).cnt_err = 0</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span><span class="comment"> /** @brief Очистка счетчика предупреждений */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga365a8c60bd13b75154feda649dd21ead"> 128</a></span><span class="preprocessor"> #define TrackerClear_Warn(_cntstruct_) (_cntstruct_).cnt_warn = 0</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span><span class="comment"> /** @brief Очистка пользовательской переменной */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#ga063dab1067005e1600ea32531fdf3f8d"> 130</a></span><span class="preprocessor"> #define TrackerClear_User(_cntstruct_, _uservarnumb_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_] = 0;</span><span class="comment"></span></div>
|
||||
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="comment"> /** @brief Очистка всех пользовательских переменных */</span><span class="preprocessor"></span></div>
|
||||
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"><a class="line" href="group___t_r_a_c_k_e_r_s.html#gaaec7ec19977bb26fa1919dfe920b82d5"> 132</a></span><span class="preprocessor"> #define TrackerClear_UserAll(_cntstruct_) memset(&(_cntstruct_).user, 0, sizeof((_cntstruct_).user))</span></div>
|
||||
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
|
||||
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span><span class="preprocessor">#else </span><span class="comment">//TRACKERS_ENABLE</span></div>
|
||||
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div>
|
||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span><span class="preprocessor"> #define TrackerTypeDef(num_user_vars) void *</span></div>
|
||||
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> </div>
|
||||
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span><span class="preprocessor"> #define num_of_usercnts(_user_) 0</span></div>
|
||||
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span><span class="preprocessor"> #define assert_tracecnt(_cntstruct_, _uservarnumb_) 0</span></div>
|
||||
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span><span class="preprocessor"> #define if_assert_usertracker(_cntstruct_, _uservarnumb_) if(0)</span></div>
|
||||
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="preprocessor"> #define tern_assert_usertracker(_cntstruct_, _uservarnumb_) 0</span></div>
|
||||
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> </div>
|
||||
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span><span class="preprocessor"> #define TrackerGet_Ok(_cntstruct_) dummy</span></div>
|
||||
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="preprocessor"> #define TrackerGet_Err(_cntstruct_) dummy</span></div>
|
||||
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="preprocessor"> #define TrackerGet_Warn(_cntstruct_) dummy </span></div>
|
||||
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="preprocessor"> #define TrackerGet_User(_cntstruct_, _uservarnumb_) dummy</span></div>
|
||||
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div>
|
||||
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span><span class="preprocessor"> #define TrackerCnt_Ok(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="preprocessor"> #define TrackerCnt_Err(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="preprocessor"> #define TrackerCnt_Warn(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="preprocessor"> #define TrackerCnt_User(_cntstruct_, _uservarnumb_) </span></div>
|
||||
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span><span class="preprocessor"> #define TrackerWrite_User(_cntstruct_, _uservarnumb_, _val_)</span></div>
|
||||
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
|
||||
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span><span class="preprocessor"> #define TrackerClear_All(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="preprocessor"> #define TrackerClear_Ok(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="preprocessor"> #define TrackerClear_Err(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="preprocessor"> #define TrackerClear_Warn(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="preprocessor"> #define TrackerClear_User(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span><span class="preprocessor"> #define TrackerClear_UserAll(_cntstruct_) </span></div>
|
||||
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div>
|
||||
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="preprocessor">#endif </span><span class="comment">//TRACKERS_ENABLE</span></div>
|
||||
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> </div>
|
||||
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span><span class="preprocessor">#endif </span><span class="comment">//__TRACKERS_H_</span></div>
|
||||
<div class="ttc" id="amylibs__defs_8h_html"><div class="ttname"><a href="mylibs__defs_8h.html">mylibs_defs.h</a></div><div class="ttdoc">Заголочный файл для дефайнов библиотеки MyLibsGeneral.</div></div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
|
||||
@ -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}
|
||||
|
||||
|
||||
|
||||
@ -17,208 +17,276 @@
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00013}00013\ \textcolor{comment}{-\/\ Мутацию\ для\ поиска\ оптимальных\ параметров}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00014}00014\ \textcolor{comment}{-\/\ Несколько\ независимых\ оптимизаторов\ в\ одной\ программе}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00015}00015\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00016}00016\ \textcolor{comment}{Если\ библиотека\ отключена\ @ref\ ENABLE\_EVOLVE\_OPTIMIZATION,\ то\ вставляются\ }}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00017}00017\ \textcolor{comment}{заглушки,\ никак\ не\ влияющие\ на\ параметры\ и\ остальную\ программу}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00018}00018\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00019}00019\ \textcolor{comment}{@par\ Пример\ использования:}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00020}00020\ \textcolor{comment}{@code}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00021}00021\ \textcolor{comment}{\#include\ "{}evolve\_optimizer.h"{}}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00022}00022\ \textcolor{comment}{\#define\ N\_PARAMS\ \ \ \ \ \ \ \ 4}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00023}00023\ \textcolor{comment}{\#define\ N\_CANDIDATES\ \ \ \ 100}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00024}00024\ \textcolor{comment}{\#define\ N\_BEST\ \ \ \ \ \ \ \ \ \ 10}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00025}00025\ \textcolor{comment}{\#define\ IQ\_MUTATION\ \ \ \ \ 655}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00026}00026\ \textcolor{comment}{int32\_t\ params[N\_PARAMS];}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00027}00027\ \textcolor{comment}{EvolveOptimizer\_t\ optimizer;}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00028}00028\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00029}00029\ \textcolor{comment}{//\ Формирование\ параметров}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00030}00030\ \textcolor{comment}{uint16\_t\ \ param\_u16\ =\ 800;}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00031}00031\ \textcolor{comment}{float\ \ \ \ \ param\_f\ \ \ =\ 0.01f;}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00032}00032\ \textcolor{comment}{uint8\_t\ \ \ param\_u8\ \ =\ 40;}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00033}00033\ \textcolor{comment}{int16\_t\ \ \ param\_i16\ =\ 1600;}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00034}00034\ \textcolor{comment}{params[0]\ =\ PARAM\_SCALE\_Q16(param\_u16,\ \ 0,\ \ \ \ \ \ 1000);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00035}00035\ \textcolor{comment}{params[1]\ =\ PARAM\_SCALE\_Q16(param\_f,\ \ \ \ 0.001f,\ 0.1f);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00036}00036\ \textcolor{comment}{params[2]\ =\ PARAM\_SCALE\_Q16(param\_u8,\ \ \ 10,\ \ \ \ \ 100);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00037}00037\ \textcolor{comment}{params[3]\ =\ PARAM\_SCALE\_Q16(param\_i16,\ \ 500,\ \ \ \ 5000);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00038}00038\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00039}00039\ \textcolor{comment}{//\ Инициалиазция}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00040}00040\ \textcolor{comment}{EvolveOptimizer\_Init(\&optimizer,\ N\_PARAMS,\ N\_CANDIDATES,\ N\_BEST,\ IQ\_MUTATION,\ params);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00041}00041\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00042}00042\ \textcolor{comment}{//\ Шаг\ эволюции}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00043}00043\ \textcolor{comment}{int32\_t\ loss\ =\ calc\_iq\_loss();\ //\ расчет\ эффективности\ параметров}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00044}00044\ \textcolor{comment}{EvolveOptimizer\_Step(\&optimizer,\ params,\ loss);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00045}00045\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00046}00046\ \textcolor{comment}{//\ Взятие\ следующих\ для\ эволюции\ параметров}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00047}00047\ \textcolor{comment}{param\_u16\ =\ PARAM\_UNSCALE\_Q16(params[0],\ \ 0,\ \ \ \ \ \ 1000);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00048}00048\ \textcolor{comment}{param\_f\ \ \ =\ PARAM\_UNSCALE\_Q16(params[1],\ \ 0.001f,\ 0.1f);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00049}00049\ \textcolor{comment}{param\_u8\ \ =\ PARAM\_UNSCALE\_Q16(params[2],\ \ 10,\ \ \ \ \ 100);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00050}00050\ \textcolor{comment}{param\_i16\ =\ PARAM\_UNSCALE\_Q16(params[3],\ \ 500,\ \ \ \ 5000);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00051}00051\ \textcolor{comment}{@endcode}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00052}00052\ \textcolor{comment}{*\ @\{\ \ }}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00053}00053\ \textcolor{comment}{*****************************************************************************/}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00054}00054\ \textcolor{preprocessor}{\#ifndef\ \_\_EVOLVE\_OPTIMIZER\_H\_}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00055}00055\ \textcolor{preprocessor}{\#define\ \_\_EVOLVE\_OPTIMIZER\_H\_}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00056}00056\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00057}00057\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{mylibs__defs_8h}{mylibs\_defs.h}}"{}}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00058}00058\ \textcolor{preprocessor}{\#include\ <stdint.h>}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00059}00059\ \textcolor{preprocessor}{\#include\ <stdlib.h>}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00060}00060\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00061}00061\ \textcolor{preprocessor}{\#ifdef\ ENABLE\_EVOLVE\_OPTIMIZATION}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00016}00016\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00017}00017\ \textcolor{comment}{Параметры\ для\ конфигурации:}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00018}00018\ \textcolor{comment}{-\/\ @ref\ ENABLE\_EVOLVE\_OPTIMIZATION\ -\/\ Включить\ оптимизацию\ параметров}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00019}00019\ \textcolor{comment}{\ \ Если\ библиотека\ отключена\ @ref\ ENABLE\_EVOLVE\_OPTIMIZATION,\ то\ вставляются\ }}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00020}00020\ \textcolor{comment}{\ \ заглушки,\ никак\ не\ влияющие\ на\ параметры\ и\ остальную\ программу}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00021}00021\ \textcolor{comment}{-\/\ @ref\ EVOLVE\_MAX\_PARAMS\ \ \ \ \ \ \ \ \ \ -\/\ Максимальное\ количество\ параметров}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00022}00022\ \textcolor{comment}{-\/\ @ref\ EVOLVE\_MAX\_CANDIDATES\ \ \ \ \ \ -\/\ Максимальное\ количество\ кандидатов\ для\ обучения}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00023}00023\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00024}00024\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00025}00025\ \textcolor{comment}{@par\ Пример\ использования:}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00026}00026\ \textcolor{comment}{@code}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00027}00027\ \textcolor{comment}{\#include\ "{}evolve\_optimizer.h"{}}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00028}00028\ \textcolor{comment}{\#define\ N\_PARAMS\ \ \ \ \ \ \ \ 4}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00029}00029\ \textcolor{comment}{\#define\ N\_CANDIDATES\ \ \ \ 100}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00030}00030\ \textcolor{comment}{\#define\ N\_BEST\ \ \ \ \ \ \ \ \ \ 10}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00031}00031\ \textcolor{comment}{\#define\ IQ\_MUTATION\ \ \ \ \ (PARAM\_SCALE\_Q16(0.1,\ 0,\ 1))}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00032}00032\ \textcolor{comment}{int32\_t\ params[N\_PARAMS];}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00033}00033\ \textcolor{comment}{EvolveOptimizer\_t\ optimizer;}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00034}00034\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00035}00035\ \textcolor{comment}{//\ Формирование\ параметров}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00036}00036\ \textcolor{comment}{uint16\_t\ \ param\_u16\ =\ 800;}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00037}00037\ \textcolor{comment}{float\ \ \ \ \ param\_f\ \ \ =\ 0.01f;}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00038}00038\ \textcolor{comment}{uint8\_t\ \ \ param\_u8\ \ =\ 40;}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00039}00039\ \textcolor{comment}{int16\_t\ \ \ param\_i16\ =\ 1600;}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00040}00040\ \textcolor{comment}{params[0]\ =\ PARAM\_SCALE\_Q16(param\_u16,\ \ 0,\ \ \ \ \ \ 1000);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00041}00041\ \textcolor{comment}{params[1]\ =\ PARAM\_SCALE\_Q16(param\_f,\ \ \ \ 0.001f,\ 0.1f);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00042}00042\ \textcolor{comment}{params[2]\ =\ PARAM\_SCALE\_Q16(param\_u8,\ \ \ 10,\ \ \ \ \ 100);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00043}00043\ \textcolor{comment}{params[3]\ =\ PARAM\_SCALE\_Q16(param\_i16,\ \ 500,\ \ \ \ 5000);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00044}00044\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00045}00045\ \textcolor{comment}{//\ Инициалиазция}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00046}00046\ \textcolor{comment}{EvolveOptimizer\_Init(\&optimizer,\ N\_PARAMS,\ N\_CANDIDATES,\ N\_BEST,\ IQ\_MUTATION,\ params);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00047}00047\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00048}00048\ \textcolor{comment}{//\ Шаг\ эволюции}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00049}00049\ \textcolor{comment}{int32\_t\ loss\ =\ calc\_iq\_loss();\ //\ расчет\ эффективности\ параметров}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00050}00050\ \textcolor{comment}{EvolveOptimizer\_Step(\&optimizer,\ params,\ loss);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00051}00051\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00052}00052\ \textcolor{comment}{//\ Взятие\ следующих\ для\ эволюции\ параметров}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00053}00053\ \textcolor{comment}{param\_u16\ =\ PARAM\_UNSCALE\_Q16(params[0],\ \ 0,\ \ \ \ \ \ 1000);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00054}00054\ \textcolor{comment}{param\_f\ \ \ =\ PARAM\_UNSCALE\_Q16(params[1],\ \ 0.001f,\ 0.1f);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00055}00055\ \textcolor{comment}{param\_u8\ \ =\ PARAM\_UNSCALE\_Q16(params[2],\ \ 10,\ \ \ \ \ 100);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00056}00056\ \textcolor{comment}{param\_i16\ =\ PARAM\_UNSCALE\_Q16(params[3],\ \ 500,\ \ \ \ 5000);}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00057}00057\ \textcolor{comment}{@endcode}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00058}00058\ \textcolor{comment}{*\ @\{\ \ }}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00059}00059\ \textcolor{comment}{*****************************************************************************/}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00060}00060\ \textcolor{preprocessor}{\#ifndef\ \_\_EVOLVE\_OPTIMIZER\_H\_}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00061}00061\ \textcolor{preprocessor}{\#define\ \_\_EVOLVE\_OPTIMIZER\_H\_}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00062}00062\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00063}00063\ \textcolor{preprocessor}{\#define\ Q16\_MUL(a,b)\ ((int32\_t)(((int64\_t)(a)\ *\ (int64\_t)(b))\ >>\ 16))}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00064}00064\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00065}00065\ \textcolor{comment}{/**}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00066}00066\ \textcolor{comment}{\ \ *\ @brief\ Линейное\ масштабирование\ x\ из\ диапазона\ [min\_val,\ max\_val]\ в\ Q16.16\ [0,\ 65536)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00067}00067\ \textcolor{comment}{\ \ */}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00068}\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gaff223481fcffea77394a331afde29fdc}{00068}}\ \textcolor{preprocessor}{\#define\ PARAM\_SCALE\_Q16(x,\ min\_val,\ max\_val)\ \(\backslash\)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00069}00069\ \textcolor{preprocessor}{((int32\_t)((((float)(x)\ -\/\ (float)(min\_val))\ /\ ((float)(max\_val)\ -\/\ (float)(min\_val)))\ *\ 65536.0f))}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00070}00070\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00071}00071\ \textcolor{comment}{/**}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00072}00072\ \textcolor{comment}{\ \ *\ @brief\ Обратное\ линейное\ масштабирование\ Q16.16\ значения\ в\ диапазон\ [min\_val,\ max\_val]}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00073}00073\ \textcolor{comment}{\ */}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00074}\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga71a0c240c667e976d9caef391ab767ba}{00074}}\ \textcolor{preprocessor}{\#define\ PARAM\_UNSCALE\_Q16(q16\_val,\ min\_val,\ max\_val)\ \(\backslash\)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00075}00075\ \textcolor{preprocessor}{(((float)(q16\_val)\ /\ 65536.0f)\ *\ ((float)(max\_val)\ -\/\ (float)(min\_val))\ +\ (float)(min\_val))}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00076}00076\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00077}00077\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00078}00078\ \textcolor{comment}{/**}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00079}00079\ \textcolor{comment}{\ \ *\ @brief\ Структура\ эволюционного\ оптимизатора}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00080}00080\ \textcolor{comment}{\ \ */}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00081}\mbox{\hyperlink{struct_evolve_optimizer__t}{00081}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00082}\mbox{\hyperlink{struct_evolve_optimizer__t_a1c270fce82e0c97e6c88fd0971c1eed8}{00082}}\ \ \ uint16\_t\ \mbox{\hyperlink{struct_evolve_optimizer__t_a1c270fce82e0c97e6c88fd0971c1eed8}{n\_params}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Количество\ параметров}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00083}\mbox{\hyperlink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{00083}}\ \ \ uint16\_t\ \mbox{\hyperlink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{n\_cand}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Количество\ кандидатов}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00084}\mbox{\hyperlink{struct_evolve_optimizer__t_a950cd70cb6bff33b78ad35ee58c729a6}{00084}}\ \ \ uint16\_t\ \mbox{\hyperlink{struct_evolve_optimizer__t_a950cd70cb6bff33b78ad35ee58c729a6}{n\_best}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Количество\ лучших,\ усредняемых}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00085}\mbox{\hyperlink{struct_evolve_optimizer__t_a5391277564b54e2271856a2466033df5}{00085}}\ \ \ uint16\_t\ \mbox{\hyperlink{struct_evolve_optimizer__t_a5391277564b54e2271856a2466033df5}{iq\_mutation}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Амплитуда\ мутации\ в\ Q16.16}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00086}\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{00086}}\ \ \ uint16\_t\ \mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Индекс\ кандидата\ для\ обработки}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00087}\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{00087}}\ \ \ int32\_t\ \mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[\mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga7c1396e5c95c766afccdb45cbfcf5971}{EVOLVE\_MAX\_CANDIDATES}}];\ \ \ \ \textcolor{comment}{///<\ Loss\ для\ каждого\ кандидата}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00088}\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{00088}}\ \ \ int32\_t\ \mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[\mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga7c1396e5c95c766afccdb45cbfcf5971}{EVOLVE\_MAX\_CANDIDATES}}][\mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga80d6162495fc3776d8902610657d4fee}{EVOLVE\_MAX\_PARAMS}}];\ \ \ \ \textcolor{comment}{///<\ Параметры\ кандидатов}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00089}00089\ \}\ \mbox{\hyperlink{struct_evolve_optimizer__t}{EvolveOptimizer\_t}};}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00090}00090\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00091}00091\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00092}00092\ \textcolor{comment}{/**}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00093}00093\ \textcolor{comment}{\ \ *\ @brief\ Инициализация\ эволюционного\ оптимизатора.}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00094}00094\ \textcolor{comment}{\ \ *\ @param\ opt\ \ \ \ \ \ \ \ \ \ Указатель\ на\ структуру\ оптимизатора}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00095}00095\ \textcolor{comment}{\ \ *\ @param\ n\_params\ \ \ \ \ Количество\ параметров\ в\ одном\ кандидате}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00096}00096\ \textcolor{comment}{\ \ *\ @param\ n\_cand\ \ \ \ \ \ \ Количество\ кандидатов}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00097}00097\ \textcolor{comment}{\ \ *\ @param\ n\_best\ \ \ \ \ \ \ Количество\ лучших,\ усредняемых}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00098}00098\ \textcolor{comment}{\ \ *\ @param\ iq\_mutation\ \ Амплитуда\ мутации\ в\ Q16.16}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00099}00099\ \textcolor{comment}{\ \ *\ @param\ start\_params\ Начальные\ параметры\ (Q16.16)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00100}00100\ \textcolor{comment}{\ \ */}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00101}\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gac21587fe68fe3635525358ac3f4059d9}{00101}}\ \_\_STATIC\_INLINE\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gac21587fe68fe3635525358ac3f4059d9}{EvolveOptimizer\_Init}}(\mbox{\hyperlink{struct_evolve_optimizer__t}{EvolveOptimizer\_t}}*\ opt,}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00102}00102\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint16\_t\ n\_params,}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00103}00103\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint16\_t\ n\_cand,}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00104}00104\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint16\_t\ n\_best,}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00105}00105\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint16\_t\ iq\_mutation,}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00106}00106\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ int32\_t*\ start\_params)}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00107}00107\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00108}00108\ \ \ \textcolor{keywordflow}{if}(\mbox{\hyperlink{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_ga27b363f333cacdccc15f5174e096b5b3}{check\_null\_ptr\_2}}(opt,\ start\_params))}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00109}00109\ \ \ \ \ \textcolor{keywordflow}{return};}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00110}00110\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00111}00111\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a1c270fce82e0c97e6c88fd0971c1eed8}{n\_params}}\ \ \ \ \ =\ n\_params;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00112}00112\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{n\_cand}}\ \ \ \ \ \ \ =\ n\_cand;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00113}00113\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a950cd70cb6bff33b78ad35ee58c729a6}{n\_best}}\ \ \ \ \ \ \ =\ n\_best;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00114}00114\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a5391277564b54e2271856a2466033df5}{iq\_mutation}}\ \ =\ iq\_mutation;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00115}00115\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00116}00116\ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_cand;\ i++)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00117}00117\ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ j\ =\ 0;\ j\ <\ n\_params;\ j++)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00118}00118\ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[i][j]\ =\ start\_params[j];}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00119}00119\ \ \ \ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00120}00120\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[i]\ =\ 0;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00121}00121\ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00122}00122\ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00123}00123\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00124}00124\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00125}00125\ \textcolor{comment}{/**}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00126}00126\ \textcolor{comment}{\ \ *\ @brief\ Один\ шаг\ эволюционного\ оптимизатора.}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00127}00127\ \textcolor{comment}{\ \ *\ @param\ opt\ \ \ \ Указатель\ на\ структуру\ оптимизатора}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00128}00128\ \textcolor{comment}{\ \ *\ @param\ params\ Массив\ параметров,\ которые\ будут\ обновлены\ (на\ выходе\ —\ новые\ параметры)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00129}00129\ \textcolor{comment}{\ \ *\ @param\ loss\ \ \ Loss\ текущего\ кандидата\ (Q16.16)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00130}00130\ \textcolor{comment}{\ \ *\ @details}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00131}00131\ \textcolor{comment}{\ \ *\ Сохраняет\ loss\ текущего\ кандидата\ и\ формирует\ параметры\ следующего\ кандидата.}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00132}00132\ \textcolor{comment}{\ \ *\ Если\ накоплено\ n\_cand\ кандидатов,\ генерируется\ новое\ поколение.}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00133}00133\ \textcolor{comment}{\ \ *\ Новое\ поколение\ формируется\ случайным\ выбором\ из\ n\_best\ лучших\ с\ добавлением\ мутации.}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00134}00134\ \textcolor{comment}{\ \ *}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00135}00135\ \textcolor{comment}{\ \ *\ На\ выходе\ params\ содержит\ параметры\ следующего\ кандидата\ для\ измерений.}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00136}00136\ \textcolor{comment}{\ \ */}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00137}\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga1ba2fa963c9ae12625be1b7c20718563}{00137}}\ \_\_STATIC\_INLINE\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga1ba2fa963c9ae12625be1b7c20718563}{EvolveOptimizer\_Step}}(\mbox{\hyperlink{struct_evolve_optimizer__t}{EvolveOptimizer\_t}}*\ opt,}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00138}00138\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ int32\_t*\ params,}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00139}00139\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ int32\_t\ \ \ loss)}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00140}00140\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00141}00141\ \ \ \textcolor{keywordflow}{if}(\mbox{\hyperlink{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_ga27b363f333cacdccc15f5174e096b5b3}{check\_null\_ptr\_2}}(opt,\ params))}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00142}00142\ \ \ \ \ \textcolor{keywordflow}{return};}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00143}00143\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00144}00144\ \ \ uint16\_t\ n\_params\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a1c270fce82e0c97e6c88fd0971c1eed8}{n\_params}};\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00145}00145\ \ \ uint16\_t\ n\_cand\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{n\_cand}};\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00146}00146\ \ \ uint16\_t\ n\_best\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a950cd70cb6bff33b78ad35ee58c729a6}{n\_best}};\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00147}00147\ \ \ uint16\_t\ mut\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a5391277564b54e2271856a2466033df5}{iq\_mutation}};}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00148}00148\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00149}00149\ \ \ \textcolor{comment}{//\ 1.\ Сохраняем\ loss\ текущего\ кандидата}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00150}00150\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}}]\ =\ loss;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00151}00151\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00152}00152\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}}++;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00153}00153\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00154}00154\ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}}\ >=\ n\_cand)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00155}00155\ \ \ \ \ \textcolor{comment}{//\ 2.\ Сортируем\ текущее\ поколение\ по\ loss}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00156}00156\ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_cand\ -\/\ 1;\ i++)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00157}00157\ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ j\ =\ i\ +\ 1;\ j\ <\ n\_cand;\ j++)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00158}00158\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[j]\ <\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[i])\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00159}00159\ \ \ \ \ \ \ \ \ \ \ int32\_t\ tmp\_loss\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[i];}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00160}00160\ \ \ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[i]\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[j];}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00161}00161\ \ \ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[j]\ =\ tmp\_loss;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00162}00162\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00163}00163\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ k\ =\ 0;\ k\ <\ n\_params;\ k++)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00164}00164\ \ \ \ \ \ \ \ \ \ \ \ \ int32\_t\ tmp\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[i][k];}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00165}00165\ \ \ \ \ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[i][k]\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[j][k];}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00166}00166\ \ \ \ \ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[j][k]\ =\ tmp;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00167}00167\ \ \ \ \ \ \ \ \ \ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00168}00168\ \ \ \ \ \ \ \ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00169}00169\ \ \ \ \ \ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00170}00170\ \ \ \ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00171}00171\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00172}00172\ \ \ \ \ \textcolor{comment}{//\ 3.\ Генерируем\ новое\ поколение:\ каждый\ кандидат\ берется\ случайно\ из\ лучших\ с\ мутацией}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00173}00173\ \ \ \ \ uint16\_t\ n\_elite\ =\ 2;\ \textcolor{comment}{//\ количество\ элитных\ кандидатов,\ которые\ сохраняем\ без\ изменений}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00174}00174\ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ c\ =\ 0;\ c\ <\ n\_cand;\ c++)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00175}00175\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (c\ <\ n\_elite)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00176}00176\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Копируем\ лучших\ кандидатов\ напрямую\ без\ мутации}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00177}00177\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_params;\ i++)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00178}00178\ \ \ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[c][i]\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[c][i];\ \textcolor{comment}{//\ просто\ сохраняем\ параметры}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00179}00179\ \ \ \ \ \ \ \ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00180}00180\ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[c]\ =\ 0;\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00181}00181\ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00182}00182\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Остальные\ кандидаты\ формируются\ с\ кроссовером\ и\ мутацией}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00183}00183\ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_params;\ i++)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00184}00184\ \ \ \ \ \ \ \ \ int32\_t\ noise\ =\ (rand()\ \%\ (2\ *\ mut))\ -\/\ mut;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00185}00185\ \ \ \ \ \ \ \ \ \ \ uint16\_t\ parent\ =\ rand()\ \%\ n\_best;\ \textcolor{comment}{//\ каждый\ параметр\ из\ случайного\ лучшего}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00186}00186\ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[c][i]\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[parent][i]\ +\ noise;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00187}00187\ \ \ \ \ \ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00188}00188\ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[c]\ =\ 0;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00189}00189\ \ \ \ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00190}00190\ \ \ \ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00191}00191\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}}\ =\ 0;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00192}00192\ \ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00063}00063\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{mylibs__defs_8h}{mylibs\_defs.h}}"{}}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00064}00064\ \textcolor{preprocessor}{\#include\ <stdint.h>}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00065}00065\ \textcolor{preprocessor}{\#include\ <stdlib.h>}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00066}00066\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00067}00067\ \textcolor{preprocessor}{\#ifdef\ ENABLE\_EVOLVE\_OPTIMIZATION}\textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00068}00068\ \textcolor{comment}{/**}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00069}00069\ \textcolor{comment}{\ \ *\ @brief\ Линейное\ масштабирование\ x\ из\ диапазона\ [min\_val,\ max\_val]\ в\ Q16.16\ [0,\ 65536)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00070}00070\ \textcolor{comment}{\ \ */}\textcolor{preprocessor}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00071}\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gaff223481fcffea77394a331afde29fdc}{00071}}\ \textcolor{preprocessor}{\#define\ PARAM\_SCALE\_Q16(x,\ min\_val,\ max\_val)\ \(\backslash\)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00072}00072\ \textcolor{preprocessor}{((int32\_t)((((float)(x)\ -\/\ (float)(min\_val))\ /\ ((float)(max\_val)\ -\/\ (float)(min\_val)))\ *\ 65536.0f))}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00073}00073\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00074}00074\ \textcolor{comment}{/**}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00075}00075\ \textcolor{comment}{\ \ *\ @brief\ Обратное\ линейное\ масштабирование\ Q16.16\ значения\ в\ диапазон\ [min\_val,\ max\_val]}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00076}00076\ \textcolor{comment}{\ */}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00077}\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga71a0c240c667e976d9caef391ab767ba}{00077}}\ \textcolor{preprocessor}{\#define\ PARAM\_UNSCALE\_Q16(q16\_val,\ min\_val,\ max\_val)\ \(\backslash\)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00078}00078\ \textcolor{preprocessor}{(((float)(q16\_val)\ /\ 65536.0f)\ *\ ((float)(max\_val)\ -\/\ (float)(min\_val))\ +\ (float)(min\_val))}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00079}00079\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00080}00080\ \textcolor{preprocessor}{\#ifndef\ local\_time}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00081}\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga9c853b02c22f26023c34d1d404b6d653}{00081}}\ \textcolor{preprocessor}{\#define\ local\_time()\ \ HAL\_GetTick()\ }\textcolor{comment}{///<\ Локальное\ время}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00082}00082\ \textcolor{preprocessor}{\#endif}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00083}00083\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00084}00084\ \textcolor{comment}{/**}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00085}00085\ \textcolor{comment}{\ \ *\ @brief\ Структура\ эволюционного\ оптимизатора}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00086}00086\ \textcolor{comment}{\ \ */}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00087}\mbox{\hyperlink{struct_evolve_optimizer__t}{00087}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00088}\mbox{\hyperlink{struct_evolve_optimizer__t_a1c270fce82e0c97e6c88fd0971c1eed8}{00088}}\ \ \ uint16\_t\ \mbox{\hyperlink{struct_evolve_optimizer__t_a1c270fce82e0c97e6c88fd0971c1eed8}{n\_params}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Количество\ параметров}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00089}\mbox{\hyperlink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{00089}}\ \ \ uint16\_t\ \mbox{\hyperlink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{n\_cand}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Количество\ кандидатов}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00090}\mbox{\hyperlink{struct_evolve_optimizer__t_a950cd70cb6bff33b78ad35ee58c729a6}{00090}}\ \ \ uint16\_t\ \mbox{\hyperlink{struct_evolve_optimizer__t_a950cd70cb6bff33b78ad35ee58c729a6}{n\_best}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Количество\ лучших,\ усредняемых}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00091}\mbox{\hyperlink{struct_evolve_optimizer__t_a5391277564b54e2271856a2466033df5}{00091}}\ \ \ uint16\_t\ \mbox{\hyperlink{struct_evolve_optimizer__t_a5391277564b54e2271856a2466033df5}{iq\_mutation}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Амплитуда\ мутации\ в\ Q16.16}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00092}\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{00092}}\ \ \ uint16\_t\ \mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Индекс\ кандидата\ для\ обработки}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00093}\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{00093}}\ \ \ int32\_t\ \mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[\mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga7c1396e5c95c766afccdb45cbfcf5971}{EVOLVE\_MAX\_CANDIDATES}}];\ \ \ \ \textcolor{comment}{///<\ Loss\ для\ каждого\ кандидата}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00094}\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{00094}}\ \ \ int32\_t\ \mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[\mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga7c1396e5c95c766afccdb45cbfcf5971}{EVOLVE\_MAX\_CANDIDATES}}][\mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga80d6162495fc3776d8902610657d4fee}{EVOLVE\_MAX\_PARAMS}}];\ \ \ \ \textcolor{comment}{///<\ Параметры\ кандидатов}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00095}\mbox{\hyperlink{struct_evolve_optimizer__t_a74b81df1c298c99162310f3f7d91735a}{00095}}\ \ \ uint16\_t\ \mbox{\hyperlink{struct_evolve_optimizer__t_a74b81df1c298c99162310f3f7d91735a}{sorted\_idx}}[\mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga7c1396e5c95c766afccdb45cbfcf5971}{EVOLVE\_MAX\_CANDIDATES}}];\ \textcolor{comment}{///<\ Индексы\ отсортированных\ кандидатов}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00096}00096\ \}\ \mbox{\hyperlink{struct_evolve_optimizer__t}{EvolveOptimizer\_t}};}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00097}00097\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00098}00098\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00099}00099\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00100}00100\ \textcolor{comment}{/**\ }}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00101}00101\ \textcolor{comment}{\ *\ @cond\ EVOLVE\_INTERNAL}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00102}00102\ \textcolor{comment}{\ */}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00103}00103\ \textcolor{preprocessor}{\#define\ Q16\_MUL(a,b)\ ((int32\_t)(((int64\_t)(a)\ *\ (int64\_t)(b))\ >>\ 16))}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00104}00104\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00105}00105\ \textcolor{comment}{//\ Вспомогательный\ указатель\ для\ сортировки}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00106}00106\ \textcolor{keyword}{static}\ \mbox{\hyperlink{struct_evolve_optimizer__t}{EvolveOptimizer\_t}}\ *g\_sort\_opt;\ \textcolor{comment}{//\ глобальный\ указатель\ на\ текущий\ оптимизатор}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00107}00107\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00108}00108\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ cmp\_idx(\textcolor{keyword}{const}\ \textcolor{keywordtype}{void}\ *a,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}\ *b)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00109}00109\ \ \ \textcolor{keywordflow}{if}\ (g\_sort\_opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[*(\textcolor{keyword}{const}\ uint16\_t*)a]\ <\ g\_sort\_opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[*(\textcolor{keyword}{const}\ uint16\_t*)b])\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00110}00110\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00111}00111\ \ \ \textcolor{keywordflow}{if}\ (g\_sort\_opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[*(\textcolor{keyword}{const}\ uint16\_t*)a]\ >\ g\_sort\_opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[*(\textcolor{keyword}{const}\ uint16\_t*)b])\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00112}00112\ \ \ \ \ \textcolor{keywordflow}{return}\ 1;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00113}00113\ \ \ \textcolor{keywordflow}{return}\ 0;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00114}00114\ \}\textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00115}00115\ \textcolor{comment}{/**\ @endcond\ */}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00116}00116\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00117}00117\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00118}00118\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00119}00119\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00120}00120\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00121}00121\ \textcolor{comment}{/**}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00122}00122\ \textcolor{comment}{\ \ *\ @brief\ Инициализация\ эволюционного\ оптимизатора.}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00123}00123\ \textcolor{comment}{\ \ *\ @param\ opt\ \ \ \ \ \ \ \ \ \ Указатель\ на\ структуру\ оптимизатора}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00124}00124\ \textcolor{comment}{\ \ *\ @param\ n\_params\ \ \ \ \ Количество\ параметров\ в\ одном\ кандидате}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00125}00125\ \textcolor{comment}{\ \ *\ @param\ n\_cand\ \ \ \ \ \ \ Количество\ кандидатов}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00126}00126\ \textcolor{comment}{\ \ *\ @param\ n\_best\ \ \ \ \ \ \ Количество\ лучших,\ усредняемых}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00127}00127\ \textcolor{comment}{\ \ *\ @param\ iq\_mutation\ \ Амплитуда\ мутации\ в\ Q16.16}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00128}00128\ \textcolor{comment}{\ \ *\ @param\ start\_params\ Начальные\ параметры\ (Q16.16)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00129}00129\ \textcolor{comment}{\ \ *\ @return\ 0\ \ \ —\ если\ окей,\ }}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00130}00130\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ -\/1\ \ —\ если\ ошибка}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00131}00131\ \textcolor{comment}{\ \ */}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00132}\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gadaf3a90724197e1737d5c70c7bcc75e1}{00132}}\ \_\_STATIC\_INLINE\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gadaf3a90724197e1737d5c70c7bcc75e1}{EvolveOptimizer\_Init}}(\mbox{\hyperlink{struct_evolve_optimizer__t}{EvolveOptimizer\_t}}*\ opt,}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00133}00133\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint16\_t\ n\_params,}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00134}00134\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint16\_t\ n\_cand,}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00135}00135\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint16\_t\ n\_best,}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00136}00136\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint16\_t\ iq\_mutation,}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00137}00137\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ int32\_t*\ start\_params)}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00138}00138\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00139}00139\ \ \ \textcolor{keywordflow}{if}((opt\ =\ NULL)\ ||\ (start\_params\ ==\ NULL))}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00140}00140\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00141}00141\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00142}00142\ \ \ \textcolor{keywordflow}{if}(n\_params\ >\ \mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga80d6162495fc3776d8902610657d4fee}{EVOLVE\_MAX\_PARAMS}})}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00143}00143\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00144}00144\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a1c270fce82e0c97e6c88fd0971c1eed8}{n\_params}}\ \ \ \ \ =\ n\_params;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00145}00145\ \ \ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00146}00146\ \ \ \textcolor{keywordflow}{if}(n\_cand\ >\ \mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga7c1396e5c95c766afccdb45cbfcf5971}{EVOLVE\_MAX\_CANDIDATES}})}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00147}00147\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00148}00148\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{n\_cand}}\ \ \ \ \ \ \ =\ n\_cand;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00149}00149\ \ \ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00150}00150\ \ \ \textcolor{keywordflow}{if}(n\_best\ >\ \mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga7c1396e5c95c766afccdb45cbfcf5971}{EVOLVE\_MAX\_CANDIDATES}}/2)}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00151}00151\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00152}00152\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a950cd70cb6bff33b78ad35ee58c729a6}{n\_best}}\ \ \ \ \ \ \ =\ n\_best;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00153}00153\ \ \ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00154}00154\ \ \ \textcolor{keywordflow}{if}(iq\_mutation\ >\ 32768)}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00155}00155\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00156}00156\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a5391277564b54e2271856a2466033df5}{iq\_mutation}}\ \ =\ iq\_mutation;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00157}00157\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00158}00158\ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_cand;\ i++)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00159}00159\ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ j\ =\ 0;\ j\ <\ n\_params;\ j++)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00160}00160\ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[i][j]\ =\ start\_params[j];}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00161}00161\ \ \ \ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00162}00162\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[i]\ =\ 0;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00163}00163\ \ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00164}00164\ \ \ uint32\_t\ seed\ =\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga9c853b02c22f26023c34d1d404b6d653}{local\_time}}()\ +\ (ADC1-\/>DR\ \&\ 0xFF);}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00165}00165\ \ \ srand(seed);}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00166}00166\ \ \ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00167}00167\ \ \ \textcolor{keywordflow}{return}\ 0;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00168}00168\ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00169}00169\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00170}00170\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00171}00171\ \textcolor{comment}{/**}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00172}00172\ \textcolor{comment}{\ \ *\ @brief\ Один\ шаг\ эволюционного\ оптимизатора.}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00173}00173\ \textcolor{comment}{\ \ *\ @param\ opt\ \ \ \ Указатель\ на\ структуру\ оптимизатора}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00174}00174\ \textcolor{comment}{\ \ *\ @param\ params\ Массив\ параметров,\ которые\ будут\ обновлены\ (на\ выходе\ —\ новые\ параметры)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00175}00175\ \textcolor{comment}{\ \ *\ @param\ loss\ \ \ Loss\ текущего\ кандидата\ (Q16.16)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00176}00176\ \textcolor{comment}{\ \ *\ @return\ 0\ \ \ —\ если\ окей,\ }}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00177}00177\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ -\/1\ \ —\ если\ ошибка}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00178}00178\ \textcolor{comment}{\ \ *\ @details}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00179}00179\ \textcolor{comment}{\ \ *\ Сохраняет\ loss\ текущего\ кандидата\ и\ формирует\ параметры\ следующего\ кандидата.}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00180}00180\ \textcolor{comment}{\ \ *\ Если\ накоплено\ n\_cand\ кандидатов,\ генерируется\ новое\ поколение.}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00181}00181\ \textcolor{comment}{\ \ *\ Новое\ поколение\ формируется\ случайным\ выбором\ из\ n\_best\ лучших\ с\ добавлением\ мутации.}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00182}00182\ \textcolor{comment}{\ \ *}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00183}00183\ \textcolor{comment}{\ \ *\ На\ выходе\ params\ содержит\ параметры\ следующего\ кандидата\ для\ измерений.}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00184}00184\ \textcolor{comment}{\ \ *\ @note\ Функция\ использует\ глобальную\ внутреннюю\ переменную\ для\ сортировки.}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00185}00185\ \textcolor{comment}{\ \ *\ Надо\ убедится\ что\ только\ один\ экземпляр\ функции\ запущен\ в\ момент\ времени}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00186}00186\ \textcolor{comment}{\ \ */}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00187}\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga75acd71c85d4e60dc0eb31bc5780086a}{00187}}\ \_\_STATIC\_INLINE\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga75acd71c85d4e60dc0eb31bc5780086a}{EvolveOptimizer\_Step}}(\mbox{\hyperlink{struct_evolve_optimizer__t}{EvolveOptimizer\_t}}*\ opt,}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00188}00188\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ int32\_t*\ params,}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00189}00189\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ int32\_t\ \ \ loss)}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00190}00190\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00191}00191\ \ \ \textcolor{keywordflow}{if}((opt\ =\ NULL)\ ||\ (params\ ==\ NULL))}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00192}00192\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00193}00193\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00194}00194\ \ \ \textcolor{comment}{//\ 4.\ Возвращаем\ параметры\ следующего\ кандидата}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00195}00195\ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a1c270fce82e0c97e6c88fd0971c1eed8}{n\_params}};\ i++)}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00196}00196\ \ \ \ \ params[i]\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}}][i];}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00197}00197\ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00198}00198\ \textcolor{preprocessor}{\#else\ }\textcolor{comment}{//\ ENABLE\_EVOLVE\_OPTIMIZATION}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00199}00199\ \textcolor{comment}{//заглушки}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00200}00200\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00201}00201\ \ \ uint16\_t\ n\_params;\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00202}00202\ \ \ uint16\_t\ n\_cand;\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00203}00203\ \ \ uint16\_t\ n\_best;\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00204}00204\ \ \ uint16\_t\ iq\_mutation;\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00205}00205\ \ \ int32\_t\ loss[0];\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00206}00206\ \ \ int32\_t\ candidates[0][0];\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00207}00207\ \}\ \mbox{\hyperlink{struct_evolve_optimizer__t}{EvolveOptimizer\_t}};}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00208}00208\ \textcolor{preprocessor}{\#define\ EvolveOptimizer\_Init(opt,\ n\_params,\ n\_cand,\ n\_best,\ iq\_mutation,\ start\_params)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00209}00209\ \textcolor{preprocessor}{\#define\ EvolveOptimizer\_Step(opt,\ params,\ LossFunc)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00210}00210\ \textcolor{preprocessor}{\#define\ PARAM\_SCALE\_Q16(x,\ min\_val,\ max\_val)\ \ \ \ \ \ \ \ \ \ \ \ (x)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00211}00211\ \textcolor{preprocessor}{\#define\ PARAM\_UNSCALE\_Q16(q16\_val,\ min\_val,\ max\_val)\ \ \ \ (q16\_val)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (q16\_val)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00212}00212\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ ENABLE\_EVOLVE\_OPTIMIZATION}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00194}00194\ \ \ uint16\_t\ n\_params\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a1c270fce82e0c97e6c88fd0971c1eed8}{n\_params}};\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00195}00195\ \ \ \textcolor{keywordflow}{if}(n\_params\ >\ \mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga80d6162495fc3776d8902610657d4fee}{EVOLVE\_MAX\_PARAMS}})}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00196}00196\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00197}00197\ \ \ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00198}00198\ \ \ uint16\_t\ n\_cand\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{n\_cand}};\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00199}00199\ \ \ \textcolor{keywordflow}{if}(n\_cand\ >\ \mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga7c1396e5c95c766afccdb45cbfcf5971}{EVOLVE\_MAX\_CANDIDATES}})}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00200}00200\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00201}00201\ \ \ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00202}00202\ \ \ uint16\_t\ n\_best\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a950cd70cb6bff33b78ad35ee58c729a6}{n\_best}};\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00203}00203\ \ \ \textcolor{keywordflow}{if}(n\_best\ >\ \mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga7c1396e5c95c766afccdb45cbfcf5971}{EVOLVE\_MAX\_CANDIDATES}}/2)}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00204}00204\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00205}00205\ \ \ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00206}00206\ \ \ uint16\_t\ mut\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a5391277564b54e2271856a2466033df5}{iq\_mutation}};}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00207}00207\ \ \ \textcolor{keywordflow}{if}(mut\ >\ 32768)}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00208}00208\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00209}00209\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00210}00210\ \ \ \textcolor{comment}{//\ 1.\ Сохраняем\ loss\ текущего\ кандидата}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00211}00211\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}}]\ =\ loss;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00212}00212\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}}++;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00213}00213\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00214}00214\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ \_\_EVOLVE\_OPTIMIZER\_H\_}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00215}00215\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00216}00216\ \textcolor{comment}{/**\ EVOLVE\_OPTIMIZER}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00217}00217\ \textcolor{comment}{\ \ *\ @\}}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00218}00218\ \textcolor{comment}{\ \ */}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00214}00214\ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}}\ >=\ n\_cand)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00215}00215\ \ \ \ \ \textcolor{comment}{//\ 2.\ Сортируем\ текущее\ поколение\ по\ loss}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00216}00216\ \ \ \ \ \textcolor{keywordflow}{for}(uint16\_t\ i\ =\ 0;\ i\ <\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{n\_cand}};\ i++)}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00217}00217\ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a74b81df1c298c99162310f3f7d91735a}{sorted\_idx}}[i]\ =\ i;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00218}00218\ \ \ \ \ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00219}00219\ \ \ \ \ g\_sort\_opt\ =\ opt;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00220}00220\ \ \ \ \ qsort(opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a74b81df1c298c99162310f3f7d91735a}{sorted\_idx}},\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{n\_cand}},\ \textcolor{keyword}{sizeof}(uint16\_t),\ cmp\_idx);}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00221}00221\ \ \ \ \ g\_sort\_opt\ =\ NULL;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00222}00222\ \textcolor{comment}{//\ \ \ \ for\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_cand\ -\/\ 1;\ i++)\ \{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00223}00223\ \textcolor{comment}{//\ \ \ \ \ \ for\ (uint16\_t\ j\ =\ i\ +\ 1;\ j\ <\ n\_cand;\ j++)\ \{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00224}00224\ \textcolor{comment}{//\ \ \ \ \ \ \ \ if\ (opt-\/>loss[j]\ <\ opt-\/>loss[i])\ \{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00225}00225\ \textcolor{comment}{//\ \ \ \ \ \ \ \ \ \ int32\_t\ tmp\_loss\ =\ opt-\/>loss[i];}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00226}00226\ \textcolor{comment}{//\ \ \ \ \ \ \ \ \ \ opt-\/>loss[i]\ =\ opt-\/>loss[j];}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00227}00227\ \textcolor{comment}{//\ \ \ \ \ \ \ \ \ \ opt-\/>loss[j]\ =\ tmp\_loss;}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00228}00228\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00229}00229\ \textcolor{comment}{//\ \ \ \ \ \ \ \ \ \ for\ (uint16\_t\ k\ =\ 0;\ k\ <\ n\_params;\ k++)\ \{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00230}00230\ \textcolor{comment}{//\ \ \ \ \ \ \ \ \ \ \ \ int32\_t\ tmp\ =\ opt-\/>candidates[i][k];}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00231}00231\ \textcolor{comment}{//\ \ \ \ \ \ \ \ \ \ \ \ opt-\/>candidates[i][k]\ =\ opt-\/>candidates[j][k];}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00232}00232\ \textcolor{comment}{//\ \ \ \ \ \ \ \ \ \ \ \ opt-\/>candidates[j][k]\ =\ tmp;}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00233}00233\ \textcolor{comment}{//\ \ \ \ \ \ \ \ \ \ \}}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00234}00234\ \textcolor{comment}{//\ \ \ \ \ \ \ \ \}}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00235}00235\ \textcolor{comment}{//\ \ \ \ \ \ \}}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00236}00236\ \textcolor{comment}{//\ \ \ \ \}}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00237}00237\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00238}00238\ \ \ \ \ \textcolor{comment}{//\ 3.\ Генерируем\ новое\ поколение:\ каждый\ кандидат\ берется\ случайно\ из\ лучших\ с\ мутацией}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00239}00239\ \ \ \ \ uint16\_t\ n\_elite\ =\ 2;\ \textcolor{comment}{//\ количество\ элитных\ кандидатов,\ которые\ сохраняем\ без\ изменений}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00240}00240\ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ c\ =\ 0;\ c\ <\ n\_cand;\ c++)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00241}00241\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (c\ <\ n\_elite)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00242}00242\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Копируем\ лучших\ кандидатов\ напрямую\ без\ мутации}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00243}00243\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_params;\ i++)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00244}00244\ \ \ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[c][i]\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a74b81df1c298c99162310f3f7d91735a}{sorted\_idx}}[c]][i];\ \textcolor{comment}{//\ просто\ сохраняем\ параметры}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00245}00245\ \ \ \ \ \ \ \ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00246}00246\ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[c]\ =\ 0;\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00247}00247\ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00248}00248\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Остальные\ кандидаты\ формируются\ с\ кроссовером\ и\ мутацией}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00249}00249\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_params;\ i++)\ \{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00250}00250\ \ \ \ \ \ \ \ \ \ \ int32\_t\ noise\ =\ (rand()\ \%\ (2\ *\ mut))\ -\/\ mut;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00251}00251\ \ \ \ \ \ \ \ \ \ \ uint16\_t\ parent\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a74b81df1c298c99162310f3f7d91735a}{sorted\_idx}}[rand()\ \%\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a950cd70cb6bff33b78ad35ee58c729a6}{n\_best}}];\ \textcolor{comment}{//\ каждый\ параметр\ из\ случайного\ лучшего}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00252}00252\ \ \ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[c][i]\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[parent][i]\ +\ noise;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00253}00253\ \ \ \ \ \ \ \ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00254}00254\ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac723b265a3d43b754489f14310314f0d}{loss}}[c]\ =\ 0;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00255}00255\ \ \ \ \ \ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00256}00256\ \ \ \ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00257}00257\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}}\ =\ 0;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00258}00258\ \ \ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00259}00259\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00260}00260\ \ \ \textcolor{comment}{//\ 4.\ Возвращаем\ параметры\ следующего\ кандидата}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00261}00261\ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a1c270fce82e0c97e6c88fd0971c1eed8}{n\_params}};\ i++)}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00262}00262\ \ \ \ \ params[i]\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a61bd0c8ae322a79936ba1f2ae22e0e0d}{candidates}}[opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}}][i];}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00263}00263\ \ \ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00264}00264\ \ \ \textcolor{keywordflow}{return}\ 0;}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00265}00265\ \}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00266}00266\ \textcolor{preprocessor}{\#else\ }\textcolor{comment}{//\ ENABLE\_EVOLVE\_OPTIMIZATION}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00267}00267\ \textcolor{comment}{//заглушки}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00268}00268\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00269}00269\ \ \ uint16\_t\ n\_params;\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00270}00270\ \ \ uint16\_t\ n\_cand;\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00271}00271\ \ \ uint16\_t\ n\_best;\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00272}00272\ \ \ uint16\_t\ iq\_mutation;\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00273}00273\ \ \ int32\_t\ loss[0];\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00274}00274\ \ \ int32\_t\ candidates[0][0];\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00275}00275\ \}\ \mbox{\hyperlink{struct_evolve_optimizer__t}{EvolveOptimizer\_t}};}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00276}00276\ \textcolor{preprocessor}{\#define\ EvolveOptimizer\_Init(opt,\ n\_params,\ n\_cand,\ n\_best,\ iq\_mutation,\ start\_params)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00277}00277\ \textcolor{preprocessor}{\#define\ EvolveOptimizer\_Step(opt,\ params,\ LossFunc)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00278}00278\ \textcolor{preprocessor}{\#define\ PARAM\_SCALE\_Q16(x,\ min\_val,\ max\_val)\ \ \ \ \ \ \ \ \ \ \ \ (x)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00279}00279\ \textcolor{preprocessor}{\#define\ PARAM\_UNSCALE\_Q16(q16\_val,\ min\_val,\ max\_val)\ \ \ \ (q16\_val)}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00280}00280\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ ENABLE\_EVOLVE\_OPTIMIZATION}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00281}00281\ }
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00282}00282\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ \_\_EVOLVE\_OPTIMIZER\_H\_}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00283}00283\ \textcolor{comment}{}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00284}00284\ \textcolor{comment}{/**\ EVOLVE\_OPTIMIZER}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00285}00285\ \textcolor{comment}{\ \ *\ @\}}}
|
||||
\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00286}00286\ \textcolor{comment}{\ \ */}}
|
||||
|
||||
\end{DoxyCode}
|
||||
|
||||
@ -23,13 +23,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}
|
||||
\doxysubsubsubsubsection*{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}
|
||||
|
||||
|
||||
@ -44,7 +46,12 @@ struct \mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}}
|
||||
\item Несколько независимых оптимизаторов в одной программе
|
||||
\end{DoxyItemize}
|
||||
|
||||
Если библиотека отключена \doxylink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga2cac097081444a7a9b040f4b11550e47}{ENABLE\+\_\+\+EVOLVE\+\_\+\+OPTIMIZATION}, то вставляются заглушки, никак не влияющие на параметры и остальную программу
|
||||
Параметры для конфигурации\+:
|
||||
\begin{DoxyItemize}
|
||||
\item \doxylink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga2cac097081444a7a9b040f4b11550e47}{ENABLE\+\_\+\+EVOLVE\+\_\+\+OPTIMIZATION} -\/ Включить оптимизацию параметров Если библиотека отключена \doxylink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga2cac097081444a7a9b040f4b11550e47}{ENABLE\+\_\+\+EVOLVE\+\_\+\+OPTIMIZATION}, то вставляются заглушки, никак не влияющие на параметры и остальную программу
|
||||
\item \doxylink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga80d6162495fc3776d8902610657d4fee}{EVOLVE\+\_\+\+MAX\+\_\+\+PARAMS} -\/ Максимальное количество параметров
|
||||
\item \doxylink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga7c1396e5c95c766afccdb45cbfcf5971}{EVOLVE\+\_\+\+MAX\+\_\+\+CANDIDATES} -\/ Максимальное количество кандидатов для обучения
|
||||
\end{DoxyItemize}
|
||||
|
||||
\begin{DoxyParagraph}{Пример использования\+:}
|
||||
|
||||
@ -53,7 +60,7 @@ struct \mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}}
|
||||
\DoxyCodeLine{\textcolor{preprocessor}{\#define\ N\_PARAMS\ \ \ \ \ \ \ \ 4}}
|
||||
\DoxyCodeLine{\textcolor{preprocessor}{\#define\ N\_CANDIDATES\ \ \ \ 100}}
|
||||
\DoxyCodeLine{\textcolor{preprocessor}{\#define\ N\_BEST\ \ \ \ \ \ \ \ \ \ 10}}
|
||||
\DoxyCodeLine{\textcolor{preprocessor}{\#define\ IQ\_MUTATION\ \ \ \ \ 655}}
|
||||
\DoxyCodeLine{\textcolor{preprocessor}{\#define\ IQ\_MUTATION\ \ \ \ \ (PARAM\_SCALE\_Q16(0.1,\ 0,\ 1))}}
|
||||
\DoxyCodeLine{int32\_t\ params[N\_PARAMS];}
|
||||
\DoxyCodeLine{\mbox{\hyperlink{struct_evolve_optimizer__t}{EvolveOptimizer\_t}}\ optimizer;}
|
||||
\DoxyCodeLine{}
|
||||
@ -68,11 +75,11 @@ struct \mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}}
|
||||
\DoxyCodeLine{params[3]\ =\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gaff223481fcffea77394a331afde29fdc}{PARAM\_SCALE\_Q16}}(param\_i16,\ \ 500,\ \ \ \ 5000);}
|
||||
\DoxyCodeLine{}
|
||||
\DoxyCodeLine{\textcolor{comment}{//\ Инициалиазция}}
|
||||
\DoxyCodeLine{\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gac21587fe68fe3635525358ac3f4059d9}{EvolveOptimizer\_Init}}(\&optimizer,\ N\_PARAMS,\ N\_CANDIDATES,\ N\_BEST,\ IQ\_MUTATION,\ params);}
|
||||
\DoxyCodeLine{\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gadaf3a90724197e1737d5c70c7bcc75e1}{EvolveOptimizer\_Init}}(\&optimizer,\ N\_PARAMS,\ N\_CANDIDATES,\ N\_BEST,\ IQ\_MUTATION,\ params);}
|
||||
\DoxyCodeLine{}
|
||||
\DoxyCodeLine{\textcolor{comment}{//\ Шаг\ эволюции}}
|
||||
\DoxyCodeLine{int32\_t\ loss\ =\ calc\_iq\_loss();\ \textcolor{comment}{//\ расчет\ эффективности\ параметров}}
|
||||
\DoxyCodeLine{\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga1ba2fa963c9ae12625be1b7c20718563}{EvolveOptimizer\_Step}}(\&optimizer,\ params,\ loss);}
|
||||
\DoxyCodeLine{\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga75acd71c85d4e60dc0eb31bc5780086a}{EvolveOptimizer\_Step}}(\&optimizer,\ params,\ loss);}
|
||||
\DoxyCodeLine{}
|
||||
\DoxyCodeLine{\textcolor{comment}{//\ Взятие\ следующих\ для\ эволюции\ параметров}}
|
||||
\DoxyCodeLine{param\_u16\ =\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga71a0c240c667e976d9caef391ab767ba}{PARAM\_UNSCALE\_Q16}}(params[0],\ \ 0,\ \ \ \ \ \ 1000);}
|
||||
@ -105,7 +112,7 @@ struct \mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}}
|
||||
|
||||
|
||||
|
||||
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00068}{68}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
|
||||
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00071}{71}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
|
||||
|
||||
\Hypertarget{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga71a0c240c667e976d9caef391ab767ba}\index{Evolve optimizer@{Evolve optimizer}!PARAM\_UNSCALE\_Q16@{PARAM\_UNSCALE\_Q16}}
|
||||
\index{PARAM\_UNSCALE\_Q16@{PARAM\_UNSCALE\_Q16}!Evolve optimizer@{Evolve optimizer}}
|
||||
@ -124,18 +131,37 @@ Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00068}{68}} of
|
||||
|
||||
|
||||
|
||||
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00074}{74}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
|
||||
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00077}{77}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
|
||||
|
||||
\Hypertarget{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga9c853b02c22f26023c34d1d404b6d653}\index{Evolve optimizer@{Evolve optimizer}!local\_time@{local\_time}}
|
||||
\index{local\_time@{local\_time}!Evolve optimizer@{Evolve optimizer}}
|
||||
\doxysubsubsubsubsection{\texorpdfstring{local\_time}{local\_time}}
|
||||
{\footnotesize\ttfamily \label{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga9c853b02c22f26023c34d1d404b6d653}
|
||||
\#define local\+\_\+time(\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})}
|
||||
|
||||
{\bfseries Value\+:}
|
||||
\begin{DoxyCode}{0}
|
||||
\DoxyCodeLine{HAL\_GetTick()}
|
||||
|
||||
\end{DoxyCode}
|
||||
|
||||
|
||||
Локальное время
|
||||
|
||||
|
||||
|
||||
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00081}{81}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
|
||||
|
||||
|
||||
|
||||
\label{doc-func-members}
|
||||
\Hypertarget{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_doc-func-members}
|
||||
\doxysubsubsubsection{Function Documentation}
|
||||
\Hypertarget{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gac21587fe68fe3635525358ac3f4059d9}\index{Evolve optimizer@{Evolve optimizer}!EvolveOptimizer\_Init@{EvolveOptimizer\_Init}}
|
||||
\Hypertarget{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gadaf3a90724197e1737d5c70c7bcc75e1}\index{Evolve optimizer@{Evolve optimizer}!EvolveOptimizer\_Init@{EvolveOptimizer\_Init}}
|
||||
\index{EvolveOptimizer\_Init@{EvolveOptimizer\_Init}!Evolve optimizer@{Evolve optimizer}}
|
||||
\doxysubsubsubsubsection{\texorpdfstring{EvolveOptimizer\_Init()}{EvolveOptimizer\_Init()}}
|
||||
{\footnotesize\ttfamily \label{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gac21587fe68fe3635525358ac3f4059d9}
|
||||
\+\_\+\+\_\+\+STATIC\+\_\+\+INLINE void Evolve\+Optimizer\+\_\+\+Init (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}} \texorpdfstring{$\ast$}{*}}]{opt}{, }\item[{uint16\+\_\+t}]{n\+\_\+params}{, }\item[{uint16\+\_\+t}]{n\+\_\+cand}{, }\item[{uint16\+\_\+t}]{n\+\_\+best}{, }\item[{uint16\+\_\+t}]{iq\+\_\+mutation}{, }\item[{int32\+\_\+t \texorpdfstring{$\ast$}{*}}]{start\+\_\+params}{}\end{DoxyParamCaption})}
|
||||
{\footnotesize\ttfamily \label{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gadaf3a90724197e1737d5c70c7bcc75e1}
|
||||
\+\_\+\+\_\+\+STATIC\+\_\+\+INLINE int Evolve\+Optimizer\+\_\+\+Init (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}} \texorpdfstring{$\ast$}{*}}]{opt}{, }\item[{uint16\+\_\+t}]{n\+\_\+params}{, }\item[{uint16\+\_\+t}]{n\+\_\+cand}{, }\item[{uint16\+\_\+t}]{n\+\_\+best}{, }\item[{uint16\+\_\+t}]{iq\+\_\+mutation}{, }\item[{int32\+\_\+t \texorpdfstring{$\ast$}{*}}]{start\+\_\+params}{}\end{DoxyParamCaption})}
|
||||
|
||||
|
||||
|
||||
@ -156,15 +182,18 @@ Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00074}{74}} of
|
||||
{\em start\+\_\+params} & Начальные параметры (Q16.\+16) \\
|
||||
\hline
|
||||
\end{DoxyParams}
|
||||
\begin{DoxyReturn}{Returns}
|
||||
0 — если окей, -\/1 — если ошибка
|
||||
\end{DoxyReturn}
|
||||
|
||||
|
||||
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00101}{101}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
|
||||
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00132}{132}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
|
||||
|
||||
\Hypertarget{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga1ba2fa963c9ae12625be1b7c20718563}\index{Evolve optimizer@{Evolve optimizer}!EvolveOptimizer\_Step@{EvolveOptimizer\_Step}}
|
||||
\Hypertarget{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga75acd71c85d4e60dc0eb31bc5780086a}\index{Evolve optimizer@{Evolve optimizer}!EvolveOptimizer\_Step@{EvolveOptimizer\_Step}}
|
||||
\index{EvolveOptimizer\_Step@{EvolveOptimizer\_Step}!Evolve optimizer@{Evolve optimizer}}
|
||||
\doxysubsubsubsubsection{\texorpdfstring{EvolveOptimizer\_Step()}{EvolveOptimizer\_Step()}}
|
||||
{\footnotesize\ttfamily \label{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga1ba2fa963c9ae12625be1b7c20718563}
|
||||
\+\_\+\+\_\+\+STATIC\+\_\+\+INLINE void Evolve\+Optimizer\+\_\+\+Step (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}} \texorpdfstring{$\ast$}{*}}]{opt}{, }\item[{int32\+\_\+t \texorpdfstring{$\ast$}{*}}]{params}{, }\item[{int32\+\_\+t}]{loss}{}\end{DoxyParamCaption})}
|
||||
{\footnotesize\ttfamily \label{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga75acd71c85d4e60dc0eb31bc5780086a}
|
||||
\+\_\+\+\_\+\+STATIC\+\_\+\+INLINE int Evolve\+Optimizer\+\_\+\+Step (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}} \texorpdfstring{$\ast$}{*}}]{opt}{, }\item[{int32\+\_\+t \texorpdfstring{$\ast$}{*}}]{params}{, }\item[{int32\+\_\+t}]{loss}{}\end{DoxyParamCaption})}
|
||||
|
||||
|
||||
|
||||
@ -176,12 +205,18 @@ Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00101}{101}} of
|
||||
\hline
|
||||
{\em params} & Массив параметров, которые будут обновлены (на выходе — новые параметры) \\
|
||||
\hline
|
||||
{\em loss} & Loss текущего кандидата (Q16.\+16)\\
|
||||
{\em loss} & Loss текущего кандидата (Q16.\+16) \\
|
||||
\hline
|
||||
\end{DoxyParams}
|
||||
\begin{DoxyReturn}{Returns}
|
||||
0 — если окей, -\/1 — если ошибка
|
||||
\end{DoxyReturn}
|
||||
Сохраняет loss текущего кандидата и формирует параметры следующего кандидата. Если накоплено n\+\_\+cand кандидатов, генерируется новое поколение. Новое поколение формируется случайным выбором из n\+\_\+best лучших с добавлением мутации.
|
||||
|
||||
На выходе params содержит параметры следующего кандидата для измерений.
|
||||
На выходе params содержит параметры следующего кандидата для измерений. \begin{DoxyNote}{Note}
|
||||
Функция использует глобальную внутреннюю переменную для сортировки. Надо убедится что только один экземпляр функции запущен в момент времени
|
||||
\end{DoxyNote}
|
||||
|
||||
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00137}{137}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
|
||||
|
||||
Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00187}{187}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}.
|
||||
|
||||
|
||||
@ -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}}.
|
||||
|
||||
|
||||
@ -45,6 +45,20 @@ struct \mbox{\hyperlink{struct_h_f___stack_frame__t}{HF\+\_\+\+Stack\+Frame\+\_\
|
||||
\item Читает запись во Flash по базовому тегу.
|
||||
\item Выводит сохранённый RTT буфер и контекст регистров.
|
||||
\item Опционально стирает Flash после восстановления.
|
||||
\end{DoxyEnumerate}
|
||||
\end{DoxyItemize}
|
||||
|
||||
Параметры\+:
|
||||
\begin{DoxyItemize}
|
||||
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_ga47f454f804b4dbc26cae079e8d8641e6}{HARDFAULT\+\_\+\+SERIAL\+\_\+\+TRACE} -\/ Включить обработку и serial трассировку Hardfault Если отключена то вставляются заглушки, никак не влияющие на параметры и остальную программу
|
||||
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_gadc960255719c7eff4bdfaa850be9b313}{HF\+\_\+\+RTT\+\_\+\+TAG\+\_\+\+BASE} -\/ Базовый тег RTT Flash для Hard\+Fault
|
||||
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_gafcc7ea03d4df8f1909e580b519a7f3ca}{HF\+\_\+\+RTT\+\_\+\+TAIL\+\_\+\+SIZE} -\/ Размер буфера RTT, который сохранится при Hardfault
|
||||
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_gaa31234688b333a505aaa57b8ecdedf5b}{HF\+\_\+\+STACK\+\_\+\+DUMP\+\_\+\+WORDS} -\/ Сколько слов стека будет проанализировано во время Hardfault
|
||||
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_ga0c602733a4a359bf8c095d71cd4d0f63}{HF\+\_\+\+FLASH\+\_\+\+ADDR} -\/ Адрес FLASH куда положится RTT буфер
|
||||
\item \doxylink{group___t_r_a_c_e___c_o_n_f_i_g_ga92d0d14732edb7dfa21d483304bdb051}{HF\+\_\+\+RAM\+\_\+\+END} -\/ Конец RAM памяти (чтобы во время анализа стека не выйти за пределы)
|
||||
\end{DoxyItemize}
|
||||
|
||||
|
||||
\begin{DoxyCode}{0}
|
||||
\DoxyCodeLine{\textcolor{keywordtype}{void}\ Hardfault()}
|
||||
\DoxyCodeLine{\{}
|
||||
@ -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}}.
|
||||
|
||||
|
||||
@ -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}}.
|
||||
|
||||
|
||||
@ -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}}.
|
||||
|
||||
|
||||
@ -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}}.
|
||||
|
||||
|
||||
@ -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}}.
|
||||
|
||||
|
||||
|
||||
|
||||
@ -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}}.
|
||||
|
||||
|
||||
|
||||
|
||||
@ -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}}.
|
||||
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -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}
|
||||
|
||||
@ -13,8 +13,14 @@
|
||||
- Мутацию для поиска оптимальных параметров
|
||||
- Несколько независимых оптимизаторов в одной программе
|
||||
|
||||
Если библиотека отключена @ref ENABLE_EVOLVE_OPTIMIZATION, то вставляются
|
||||
заглушки, никак не влияющие на параметры и остальную программу
|
||||
|
||||
Параметры для конфигурации:
|
||||
- @ref ENABLE_EVOLVE_OPTIMIZATION - Включить оптимизацию параметров
|
||||
Если библиотека отключена @ref ENABLE_EVOLVE_OPTIMIZATION, то вставляются
|
||||
заглушки, никак не влияющие на параметры и остальную программу
|
||||
- @ref EVOLVE_MAX_PARAMS - Максимальное количество параметров
|
||||
- @ref EVOLVE_MAX_CANDIDATES - Максимальное количество кандидатов для обучения
|
||||
|
||||
|
||||
@par Пример использования:
|
||||
@code
|
||||
@ -71,6 +77,9 @@ param_i16 = PARAM_UNSCALE_Q16(params[3], 500, 5000);
|
||||
#define PARAM_UNSCALE_Q16(q16_val, min_val, max_val) \
|
||||
(((float)(q16_val) / 65536.0f) * ((float)(max_val) - (float)(min_val)) + (float)(min_val))
|
||||
|
||||
#ifndef local_time
|
||||
#define local_time() HAL_GetTick() ///< Локальное время
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Структура эволюционного оптимизатора
|
||||
@ -117,31 +126,33 @@ static int cmp_idx(const void *a, const void *b) {
|
||||
* @param n_best Количество лучших, усредняемых
|
||||
* @param iq_mutation Амплитуда мутации в Q16.16
|
||||
* @param start_params Начальные параметры (Q16.16)
|
||||
* @return 0 — если окей,
|
||||
* -1 — если ошибка
|
||||
*/
|
||||
__STATIC_INLINE HAL_StatusTypeDef EvolveOptimizer_Init(EvolveOptimizer_t* opt,
|
||||
__STATIC_INLINE int EvolveOptimizer_Init(EvolveOptimizer_t* opt,
|
||||
uint16_t n_params,
|
||||
uint16_t n_cand,
|
||||
uint16_t n_best,
|
||||
uint16_t iq_mutation,
|
||||
int32_t* start_params)
|
||||
{
|
||||
if(check_null_ptr_2(opt, start_params))
|
||||
return HAL_ERROR;
|
||||
if((opt = NULL) || (start_params == NULL))
|
||||
return -1;
|
||||
|
||||
if(n_params > EVOLVE_MAX_PARAMS)
|
||||
return HAL_ERROR;
|
||||
return -1;
|
||||
opt->n_params = n_params;
|
||||
|
||||
if(n_cand > EVOLVE_MAX_CANDIDATES)
|
||||
return HAL_ERROR;
|
||||
return -1;
|
||||
opt->n_cand = n_cand;
|
||||
|
||||
if(n_best > EVOLVE_MAX_CANDIDATES/2)
|
||||
return HAL_ERROR;
|
||||
return -1;
|
||||
opt->n_best = n_best;
|
||||
|
||||
if(iq_mutation > 32768)
|
||||
return HAL_ERROR;
|
||||
return -1;
|
||||
opt->iq_mutation = iq_mutation;
|
||||
|
||||
for (uint16_t i = 0; i < n_cand; i++) {
|
||||
@ -150,10 +161,10 @@ __STATIC_INLINE HAL_StatusTypeDef EvolveOptimizer_Init(EvolveOptimizer_t* opt,
|
||||
}
|
||||
opt->loss[i] = 0;
|
||||
}
|
||||
uint32_t seed = HAL_GetTick() + (ADC1->DR & 0xFF);
|
||||
uint32_t seed = local_time() + (ADC1->DR & 0xFF);
|
||||
srand(seed);
|
||||
|
||||
return HAL_OK;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -162,6 +173,8 @@ __STATIC_INLINE HAL_StatusTypeDef EvolveOptimizer_Init(EvolveOptimizer_t* opt,
|
||||
* @param opt Указатель на структуру оптимизатора
|
||||
* @param params Массив параметров, которые будут обновлены (на выходе — новые параметры)
|
||||
* @param loss Loss текущего кандидата (Q16.16)
|
||||
* @return 0 — если окей,
|
||||
* -1 — если ошибка
|
||||
* @details
|
||||
* Сохраняет loss текущего кандидата и формирует параметры следующего кандидата.
|
||||
* Если накоплено n_cand кандидатов, генерируется новое поколение.
|
||||
@ -171,28 +184,28 @@ __STATIC_INLINE HAL_StatusTypeDef EvolveOptimizer_Init(EvolveOptimizer_t* opt,
|
||||
* @note Функция использует глобальную внутреннюю переменную для сортировки.
|
||||
* Надо убедится что только один экземпляр функции запущен в момент времени
|
||||
*/
|
||||
__STATIC_INLINE HAL_StatusTypeDef EvolveOptimizer_Step(EvolveOptimizer_t* opt,
|
||||
__STATIC_INLINE int EvolveOptimizer_Step(EvolveOptimizer_t* opt,
|
||||
int32_t* params,
|
||||
int32_t loss)
|
||||
{
|
||||
if(check_null_ptr_2(opt, params))
|
||||
return HAL_ERROR;
|
||||
if((opt = NULL) || (params == NULL))
|
||||
return -1;
|
||||
|
||||
uint16_t n_params = opt->n_params;
|
||||
if(n_params > EVOLVE_MAX_PARAMS)
|
||||
return HAL_ERROR;
|
||||
return -1;
|
||||
|
||||
uint16_t n_cand = opt->n_cand;
|
||||
if(n_cand > EVOLVE_MAX_CANDIDATES)
|
||||
return HAL_ERROR;
|
||||
return -1;
|
||||
|
||||
uint16_t n_best = opt->n_best;
|
||||
if(n_best > EVOLVE_MAX_CANDIDATES/2)
|
||||
return HAL_ERROR;
|
||||
return -1;
|
||||
|
||||
uint16_t mut = opt->iq_mutation;
|
||||
if(mut > 32768)
|
||||
return HAL_ERROR;
|
||||
return -1;
|
||||
|
||||
// 1. Сохраняем loss текущего кандидата
|
||||
opt->loss[opt->cand_index] = loss;
|
||||
@ -248,7 +261,7 @@ __STATIC_INLINE HAL_StatusTypeDef EvolveOptimizer_Step(EvolveOptimizer_t* opt,
|
||||
for (uint16_t i = 0; i < opt->n_params; i++)
|
||||
params[i] = opt->candidates[opt->cand_index][i];
|
||||
|
||||
return HAL_OK;
|
||||
return 0;
|
||||
}
|
||||
#else // ENABLE_EVOLVE_OPTIMIZATION
|
||||
//заглушки
|
||||
|
||||
@ -16,9 +16,14 @@
|
||||
* @addtogroup TRACE_SERIAL Serial trace defines
|
||||
* @ingroup TRACE
|
||||
* @brief Дефайны для работы с serial трассировкой (SWO, RTT)
|
||||
* @details Определяется дефайн @ref my_printf() и @ref log_printf() для работы с serial трассировкой:
|
||||
- для RTT это будет вызов функции SEGGER_RTT_printf(), с подключением библиотеки SEGGER_RTT.h
|
||||
- для SWO это будет просто printf()
|
||||
* @details В зависимости от настроек определяется дефайн @ref my_printf() и @ref log_printf() для работы с трассировкой:
|
||||
- @ref SERIAL_TRACE_ENABLE - Если трассировка отключена, то все дефайны определяются как 'ничего'
|
||||
и на производительность кода не влияют
|
||||
|
||||
- @ref RTT_TRACE_ENABLE - для RTT это будет вызов функции SEGGER_RTT_printf(), с подключением библиотеки SEGGER_RTT.h
|
||||
Предварительно надо подключить библиотеку SEGGER RTT и вызвать функцию SEGGER_RTT_Init()
|
||||
|
||||
- @ref SWO_TRACE_ENABLE для SWO это будет просто printf()
|
||||
|
||||
Но библиотеку STDOUT надо подключить самостоятельно:
|
||||
|
||||
@ -39,8 +44,7 @@
|
||||
- Выставить Trace Port = SWO
|
||||
- ITM - выбрать нужный порт (для Keil нулевой порт)
|
||||
|
||||
- Если трассировка @ref SERIAL_TRACE_ENABLE отключена, то все дефайны определяются как 'ничего'
|
||||
и на производительность кода не влияют
|
||||
|
||||
* @{
|
||||
*
|
||||
* @def my_printf(...)
|
||||
@ -159,6 +163,13 @@ my_printf("\n[%lu] [%s] (%s:%d) " fmt, \
|
||||
* если слот с таким тегом уже занят, запись не выполняется.
|
||||
* - Автоинкремент позволяет хранить несколько последовательных записей в пределах одного базового тега,
|
||||
* без необходимости вручную отслеживать адреса Flash или позиции буферов.
|
||||
*
|
||||
* Параметры:
|
||||
* - @ref RTT_FLASH_BUFFER_SIZE - Размер буфера RTT в Flash
|
||||
* - @ref RTT_FLASH_SECTOR - Сектор FLASH куда положится RTT буфер
|
||||
* - @ref RTT_FLASH_SECTOR_START - Начало сектора RTT_FLASH_SECTOR
|
||||
* - @ref RTT_FLASH_SECTOR_END - Конец сектора RTT_FLASH_SECTOR
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
@ -198,6 +209,7 @@ __STATIC_FORCEINLINE void RTT_FlashPrepare(void)
|
||||
* - Если базовый (младший байт == 0) — будет выбран первый свободный слот с автоинкрементом.
|
||||
* Автоинкремент формируется в пределах от 0x1 до 0xFF
|
||||
* - Если конкретный (младший байт != 0) — запись выполняется только с этим тегом, иначе ошибка.
|
||||
*
|
||||
*/
|
||||
__STATIC_FORCEINLINE int RTT_SaveToFlash(uint32_t tag, uint32_t tail_size)
|
||||
{
|
||||
@ -410,6 +422,16 @@ __STATIC_FORCEINLINE int RTT_EraseFlash(void)
|
||||
* 1. Читает запись во Flash по базовому тегу.
|
||||
* 2. Выводит сохранённый RTT буфер и контекст регистров.
|
||||
* 3. Опционально стирает Flash после восстановления.
|
||||
*
|
||||
* Параметры:
|
||||
* - @ref HARDFAULT_SERIAL_TRACE - Включить обработку и serial трассировку Hardfault
|
||||
* Если отключена то вставляются заглушки, никак не влияющие на параметры и остальную программу
|
||||
* - @ref HF_RTT_TAG_BASE - Базовый тег RTT Flash для HardFault
|
||||
* - @ref HF_RTT_TAIL_SIZE - Размер буфера RTT, который сохранится при Hardfault
|
||||
* - @ref HF_STACK_DUMP_WORDS - Сколько слов стека будет проанализировано во время Hardfault
|
||||
* - @ref HF_FLASH_ADDR - Адрес FLASH куда положится RTT буфер
|
||||
* - @ref HF_RAM_END - Конец RAM памяти (чтобы во время анализа стека не выйти за пределы)
|
||||
*
|
||||
@code
|
||||
void Hardfault()
|
||||
{
|
||||
|
||||
@ -15,9 +15,10 @@
|
||||
- user[num_user_vars]
|
||||
Также есть ряд функций (дефайнов) для обращения к элементам этой структуры.
|
||||
|
||||
|
||||
Если трекеры @ref TRACKERS_ENABLE отключены, то все дефайны определяются как ничего
|
||||
и на производительность кода не влияют
|
||||
Параметры для конфигурации:
|
||||
- @ref TRACKERS_ENABLE - Включить трекеры
|
||||
Если трекеры @ref TRACKERS_ENABLE отключены, то все дефайны определяются как ничего
|
||||
и на производительность кода не влияют
|
||||
|
||||
@par Пример:
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user