From 15c0e3755d56365ac5dcb5fe52dd2e65f706dec3 Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Mon, 27 Oct 2025 09:39:57 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20bench=5Ftime=20=D0=B8=20=D1=80=D0=B5=D1=84?= =?UTF-8?q?=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D0=B3=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=B0=D0=BB=D0=B3=D0=BE=D1=80=D0=B8=D1=82=D0=BC=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Doc/Doxyfile | 2 +- Doc/html/annotated.html | 29 +- Doc/html/annotated_dup.js | 5 +- Doc/html/bench__time_8h.html | 185 ++++++ Doc/html/bench__time_8h.js | 13 + Doc/html/bench__time_8h__incl.map | 11 + Doc/html/bench__time_8h__incl.md5 | 1 + Doc/html/bench__time_8h__incl.png | Bin 0 -> 5686 bytes Doc/html/bench__time_8h_source.html | 421 ++++++++++++++ Doc/html/classes.html | 8 +- .../dir_8eb68c124db7670c3cb56141b10519ea.html | 6 +- .../dir_8eb68c124db7670c3cb56141b10519ea.js | 3 +- Doc/html/doxygen_crawl.html | 104 +++- Doc/html/evolve__optimizer_8h.js | 10 - Doc/html/evolve__optimizer_8h__dep__incl.md5 | 1 - Doc/html/evolve__optimizer_8h__dep__incl.png | Bin 2773 -> 0 bytes Doc/html/evolve__optimizer_8h__incl.md5 | 1 - Doc/html/evolve__optimizer_8h__incl.png | Bin 6184 -> 0 bytes Doc/html/files.html | 43 +- Doc/html/functions.html | 36 +- Doc/html/functions_vars.html | 36 +- ...timizer_8h.html => gen__optimizer_8h.html} | 48 +- Doc/html/gen__optimizer_8h.js | 10 + ...l.map => gen__optimizer_8h__dep__incl.map} | 2 +- Doc/html/gen__optimizer_8h__dep__incl.md5 | 1 + Doc/html/gen__optimizer_8h__dep__incl.png | Bin 0 -> 2768 bytes ...__incl.map => gen__optimizer_8h__incl.map} | 2 +- Doc/html/gen__optimizer_8h__incl.md5 | 1 + Doc/html/gen__optimizer_8h__incl.png | Bin 0 -> 6168 bytes ...rce.html => gen__optimizer_8h_source.html} | 240 ++++---- Doc/html/general__gpio_8c_source.html | 2 +- Doc/html/globals.html | 221 ------- Doc/html/globals_b.html | 126 ++++ Doc/html/globals_c.html | 120 ++++ Doc/html/globals_d.html | 115 ++++ Doc/html/globals_defs.html | 20 +- Doc/html/globals_dup.js | 20 + Doc/html/globals_e.html | 115 ++++ Doc/html/globals_f.html | 115 ++++ Doc/html/globals_func.html | 15 +- Doc/html/globals_g.html | 133 +++++ Doc/html/globals_h.html | 125 ++++ Doc/html/globals_i.html | 120 ++++ Doc/html/globals_l.html | 124 ++++ Doc/html/globals_m.html | 120 ++++ Doc/html/globals_n.html | 115 ++++ Doc/html/globals_p.html | 116 ++++ Doc/html/globals_r.html | 123 ++++ Doc/html/globals_s.html | 123 ++++ Doc/html/globals_t.html | 156 +++++ Doc/html/globals_u.html | 147 +++++ Doc/html/globals_vars.html | 113 ++++ Doc/html/group___b_e_n_c_h___t_i_m_e.html | 543 ++++++++++++++++++ Doc/html/group___b_e_n_c_h___t_i_m_e.js | 29 + Doc/html/group___b_e_n_c_h___t_i_m_e.map | 4 + Doc/html/group___b_e_n_c_h___t_i_m_e.md5 | 1 + Doc/html/group___b_e_n_c_h___t_i_m_e.png | Bin 0 -> 1095 bytes .../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html | 2 +- Doc/html/group___e_v_o_l_v_e___c_o_n_f_i_g.js | 6 - .../group___e_v_o_l_v_e___c_o_n_f_i_g.md5 | 1 - .../group___e_v_o_l_v_e___c_o_n_f_i_g.png | Bin 1033 -> 0 bytes ...group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.js | 23 - ...roup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.md5 | 1 - ...roup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.png | Bin 1110 -> 0 bytes ....html => group___g_e_n___c_o_n_f_i_g.html} | 88 ++- Doc/html/group___g_e_n___c_o_n_f_i_g.js | 8 + ..._g.map => group___g_e_n___c_o_n_f_i_g.map} | 4 +- Doc/html/group___g_e_n___c_o_n_f_i_g.md5 | 1 + Doc/html/group___g_e_n___c_o_n_f_i_g.png | Bin 0 -> 1055 bytes ...=> group___g_e_n___o_p_t_i_m_i_z_e_r.html} | 122 ++-- Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.js | 23 + ... => group___g_e_n___o_p_t_i_m_i_z_e_r.map} | 4 +- .../group___g_e_n___o_p_t_i_m_i_z_e_r.md5 | 1 + .../group___g_e_n___o_p_t_i_m_i_z_e_r.png | Bin 0 -> 1121 bytes Doc/html/group___l_i_b_s___c_o_n_f_i_g.html | 24 +- Doc/html/group___l_i_b_s___c_o_n_f_i_g.js | 2 +- .../group___m_y_l_i_b_s___c_o_n_f_i_g.html | 6 +- Doc/html/group___m_y_l_i_b_s___c_o_n_f_i_g.js | 2 +- .../group___m_y_l_i_b_s___c_o_n_f_i_g.map | 2 +- .../group___m_y_l_i_b_s___c_o_n_f_i_g.md5 | 2 +- .../group___m_y_l_i_b_s___c_o_n_f_i_g.png | Bin 3423 -> 3441 bytes .../group___m_y_l_i_b_s___d_e_f_i_n_e_s.html | 25 +- .../group___m_y_l_i_b_s___d_e_f_i_n_e_s.js | 3 +- .../group___m_y_l_i_b_s___d_e_f_i_n_e_s.map | 19 +- .../group___m_y_l_i_b_s___d_e_f_i_n_e_s.md5 | 2 +- .../group___m_y_l_i_b_s___d_e_f_i_n_e_s.png | Bin 10469 -> 13092 bytes ...group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html | 79 +++ Doc/html/group___t_r_a_c_e___s_e_r_i_a_l.html | 2 +- .../group___u_t_i_l_s___d_e_f_i_n_e_s.html | 8 +- Doc/html/index.html | 4 +- Doc/html/mainpage_8h_source.html | 4 +- Doc/html/menudata.js | 37 +- Doc/html/mylibs__config_8h.html | 106 ++-- Doc/html/mylibs__config_8h.js | 10 +- Doc/html/mylibs__config_8h__dep__incl.map | 86 +-- Doc/html/mylibs__config_8h__dep__incl.md5 | 2 +- Doc/html/mylibs__config_8h__dep__incl.png | Bin 58771 -> 60111 bytes Doc/html/mylibs__config_8h_source.html | 65 ++- Doc/html/mylibs__defs_8h.html | 82 +-- Doc/html/mylibs__defs_8h__dep__incl.map | 82 +-- Doc/html/mylibs__defs_8h__dep__incl.md5 | 2 +- Doc/html/mylibs__defs_8h__dep__incl.png | Bin 55854 -> 56859 bytes Doc/html/mylibs__defs_8h_source.html | 108 ++-- Doc/html/mylibs__include_8h.html | 235 +++++++- Doc/html/mylibs__include_8h__incl.map | 26 +- Doc/html/mylibs__include_8h__incl.md5 | 2 +- Doc/html/mylibs__include_8h__incl.png | Bin 27946 -> 27999 bytes Doc/html/mylibs__include_8h_source.html | 79 ++- Doc/html/navtreedata.js | 5 +- Doc/html/navtreeindex0.js | 202 +++---- Doc/html/navtreeindex1.js | 102 +++- Doc/html/search/all_1.js | 23 +- Doc/html/search/all_10.js | 109 ++-- Doc/html/search/all_2.js | 30 +- Doc/html/search/all_4.js | 21 +- Doc/html/search/all_6.js | 81 +-- Doc/html/search/all_7.js | 23 +- Doc/html/search/all_8.js | 5 +- Doc/html/search/all_9.js | 39 +- Doc/html/search/all_a.js | 49 +- Doc/html/search/all_b.js | 6 +- Doc/html/search/all_c.js | 2 +- Doc/html/search/all_d.js | 4 +- Doc/html/search/all_f.js | 38 +- Doc/html/search/classes_0.js | 4 +- Doc/html/search/classes_1.js | 5 +- Doc/html/search/files_0.js | 3 +- Doc/html/search/files_1.js | 10 +- Doc/html/search/files_2.js | 11 +- Doc/html/search/files_3.js | 5 +- Doc/html/search/files_4.js | 5 - Doc/html/search/functions_0.js | 11 +- Doc/html/search/functions_1.js | 22 +- Doc/html/search/groups_2.js | 2 +- Doc/html/search/groups_4.js | 4 +- Doc/html/search/groups_6.js | 6 +- Doc/html/search/groups_a.js | 3 +- Doc/html/search/groups_b.js | 2 +- Doc/html/search/groups_f.js | 13 +- Doc/html/search/searchdata.js | 8 +- Doc/html/search/variables_0.js | 12 +- Doc/html/search/variables_3.js | 4 +- Doc/html/search/variables_4.js | 7 +- Doc/html/search/variables_5.js | 7 +- Doc/html/search/variables_6.js | 14 +- Doc/html/search/variables_7.js | 12 +- Doc/html/search/variables_8.js | 5 +- Doc/html/search/variables_9.js | 7 +- Doc/html/search/variables_a.js | 25 +- Doc/html/search/variables_b.js | 23 +- Doc/html/search/variables_c.js | 6 + Doc/html/struct_bench_time__t-members.html | 117 ++++ Doc/html/struct_bench_time__t.html | 171 ++++++ Doc/html/struct_bench_time__t.js | 4 + .../struct_bench_time__t__coll__graph.map | 7 + .../struct_bench_time__t__coll__graph.md5 | 1 + .../struct_bench_time__t__coll__graph.png | Bin 0 -> 2906 bytes .../struct_bench_time_channel__t-members.html | 120 ++++ Doc/html/struct_bench_time_channel__t.html | 229 ++++++++ Doc/html/struct_bench_time_channel__t.js | 7 + ...uct_bench_time_channel__t__coll__graph.map | 5 + ...uct_bench_time_channel__t__coll__graph.md5 | 1 + ...uct_bench_time_channel__t__coll__graph.png | Bin 0 -> 1827 bytes .../struct_bench_time_stats__t-members.html | 121 ++++ Doc/html/struct_bench_time_stats__t.html | 238 ++++++++ Doc/html/struct_bench_time_stats__t.js | 8 + Doc/html/struct_evolve_optimizer__t.html | 358 ------------ Doc/html/struct_evolve_optimizer__t.js | 14 - ...l => struct_gen_optimizer__t-members.html} | 28 +- Doc/html/struct_gen_optimizer__t.html | 358 ++++++++++++ Doc/html/struct_gen_optimizer__t.js | 14 + Doc/html/topics.html | 55 +- Doc/html/trace_8h.html | 6 + Doc/latex/annotated.tex | 5 +- Doc/latex/bench__time_8h.tex | 61 ++ Doc/latex/bench__time_8h__incl.md5 | 1 + Doc/latex/bench__time_8h__incl.pdf | Bin 0 -> 21634 bytes Doc/latex/bench__time_8h_source.tex | 264 +++++++++ Doc/latex/bit__access_8h__dep__incl.pdf | Bin 20035 -> 20035 bytes Doc/latex/bit__access_8h__incl.pdf | Bin 21517 -> 21517 bytes Doc/latex/evolve__optimizer_8h__dep__incl.md5 | 1 - Doc/latex/evolve__optimizer_8h__dep__incl.pdf | Bin 21173 -> 0 bytes Doc/latex/evolve__optimizer_8h__incl.md5 | 1 - Doc/latex/evolve__optimizer_8h__incl.pdf | Bin 23145 -> 0 bytes Doc/latex/evolve__optimizer_8h_source.tex | 344 ----------- Doc/latex/files.tex | 3 +- ...optimizer_8h.tex => gen__optimizer_8h.tex} | 28 +- Doc/latex/gen__optimizer_8h__dep__incl.md5 | 1 + Doc/latex/gen__optimizer_8h__dep__incl.pdf | Bin 0 -> 21222 bytes Doc/latex/gen__optimizer_8h__incl.md5 | 1 + Doc/latex/gen__optimizer_8h__incl.pdf | Bin 0 -> 22697 bytes Doc/latex/gen__optimizer_8h_source.tex | 344 +++++++++++ Doc/latex/general__gpio_8c__incl.pdf | Bin 22434 -> 22434 bytes Doc/latex/general__gpio_8h__dep__incl.pdf | Bin 22713 -> 22712 bytes Doc/latex/general__gpio_8h__incl.pdf | Bin 22487 -> 22488 bytes Doc/latex/general__spi_8c__incl.pdf | Bin 22696 -> 22696 bytes Doc/latex/general__spi_8h__dep__incl.pdf | Bin 20092 -> 20093 bytes Doc/latex/general__spi_8h__incl.pdf | Bin 22496 -> 22497 bytes Doc/latex/general__tim_8c__incl.pdf | Bin 22720 -> 22721 bytes Doc/latex/general__tim_8h__dep__incl.pdf | Bin 20217 -> 20218 bytes Doc/latex/general__tim_8h__incl.pdf | Bin 22777 -> 22777 bytes Doc/latex/general__uart_8c__incl.pdf | Bin 23039 -> 23039 bytes Doc/latex/general__uart_8h__dep__incl.pdf | Bin 20064 -> 20065 bytes Doc/latex/general__uart_8h__incl.pdf | Bin 22456 -> 22456 bytes Doc/latex/group___b_e_n_c_h___t_i_m_e.md5 | 1 + Doc/latex/group___b_e_n_c_h___t_i_m_e.pdf | Bin 0 -> 13487 bytes Doc/latex/group___b_e_n_c_h___t_i_m_e.tex | 288 ++++++++++ ...___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.pdf | Bin 14243 -> 14243 bytes .../group___d_e_l_a_y_s___d_e_f_i_n_e_s.pdf | Bin 14043 -> 14044 bytes ..._r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.pdf | Bin 13525 -> 13525 bytes .../group___e_v_o_l_v_e___c_o_n_f_i_g.md5 | 1 - .../group___e_v_o_l_v_e___c_o_n_f_i_g.pdf | Bin 13073 -> 0 bytes .../group___e_v_o_l_v_e___c_o_n_f_i_g.tex | 76 --- ...roup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.md5 | 1 - ...roup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.pdf | Bin 14651 -> 0 bytes ...roup___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.tex | 253 -------- Doc/latex/group___g_e_n___c_o_n_f_i_g.md5 | 1 + Doc/latex/group___g_e_n___c_o_n_f_i_g.pdf | Bin 0 -> 12917 bytes Doc/latex/group___g_e_n___c_o_n_f_i_g.tex | 108 ++++ .../group___g_e_n___o_p_t_i_m_i_z_e_r.md5 | 1 + .../group___g_e_n___o_p_t_i_m_i_z_e_r.pdf | Bin 0 -> 14446 bytes .../group___g_e_n___o_p_t_i_m_i_z_e_r.tex | 253 ++++++++ Doc/latex/group___g_p_i_o___i_n_i_t.pdf | Bin 13404 -> 13405 bytes Doc/latex/group___l_i_b_s___c_o_n_f_i_g.pdf | Bin 13695 -> 13695 bytes Doc/latex/group___l_i_b_s___c_o_n_f_i_g.tex | 26 +- Doc/latex/group___m_y___l_i_b_s___g_p_i_o.pdf | Bin 17211 -> 17211 bytes Doc/latex/group___m_y___l_i_b_s___s_p_i.pdf | Bin 14927 -> 14928 bytes Doc/latex/group___m_y___l_i_b_s___t_i_m.pdf | Bin 18331 -> 18332 bytes Doc/latex/group___m_y___l_i_b_s___u_a_r_t.pdf | Bin 15508 -> 15508 bytes Doc/latex/group___m_y_l_i_b_s___a_l_l.pdf | Bin 16525 -> 16525 bytes .../group___m_y_l_i_b_s___c_o_n_f_i_g.md5 | 2 +- .../group___m_y_l_i_b_s___c_o_n_f_i_g.pdf | Bin 16402 -> 16298 bytes .../group___m_y_l_i_b_s___c_o_n_f_i_g.tex | 6 +- .../group___m_y_l_i_b_s___d_e_f_i_n_e_s.md5 | 2 +- .../group___m_y_l_i_b_s___d_e_f_i_n_e_s.pdf | Bin 20381 -> 20478 bytes .../group___m_y_l_i_b_s___d_e_f_i_n_e_s.tex | 7 +- ..._m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.pdf | Bin 14292 -> 14293 bytes ...roup___m_y_l_i_b_s___g_p_i_o___l_e_d_s.pdf | Bin 11871 -> 11871 bytes ...___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.pdf | Bin 14065 -> 14065 bytes ...up___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.pdf | Bin 17700 -> 17700 bytes ...roup___m_y_l_i_b_s___t_i_m___d_e_l_a_y.pdf | Bin 13108 -> 13109 bytes ...___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.pdf | Bin 13138 -> 13140 bytes ...___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.pdf | Bin 14377 -> 14376 bytes .../group___m_y_l_i_b_s___t_i_m___o_c.pdf | Bin 14476 -> 14476 bytes Doc/latex/group___s_p_i___i_n_i_t.pdf | Bin 13125 -> 13125 bytes Doc/latex/group___t_i_m___i_n_i_t.pdf | Bin 13418 -> 13418 bytes Doc/latex/group___t_r_a_c_e.pdf | Bin 17814 -> 17814 bytes Doc/latex/group___t_r_a_c_e___c_o_n_f_i_g.pdf | Bin 13333 -> 13334 bytes Doc/latex/group___t_r_a_c_e___g_p_i_o.pdf | Bin 13991 -> 13993 bytes .../group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.pdf | Bin 13600 -> 13602 bytes .../group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.tex | 44 ++ .../group___t_r_a_c_e___r_t_t___f_l_a_s_h.pdf | Bin 14390 -> 14391 bytes Doc/latex/group___t_r_a_c_e___s_e_r_i_a_l.pdf | Bin 13662 -> 13662 bytes Doc/latex/group___t_r_a_c_k_e_r_s.pdf | Bin 14103 -> 14104 bytes Doc/latex/group___u_a_r_t___i_n_i_t.pdf | Bin 13468 -> 13468 bytes .../group___u_t_i_l_s___d_e_f_i_n_e_s.pdf | Bin 13680 -> 13680 bytes .../group___u_t_i_l_s___d_e_f_i_n_e_s.tex | 8 +- Doc/latex/index.tex | 4 +- Doc/latex/mainpage_8h_source.tex | 4 +- Doc/latex/mylibs__config_8h.tex | 12 +- Doc/latex/mylibs__config_8h__dep__incl.md5 | 2 +- Doc/latex/mylibs__config_8h__dep__incl.pdf | Bin 26629 -> 26299 bytes Doc/latex/mylibs__config_8h__incl.pdf | Bin 21084 -> 21085 bytes Doc/latex/mylibs__config_8h_source.tex | 65 ++- Doc/latex/mylibs__defs_8h__dep__incl.md5 | 2 +- Doc/latex/mylibs__defs_8h__dep__incl.pdf | Bin 26489 -> 26171 bytes Doc/latex/mylibs__defs_8h__incl.pdf | Bin 21375 -> 21375 bytes Doc/latex/mylibs__defs_8h_source.tex | 108 ++-- Doc/latex/mylibs__include_8h.tex | 153 ++++- Doc/latex/mylibs__include_8h__incl.md5 | 2 +- Doc/latex/mylibs__include_8h__incl.pdf | Bin 26031 -> 25600 bytes Doc/latex/mylibs__include_8h_source.tex | 74 ++- Doc/latex/refman.tex | 11 +- Doc/latex/struct_bench_time__t.tex | 57 ++ .../struct_bench_time__t__coll__graph.md5 | 1 + .../struct_bench_time__t__coll__graph.pdf | Bin 0 -> 14502 bytes Doc/latex/struct_bench_time_channel__t.tex | 105 ++++ ...uct_bench_time_channel__t__coll__graph.md5 | 1 + ...uct_bench_time_channel__t__coll__graph.pdf | Bin 0 -> 14368 bytes Doc/latex/struct_bench_time_stats__t.tex | 111 ++++ Doc/latex/struct_evolve_optimizer__t.tex | 207 ------- Doc/latex/struct_gen_optimizer__t.tex | 207 +++++++ ..._t_i_m___encoder_type_def__coll__graph.pdf | Bin 17027 -> 17028 bytes Doc/latex/topics.tex | 5 +- Doc/latex/trace_8h.tex | 9 + Doc/latex/trace_8h__dep__incl.pdf | Bin 20228 -> 20228 bytes Doc/latex/trace_8h__incl.pdf | Bin 22324 -> 22325 bytes Doc/latex/trackers_8h__dep__incl.pdf | Bin 20756 -> 20756 bytes Doc/latex/trackers_8h__incl.pdf | Bin 22239 -> 22240 bytes MyLibs/Inc/bench_time.h | 258 +++++++++ .../{evolve_optimizer.h => gen_optimizer.h} | 84 +-- MyLibs/Inc/mylibs_config.h | 31 +- MyLibs/Inc/mylibs_include.h | 26 +- mainpage.h | 4 +- 294 files changed, 9147 insertions(+), 2935 deletions(-) create mode 100644 Doc/html/bench__time_8h.html create mode 100644 Doc/html/bench__time_8h.js create mode 100644 Doc/html/bench__time_8h__incl.map create mode 100644 Doc/html/bench__time_8h__incl.md5 create mode 100644 Doc/html/bench__time_8h__incl.png create mode 100644 Doc/html/bench__time_8h_source.html delete mode 100644 Doc/html/evolve__optimizer_8h.js delete mode 100644 Doc/html/evolve__optimizer_8h__dep__incl.md5 delete mode 100644 Doc/html/evolve__optimizer_8h__dep__incl.png delete mode 100644 Doc/html/evolve__optimizer_8h__incl.md5 delete mode 100644 Doc/html/evolve__optimizer_8h__incl.png rename Doc/html/{evolve__optimizer_8h.html => gen__optimizer_8h.html} (71%) create mode 100644 Doc/html/gen__optimizer_8h.js rename Doc/html/{evolve__optimizer_8h__dep__incl.map => gen__optimizer_8h__dep__incl.map} (75%) create mode 100644 Doc/html/gen__optimizer_8h__dep__incl.md5 create mode 100644 Doc/html/gen__optimizer_8h__dep__incl.png rename Doc/html/{evolve__optimizer_8h__incl.map => gen__optimizer_8h__incl.map} (90%) create mode 100644 Doc/html/gen__optimizer_8h__incl.md5 create mode 100644 Doc/html/gen__optimizer_8h__incl.png rename Doc/html/{evolve__optimizer_8h_source.html => gen__optimizer_8h_source.html} (64%) create mode 100644 Doc/html/globals_b.html create mode 100644 Doc/html/globals_c.html create mode 100644 Doc/html/globals_d.html create mode 100644 Doc/html/globals_dup.js create mode 100644 Doc/html/globals_e.html create mode 100644 Doc/html/globals_f.html create mode 100644 Doc/html/globals_g.html create mode 100644 Doc/html/globals_h.html create mode 100644 Doc/html/globals_i.html create mode 100644 Doc/html/globals_l.html create mode 100644 Doc/html/globals_m.html create mode 100644 Doc/html/globals_n.html create mode 100644 Doc/html/globals_p.html create mode 100644 Doc/html/globals_r.html create mode 100644 Doc/html/globals_s.html create mode 100644 Doc/html/globals_t.html create mode 100644 Doc/html/globals_u.html create mode 100644 Doc/html/globals_vars.html create mode 100644 Doc/html/group___b_e_n_c_h___t_i_m_e.html create mode 100644 Doc/html/group___b_e_n_c_h___t_i_m_e.js create mode 100644 Doc/html/group___b_e_n_c_h___t_i_m_e.map create mode 100644 Doc/html/group___b_e_n_c_h___t_i_m_e.md5 create mode 100644 Doc/html/group___b_e_n_c_h___t_i_m_e.png delete mode 100644 Doc/html/group___e_v_o_l_v_e___c_o_n_f_i_g.js delete mode 100644 Doc/html/group___e_v_o_l_v_e___c_o_n_f_i_g.md5 delete mode 100644 Doc/html/group___e_v_o_l_v_e___c_o_n_f_i_g.png delete mode 100644 Doc/html/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.js delete mode 100644 Doc/html/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.md5 delete mode 100644 Doc/html/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.png rename Doc/html/{group___e_v_o_l_v_e___c_o_n_f_i_g.html => group___g_e_n___c_o_n_f_i_g.html} (57%) create mode 100644 Doc/html/group___g_e_n___c_o_n_f_i_g.js rename Doc/html/{group___e_v_o_l_v_e___c_o_n_f_i_g.map => group___g_e_n___c_o_n_f_i_g.map} (59%) create mode 100644 Doc/html/group___g_e_n___c_o_n_f_i_g.md5 create mode 100644 Doc/html/group___g_e_n___c_o_n_f_i_g.png rename Doc/html/{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html => group___g_e_n___o_p_t_i_m_i_z_e_r.html} (65%) create mode 100644 Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.js rename Doc/html/{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.map => group___g_e_n___o_p_t_i_m_i_z_e_r.map} (79%) create mode 100644 Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.md5 create mode 100644 Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.png delete mode 100644 Doc/html/search/files_4.js create mode 100644 Doc/html/search/variables_c.js create mode 100644 Doc/html/struct_bench_time__t-members.html create mode 100644 Doc/html/struct_bench_time__t.html create mode 100644 Doc/html/struct_bench_time__t.js create mode 100644 Doc/html/struct_bench_time__t__coll__graph.map create mode 100644 Doc/html/struct_bench_time__t__coll__graph.md5 create mode 100644 Doc/html/struct_bench_time__t__coll__graph.png create mode 100644 Doc/html/struct_bench_time_channel__t-members.html create mode 100644 Doc/html/struct_bench_time_channel__t.html create mode 100644 Doc/html/struct_bench_time_channel__t.js create mode 100644 Doc/html/struct_bench_time_channel__t__coll__graph.map create mode 100644 Doc/html/struct_bench_time_channel__t__coll__graph.md5 create mode 100644 Doc/html/struct_bench_time_channel__t__coll__graph.png create mode 100644 Doc/html/struct_bench_time_stats__t-members.html create mode 100644 Doc/html/struct_bench_time_stats__t.html create mode 100644 Doc/html/struct_bench_time_stats__t.js delete mode 100644 Doc/html/struct_evolve_optimizer__t.html delete mode 100644 Doc/html/struct_evolve_optimizer__t.js rename Doc/html/{struct_evolve_optimizer__t-members.html => struct_gen_optimizer__t-members.html} (61%) create mode 100644 Doc/html/struct_gen_optimizer__t.html create mode 100644 Doc/html/struct_gen_optimizer__t.js create mode 100644 Doc/latex/bench__time_8h.tex create mode 100644 Doc/latex/bench__time_8h__incl.md5 create mode 100644 Doc/latex/bench__time_8h__incl.pdf create mode 100644 Doc/latex/bench__time_8h_source.tex delete mode 100644 Doc/latex/evolve__optimizer_8h__dep__incl.md5 delete mode 100644 Doc/latex/evolve__optimizer_8h__dep__incl.pdf delete mode 100644 Doc/latex/evolve__optimizer_8h__incl.md5 delete mode 100644 Doc/latex/evolve__optimizer_8h__incl.pdf delete mode 100644 Doc/latex/evolve__optimizer_8h_source.tex rename Doc/latex/{evolve__optimizer_8h.tex => gen__optimizer_8h.tex} (52%) create mode 100644 Doc/latex/gen__optimizer_8h__dep__incl.md5 create mode 100644 Doc/latex/gen__optimizer_8h__dep__incl.pdf create mode 100644 Doc/latex/gen__optimizer_8h__incl.md5 create mode 100644 Doc/latex/gen__optimizer_8h__incl.pdf create mode 100644 Doc/latex/gen__optimizer_8h_source.tex create mode 100644 Doc/latex/group___b_e_n_c_h___t_i_m_e.md5 create mode 100644 Doc/latex/group___b_e_n_c_h___t_i_m_e.pdf create mode 100644 Doc/latex/group___b_e_n_c_h___t_i_m_e.tex delete mode 100644 Doc/latex/group___e_v_o_l_v_e___c_o_n_f_i_g.md5 delete mode 100644 Doc/latex/group___e_v_o_l_v_e___c_o_n_f_i_g.pdf delete mode 100644 Doc/latex/group___e_v_o_l_v_e___c_o_n_f_i_g.tex delete mode 100644 Doc/latex/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.md5 delete mode 100644 Doc/latex/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.pdf delete mode 100644 Doc/latex/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.tex create mode 100644 Doc/latex/group___g_e_n___c_o_n_f_i_g.md5 create mode 100644 Doc/latex/group___g_e_n___c_o_n_f_i_g.pdf create mode 100644 Doc/latex/group___g_e_n___c_o_n_f_i_g.tex create mode 100644 Doc/latex/group___g_e_n___o_p_t_i_m_i_z_e_r.md5 create mode 100644 Doc/latex/group___g_e_n___o_p_t_i_m_i_z_e_r.pdf create mode 100644 Doc/latex/group___g_e_n___o_p_t_i_m_i_z_e_r.tex create mode 100644 Doc/latex/struct_bench_time__t.tex create mode 100644 Doc/latex/struct_bench_time__t__coll__graph.md5 create mode 100644 Doc/latex/struct_bench_time__t__coll__graph.pdf create mode 100644 Doc/latex/struct_bench_time_channel__t.tex create mode 100644 Doc/latex/struct_bench_time_channel__t__coll__graph.md5 create mode 100644 Doc/latex/struct_bench_time_channel__t__coll__graph.pdf create mode 100644 Doc/latex/struct_bench_time_stats__t.tex delete mode 100644 Doc/latex/struct_evolve_optimizer__t.tex create mode 100644 Doc/latex/struct_gen_optimizer__t.tex create mode 100644 MyLibs/Inc/bench_time.h rename MyLibs/Inc/{evolve_optimizer.h => gen_optimizer.h} (82%) diff --git a/Doc/Doxyfile b/Doc/Doxyfile index 6d0c197..71d218b 100644 --- a/Doc/Doxyfile +++ b/Doc/Doxyfile @@ -558,7 +558,7 @@ EXTRACT_PACKAGE = NO # included in the documentation. # The default value is: NO. -EXTRACT_STATIC = NO +EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined # locally in source files will be included in the documentation. If set to NO, diff --git a/Doc/html/annotated.html b/Doc/html/annotated.html index 1481365..180ffa8 100644 --- a/Doc/html/annotated.html +++ b/Doc/html/annotated.html @@ -102,19 +102,22 @@ $(function(){initNavTree('annotated.html','',''); });
Here are the classes, structs, unions and interfaces with brief descriptions:
- - - - - - - - - - - - - + + + + + + + + + + + + + + + +
 CEvolveOptimizer_tСтруктура эволюционного оптимизатора
 CGPIO_LEDTypeDefСтруктура светодиода
 CGPIO_SwitchTypeDefСтруктура кнопки
 CHF_StackFrame_tКонтекст стек-фрейма процессора при HardFault
 CRTT_FlashHeader_tСтруктура RTT, которая будет положена в Flash
 CSPI_SettingsTypeDefСтруктура настроек SPI
 CTIM_EncoderTypeDefСтруктура инициализации енкодера
 CTIM_SettingsTypeDefСтруктура инициализации таймера
 CUART_SettingsTypeDefСтруктура настроек UART
 Cuint16_BitTypeDef
 Cuint32_BitTypeDef
 Cuint64_BitTypeDef
 Cuint8_BitTypeDef
 CBenchTime_tОсновная структура менеджера измерений
 CBenchTimeChannel_tСтруктура канала измерения
 CBenchTimeStats_tСтруктура статистики измерений
 CGenOptimizer_tСтруктура эволюционного оптимизатора
 CGPIO_LEDTypeDefСтруктура светодиода
 CGPIO_SwitchTypeDefСтруктура кнопки
 CHF_StackFrame_tКонтекст стек-фрейма процессора при HardFault
 CRTT_FlashHeader_tСтруктура RTT, которая будет положена в Flash
 CSPI_SettingsTypeDefСтруктура настроек SPI
 CTIM_EncoderTypeDefСтруктура инициализации енкодера
 CTIM_SettingsTypeDefСтруктура инициализации таймера
 CUART_SettingsTypeDefСтруктура настроек UART
 Cuint16_BitTypeDef
 Cuint32_BitTypeDef
 Cuint64_BitTypeDef
 Cuint8_BitTypeDef
diff --git a/Doc/html/annotated_dup.js b/Doc/html/annotated_dup.js index 7e0e8ac..f3fc3cd 100644 --- a/Doc/html/annotated_dup.js +++ b/Doc/html/annotated_dup.js @@ -1,6 +1,9 @@ var annotated_dup = [ - [ "EvolveOptimizer_t", "struct_evolve_optimizer__t.html", "struct_evolve_optimizer__t" ], + [ "BenchTime_t", "struct_bench_time__t.html", "struct_bench_time__t" ], + [ "BenchTimeChannel_t", "struct_bench_time_channel__t.html", "struct_bench_time_channel__t" ], + [ "BenchTimeStats_t", "struct_bench_time_stats__t.html", "struct_bench_time_stats__t" ], + [ "GenOptimizer_t", "struct_gen_optimizer__t.html", "struct_gen_optimizer__t" ], [ "GPIO_LEDTypeDef", "struct_g_p_i_o___l_e_d_type_def.html", "struct_g_p_i_o___l_e_d_type_def" ], [ "GPIO_SwitchTypeDef", "struct_g_p_i_o___switch_type_def.html", "struct_g_p_i_o___switch_type_def" ], [ "HF_StackFrame_t", "struct_h_f___stack_frame__t.html", "struct_h_f___stack_frame__t" ], diff --git a/Doc/html/bench__time_8h.html b/Doc/html/bench__time_8h.html new file mode 100644 index 0000000..eef2024 --- /dev/null +++ b/Doc/html/bench__time_8h.html @@ -0,0 +1,185 @@ + + + + + + + +MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/bench_time.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
bench_time.h File Reference
+
+
+ +

Заголовочный файл для измерения времени между событиями +More...

+
#include "mylibs_defs.h"
+#include <stdint.h>
+
Include dependency graph for bench_time.h:
+
+
+ +
+

Go to the source code of this file.

+ + + + + + + + +

+Classes

struct  BenchTimeStats_t
 Структура статистики измерений More...
struct  BenchTimeChannel_t
 Структура канала измерения More...
struct  BenchTime_t
 Основная структура менеджера измерений More...
+ + + + + + + + + + + + + + + + + + + +

+Functions

static void BenchTime_Init (void)
 Инициализация системы измерения времени
static uint32_t BenchTime_Start (uint8_t channel, uint32_t ticks, uint32_t tick_period)
 Начало измерения на указанном канале
static uint32_t BenchTime_End (uint8_t channel, uint32_t ticks)
 Окончание измерения на указанном канале
static uint32_t BenchTime_GetMin (uint8_t channel)
 Получение минимального времени измерения
static uint32_t BenchTime_GetMax (uint8_t channel)
 Получение максимального времени измерения
static uint32_t BenchTime_GetAverage (uint8_t channel)
 Получение среднего времени измерения
static uint32_t BenchTime_GetCount (uint8_t channel)
 Получение количества измерений
static uint32_t BenchTime_GetLast (uint8_t channel)
 Получение последнего измеренного времени
static void BenchTime_ResetStats (uint8_t channel)
 Сброс статистики для канала
+ + + +

+Variables

static BenchTime_t hbt = {0}
 Внутренний экземпляр
+

Detailed Description

+

Заголовочный файл для измерения времени между событиями

+ +

Definition in file bench_time.h.

+
+
+ +
+ + + + diff --git a/Doc/html/bench__time_8h.js b/Doc/html/bench__time_8h.js new file mode 100644 index 0000000..8165848 --- /dev/null +++ b/Doc/html/bench__time_8h.js @@ -0,0 +1,13 @@ +var bench__time_8h = +[ + [ "BenchTime_Init", "group___b_e_n_c_h___t_i_m_e.html#gabb7a665a9603ea2e4dbc4432e8cb6054", null ], + [ "BenchTime_Start", "group___b_e_n_c_h___t_i_m_e.html#gac65338df38129964ce3e9d9cb2fcb349", null ], + [ "BenchTime_End", "group___b_e_n_c_h___t_i_m_e.html#ga47a69851a2089140eac00cde18a12439", null ], + [ "BenchTime_GetMin", "group___b_e_n_c_h___t_i_m_e.html#ga273d45255fe4403fc25648d60cca7705", null ], + [ "BenchTime_GetMax", "group___b_e_n_c_h___t_i_m_e.html#ga07e27d7b169c9fa1abd57281bb4e374e", null ], + [ "BenchTime_GetAverage", "group___b_e_n_c_h___t_i_m_e.html#ga24e2450d5ea921074ec5d7a1e4d56ba8", null ], + [ "BenchTime_GetCount", "group___b_e_n_c_h___t_i_m_e.html#gabd1301ca79a30c782970f89fd147df3a", null ], + [ "BenchTime_GetLast", "group___b_e_n_c_h___t_i_m_e.html#gacf3a738d6423d71b238058a63558a4ed", null ], + [ "BenchTime_ResetStats", "group___b_e_n_c_h___t_i_m_e.html#ga31a6b2b181b92bcb15f46758f5d57f35", null ], + [ "hbt", "group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d", null ] +]; \ No newline at end of file diff --git a/Doc/html/bench__time_8h__incl.map b/Doc/html/bench__time_8h__incl.map new file mode 100644 index 0000000..b4964a4 --- /dev/null +++ b/Doc/html/bench__time_8h__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Doc/html/bench__time_8h__incl.md5 b/Doc/html/bench__time_8h__incl.md5 new file mode 100644 index 0000000..f2b14cb --- /dev/null +++ b/Doc/html/bench__time_8h__incl.md5 @@ -0,0 +1 @@ +e2f287c82f2aba927295813f84ac4e31 \ No newline at end of file diff --git a/Doc/html/bench__time_8h__incl.png b/Doc/html/bench__time_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..cc0b2fa7f7e21c69719c7f14d7a951eddda208f7 GIT binary patch literal 5686 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 dBi- + + + + + + +MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/bench_time.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
bench_time.h
+
+
+Go to the documentation of this file.
1/**
+
2******************************************************************************
+
3* @file bench_time.h
+
4* @brief Заголовочный файл для измерения времени между событиями
+
5******************************************************************************
+
6* @addtogroup BENCH_TIME Time measurement
+
7* @ingroup MYLIBS_DEFINES
+
8* @brief Библиотека для измерения времени/тиков между событиями
+
9* @details
+
10Поддерживает:
+
11- Многоканальные измерения (несколько независимых таймеров)
+
12- Платформонезависимый интерфейс
+
13- Измерение в тиках или временных единицах
+
14- Статистику измерений (мин/макс/среднее)
+
15- Настраиваемый размер тиков для каждого канала
+
16
+
17Параметры для конфигурации:
+
18- @ref BENCH_TIME_ENABLE - Включить бенч времени
+
19- @ref BENCH_TIME_MAX_CHANNELS - Максимальное количество каналов измерения (по умолчанию 8)
+
20
+
21@par Пример использования:
+
22@code
+
23#include "bench_time.h"
+
24
+
25// Инициализация
+
26BenchTime_Init();
+
27
+
28// Измерение с SysTick
+
29BenchTime_Start(0, HAL_GetTick, 0xFFFFFFFF);
+
30some_function();
+
31uint32_t time = BenchTime_End(0, HAL_GetTick);
+
32
+
33// Измерение с TIM2 (16-бит)
+
34BenchTime_Start(1, TIM2->CNT, 0xFFFF);
+
35fast_function();
+
36uint32_t time2 = BenchTime_End(1, TIM2->CNT);
+
37
+
38// Измерение с DWT цикловым счетчиком
+
39BenchTime_Start(2, DWT->CYCCNT, 0xFFFFFFFF);
+
40critical_function();
+
41uint32_t cycles = BenchTime_End(2, DWT->CYCCNT);
+
42
+
43// Многоканальное измерение
+
44BenchTime_Start(0, HAL_GetTick, 1000); // общее время
+
45BenchTime_Start(1, TIM3->CNT, 500); // часть 1
+
46
+
47// ... код 1
+
48
+
49uint32_t part1 = BenchTime_End(1, TIM3->CNT);
+
50BenchTime_Start(2, TIM4->CNT, 200); // часть 2
+
51
+
52// ... код 2
+
53
+
54uint32_t part2 = BenchTime_End(2, TIM4->CNT);
+
55uint32_t total = BenchTime_End(0, HAL_GetTick); // общее время
+
56
+
57// Статистика
+
58uint32_t min_time = BenchTime_GetMin(0);
+
59uint32_t max_time = BenchTime_GetMax(0);
+
60uint32_t avg_time = BenchTime_GetAverage(0);
+
61uint32_t count = BenchTime_GetCount(0);
+
62@endcode
+
63* @{
+
64*****************************************************************************/
+
65#ifndef __BENCH_TIME_H_
+
66#define __BENCH_TIME_H_
+
67
+
68#include "mylibs_defs.h"
+
69#include <stdint.h>
+
70
+
71#ifdef BENCH_TIME_ENABLE
+
72
+
73// Конфигурация библиотеки
+
74#ifndef BENCH_TIME_MAX_CHANNELS
+
75#define BENCH_TIME_MAX_CHANNELS 8 ///< Максимальное количество каналов измерения
+
76#endif
+
77
+
78/**
+
79 * @brief Структура статистики измерений
+
80 */
+
+
81typedef struct {
+
82 uint32_t min_ticks; ///< Минимальное время в тиках
+
83 uint32_t max_ticks; ///< Максимальное время в тиках
+
84 uint32_t total_ticks; ///< Суммарное время в тиках
+
85 uint32_t count; ///< Количество измерений
+
86 uint32_t last_ticks; ///< Последнее измеренное время
+ +
+
88
+
89/**
+
90 * @brief Структура канала измерения
+
91 */
+
+
92typedef struct {
+
93 uint32_t start_tick; ///< Время старта в тиках
+
94 uint32_t tick_period; ///< Период тиков для переполнения
+
95 uint32_t is_running; ///< Флаг активного измерения
+
96 BenchTimeStats_t stats; ///< Статистика измерений
+ +
+
98
+
99/**
+
100 * @brief Основная структура менеджера измерений
+
101 */
+
+
102typedef struct {
+
103 BenchTimeChannel_t channels[BENCH_TIME_MAX_CHANNELS]; ///< Каналы измерения
+ +
+
105
+
106static BenchTime_t hbt = {0}; ///< Внутренний экземпляр
+
107
+
108/**
+
109 * @brief Инициализация системы измерения времени
+
110 */
+
+
111static inline void BenchTime_Init(void) {
+
112 for (int i = 0; i < BENCH_TIME_MAX_CHANNELS; i++) {
+
113 hbt.channels[i].start_tick = 0;
+
114 hbt.channels[i].tick_period = 0xFFFFFFFF;
+
115 hbt.channels[i].is_running = 0;
+
116 hbt.channels[i].stats.min_ticks = 0xFFFFFFFF;
+
117 hbt.channels[i].stats.max_ticks = 0;
+
118 hbt.channels[i].stats.total_ticks = 0;
+
119 hbt.channels[i].stats.count = 0;
+
120 hbt.channels[i].stats.last_ticks = 0;
+
121 }
+
122}
+
+
123
+
124/**
+
125 * @brief Начало измерения на указанном канале
+
126 * @param channel Номер канала (0..BENCH_TIME_MAX_CHANNELS-1)
+
127 * @param ticks Источник тиков (например: HAL_GetTick(), TIM2->CNT, DWT->CYCCNT)
+
128 * @param tick_period Период тиков для переполнения
+
129 * @return 1 - успех, 0 - ошибка
+
130 */
+
+
131static inline uint32_t BenchTime_Start(uint8_t channel, uint32_t ticks, uint32_t tick_period) {
+
132 if (channel >= BENCH_TIME_MAX_CHANNELS) return 0;
+
133 if (hbt.channels[channel].is_running) return 0;
+
134
+
135 hbt.channels[channel].start_tick = ticks;
+
136 hbt.channels[channel].tick_period = tick_period;
+
137 hbt.channels[channel].is_running = 1;
+
138 return 1;
+
139}
+
+
140
+
141/**
+
142 * @brief Окончание измерения на указанном канале
+
143 * @param channel Номер канала (0..BENCH_TIME_MAX_CHANNELS-1)
+
144 * @param ticks Источник тиков (должен быть тот же что в Start)
+
145 * @return Измеренное время в тиках, 0 - в случае ошибки
+
146 */
+
+
147static inline uint32_t BenchTime_End(uint8_t channel, uint32_t ticks) {
+
148 if (channel >= BENCH_TIME_MAX_CHANNELS) return 0;
+
149 if (!hbt.channels[channel].is_running) return 0;
+
150
+
151 uint32_t end_tick = ticks;
+
152 uint32_t start_tick = hbt.channels[channel].start_tick;
+
153 uint32_t tick_period = hbt.channels[channel].tick_period;
+
154 uint32_t elapsed_ticks;
+
155
+
156 if (end_tick >= start_tick) {
+
157 elapsed_ticks = end_tick - start_tick;
+
158 } else {
+
159 elapsed_ticks = (tick_period - start_tick) + end_tick + 1;
+
160 }
+
161
+
162 if (elapsed_ticks > tick_period) {
+
163 elapsed_ticks = tick_period;
+
164 }
+
165
+
166 hbt.channels[channel].is_running = 0;
+
167
+
168 // Обновление статистики
+
169 BenchTimeStats_t* stats = &hbt.channels[channel].stats;
+
170 stats->last_ticks = elapsed_ticks;
+
171
+
172 if (elapsed_ticks < stats->min_ticks) {
+
173 stats->min_ticks = elapsed_ticks;
+
174 }
+
175
+
176 if (elapsed_ticks > stats->max_ticks) {
+
177 stats->max_ticks = elapsed_ticks;
+
178 }
+
179
+
180 stats->total_ticks += elapsed_ticks;
+
181 stats->count++;
+
182
+
183 return elapsed_ticks;
+
184}
+
+
185
+
186/**
+
187 * @brief Получение минимального времени измерения
+
188 */
+
+
189static inline uint32_t BenchTime_GetMin(uint8_t channel) {
+
190 if (channel >= BENCH_TIME_MAX_CHANNELS) return 0;
+
191 return hbt.channels[channel].stats.min_ticks;
+
192}
+
+
193
+
194/**
+
195 * @brief Получение максимального времени измерения
+
196 */
+
+
197static inline uint32_t BenchTime_GetMax(uint8_t channel) {
+
198 if (channel >= BENCH_TIME_MAX_CHANNELS) return 0;
+
199 return hbt.channels[channel].stats.max_ticks;
+
200}
+
+
201
+
202/**
+
203 * @brief Получение среднего времени измерения
+
204 */
+
+
205static inline uint32_t BenchTime_GetAverage(uint8_t channel) {
+
206 if (channel >= BENCH_TIME_MAX_CHANNELS) return 0;
+
207 BenchTimeStats_t* stats = &hbt.channels[channel].stats;
+
208 if (stats->count == 0) return 0;
+
209 return stats->total_ticks / stats->count;
+
210}
+
+
211
+
212/**
+
213 * @brief Получение количества измерений
+
214 */
+
+
215static inline uint32_t BenchTime_GetCount(uint8_t channel) {
+
216 if (channel >= BENCH_TIME_MAX_CHANNELS) return 0;
+
217 return hbt.channels[channel].stats.count;
+
218}
+
+
219
+
220/**
+
221 * @brief Получение последнего измеренного времени
+
222 */
+
+
223static inline uint32_t BenchTime_GetLast(uint8_t channel) {
+
224 if (channel >= BENCH_TIME_MAX_CHANNELS) return 0;
+
225 return hbt.channels[channel].stats.last_ticks;
+
226}
+
+
227
+
228/**
+
229 * @brief Сброс статистики для канала
+
230 */
+
+
231static inline void BenchTime_ResetStats(uint8_t channel) {
+
232 if (channel >= BENCH_TIME_MAX_CHANNELS) return;
+
233 BenchTimeStats_t* stats = &hbt.channels[channel].stats;
+
234 stats->min_ticks = 0xFFFFFFFF;
+
235 stats->max_ticks = 0;
+
236 stats->total_ticks = 0;
+
237 stats->count = 0;
+
238 stats->last_ticks = 0;
+
239}
+
+
240#else //BENCH_TIME_ENABLE
+
241
+
242#define BenchTime_Init()
+
243#define BenchTime_Start(channel, ticks, tick_period) 0
+
244#define BenchTime_End(channel, ticks) 0
+
245#define BenchTime_GetMin(channel) 0
+
246#define BenchTime_GetMax(channel) 0
+
247#define BenchTime_GetAverage(channel) 0
+
248#define BenchTime_GetCount(channel) 0
+
249#define BenchTime_GetLast(channel) 0
+
250#define BenchTime_ResetStats(channel)
+
251
+
252#endif //BENCH_TIME_ENABLE
+
253
+
254#endif // __BENCH_TIME_H_
+
255
+
256/** BENCH_TIME
+
257 * @}
+
258 */
+
static uint32_t BenchTime_GetMax(uint8_t channel)
Получение максимального времени измерения
Definition bench_time.h:197
+
static uint32_t BenchTime_GetAverage(uint8_t channel)
Получение среднего времени измерения
Definition bench_time.h:205
+
static uint32_t BenchTime_GetMin(uint8_t channel)
Получение минимального времени измерения
Definition bench_time.h:189
+
static void BenchTime_ResetStats(uint8_t channel)
Сброс статистики для канала
Definition bench_time.h:231
+
static uint32_t BenchTime_End(uint8_t channel, uint32_t ticks)
Окончание измерения на указанном канале
Definition bench_time.h:147
+
static BenchTime_t hbt
Внутренний экземпляр
Definition bench_time.h:106
+
static void BenchTime_Init(void)
Инициализация системы измерения времени
Definition bench_time.h:111
+
static uint32_t BenchTime_GetCount(uint8_t channel)
Получение количества измерений
Definition bench_time.h:215
+
static uint32_t BenchTime_Start(uint8_t channel, uint32_t ticks, uint32_t tick_period)
Начало измерения на указанном канале
Definition bench_time.h:131
+
static uint32_t BenchTime_GetLast(uint8_t channel)
Получение последнего измеренного времени
Definition bench_time.h:223
+
#define BENCH_TIME_MAX_CHANNELS
Максимальное количество каналов измерения
+
Заголочный файл для дефайнов библиотеки MyLibsGeneral.
+
Основная структура менеджера измерений
Definition bench_time.h:102
+
BenchTimeChannel_t channels[16]
Каналы измерения
Definition bench_time.h:103
+
Структура канала измерения
Definition bench_time.h:92
+
uint32_t tick_period
Период тиков для переполнения
Definition bench_time.h:94
+
uint32_t is_running
Флаг активного измерения
Definition bench_time.h:95
+
BenchTimeStats_t stats
Статистика измерений
Definition bench_time.h:96
+
uint32_t start_tick
Время старта в тиках
Definition bench_time.h:93
+
Структура статистики измерений
Definition bench_time.h:81
+
uint32_t total_ticks
Суммарное время в тиках
Definition bench_time.h:84
+
uint32_t last_ticks
Последнее измеренное время
Definition bench_time.h:86
+
uint32_t min_ticks
Минимальное время в тиках
Definition bench_time.h:82
+
uint32_t max_ticks
Максимальное время в тиках
Definition bench_time.h:83
+
uint32_t count
Количество измерений
Definition bench_time.h:85
+
+
+
+ + + + diff --git a/Doc/html/classes.html b/Doc/html/classes.html index 29c6937..0b59e27 100644 --- a/Doc/html/classes.html +++ b/Doc/html/classes.html @@ -100,14 +100,14 @@ $(function(){initNavTree('classes.html','',''); });
Class Index
-
E | G | H | R | S | T | U
+
B | G | H | R | S | T | U
-
E
-
EvolveOptimizer_t
+
B
+
BenchTime_t
BenchTimeChannel_t
BenchTimeStats_t
G
-
GPIO_LEDTypeDef
GPIO_SwitchTypeDef
+
GenOptimizer_t
GPIO_LEDTypeDef
GPIO_SwitchTypeDef
H
HF_StackFrame_t
diff --git a/Doc/html/dir_8eb68c124db7670c3cb56141b10519ea.html b/Doc/html/dir_8eb68c124db7670c3cb56141b10519ea.html index b7a3c97..c4bebfb 100644 --- a/Doc/html/dir_8eb68c124db7670c3cb56141b10519ea.html +++ b/Doc/html/dir_8eb68c124db7670c3cb56141b10519ea.html @@ -116,10 +116,12 @@ $(function(){initNavTree('dir_8eb68c124db7670c3cb56141b10519ea.html','',''); }); + + - - + + diff --git a/Doc/html/dir_8eb68c124db7670c3cb56141b10519ea.js b/Doc/html/dir_8eb68c124db7670c3cb56141b10519ea.js index 2b5dc8a..a702be5 100644 --- a/Doc/html/dir_8eb68c124db7670c3cb56141b10519ea.js +++ b/Doc/html/dir_8eb68c124db7670c3cb56141b10519ea.js @@ -1,7 +1,8 @@ var dir_8eb68c124db7670c3cb56141b10519ea = [ + [ "bench_time.h", "bench__time_8h.html", "bench__time_8h" ], [ "bit_access.h", "bit__access_8h.html", "bit__access_8h" ], - [ "evolve_optimizer.h", "evolve__optimizer_8h.html", "evolve__optimizer_8h" ], + [ "gen_optimizer.h", "gen__optimizer_8h.html", "gen__optimizer_8h" ], [ "mylibs_config.h", "mylibs__config_8h.html", "mylibs__config_8h" ], [ "mylibs_defs.h", "mylibs__defs_8h.html", "mylibs__defs_8h" ], [ "mylibs_include.h", "mylibs__include_8h.html", null ], diff --git a/Doc/html/doxygen_crawl.html b/Doc/html/doxygen_crawl.html index 671925d..09ed1dc 100644 --- a/Doc/html/doxygen_crawl.html +++ b/Doc/html/doxygen_crawl.html @@ -11,6 +11,8 @@ + + @@ -23,11 +25,11 @@ - - + + @@ -48,11 +50,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -70,18 +100,20 @@ - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -92,9 +124,9 @@ + - @@ -261,19 +293,22 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -288,6 +323,19 @@ + + + + + + + + + + + + + diff --git a/Doc/html/evolve__optimizer_8h.js b/Doc/html/evolve__optimizer_8h.js deleted file mode 100644 index 31f5538..0000000 --- a/Doc/html/evolve__optimizer_8h.js +++ /dev/null @@ -1,10 +0,0 @@ -var evolve__optimizer_8h = -[ - [ "PARAM_SCALE", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga83abbcabaff9111c03ae2475ee72ea3e", null ], - [ "PARAM_UNSCALE", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gaa1d5510fe5f0bd989473f3ebe324bde3", null ], - [ "EVOLVE_MUTATION_MIN_PCT", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga2f2b1be34ad4eb1bf3267237200cd6c6", null ], - [ "EVOLVE_MUTATION_MAX_PCT", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga861c1c6a503c21441abcec0d57b848bc", null ], - [ "ELOVLE_N_ELITE_CANDIDATE", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga38607e23d9234524bc7de5869b15b8eb", null ], - [ "EvolveOptimizer_Init", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga4e3ea118b5b9068619c57724a925ba21", null ], - [ "EvolveOptimizer_Step", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gaef44a1f3298514569cc2b396a92101ef", null ] -]; \ No newline at end of file diff --git a/Doc/html/evolve__optimizer_8h__dep__incl.md5 b/Doc/html/evolve__optimizer_8h__dep__incl.md5 deleted file mode 100644 index 77ad751..0000000 --- a/Doc/html/evolve__optimizer_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -424cb7f34817e542ea5f5660027a6b81 \ No newline at end of file diff --git a/Doc/html/evolve__optimizer_8h__dep__incl.png b/Doc/html/evolve__optimizer_8h__dep__incl.png deleted file mode 100644 index ba778ca17729b4536ecd81eeec68f941f1c0e84e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2773 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 EC$5QFiU0rr diff --git a/Doc/html/evolve__optimizer_8h__incl.md5 b/Doc/html/evolve__optimizer_8h__incl.md5 deleted file mode 100644 index 37ffe87..0000000 --- a/Doc/html/evolve__optimizer_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -715956b53baa360ead244690f04d1978 \ No newline at end of file diff --git a/Doc/html/evolve__optimizer_8h__incl.png b/Doc/html/evolve__optimizer_8h__incl.png deleted file mode 100644 index 4a506cd295142b28f8a909dc8689d60020a75a39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6184 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 diff --git a/Doc/html/files.html b/Doc/html/files.html index 97cb96a..cc93eeb 100644 --- a/Doc/html/files.html +++ b/Doc/html/files.html @@ -104,27 +104,28 @@ $(function(){initNavTree('files.html','',''); });
[detail level 123]

Files

 
bench_time.h
 Заголовочный файл для измерения времени между событиями
 
bit_access.h
 Заголочный файл для дефайнов битового доступа.
 
evolve_optimizer.h
 Заголовочный файл для адаптивного подбора параметров
 
gen_optimizer.h
 Заголовочный файл для адаптивного подбора параметров
 
mylibs_config.h
 Конфигурации для библиотек MyLibs.
 
mylibs_defs.h
- - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + +
 
MyLibs
 
Inc
 
bit_access.h
Заголочный файл для дефайнов битового доступа
 
evolve_optimizer.h
Заголовочный файл для адаптивного подбора параметров
 
mylibs_config.h
Конфигурации для библиотек MyLibs
 
mylibs_defs.h
Заголочный файл для дефайнов библиотеки MyLibsGeneral
 
mylibs_include.h
Заголочный файл для всех библиотек
 
trace.h
Заголочный файл для работы с трассировкой
 
trackers.h
Заголочный файл для работы с трекерами Trackers defines
 
STM32_General
 
Inc
 
__general_flash.h
 
general_gpio.h
Заголовочный файл для модуля инициализации портов и работы с ними
 
general_spi.h
Заголовочный файл для модуля инициализации SPI
 
general_tim.h
Заголовочный файл для модуля инициализации таймеров и работы с ними
 
general_uart.h
Заголовочный файл для модуля инициализации UART
 
Src
 
__general_flash.c
 
general_gpio.c
Модуль для инициализации портов и работы с ними
 
general_spi.c
Модуль для инициализации SPI
 
general_tim.c
Модуль для инициализации таймеров и работы с ними
 
general_uart.c
Модуль для инициализации UART
 
mainpage.h
 
bench_time.h
Заголовочный файл для измерения времени между событиями
 
bit_access.h
Заголочный файл для дефайнов битового доступа
 
gen_optimizer.h
Заголовочный файл для адаптивного подбора параметров
 
mylibs_config.h
Конфигурации для библиотек MyLibs
 
mylibs_defs.h
Заголочный файл для дефайнов библиотеки MyLibsGeneral
 
mylibs_include.h
Заголочный файл для всех библиотек
 
trace.h
Заголочный файл для работы с трассировкой
 
trackers.h
Заголочный файл для работы с трекерами Trackers defines
 
STM32_General
 
Inc
 
__general_flash.h
 
general_gpio.h
Заголовочный файл для модуля инициализации портов и работы с ними
 
general_spi.h
Заголовочный файл для модуля инициализации SPI
 
general_tim.h
Заголовочный файл для модуля инициализации таймеров и работы с ними
 
general_uart.h
Заголовочный файл для модуля инициализации UART
 
Src
 
__general_flash.c
 
general_gpio.c
Модуль для инициализации портов и работы с ними
 
general_spi.c
Модуль для инициализации SPI
 
general_tim.c
Модуль для инициализации таймеров и работы с ними
 
general_uart.c
Модуль для инициализации UART
 
mainpage.h
diff --git a/Doc/html/functions.html b/Doc/html/functions.html index 998b50d..9de9c63 100644 --- a/Doc/html/functions.html +++ b/Doc/html/functions.html @@ -100,11 +100,13 @@ $(function(){initNavTree('functions.html','',''); });
Here is a list of all documented class members with links to the class documentation for each member:

- c -

@@ -122,8 +124,8 @@ $(function(){initNavTree('functions.html','',''); });

- g -

+

- i -

+ +

- l -

- m -

- n -

@@ -189,10 +199,12 @@ $(function(){initNavTree('functions.html','',''); });
  • sConfig : TIM_EncoderTypeDef
  • size : RTT_FlashHeader_t
  • sMasterConfig : TIM_SettingsTypeDef
  • -
  • sorted_idx : EvolveOptimizer_t
  • +
  • sorted_idx : GenOptimizer_t
  • sSlaveConfig : TIM_SettingsTypeDef
  • -
  • stability : EvolveOptimizer_t
  • +
  • stability : GenOptimizer_t
  • +
  • start_tick : BenchTimeChannel_t
  • state : GPIO_LEDTypeDef
  • +
  • stats : BenchTimeChannel_t
  • sTickBasePrescaler : TIM_SettingsTypeDef
  • sTickBaseUS : TIM_SettingsTypeDef
  • sTimAHBFreqMHz : TIM_SettingsTypeDef
  • @@ -209,6 +221,8 @@ $(function(){initNavTree('functions.html','',''); });

    - t -

    diff --git a/Doc/html/functions_vars.html b/Doc/html/functions_vars.html index 5b72a00..636c5df 100644 --- a/Doc/html/functions_vars.html +++ b/Doc/html/functions_vars.html @@ -100,11 +100,13 @@ $(function(){initNavTree('functions_vars.html','',''); });
    Here is a list of all documented variables with links to the class documentation for each member:

    - c -

    @@ -122,8 +124,8 @@ $(function(){initNavTree('functions_vars.html','',''); });

    - g -

    +

    - i -

    + +

    - l -

    - m -

    - n -

    @@ -189,10 +199,12 @@ $(function(){initNavTree('functions_vars.html','',''); });
  • sConfig : TIM_EncoderTypeDef
  • size : RTT_FlashHeader_t
  • sMasterConfig : TIM_SettingsTypeDef
  • -
  • sorted_idx : EvolveOptimizer_t
  • +
  • sorted_idx : GenOptimizer_t
  • sSlaveConfig : TIM_SettingsTypeDef
  • -
  • stability : EvolveOptimizer_t
  • +
  • stability : GenOptimizer_t
  • +
  • start_tick : BenchTimeChannel_t
  • state : GPIO_LEDTypeDef
  • +
  • stats : BenchTimeChannel_t
  • sTickBasePrescaler : TIM_SettingsTypeDef
  • sTickBaseUS : TIM_SettingsTypeDef
  • sTimAHBFreqMHz : TIM_SettingsTypeDef
  • @@ -209,6 +221,8 @@ $(function(){initNavTree('functions_vars.html','',''); });

    - t -

    diff --git a/Doc/html/evolve__optimizer_8h.html b/Doc/html/gen__optimizer_8h.html similarity index 71% rename from Doc/html/evolve__optimizer_8h.html rename to Doc/html/gen__optimizer_8h.html index 620ae77..98bdcca 100644 --- a/Doc/html/evolve__optimizer_8h.html +++ b/Doc/html/gen__optimizer_8h.html @@ -5,7 +5,7 @@ -MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/evolve_optimizer.h File Reference +MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/gen_optimizer.h File Reference @@ -71,7 +71,7 @@ $(function() {
    @@ -97,7 +97,7 @@ $(function(){initNavTree('evolve__optimizer_8h.html','',''); });
    -
    evolve_optimizer.h File Reference
    +
    gen_optimizer.h File Reference
    @@ -106,12 +106,12 @@ $(function(){initNavTree('evolve__optimizer_8h.html','',''); });
    #include "mylibs_defs.h"
    #include <stdint.h>
    #include <stdlib.h>
    -
    Include dependency graph for evolve_optimizer.h:
    +
    Include dependency graph for gen_optimizer.h:
    -

    Go to the source code of this file.

    +

    Go to the source code of this file.

    - - + +

    Classes

    struct  EvolveOptimizer_t
     Структура эволюционного оптимизатора More...
    struct  GenOptimizer_t
     Структура эволюционного оптимизатора More...
    - + - + - - - - - + + + + +

    Macros

    #define PARAM_SCALE(x, min_val, max_val)
    #define PARAM_SCALE(x, min_val, max_val)
     Линейное масштабирование x из диапазона [min_val, max_val] в диапазон [0, 1)
    #define PARAM_UNSCALE(val, min_val, max_val)
    #define PARAM_UNSCALE(val, min_val, max_val)
     Обратное линейное масштабирование значения из [0, 1) в диапазон [min_val, max_val].
    #define EVOLVE_MUTATION_MIN_PCT   10
     Минимальная мутация (в процентах от Loss)
    #define EVOLVE_MUTATION_MAX_PCT   100
     Максимальная мутация (в процентах от Loss)
    #define ELOVLE_N_ELITE_CANDIDATE   2
    #define GEN_MUTATION_MIN_PCT   10
     Минимальная мутация (в процентах от Loss)
    #define GEN_MUTATION_MAX_PCT   100
     Максимальная мутация (в процентах от Loss)
    #define ELOVLE_N_ELITE_CANDIDATE   2
     Количество кандидатов, которые проходят в поколение без изменений (по умолчанию 2)
    - - - - + + + +

    Functions

    __STATIC_INLINE int EvolveOptimizer_Init (EvolveOptimizer_t *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, float mutation_amp, float *start_params)
     Инициализация эволюционного оптимизатора.
    __STATIC_INLINE int EvolveOptimizer_Step (EvolveOptimizer_t *opt, float *params, float loss)
     Один шаг эволюционного оптимизатора.
    static int GenOptimizer_Init (GenOptimizer_t *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, float mutation_amp, float *start_params)
     Инициализация эволюционного оптимизатора.
    static int GenOptimizer_Step (GenOptimizer_t *opt, float *params, float loss)
     Один шаг эволюционного оптимизатора.

    Detailed Description

    Заголовочный файл для адаптивного подбора параметров

    -

    Definition in file evolve_optimizer.h.

    +

    Definition in file gen_optimizer.h.

    @@ -97,15 +97,15 @@ $(function(){initNavTree('evolve__optimizer_8h_source.html','',''); });
    -
    evolve_optimizer.h
    +
    gen_optimizer.h
    -Go to the documentation of this file.
    1/**
    +Go to the documentation of this file.
    1/**
    2******************************************************************************
    -
    3* @file evolve_optimizer.h
    +
    3* @file gen_optimizer.h
    4* @brief Заголовочный файл для адаптивного подбора параметров
    5******************************************************************************
    -
    6* @addtogroup EVOLVE_OPTIMIZER Evolve optimizer
    +
    6* @addtogroup GEN_OPTIMIZER Genetic optimizer
    7* @ingroup MYLIBS_DEFINES
    8* @brief Библиотека для эволюционного подбора параметров
    9* @details
    @@ -117,24 +117,24 @@ $(function(){initNavTree('evolve__optimizer_8h_source.html','',''); });
    15
    16
    17Параметры для конфигурации:
    -
    18- @ref ENABLE_EVOLVE_OPTIMIZATION - Включить оптимизацию параметров
    -
    19 Если библиотека отключена @ref ENABLE_EVOLVE_OPTIMIZATION, то вставляются
    +
    18- @ref GEN_OPTIMIZATION_ENABLE - Включить оптимизацию параметров
    +
    19 Если библиотека отключена @ref GEN_OPTIMIZATION_ENABLE, то вставляются
    20 заглушки, никак не влияющие на параметры и остальную программу
    -
    21- @ref EVOLVE_MAX_PARAMS - Максимальное количество параметров
    -
    22- @ref EVOLVE_MAX_CANDIDATES - Максимальное количество кандидатов для обучения
    -
    23- (опционально) @ref EVOLVE_MUTATION_MIN_PCT - Минимальная мутация в процентах от Loss (по умолчанию 10%)
    -
    24- (опционально) @ref EVOLVE_MUTATION_MAX_PCT - Максимальная мутация в процентах от Loss (по умолчанию 100%)
    +
    21- @ref GEN_MAX_PARAMS - Максимальное количество параметров
    +
    22- @ref GEN_MAX_CANDIDATES - Максимальное количество кандидатов для обучения
    +
    23- (опционально) @ref GEN_MUTATION_MIN_PCT - Минимальная мутация в процентах от Loss (по умолчанию 10%)
    +
    24- (опционально) @ref GEN_MUTATION_MAX_PCT - Максимальная мутация в процентах от Loss (по умолчанию 100%)
    25- (опционально) @ref ELOVLE_N_ELITE_CANDIDATE - Количество кандидатов, которые проходят в поколение без изменений
    26
    27@par Пример использования:
    28@code
    -
    29#include "evolve_optimizer.h"
    +
    29#include "gen_optimizer.h"
    30#define N_PARAMS 4
    31#define N_CANDIDATES 100
    32#define N_BEST 10
    33#define MUTATION 0.1f
    34float params[N_PARAMS];
    -
    35EvolveOptimizer_t optimizer;
    +
    35GenOptimizer_t optimizer;
    36
    37// Формирование параметров
    38uint16_t param_u16 = 800;
    @@ -147,11 +147,11 @@ $(function(){initNavTree('evolve__optimizer_8h_source.html','',''); });
    45params[3] = PARAM_SCALE(param_i16, 500.0f, 5000.0f);
    46
    47// Инициалиазция
    -
    48EvolveOptimizer_Init(&optimizer, N_PARAMS, N_CANDIDATES, N_BEST, MUTATION, params);
    +
    48GenOptimizer_Init(&optimizer, N_PARAMS, N_CANDIDATES, N_BEST, MUTATION, params);
    49
    50// Шаг эволюции
    51float loss = calc_loss(); // расчет эффективности параметров (от 0 до 1)
    -
    52EvolveOptimizer_Step(&optimizer, params, loss);
    +
    52GenOptimizer_Step(&optimizer, params, loss);
    53
    54// Взятие следующих для эволюции параметров
    55param_u16 = PARAM_UNSCALE(params[0], 0.0f, 1000.0f);
    @@ -161,19 +161,19 @@ $(function(){initNavTree('evolve__optimizer_8h_source.html','',''); });
    59@endcode
    60* @{
    61*****************************************************************************/
    -
    62#ifndef __EVOLVE_OPTIMIZER_H_
    -
    63#define __EVOLVE_OPTIMIZER_H_
    +
    62#ifndef __GEN_OPTIMIZER_H_
    +
    63#define __GEN_OPTIMIZER_H_
    64
    65#include "mylibs_defs.h"
    66#include <stdint.h>
    67#include <stdlib.h>
    68
    -
    69#ifdef ENABLE_EVOLVE_OPTIMIZATION
    +
    69#ifdef GEN_OPTIMIZATION_ENABLE
    70/**
    71 * @brief Линейное масштабирование x из диапазона [min_val, max_val] в диапазон [0, 1)
    72 */
    -
    73#define PARAM_SCALE(x, min_val, max_val) \
    +
    73#define PARAM_SCALE(x, min_val, max_val) \
    74(((float)(x) - (float)(min_val)) / ((float)(max_val) - (float)(min_val)))
    75
    @@ -181,7 +181,7 @@ $(function(){initNavTree('evolve__optimizer_8h_source.html','',''); });
    77 * @brief Обратное линейное масштабирование значения из [0, 1) в диапазон [min_val, max_val]
    78 */
    -
    79#define PARAM_UNSCALE(val, min_val, max_val) \
    +
    79#define PARAM_UNSCALE(val, min_val, max_val) \
    80(((float)(val)) * ((float)(max_val) - (float)(min_val)) + (float)(min_val))
    81
    @@ -191,14 +191,14 @@ $(function(){initNavTree('evolve__optimizer_8h_source.html','',''); });
    85
    86
    87
    -
    88#ifndef EVOLVE_MUTATION_MIN_PCT
    -
    89#define EVOLVE_MUTATION_MIN_PCT 10 ///< Минимальная мутация (в процентах от Loss)
    +
    88#ifndef GEN_MUTATION_MIN_PCT
    +
    89#define GEN_MUTATION_MIN_PCT 10 ///< Минимальная мутация (в процентах от Loss)
    90#endif
    -
    91#ifndef EVOLVE_MUTATION_MAX_PCT
    -
    92#define EVOLVE_MUTATION_MAX_PCT 100 ///< Максимальная мутация (в процентах от Loss)
    +
    91#ifndef GEN_MUTATION_MAX_PCT
    +
    92#define GEN_MUTATION_MAX_PCT 100 ///< Максимальная мутация (в процентах от Loss)
    93#endif
    94#ifndef ELOVLE_N_ELITE_CANDIDATE
    -
    95#define ELOVLE_N_ELITE_CANDIDATE 2 ///< Количество кандидатов, которые проходят в поколение без изменений (по умолчанию 2)
    +
    95#define ELOVLE_N_ELITE_CANDIDATE 2 ///< Количество кандидатов, которые проходят в поколение без изменений (по умолчанию 2)
    96#endif
    97
    98
    @@ -206,40 +206,40 @@ $(function(){initNavTree('evolve__optimizer_8h_source.html','',''); });
    100 * @brief Структура эволюционного оптимизатора
    101 */
    -
    102typedef struct {
    -
    103 float stability; ///< Коэффициент насколько стабильная популяция (0..1)(@ref n_cand)
    +
    102typedef struct {
    +
    103 float stability; ///< Коэффициент насколько стабильная популяция (0..1)(@ref n_cand)
    104
    -
    105 uint16_t n_params; ///< Количество параметров
    -
    106 uint16_t n_cand; ///< Количество кандидатов в популяции
    -
    107 uint16_t n_best; ///< Количество лучших, усредняемых
    -
    108 float mutation_amp; ///< Амплитуда мутации (0..1)
    +
    105 uint16_t n_params; ///< Количество параметров
    +
    106 uint16_t n_cand; ///< Количество кандидатов в популяции
    +
    107 uint16_t n_best; ///< Количество лучших, усредняемых
    +
    108 float mutation_amp; ///< Амплитуда мутации (0..1)
    109
    -
    110 uint16_t cand_index; ///< Индекс кандидата для обработки
    -
    111 uint16_t gen_index; ///< Индекс популяции
    +
    110 uint16_t cand_index; ///< Индекс текущего кандидата
    +
    111 uint16_t gen_index; ///< Индекс популяции
    112
    113 //INTERNAL
    -
    114 float gen_mut; ///< Амплитуда мутации у текущей популяции
    +
    114 float gen_mut; ///< Амплитуда мутации у текущей популяции
    115
    -
    116 float loss[EVOLVE_MAX_CANDIDATES]; ///< Loss для каждого кандидата
    -
    117 float candidates[EVOLVE_MAX_CANDIDATES][EVOLVE_MAX_PARAMS]; ///< Параметры кандидатов
    -
    118 uint16_t sorted_idx[EVOLVE_MAX_CANDIDATES]; ///< Индексы отсортированных кандидатов
    - +
    116 float loss[GEN_MAX_CANDIDATES]; ///< Loss для каждого кандидата
    +
    117 float candidates[GEN_MAX_CANDIDATES][GEN_MAX_PARAMS]; ///< Параметры кандидатов
    +
    118 uint16_t sorted_idx[GEN_MAX_CANDIDATES]; ///< Индексы отсортированных кандидатов
    +
    120
    121
    122
    123/**
    -
    124 * @cond EVOLVE_INTERNAL
    +
    124 * @cond GEN_INTERNAL
    125 */
    126
    127// Вспомогательный указатель для сортировки
    -
    128static EvolveOptimizer_t *g_sort_opt; // глобальный указатель на текущий оптимизатор
    +
    128static GenOptimizer_t *g_sort_opt; // глобальный указатель на текущий оптимизатор
    129
    130// функция условия сортировки
    131static int cmp_idx(const void *a, const void *b) {
    -
    132 if (g_sort_opt->loss[*(const uint16_t*)a] < g_sort_opt->loss[*(const uint16_t*)b])
    +
    132 if (g_sort_opt->loss[*(const uint16_t*)a] < g_sort_opt->loss[*(const uint16_t*)b])
    133 return -1;
    -
    134 if (g_sort_opt->loss[*(const uint16_t*)a] > g_sort_opt->loss[*(const uint16_t*)b])
    +
    134 if (g_sort_opt->loss[*(const uint16_t*)a] > g_sort_opt->loss[*(const uint16_t*)b])
    135 return 1;
    136 return 0;
    137}
    @@ -261,7 +261,7 @@ $(function(){initNavTree('evolve__optimizer_8h_source.html','',''); });
    153 * -1 — если ошибка
    154 */
    - +
    156 uint16_t n_params,
    157 uint16_t n_cand,
    158 uint16_t n_best,
    @@ -271,24 +271,24 @@ $(function(){initNavTree('evolve__optimizer_8h_source.html','',''); });
    162 if((opt == NULL) || (start_params == NULL))
    163 return -1;
    164
    -
    165 if(n_params > EVOLVE_MAX_PARAMS)
    +
    165 if(n_params > GEN_MAX_PARAMS)
    166 return -1;
    -
    167 opt->n_params = n_params;
    +
    167 opt->n_params = n_params;
    168
    -
    169 if(n_cand > EVOLVE_MAX_CANDIDATES)
    +
    169 if(n_cand > GEN_MAX_CANDIDATES)
    170 return -1;
    -
    171 opt->n_cand = n_cand;
    +
    171 opt->n_cand = n_cand;
    172
    -
    173 if(n_best > EVOLVE_MAX_CANDIDATES/2)
    +
    173 if(n_best > GEN_MAX_CANDIDATES/2)
    174 return -1;
    -
    175 opt->n_best = n_best;
    +
    175 opt->n_best = n_best;
    176
    177
    178 if((mutation_amp > 1) || (mutation_amp < 0))
    179 return -1;
    180 if(mutation_amp <= 0.001f)
    181 mutation_amp = 0.001f;
    -
    182 opt->mutation_amp = mutation_amp;
    +
    182 opt->mutation_amp = mutation_amp;
    183
    184 uint32_t seed = local_time();
    185#ifdef ADC1
    @@ -302,15 +302,15 @@ $(function(){initNavTree('evolve__optimizer_8h_source.html','',''); });
    193 float base = start_params[j];
    194 float inv_randmax = 1.0f / (float)RAND_MAX;
    195 float noise = ((float)rand() * inv_randmax * 2.0f - 1.0f) * mutation_amp;
    -
    196 opt->candidates[i][j] = base + noise;
    -
    197 if (opt->candidates[i][j] < 0.0f) opt->candidates[i][j] = 0.0f;
    -
    198 if (opt->candidates[i][j] > 1.0f) opt->candidates[i][j] = 1.0f;
    +
    196 opt->candidates[i][j] = base + noise;
    +
    197 if (opt->candidates[i][j] < 0.0f) opt->candidates[i][j] = 0.0f;
    +
    198 if (opt->candidates[i][j] > 1.0f) opt->candidates[i][j] = 1.0f;
    199 }
    -
    200 opt->loss[i] = 0.0f;
    +
    200 opt->loss[i] = 0.0f;
    201 }
    202
    -
    203 opt->cand_index = 0;
    -
    204 opt->gen_index = 0;
    +
    203 opt->cand_index = 0;
    +
    204 opt->gen_index = 0;
    205 return 0;
    206}
    @@ -333,50 +333,50 @@ $(function(){initNavTree('evolve__optimizer_8h_source.html','',''); });
    223 * Надо убедится что только один экземпляр функции запущен в момент времени
    224 */
    - +
    226 float* params,
    227 float loss)
    228{
    229 if((opt == NULL) || (params == NULL))
    230 return -1;
    231
    -
    232 uint16_t n_params = opt->n_params;
    -
    233 if(n_params > EVOLVE_MAX_PARAMS)
    +
    232 uint16_t n_params = opt->n_params;
    +
    233 if(n_params > GEN_MAX_PARAMS)
    234 return -1;
    235
    -
    236 uint16_t n_cand = opt->n_cand;
    -
    237 if(n_cand > EVOLVE_MAX_CANDIDATES)
    +
    236 uint16_t n_cand = opt->n_cand;
    +
    237 if(n_cand > GEN_MAX_CANDIDATES)
    238 return -1;
    239
    -
    240 uint16_t n_best = opt->n_best;
    -
    241 if(n_best > EVOLVE_MAX_CANDIDATES/2)
    +
    240 uint16_t n_best = opt->n_best;
    +
    241 if(n_best > GEN_MAX_CANDIDATES/2)
    242 return -1;
    243
    -
    244 float mut = opt->mutation_amp;
    +
    244 float mut = opt->mutation_amp;
    245 if((mut > 1) ||(mut < 0))
    246 return -1;
    247
    248 // 1. Сохраняем loss текущего кандидата
    -
    249 opt->loss[opt->cand_index] = loss;
    -
    250 opt->cand_index++;
    +
    249 opt->loss[opt->cand_index] = loss;
    +
    250 opt->cand_index++;
    251
    -
    252 if (opt->cand_index >= n_cand) {
    +
    252 if (opt->cand_index >= n_cand) {
    253 // 2. Сортируем текущее поколение по loss
    -
    254 for(uint16_t i = 0; i < opt->n_cand; i++)
    -
    255 opt->sorted_idx[i] = i;
    +
    254 for(uint16_t i = 0; i < opt->n_cand; i++)
    +
    255 opt->sorted_idx[i] = i;
    256
    257 g_sort_opt = opt;
    -
    258 qsort(opt->sorted_idx, opt->n_cand, sizeof(uint16_t), cmp_idx);
    +
    258 qsort(opt->sorted_idx, opt->n_cand, sizeof(uint16_t), cmp_idx);
    259 g_sort_opt = NULL;
    260
    261 // --- Адаптивная мутация в зависимости от Loss ---
    -
    262 float best_loss = opt->loss[opt->sorted_idx[0]];
    -
    263 float worst_loss = opt->loss[opt->sorted_idx[opt->n_cand - 1]];
    +
    262 float best_loss = opt->loss[opt->sorted_idx[0]];
    +
    263 float worst_loss = opt->loss[opt->sorted_idx[opt->n_cand - 1]];
    264 float diff = worst_loss - best_loss;
    265
    266 float sum_loss = 0.0f;
    267 for (uint16_t i = 0; i < n_cand; i++)
    -
    268 sum_loss += opt->loss[i];
    +
    268 sum_loss += opt->loss[i];
    269 float avg_loss = sum_loss / (float)n_cand;
    270
    271
    @@ -387,47 +387,47 @@ $(function(){initNavTree('evolve__optimizer_8h_source.html','',''); });
    276 // Записываем стабильность популяции в структуру
    277 if(diff < 0.0f) diff = 0.0f;
    278 if(diff > 1.0f) diff = 1.0f;
    -
    279 opt->stability = (1.0f - worst_loss) * (1.0f - (worst_loss - best_loss));
    -
    280 if(opt->stability < 0.0f) opt->stability = 0.0f;
    -
    281 if(opt->stability > 1.0f) opt->stability = 1.0f;
    +
    279 opt->stability = (1.0f - worst_loss) * (1.0f - (worst_loss - best_loss));
    +
    280 if(opt->stability < 0.0f) opt->stability = 0.0f;
    +
    281 if(opt->stability > 1.0f) opt->stability = 1.0f;
    282
    -
    283 float mut_pct = EVOLVE_MUTATION_MIN_PCT +
    - +
    283 float mut_pct = GEN_MUTATION_MIN_PCT +
    +
    285 float adaptive_mut = mut * (mut_pct / 100.0f);
    286 if (adaptive_mut < 0.0001f) adaptive_mut = 0.0001f;
    -
    287 opt->gen_mut = adaptive_mut;
    +
    287 opt->gen_mut = adaptive_mut;
    288
    289 // 3. Генерируем новое поколение
    -
    290 uint16_t n_elite = ELOVLE_N_ELITE_CANDIDATE;
    +
    290 uint16_t n_elite = ELOVLE_N_ELITE_CANDIDATE;
    291 for (uint16_t c = 0; c < n_cand; c++) {
    292 if (c < n_elite) {
    293 for (uint16_t i = 0; i < n_params; i++)
    -
    294 opt->candidates[c][i] = opt->candidates[opt->sorted_idx[c]][i];
    -
    295 opt->loss[c] = 0.0f;
    +
    294 opt->candidates[c][i] = opt->candidates[opt->sorted_idx[c]][i];
    +
    295 opt->loss[c] = 0.0f;
    296 } else {
    297 for (uint16_t i = 0; i < n_params; i++) {
    298 float inv_randmax = 1.0f / (float)RAND_MAX;
    299 float noise = ((float)rand() * inv_randmax * 2.0f - 1.0f) * adaptive_mut;
    -
    300 uint16_t parent = opt->sorted_idx[rand() % opt->n_best];
    -
    301 opt->candidates[c][i] = opt->candidates[parent][i] + noise;
    -
    302 if (opt->candidates[c][i] < 0.0f) opt->candidates[c][i] = 0.0f;
    -
    303 if (opt->candidates[c][i] > 1.0f) opt->candidates[c][i] = 1.0f;
    +
    300 uint16_t parent = opt->sorted_idx[rand() % opt->n_best];
    +
    301 opt->candidates[c][i] = opt->candidates[parent][i] + noise;
    +
    302 if (opt->candidates[c][i] < 0.0f) opt->candidates[c][i] = 0.0f;
    +
    303 if (opt->candidates[c][i] > 1.0f) opt->candidates[c][i] = 1.0f;
    304 }
    -
    305 opt->loss[c] = 0.0f;
    +
    305 opt->loss[c] = 0.0f;
    306 }
    307 }
    -
    308 opt->cand_index = 0;
    -
    309 opt->gen_index++;
    +
    308 opt->cand_index = 0;
    +
    309 opt->gen_index++;
    310 }
    311
    312 // 4. Возвращаем параметры следующего кандидата
    -
    313 for (uint16_t i = 0; i < opt->n_params; i++)
    -
    314 params[i] = opt->candidates[opt->cand_index][i];
    +
    313 for (uint16_t i = 0; i < opt->n_params; i++)
    +
    314 params[i] = opt->candidates[opt->cand_index][i];
    315
    316 return 0;
    317}
    -
    318#else // ENABLE_EVOLVE_OPTIMIZATION
    +
    318#else // GEN_OPTIMIZATION_ENABLE
    319//заглушки
    320typedef struct {
    321 uint16_t n_params;
    @@ -436,46 +436,46 @@ $(function(){initNavTree('evolve__optimizer_8h_source.html','',''); });
    324 float mutation_amp;
    325 float loss[0];
    326 float candidates[0][0];
    - -
    328#define EvolveOptimizer_Init(opt, n_params, n_cand, n_best, mutation_amp, start_params)
    -
    329#define EvolveOptimizer_Step(opt, params, LossFunc)
    + +
    328#define GenOptimizer_Init(opt, n_params, n_cand, n_best, mutation_amp, start_params)
    +
    329#define GenOptimizer_Step(opt, params, LossFunc)
    330#define PARAM_SCALE(x, min_val, max_val) (x)
    331#define PARAM_UNSCALE(val, min_val, max_val) (val)
    -
    332#endif // ENABLE_EVOLVE_OPTIMIZATION
    +
    332#endif // GEN_OPTIMIZATION_ENABLE
    333
    -
    334#endif // __EVOLVE_OPTIMIZER_H_
    +
    334#endif // __GEN_OPTIMIZER_H_
    335
    -
    336/** EVOLVE_OPTIMIZER
    +
    336/** GEN_OPTIMIZER
    337 * @}
    338 */
    -
    #define EVOLVE_MAX_CANDIDATES
    Максимальное количество кандидатов для обучения
    -
    #define EVOLVE_MAX_PARAMS
    Максимальное количество параметров
    -
    #define EVOLVE_MUTATION_MIN_PCT
    Минимальная мутация (в процентах от Loss)
    -
    #define ELOVLE_N_ELITE_CANDIDATE
    Количество кандидатов, которые проходят в поколение без изменений (по умолчанию 2)
    -
    __STATIC_INLINE int EvolveOptimizer_Init(EvolveOptimizer_t *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, float mutation_amp, float *start_params)
    Инициализация эволюционного оптимизатора.
    -
    #define EVOLVE_MUTATION_MAX_PCT
    Максимальная мутация (в процентах от Loss)
    -
    __STATIC_INLINE int EvolveOptimizer_Step(EvolveOptimizer_t *opt, float *params, float loss)
    Один шаг эволюционного оптимизатора.
    -
    #define local_time()
    Локальное время
    +
    #define GEN_MAX_CANDIDATES
    Максимальное количество кандидатов для обучения
    +
    #define GEN_MAX_PARAMS
    Максимальное количество параметров
    +
    static int GenOptimizer_Init(GenOptimizer_t *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, float mutation_amp, float *start_params)
    Инициализация эволюционного оптимизатора.
    +
    #define ELOVLE_N_ELITE_CANDIDATE
    Количество кандидатов, которые проходят в поколение без изменений (по умолчанию 2)
    +
    #define GEN_MUTATION_MIN_PCT
    Минимальная мутация (в процентах от Loss)
    +
    #define GEN_MUTATION_MAX_PCT
    Максимальная мутация (в процентах от Loss)
    +
    static int GenOptimizer_Step(GenOptimizer_t *opt, float *params, float loss)
    Один шаг эволюционного оптимизатора.
    +
    #define local_time()
    Локальное время
    Заголочный файл для дефайнов библиотеки MyLibsGeneral.
    -
    Структура эволюционного оптимизатора
    -
    uint16_t cand_index
    Индекс кандидата для обработки
    -
    uint16_t n_params
    Количество параметров
    -
    float gen_mut
    Амплитуда мутации у текущей популяции
    -
    uint16_t sorted_idx[100]
    Индексы отсортированных кандидатов
    -
    float stability
    Коэффициент насколько стабильная популяция (0..1)(n_cand)
    -
    float loss[100]
    Loss для каждого кандидата
    -
    uint16_t n_best
    Количество лучших, усредняемых
    -
    uint16_t n_cand
    Количество кандидатов в популяции
    -
    uint16_t gen_index
    Индекс популяции
    -
    float candidates[100][20]
    Параметры кандидатов
    -
    float mutation_amp
    Амплитуда мутации (0..1)
    +
    Структура эволюционного оптимизатора
    +
    uint16_t cand_index
    Индекс текущего кандидата
    +
    float candidates[100][20]
    Параметры кандидатов
    +
    uint16_t n_best
    Количество лучших, усредняемых
    +
    float loss[100]
    Loss для каждого кандидата
    +
    uint16_t gen_index
    Индекс популяции
    +
    uint16_t n_cand
    Количество кандидатов в популяции
    +
    float stability
    Коэффициент насколько стабильная популяция (0..1)(n_cand)
    +
    float gen_mut
    Амплитуда мутации у текущей популяции
    +
    uint16_t sorted_idx[100]
    Индексы отсортированных кандидатов
    +
    float mutation_amp
    Амплитуда мутации (0..1)
    +
    uint16_t n_params
    Количество параметров
    diff --git a/Doc/html/general__gpio_8c_source.html b/Doc/html/general__gpio_8c_source.html index 31cc13f..01fd7e6 100644 --- a/Doc/html/general__gpio_8c_source.html +++ b/Doc/html/general__gpio_8c_source.html @@ -450,7 +450,7 @@ $(function(){initNavTree('general__gpio_8c_source.html','',''); });
    #define check_null_ptr_1(p1)
    Проверить один указатель на NULL.
    Definition mylibs_defs.h:38
    #define check_null_ptr_3(p1, p2, p3)
    Проверить три указателя на NULL.
    Definition mylibs_defs.h:44
    #define LED_PWM_TICKS
    Количество тиков в периоде ШИМ
    -
    #define local_time()
    Локальное время
    +
    #define local_time()
    Локальное время
    HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx)
    Включить тактирование порта GPIO.
    HAL_StatusTypeDef GPIO_LED_On(GPIO_LEDTypeDef *led)
    Включить светодиод
    HAL_StatusTypeDef GPIO_LED_Fading_Start(GPIO_LEDTypeDef *led, uint32_t period)
    Активировать моргание светодиодом
    diff --git a/Doc/html/globals.html b/Doc/html/globals.html index e327839..b1af4a9 100644 --- a/Doc/html/globals.html +++ b/Doc/html/globals.html @@ -103,227 +103,6 @@ $(function(){initNavTree('globals.html','',''); });
  • ABS : mylibs_defs.h
  • assert_usertracker : trackers.h
  • - - -

    - b -

    - - -

    - c -

    - - -

    - d -

    - - -

    - e -

    - - -

    - f -

    - - -

    - g -

    - - -

    - h -

    - - -

    - i -

    - - -

    - l -

    - - -

    - m -

    - - -

    - n -

    - - -

    - p -

    - - -

    - r -

    - - -

    - s -

    - - -

    - t -

    - - -

    - u -

    diff --git a/Doc/html/globals_b.html b/Doc/html/globals_b.html new file mode 100644 index 0000000..4ffc1a9 --- /dev/null +++ b/Doc/html/globals_b.html @@ -0,0 +1,126 @@ + + + + + + + +MyLibs: File Members + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented file members with links to the documentation:
    + +

    - b -

    +
    +
    +
    + + + + diff --git a/Doc/html/globals_c.html b/Doc/html/globals_c.html new file mode 100644 index 0000000..a000337 --- /dev/null +++ b/Doc/html/globals_c.html @@ -0,0 +1,120 @@ + + + + + + + +MyLibs: File Members + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented file members with links to the documentation:
    + +

    - c -

    +
    +
    +
    + + + + diff --git a/Doc/html/globals_d.html b/Doc/html/globals_d.html new file mode 100644 index 0000000..6b33a0c --- /dev/null +++ b/Doc/html/globals_d.html @@ -0,0 +1,115 @@ + + + + + + + +MyLibs: File Members + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented file members with links to the documentation:
    + +

    - d -

    +
    +
    +
    + + + + diff --git a/Doc/html/globals_defs.html b/Doc/html/globals_defs.html index e5c1fac..446730c 100644 --- a/Doc/html/globals_defs.html +++ b/Doc/html/globals_defs.html @@ -106,6 +106,8 @@ $(function(){initNavTree('globals_defs.html','',''); });

    - b -

    @@ -126,12 +128,7 @@ $(function(){initNavTree('globals_defs.html','',''); });

    - e -

    @@ -141,6 +138,11 @@ $(function(){initNavTree('globals_defs.html','',''); });

    - g -

    @@ -160,7 +162,7 @@ $(function(){initNavTree('globals_defs.html','',''); });

    - i -

    • if_assert_usertracker : trackers.h
    • INCLUDE_BIT_ACCESS_LIB : mylibs_config.h
    • -
    • INCLUDE_EVOLVE_OPTIMIZER : mylibs_config.h
    • +
    • INCLUDE_GEN_OPTIMIZER : mylibs_config.h
    • INCLUDE_GENERAL_PERIPH_LIBS : mylibs_config.h
    • INCLUDE_TRACE_LIB : mylibs_config.h
    • INCLUDE_TRACKERS_LIB : mylibs_config.h
    • @@ -193,8 +195,8 @@ $(function(){initNavTree('globals_defs.html','',''); });

      - p -

      diff --git a/Doc/html/globals_dup.js b/Doc/html/globals_dup.js new file mode 100644 index 0000000..1bb706c --- /dev/null +++ b/Doc/html/globals_dup.js @@ -0,0 +1,20 @@ +var globals_dup = +[ + [ "a", "globals.html", null ], + [ "b", "globals_b.html", null ], + [ "c", "globals_c.html", null ], + [ "d", "globals_d.html", null ], + [ "e", "globals_e.html", null ], + [ "f", "globals_f.html", null ], + [ "g", "globals_g.html", null ], + [ "h", "globals_h.html", null ], + [ "i", "globals_i.html", null ], + [ "l", "globals_l.html", null ], + [ "m", "globals_m.html", null ], + [ "n", "globals_n.html", null ], + [ "p", "globals_p.html", null ], + [ "r", "globals_r.html", null ], + [ "s", "globals_s.html", null ], + [ "t", "globals_t.html", null ], + [ "u", "globals_u.html", null ] +]; \ No newline at end of file diff --git a/Doc/html/globals_e.html b/Doc/html/globals_e.html new file mode 100644 index 0000000..621868b --- /dev/null +++ b/Doc/html/globals_e.html @@ -0,0 +1,115 @@ + + + + + + + +MyLibs: File Members + + + + + + + + + + + + + + + + + +
      +
      + + + + + + +
      +
      MyLibs 1.0 +
      +
      Расширенные библиотеки для STM32
      +
      +
      + + + + + + + + +
      +
      + +
      +
      +
      + +
      +
      + +
      +
      + + +
      +
      +
      +
      +
      +
      Loading...
      +
      Searching...
      +
      No Matches
      +
      +
      +
      +
      + +
      +
      Here is a list of all documented file members with links to the documentation:
      + +

      - e -

      +
      +
      +
      + + + + diff --git a/Doc/html/globals_f.html b/Doc/html/globals_f.html new file mode 100644 index 0000000..bc087b3 --- /dev/null +++ b/Doc/html/globals_f.html @@ -0,0 +1,115 @@ + + + + + + + +MyLibs: File Members + + + + + + + + + + + + + + + + + +
      +
      + + + + + + +
      +
      MyLibs 1.0 +
      +
      Расширенные библиотеки для STM32
      +
      +
      + + + + + + + + +
      +
      + +
      +
      +
      + +
      +
      + +
      +
      + + +
      +
      +
      +
      +
      +
      Loading...
      +
      Searching...
      +
      No Matches
      +
      +
      +
      +
      + +
      +
      Here is a list of all documented file members with links to the documentation:
      + +

      - f -

      +
      +
      +
      + + + + diff --git a/Doc/html/globals_func.html b/Doc/html/globals_func.html index 4f8749e..516e274 100644 --- a/Doc/html/globals_func.html +++ b/Doc/html/globals_func.html @@ -99,13 +99,22 @@ $(function(){initNavTree('globals_func.html','',''); });
      Here is a list of all documented functions with links to the documentation:
      -

      - e -

        -
      • EvolveOptimizer_Init() : evolve_optimizer.h
      • -
      • EvolveOptimizer_Step() : evolve_optimizer.h
      • +

        - b -

        - g -

          +
        • GenOptimizer_Init() : gen_optimizer.h
        • +
        • GenOptimizer_Step() : gen_optimizer.h
        • GPIO_Clock_Enable() : general_gpio.h, general_gpio.c
        • GPIO_LED_Blink_Start() : general_gpio.h, general_gpio.c
        • GPIO_LED_Dynamic_Handle() : general_gpio.h, general_gpio.c
        • diff --git a/Doc/html/globals_g.html b/Doc/html/globals_g.html new file mode 100644 index 0000000..8af68fc --- /dev/null +++ b/Doc/html/globals_g.html @@ -0,0 +1,133 @@ + + + + + + + +MyLibs: File Members + + + + + + + + + + + + + + + + + +
          +
          + + + + + + +
          +
          MyLibs 1.0 +
          +
          Расширенные библиотеки для STM32
          +
          +
          + + + + + + + + +
          +
          + +
          +
          +
          + +
          +
          + +
          +
          + + +
          +
          +
          +
          +
          +
          Loading...
          +
          Searching...
          +
          No Matches
          +
          +
          +
          +
          + +
          +
          Here is a list of all documented file members with links to the documentation:
          + +

          - g -

          +
          +
          +
          + + + + diff --git a/Doc/html/globals_h.html b/Doc/html/globals_h.html new file mode 100644 index 0000000..72e55fa --- /dev/null +++ b/Doc/html/globals_h.html @@ -0,0 +1,125 @@ + + + + + + + +MyLibs: File Members + + + + + + + + + + + + + + + + + +
          +
          + + + + + + +
          +
          MyLibs 1.0 +
          +
          Расширенные библиотеки для STM32
          +
          +
          + + + + + + + + +
          +
          + +
          +
          +
          + +
          +
          + +
          +
          + + +
          +
          +
          +
          +
          +
          Loading...
          +
          Searching...
          +
          No Matches
          +
          +
          +
          +
          + +
          +
          Here is a list of all documented file members with links to the documentation:
          + +

          - h -

          +
          +
          +
          + + + + diff --git a/Doc/html/globals_i.html b/Doc/html/globals_i.html new file mode 100644 index 0000000..c66b2d1 --- /dev/null +++ b/Doc/html/globals_i.html @@ -0,0 +1,120 @@ + + + + + + + +MyLibs: File Members + + + + + + + + + + + + + + + + + +
          +
          + + + + + + +
          +
          MyLibs 1.0 +
          +
          Расширенные библиотеки для STM32
          +
          +
          + + + + + + + + +
          +
          + +
          +
          +
          + +
          +
          + +
          +
          + + +
          +
          +
          +
          +
          +
          Loading...
          +
          Searching...
          +
          No Matches
          +
          +
          +
          +
          + +
          +
          Here is a list of all documented file members with links to the documentation:
          + +

          - i -

          +
          +
          +
          + + + + diff --git a/Doc/html/globals_l.html b/Doc/html/globals_l.html new file mode 100644 index 0000000..71c9766 --- /dev/null +++ b/Doc/html/globals_l.html @@ -0,0 +1,124 @@ + + + + + + + +MyLibs: File Members + + + + + + + + + + + + + + + + + +
          +
          + + + + + + +
          +
          MyLibs 1.0 +
          +
          Расширенные библиотеки для STM32
          +
          +
          + + + + + + + + +
          +
          + +
          +
          +
          + +
          +
          + +
          +
          + + +
          +
          +
          +
          +
          +
          Loading...
          +
          Searching...
          +
          No Matches
          +
          +
          +
          +
          + +
          +
          Here is a list of all documented file members with links to the documentation:
          + +

          - l -

          +
          +
          +
          + + + + diff --git a/Doc/html/globals_m.html b/Doc/html/globals_m.html new file mode 100644 index 0000000..766f211 --- /dev/null +++ b/Doc/html/globals_m.html @@ -0,0 +1,120 @@ + + + + + + + +MyLibs: File Members + + + + + + + + + + + + + + + + + +
          +
          + + + + + + +
          +
          MyLibs 1.0 +
          +
          Расширенные библиотеки для STM32
          +
          +
          + + + + + + + + +
          +
          + +
          +
          +
          + +
          +
          + +
          +
          + + +
          +
          +
          +
          +
          +
          Loading...
          +
          Searching...
          +
          No Matches
          +
          +
          +
          +
          + +
          +
          Here is a list of all documented file members with links to the documentation:
          + +

          - m -

          +
          +
          +
          + + + + diff --git a/Doc/html/globals_n.html b/Doc/html/globals_n.html new file mode 100644 index 0000000..309d0ba --- /dev/null +++ b/Doc/html/globals_n.html @@ -0,0 +1,115 @@ + + + + + + + +MyLibs: File Members + + + + + + + + + + + + + + + + + +
          +
          + + + + + + +
          +
          MyLibs 1.0 +
          +
          Расширенные библиотеки для STM32
          +
          +
          + + + + + + + + +
          +
          + +
          +
          +
          + +
          +
          + +
          +
          + + +
          +
          +
          +
          +
          +
          Loading...
          +
          Searching...
          +
          No Matches
          +
          +
          +
          +
          + +
          +
          Here is a list of all documented file members with links to the documentation:
          + +

          - n -

          +
          +
          +
          + + + + diff --git a/Doc/html/globals_p.html b/Doc/html/globals_p.html new file mode 100644 index 0000000..c713b99 --- /dev/null +++ b/Doc/html/globals_p.html @@ -0,0 +1,116 @@ + + + + + + + +MyLibs: File Members + + + + + + + + + + + + + + + + + +
          +
          + + + + + + +
          +
          MyLibs 1.0 +
          +
          Расширенные библиотеки для STM32
          +
          +
          + + + + + + + + +
          +
          + +
          +
          +
          + +
          +
          + +
          +
          + + +
          +
          +
          +
          +
          +
          Loading...
          +
          Searching...
          +
          No Matches
          +
          +
          +
          +
          + +
          +
          Here is a list of all documented file members with links to the documentation:
          + +

          - p -

          +
          +
          +
          + + + + diff --git a/Doc/html/globals_r.html b/Doc/html/globals_r.html new file mode 100644 index 0000000..3fbb6eb --- /dev/null +++ b/Doc/html/globals_r.html @@ -0,0 +1,123 @@ + + + + + + + +MyLibs: File Members + + + + + + + + + + + + + + + + + +
          +
          + + + + + + +
          +
          MyLibs 1.0 +
          +
          Расширенные библиотеки для STM32
          +
          +
          + + + + + + + + +
          +
          + +
          +
          +
          + +
          +
          + +
          +
          + + +
          +
          +
          +
          +
          +
          Loading...
          +
          Searching...
          +
          No Matches
          +
          +
          +
          +
          + +
          +
          Here is a list of all documented file members with links to the documentation:
          + +

          - r -

          +
          +
          +
          + + + + diff --git a/Doc/html/globals_s.html b/Doc/html/globals_s.html new file mode 100644 index 0000000..9f4ad92 --- /dev/null +++ b/Doc/html/globals_s.html @@ -0,0 +1,123 @@ + + + + + + + +MyLibs: File Members + + + + + + + + + + + + + + + + + +
          +
          + + + + + + +
          +
          MyLibs 1.0 +
          +
          Расширенные библиотеки для STM32
          +
          +
          + + + + + + + + +
          +
          + +
          +
          +
          + +
          +
          + +
          +
          + + +
          +
          +
          +
          +
          +
          Loading...
          +
          Searching...
          +
          No Matches
          +
          +
          +
          +
          + +
          +
          Here is a list of all documented file members with links to the documentation:
          + +

          - s -

          +
          +
          +
          + + + + diff --git a/Doc/html/globals_t.html b/Doc/html/globals_t.html new file mode 100644 index 0000000..4b171a6 --- /dev/null +++ b/Doc/html/globals_t.html @@ -0,0 +1,156 @@ + + + + + + + +MyLibs: File Members + + + + + + + + + + + + + + + + + +
          +
          + + + + + + +
          +
          MyLibs 1.0 +
          +
          Расширенные библиотеки для STM32
          +
          +
          + + + + + + + + +
          +
          + +
          +
          +
          + +
          +
          + +
          +
          + + +
          +
          +
          +
          +
          +
          Loading...
          +
          Searching...
          +
          No Matches
          +
          +
          +
          +
          + +
          +
          Here is a list of all documented file members with links to the documentation:
          + +

          - t -

          +
          +
          +
          + + + + diff --git a/Doc/html/globals_u.html b/Doc/html/globals_u.html new file mode 100644 index 0000000..5680dd5 --- /dev/null +++ b/Doc/html/globals_u.html @@ -0,0 +1,147 @@ + + + + + + + +MyLibs: File Members + + + + + + + + + + + + + + + + + +
          +
          + + + + + + +
          +
          MyLibs 1.0 +
          +
          Расширенные библиотеки для STM32
          +
          +
          + + + + + + + + +
          +
          + +
          +
          +
          + +
          +
          + +
          +
          + + +
          +
          +
          +
          +
          +
          Loading...
          +
          Searching...
          +
          No Matches
          +
          +
          +
          +
          + +
          +
          Here is a list of all documented file members with links to the documentation:
          + +

          - u -

          +
          +
          +
          + + + + diff --git a/Doc/html/globals_vars.html b/Doc/html/globals_vars.html new file mode 100644 index 0000000..655cfa8 --- /dev/null +++ b/Doc/html/globals_vars.html @@ -0,0 +1,113 @@ + + + + + + + +MyLibs: File Members + + + + + + + + + + + + + + + + + +
          +
          + + + + + + +
          +
          MyLibs 1.0 +
          +
          Расширенные библиотеки для STM32
          +
          +
          + + + + + + + + +
          +
          + +
          +
          +
          + +
          +
          + +
          +
          + + +
          +
          +
          +
          +
          +
          Loading...
          +
          Searching...
          +
          No Matches
          +
          +
          +
          +
          + +
          +
          Here is a list of all documented variables with links to the documentation:
          +
          +
          +
          + + + + diff --git a/Doc/html/group___b_e_n_c_h___t_i_m_e.html b/Doc/html/group___b_e_n_c_h___t_i_m_e.html new file mode 100644 index 0000000..74a3d1e --- /dev/null +++ b/Doc/html/group___b_e_n_c_h___t_i_m_e.html @@ -0,0 +1,543 @@ + + + + + + + +MyLibs: Time measurement + + + + + + + + + + + + + + + + + +
          +
          + + + + + + +
          +
          MyLibs 1.0 +
          +
          Расширенные библиотеки для STM32
          +
          +
          + + + + + + + + +
          +
          + +
          +
          +
          + +
          +
          + +
          +
          + + +
          +
          +
          +
          +
          +
          Loading...
          +
          Searching...
          +
          No Matches
          +
          +
          +
          +
          + +
          +
          Time measurement
          +
          +
          + +

          Библиотека для измерения времени/тиков между событиями +More...

          +
          Collaboration diagram for Time measurement:
          +
          +
          + + + + + + + + + +

          +Classes

          struct  BenchTimeStats_t
           Структура статистики измерений More...
          struct  BenchTimeChannel_t
           Структура канала измерения More...
          struct  BenchTime_t
           Основная структура менеджера измерений More...
          + + + + + + + + + + + + + + + + + + + +

          +Functions

          static void BenchTime_Init (void)
           Инициализация системы измерения времени
          static uint32_t BenchTime_Start (uint8_t channel, uint32_t ticks, uint32_t tick_period)
           Начало измерения на указанном канале
          static uint32_t BenchTime_End (uint8_t channel, uint32_t ticks)
           Окончание измерения на указанном канале
          static uint32_t BenchTime_GetMin (uint8_t channel)
           Получение минимального времени измерения
          static uint32_t BenchTime_GetMax (uint8_t channel)
           Получение максимального времени измерения
          static uint32_t BenchTime_GetAverage (uint8_t channel)
           Получение среднего времени измерения
          static uint32_t BenchTime_GetCount (uint8_t channel)
           Получение количества измерений
          static uint32_t BenchTime_GetLast (uint8_t channel)
           Получение последнего измеренного времени
          static void BenchTime_ResetStats (uint8_t channel)
           Сброс статистики для канала
          + + + +

          +Variables

          static BenchTime_t hbt = {0}
           Внутренний экземпляр
          +

          Detailed Description

          +

          Библиотека для измерения времени/тиков между событиями

          +

          Поддерживает:

            +
          • Многоканальные измерения (несколько независимых таймеров)
          • +
          • Платформонезависимый интерфейс
          • +
          • Измерение в тиках или временных единицах
          • +
          • Статистику измерений (мин/макс/среднее)
          • +
          • Настраиваемый размер тиков для каждого канала
          • +
          +

          Параметры для конфигурации:

          +
          Пример использования:
          #include "bench_time.h"
          +
          +
          // Инициализация
          + +
          +
          // Измерение с SysTick
          +
          BenchTime_Start(0, HAL_GetTick, 0xFFFFFFFF);
          +
          some_function();
          +
          uint32_t time = BenchTime_End(0, HAL_GetTick);
          +
          +
          // Измерение с TIM2 (16-бит)
          +
          BenchTime_Start(1, TIM2->CNT, 0xFFFF);
          +
          fast_function();
          +
          uint32_t time2 = BenchTime_End(1, TIM2->CNT);
          +
          +
          // Измерение с DWT цикловым счетчиком
          +
          BenchTime_Start(2, DWT->CYCCNT, 0xFFFFFFFF);
          +
          critical_function();
          +
          uint32_t cycles = BenchTime_End(2, DWT->CYCCNT);
          +
          +
          // Многоканальное измерение
          +
          BenchTime_Start(0, HAL_GetTick, 1000); // общее время
          +
          BenchTime_Start(1, TIM3->CNT, 500); // часть 1
          +
          +
          // ... код 1
          +
          +
          uint32_t part1 = BenchTime_End(1, TIM3->CNT);
          +
          BenchTime_Start(2, TIM4->CNT, 200); // часть 2
          +
          +
          // ... код 2
          +
          +
          uint32_t part2 = BenchTime_End(2, TIM4->CNT);
          +
          uint32_t total = BenchTime_End(0, HAL_GetTick); // общее время
          +
          +
          // Статистика
          +
          uint32_t min_time = BenchTime_GetMin(0);
          +
          uint32_t max_time = BenchTime_GetMax(0);
          +
          uint32_t avg_time = BenchTime_GetAverage(0);
          +
          uint32_t count = BenchTime_GetCount(0);
          +
          Заголовочный файл для измерения времени между событиями
          +
          static void BenchTime_Init(void)
          Инициализация системы измерения времени
          Definition bench_time.h:111
          +
          +

          Function Documentation

          + +

          ◆ BenchTime_Init()

          + +
          +
          + + + + + +
          + + + + + + + +
          void BenchTime_Init (void )
          +
          +inlinestatic
          +
          + +

          Инициализация системы измерения времени

          + +

          Definition at line 111 of file bench_time.h.

          + +
          +
          + +

          ◆ BenchTime_Start()

          + +
          +
          + + + + + +
          + + + + + + + + + + + + + + + + +
          uint32_t BenchTime_Start (uint8_t channel,
          uint32_t ticks,
          uint32_t tick_period )
          +
          +inlinestatic
          +
          + +

          Начало измерения на указанном канале

          +
          Parameters
          + + + + +
          channelНомер канала (0..BENCH_TIME_MAX_CHANNELS-1)
          ticksИсточник тиков (например: HAL_GetTick(), TIM2->CNT, DWT->CYCCNT)
          tick_periodПериод тиков для переполнения
          +
          +
          +
          Returns
          1 - успех, 0 - ошибка
          + +

          Definition at line 131 of file bench_time.h.

          + +
          +
          + +

          ◆ BenchTime_End()

          + +
          +
          + + + + + +
          + + + + + + + + + + + +
          uint32_t BenchTime_End (uint8_t channel,
          uint32_t ticks )
          +
          +inlinestatic
          +
          + +

          Окончание измерения на указанном канале

          +
          Parameters
          + + + +
          channelНомер канала (0..BENCH_TIME_MAX_CHANNELS-1)
          ticksИсточник тиков (должен быть тот же что в Start)
          +
          +
          +
          Returns
          Измеренное время в тиках, 0 - в случае ошибки
          + +

          Definition at line 147 of file bench_time.h.

          + +
          +
          + +

          ◆ BenchTime_GetMin()

          + +
          +
          + + + + + +
          + + + + + + + +
          uint32_t BenchTime_GetMin (uint8_t channel)
          +
          +inlinestatic
          +
          + +

          Получение минимального времени измерения

          + +

          Definition at line 189 of file bench_time.h.

          + +
          +
          + +

          ◆ BenchTime_GetMax()

          + +
          +
          + + + + + +
          + + + + + + + +
          uint32_t BenchTime_GetMax (uint8_t channel)
          +
          +inlinestatic
          +
          + +

          Получение максимального времени измерения

          + +

          Definition at line 197 of file bench_time.h.

          + +
          +
          + +

          ◆ BenchTime_GetAverage()

          + +
          +
          + + + + + +
          + + + + + + + +
          uint32_t BenchTime_GetAverage (uint8_t channel)
          +
          +inlinestatic
          +
          + +

          Получение среднего времени измерения

          + +

          Definition at line 205 of file bench_time.h.

          + +
          +
          + +

          ◆ BenchTime_GetCount()

          + +
          +
          + + + + + +
          + + + + + + + +
          uint32_t BenchTime_GetCount (uint8_t channel)
          +
          +inlinestatic
          +
          + +

          Получение количества измерений

          + +

          Definition at line 215 of file bench_time.h.

          + +
          +
          + +

          ◆ BenchTime_GetLast()

          + +
          +
          + + + + + +
          + + + + + + + +
          uint32_t BenchTime_GetLast (uint8_t channel)
          +
          +inlinestatic
          +
          + +

          Получение последнего измеренного времени

          + +

          Definition at line 223 of file bench_time.h.

          + +
          +
          + +

          ◆ BenchTime_ResetStats()

          + +
          +
          + + + + + +
          + + + + + + + +
          void BenchTime_ResetStats (uint8_t channel)
          +
          +inlinestatic
          +
          + +

          Сброс статистики для канала

          + +

          Definition at line 231 of file bench_time.h.

          + +
          +
          +

          Variable Documentation

          + +

          ◆ hbt

          + +
          +
          + + + + + +
          + + + + +
          BenchTime_t hbt = {0}
          +
          +static
          +
          + +

          Внутренний экземпляр

          + +

          Definition at line 106 of file bench_time.h.

          + +
          +
          +
          +
          + +
          + + + + diff --git a/Doc/html/group___b_e_n_c_h___t_i_m_e.js b/Doc/html/group___b_e_n_c_h___t_i_m_e.js new file mode 100644 index 0000000..b4ce582 --- /dev/null +++ b/Doc/html/group___b_e_n_c_h___t_i_m_e.js @@ -0,0 +1,29 @@ +var group___b_e_n_c_h___t_i_m_e = +[ + [ "BenchTimeStats_t", "struct_bench_time_stats__t.html", [ + [ "min_ticks", "struct_bench_time_stats__t.html#a39b71a5d48c4a51a553a26a9fb961ac8", null ], + [ "max_ticks", "struct_bench_time_stats__t.html#a3da36eb65b03ba995b5905b4650ea93c", null ], + [ "total_ticks", "struct_bench_time_stats__t.html#a21499b0b19d1ed27f8cea069f674e8ec", null ], + [ "count", "struct_bench_time_stats__t.html#a5e95ef31dd0daf973894ef2f034d1f71", null ], + [ "last_ticks", "struct_bench_time_stats__t.html#a2c739e1db6b26ceac5db3f2c44c177a0", null ] + ] ], + [ "BenchTimeChannel_t", "struct_bench_time_channel__t.html", [ + [ "start_tick", "struct_bench_time_channel__t.html#a8140fe9e3d323404651f0cfeeae53928", null ], + [ "tick_period", "struct_bench_time_channel__t.html#a095d93e0228641f58b8661e263bc1bcd", null ], + [ "is_running", "struct_bench_time_channel__t.html#a0f80bb194231df7921712d20bac603c9", null ], + [ "stats", "struct_bench_time_channel__t.html#a22a3913e7925aa89cc12ec1d24a6c16c", null ] + ] ], + [ "BenchTime_t", "struct_bench_time__t.html", [ + [ "channels", "struct_bench_time__t.html#a9ae6d45c610be9d4b7628a614ccb06d6", null ] + ] ], + [ "BenchTime_Init", "group___b_e_n_c_h___t_i_m_e.html#gabb7a665a9603ea2e4dbc4432e8cb6054", null ], + [ "BenchTime_Start", "group___b_e_n_c_h___t_i_m_e.html#gac65338df38129964ce3e9d9cb2fcb349", null ], + [ "BenchTime_End", "group___b_e_n_c_h___t_i_m_e.html#ga47a69851a2089140eac00cde18a12439", null ], + [ "BenchTime_GetMin", "group___b_e_n_c_h___t_i_m_e.html#ga273d45255fe4403fc25648d60cca7705", null ], + [ "BenchTime_GetMax", "group___b_e_n_c_h___t_i_m_e.html#ga07e27d7b169c9fa1abd57281bb4e374e", null ], + [ "BenchTime_GetAverage", "group___b_e_n_c_h___t_i_m_e.html#ga24e2450d5ea921074ec5d7a1e4d56ba8", null ], + [ "BenchTime_GetCount", "group___b_e_n_c_h___t_i_m_e.html#gabd1301ca79a30c782970f89fd147df3a", null ], + [ "BenchTime_GetLast", "group___b_e_n_c_h___t_i_m_e.html#gacf3a738d6423d71b238058a63558a4ed", null ], + [ "BenchTime_ResetStats", "group___b_e_n_c_h___t_i_m_e.html#ga31a6b2b181b92bcb15f46758f5d57f35", null ], + [ "hbt", "group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d", null ] +]; \ No newline at end of file diff --git a/Doc/html/group___b_e_n_c_h___t_i_m_e.map b/Doc/html/group___b_e_n_c_h___t_i_m_e.map new file mode 100644 index 0000000..29fd6e1 --- /dev/null +++ b/Doc/html/group___b_e_n_c_h___t_i_m_e.map @@ -0,0 +1,4 @@ + + + + diff --git a/Doc/html/group___b_e_n_c_h___t_i_m_e.md5 b/Doc/html/group___b_e_n_c_h___t_i_m_e.md5 new file mode 100644 index 0000000..a1ee85e --- /dev/null +++ b/Doc/html/group___b_e_n_c_h___t_i_m_e.md5 @@ -0,0 +1 @@ +15b595630eeca30c57a018017bc540ba \ No newline at end of file diff --git a/Doc/html/group___b_e_n_c_h___t_i_m_e.png b/Doc/html/group___b_e_n_c_h___t_i_m_e.png new file mode 100644 index 0000000000000000000000000000000000000000..bca67f23e8f9b72f1a395e40803615e574fbb536 GIT binary patch literal 1095 zcmV-N1i1T&P)(Z3{00006VoOIv0RI60 z0RN!9r;`8x1N=!uK~#90?cL976lWaA@%J;fC;=-(Lp>DA-b$~%NGKE{9!0SjYqg%T znVaCh;U6GOH{e;#rSxo0qF(YR>>;G|5+R2`uvm9I%nli6XJ%(+pV{Zh`gy@Z=GXIl zvzzC;&-ck>10o_KA|fIpA|lmHe#gef#&^b;RTsfXxj2qrZ*6V;<2sHu`u+a8>lnm8 zK@jXmQS>Ie@2mVt#+X%O%(MB0B{kgvp1TgB4gEYxk-BmpFE6_eLp(7Y4mmtLoY)^Yh($!CkP?!JctZ(EM7*JdBqH8WLJ|>gC?Sc6 zH%fo)--a=t-)9-evCZaZW{jDLDIaszEb$lh<-lcN9k>o$a~w-8Rkt{#x1xk$sM}H& zl(mFZHrPEFl$EmaorZX8xB%P&{s4X;8#vw*R&)rp9YF}r1LeTqFGb=$nVb{&#QCYv~%04YOiizwqpX$06znN z0`GvoNdCO!?D*IjTOIi(Th^sthhaFezo`66_fNa~-DbOOj#X`EW2@WFtlvjfJ4Nxf zWpxc{n*403YP;;~Cf5~h+l;wxUzTI~33ve911Slz+>S1+@U(J;W@zB z6SKFsN3YlGto{68ur)YrwAFgrA-9`T{+G%U9 zB^%h81yw03k9=UMWP3Y)JOWlpex?5a_=co(D@#rvffsE$v|(v!$yL`Ax_Xx{YqzNE zDZ6f#(xiD?s z#vij;BGqj-d#vcZI@it8e-pE`V{2i1Vzl=A{dHr^GuKl$IT3~-aU90j>Z)IF3c67A2%F!@sTr5UE26 zNkqJ%gd`%~P(l(BZzv&&h&PmwM8q5VN0BlY2L}g*{}@odOvlH?pBXrjkb)rCAB{%a zySuxc2PO3dL9p*ShPL83-aa}yavg?vCJ2Hzu451p5fKp)5fPEo=My@)2;kGj!g2rr N002ovPDHLkV1neG4Kn}$ literal 0 HcmV?d00001 diff --git a/Doc/html/group___d_e_l_a_y_s___d_e_f_i_n_e_s.html b/Doc/html/group___d_e_l_a_y_s___d_e_f_i_n_e_s.html index 28dfdd1..5591e12 100644 --- a/Doc/html/group___d_e_l_a_y_s___d_e_f_i_n_e_s.html +++ b/Doc/html/group___d_e_l_a_y_s___d_e_f_i_n_e_s.html @@ -178,7 +178,7 @@ Macros
      Value:
      *(_pvar_) = local_time()
      -
      #define local_time()
      Локальное время
      +
      #define local_time()
      Локальное время

      Начать отсчет задержки.

      Parameters
      diff --git a/Doc/html/group___e_v_o_l_v_e___c_o_n_f_i_g.js b/Doc/html/group___e_v_o_l_v_e___c_o_n_f_i_g.js deleted file mode 100644 index 1e10ab2..0000000 --- a/Doc/html/group___e_v_o_l_v_e___c_o_n_f_i_g.js +++ /dev/null @@ -1,6 +0,0 @@ -var group___e_v_o_l_v_e___c_o_n_f_i_g = -[ - [ "ENABLE_EVOLVE_OPTIMIZATION", "group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga2cac097081444a7a9b040f4b11550e47", null ], - [ "EVOLVE_MAX_PARAMS", "group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga80d6162495fc3776d8902610657d4fee", null ], - [ "EVOLVE_MAX_CANDIDATES", "group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga7c1396e5c95c766afccdb45cbfcf5971", null ] -]; \ No newline at end of file diff --git a/Doc/html/group___e_v_o_l_v_e___c_o_n_f_i_g.md5 b/Doc/html/group___e_v_o_l_v_e___c_o_n_f_i_g.md5 deleted file mode 100644 index 53dee98..0000000 --- a/Doc/html/group___e_v_o_l_v_e___c_o_n_f_i_g.md5 +++ /dev/null @@ -1 +0,0 @@ -0e28d80dcd04448aed641d64d20b3125 \ No newline at end of file diff --git a/Doc/html/group___e_v_o_l_v_e___c_o_n_f_i_g.png b/Doc/html/group___e_v_o_l_v_e___c_o_n_f_i_g.png deleted file mode 100644 index 9c2b43fdc4789878b8a6ea6fe9bb6cfcf7e829b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1033 zcmV+k1or!hP)@fIYMKm=QMJnU||KAD}JAJ4PTGx76+ zh31)Ozw;%XZ{|DC>@0|gh=_=Yh%AS(2e!7h){HS5A(Dwvp69>r?Cks*I*%s${r+a? z9HhD=Nsh8CdptXK#hzr0*)YaDSYBGuy9@jhI*BIq|JW^~(P#*KHam8qK&P@S^PW)b z(lia7LTkNVkJZ)H&}qm5hlhupoSa-3PXgp3A{D7XMIxpG6^WP%R3u_5P?3nKKt&=p z_clut#=QL8L!Rd@L!Zaa^BiN0^Z1Uv4txUK1HJF*)S zvfz0;D^R;=To#cXE7Ib;27Cm30o(yzos54UETaaxQbfMk1sVGH;iN!|im@YSy0#Kv z1K0$<1l|B%;J7o9|1YoCphd-Lj5&YVdEpeKr=PzF|s?MFaZThplZFamY-=cYS^R8;C2h*Z9c=qS%zZac}?f2B#UrjfF z&w)Ph4)7efI@xxuY0%irJGiQ}dUku**qq_AB6B;2)}=HNR!t3NPK-+FB={!s+5e3UtvCrsI?4Hobwi* z9Q&Q|0@2%y+uommzb4yW_}F1gT(qWjV$?aCF7wP=WwFZzXJ^nV?WBvAvn*y&e4ihl z0QM%YZ-5UO-vj*=cnufG%7a#+V0P zZ8Kb+xzjWy&-1&3!Jy8y+;!j_<%qy?)LU}t_QaLakw(%@<0^*LZHnvRX3lyR&O1Z?Aed*Wv z7FXmlQ-O*^Oa&?uF%_st#Pr40m)!C3ap4ytOI*&*&I-pb6ljtpN2AebxVN|GJ*h58 zlH@3K4o&5GK0G}=4V{KmlqAXH#j`|2L_|bHMEv*{m7%>YjQPfo00000NkvXXu0mjf DCJ+EZ diff --git a/Doc/html/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.js b/Doc/html/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.js deleted file mode 100644 index df1c356..0000000 --- a/Doc/html/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.js +++ /dev/null @@ -1,23 +0,0 @@ -var group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r = -[ - [ "EvolveOptimizer_t", "struct_evolve_optimizer__t.html", [ - [ "stability", "struct_evolve_optimizer__t.html#a80eb0b8525b6bb838484f5922b9d8f7c", null ], - [ "n_params", "struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8", null ], - [ "n_cand", "struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1", null ], - [ "n_best", "struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6", null ], - [ "mutation_amp", "struct_evolve_optimizer__t.html#af779c7aeba0053e36cee7aade160f1c8", null ], - [ "cand_index", "struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae", null ], - [ "gen_index", "struct_evolve_optimizer__t.html#ad0f464d7048a9ed0753b61f76f563108", null ], - [ "gen_mut", "struct_evolve_optimizer__t.html#a3be8c0c34db8429210ff470497a56727", null ], - [ "loss", "struct_evolve_optimizer__t.html#a93f628397c2f8d4027f2906752b650df", null ], - [ "candidates", "struct_evolve_optimizer__t.html#aec67667fd1f1533e693e41c79bc28da4", null ], - [ "sorted_idx", "struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a", null ] - ] ], - [ "PARAM_SCALE", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga83abbcabaff9111c03ae2475ee72ea3e", null ], - [ "PARAM_UNSCALE", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gaa1d5510fe5f0bd989473f3ebe324bde3", null ], - [ "EVOLVE_MUTATION_MIN_PCT", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga2f2b1be34ad4eb1bf3267237200cd6c6", null ], - [ "EVOLVE_MUTATION_MAX_PCT", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga861c1c6a503c21441abcec0d57b848bc", null ], - [ "ELOVLE_N_ELITE_CANDIDATE", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga38607e23d9234524bc7de5869b15b8eb", null ], - [ "EvolveOptimizer_Init", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga4e3ea118b5b9068619c57724a925ba21", null ], - [ "EvolveOptimizer_Step", "group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gaef44a1f3298514569cc2b396a92101ef", null ] -]; \ No newline at end of file diff --git a/Doc/html/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.md5 b/Doc/html/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.md5 deleted file mode 100644 index b136329..0000000 --- a/Doc/html/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.md5 +++ /dev/null @@ -1 +0,0 @@ -222e7e00155a235ae6b55b58801480e4 \ No newline at end of file diff --git a/Doc/html/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.png b/Doc/html/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.png deleted file mode 100644 index d5cec842773c012ec1f24d7a43618269b2e9626d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1110 zcmV-c1gZOpP)b30O`{ zFfMf3yo5lSkS6I;FQ+%)An+?lYdgpyDr6Tnf)Ke=A&5Za@ixWXh4tJ%@9fR)>Gy#H z?ZeFcPu%=(W_IrmL_|bHL_|bHq$*?Y*xcNF-57J#M=+8tj^q2=+uP55$5F>{INb0Z zgR~2J*i{sd3^^F;0=3=sAPHGZ=T3a5x3S0+12fhV<@f%J#d6&?e-s%vB zVP|ibs2f|?o|ChrlGR~5(6MqQ}EXy!y(v z5Wr<;9+iBkSCv zIGb|1rc%Tnwd8GQ{avM8+P2G>%eLh>rZ<33fFYBl@)vM%dhB9Wp}xs_ahDnD+tZ3V zYYtWFC^|Q}J^MR~qQbcBa==_Ywz6?leU4SMl2qz0*w*c6$#Q*|YSoExe}DgN;34q7 zb*OA2d04qoM-C1S7z_rL%H+MclO3{dM{rR`m9|`zYkTd)RsF3b75iN|sqXN#^g%QZQwHSC-8E~D!vAuRc_dUwY9Zge!9BPALPtRl#6&y z3!VOeo6$&~w5diHIGX`3c?1WNx8c?NN^4zRsS4CdiW#e)&{VDJm_=?FC=R+pa7h*XucHS8-~e5phaMMMRv^kBP}b93LO2{_vFa z*V)-w>i)T;5(L4~cs$ -MyLibs: Evolve configs +MyLibs: Genetic configs @@ -71,7 +71,7 @@ $(function() {
      @@ -97,43 +97,47 @@ $(function(){initNavTree('group___e_v_o_l_v_e___c_o_n_f_i_g.html','',''); });
      -
      Evolve configs
      +
      Genetic configs
      -

      Конфигурация однослойного персептрона и алгоритма обучения +

      Конфигурация генетического алгоритма обучения More...

      -
      Collaboration diagram for Evolve configs:
      +
      Collaboration diagram for Genetic configs:
      - - - - - - + + + + + + + + + +

      Macros

      #define ENABLE_EVOLVE_OPTIMIZATION
       Включить оптимизацию параметров
      #define EVOLVE_MAX_PARAMS   20
       Максимальное количество параметров
      #define EVOLVE_MAX_CANDIDATES   100
       Максимальное количество кандидатов для обучения
      #define GEN_OPTIMIZATION_ENABLE
       Включить оптимизацию параметров
      #define GEN_MAX_PARAMS   20
       Максимальное количество параметров
      #define GEN_MAX_CANDIDATES   100
       Максимальное количество кандидатов для обучения
      #define BENCH_TIME_ENABLE
       Включить бенч времени
      #define BENCH_TIME_MAX_CHANNELS   16
       Максимальное количество каналов измерения

      Detailed Description

      -

      Конфигурация однослойного персептрона и алгоритма обучения

      +

      Конфигурация генетического алгоритма обучения

      Macro Definition Documentation

      - -

      ◆ ENABLE_EVOLVE_OPTIMIZATION

      + +

      ◆ GEN_OPTIMIZATION_ENABLE

      - +
      #define ENABLE_EVOLVE_OPTIMIZATION#define GEN_OPTIMIZATION_ENABLE
      @@ -144,14 +148,14 @@ Macros
      - -

      ◆ EVOLVE_MAX_PARAMS

      + +

      ◆ GEN_MAX_PARAMS

      - +
      #define EVOLVE_MAX_PARAMS   20#define GEN_MAX_PARAMS   20
      @@ -162,14 +166,14 @@ Macros
      - -

      ◆ EVOLVE_MAX_CANDIDATES

      + +

      ◆ GEN_MAX_CANDIDATES

      - +
      #define EVOLVE_MAX_CANDIDATES   100#define GEN_MAX_CANDIDATES   100
      @@ -178,6 +182,42 @@ Macros

      Definition at line 66 of file mylibs_config.h.

      +
      +
      + +

      ◆ BENCH_TIME_ENABLE

      + +
      +
      + + + + +
      #define BENCH_TIME_ENABLE
      +
      + +

      Включить бенч времени

      + +

      Definition at line 81 of file mylibs_config.h.

      + +
      +
      + +

      ◆ BENCH_TIME_MAX_CHANNELS

      + +
      +
      + + + + +
      #define BENCH_TIME_MAX_CHANNELS   16
      +
      + +

      Максимальное количество каналов измерения

      + +

      Definition at line 82 of file mylibs_config.h.

      +
      diff --git a/Doc/html/group___g_e_n___c_o_n_f_i_g.js b/Doc/html/group___g_e_n___c_o_n_f_i_g.js new file mode 100644 index 0000000..e91d8fb --- /dev/null +++ b/Doc/html/group___g_e_n___c_o_n_f_i_g.js @@ -0,0 +1,8 @@ +var group___g_e_n___c_o_n_f_i_g = +[ + [ "GEN_OPTIMIZATION_ENABLE", "group___g_e_n___c_o_n_f_i_g.html#gae6d1db3c0b21f67cb0db2673d207b62c", null ], + [ "GEN_MAX_PARAMS", "group___g_e_n___c_o_n_f_i_g.html#ga8daf4b266a95353d580bd7946f47c0ab", null ], + [ "GEN_MAX_CANDIDATES", "group___g_e_n___c_o_n_f_i_g.html#ga201cffde04ebc6540869c74bd1dae869", null ], + [ "BENCH_TIME_ENABLE", "group___g_e_n___c_o_n_f_i_g.html#ga67c3c54503b9bbd5d175ac46d37866d9", null ], + [ "BENCH_TIME_MAX_CHANNELS", "group___g_e_n___c_o_n_f_i_g.html#ga74fdf777ceefa5e7d67120fbda4cde52", null ] +]; \ No newline at end of file diff --git a/Doc/html/group___e_v_o_l_v_e___c_o_n_f_i_g.map b/Doc/html/group___g_e_n___c_o_n_f_i_g.map similarity index 59% rename from Doc/html/group___e_v_o_l_v_e___c_o_n_f_i_g.map rename to Doc/html/group___g_e_n___c_o_n_f_i_g.map index 491aa34..1d54648 100644 --- a/Doc/html/group___e_v_o_l_v_e___c_o_n_f_i_g.map +++ b/Doc/html/group___g_e_n___c_o_n_f_i_g.map @@ -1,4 +1,4 @@ - - + + diff --git a/Doc/html/group___g_e_n___c_o_n_f_i_g.md5 b/Doc/html/group___g_e_n___c_o_n_f_i_g.md5 new file mode 100644 index 0000000..d496a11 --- /dev/null +++ b/Doc/html/group___g_e_n___c_o_n_f_i_g.md5 @@ -0,0 +1 @@ +5f0295c96943053471a3de806e4b1afd \ No newline at end of file diff --git a/Doc/html/group___g_e_n___c_o_n_f_i_g.png b/Doc/html/group___g_e_n___c_o_n_f_i_g.png new file mode 100644 index 0000000000000000000000000000000000000000..698caaee05d80bb1cfa803709109562851841501 GIT binary patch literal 1055 zcmV+)1mOFLP)BxM}O@%J-$Vi6Qlh!Ih?zH8)~aA;@YFVMz26z>ip zo8fv38~q=&a@bUY#mSZy_KKG#SOl>MsbXKBL_|bHL_{P`rnq2ZW8*br%#9Gi^pUmp_pPn1zeC5-#Beyg89D}O zCrOfnEXy9`mpxZp$ry9P7;}GlVfEfE;HS_*G@<`v{3esh82BW=Y$j>XWLegEKz)~{ zY3LAI8w>`luC9g-LmJrM-{a zYmE7C@-07Z7vp>OB5)V@1$Z@ZEVZR+dSMC`L!acoi_o!^-lwh07=yL8bl&IKzQ*k+)bKnEu`P1c5bu($2&fKGSE$e!}eR@uyZ?Snfpj-)Rt&O1~wv_;H0p9@+fidtQ z=Ls8?vgFLNEO>R1bDdTJS4Avqq4TY8{xerg?Ao@hb?&HTzYcs0JOX|N?g1|`eU|%* z&mHxJtNOay=X?w4N_5wDuC~)PZq;^u-nw<;t`l3^xU2Hk9#^rbh0f2P{e4!k%Ua^% zHg)z_(^aO=fPMkI4m{z!qAvA&46Rs^=gpV>ou5Ce;#uYqfYkE*u72eo(V$===`gTbKj_Qiv+>H*jFIbWUeyIQww z`*{`B*Z0z^r1h_D3aFa738Kowa0$}-<(cYf!j>m5h+@qOK-k)6StVKP20Xj+f}{gG;e?N z*6pHQ&5!9Czl-*GrW6f_!<)vK`?0n$J}Z2hrdVrljYgw7=Y}i5M@%2Gcn25|s6F1? z+_ZWLez|-;h;sT8{CG4PUHIjS=qf=`4%JgDa3`f=&v4k+yb{1 z -MyLibs: Evolve optimizer +MyLibs: Genetic optimizer @@ -71,7 +71,7 @@ $(function() {
      @@ -97,27 +97,27 @@ $(function(){initNavTree('group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html','','');
      -
      Evolve optimizer
      +
      Genetic optimizer

      Библиотека для эволюционного подбора параметров More...

      -
      Collaboration diagram for Evolve optimizer:
      +
      Collaboration diagram for Genetic optimizer:
      - - + +

      Classes

      struct  EvolveOptimizer_t
       Структура эволюционного оптимизатора More...
      struct  GenOptimizer_t
       Структура эволюционного оптимизатора More...
      @@ -125,19 +125,19 @@ Macros - - - - + + + +

      Macros

       Линейное масштабирование x из диапазона [min_val, max_val] в диапазон [0, 1)
      #define PARAM_UNSCALE(val, min_val, max_val)
       Обратное линейное масштабирование значения из [0, 1) в диапазон [min_val, max_val].
      #define EVOLVE_MUTATION_MIN_PCT   10
       Минимальная мутация (в процентах от Loss)
      #define EVOLVE_MUTATION_MAX_PCT   100
       Максимальная мутация (в процентах от Loss)
      #define GEN_MUTATION_MIN_PCT   10
       Минимальная мутация (в процентах от Loss)
      #define GEN_MUTATION_MAX_PCT   100
       Максимальная мутация (в процентах от Loss)
      #define ELOVLE_N_ELITE_CANDIDATE   2
       Количество кандидатов, которые проходят в поколение без изменений (по умолчанию 2)
      - - - - + + + +

      Functions

      __STATIC_INLINE int EvolveOptimizer_Init (EvolveOptimizer_t *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, float mutation_amp, float *start_params)
       Инициализация эволюционного оптимизатора.
      __STATIC_INLINE int EvolveOptimizer_Step (EvolveOptimizer_t *opt, float *params, float loss)
       Один шаг эволюционного оптимизатора.
      static int GenOptimizer_Init (GenOptimizer_t *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, float mutation_amp, float *start_params)
       Инициализация эволюционного оптимизатора.
      static int GenOptimizer_Step (GenOptimizer_t *opt, float *params, float loss)
       Один шаг эволюционного оптимизатора.

      Detailed Description

      Библиотека для эволюционного подбора параметров

      @@ -148,20 +148,20 @@ Functions
    • Несколько независимых оптимизаторов в одной программе

    Параметры для конфигурации:

      -
    • ENABLE_EVOLVE_OPTIMIZATION - Включить оптимизацию параметров Если библиотека отключена ENABLE_EVOLVE_OPTIMIZATION, то вставляются заглушки, никак не влияющие на параметры и остальную программу
    • -
    • EVOLVE_MAX_PARAMS - Максимальное количество параметров
    • -
    • EVOLVE_MAX_CANDIDATES - Максимальное количество кандидатов для обучения
    • -
    • (опционально) EVOLVE_MUTATION_MIN_PCT - Минимальная мутация в процентах от Loss (по умолчанию 10%)
    • -
    • (опционально) EVOLVE_MUTATION_MAX_PCT - Максимальная мутация в процентах от Loss (по умолчанию 100%)
    • +
    • GEN_OPTIMIZATION_ENABLE - Включить оптимизацию параметров Если библиотека отключена GEN_OPTIMIZATION_ENABLE, то вставляются заглушки, никак не влияющие на параметры и остальную программу
    • +
    • GEN_MAX_PARAMS - Максимальное количество параметров
    • +
    • GEN_MAX_CANDIDATES - Максимальное количество кандидатов для обучения
    • +
    • (опционально) GEN_MUTATION_MIN_PCT - Минимальная мутация в процентах от Loss (по умолчанию 10%)
    • +
    • (опционально) GEN_MUTATION_MAX_PCT - Максимальная мутация в процентах от Loss (по умолчанию 100%)
    • (опционально) ELOVLE_N_ELITE_CANDIDATE - Количество кандидатов, которые проходят в поколение без изменений
    -
    Пример использования:
    +
    Пример использования:
    #include "gen_optimizer.h"
    #define N_PARAMS 4
    #define N_CANDIDATES 100
    #define N_BEST 10
    #define MUTATION 0.1f
    float params[N_PARAMS];
    - +
    GenOptimizer_t optimizer;
    // Формирование параметров
    uint16_t param_u16 = 800;
    @@ -174,23 +174,23 @@ Functions
    params[3] = PARAM_SCALE(param_i16, 500.0f, 5000.0f);
    // Инициалиазция
    -
    EvolveOptimizer_Init(&optimizer, N_PARAMS, N_CANDIDATES, N_BEST, MUTATION, params);
    +
    GenOptimizer_Init(&optimizer, N_PARAMS, N_CANDIDATES, N_BEST, MUTATION, params);
    // Шаг эволюции
    float loss = calc_loss(); // расчет эффективности параметров (от 0 до 1)
    -
    EvolveOptimizer_Step(&optimizer, params, loss);
    +
    GenOptimizer_Step(&optimizer, params, loss);
    // Взятие следующих для эволюции параметров
    param_u16 = PARAM_UNSCALE(params[0], 0.0f, 1000.0f);
    param_f = PARAM_UNSCALE(params[1], 0.001f, 0.1f);
    param_u8 = PARAM_UNSCALE(params[2], 10.0f, 100.0f);
    param_i16 = PARAM_UNSCALE(params[3], 500.0f, 5000.0f);
    -
    Заголовочный файл для адаптивного подбора параметров
    -
    __STATIC_INLINE int EvolveOptimizer_Init(EvolveOptimizer_t *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, float mutation_amp, float *start_params)
    Инициализация эволюционного оптимизатора.
    -
    #define PARAM_SCALE(x, min_val, max_val)
    Линейное масштабирование x из диапазона [min_val, max_val] в диапазон [0, 1)
    -
    #define PARAM_UNSCALE(val, min_val, max_val)
    Обратное линейное масштабирование значения из [0, 1) в диапазон [min_val, max_val].
    -
    __STATIC_INLINE int EvolveOptimizer_Step(EvolveOptimizer_t *opt, float *params, float loss)
    Один шаг эволюционного оптимизатора.
    -
    Структура эволюционного оптимизатора
    +
    Заголовочный файл для адаптивного подбора параметров
    +
    static int GenOptimizer_Init(GenOptimizer_t *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, float mutation_amp, float *start_params)
    Инициализация эволюционного оптимизатора.
    +
    #define PARAM_SCALE(x, min_val, max_val)
    Линейное масштабирование x из диапазона [min_val, max_val] в диапазон [0, 1)
    +
    #define PARAM_UNSCALE(val, min_val, max_val)
    Обратное линейное масштабирование значения из [0, 1) в диапазон [min_val, max_val].
    +
    static int GenOptimizer_Step(GenOptimizer_t *opt, float *params, float loss)
    Один шаг эволюционного оптимизатора.
    +
    Структура эволюционного оптимизатора

    Macro Definition Documentation

    @@ -220,7 +220,7 @@ Functions

    Линейное масштабирование x из диапазона [min_val, max_val] в диапазон [0, 1)

    -

    Definition at line 73 of file evolve_optimizer.h.

    +

    Definition at line 73 of file gen_optimizer.h.

    @@ -251,43 +251,43 @@ Functions

    Обратное линейное масштабирование значения из [0, 1) в диапазон [min_val, max_val].

    -

    Definition at line 79 of file evolve_optimizer.h.

    +

    Definition at line 79 of file gen_optimizer.h.

    - -

    ◆ EVOLVE_MUTATION_MIN_PCT

    + +

    ◆ GEN_MUTATION_MIN_PCT

    - +
    #define EVOLVE_MUTATION_MIN_PCT   10#define GEN_MUTATION_MIN_PCT   10

    Минимальная мутация (в процентах от Loss)

    -

    Definition at line 89 of file evolve_optimizer.h.

    +

    Definition at line 89 of file gen_optimizer.h.

    - -

    ◆ EVOLVE_MUTATION_MAX_PCT

    + +

    ◆ GEN_MUTATION_MAX_PCT

    - +
    #define EVOLVE_MUTATION_MAX_PCT   100#define GEN_MUTATION_MAX_PCT   100

    Максимальная мутация (в процентах от Loss)

    -

    Definition at line 92 of file evolve_optimizer.h.

    +

    Definition at line 92 of file gen_optimizer.h.

    @@ -305,21 +305,24 @@ Functions

    Количество кандидатов, которые проходят в поколение без изменений (по умолчанию 2)

    -

    Definition at line 95 of file evolve_optimizer.h.

    +

    Definition at line 95 of file gen_optimizer.h.

    Function Documentation

    - -

    ◆ EvolveOptimizer_Init()

    + +

    ◆ GenOptimizer_Init()

    + + + + + +
    - + - + @@ -347,6 +350,11 @@ Functions
    __STATIC_INLINE int EvolveOptimizer_Init int GenOptimizer_Init (EvolveOptimizer_t * opt, GenOptimizer_t * opt,
    float * start_params )
    +
    +static

    Инициализация эволюционного оптимизатора.

    @@ -363,20 +371,23 @@ Functions
    Returns
    0 — если окей, -1 — если ошибка
    -

    Definition at line 155 of file evolve_optimizer.h.

    +

    Definition at line 155 of file gen_optimizer.h.

    - -

    ◆ EvolveOptimizer_Step()

    + +

    ◆ GenOptimizer_Step()

    + + + + + +
    - + - + @@ -389,6 +400,11 @@ Functions
    __STATIC_INLINE int EvolveOptimizer_Step int GenOptimizer_Step (EvolveOptimizer_t * opt, GenOptimizer_t * opt,
    float loss )
    +
    +static

    Один шаг эволюционного оптимизатора.

    @@ -404,7 +420,7 @@ Functions

    Сохраняет loss текущего кандидата и формирует параметры следующего кандидата. Если накоплено n_cand кандидатов, генерируется новое поколение. Новое поколение формируется случайным выбором из n_best лучших с добавлением мутации.

    На выходе params содержит параметры следующего кандидата для измерений.

    Note
    Функция использует глобальную внутреннюю переменную для сортировки. Надо убедится что только один экземпляр функции запущен в момент времени
    -

    Definition at line 225 of file evolve_optimizer.h.

    +

    Definition at line 225 of file gen_optimizer.h.

    diff --git a/Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.js b/Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.js new file mode 100644 index 0000000..f13bdd9 --- /dev/null +++ b/Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.js @@ -0,0 +1,23 @@ +var group___g_e_n___o_p_t_i_m_i_z_e_r = +[ + [ "GenOptimizer_t", "struct_gen_optimizer__t.html", [ + [ "stability", "struct_gen_optimizer__t.html#abe0aacea949fbe93e5d4c002e37d7192", null ], + [ "n_params", "struct_gen_optimizer__t.html#afe598a90024a8aa628dd16f3a2b38eb5", null ], + [ "n_cand", "struct_gen_optimizer__t.html#a9e20d2f6f39a5147e6dbac46baca73a9", null ], + [ "n_best", "struct_gen_optimizer__t.html#a8201f1eede36a2c04ec7b4caac7465c9", null ], + [ "mutation_amp", "struct_gen_optimizer__t.html#ad4dc0e53b3ca6bf2a642dfe7a1d1f26c", null ], + [ "cand_index", "struct_gen_optimizer__t.html#a04a72c1a13e17581e84eaaf3d245bbfc", null ], + [ "gen_index", "struct_gen_optimizer__t.html#a8f226c85e9bb034cb811aa0366bb191c", null ], + [ "gen_mut", "struct_gen_optimizer__t.html#acfeb93ef4823e09473ddba52fae9a6b1", null ], + [ "loss", "struct_gen_optimizer__t.html#a8b5066935d99f2fc7ebb94cc3652fc73", null ], + [ "candidates", "struct_gen_optimizer__t.html#a2c9a50ea7d975b9bc22a67e453ab83df", null ], + [ "sorted_idx", "struct_gen_optimizer__t.html#ad37161efa27ef1390d1f7e6ee2f79b12", null ] + ] ], + [ "PARAM_SCALE", "group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga83abbcabaff9111c03ae2475ee72ea3e", null ], + [ "PARAM_UNSCALE", "group___g_e_n___o_p_t_i_m_i_z_e_r.html#gaa1d5510fe5f0bd989473f3ebe324bde3", null ], + [ "GEN_MUTATION_MIN_PCT", "group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga3db7bdf57549722427e1e72dcaa87068", null ], + [ "GEN_MUTATION_MAX_PCT", "group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga48dca8f0a0c9b96d02236ef76ac827fd", null ], + [ "ELOVLE_N_ELITE_CANDIDATE", "group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga38607e23d9234524bc7de5869b15b8eb", null ], + [ "GenOptimizer_Init", "group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga2db1df46b4082ad9280ef4344fdf4e8a", null ], + [ "GenOptimizer_Step", "group___g_e_n___o_p_t_i_m_i_z_e_r.html#gaa9a4c4f43f7beb926c85bd4817ebd628", null ] +]; \ No newline at end of file diff --git a/Doc/html/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.map b/Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.map similarity index 79% rename from Doc/html/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.map rename to Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.map index 60c0efb..5430a1c 100644 --- a/Doc/html/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.map +++ b/Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.map @@ -1,4 +1,4 @@ - - + + diff --git a/Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.md5 b/Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.md5 new file mode 100644 index 0000000..63165ab --- /dev/null +++ b/Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.md5 @@ -0,0 +1 @@ +ec124a446898cfdeeba090736e9d2802 \ No newline at end of file diff --git a/Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.png b/Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.png new file mode 100644 index 0000000000000000000000000000000000000000..835cdf4ac13411a32a58c916d64f574da5106a0b GIT binary patch literal 1121 zcmV-n1fKheP)y#TauVL@-j!TKjlsXXiL{98C;|!&{+a zknTiLbd)5?lk~QivpX4MZWv=8b{Cd7x()mkI*2CpeOfK!@pu>bB)x4e(aa=C;yoa7 z6UTAr5EeEV3|L=Z4;_Yhc6fNm>FMd*_9#FsBC=wXXhg(2B^nX&PKicDyi=kP5$}{} zM8vyR6OA$Eg{5!uV#>zcR{TAA|8D@F1HS<81dgS)IF4UfLd6hL)A~clomF@pOYqA5B+ zt+jnQvoE^{cn|mvcnbUse9T3Xxm1c0N|GeKJ5!4r?_)H1t(?5B$!xu-+u~BLYTu^H zUeC2IPhHBZz_-BPz;D1^;7um?u)We|MSYRi%E{|m&DM*$U3ulwWwP6<>dR9%wyOHe z$`#d-jiYGasyG+bTGz=%w&hc{Ui7$5xxDo@V|J~p<(S@Oa^KUJzyNs0MN(PHiWg^Jx;O6>$f%b(&zV><|WZ&&)#WG zyAE~A^=(`zJ66>s(QIyR{(f+9@B{EE@CB1ur2lXqhq=e3i`BV}jg5uwI?tYA)0Smc zrVB-_lP*4sPPA=S>t%Jj#??mGsl*s~G+iD5HGiVus`gDk@B4b8yxF7K>o@%j>zX?Xhr{75W6Z-< zYg+bM9LHE|Z;wW!I%6HL10OQEGWaHNjX+(e?d@%=AHKTK#f68VOn>-lcQhKg{lcDH zdgs88)8#GT->~7xDpR6a4fDUPDAFO_y)DwQW$iYVQKAtM@04gn#5*M#5%ErmMnt^R zAIM23PEJm8|5!|x%lY|v?)JGv6GhR{cs$tc=qPjyO<8Mq&(6+5hanw_ nqUcHWULqnQA|fIpBGR?zdI1Mb?YDyJ00000NkvXXu0mjfP%t=6 literal 0 HcmV?d00001 diff --git a/Doc/html/group___l_i_b_s___c_o_n_f_i_g.html b/Doc/html/group___l_i_b_s___c_o_n_f_i_g.html index 10024d9..8d0f5e3 100644 --- a/Doc/html/group___l_i_b_s___c_o_n_f_i_g.html +++ b/Doc/html/group___l_i_b_s___c_o_n_f_i_g.html @@ -118,8 +118,8 @@ $(function(){initNavTree('group___l_i_b_s___c_o_n_f_i_g.html','',''); }); Macros #define local_time()  Локальное время
    -#define INCLUDE_EVOLVE_OPTIMIZER - Подключить библиотеку для оптимизации параметров
    +#define INCLUDE_GEN_OPTIMIZER + Подключить библиотеку для оптимизации параметров
    #define INCLUDE_BIT_ACCESS_LIB  Подключить библиотеку с typedef с битовыми полями
    #define INCLUDE_TRACKERS_LIB @@ -152,25 +152,25 @@ Macros

    Локальное время

    -

    Definition at line 80 of file mylibs_config.h.

    +

    Definition at line 97 of file mylibs_config.h.

    - -

    ◆ INCLUDE_EVOLVE_OPTIMIZER

    + +

    ◆ INCLUDE_GEN_OPTIMIZER

    - +
    #define INCLUDE_EVOLVE_OPTIMIZER#define INCLUDE_GEN_OPTIMIZER

    Подключить библиотеку для оптимизации параметров

    -

    Definition at line 82 of file mylibs_config.h.

    +

    Definition at line 99 of file mylibs_config.h.

    @@ -188,7 +188,7 @@ Macros

    Подключить библиотеку с typedef с битовыми полями

    -

    Definition at line 83 of file mylibs_config.h.

    +

    Definition at line 100 of file mylibs_config.h.

    @@ -206,7 +206,7 @@ Macros

    Подключить библиотеку с трекерами

    -

    Definition at line 84 of file mylibs_config.h.

    +

    Definition at line 101 of file mylibs_config.h.

    @@ -224,7 +224,7 @@ Macros

    Подключить библиотеку с трейсами

    -

    Definition at line 85 of file mylibs_config.h.

    +

    Definition at line 102 of file mylibs_config.h.

    @@ -242,7 +242,7 @@ Macros

    Подключить библиотеку с периферией

    -

    Definition at line 86 of file mylibs_config.h.

    +

    Definition at line 103 of file mylibs_config.h.

    @@ -260,7 +260,7 @@ Macros

    Использовать FreeRTOS задержку, вместо HAL.

    -

    Definition at line 87 of file mylibs_config.h.

    +

    Definition at line 104 of file mylibs_config.h.

    diff --git a/Doc/html/group___l_i_b_s___c_o_n_f_i_g.js b/Doc/html/group___l_i_b_s___c_o_n_f_i_g.js index e82ae27..8ccdb19 100644 --- a/Doc/html/group___l_i_b_s___c_o_n_f_i_g.js +++ b/Doc/html/group___l_i_b_s___c_o_n_f_i_g.js @@ -1,7 +1,7 @@ var group___l_i_b_s___c_o_n_f_i_g = [ [ "local_time", "group___l_i_b_s___c_o_n_f_i_g.html#ga9c853b02c22f26023c34d1d404b6d653", null ], - [ "INCLUDE_EVOLVE_OPTIMIZER", "group___l_i_b_s___c_o_n_f_i_g.html#ga66560656d080d6551627a19dfb847c66", null ], + [ "INCLUDE_GEN_OPTIMIZER", "group___l_i_b_s___c_o_n_f_i_g.html#ga3cdc9ef47fd3ff080d38481295327692", null ], [ "INCLUDE_BIT_ACCESS_LIB", "group___l_i_b_s___c_o_n_f_i_g.html#gaf4ddb2a71ec0d05c2480e197cd17c0be", null ], [ "INCLUDE_TRACKERS_LIB", "group___l_i_b_s___c_o_n_f_i_g.html#ga4403055986b70bb02b8d37073a122e32", null ], [ "INCLUDE_TRACE_LIB", "group___l_i_b_s___c_o_n_f_i_g.html#ga0a3ca94b616997069dd53e2c6c2687d7", null ], diff --git a/Doc/html/group___m_y_l_i_b_s___c_o_n_f_i_g.html b/Doc/html/group___m_y_l_i_b_s___c_o_n_f_i_g.html index 04d29e3..c6b87bc 100644 --- a/Doc/html/group___m_y_l_i_b_s___c_o_n_f_i_g.html +++ b/Doc/html/group___m_y_l_i_b_s___c_o_n_f_i_g.html @@ -109,7 +109,7 @@ $(function(){initNavTree('group___m_y_l_i_b_s___c_o_n_f_i_g.html','',''); }); + +

    Variable Documentation

    + +

    ◆ stack_frame

    + +
    +
    + + + + + +
    + + + + +
    HF_StackFrame_t* stack_frame
    +
    +static
    +
    + +

    Definition at line 523 of file trace.h.

    + +
    +
    + +

    ◆ stack_dump

    + +
    +
    + + + + + +
    + + + + +
    uint32_t stack_dump[32]
    +
    +static
    +
    + +

    Definition at line 524 of file trace.h.

    + +
    +
    + +

    ◆ ret_adr

    + +
    +
    + + + + + +
    + + + + +
    void* ret_adr[10] = {0}
    +
    +static
    +
    + +

    Definition at line 525 of file trace.h.

    +
    diff --git a/Doc/html/group___t_r_a_c_e___s_e_r_i_a_l.html b/Doc/html/group___t_r_a_c_e___s_e_r_i_a_l.html index ca0045f..2aab441 100644 --- a/Doc/html/group___t_r_a_c_e___s_e_r_i_a_l.html +++ b/Doc/html/group___t_r_a_c_e___s_e_r_i_a_l.html @@ -195,7 +195,7 @@ Macros
    Value:
    my_printf("\n[%lu] [%s] " fmt, \
    (unsigned long)local_time(), TAG, ##__VA_ARGS__)
    -
    #define local_time()
    Локальное время
    +
    #define local_time()
    Локальное время
    #define my_printf(...)
    Универсальный макрос для вывода трассировки
    Definition trace.h:80

    Макрос логирования с поддержкой уровней LOG_LEVEL.

    diff --git a/Doc/html/group___u_t_i_l_s___d_e_f_i_n_e_s.html b/Doc/html/group___u_t_i_l_s___d_e_f_i_n_e_s.html index 72b22b5..bd87445 100644 --- a/Doc/html/group___u_t_i_l_s___d_e_f_i_n_e_s.html +++ b/Doc/html/group___u_t_i_l_s___d_e_f_i_n_e_s.html @@ -153,7 +153,7 @@ Macros

    Макрос использует memset для обнуления всей памяти структуры. Используется для быстрой и безопасной инициализации переменных структур до нуля.

    -

    Definition at line 155 of file mylibs_defs.h.

    +

    Definition at line 154 of file mylibs_defs.h.

    @@ -188,7 +188,7 @@ Macros
    Returns
    Результат деления, округленный вверх.

    Если результат деления без остатка: он возвращается как есть Если с остатком - округляется вверх

    -

    Definition at line 166 of file mylibs_defs.h.

    +

    Definition at line 165 of file mylibs_defs.h.

    @@ -218,7 +218,7 @@ Macros
    Returns
    Результат с поменяными местами старшим и младшим байтом.

    Переключения между двумя типами хранения слова: HI-LO байты и LO-HI байты.

    -

    Definition at line 174 of file mylibs_defs.h.

    +

    Definition at line 173 of file mylibs_defs.h.

    @@ -248,7 +248,7 @@ Macros
    Returns
    Абсолютное значение числа x.

    Берет число по модулю. Хз как работает библиотечный abs в stdlib.h, мб это быстрее, но вряд ли конечно.

    -

    Definition at line 182 of file mylibs_defs.h.

    +

    Definition at line 181 of file mylibs_defs.h.

    diff --git a/Doc/html/index.html b/Doc/html/index.html index 4155f67..bdab5f7 100644 --- a/Doc/html/index.html +++ b/Doc/html/index.html @@ -113,7 +113,7 @@ $(function(){initNavTree('index.html','',''); });

    @@ -158,7 +158,7 @@ $(function(){initNavTree('index.html','',''); });
    │ │ ├── mylibs_config.h # Конфигурация библиотек
    │ │ ├── mylibs_defs.h # Общие определения и макросы
    │ │ ├── bit_access.h # Битовый доступ к регистрам
    -
    │ │ ├── evolve_optimizer.h # Оптимизатор (генетический алгоритм)
    +
    │ │ ├── gen_optimizer.h # Оптимизатор (генетический алгоритм)
    │ │ ├── trackers.h # Трекеры для отладки
    │ │ └── trace.h # Трассировка и логирование
    │ └── src/
    diff --git a/Doc/html/mainpage_8h_source.html b/Doc/html/mainpage_8h_source.html index 489de5b..4945489 100644 --- a/Doc/html/mainpage_8h_source.html +++ b/Doc/html/mainpage_8h_source.html @@ -116,7 +116,7 @@ $(function(){initNavTree('mainpage_8h_source.html','',''); });
    14@subsubsection utils_module Общие утилиты (@ref MYLIBS_DEFINES)
    15- Макросы для задержек и утилит (@ref DELAYS_DEFINES и @ref UTILS_DEFINES)
    16- Трекеры для статистики и отладки (@ref TRACKERS и @ref TRACE)
    -
    17- Эволюционный алгоритм для оптимизации параметров (@ref EVOLVE_OPTIMIZER)
    +
    17- Эволюционный алгоритм для оптимизации параметров (@ref GEN_OPTIMIZER)
    18- Битовый доступ к регистрам через union (@ref BIT_ACCESS_DEFINES)
    19
    20@subsubsection trace_module Трассировка @ref TRACE
    @@ -152,7 +152,7 @@ $(function(){initNavTree('mainpage_8h_source.html','',''); });
    50│ │ ├── mylibs_config.h # Конфигурация библиотек
    51│ │ ├── mylibs_defs.h # Общие определения и макросы
    52│ │ ├── bit_access.h # Битовый доступ к регистрам
    -
    53│ │ ├── evolve_optimizer.h # Оптимизатор (генетический алгоритм)
    +
    53│ │ ├── gen_optimizer.h # Оптимизатор (генетический алгоритм)
    54│ │ ├── trackers.h # Трекеры для отладки
    55│ │ └── trace.h # Трассировка и логирование
    56│ └── src/
    diff --git a/Doc/html/menudata.js b/Doc/html/menudata.js index 7938a54..c4eb5d4 100644 --- a/Doc/html/menudata.js +++ b/Doc/html/menudata.js @@ -35,6 +35,7 @@ var menudata={children:[ {text:"e",url:"functions.html#index_e"}, {text:"g",url:"functions.html#index_g"}, {text:"h",url:"functions.html#index_h"}, +{text:"i",url:"functions.html#index_i"}, {text:"l",url:"functions.html#index_l"}, {text:"m",url:"functions.html#index_m"}, {text:"n",url:"functions.html#index_n"}, @@ -48,6 +49,7 @@ var menudata={children:[ {text:"e",url:"functions_vars.html#index_e"}, {text:"g",url:"functions_vars.html#index_g"}, {text:"h",url:"functions_vars.html#index_h"}, +{text:"i",url:"functions_vars.html#index_i"}, {text:"l",url:"functions_vars.html#index_l"}, {text:"m",url:"functions_vars.html#index_m"}, {text:"n",url:"functions_vars.html#index_n"}, @@ -60,30 +62,31 @@ var menudata={children:[ {text:"File Members",url:"globals.html",children:[ {text:"All",url:"globals.html",children:[ {text:"a",url:"globals.html#index_a"}, -{text:"b",url:"globals.html#index_b"}, -{text:"c",url:"globals.html#index_c"}, -{text:"d",url:"globals.html#index_d"}, -{text:"e",url:"globals.html#index_e"}, -{text:"f",url:"globals.html#index_f"}, -{text:"g",url:"globals.html#index_g"}, -{text:"h",url:"globals.html#index_h"}, -{text:"i",url:"globals.html#index_i"}, -{text:"l",url:"globals.html#index_l"}, -{text:"m",url:"globals.html#index_m"}, -{text:"n",url:"globals.html#index_n"}, -{text:"p",url:"globals.html#index_p"}, -{text:"r",url:"globals.html#index_r"}, -{text:"s",url:"globals.html#index_s"}, -{text:"t",url:"globals.html#index_t"}, -{text:"u",url:"globals.html#index_u"}]}, +{text:"b",url:"globals_b.html#index_b"}, +{text:"c",url:"globals_c.html#index_c"}, +{text:"d",url:"globals_d.html#index_d"}, +{text:"e",url:"globals_e.html#index_e"}, +{text:"f",url:"globals_f.html#index_f"}, +{text:"g",url:"globals_g.html#index_g"}, +{text:"h",url:"globals_h.html#index_h"}, +{text:"i",url:"globals_i.html#index_i"}, +{text:"l",url:"globals_l.html#index_l"}, +{text:"m",url:"globals_m.html#index_m"}, +{text:"n",url:"globals_n.html#index_n"}, +{text:"p",url:"globals_p.html#index_p"}, +{text:"r",url:"globals_r.html#index_r"}, +{text:"s",url:"globals_s.html#index_s"}, +{text:"t",url:"globals_t.html#index_t"}, +{text:"u",url:"globals_u.html#index_u"}]}, {text:"Functions",url:"globals_func.html",children:[ -{text:"e",url:"globals_func.html#index_e"}, +{text:"b",url:"globals_func.html#index_b"}, {text:"g",url:"globals_func.html#index_g"}, {text:"h",url:"globals_func.html#index_h"}, {text:"r",url:"globals_func.html#index_r"}, {text:"s",url:"globals_func.html#index_s"}, {text:"t",url:"globals_func.html#index_t"}, {text:"u",url:"globals_func.html#index_u"}]}, +{text:"Variables",url:"globals_vars.html"}, {text:"Enumerations",url:"globals_enum.html"}, {text:"Enumerator",url:"globals_eval.html"}, {text:"Macros",url:"globals_defs.html",children:[ diff --git a/Doc/html/mylibs__config_8h.html b/Doc/html/mylibs__config_8h.html index cceab33..19f82bf 100644 --- a/Doc/html/mylibs__config_8h.html +++ b/Doc/html/mylibs__config_8h.html @@ -121,48 +121,50 @@ $(function(){initNavTree('mylibs__config_8h.html','',''); }); @@ -202,16 +204,20 @@ Macros

     Конец RAM памяти (чтобы во время анализа стека не выйти за пределы)
    #define GPIO_TRACE_ENABLE  Включить GPIO трассировку
    -#define ENABLE_EVOLVE_OPTIMIZATION - Включить оптимизацию параметров
    -#define EVOLVE_MAX_PARAMS   20 - Максимальное количество параметров
    -#define EVOLVE_MAX_CANDIDATES   100 - Максимальное количество кандидатов для обучения
    +#define GEN_OPTIMIZATION_ENABLE + Включить оптимизацию параметров
    +#define GEN_MAX_PARAMS   20 + Максимальное количество параметров
    +#define GEN_MAX_CANDIDATES   100 + Максимальное количество кандидатов для обучения
    +#define BENCH_TIME_ENABLE + Включить бенч времени
    +#define BENCH_TIME_MAX_CHANNELS   16 + Максимальное количество каналов измерения
    #define local_time()  Локальное время
    -#define INCLUDE_EVOLVE_OPTIMIZER - Подключить библиотеку для оптимизации параметров
    +#define INCLUDE_GEN_OPTIMIZER + Подключить библиотеку для оптимизации параметров
    #define INCLUDE_BIT_ACCESS_LIB  Подключить библиотеку с typedef с битовыми полями
    #define INCLUDE_TRACKERS_LIB diff --git a/Doc/html/mylibs__config_8h.js b/Doc/html/mylibs__config_8h.js index 522ab62..9065b7a 100644 --- a/Doc/html/mylibs__config_8h.js +++ b/Doc/html/mylibs__config_8h.js @@ -16,11 +16,13 @@ var mylibs__config_8h = [ "HF_FLASH_ADDR", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga0c602733a4a359bf8c095d71cd4d0f63", null ], [ "HF_RAM_END", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga92d0d14732edb7dfa21d483304bdb051", null ], [ "GPIO_TRACE_ENABLE", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga4222e0e400ad81737cefcabeb03fd23b", null ], - [ "ENABLE_EVOLVE_OPTIMIZATION", "group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga2cac097081444a7a9b040f4b11550e47", null ], - [ "EVOLVE_MAX_PARAMS", "group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga80d6162495fc3776d8902610657d4fee", null ], - [ "EVOLVE_MAX_CANDIDATES", "group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga7c1396e5c95c766afccdb45cbfcf5971", null ], + [ "GEN_OPTIMIZATION_ENABLE", "group___g_e_n___c_o_n_f_i_g.html#gae6d1db3c0b21f67cb0db2673d207b62c", null ], + [ "GEN_MAX_PARAMS", "group___g_e_n___c_o_n_f_i_g.html#ga8daf4b266a95353d580bd7946f47c0ab", null ], + [ "GEN_MAX_CANDIDATES", "group___g_e_n___c_o_n_f_i_g.html#ga201cffde04ebc6540869c74bd1dae869", null ], + [ "BENCH_TIME_ENABLE", "group___g_e_n___c_o_n_f_i_g.html#ga67c3c54503b9bbd5d175ac46d37866d9", null ], + [ "BENCH_TIME_MAX_CHANNELS", "group___g_e_n___c_o_n_f_i_g.html#ga74fdf777ceefa5e7d67120fbda4cde52", null ], [ "local_time", "group___l_i_b_s___c_o_n_f_i_g.html#ga9c853b02c22f26023c34d1d404b6d653", null ], - [ "INCLUDE_EVOLVE_OPTIMIZER", "group___l_i_b_s___c_o_n_f_i_g.html#ga66560656d080d6551627a19dfb847c66", null ], + [ "INCLUDE_GEN_OPTIMIZER", "group___l_i_b_s___c_o_n_f_i_g.html#ga3cdc9ef47fd3ff080d38481295327692", null ], [ "INCLUDE_BIT_ACCESS_LIB", "group___l_i_b_s___c_o_n_f_i_g.html#gaf4ddb2a71ec0d05c2480e197cd17c0be", null ], [ "INCLUDE_TRACKERS_LIB", "group___l_i_b_s___c_o_n_f_i_g.html#ga4403055986b70bb02b8d37073a122e32", null ], [ "INCLUDE_TRACE_LIB", "group___l_i_b_s___c_o_n_f_i_g.html#ga0a3ca94b616997069dd53e2c6c2687d7", null ], diff --git a/Doc/html/mylibs__config_8h__dep__incl.map b/Doc/html/mylibs__config_8h__dep__incl.map index 1d4324b..8f1d357 100644 --- a/Doc/html/mylibs__config_8h__dep__incl.map +++ b/Doc/html/mylibs__config_8h__dep__incl.map @@ -1,44 +1,46 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Doc/html/mylibs__config_8h__dep__incl.md5 b/Doc/html/mylibs__config_8h__dep__incl.md5 index 2bf2c87..8005ab1 100644 --- a/Doc/html/mylibs__config_8h__dep__incl.md5 +++ b/Doc/html/mylibs__config_8h__dep__incl.md5 @@ -1 +1 @@ -5684ae5794e6a9fd93ea5670cfcc39cf \ No newline at end of file +1c7c706656d0b5264849d45ac47d4507 \ No newline at end of file diff --git a/Doc/html/mylibs__config_8h__dep__incl.png b/Doc/html/mylibs__config_8h__dep__incl.png index eb504b4ae99c9a650afd9c291df05367d358548f..a37417620d8cab258f3ae91137d8e2aa60cf306c 100644 GIT binary patch literal 60111 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�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 aU~URV3*>SCsFdRwq}CQF^TLy!_x=HBg#;!5 diff --git a/Doc/html/mylibs__config_8h_source.html b/Doc/html/mylibs__config_8h_source.html index e4296be..64d652b 100644 --- a/Doc/html/mylibs__config_8h_source.html +++ b/Doc/html/mylibs__config_8h_source.html @@ -157,45 +157,62 @@ $(function(){initNavTree('mylibs__config_8h_source.html','',''); });

    55
    56
    57/**
    -
    58 * @addtogroup EVOLVE_CONFIG Evolve configs
    +
    58 * @addtogroup GEN_CONFIG Genetic configs
    59 * @ingroup MYLIBS_CONFIG
    -
    60 * @brief Конфигурация однослойного персептрона и алгоритма обучения
    +
    60 * @brief Конфигурация генетического алгоритма обучения
    61 * @{
    62 */
    63
    -
    64#define ENABLE_EVOLVE_OPTIMIZATION ///< Включить оптимизацию параметров
    -
    65#define EVOLVE_MAX_PARAMS 20 ///< Максимальное количество параметров
    -
    66#define EVOLVE_MAX_CANDIDATES 100 ///< Максимальное количество кандидатов для обучения
    +
    64#define GEN_OPTIMIZATION_ENABLE ///< Включить оптимизацию параметров
    +
    65#define GEN_MAX_PARAMS 20 ///< Максимальное количество параметров
    +
    66#define GEN_MAX_CANDIDATES 100 ///< Максимальное количество кандидатов для обучения
    67
    -
    68/** EVOLVE_CONFIG
    +
    68/** GEN_CONFIG
    69 * @}
    70 */
    71
    72
    73/**
    -
    74 * @addtogroup LIBS_CONFIG Libraries configs
    +
    74 * @addtogroup GEN_CONFIG Genetic configs
    75 * @ingroup MYLIBS_CONFIG
    -
    76 * @brief Подключение различных модулей библиотеки
    +
    76 * @brief Конфигурация генетического алгоритма обучения
    77 * @{
    78 */
    79
    -
    80#define local_time() uwTick ///< Локальное время
    -
    81
    -
    82#define INCLUDE_EVOLVE_OPTIMIZER ///< Подключить библиотеку для оптимизации параметров
    -
    83#define INCLUDE_BIT_ACCESS_LIB ///< Подключить библиотеку с typedef с битовыми полями
    -
    84#define INCLUDE_TRACKERS_LIB ///< Подключить библиотеку с трекерами
    -
    85#define INCLUDE_TRACE_LIB ///< Подключить библиотеку с трейсами
    -
    86#define INCLUDE_GENERAL_PERIPH_LIBS ///< Подключить библиотеку с периферией
    -
    87#define FREERTOS_DELAY ///< Использовать FreeRTOS задержку, вместо HAL
    -
    88
    -
    89/** LIBS_CONFIG
    -
    90 * @}
    -
    91 */
    -
    92
    -
    93/** MYLIBS_CONFIG
    -
    94 * @}
    +
    80
    +
    81#define BENCH_TIME_ENABLE ///< Включить бенч времени
    +
    82#define BENCH_TIME_MAX_CHANNELS 16 ///< Максимальное количество каналов измерения
    +
    83
    +
    84/** GEN_CONFIG
    +
    85 * @}
    +
    86 */
    +
    87
    +
    88
    +
    89
    +
    90/**
    +
    91 * @addtogroup LIBS_CONFIG Libraries configs
    +
    92 * @ingroup MYLIBS_CONFIG
    +
    93 * @brief Подключение различных модулей библиотеки
    +
    94 * @{
    95 */
    -
    96#endif //__MYLIBS_CONFIG_H_
    +
    96
    +
    97#define local_time() uwTick ///< Локальное время
    +
    98
    +
    99#define INCLUDE_GEN_OPTIMIZER ///< Подключить библиотеку для оптимизации параметров
    +
    100#define INCLUDE_BIT_ACCESS_LIB ///< Подключить библиотеку с typedef с битовыми полями
    +
    101#define INCLUDE_TRACKERS_LIB ///< Подключить библиотеку с трекерами
    +
    102#define INCLUDE_TRACE_LIB ///< Подключить библиотеку с трейсами
    +
    103#define INCLUDE_GENERAL_PERIPH_LIBS ///< Подключить библиотеку с периферией
    +
    104#define FREERTOS_DELAY ///< Использовать FreeRTOS задержку, вместо HAL
    +
    105
    +
    106/** LIBS_CONFIG
    +
    107 * @}
    +
    108 */
    +
    109
    +
    110/** MYLIBS_CONFIG
    +
    111 * @}
    +
    112 */
    +
    113#endif //__MYLIBS_CONFIG_H_
    diff --git a/Doc/html/mylibs__defs_8h.html b/Doc/html/mylibs__defs_8h.html index 45402d5..5709d6b 100644 --- a/Doc/html/mylibs__defs_8h.html +++ b/Doc/html/mylibs__defs_8h.html @@ -123,46 +123,48 @@ $(function(){initNavTree('mylibs__defs_8h.html','',''); }); diff --git a/Doc/html/mylibs__defs_8h__dep__incl.map b/Doc/html/mylibs__defs_8h__dep__incl.map index 07ec6b0..f952e29 100644 --- a/Doc/html/mylibs__defs_8h__dep__incl.map +++ b/Doc/html/mylibs__defs_8h__dep__incl.map @@ -1,42 +1,44 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Doc/html/mylibs__defs_8h__dep__incl.md5 b/Doc/html/mylibs__defs_8h__dep__incl.md5 index 751fc98..27e2e55 100644 --- a/Doc/html/mylibs__defs_8h__dep__incl.md5 +++ b/Doc/html/mylibs__defs_8h__dep__incl.md5 @@ -1 +1 @@ -9c1097cc7666ffa0cae2ac5bbe1fbab9 \ No newline at end of file +9853b50743578d4b3267175adda5a3af \ No newline at end of file diff --git a/Doc/html/mylibs__defs_8h__dep__incl.png b/Doc/html/mylibs__defs_8h__dep__incl.png index 5fae33f690d87498898948a7b7a8731c668a1b0f..02c276a87423f77c3f57ef8298b2dfb142ac9b56 100644 GIT binary patch literal 56859 zcmbrlXEXc+GWO#UZlp2p!p5x(>j^p9s zhhHPXohhtkQo{Wpd9A6gf_HiKmD5s?h=+FzPebM5OCQJv!arbkKM;L7ftKR#A?ZsF zsB`R-+R_eDy7}1k*U($1YvP;E{R+PvpIcedPX5|FfXE}<4?rB$`=Dv3Mud~U%5vPv7*R~i-9@wI-)-}vCv^D!VPp#8g`*!X7x#9nC6hO%~I+!7eKf zmVtc$w{d#f;UV@oBb<^Au?dw#c* za&8{3W^P3C5HkjmwlNA z*BSo4L_$n~h3Ow_*GqJxXTw=T~dCRUzR4;%~|=u?zJrpJ(Tl3SuKdx3JHpu7UG3P3!*KN)s01^}n{U z8g(U}3HRW8xc97lVgeZQh-d-jiTKZMzZ7fV{xv?|2l4>{PE7lnMaRNi`>vhb)|G$>07hrympS?`Dw%qmn`J=P;xvp?H>-!v^oUU}v3u++y|6?6dk5|8m{~A<_ zh*iotpsKm~Eat(hZ};||t3-Uu&kqkgJ*f1>0t2=G^YLG#{~q+uY-=3yx`y`FA?PkvR4t+n*FmIfL$N!n!+VKhFzc6uYz4F&D<)_FnYO`PanERQ;m@W~iYLEw0~NOB7W{(;2g1Rl|9hK_XAgY-7$rfZunj4}NP_;c zcvjw`GuT$z9;7(5Gq=vV;biiy{aZ;nhTN&S?4MVh{EHWB3YGz=r|{vJ{@9^~%jxTm z{dNV?uW1YV3B;hMipOLtd zQ-u%~9Z+yGxHQ3dosg466Hi`g%}wkzJ;*+Z51(u-j*cZF1g zZ#xQZ4^Ri6l7*ehwjDZ|bSq(pNgD^q2lO!O&8_3&lQW#9#h9JOtr*aySGE<6H*>(} z&zZGA6B3U{yO&>19T>f*VfNmn|D`=mn{czgg{Iq};xjCG5UCToh%aPUFJl-lb)OS< zl+7`j<#%$pC6xVYmlYRdOiBB_-OS|z(?Y76n&hVko4jY$E|+nDbrENn2$&xvabf{^ z!dx;VE1mijbmFr0{RMXe@V|!*=SBZ5BxxU7t44%`M1ejLqGG@$Dkz0_uST4)g_Dm-^v^F} z>LD$~F#PF|R}gn5C+Sk>8kU+y_qeF<_c{w?YK+{{NsV5pIY@q~%?oqKnl0oNFZ>Oy zybpBWVy^N?cPh5qOK4R~BzGW{rk#SoCPA0s(ai|n&pul|*LvRghRSe6E-`q{mjUpl z-;a<%h_o9)qHmM$2*;loXj20{`~qeM34?2W$Sw_VJ}&7zdvs@cIm|DBuvR16G3l3; z#ui#MEtq7!er7tfjrhU~b$DL<;Wgp5L=K&+;Ek%L9b2M{1iJiW8xj~r-K9{Es0M1*nAtFa?KWFB)tm^+KK6O0d%C|yu_WZ`;W znwJZ$3?5+s$+CiaMIq9j(bU<^gR*LS8gzd{{JKVa+d(t-r#=}pyM7z3J~YlDPaqbh&DWoHMQ8e^)mO?uB)E-zfIo?O!!IHwZ1$NS6~ zMkn?4<|S2{i>rVzv2C$(Lpy(+&$qBh=^WBjg%*9DK$EBQ_OJ##Cp8oK?3csYgwrHP zfo@v2TmG!Hd+GCkiN;S_h^{V6Z*l9Baksoe-pJ0x7j5l;bu0wB@u+f6wWxR}jY?|IyEPQw5W)vM z`<`!5YZ*E5dIOYu0C4zbd1stQw79=MxL}@E##|JwKMg1puK2KVzrmuA>K&I^+o+A4 zZ+0dj9RF#G8^C;OHKjoG)7R%()mz#O`O^9Asld**j*#cxPX_Ku7$D&i?e}8&W!S%> zi+>|f1?`XY9|w~xuK6PATnQG7eIbb)o|oEU=ywGl=ih+P;6x8MH*Aa7!N)A&zhTEr z@3rv9&7-<~M$CWK^NcMJzKlsBd~wn+#X+BC>i$t6E5=dVcmlGN*C-~%eY{K2mB=t+ zmDr@WnHToiQ9)7`6#Wrn7ISbmfm+_AY-@b|Gn&TmOZQ{@D+CzoSJiegaQV2ijpT{o ziWggugp;`KwB76pF+je*k3aS4;4yeegHQF7U-I+F)up#5_o&t>zZ$z4Rg@(k9!FLM zIkzU>iR!ZRL|fDGu!29nI;83Ons-$5D(uA;gd#N27VauK1^%zVIJXN=jikgG4k#fZNm#Fdg zM!LsCVrFx?osY<0HtH^HXA4mEk#t>WVs{SUwm!msxolWvU0z-`XLD#j38Pl%&W%@? z-uJ9`@xJ3+-iG3~xpxSvbe~j5flQ*4lNk;+XS!AfGMsS5Koxyd$FOs{*EYQJc2?RJ z{t$Tsw10ftn`J=y-3T3Ig)el)1z}a%u`dm4#My+xLQS1i?906^qSx@f=3A|^7HUy| zP%Yk7hL0YEJ?tmH9-4>*f2_B^AktuRX&8y6U4dMKUkB4NNL%u0TSvbMT=W8n?8g6x zJ_BC-t>OtZl9OwoFk&kD&i14J1Ft7siwkoJJe!fRl5%BqT`0U+2+FxRyPs&Q`n4S0 z@NVbk_^V0V*Lwj@1%sRYRUhbLuJOYPg$>vssy#csRQ3EWJ|~g7zgB#QD7dp$&s=2( z=(RG8=@_$m^I1yp_YA1JA~kPTU7SWboa;IiNAYrVkc__{v7m`T@QK>qhdqa+ z0r|bJ0qIcv(A1mE9xBiDP@78RLrX*85xR$Bx@Rp9UkIl^Fh@S~^mH~lIjT9<257Ja znb+*snkCEjQN%31Iso=xgYUJ%JPkVK2=p!cp?p{$NAp&9wib;q@BY*RBnpLay2{Hra;k%h?Tog+bHL7 z;@tT%xoM+#%|4zgAUd3epD;PC%N$E($}TZ0L&zq9qWd6W756Z_%Y6V%Fv2bz8DYGN z168O!TBv_c5?8u*oh!2ElppX`=jlTpR!+g99|6Lwt**VHGEhBJE9J!jm1U~D=ON1e z-oo>k`VXO!K}jC2&Z3?IH?B;Uu%r1m=Cowv9S=W>y#a=61M|6oGW|W_ON2yAVyk0j z2q*&k$Q30$v{;dS<|?O9%CmcPCg4zNQ^T?DgT0D3LpstW67pF??F*09_qPMK^3>}=o{-x~rll36f zwmePltu|F0F5t-mw3K5>+yQ|IXN*#7TS#m9h>&MyAVNKOVs%~8ynYW{jU_lx#?#RARdzc9VP=f$24aMStTc%F`1?e`HY9x? zFEJ0~wx;nx#Al}r!@uDokP#|&pbAL}kKT5P>;0$)mA45;3Y7I?>pq@wxZ2%yR-Fg) z&NB|bO#9M$;?)Q4ua^AIBQ`ZiqbQ_Y)jD3_nq0LgZgX4H@Ubojac|T;><#@s-lUyn zX{>;2DXWcA+CygTY5plkh8%86J&8HBX2YB@lxr&wV=tjVgN4GA*2AcAEz(k3_|O+h z+rK=^=&vVt*MG;|{~dLj9t8L*s-z2@DmDW)q^j;u+iXCAmJu7(!UK;?oKpI9DdP^Q zdQQo^5q28HaSv{BHha!A*Vllj5~`tueIoZmi0{y&dvG3c7HH@g@IG& zp}X#NQWASb6VuJ%cAd(+VwmDG+!HzmG$AyZz^?`gOIvN10ow3dsVP3i*}C?}@6 z9@%_JqhB$|rQgnB$JD=h=izUm#17xq#y(qm8v}e3OBfmCft*5XuZ5XgB@*O%*$QX^ zQQ;txY`|}|TYXw#s?Pm{${=(Pr5T^Kv}@&-ybWR&9*K3!k&}Lb*9{BqNPJ3X z+a126R^sn1&B-&iqok=Kr$B7Csx{IWAXSPAtoe(e!GeFuxG3;j`97a6uh^;mQ*!=W z&eUvmxla|W3o?(3xcIk@GKHrl3L&^6!sFI84=g6=Qr)TvH4{%CRcC|iU z|L$u)O>v(q_gB@+#!4mwa5a$?=y{+*$_GblVcGY}-$=sLB2#7yr3yr%?fR8EKE6&T zHP&c!&L|KRvhw}3%*`~Bj@1P_P_gJYiP1yB%1{7_3+gQJ@ecX=5<evs6 z_tdC3(O>_5Y&D|Uz?sXEs?+Jv0Xm&;>4+oj3Qh6LKEz>ZnHT+!MERu*R^gsKOi_SY zLxQ}Iiq{56T!;(c;7wrjCf}Sr203X1Kl=b|C1xP8%90@$c-;!nuis$~Q&lR$&zzGW zY`tzr!~#l>vb#03;rf9qT@aHaGUaoN@q=U3$qi}g(RH(m@D|S&V5${IU4@RBP(PWk zscp3AkgJ1!{@I6_iEM@Th4*sKe?_p9|M;d_XQNYAx=7+wvZdEuVSwmLx`-50buRRq z3B50oI~$O&+79jZTO>w~iOpNu84dzlk*M=8vPW{Suu;Q7njpDlwt_IL49tR$;Ju`U z%GU9|UrsNLRBW!jl;xMqz1c`bFa3sXw)+O@vwad$wyao)T6|&GnU#P5$Bwcy?D)jVr0>iiWH!T)JnqW3b)cDUk1nz;KmJkn)| zR>GsER{HNcS1Je{%L2T&wM;ZPRPpLNMBL+i&la#d-O|6|gCcRh$W&Ffc%+Y{t6b*7 z(Te}3K`6&oUgaviP;ZSeZ@KEJTiu<%{V=`^b^$uwaY(TB%&VAbpd6O6o^h^>>&^lq&ihnw`D%U2*6eLG!z zbC|7|EuupEYkedz}~-FS>}l{VhnzMao=JWJt2G2Z(wGTjtwu zdMFJesobMOyJNe^YnSpqUJNV^b$l%d{LbjE7vd07LQ&>+^b|>!BRxjNYJV2h-UMx$ zg8}k<#4=YHGcYxXa|Bv>(8u@gQ&k2A70_=p8ab*($}+-at4~c~GUBsO)b-f9C6}iM z(WE$$^IyWcZ<}&`}d@YSMSag zvGCt|M)RdUzqp+sk}OBgAKajHKWUB3K%{^&{=x3YgQC+=#whgIccTC!9Q+$|ZV~p2 zRN#nQroTc7S@N)(VK0AuX$h+bDAA7VQJ%Dz)Y{PPT&w^#mt4zS5RyWI8So^-dS=v0 zcY`2wA3B@2sq|p`dq)Y$Wj4Tn6+Efmlrl1tciatW3>QkP`lvAj$lu|^ZTnftGwJM6cqjLD^9}TPVufm&li(_hw2W>&cw?dri0C)6W!E^6VjS(YV zFB4QG&u8$fF~#ipFdSEQ%PhLyVRBK2#}l&slwo7;dJN*XM->+Lke54*yLubYlA;@; z-Rr9ezbc!Eptbd%CHAw=jnPl$6#)=GLTNIX*PU5|prW!3?cn&Ek!UHrK0*}|&c)^h z*gDOb^0j7~uiGmYM)lN@S39I9aiQR+E-gBfqmg*P2>kcjai1uh4wycL+=C`9=lk+J`rZq@$Plp*Z_{=PncKe)m z@&zSaHi^G6&vG!IFUJ6a@JQQFOY6C4O9l)UX2?X%bHvKzSqTtGPuST3$|*P$%>O6 zPg_3n-daqBt^Ns~JCr#djXBz-7oK@rOUB* z9t#PsAco2Gue@xe0IM6B(O*BD8P5_xcaP_yKbUhnowZy&REi5-JK(LW|C<`iIk_57 zXuj`Lc7kNaSU7^SX7~KB=&(uU>!02Ht^~~GpRp?AzkdB_4LqG}_N{(6afzDuER=lQ z9)4+FKa!f&QT2W<)A~vr^>j6j>UwFCL9{hNkc0<>boh2@sib~y$+ut?L5LvIz z=0MJ-VYKl_2+<<@o3GTS&SwI(WnVi#f7*(dirO)O6HB{CrG`~Q!3|jsC^kS-0q`5=MT(aBm-#7Rb;jU4M0cmIxWtGPK2~Z`$`(r=LdFM3|6)YoYi^& znt1oHwrIX_n#8nS=!&t3Cjaf7Fq6nDeCn@t^6XWf11+LrWZKrs*E=46IU?-7=fQcX z^gvZS(|G}zcxc%5TT!-wDUcXVr3p%A;@{kN`AjK|tl&h4vmr{iZP&tGEgj|#O zKm3@?iuSR?X1>Y>D7T-4FHe7shnehM+#A9e2e;-1$cT!7( z*KU02!e+wO;;{MpardG&U+2PUO>@Z}6YotP_UCV3q`X~`w7NVTpG-?IsivFrbw}kc z)w<+xc?`x14f=03MQz2tl|c`HF$g_AM%W9Lk!5yqszZ`Lnr=eOUwJc+8pj!mYrwu7 zshmGc_0WygLl$MM?gOdWFCl}3!2L!)R@YDUn`<;kyHDP;U}Y-xXk>StzI)BkX8H1> zXRSRoD8|b>8BK6qEP2_J?Ke~=Rq=Ej+=v`a_*&*Bb=qZwXR3!1<3`isD_GJ<`O0;9 zUJqf8Z9h(HFJV&DRBcY@6plCC`o3yd2LB--U58h9v#wBwFcM@YiW0;WaHUAUbRpuH zts1xY%Pz7og;kRiuiwyrBvpegXS)1{7+mCvg>z`bR z1Z_V?ZjRMvDWonuA(#NnevlHi(r`mIv40Jf_{2x^$Ds++yhHOa8~oB3LXOJ#C?Xa3>ZgNP@l_HA-}%Gb zM2qB1)<WK@M*( zZz{ChSxii*zF(BpLZABd=I@4TRx2H{gOy_C60aj2VdqVdvNj2KDwa2mFQBCjsngyF zwhg;J?#?l}jP2g$WN&>m%h7sm`(^a*fcJDyXj#)00Qu_vl)?GcWKipse&&qMh3>aE zC@@!oiW+5zD#HEjKB9g*)7-6#iylR zvnbss&TKKrYqx!$X0J?sL9ns+m5*G(5bKR+f7-*ekAhU`HRvf2UGDV4fdk=k<&^$q zyTo=+9##V%YMUhTNDofv6z+p^-sNQi7)asCi}^b@zvxf+HCASpAnFG)^*Wu_%6WnY zN5GY=wu9ks8*xoCTj#T~ha%c|Twu;dY;CFcR1;z8!z*JcT}w9u!Wmi^2~J*17885y71oL}S^y+@^T#e!kEFd7J%aec+JxmG|> z05ThNqPk{ib_Pdyc~sOH*LF-;o>7N=>(KSS7#nZe;3Rc7C0-ZJGS#Y}dWHl2=K`~w z?UeEJHf;ctb=^sYiZvr0jACD{Zs!2a>=MYvf9rS^Zw}Aw=Tr>#*J4q#NOB2Os%23% zjbTLv{&va5YfHi`=&1G6mh&TaC@80>Z97ozax*!h&N)LzAhU-+wx}X%mz-$FeYIhS za90w2Ai> zFO(4=dbZbeXk=xnFDJh45cs4xQ}uR*aCD)Efn&wJ~O*2k>@F$#yo@mIf~aTi%h6Pw{)@v$gl#<~Kn`fmpXisnu{ z^+*NLp(|J;UE}KAuc0bzB*)4b+#FM`MwrszX{TBPxZ`oZUEy{nJh7o{ZZU%!}0SI;>}Ow(;s40}R+R+Pazd zkIKD;;pA}0OjOwCsCxGGx$Y@eFk)5PY%-uclYL9V@vPN+e-gdfa@*Vm1>@Cx@}$*g z$|i;K@S}>F$=$?-4r)cVk#;|Gy6@(b5vHvWijv)|Y@M5fxg1IJMY(SflG#Q^Px9Nj zxEL1rLAIZnW8O<41U{o-1G!2q%==rTfQ@*FUl@tdm!M{_azdpIj#g&LCdu&d^j{A> zZn(i=s{oe+H*{vaN8gP+gBvp=AG_JXWZr^OeYkgM$l16SU1`{k5A5S!ujF1{`{UH* zp#2C#oOhEI96D+d(BGz#d9XWu2VQ_)k9n0d^*hTj%b_+iL$`1|DsiUK$t=K^Su?td z|1fG9D(aoA9Kd!@Q!t&Fiog>%ihp`-bYUZgi%RQLG?sjoCT@uouFVeP_}IIts<>c_ zTD~0n%3}UOLcuvSBXIz~Br15z)-`C0#vgQ`2E)deSK|^fV;WR;w8mgF%wgXTt(Oa(_Cztzj`Mv9_$?7xfvC6#LjjaCs6#!{PwqA;z zN7H-JjNvGgY`LtA#12oq;|#*tDgP63A$c6argLqudg57Hz&dTX21|m{ub6~`B;d83 zZEY{`oL{<_S_K;n{fzs7o9nm(ZxryJY7^KqQtLRuoT|UzyI>RsV3tNY#qt&L4rmt{ zCYVS?wUu|+SfqkyWyz}-E1zCv1rHm5-`~BF0_N+`8$5 zX;>L#b!X_bMkJd1$Z~wrR6It%OS7;NSCT6D>wG(l?{uC>gPytnKqi@#_(9~2$Bi^U zPXHJkeR?%t{0xv~(r*OW(A7`JmL$sjXn0l0&V*m^uKCb|y)r3zVczy+bM5&hR zD)MZfWtHSLy!C;*X#<8HmGLx<&@D%zhhC0qAo8ds^Ubg7fiB>|TXzI;G2A#*)@{s4 zV_)XY+RJmd*0N}idP20<;;nP#Fh+K-hH75<$n3btTY)3)3fzgyw7%Fm7oH$F95+Es z#a8kX`}4kbSXjX6QaYJtPuO85k>E^or}30;?cSW`%3~^lW+f%^_Vr21P&TmnR23}9 zdKrI6-Mcitt6Kg*r3{-v4RnwYqP8*2rgXr9r35OpwG7xv9yXd~?v( z{P7{MND>*+5d?&80^P}ZF(yA!~w2` zhVA3q0RY#i`miZWWKKJc6bp!o*6xWaTd_|<$B8#TE`!j9UQJddhyX`M6aX(ee|)N( zw5$Y>Q!sWkEzVKOoKT}#-@qoh| zr*m~crKH;)9m|n0M{dSw9-(PvX8kP+E{g$*cvaHzE)9LHuW+04)ucX7j8c%P%zN?d z9M=oh%&q+1V^Ns2nP~Ir=T#l>eC6AD-`$zenXAkra3T{y(gYi+|2RC3DTLIg`&>t` z2g`<9bz0r30qK%$z0Dl{ebU-Ip=Yci>3Jxj&2Ljv3`oD?L7soWs+#VF9Jbp)JBRB| zS0eQ-2K*6hncEycb`})&RZE0Z4%C!+uRk|o=PPc=ZQt;I&t9RVd0aIl3;PJ*N@YKO zoIkTyGYJ3M&=EV9P&u6$-ihE2qBs+dJ{tbP=o9#jboHuZfh`kWm0VN`yzk0__T(>9 zqc${q8RE7oi36EaRsl*T!_v>{=T_m^6o9wR-odDzL@V)8N+Gzl`TSfAqA&MaC{+J@*>cPK zXt-~9^+4jeD?jTURz%|nf@Ql7xp0JLBHWb1%WLwjBIhOz=UZe8jBAjZCJy8SPr8L z*gi59*WRPPRKF@m)LyP(0B_`M%nlzkG@G!A%`4v)n_D?M9T-@u!?%X~>WF-Wd;y$& z(!9z`-uz~pR?1APT}P^X#q`{mnHe{U=qL95*QNh=?Xc`R);gU%sPz@tG3yoKKW1GE z0SzYC9-RLubKG+Z7J~`E3J_M}|SsCNSR6B;I$O@KTwhq>bYd)_S&E#RybWOfd zmtp?I`=>u1)xw6@B!=cxu0k<-lJWV5PRg)wvUy5(=b!FjBJh=9hd&hVPQv*=FQ zJrk8dL-(#wwaAleRE;B#RR}}FilWqH3-!m!O}?VYm*F*FE6%P#%uTPRkm6yz zBA<7|?H&V|2NwWFH0K%(SI9}~; z^nR^Ec(n<$DrjHEHJn-hZWkj>Tbw)c*0#cSE1->Njym*k5VCNN^APuNqf3?Vt8d!) z=|BY?@=*Il3nbBYn`>5Wlx>&2a0RYaN7mJ#;39Zp8&xu01#S9|e{n?utj4Zd_qk!g zoA662YedoQ#kxiU8@yavbWZ;9D9U?s;YX?0o?Jyo_Fj|_l5RP3cHFW*>-X5n`Kp+S zx2W?O9y(t50*d5-$g7;KCXdPGUJhDyebsO7jtA-KPjU?Mw$VJs=XIT1qxoK5TSwNs zL^JGQHO*q-cLA$eypXD(;%^IWW7*!k9IWK@`~w(B#?e2SFY z`dJ+_P~!$)^v|Eorvo#a9gj+bMUU4;S}X1i$TJtINHpp zOZb&N*{$g4OQ@dUJ^;q}2J!2U>3HD8#2qm6H*Ylc`!H}@Z}Rp&uR>Q(ab`1>33*O3w2LcGZH(5IR!U=DmrOK@o%IwtKlY>a zj9<-ggcRGJOH!W!!UhS;QD-~JwP%?G2bHS}M%m-zuvi9f${zNz+d%?D8x>NAfSKpb z;=_{T-)2^R=8rTCfC1NM--Bpxu$e`JH;J->&IJ8ihSnik@Qj_Uo%OLLPx~OvEiVYn zWYW1oTZ6{4-3~W{l1_FktwM4Ifc}UQiBI=oy9!1_LbvCRK8-x7Drzl{J-}V)$2)N1 z{{V;3M6Q};2_Ou?7{ksXqOo|uo%3vIj-q7ok=olI*c}I}*m4TcPjm}Ywq!1)ZG49q z$Ig<$Y0l9D!1?YMXxHwev_S&RDC6c#ptB=o1rqzPSF^w;l%LA#7rr@hGdOvK+Ywhzue6|= z9C8jdbHsA>FXo^Dr1s*#ZSpANPnU_zmoQN=ue*5($?X@5~QooAZ(X;wXAn(RPHh2*n(B%o3G5RaV8s-Y`e zhMx$yWLoNQ0caRPG==&6QDC3#H(f~!xmOdou$r=GqQRuTWky^*!PCnxgu9>8iEP)K(z&*(ZyW(*fg~#5O9@esQcDI5_nrsv) zXDS-bZncW8`5))724Z-l&>9?WK0Iy*Bv#&yiHx`j3S06Pv(>8}cZa~4J6MqGnOVJ$c;D_o zI$WGh9cs@_%j^q+iO`pLLFDKV)w9(vufN}iu$i|uBMMTOCaCW^VzhRCs2pEb;(%de zH9Xcoiqri8Owc<^qrm4$`A%0dj&NyYRNpb~eBM{pZ&~!S8j(WK7b?@EiU8j|Tx!YC zwe49)!6`g-0_LdbHy%b&Boxo%;KW_hE3NGLGgB7@G2c?+L{nto%RR4J<_-5&^Ju?7 zX@2h2P*Vk=nRW@?&Lp78GCZkM?4JG&()1gol^6mHJ|+#@r-e*O_f?P##La1B+n>qO zT=r*7&Q`lUuV9m2xso>XT-(JzF~pbphv8 z=IL<;>=1v-aXcD$43iECinFyE#zNMj#yojqlzr2t==TmsMH6aL!ovl!RX5Nq`L)-l z#yNvAB}HtWFox~^tYK7jw?!yxOek?!+POB;LYPJ36z7B1dw=4aX8&p=F&UWVSw{>m zp@;Bvj;)OB3I=!@oa+soWUOi~>P@f2T;+h9^`u9PTeGSr61#+v1z(_I@$*ikt40(jrZ2RDWjvJi4}ak;HtVcBjTL!5s7i#a*Lk{MQI-8v`QNNv-j zN(j;$RR{~DIz<%4bFC@oC}=H&+|ReJarFBcBg$(qJ2;D-jr3%OoHUcA)v?e0BK1U# z;CAri8d4kL33b6sSuUQ52DklDBnxZhaov~c>3R|U*f^}rB0~`~QbOtgxxq8ARqAbE z`gxp>(H5nB>EU{DtsY^a&v1bRIBbqRDtD0c!7--JOr0OT*s-Sig)}OL;6pP9wx9V= z?@@2;`erT6DNosG>2 zf~2!P(a=QP#}N?WX1OMfe}-CKGnhT8^|wQ{T#YRd2QYD^@VA}Fuk-&fv{uV!PP$$8 z)|{xn;1qjFl|y3(EhNQte!*O8^3O1^cHAIr{oclHZX@W3%ghq$v?`3gjW?Wwp zUsh!-cp}xJj)T(Pjti zWPz6->dG~j9HYlHQZI-tSl~LsS^dCc&hRzC3dh9Ffj5myTv~~ zv7`*6cyR)mLcG)bVS4MGaXpdO?U3sPcc;Iq-Bb!1AK!kV%PMI}XyEAJR2t=3X(Uwp zJ=w31^3(Kqj?=NK8@~8`jRu=gB`@V${3&?46shEoy{g?6+7#hhqJ~~TTQA##{xn}j z&iKGPP3|iJinc4KGIf~apf+|Ahgn0`IAA7+^pi3f?~|z_5``EsR$BplDgLZCZD2rI zUcG%1rwiQu;b@a2B{I%3Rh4?3Mi!_>3*%)NtO<^mK(e@wxhdYa3Fwbi%Qc=r-YG$>h*VGUmskcnv{a`f_%70x1&jD(F?a%Z??I?q^56D3row~S`M z*m@H}-5pngw7=K+A6R|@ZOk9dg<-iWl5V*x^4h`=Z&_4xG}F=~_!UIpaB|PQD-}w# zqs|t6*n2wKCRlMt&}qH75+kLBmmU`KeoKo8e#c&GFfO%X#PS7F?tSHTR8I|d6hGJJ zxx3hS@|32$gcm;sc8mw}53Q6w^o3HhLO2CdZH(1Lv&I1d6i*>mu$PfsD#)GFVlwEt~jcCh9ifZo>(4Ac#68;CEpHnP9=_;GYwa+^BrKOE|8o0 z1}@+5sbRSBqL`Rp+ra|UQt@IakoU#Fql*@nuOSHuAcVbQy|)ytTvS=$fHXat4*VkO zE1yF*{|T8&>?V~?#*R1)NIuzY7jZ88o$^Leh)hYK#|PkSPzPL{I!~poqi7@JCZ&b9 zSK;x{DwSyL_UDnzx1~+7wqr$)R8;KKSa8624LV1j9~#*Qpk&H0^q___oXBTFG7Fr0 zntVva;$1ZJvIYz{BPI9Tq9cbPXpSLBQHKEZcmM0QpSibZ27beS@6u%!H`QW_^@0MB z0oUpy>{Q+gx;s-tW*AKDb>d&L{X9_9d0DQ=*EjE zQ;4*AH{Kht6sWbwKrm@%x2#RBbpZj^H)6@$T;aw+nqO1=Q%BY_`vWk%c|NUyjr%{V zM6NXSJe&(Aun7AXNyW-Qc1{sQxBMFG=OM!%#7z7zBiv1AA4}M^^mWnvGO^ggnn4(6 ze^+S{`Z4`d6y^2H%Z9d6PaWdlXbx-YGd@3W~zexqFw#>DgtIM;;Y0&&;ehr=9zUsZfV1F%G>SVP`U(@!oyM z@@;LVSx-UcU3|Jbk85GOy*EQ%++r|;R;7H>eQ&sFkkJjd1ZEd0pC*8SO3QFItbP!3 zI^sJ2KG#Q!ns2Q2yG@XFV}efl4#+#m3dYzaRjD!`xLjx{Z&sb+HG{{&vr_Z^^@o?dG^XYc+is)hN7n->2iNfL(a^jPy9(gq?%AXu=`?bX zDC4r_R~p0@jz>34Ke$x(hf7yXJ!(Yw-VMYXoRvj<@1k#e96WK+Nxkm$WlA}HK!(@>n`qL9isYJaUzp5LcOkJjz z#WG%^JR|F}F#{tF)nSEfRm?89*Y#ILqT-$w4|wrn1G}!wKtTJ&3d; zNj=0jEuTt2E^EuS-{WAoYf^gxi6ZNJ(xW^{Tvp0u^_S*3RjNDHXcabMS7ce5fTOZqB;_gsj~NM9%Sv;lCcv37$g|9lvD3^ zCmA$?y1zk9@nC=swc47vsPFlD74S#d z%HcdN;=5F6+0tmeQry}P@ruN{jA<-ueVBE8^>jmUlUzZz+n+aG`sa6bEY%6 zRw)v|-sCk*GXatkqx`|S*zbNsh}4IAkGx@+^-DXyAD5c~)0(6fslFvO$Hi&M}K98-4_fOT;iz9HV4 zq=oQ|uls1cxE&q!xS`O}R3(pqtiR2RW%#V=gG>)*-iL$9v@7;?qV{$^i|Hw?;x}GZ z%^O3_-WS+&PO>R{$FK9-n_Y-OHOi5@KYM4b&u+o@Rg}9GqIOEnj)tAYHupupDSG}k zfIsfAh7k6s?AIl6DY4x-bsZWdCGOzoWixit9(Gm&l9XWi@#${?3bY`_9nA zm7``W()hT&8l}?1BccP>T4roW<;rXpRsC^t+5z-2?DjtDWLaTt|888hxPbJ)xnE

    lStZUv+T89+LelL}MQesUeqnd!OYi?5cM`9N;t>~~f zyiL+MtO1a{iOQz2c&mi6Wi)oUnmEn}5G3yL4UT3~V_@~Vfmn{LJV|jB#|e~_^irL- z91Xj-fdaO+x;L_!ZmBAt3&C4~jc_#_()?@Y!A%c2$CWyK{o z(^JscBd z_J&dz>i}C1%h1Z|<3xS_ymh6`mv7&?6%j)4tSLL`ZQCbTUG`HAR_#bOmaP^=Hzo3& z2z9GF(vJuS?OzLK>hYmp3-5Ugt=D_F5HNW2<|B)|7_KUF>}9VtTUzwXFSw#R{IK#o z$bO>ZbC!T{-O>h>ZA1eHfCd`bWXs4upPOJoblpWrBiE1@A1B@e=yk>k*+2Z~%?h2n z9d*xJC62npwaBuiq7UN22w{Y)lC<=#`j1>5uZ3NOLc+|1=Cr)K!o-!8yG+@379+V) ziBb1DW>=6Yh^iPUob2;LtTXBd8JkZmI?w~OhOg|FE$^?Uw(DABHog=7t{aZRR0ory zf$e%f2^EllH`RhxlK?Pu$b z$pXtA_{dyM-mx&lf=@#NECN&A;ij*dor~%!&Vyfg3HPOa>M&io2q5?t9BFW%rh1C4 zbQ0E+IP3g;2D6B|jMX=|b2^}!+YhXGvW=QJH{sYvkH=risJi>C{RtE;XegkM;@%N~ zYSdD5_2;HMbL^omg87?Z4DjpCK#`Ehj_t#MNDa;l_J)PJc+p@W!r{h3o^CjT1vEOc z_G+EJO3+Asq&~F~+4SP=e*Cu3%Gh(_H1R_j;e1nkg{DTu0lLaPGs`{Yl0 zAHxlEi}itshSC_kj?AdrKY-2nLHXyNe3HXE^KrxM8{S3Y#myVirBvC8vJaa8AV~yZ zNiOgbip6wM&eNq2sWgCxXc#veADddtnxNo2Y}izer%SG$!?E4khyz?`61mU_wgrlu z1<|bk6Ze83!zoVBiv91rc18BiT9?gS66h^mE0ilIVdk@~R|y%dljicU6{2gwPE_3=4gD}a>3E>>Z{bgjk_J(E6CG7-p~ z{KnhSuwS6g!dc0=IqX|FCVy#|yyjrK@}|Ud+p*7%L=N)im3QgiA&|T0@J)rY!T8(( z2o8zJi15i`?N9s2e#30EQ|wHFoFR1=4$l{(g^A@FB_#>o&c;3@P^T3;cZvFS{ASJ@ zFNA;pt$Y^nDLHF#8IA9e9{1ErscS*bDiftPSI>EO9W{uzTo*p_`nwzW!bI#II4q<-0|I7O3H0CNZ!0cJ%6(r8*i6_2_=hbyW)^+_!gQxl@|NEz zC79jZB}7&WDJ^TFETsF*F{_;Y1;Nx|>89HYJQ7NTP)f`1LaC-=v+18?hn0et8W<}N zzBrVaaa0XwGp2pY)WiB7BmdWmo8!Q6xdy=1p}`K4sPcIHnf5MQJTS))71G(vYYv6q z2y`(58@5ChK=pIrS*_1VgV z`7o-$nvdTRn_upoRTY3h-3+P+mw&%-N+a_}K213pX&b*iDVwnMUZ_;?wKm$v;ymYa zv^N3v$O_3C^uan0EIU0v<0cW+ySB3 z1S3L=X%m5J$vu83HZHKI;StOhCd9|xYf7GmFgqHQX1~TLuhvlL@u^$J6LPQ)pS``i zs|G$Eb0osDw2}uTRp>+Xk(2Jr8D;+7ld*(|e^PjGK)WrF^hBYGQkOg5< zbmCrL#zVqc&#|<~@f^=ny@~x=Arm6z#B(>CI{l76j~7fGWVZHdEbUImvbRO1f*mqC zA2`y@QlXJrR)0sj*v~j}*&y1^4Gn{)YG%$wT=Y54no5#(P8yC8Ma2Pm;5nB9Mf?FV=n-T4I zdR9IVVq3Yqi1tEQUS@@J=8sa4(*W}zUUFRr2om-P+c^tFHajfkE#;#8jLR)k`X4M? zg{HdZyB}>55bQ@O(v}0mtsWdV9DL_zpg>5+mab4N2bKRbXHrQiH^zw+YKP<%;IACDMpmy0nRu_}wWj~8#;lP#pin@%t?X9#G zj-a(j@?16`9@jf3sx#T|l8!*=X1NmbI)#(1WjH-tR3I8uvjipBG9e|3aQO-#@Qt4n z;N?esCN_$~wiq0h{EmIBF*36^I;U?gDi=OM7DiKK_}IxzLz*LH<9E9el;w^qD=6h& zdbryDdUPV7GP&n^bhqt-^0-{f6MoLhMlp{Dgl2(&D0UXkhI}XCXpmEvNfZj0a&~an zM1bteZcic;lg)0}Q>BSN?ntVC`4zHOc~4W0#}JG(1vCp37_I?kINEgpqa$T?z}XkE z1Z)p|@x0swv;6a<9ps7O?$3lz5)*~JZX-Wah?iQ=*0jgVB_@P~Uc}p(+)WeQ2 zhHUhQ|B7ZA00Pi88Nr{2Z=j%MAglCTR-*dYjW^qxAav#poat4EY4%C^)8uB?ipJ{S z;rwuyFF85|c-k_-2yaG>nY^XOc@YS6bWiV?`Bohr5Fte7245%PzYmQwhot!_OMjm* zwm&#mPit+rpmLgho9`~#R-bqi`?_B}g%W^v@d$~?JWy`!d4E1+GbZ%h%mv}-7xB+F zjyWG2^W1o4+4pUq21Fu>bp0p~mY{qeC0AsIh)V$VTV035dBXCG-P~@5`3!k=KrX`;{0d5AM zWVeJ6iO>Z_o6zC6HP;Q z5pmH)A^Y4lQ@ZM%mjLiAMbg+%7ggtU64)9TrdBaei-ZnvbC03X9iDv3M_Vyr`*}%S zL`4lzrN=>}(va%mA8;b9T|cIu6DzO5wON%6#8kVqq0Y9B z-l4~~jwV>=*-rXgQEf1IK)c=S4363YXrz)XfD`h5OvOudg|~M#;##mDHufaW zr~+q9g@9ZGN-z1Z#F488Q4AI0k-oVCJ)`q$MvLyO1+|7c5f|c8M~nS(1D7qz0C`VD zo`>?sTFuxeZc8`I%EG>z0U6H*0*~*0&J86Y&Haa_2Vc>X4dKF#?)c+f96wsAC`VvR z5&y8(`7XH8PVWFsdNiyDhl;PT8H4K3n@C3Bbhjzd)wls?=VLg2Kx6 z;U;nERl7R4kJ-}3L|QBtdk9 z9`S!-S0FlQtMbTa4-@5xUQMe1CArrtwE_cJ-9rSa@xUWItuU(=%JDKq(CZ+m*SwV5 zqReaJyN2xiqMtmm(+(0AoPZ~6?`4Xr*8`fnfk`Ol&|aQj2epY%M8JeJ%q48oDMOy` z^DbU;kJmR!56|CejDc?{e~zcl@QpcY%Fs~(Fjyn{UrD;>kHHiov5%l^?hMEwW<;Ky zSrg#Cku4qzX{e=upLJ6!k;MW{e2gdyiW+D5LOOAK&-QTuHaL>dWeY8OG8J%FuKm>D zU4X185}F944V-qQ9Kps&v0Gcp(r1F`ZP>znCRXbVL>o8HSxf70^{9D%{y$^MBekxk zxNO(2s$G|Ho!$X*j`x27a{A{O4Xx!3STOYi%HGozoEMNPNaxZ70KIuFoZQxFFg&a` zk?#zIqC8)Pd@Ze%^=kz3c1_26)S!%iV;Hk`w2Q6#-pb@RbttN_6D#RXQ;00335IU2 ztj{T>WOh;FgjkQviE>x7qljA9O(DP>p$UAnc_grE!)G!9tOJz`k~g`MfXuox|CRT8 ztTgeFIu<=C=hKUEf(^9_y)8^q5B(QSpdp@Cn*w5G0gsZdMj5Ox_9-~xT$JOe`I9*a z3nbf#O5M^0c1L>g2wk|v<|o=^9*K3YU?n0ghE)qjcz$!XWv&LIh7U($kCh6c;D3qSgS1Me@Dm;MiFjh6cV!t)zBotFva59DA1;BjXG|H31<@{t^lc z7$O4VRwYmWe^OZ4z30PQva>h1dK4m$3TXMJ`1V%)5v+bmfAF^_NPkl(ojR0fR=~>v zNQA9Gl^*bm@Q2jMd#+=%Q%NbU@HO*NTj+-T&CKy^@#TnOZf7T+ zDJ@wyuSFWktYrneMn7vlXY|un{hr|0_1*&Z`k>2mDWbfC7i&v4(Q8q$EEN$9g%1d+ z4<}(NQ#U#6(RyXBe{iNe3XpRz@H|CNoP%hi5QQors2DYUTvM-H(UzdC(4D(YIU^Tt zoWv6JrM^0vR2JdJId<90Hw1yMP`P=v^^`C}-6e#7sZG zR?1gj_yR7{p%#rX&+il$t?hbh?eV^m2{aF6?LZ8OgrR+|5G$r|Vt@h>)~du)A@Yv! z7t$8e#$uZg=ocFy+$Kboz*>ZUZdFwmj&A?@Sdxu{1j<68V?j<DDdc+3ML*EdJ`bYwW_`pd-`&!DInI+HkZ??i&)*w8d3Bw=Cy4Y8 zl9%KZdTDtQr$04oQdcA%t3i`<1UzJ!DOLe zbtreqEdNzf0xzKj?|47f?xMCewKd4M)X<^Pw#0=EA&p_;`-yO+Vb9TQr9D_YhdPkm z+>nq^KGND8cK1NL{QdOe#NMmP=on#$Ccw}AK)8o5HfxYY1N;^DSIx!OnH9!?ggC~F zN z_=TbJWQjl~Z2*KT*Ls>m#IF6<(l=haXkF(K7Jntx6kc^^2CvDnCFMy&2b$y$8zb3Q z^Ns?+vRX;z(A|paZNPjAPOZGjr31voY*@&2vn@3v1?8$uiFg>SZl=j-9S(<<_Rhj^1ntz_6 z%x5;PfXT%(TW%m$D2oyu%|A97M|3zf%r)iP5sSb>7yROHU@`7T;j$6<%oTfGoF5o) zc)JGcf7;iCN`PS_Ti6lhdnjBvawl7ebO(0`Ck+b1=gR`df`NEsJ8Rn=< zp;hIJqp`BY*@}RE#Uh;er zWqMLlo5W5OA!})qk=N80z2fZsEt*T45clCmr*ZmoD#u=$+7dt_Np@?p;3yPPhqeai z7hx_r2H*37U5j!(FD}P(uaw-&QN1wR9AEWoK_z6vFwKEUqi}js-+ZFtp3l+PEzt9P z2uZr%NXA8V!xb#&EK1J?HcNBtVFpzo(jh0GRERTC#s_5fAB#E&m~Mu{oeHEQylLXc z>mXz|b6MYNbQiCk3}Zbh)(s2%Y}& zq?AjPUvAU8L<3I()nrcU?}4}p`+}n_31YQ_I@UDE$!(ELBFK^Q$%xYC>gojMPlMSN zCQBnw#GYXFvrV$$=prbw*|4VEOtl&oF(Z4a)8MeWr&y|WrKaO|Tw}8TGZqKBI^VPw znU|o+A~`oVXWo4CJYL&fhr&afz@h~kOfv1L6Q*8TW)F`}w)qtM)|1TBDY%_V#FOYUKB*T((uy5RDGMPDGdR0bqJMT5*MaDIvl0JsWD2t z!=nUUxieX6Qr<(+{2T%#pMD*XlpZ)wEqjHEr`j(L;wUuTUm*j@m<%h(*DS}Z&ac~B zkBX6Jo{6m-8a$dhLv`jXz$f(Zik6<_Bo8_lQ$Wg>%_`kaN4*O$Brm&37Ly~51Qd3h&#Jx_R*r&nkZ7th%Jk~1Z0GCjj1Pm)N&)rP;$wsT7!n(o+SZ>G|Fb2LM;IQ#3j$#02Gi)WT(rgApHt~!KInEH2HOmH+rIcIa)Po)Cbg7SM3iPR`u1yhdh>60Qn7E<0=(h3 zb3Uy{wf=a_hTJy*^NA5SlAQ4{cz-vSarwcUR2T;)7E&+LGPfhuNvFX)?YnHsny3}0)kSg6tmkQVhQrB@= zF{T4U-n9cVbU@ISOL{rb{y-hXZRheBQZHpPQl3`I&ZqxFUVQL0zwzb#kEMyOc}!Br zCJHz*QA6c*g3f?gTZ;pA268^0liDU)0kBc#8{G`TgD%A1d#+fQvED7wSKIh5a6dO0 z=sCwf#Q%wzO}%ckwL$KlFRa{~6mcT_Qrtby{*efx5+l4lO3u(r0jDN3JkGwo&ky64 z?F2<;LX9t2nMVi*DrPToxsP0llR^!80f33$GPH~mPj8uSF8({P+nN`rPFZ{{6Rd=_ z3yKA?+FuU-`iha*OA#W^|IF`xgOlwR#<@u3PEMm)@PTku$KR*3(U#faf=kOa#q*f?;FWf zJ^D$5+UF3J_T z7jV!`p)Tz6;N*>W>9`pJkYZcys|zk2Ups-f&4dYxAYLe3^a8+Hz<=bKR+RTX`L0Lp zKHJ`oAs~fqTc1Zs#3EY8`A1j4rZX9<;a@sa!uIhGypUz1>cNLyQQrNH1{0QgRCODi zL)^o6dV2GC9?Tv8Vkr2K5L*rpGPv+S7PQm%$lpt_a#K&)dzK$90foPS> zlag}TLejqbb+nt}@9V(i%K(If5O%Blk?TsMf#{X)Le^jDZ}{~VHxBNgB$jtQ-6<6-~F0{KTpSW6{q(p*n+J&)C(soQr!JVx_LsE^DnSEEFO{nd7Lw8kL+Q9=RJG zax2~|jlsDI!Q<5PG(4=e8codYO(PtP`cppbRTbgNrCU7g!&po9pgHp@;q zn~!RvmY{;Z{=u#I?#h3pZW0mA(-{!`^3*{*Xjvgb?^s=h$ggZ}*9`HVZkN6^GhV5>lrqC79Y{(=TEO(_gA4k=db6Y6staT;I%^?7tNTOfs z0;S_b9kc#>U3iyXCLtFTZrI76$b z?0!qGe`HmBP!zzQH;6n26avH~NuyBq?|F#MokGY}6_LcIJf`H8z}LbYJdp>T&=)x} zem$m*nf$95Qdf8iR*1gTGCk484b~U6e?CFf+3MJ*j#c9yO2@AnOIlBu-x5w&i|EFH zsxXOy)uIY82Hbh_-5|}my~Okz`>ggvtIRa1HrMA~$L5*DPX429?o5tE&1H8(WR{Kh z{;ELxyjx-q@jto<#RV}-q8X~z{_Wo=o2kUly8yli0z~%$r`5~;Dz4%c_n}vDZ8|+a zJQw7L*^+LB7*{hTTgwb(TJ!Jb1y3p~ZS)%df%W-v+83> z-SK-w`no#9Wtc0aK?He)kvJpCkvmy5ZxMWcJN=+LCE!P=$$k1x6 zz64M;BitcI%F__|HsSc4A0eR9d18Qi13l7Rg*>1vk-3xe@XfU&PSDTBB?2ex6gW0a zfx9)6{;}=yDwm39zEI-G|J|d*j1IDS^VVtssc%xn(cU!ISI%vrV}F5A?w0U@mc>W3o4izlSD(74X(m2WYHRM7LqO zy}`^FTLKsd*v(26)s!)next-pAik~8Qv(~4pw{=Hit3hn&hC$Ux}yOr^8c|9{TswX zTw!NH@6ulYEBW7QnR96U$MCO?064e({r(wSk>hkRfJ0#Ar|1Bbx}0u+hNhl#BCL!U zLZV5>RftR40X1DO0J9;?$v$9Z9-DpA=B)cjq}w)@Xk?Wf)T6#95~3?x`TS#{Bj&jd zHh-H{lxR^LRbIU0f)F6|>|3U?+tuEz+d|IivhyHsFQGoEHe3tx!IR&ERCd5WQ#HT1 z_xBFacYbtX$2m2}A!H%PITA@H0c2E>qLB@s9zeQRT@lhZFPMXmtNwKwgq8zl`+HZg zGSSH2Utahphq68hx0v& z$36>{f1Swff(L$PL8$s#B;pl8|J6_|lSG^9;&un&vOpA(R6W(Nj8^{T8}Ue<0jwx+ z`6LZY+Ziat#zZ`{2z!5`3@F@uhbTV;{-m=3-wpI-&ZUN|JyP_^-!_zXw=4lUYmw6b zdKf8-K|u0`?}&I?w8Dsu{06M8Voc<_L3tbxx}Iv~M!3cTkI+WQvGlRJACshM5;%u# zMbI%s?c1@wC&v}DWE@pY#&M3%RrH;||6hOh(Yf^D+G$y9tM()2#a;Y+_8YVy3ha-9<#o|m)y-&_lt`<&N*k290crsNH{}CdP5g+_;HI*9IO`jMq)5(F6Wjh zN~&=cZr?QfemJ7{-k-BZISbub@hUy|=H6@V=OR!S`s18)BkL|KF7~)eEG`kmF*tDi zPK6;h_;ZC*t^O4N*{-O8VMzx_ynODC3lbi5j=qhfqPgmcr}{cr+C4J6_f~2)qjR_8 zwPPQ3tpX6D?&P!(76G?eFZmvPc28w@esTY>*_M7caM2dn_R|OG1Hhdpsxt2~YqJW?Y=)fd6UxS= zLmRAfM>ET;L>?&@icK?6<3E0nTH{|NFsQUa&%{|03P|y3ZE7s7Q#JoGnyKXELKd1+ z`(9x1OQwwrsfPn9qsm?4;*V>jTNe$0y`xj}qpL@l;{P1ze(XJvf^{@N0jd7qP(v-< zE8$Me$-kl|nuD``VbyOmuf;xdx#V-KQw}Gbt2p_bbFLjTPk-NtMai?MgY(}VFyE`>(G#) zYmp{ggU%a`>jk&({N()xqmDP^9;TIa+#k*eVhkJ>K`a3p{$7`d(q|j-IQ)xC;UD%H7?B&Kp89> zeQnFJF9GKne{8aRpzvd|fndO6APu^PokJc6yYW-~4A>ow!6@H$#@GL}SMucSo`+gB znBllM^DH0ab!&v0nXHlrSF^*p5YWQ6J@MFZ?A|OhiKWs;9ApT;X^p%1eC+i1bE}%l zzdk$t{k->1^KF+GbL%4(wXC(4EVW?*nmjv*Shw(9pgMGvz%&@)ODXxp5T0x3pBJLNM2;$h-R*R zFXv9_HZBowV?$za$b*@Yc5uMgik>m(d#USV`a6XLA2Y1?fnl@M@y9anid=rkqy1;) zTcruBA{C4Rb?J_M_%AjZkM;i=1iE&wktipoILRPiH0g*6|BB3y(^}hol-NZm<&JYz(;oGyJRA$By6=C4$g^7$;DQrGqFC^s#8RxVI=hW-L z6_a5(QFKNGqm`3v{?#sPjegcy)Z_#+;C_jiC5tN%`l_3ITiEs&jH=Cf3UQ@ii^rL- zj5k0BIpb=SJynPboC(N7iH*U^33VDfgT?Hblvumbp8# zIs6a>>XGtv5&au_H?4MXlc)#+3}{Fb_J)}m6Jva=w1FJ3#@0gq{xW2=VDsHGC8!v_ z$cx^8MKRr@V0Gluz=Hp{nczi})^}Rhx_&GLa~s(1FOSsxG#EGJT;KiuXX^;HK%@Fz z;vn-J(e zmTYFkrxwKzqPpdlU;n+KFZ!R?S88de6q7_aSIiEBh@wok4c5_;n6{vu%-cehYwY5n zV`--%iMXh*U<|QHokc&7|L3ihr91yRzQSoksKkov%A#Z6UuSpZWb(bMsR8=;M`;vT z{_P$Mf$d&~yl^L&??26ef)n+QTqKcyvu=Z6jVMK! zE`MRZcCHs)Exb=HBVKx71rinDj;P4!qZpF^egdvsa>`k%tDmDk6MFwiI>KmL=S)sm zqX|?uGCX)qlBnw@PUg)O8xVB;d#BQHWXF?AqilLu;d0M(ok$AWZIjvb z2ek$rEbbDx?rgMg8rjYiU5!jV;-o=C3zsP28MXC#!~h`W+7J5oZJ1ur+l5+bbJDqQ zg#@N&_TRV86tF59j5-W)^4Bf+pWL-Sh_K$x%KI|Ol|L`;LisZb8d6J3P?VQiq$(`! zT+*_-x*7ywYYK+UbD7sH?lX2%C@sjYfh+wD<724eh0eDgE$?7Fs(Cd~OZ6cx{`0j@#lzyW3fj9XfL zzwan|E)la1>+2eun_d{RdamS#<@N?vLeAGI)|e=#qmf;5g@tO<4b{;zl@3 z&xregweA)qK~Tg26uA$7&`a7>1&DCc@JUZKZkWy0lvcS(Mr1)u3AtJXNb1mj z4ori~A1`vM0p9`R`FF#+(xEwq7Zf1Ujjh8qHnY}2X=a&5p$1SLGFp3uru|iNQt(-) zoy@BvL3Z>eWS+RQxSZS7xEFFH@!vFyhvYYPvo@59thbtR)dgu=|7wh z=T1d`K+4aow)x@hl*`i>OgN@%)9{Au>``|l#L7v<|) zcr@Z)4Z!iEZX3nTB3`~&pX zu<0`zOKv5CD8X`47Shis=PAYz5x6*fX6G&Yo|24}4!)B{pKTGkLVr)gw9ya%2D5d= za3|LU6pqi@Kj;ib8oKJnl#;vpH;7xaE)FTKA-0;>DzA2lIbvif2WiC*>xG$dME}l8tP2zKL)^e0^@Ok16=({0=6+2P5WikBa7Y*7= zfQ_UXLoOABI_^R%_bX0LfnC!g@E_Kizc1)%YB`vNi=lOsO}XnI^>-^=LoKyAFCc== zZL8((g$EUzK??kR4DnhcjqjC(^V%3@?9&wi5F3c&(__ws_msmQJOoVjdbn?4N{d$oxD}t9=`fX zrn<;8L>VcX@JN7o7)jRb!8j5bN)gEm1%;rgelY3#J>T?8kW9?97fKv8ySR`3+Q?@d zN4<=qPtM7RXH2AK^oNsrWP#@V-*}Wxy&|$Qx)xb5 z7q<&`%-r}skfum}!*Y~zj#_I`*cX~bSujYV_u%2Axz?)$Z*Me9sM;UQno}>bzV|VU zW4#!Rzu9;fy02dT8Ysn>`Q7#09AGBdz6!al^6|W?<>3PNf+hKr$1(Xtg&_W4u+VSO z+#)m@G#TO0OZfvOG(EX2=b(=tr`n_k%hH`)GLOFxsBL6vNVUS&9Huf-V+U2AtYK#o zqxdSI?EgT&5x?P`@j}2W(Xq@tFWmAxioF&YZBt-op~eDQBUtO|d24_w^ac0AL|)vZe=hRGGzA{ zpav6WIxfSG?`?9)Xk5@2)XF+yL*+GE&GlMbE#FJN0%HZ%>wK_Jh1O03d#$RluFw)_ zjl3{CaH>KqE|BR3MxUrQxF_BFg)YbPZjh}~Sy33}-v|?bmf&!a0fr`6j&Ao|loC&Y zNIZ=LA7>*SbNo*Sr(J7zdW0x$fVKZx$XTxCQ$)$}Q?R)^LjzD;dEnaR$d!}&W0Wn$ ztUgL+xHg~YoWAxa7R^*c8pXS5=YprrmFY=_6bG0MGRI2OpYV(ev4JAdH(B zI-8*Wcl23)yB?fpuNs-Y0-FaEi`D=nB9H2ea{2hJK9-L-+<50JVKiz4iX?OJ=Rx+x;#y&$6=P#9 zGzwb#XWFm>5NB~~+k0=HT4e+SaLhoZvw@x$?)W+-Cn&%~N@xn4L(xmpLSGvq47~0` zG^(OX>_qauF+CPF{!bM~VPSl6*|S2Xns_{gM%gX6moS7*lT#90Xn!!dZ8HjwH%XqYxr&pNUvkSCqDlEV(1b5`E;HTh4PEt9;I&Q znB77Jh_C;_O%n^GRts7_A$+l_@qBKV-nEzunmUoVGv!HOE4RQe3m;abGPh4W1cqU= zILDOgy|HK(k33)TTua*tKyTu|o?nOfVnG^F)ZZ6SGZS+VV`Jj1ICMSJ z!P*5P3=@e(--QTIk64a9MNzcor~eX2EX|EZg83S=i}*8f_*Nhi%2(sDkHK6{gjEC5 zuCOX2mYyhrr{)_qhi@_gA`a-bS^06^;3q5dpqHUD#=WGSB0-cg0&M@(0@N}HJQE21 zXh4$~(Ku52upxXdyTC6xoo0)X^ueJp+-PqUs+4H?uK26k>ke*nAB{EQPNtw}=Kks} zsY!-T-VR>;uwm^_z13Zm>l?>T7&tZNyzgm_O_^{pV%AcWld%r;wVt1gUjImT6){|M zcoh6JIF*3(KP||XSuSKvC_EZ8`HKSjn0}k!F%loEX+(HDntN&`3t`DGLe&xA`Jz>J zN|iAI^jVkh&9cPjqBDks(UUqAU}?{PO>?6mN!2`Y!VMJ{V|_>~K>3U=lJ_3aB90)B zpTIa5!)*=g%c{oA6DD_6x+}1P6>K+W_MzL)uAJqjfbokBu7)I-_U=$9qxg}ziz7ys z)G!*(tFWw(@<`@qNZ;lolmKJ~?7quqoc!cH0my0UCC-Z)v(Gjd1i8t$LCDtMcljA{ z`xL?#?8u)I%iGr|b;S)T7+mGdoYMyv?zCs)a#Uv(uCVit zb_sngGiraeLzTidEyau1JZj4+xu=oNwr_QGbguH>rXJtzb~U0nJGNpE;0UvP0oXkz z0=cJ=QsnVo@p$IrDUcQXZfBl!-a=lePK=mEkVoam(%RlTk)=Kx_q&PnRDXX*cvquI zOe>l)XSpW*yRVLfH_xWA9*^SKn)WSGo~Ir76x=;?E#DnlzL1t^;lfl8BVzwJp8ba6 z>JxYugdZwn zN9N01`>>VZGv!nJ_VbY=^OG$b`^J5#^R;Jx>dQQxmF97#)g&c(QZBK3)hoadSU~gn z+2PA4ex$)!qrZ2V#Jylv>&bm{gAd*;aL@w!^sEup>gzk4kB3J=dt-RgE)EZ!Zts>m z>5jclwhaE%tropa(+t@ac#p#VYDt1}`uhwX@p2(s&G$5arccN}t7tLyF#lfP%^b2j zMjQ3S3ri$szoMer%=umr-lRXBEkWzW?J@b%3!7y4CwB(xl}*o2ml;>Sk3ZRfp9A72 z=6q@R3|oGPw-D!Gl>nVe~U> zCmab4Vb9jHsghB2|JI{+Hk-x$O&hIz=>64Wy)&4_Y$g2(wzJF6Nx4YzNfq|CxDNc9 zmb+m3)cQi#`P99crsT~sJ)4^n`zp^x^VX}u&6kbh36=UljfUmi)y)o#-upT!#$3aV zXDiJzi%ag_nUI%H!>vgBQt4~G9+{BHN++#l%@@q%Q;K`>?ax$pU4-yNR|xVhPEec$ z#ty98WU9*f`dqATe>qX9E4V+@UT|%=P-2Kpb-#e!%wJCfi{gc#Z;{vf-ilRct+}OO z{d8={-L_E%50o!7D8Lo%0t2p^cR7R?b?BnMk79740V)_WyB+>bi#2Q+{{)%vZKTpq z7z*u$=JUB+NHM>9{N%RV$}qd0kXz@~RMjYB1Gc(u#R={N3&x0GHaYI1^4TE`lx z$W9^BOX5Sd6=Iskh2NmoLSun}3WV9SYRL`V+b582( zSu)(iKCYg;dezEO$py8#cXwT4Dhb54T)GY^;dtk8;=B;`E3mMA_WoIKx^uJhHqDv! zh*_?bES%@$)+5vY`a{{b{IqJwi1t@)Gvt!vV~_Kx(DV26Q97Uk^kHoy9pjAsTdhgg z=hG$qE12EJ#@~#;kpy8$(6k-|e_;JVBl3k1$zS;t=1ek6pGgomY2DU+P=c`^DB4|WPmI25H1#e1W-q_FrAd#HJu6pQ1@36q4=Rpq1BX&8y@4B>+v@48yEnX-$@O7g8`6|$kqBQi3{$k4kA1EZAX2sY` zbex_@118fyfQFwp^P0DgAMT|OYtA)9iFFX?Qe4ZCaW1Bw`)11^a#^>#D)@m8EB`&w zOlz8U`K}a4(R9aqAuMjnq{rcCQY(%mSVUFI4lN|pKXoHoU|F)yYeJbf#!3!jQO3ktOk__^F#FP4xjcZ zQZ(vbdjb1=4?r#V?TS$dm&*(jMj0~eipTDOp{;@3Dr9p(x2RCA8Y)^%OgtLnR9zu9 z2>)w^viuJV!Q5xTh>I%kKa9z1aj%r0L~x^7;O^tuN{f{T$jX>7-HTN8 z8}6(puKo6D-PSi}F8cG8xc!Y!d2zqr3wLq5hriAf?u!`G8Owv+Ar()JGcrAQaZ`W# z;-Yi@h*q|}z3c!nCpU7^6HJskTFNeM2JI?W3@i*teZA<>MuS~;&3lWFY>&P6@}a-r zEh$^0V{k8TQ!RSeYhi~EG@X^tE#~d?C>kSO)grtup3FR6Pi|h~jXf6GDH_fnqA&i=KR;dlCWvA!h_nDChhJ1$P^$!nQ!dG@At zP6|DZ=T;W&ktmv=f>D%uB;TBY!y4oDs)CC4t%M~ve6X%(-CgU%Ggp%B7%wcF=WMci}E71R~fP7L#wfTJi4R!#)`!KsNv0MLn$z5xGA+p}{m!}82e ztjR=Fc*+(@{dV`?6X?|q~yqKko{V*iV(VW_iQ=~ z2vC8+TwrtBQ7P`YFs;dkbAHIh75*Fn=(VNMD7#^HG+lB4cW?Fu86&~sj1i+HpEkod z?z!<-cmHjVwj~#ileozp%5dfmam}x8D*v;@#94}_pW?R*5Jw#8Y6hM?yd3qnz*Di7>DwIbfo)gz|6=Q_1Da~sw`mj+RHR!v<1*(hOvFdFIl&Ul{R`+l{5I2+rE``mF|*L|OJrg{!j zUg*t>r`WcuP!^f1kc{B?>X9Q-fM}v8hdVaQk%vB*HI|+sS}uq7<~8b(4K{|zGV(@$ znR=l&mHVQpv>}b@(lFYVK;`JLy)>}M)9j69%!}pFM7vgAEfZabLt4qhdY-cacKC(RbP{2~U70+Zev3Y^+T90H86X|?1-qrNn z>{cA5Ct2(0SR{pt(=eepMXfY&I*>yFUJ61D;`V8^Un}x@VHFN~a~>tLLi?I)ANQp}|}nMM82} zRXjR;{*^KB#P#seC$b?bzH|$B8ZF-f*4@m9Lyj8HmS>-%D-9>+QYyr;R@#kK-XG$;K2Cg2ZSp97+Iz3XnqlmDEWIkPVNkQT zq?x`Jjd z6*&<*GaN+J;Q|!>gwuEQ@V;qb#}!F!?+lxgBEoOX`~C2VPCwrSeW&(2m6AIyuCv}v zK?gSm4*nu)9(|O3w*hRJt!2z#MU>YSYYR>2l?j0bX|5yT$5@5CS4b>n3&~OA-CIl3 zWyYs%pB}$#xW6^z*+r|1pE)<@HuJVXWkaM=#KzQL4u4E-6c)G|bS&Z(t$y3su)UBR zOpL$Fn1X+FIb1eqTO8v!DJi@7I%ZyHE6|(`fwxYD!3}7_eb6hX!wCK^$Og2&QF>$e zR$>b8Dt1I{?~!{9zhl6)HR)hAY?Efi4YphDx-VMSG5|xR9?vS1V|ILo^Pn!b+MYpUE4Ko4W204=FU;cM^gi5xQ5?# zX^!?PcZI*!Gtnigrd(CCUXzf+%Yce12Qe|^Etk|4XI!s2HaA_g9wM7JM1>oREu%ci z#)>a>M>wNuP@#JkNAE1d`})LxqG?b^yYT$JeSQb8d=IYfiz8?w+Vgz%rc%cWI2HMC zJJ^{pvEQpBIA(J`AM{+Y@^DlE-cu{Fn;F)lbJ=zP1 z76*_{ia<){{qX}YT4Fmr3d9zWNKBKbHw1B9oolpcAEoM(&#YHbtV-nA^d73>wp+W$ zQs?@#)iDgczJB5T*_1)!GcOsY)}g!*ymAtqLR-}NzLYL@*gNVE8tqTy1M4M6RED1> zk}tp#n4q^F5R(xr(UA~S5;r`KqTU_uw#@5N>5S=Ad6!0P_KJ$H4z;H(I(&S&^qf8w z4D)(${d-OYVg9B}=KfFM@mh~6#qarkfY?4W14rKO?14Xt*(@+18hZBq&_5wTXNtWi z$>W80*c_dcCAF1L+HSnT(v z%f)|8uM3>fNKh;bN=H!UMQx}=`k&SQ%iJn%%h~Hyu++?a!@4Ovfx*^YXz4*Go}huQ zZl{1GseLl<7!%tU5)+(Q{*xqy-d%8Z57 z+Y{Wi!s0XJ;?v7?LR$NC(ih~L`9AQ3bS*W43k|%097o<;ml3+h1Kh~#ptGzfFjxeD z!jFq4Ok(+%JtxW*0T_9!V0;J;uZG*VG9dvmj>T!< z7PFg6{`83)*?0_PPihZT)5eG{#ViO!UY)iI4$nE81>`EJ&22pQfi*Cya^-FtBt>6v7c(t%))y%x}USCj4fR|ZtyB^ z2|3@`%S6>@v0~OZ?sQ}9f4m;R_-Smo+uAxatazt-OKa7Io}YlyM}8l$BftRx&dOQw z1g|DK{4HmBw6p+MlKB3MSQCg2f*7^Hsv9&aZEEM;fQb@V zt71ac#K~RVe-zFV=f0>F4@(% z4mf(W!kms1?TD|O#GsY0;eIO^F38QtF8|%FSq7(7OSjW-z6;gO)o$Fzony5~WRdcEp$3WAX{A0SDg$Y?wZ8}NcVrh6ZTNCMx#^`1G$}sCger#3Lom1K;z02|vxC z!KxRcrDDBKVkx{1*%EyYq<>mvrgb4>&*pjqyOuvJbUB z{yWm0u5P2-3IRbjaL#kfG!|Zr; zN9c!Q5185xk^zU+zL>QTgfKpD^n`b(0g7aWFJrb`?5&>3rWbmQ`fb!o)z$t4kr2%; z&F3FrRL)j-{CLa!-;Oq2+%g*O)j62EKxh=mc0cxTu{sdpWIW-R`S8?CU6iY6s*b{4 zEn#VyTxT<)5e-$G*cn^Q3{`nJq&o81BS5_~4&Xan=lmY!yPLTP@s8~fQo&87G=Lz9x*6z4PS3m$%6r171( zaU-?cardVpe2h6#sY}*XrdS+SMn%hJA|K2>Wpw0MuwsR{`;8DRlJppjyUau*{#3}9 zl9#fi)ftfGT25nK+0-kXRrs8{a`(1a*5_A0nwM3+~=S2=?Q`> z0}DV^ipk(oGGPJ?cm;}ifzj9(Zu-t6QkM)tQlBlF zqG_MRluB*;H)kvvU3SKD&A?Xkz7{oycDKP4k216>ep7gsQTKKpL;;6;8h$Odg^+sr z$-KF3o02#fCx5Wf^;h`o)HGn6!zJsxbM6^enj9yU)mYiS+V( z2!4|Ei4Sw%%FEZ|v!rWJi>$Sn1xhsht&!GTC)*)SI`J2_<&tL_7QsIo+rM>YN4L~F z1A?49uE)n%9X564j!0UCzh+i!l_t!e3_3p!fkB>t-0{E*8h}EptqHlQG*J>k|D&~ohbt&_u*Bn9v_pXUri7q6BU1#db zoa?#DC)fxYuyjg@%6I`A#yWUikoQyuwQ-U56txV``+RXzj3dCq*2hW1r5$VxKCmmk zII@GIw-6yG?^h0+9-`7%I9(YV&p(`pgdd4vnqfG+ zSXXn4dGBcMoLElTI7I>W)CYv1_soUQC7eIG)*s^--P5=?8f9=Fue4GgB*8)=a|(d{ zSU}TcR5rn8J=(8Krj`YGS&2jm?{U{nxg6g5_BNV;v$x1)wKnH@EoT#nHT6fkI?{lI zzUGNIjs|;klONstp6Q&{6z)I1Ql#scb_SW+cK^uNJK!Hyixvp(&kq_bg;QHj?pZAK zj1+&|{7AwJtxEzFM#m*VYJDtlSPmVXC-@WHy3rANzO^u`anlY4_RiM%aC{d5?gx(! zi@BSc|D1Q^LsPCTS28#-3p>>&;Q?UTXT*Zm{E%m4;k}Z%plj3YEA~o~Ulvwz7S_!o z=L9{7PJ@Na?lVdD8KnyEf%w&ksW3lYSj(QXp<=jz&axuFx+&Wc|w9_-R-W~JpnLMq)cF{zN> z?~(7U50{tO!u}oB@e#*g!U4{DiEX2nJd7qg`1=V?d7=S5mHr@4=JyVDX10owJ2&oC=tc>rPSObdG-i^P{*cbv-?)ZMeX z%l1_XDO#JJ9h9wgugRhI}Q0?if zzgt5;9>#Wk>!e?{S+wxEjT|zl2MK-hMadD~*d8N1!gF`%(-QCXz31F`hZn)Qd|H3) zj7GO^M&=6MG;!Bv32VKoSgl)o@D_DCe=9H#EZ7J$(eU(|7Z)I4dwS?4!94XmwZNI! z7%b%rN=VsM#8E?|(|P4bC+|{fQtAtH+uR^dAZL6VH%ft}>*+f5^_j*XLx5sUK&E=4*nq@mn4{9+c5n13%RyoXc*g_UlT#%=fP z74gdte>GUCGD#qWSh#~!r3qnFxKXZY$A}e{))x|w`+nh-*8JU(ucG*sd}}8CRdqR_ zW7o~0eGP%f6Zr`ZmvdLj0+ufL(qzC9!K{y!gDd*w$IGL|H4KdPfKSf>u=@?!ott`L z)Z9`{L!YAR{v}%5LQ?a4C|F8$%b?{BlE7kUp_{XEnvgO3CSZ?6YTr}J z1AoI?3_Q#5fyrYJYImuz^}io&7<_G(@79d_XYpvUc&K@QzI+PUk!ImfKQ9p8wCxb$ zXmqGdC*OYJY{C}(ljf4k+vB#}hu}|NSm+Ceuz?FG*;AH^K{_s%gr`&(npqhx*NJuK z51+u(Q0yq|ci2?n(XL55#G~P&8l?CYG|rFC>biOqUw93|t(_|$f?20sW*~|?X1`@( zm)L0DC^LvHi{{kLd;lbeOnehpcaq)4MSJnf)3S;N!AL^%7yFwU(A&AvncI26kBXe( z7yVxH*f`guZFtYJ-ymGzfwh2)obWsM66#MMtX?qDB;D2jIM4t6dfubE=Kh|k>C3S zI1dr@99urDy(KUzOYW35l>}zndjEZ^T*B3Pf>^)p)->F(Z86Yk{V(PEEJO0-`ZYE@ z{b^lwe>OmkpPIhTo0rD1OWzy%d+Wo3^~I0k&g_pZq7C*8rS|O@Qx*zM_1L~sCiwJ$ z-(ErHdL^=NNdze9lCc{3u>u5n(ZNBPe>4}3JC~p3EskB@MFwHoF?$x$k|50Z!fH}vF={}uS~KWY_*U(P!SKmgD}GtzUc~=eEfP6^DT*HO1~K4Y zV=bf|FH}izhBGB+7(TTWly{0r2N6Uh;gv7WIl8TXI-?5F9j>z#WEz}O{iqY4)JlZ@yGOl;O>2}^w` zI?mp+br^|Px+TA3$Al!1!~tiumMX=U;#YmTir1T#mYI1wy8y0TsnJ`)uY?&MF*Jcb zitGfo->AiafjRyuy2M)Tuf3HLHriEu}MEeZ!-uoJOx}y3J|95;RW(tN`s>D11Crm zZ3=D-)9oMxp;gru_LW=+{~Ip`=qYD^ZJ2Ho+!uU_jr&k=^xG*)(msjw&B6Jss79K_ z#IX3vJ8vp5w@p&)UAuf$RkDY#CRd^=^i-=TC9ZWP;2_>|I5TKTD_sA{o%Bo|`Z&Y{ z2JE=caH|;jS9M@2P7rWc983pnxttRWs>~L* zn?wtf!D%wBD|>owR1ZKq-a+IrnJRCT0JYTvo>4aMRns~YxbJJ1QfQw}Mvtdj3)*l+ zRy1VkwAWnvtD9#$ff%97F~f``BwmfLAPu4Vs)23Q{f-hV5t5WOfaayBDCfk*;a$k& z1W%ppw0@Tppt7;K(&g{-Pn)5jfxhcr=Us*?oA#S|E6a!ciu@Av^*Oix_T00ad@gg# zfjCZyRC(V93EmoR8vYIZav#%0$b>ywkJwu8T<`Q-6#mMw%f9=yEBpcJkBF72oT@U9 z=?xMSuwEb~4$@{;?w$BllC$n?T^%6HUM4loGE$W_l?9%qt^K0)fG3wp8GKq8l%Qv% zfin-|G6*gs25`=GX1&Ep$B`;C&*^6qM=a$&%29=nyTA!)=-8mDrzOa=YHVdE-VmWs{6Y71j@o%uNuc+`aEedQ=} zXW7oeQ8#xA00H*tz~Gb%HYHWyos;ygAVJsSCzTN%@KusnLbPc&M!1{;-??-WZnTKFB+rYiOjoxW&*xTd3!Ne^JsC7Z-`yLUo zN}0UYQto&OIN1=tdw!bCq`H**Cce%rGvulrO5tR;+wn|@h{Z6vb86Ye@w)>aa^E1V z2`6s_^-jS>MzEL;>dr1{U-;ok@-(`iALS_YYS5r4;kxumHNFRYDht@ZaQ{QA!Si>2 z-@+-v*?@k|!N<+-=_*51H;pzE#gBho_7iejnoQf#gZuPRb)C)i2LrxW^EWkX4+|~X zEUDgnctE#EyjX6sOe=E*@#YYsM6*T{-a6Itz4gd<{sVqF&KYh8seG{C`9ouBH{0?y zzsmXEmwF~6hMg+}Ym26A)x+D<;2Y3imv966quMz*!qyywYT85=t1zPsswb?Z9GPOzm{L zNHyBnH3zs6VR=Qq83)r9vDBBGktV{o)>Ytri?)NIA8_|OP1CVfi=ZBF-H3}W(nsFy zb9n1yp$vWr>gx~g5+xCfQV|e;_Ml>xp9nj(RLDJLLX_^|)83uNRkJJQu&J{!y;rGN zS^hoZQ2Ilqhp)>oNhD?39~N=WtDG0snl$pu)yO-WzkygS7cy;rd1>V7knHDy)?>FH z_zjKMY*k=U_GpUM{;CV92nzOsqq_Xzy4rb3w@)N?#VthKji2P04}l%rASM~em`hW) zZJK)ALL=cb4t%MYz1oP<*UwnKT&C%ILX(q_KA9E%cbtvp;Rj+dfx+jB?;%lG zA0qj=>GMem_7PGmJYS<93!C396{`9WT1Vj2&FWO|Y;7u9tIlVfJ3Co2h|_KjG0tr) zXbzRUw1`3buyPfxb%a$}_Wx0R%0F`-5i5R1H+Ebl&ZGE!A$YS{%3$ZL0KO6R-s86W zZ41Fwe9mAKps(C#3J&PNHFVovwL9ljAe6+OzDVld-yujsRE*5 z$Tsj*KDgH0Q^s-{G%|<8Yhs<8XH>hK};N5z5qOQAsBpLuJhK5JgE=N zB$UKr)=&8}|15N=)812~7=8FWDOyBN>*+;Z6baAayK+x5i5Uv*j zsfU=Rd3gX@nFztc=X3*88yL{QkWNYCa*)U>V&^4O74#E+FFr5P9I$KAcHRhZ)&RUg ztaiD#HK)f^vOroYwBjAA8=FTDRR@SX`eGA{AFCLPtwZsD>2ymDFe3sl5u>CDBzuZI_N?=+ZjvF2{>>7c8a*^l zbN5c%7K^?j2+2MyT%lgaZ9r|8p=<7aGU{m6uvNyE@Ax zpO<$yeRKhYw{p9XcYpc25`hWPC)-BH@b58`6(VV$*B1lxd-|C!^<%rk6wY#aI-NR= zVs)c*J0*II?ii5MpqtOJ^Dv@9aKD(X36I~{B3d^>kJ8t4xVNa*Oz9POpMjCcmpjeR z|0FZiX{-K~`KxKs&UPZVGIMkcpf>@)Cjz+2r|@Fks8#W^?_CHN%661dIh6q(YuZ~k zKf5;QeT-DLW&3CN;U)?rQj4!0#b6E`U_NHleX?J)KAdn@-f!%F9z15q z?2Bn7d^0XOjZS#?k@M)eec-$^fDO)-M|QHAJ?KXXPhOZM(q1rWp3jK9bo0VOXEDtI zk2!O@2aH~fzJK}%Ux~mS&mEZgiDHR1s$0WJ->dJ5q2g0+b&$L!QoHR?{J7S;sy#uK z-Oxjtl6Dpgg}XqVJ;F1OgYfq4^({$TIru8)H9Ejia|tmsjEjH8-Z-ehSxNsxyHjoM zQd7$pklAt5|7GcvI2B(`bgKzvbHv8xV_WLC*^{QhEnjA2Nd9O{nr@0C-fvlw>J5S& zB&~RUHIXd-_xv*&VdN9k+o)heVT}^PU5VYw*hn=gV(tonNiLVxwQ!Y;X%&Tjd3Jl0 zcG)%h;|9()`VUeIGa$w9$WKBV8}h~2g7htF4QBVHcIL!Tn_;#3M;W2sc%?5&5i6-q7XI`@UzfQT1r=hxWc4|6lb8AAe%Z(K&gSg^&5EwGSR+aJ z4?7&L17qT;!k=1bU9L~I^wJZf%H3cplf`9(x)ekkRAK7w7V0l)QK zLc`@Q&^c$xL_+>!vAoIHb9oOCKzDeyn=@e#+3L;&Ao}vlga1_D)2}zDVfb})$waPF z-eN(Saide$Y3j!onKW?#TC^l>|I#8hxlIf?Szto-VVa5nmENd!X)`n{UtH0lw#Bv< zfG|O5G8KfEoLUw=V#($DStzOlw;yKj5LxS*9RC;UdeIkenjI<^JY~B_HqH^RK`8V5 ztf#6+F!lqU@Gy_XcfNNL8vo>2yFl!h$`_)c#=s0jG|B1v#FS}|tk`S&rIz-tqu`nP zvCo`9UEmC*#pAHN5U>pln70X#*>0{@D)f>8Y*bDgex7tljJF~88=9+wgf@ZZy5}R0zQxe~j zO?oqGfp22re%C$rD+DLlKxBqyseH&5&{pT>G1cCY?E29%n4pk}=2l~_qhQQMn|$9N zBJ>cz0}R{3mml&|2|)O4{#5#S5gv->T^D<2un9{PA=`p{IKa?NpT9{FzcD}UD-=gPNf!u!}wz786X3T*w_JFULuyY!g z?!D&*6cuvBln1<~<3B?VY#VrjvX&<1S{5TcreK&eLut#UF3>BaS`bVpl6nK-fl6)f zHX*i3O3KAx|Hv>;XmmxefuSHA9E+^40{7x_t4gQ*c87706mGr4FaC>3czym+={OMF zp^$s{txS5B!U@@V-cf$2RnBQT>n2k@|M|6>jI6(?y9kfQYtYMdsi<9B1LhB#q85l! zMItjpfQHFu$Q*pG>L)`qyF@_cTV@7$$q2Q z*XVb6Cd~eIY$33|1H-YIDZv89R#9C!HnWr2E~glA+lsl8jreqPOUKzZAaK@sI!jbS zCKk9bM@G0@K9dl*c(M){G%IXG54^@`G=-!b-aZMz|IC2fJdPK8TCV07%$@L3cJuN# zsDGf65V#1&!L44Or+j%3kp6ijPd>z!gy|BU7#-Re(*cRt_FHwtM$W(rcF$^RsF2WQ zfr&>MyFsUI)CdkAPRFn6h>!SdNF=}!s{z?BFN(=Y(E{^ihKhCm~X?d-_zH4&ut4RZ+57+smK zQ2^&xfr=E{;BRd~s^E&&`L>f-YC!brJa|UV-vCep+0joS%54Po9~ZC-)3uBYEjoZt zz6>>=EB0mo|Hxs=8(`#)Y`j5`eL_y|48v(>lJdwPk8xy*6SS!EqJAEzvg!VR^PH4td4qhp^A~mB#cCsocq| zN)^1-6Wsz-9M+CXF}<#*6j(W_ROY5OBM{Sxa?DsnDuoQ62b+8CR|1b9@6XaerzBq5f^yhkV$ULSM@b@`WCam^$UCuQ#a9OfHIK2 za?kB?{^njb77Mh2n+~2Cy-%H7KX`_}>wv=xT!`qsrR!C{8yDaI|8T%#S}%I?e87Uk zT%3vtHu+t95Bl&SFT3_S6aIE*gi-QmE0#VeC5|mT`1kS&rB<^v@$qH3;9G&%Ctgo_ zR}KmgNtk3?z*P>XBeTU*EzWSh3(PI*0j&F5ii+(Z!9LsetM{`{fq526Uzc(;kW{?i z1HyghNov>YMaE8^e@EAVcC6|edWf_T(5rtwwvZ)%s_RaqWnbxHS9(jH0gqwuj^Cep z93+)f6>rIZg#?qdqxNYtD=Bxud!q#rfezfTH!EQn1#XbdK1EdM={5c@_T_l2;44c~ zo`>*tg>c!7F&5%4({rvW-p6tA|828ghXnXCy382D2`|nwC81Pi&lM0x^9V@9vv(2Y zw;$ZydLT!psi$A|nMm6K^5v0%$(HQa23W@s(Og?kq_U3pXsVrC`Fivbt6XxqXjG?( zb3{I#^K{~3e%EkMB6D(38=J)I zrb$u>S@&hPxuEv-N#~BxAlVRWkcEfSKy~wJ+u=S}#ULpw$T(3*-FwakBXquCmnG9Yl-d7{Ct< zAvy*-91-4F7F)CXT!+vmDL!sCC0>e>t5=D#NkQ`cX^Aa4r(+jK(PXwQ6QKc%aXS^} zEmfbzSV1a@_Q@zQ$06vOY#3-S{^WQvLq9Ep@p4=qglwKIYAu(2+j?V=;T0a`E4jow z%E9}aGZ%y0EKGmLemwV2yf#ky1XztR#60Nd(F*9Q_cyX)Xm~+H`6@6``_)zcbWHC- z#>gZ}2+5Yyrs=uBH*e4$cn>|WFX^uzcAvg>P>@%9fT6=+!< zD$=#3sTU@E$m5z2a`O5WMdOnz(Wn0d}X>6?hU(6^SPx)7_KScCdL61c` zmRWyf&Dk%cWHd~pR+P6jJkgNT)_`woyVFMT^C=DNr+ci7JV?-Gi@y_7)>Kd8speR&w%@ur%i|#fUDNi|m>F&pX|mV!-1$;-I@oMd`V-~alqb`W zd{M$$Q3|a9M9amNj=T#qxCd|-gX^rrifNQ=N(SRrbGqM>0=?9(+G+gcMII~Po~ji| z#!m^t^`+isrKF2F){$Z;Ap!Dq%(t!hLJwZW6XPwpu$j?4&{Y7KZyN84xPL^_TA_sJJ)$rpcFN2sKM zb10{LC0_>eDLM`FZL7ZM>wPiX=6#yGd{X2;b94<`C>D{;%(91ws7zT`P)>2cCe39M%-vb!aRC5+O^X_JX*$tYT#gT&2DJn0NnM_R@w zwo|{E;Xbz@U70oYuk>zL?m^>upH}PYR)>_$(z7g&G)NeRI-Cwv&%q1E6@L3V`+Tp4 zjFT>wes_ZoM%qiIT6a4oD>r1{Ws<}K7n$GW~X-e?>Bp1eYI{}89pOb+3!|vPe<9;ldLWD+cy_f z4p%oCw4Mbho28*X4ftFkB;uE<2G+nOKTWsLFa8aM)jvCdUm1e^SomlrTN_#V%Aqke zUJdI^&~?_F$80&jcuy5(hKqa`USCxrqd2^P`&}bdI2WXyBoB8}pyqyW_9KRpBRQT@ zwl0L6(zB*Dkn1y0asZ9PwiW^kN{qBT4FlFbm?bkAgO364r6% z!)*>mnZnC5I?_=QY#_@rkXa%u(d6ZRlaZGOr{u`9g_ql$8Zdj`7{R`H`j-0SePD?1 z&L^)w?)Bz>n~7xtlstV_2;xudIW)4Rs-iwD{4Ed*vI__}Z;EjMXFmy_thhc(Ubu|2 zL650F{}FO_3MJS7F0~tNbN-w|K$x1C;JEDoxb}Je5ke;T;v{<0DV^bmO1ZAzJvB{+bGU) zD+iu1+>s50K*w<$Xx@Sao`wQD4IL_H=VUFU2RE>G7&-+Dg$JSx8Hd{P6bC&nn)6BM z)q^&sB*j5pp?EO6$vt!~?>lTP16|6<)w5r{9jub_xw88&&0hO#+sSG>nHf9Ir{>eO z)yNnm4ap6y`atK_RAibreXY!c4yQn;Fmsv0>1=^HE54B7%rkSn14KLQ58vDAgUjQE z9P{f#^PHkMW0}_#49+X$BA{N}mWaO@k=h4)$*mkB=A|MUP$oXreR;Oi8e>UWmrV72 zNu&6$Y0 zj;bn;nHaOb-{{0WZ7hREbwXC|nkpq^b!nu+R#)w04vREQ>-%NOTlWXQ-zavn%dbHk`rmQ z_sNPt`?&D6!7)j+lFk9R4#fi4qW%0laT#uVJYJ4#kyEg&Pnd~?b;oB9wCHPop_16T z*L_&r#R8J!Y+{D0I6=X$_Pf*I&h%|H^Jz9h&{aVh6?Ab)`G7av6z)yMpQ3yR9dKv8 z=yckoA3llt&3bG`hX|5Hg7jXMYwYhQn*i~l29>szF0_6#fb>Wp!(5UHv&Gxe-zkezAHqC+q!d zkE<5`_F^NH4C^Z{We%vx*!g-7HGY7A`NTV?(Q!g$dDt{AmlF?^c1m+pstsRl^NKKn zAZ{xm@ia?!(&wX|pD`A$-uaF?c7&#BAFL$>S}SLRw*s5lkCRbHMm49S@-wZM0RuU2 z+ZeF0uu9vJ9fi(pr&}>0J1-M=uAc?jiF$VXK*iFw0=!ZgOU6)~&A~KyU^eFyVac{Y#NVw} zDa!rHj7*gw#?-_zqnfNlj(ilS$f?Q9@c9N4m^S?4Q__N-%!2m?uuGM23`|KtrSV>^ z@VJ3s*8?JASL?2M@20+1l3-Q#xCXpvl7(I>2Qw?H2R1UCU3!7G^*mX_D;^?4EF_yY z|70DiDyx5AW${iJf+c=xJAmvH&Xr?xf02(oxb&TDNR>0IH$C8KN+@ykS^Lc;=~J&SL#z4 z8p#qSXA6kwhDWQgwumq-N;YvJ_?mw>tnALmA)1$uIN-7O7 zEtoo$`z@YH1^$gclLgLgQ9!mp(8Y;DP^z{z`t7Ih4E4?v0n4jy6Z1d(3bWiy0+UMD zw$GIz>R?;RLupskT;mD5;mF)E8Az;LRxv5*a<1W=Mr;UW69Tv$WXNy7y5ro}e7OL4 z7Q#;Z9K7*d0aO3uOu6e9g7^3^aAY_{V1fS!$b%ZyTXdSr>NcY;>e|E=qG^7Tah=3{ zwKtJRQVmuo$v~tl1x)nJPC=jR(4l2$MDb5SHd3uU^CW4ZZYCb1%ziZ8m zYqgn2p`1}RvX4t~v3AKhD!72S+Fx4eP)>v|=;rv%_*`iNn_C&AZ0FJdyX6FRXp4Mt zp=URB{dF5P&lN`c%6!=_vK75{g@iX!Yp5T2Eo?i@#&U3+H@O{)xFSBMUCwp@hq(-e z25%#S;sU;4HZ=N&(v91ExEJVoOZser4{BM+cw{%81ss13G*$08%6UuI<3Ezu(GF?b zM$N^yZ+8U6fyYoNU{G&dje3+i1`-&?NjBp+IF^x3UlHwf(er*kH`Mt%B#vH>N4RsPXdqd2s z)B-#`{Ul+{m;+&F;frjjDZM#C(&FN+S+B)`$xT zL0lnzA^YSq`GxOxO|AA+mM}L_+!w3)?3;AVv17n0E)ELuOni};1ia-i6b1or_y6bZ zIZSgGW39%L_kHvhBWSF^U$(0axUcsBIf~5D# z=X8`BNYTQryshZ&T8~&{>I9@=)8oKk-?jS6K2CmKAU-p*^xAMaAt{!Hg99Bh{S?LO z(hq~4<%p1gpiezLZ@#8}6qCD%jfq?=tgknlxLFj|G$6cLzzQY6_`%I<^cfIH|Ga20 z-gonQc4I{etyk-BPeBbWzD@NmgHE)`+KTm4!Y&9uin=XBDUjGgs}u4{__WE_NC%ws zSInu^)Ue)fRat!iYPhsDP~9t};i;`Y{J>2=l_wjNl(z4g>eo{3yf>JXnVeM9gG>QI z@_@{aCH?x9a#XCub zIqA=1b2Ullv&s_h<6+s2R|pUN6ZPiV$4RvllgGi`>P8>37Gn{j%iK>~Q$MwWU9PkK zDn-{f1&n^UL<+#xq+B~3GkoWuzzyL0p|+1WR%{+|q{X!+r$x7#umgL{UII>vq?i`O z!ip8xc;*Ab#q1%qG{XFiS zpUNFKG%Og(t|_O|9{HyL8xdFQ@bvUR}#8;PgJy;(1~+$6t4T~dTImq z4;`jM$pwPjk8&ne$B$|`Y+M@Tz)9g+92H5!H9r~+N%mcXK@A~itS&olg=%K?r@j`c zt@9nylv!&5X~t_IT)^t-Ua0%X1Gd*f+4!Qqx6-{Z`{(U6GY2`wZjMP0L+zUoCrn7^ zycn*uwcHAfUu}=0l~dK4+jMNF+aoW32yGm)3h-FXd$VxxwPoAPD5#Ufyt#i+PAd*t zKV*fmdwLqE#-#hwLt!cv9EPHw)4HvUdRozn>Sq4Z(CX++I*N%$t68ZSuU2tMY$>7i zSQ@jnY#d7If&HlP@QQ9lj@4el>fQJxvO%+Qqc*=PgG?TA`1V6pP&N%H6p1(}I&(9- zb(Wcr?{nH*Vv-~Z#a5D-6dqAa1VDN8Ir&K58IA9^iPawOM6N!LmA?0f_2nQjQZ~pO z60ppl!5_GDmfhxeCFQ6@gFrzQJ3kC4 zyc>G2+K+?>5yA=)3W?v~^om`J?CqW*D2-ge>^Z z<&OgiHf=);NMs0)s%77f*ms&8MfT|csl$SK`VcE%=F~(FJd)P7Nji5xU72>78z6%V ze36?l2lqeg=w7BK!oW<->;KLwHy=7+FkR<3*LSJajssWUv8|z&9MBih@^G{G6)|2V z`^!yz(88M**Yh=SpQz!=)&S~k-?Zh{#OiOk;}ORLQ^Y4KLvznsMuF-x)KXX9uSgfq zgq!T(_&s^jC}4uO6bw9E&m^Mv!1T`Cz9|t*E&iuxLJap!Uh{X_Ng3!a|2h{GGCNh5 zhoG)^Mz$z|m%fM&Yi*5KOV%2W6nJN`UMa&_cUs z3Tv=rG#J4M_eD06EO}X-4x(FpLTF18B3;^Jf@B5x4la1Nym;e{BMY7)%bj#WJd?Fh ze^8fku(5iVpJtwWdoH4Ft}P_{2Z{2gn510ucx9ZtH}5Ls7usWsm3l@m&BJHxs?tTM zxJ|jCrld<>rR-4Py#L3D?|t!6o75mb#B9cz#I`G36zP@iQNI;FCH842U3a8g3;pXz za^#q$h2qi_acn}@K(c)1)KWe%4BJS`TOLB6cqNJ&%6fW;9t=)+!!&$>lwVnkpo?vg zHemEkklj9{gv`T^!Z6|YRoRI2JjE&yHlC8&C<28Fshf~0>QNIJ>^2_#X+HU_p z0SrG|-(K$2n!LC3e7k?uJa1Q8P<~v}jNObo;B9yVfQ2aB6hQcdK}fxpwOCpFAE=QV2K}L1nc-5D3H#85E?{svtyGr7VH6F9D*W#ukfJ6eS3$vMI95 zVgdXn5bKm#mN6hy~ zy|B^MzO1k(`Q$lOs_Zmn&c_r4c*WkwFL4>gcm~eGTm|N7c`xjf*A;U#VUI8eFl4U1d}>&FI8jUaAxm>Z?5hg z;`L9pj0BO{66y3Ll~bZFwjm=Im#Q`iUC#DB8TXKoJ!`RPq^!(h39}8;nS9(5cb0i) z>a`>$(vrr8`oL|>k&T1R;Xphdw* zv%hVJ(~+ola1prrjeQ>{nhU-cN8PwB-c8_ zNOP)h4PtUffhw>qA0lQaU$|^Q50%+gzp<@*v+yI@M4mSa^4svMkjjXsBO%2_eC*# zY0GHL%DS$i8Tm2QUH;7&&_Of%{Gk4Lnw*a%La8r@7e0c4{WD!4q2q zLpQ&z?Syhie3-E`GJJ9t=Fw;fYMIrJg#lf6K$tNrHz+X7m{7p;grEz9g(|oO?Pt*( zT|#?wsE7}NIyV>ziiZ{&XGOPsat(?mNr4GNVfKi>g3$xNjh+%x4LIg>bn~62;x6Fe ze=8&4IEyZ3jZ3pN29d7iMXlGs*p}6W%oXL0v&X&=awPQAw}O#0WAnK^h5*)EtB3($ z*~ijJ0yiO--k@*VDUJUdxS^`3aG(7Pphgi%p{y1=HrzLk@jSrhBmOfYV_!^`V6!fM5IO1 zR)9>#?j+%(q@%+5EzG1*rtisKWKcNpU}&`J*g_C3dg_F*)UG3oH2t`9lQQW0T!ec2 zb*pQbgEbzrgP-iI^iHt=a&{J*K>&bU)XJB%H_x?1Iy)($eN18&+NhIrE9D$lO1f_= zu1(=}@?I{dXKn(GFd(}G!#S4Oi$HYN<=u!FBmL8{$k9zCLD!AIo_S*HD-bXeExwt zpZW*>x9)I`z?!)fXv8s&ssJkwMUH}-jyLw3lX*_?3 z>N6GK{p)a1i3I=U?L&Ay1z`GM0v(p$`qjX5?z4l76C9i%FX6R3>y!Au?`Ooc=8lFW zr^)AP7%zT~$1>5%6s0`%I~}0VM8)kPi2l&cBSBdk@@>;o6MJ*sW*ZPaojx_U^?T&s zw}xe3-jmXp&G!=GG8k&fd**7%3p@ADh+Yyky(YwOYZZ0X4L8zvy+vu3OcZyp2Iprp zuBjG5t55-OT>mqBdi$1RoRhA|Q$FOPYpnVkQH-q~yCTjE(|%H-qChL+9a9Q%d#QlJ zUlJ6iW@eP&av73W^=r{MU3UFc?Sd(O420m_Ce4)*VT^?D%7Oh)4AyOO-5+B z#7!@6d_Y87V2<;XK=rMB1x`PtXW9kby+`_ zfS2bj#^eW4{43vs{E%?9jh)<{aR(b{uyu-sphWa)&`}jFjl(;x^5;T#&3nxq)Q{sV9w5~T{I%9yPj+wtd{zsB zhTt|y%f_%6skp*v^UcO4Jca-DWEbko<%jH?cI=GXRW*m=MfAf3rrVb#IIBN6d|>md zT(h8U4VuN@MZW%8#vb(+kMq8r1s6^$Qhiga4A({7UakrdRL#hl+e&7Zxo)^je1)tk zguQOijc-%lry`Xa%10csfR5=By=phLuk54nCAv~ufP|=Uo#yV(y~M407|IY9jE08> z`X}#=vkpWp7gmn)bRuF*wAE>}SINAFd z^FPnYuowx*Qmzf`q&1(LoHLh$VR7#7w2nLj@ni+|Xwn!9&GbFRXd5BM0g>reOEtRs z$L@37m==yn>!+#tXYLvOoX3jFj^e@^%|Q03hN37Z$yep1dKE6@LRa%LKqxklttD!yoIovh+|er-vE?#dN=SI-HXK z^fN8JM)xj@5Sa*3d{?HjX`1)4rX6^d*8zwAddl4Lv*1zzwwT}4njOaM-612tK${&M zVYSur0Nl~lg}rZWS^Bko#Six3$xLZm9V4eJ*&*MT6A!^pA`=B)6aIBno?i5 zV%cO1wj8XY8Q|+*WENvdCl(0WY~XN2rn=fg8Ua6NFuL^g!93(U@rSJhQvVql|5j?a zSv@^H_Z?HIJc}Q+^it-3tT+Tf9R&{ES2HWiqULCscqVvv*&%$+0Xf?p(ao8i24y48XAG3f{Yd#8qO&i8hZFY zILL395=fnq|8Ojn(wP=7gX1qolHDcCxzpUey)Cq{kIwOtPOsDroz$AV>7re1UH^NOL2kLlh>YeB7#m%-nqy8Q$tlMw7|K7yv z(-jC{WV$6AW&8@@hwbf{JI#o?0P+ei#-0)*4=SVF;^I#`J3DVHq^)MCX=v>2?G?#< z>HeO@q^=N@Q$};54-<`=;fg zD{y*AAWYmfOnk~MEAnHj%fEM{3L@S5h`LJ*D37jr{b$a~2e~j4K}e^Y(7Xw!2ki?i zTIk*5`VsTdaVz77f0q-(;L!9Eb#q=k0@8`~(9D&^eg)W)8@+4gZr@MyIG?tzb-U(8 z&*;CW4_to#ckx!CG(}QnU&`6gXb$$T@fq=nJ5?wCchZdZkSc0L@xTKI(DrlR9KeJ| zv1<-L`HeV9oS^13=fAdEi~QGA@j#cxkl{&;>RTU&t9e3?JGV0mDMA4Xm&zL|CkeBI z`sr$D?!m6c=KNV(;J0$4e~s72{h#G|zeSKdKf7C~`=C4xnvdsAn)>hh;dxa5`i9rx zI^!n!p(WQT1+Zv?O~_B0QMgO~*JklY(*L?=fQ1+4<8fCPLA!VD7|@zK5EN7OPbQ9| zk#M40m4-8iyye2btLAMl+Q>&4V?YR8_o$&HoR67o^^{`AMBQ6xqQ7wtA;+9U?PPW$ z-Je@(`F~bR^y~o zpZ@jHzn?Ld|Nq6FRp?x+&q;8~+lpOZSHYQp$DS=KVw;l(wuNy3-T#@Uh}C2Z`|rI6 z>gJn0clnpRPBurTJ#XGpmGKju`p4*83J_;I{ug@;I=O6rEu{TNhJa7@uam5HG;{ub z$@_TMF<`R!&eU+r^YOc-o$7YZ=QlS2LC&Hl4TuU0=Stn|usV#kWb)kZrtFnk#)W22 z$Bvr?!Bd*8rl$1YhW`btO5p#3l@_X<8$C;Naalw7(D17ArikCGN@IxX#o=JMM$;Ge z2gjw|6NF=-B++@m(iy>-MERt~)a24=xWNA%eU|F~Ii4q#ctr)Y)-9!4HQtsx)v;b# z!qQz6Cuv@0*_2iF*f-)>|L$EA!C89+{{+nrh$r!jQx2L(<9y6i^M6n2p!L6}#4(`{ z%JAbhd0fih*zk&g=KNX^ct3@yj%e*qe^dwc@5alL%j>nwos&B!z++S5`9I6almFjx zggnkcp6sq+V06UKt2KhUdxlPm;EtuLDN}|#*7iZS;z2oPF?OqG{F+93Y7?GBz4?X} zbM;f{_-%y$hV)07e=ns%wR`TjT^p^kt7Ms#kMV5BN=`%-Nd9Lt5gn@l#%Qha)?6f5 zGzpC|=`x2X0i)7811#J+v<#j`oMFn`#y*U*IZb%EeTbF&!k4@J^BErs;jx>fuP{qt2K{LxQ~FJQja^Qut54NGfF%~H3&U}FdWxa7nFUXK;U_&?gB@7Q4 zfP8jJAJP>3UF+0(x2s#{IAgDP*X4Wg)RPVz4@}vB zgKsoz4AIL^gPQu(K2QD^;?G6i{jDsdo!x!`eZwxFT4LO}8Of@33}ptWYj{3!SUi_2 zq8g{QStd;=(E+f#X;Id2lpDVSy+F^$90w{@TFp0pE2DgtqGo_oJ$NBrq=TjJU!USf z8-or9R=XHKE7xhEjNt-vVba;u$`YsWG!t+&CUn^$$iB-0U)YA!4*^c%>m;Ba&W$f0>92ef}3GQqu~yl9*w}+SY>pPg|&GR4-4btr~{o(`0)vhs(yj*=GKVx zcT*+cPZO!=4qOROVZi8zy+tC9SFbG3BE;K?*0RB+bv4t+`eAi>5Qn7qYl;V>*2VW! zmoYxuOmKz;eP^FL+kmZXZa|jBN*}imao?;)*Q_(5_CV91^xquLlAD}?jAq{V>vM8m zvDVuLbi(Vy+_ZC}@z4Q~b1I2|22tqM4 zyX?VhOmY;&sw_zkHnlCk?cK7XlnFD*?S^c&m42)$H6V9gQ}P#lo3VE5BuBEtxW2b zS_w^=+%3Ow+PBHv$<^HqraT|H2tanzsEGVp(SLQ9^KTI6=foi{(ljZ?TeOC2xoqNX znuW*3zx{k4(RIpV^$Is%9_oRwLo(`~p(Zv|25Agfk6DL%P$=#sD=ICxJ48Tw$ z*m)Iz(wQ(5o$EPhx|yk9v2@zMzWhn!G88*fZP~ayeIyeU|Jz`01p8ghV4Z%$lCpM+ zzPa2xt6`#$@B2h9B+qm*-zc~#PDE)Br8{W#Bkl*b3 z#7@oHgY}=%+Ng~ztPt`Cx_TC4xR%C~e-rf6xW8a22DF=fRLv8%O+2hnyqKS0(QKV2 zo5O)OW7DYpCMrxg#y|)#l6nADF(>B{Z_+W|VB{7u=7nSQ2}6`AQ+VdwxGao++V=~? z`!=57dcYH?ocCWwmn?iEElV5nfbwt^HLLb%jiLt?Via?h?+pf+Z2((_vmCNpGrX4h z&_`TqSNXzQ5p?Mk(WUj6XXTdeVXBk9m2q?0@$4q;7P{7B25Q61RW;724^<*8as9mO6eCKpN!gwQIx!cpq%$uc~L^qQ0VGyNKHvd<+hu>Gr3U)Y^+C}y|Ss~F~b|Cn- zZq{g9cC#GeWeHrY~I9wWgo!C>_33=1yg_sgr%BaZ$4xqw4Y+ zI=-1l)T}Yr-tYz=QTxYUXdEN<~>aR+2 zc*!)=Vx{Y}0QqO)-tvjY*~XEYAGJTdE@Kpqq97V!>JVoj*LyI2jz5yZV?|=f{UpHBoH$O}UZ>Fql zEZBh9Dka2v6X>2&HEb&;kJ87f(&d;Q4>Y*MEtx|D^wrNa*CPyM@^J6L6np*-u_m;G z{j~UbWKycv=8m6u!9>IjEhjaUppziaNgkq3Z{Z^20KAz;mB4K7sAeDT!$3gb6L>-M zpUSGKj(uncz6M^scV7_gsicCy*0km-2@)$;)sJ*e!1BYyPC-z zpjjo-stnN;gPUU-+gRj`g3kx+z;=Rp#DyRs^_fnplWHb#218w%Vu@%K$X3 z?;7<^M`Ioo_|?St(w}4v)PD*WGJPu9;n3KC`sYMFZqjOY0jP;Uc!XBmNY+F*Aw70L zJGCxFjFIqCmdxZ0W4-jq<8oe*8k!lthUsIl>)bxKZcqZVQN2Fj*qsW?RhiJr$U9)u z?#<1D#z8^H%{~nlA?f3D@ZDK?O-DcFmcZSD?LqVX`Fo+bpfXO;{!m*H{~N=bZq?E2 zwOJ+!oLhFFwc$>219tyaJF*kVpgh~00DEe8++p&)KPT#xL~|-Un?1Ni>mzy(+dYiV z%(R-Cz7`A#>YE*3gbMask{R)ipUEJ-<9XA@=K&A}YiXMDnqeiqz%++fEC14PJVn^->o*hJW*L%$dKW?bPoMNDWjWk!bE%@E;A5Qbg^%Ps!)nkJ zo~|+)C_W3MwPSRHMCs9`!-S}EW+BNcJ%elqHQM0|UAaED=#C4O{i7tKv!R#P1&`J` zR&W220}7b;BbaKcrsCwFK{$mco#^VC4JVkiD{Mj4Us~K$BSabw9LRhET=8SJ9=FCD z!p(Q-wj|soF9ahGeX|RWD0k4EZr-cu8H6lnf<}Esdz0y3vy|=0pV8=bZ+PbKDG<{4mc3j% zPbjmgZ9MuUoHDW|kaSm{7Xybv)S#a!;u*Kn)Ki9YcZ>cREGf3+R#wm?WeqYI+3HO2 zN(p(s?06s!+DX?MgPFWtODHKVGZz(5f?a;@Dwfd0jU*A9eIA${kU%vAyL_TH$6NWH z`#}ac`>rIl?~evXUM`N39)4N*Iq3fEiY#FI_>#HGB*>8(kNM0$jzY1dUuY&QwzJ}C zw)Z#!K0+#XJX@!Wd$g+#CLR*EXfn9vr)==)32=dZQ6knN%*rK;4wHa%@UK<(R~R&` zIT3}NUK>h2fh@S}EmlQ5bPo6LDZU8)PPb)U&WQC`ElJu_5`bR9v8txNSYxm#CKdh6 zuUYS(ne{OzAk7gv9G&Zqo$a}DZ#62k6&PP4S-`Y!0&UB(3v5M)d}Oi)>|z=##AJ#u z^g=X4v{y9VYrI+Pjd=vlM{hII5s808qn1Hawpokr+-3K1`5kDEXKvWOM#@OwQ-@)4 z{gB)J$;Iqds5m22f`%kuC%NNgAt2e~4e_Z?qZeA47b~O$zmjNI*lk{CLiJ8zG(STD z!=Ekmg1}xkHKD#y|EN+_vg5?`rT|3{g-}^mY7K7F^u_9!3rqyN*3t*HZjm-S*eY0YzbbR{x3o4o2}BQ8ictb8Jh0co6rxpI2Vb7?xzZu=tIAhs1j ztf8YOLj96kGTHjsPYzW_eauilt%eAj7;NTaf@n9KdRz(n?GlNrLc(5EQ)S zl0r5U?(f`Z$2tB9k;2lX?F$L<^XFku=aPHnHWw>Bm^PiVu*TjDqfKu8)tG!FG$dzL zz0Fn_-Q8sDNvDIU9Fpb(*eR!;kd-@u`Z*0G(QEf2$p$)ESe8;12AmMWz^h=keI$yO zN7J}|NTaNDdBR!30U+N^x;IfC8d-taG9r!j3)>F~1~YRLv%TOQ=;Kl9^g^N&P1TD3 z=w%x(vUD`Zu^cLgcFc=a4nS@&V0yZrD=N-vY+6^L(_u%3>k|q2?ROmVXN%V6gV}FD z$P9{1$sS5+G_u1WTT`yfXozqpM%a}M?Bna{%t{TE5tIP&bxexkFIH#SWC|c4P>6W(EfmG+dy~NkJshKT}7yf2=!)okn?n&;} zQcI77A4AcdU23uIKz0Cl42?66v!>P?+Yo_hyBbpG1%tU4Kb(2%`<|vLOzmHM`ld#1 zy@vVw-2ulV=vzT@VGcfDo2jJrP?2cq^XFeRpt;aY_=wPZIp&Z}G}U77#^$q8@3f>t z-DN@u8Ko=cB92Zt+CeP_w?WS5MiIMb3sN6W*yxBm09hq*@*?`p$pUGZR7E#~X47`m zd#|7S1q*)3WT^F8ZeW<(&rT!1q>42Ac})Z_?=_zcKoU+xCN@3_CyP&xg1cLQi;hq~ zTG%sLoL@uRFpXV#Mi;ofS{qGd4HY4UJgwR$)-N8G(b=kXUKa7P?26&L5~wTYqtaFMu#1TC`120t+eMF0Px+4-r%J6EUb}tp)!TIkX8?UHTXXxG& z2Deo456Y}Q6}|N8z8|BAlprG}!@|3AVF@4H0}S=#UK(;r&wu8xRXg{2&Ghu$J*3&3 zgYBD$Qt|HBuq46p!BXRB-kkB}QZ_OVA#N)FmtZ$uJ0S*#)w4EY=&TFeRF~13WcUg*3J(pV={zF@cYU&NQ-m=vQ{X-Fjx5- zpG!sS*1E5>cAV4A(5}r*0=NY3yche20L8+)K~=M3b-##~zSY;+#@2M5UF+3!=GtX? zvLQq({xk2BdXt8hFh0u!3pZH$KPeDN`dR&QMq_uRbGP$7q#Gx4K?s()c?j2?Ppg_q zDSC!y8#(c-301I5txN@m-n#EgGH+UPRIb~CbQ@nY*wSmv0V;&c(VTD%gS7`YzDoo8 zUP8zLYWmBGw)V4CQ_#6}kLM?;u|Gzs2&3AHX!}i>g<(b9%_ph&!zWS51OZG9 zdyQ+$)z;nA-aHuYo`nUP5-sc&cJ#?LVPD$JB`%vs{3uc*x6~2kVEmTeX#pZf zpS0odv_)@I|1Kg6YcK7}l*3TPArMlf><6ZMJUO~{o<(e18YCMgCked@PU?KLTHHdC zLsQTd8`dSftU(bI7TpdVGOA~(+Cf7mCOq>u$Cl&@=w@D*vzd1YEI$`vvRqrc39zwc!(T|a3gY3$B3~WuO^dAR zRQ%a>NpkFx<@n%(k%tXu84LZr+QTV@+30Sla(NVrcN94MPM{leOaX z$3{u!d1aP?CslGnhI&d#;mM_lhymJ%?;D(yWkP3)?-rsr#au)32a43+fa()0eFG?c zkgbu!x9_W5MXioo>wb^(*)sSOn<;dl#VI-6$E{v*|q7(}<3R)uC; zP6Jv>V{dXw`7El6DA-J%)wX%0`~GaXL|gcc>}H(ac-eiL(b;_$e^mcs)eE320&_Xk zHMglAq>-XK{3^`dq@9x4H#AKPBQOsrdkE=@6TQ9oVFs^=I6-`1KP~5)&T{A2TqKZ5 z3c1VRAoInX)!0Sg1Tr-Zd(DKM%>MYXw^;p)SFhzRZ`8*c1$sV}T*Gd3u1tPAX-o_5 zMT>Z=vIVHnW@Mc;Exg>sJPFmb=2^l#d0Z@JArayuG-)$DRI)cLj9Hrs{KcFu?)HaC zO_E{;l>d2-drp>RahKnDBAkiH6vr&@I z*ixFLG_(DL)x|K^_<;B=~+D+zAEyxi^!8jGv$uAg?&dt z(A5EbhsxB;>cqv62cI0qCR*^Cx7%mg5V=veR{YOwfE=rsiM`|1Pwp;*KQnP&(dtsS zCNy$VOTB`=i4*}4HiLq>+5x(_Kc^8V8~e8Q?aAyk*uK2+1Z-pTr=b*{bvy+x$iPYi zb=-oME>k}DAM4J`s`O9l3THQZH>~}~V&kY`%CzPF&~c~vrn#Mp4T%bp^M%eN-MBKT zfS@w5inFR8hkqORN9ukrKf%>A{xd(RVE2%#-qz;qlP+JA+7Vbr@mE zAjX;O!i1xj^$OBJIU>SfS}RxbFd3}-tla<)C`yhV!gBB=t)%< zD*;O!smwr-O>#4c3GZ6Xf{*p&KHVMg&>XW_Fg4SQvHy4WZOn|cuKPPAI*`U3O`cleUB634Fdvc~E4y!_2ly5Pt@ zAeoJ=3ic?GHN$hI2Xqq?#%RB-n121kY$bN^+>pI0i+puK$0+L6T~y&`1)KX`=bn;} z-5s|HFGZtD-ei1j>QH5@z~Gry6Ek_!T@N+{GoGuWBGVU%t9fOek$pa676t!ktV7hi zk=zk(yH6)Z%W=THLADyqeT#I=0*V)-O~}Thrr%Rk3S^pB9oiUz{HX*J4>oKYWY3%Q z{2}G&G9af?#^eB6zJzM6PG`by64btur{eU}QV-kl*&Rk%n#l46y3}R9oPiDmN5HrM zZqKAlNP#?=D@OByGhAfu3zo7WSt?dnoPvV>zf%l870@pBk9D`YKspwI6=gKN)}Nct zZv309XRw@b{v6zTDx9#*BkEK7{W(Yd>VyR`1^s$BJ4b9_Dq{Eo)27!#$Sw!w-=IOAqh5+(8Nsl1aX;&w6+Y6cFj=q5PK>Or1SdmY zmBAAXeC9$WIW`U@8wfW`psOH*0({{#wEM`s_6ZOcOCGZ}s1P1O3Q?f|-E!;BhKKH@ zqKF!-0_3w}pfV-Ew(41uHE{^`0S8l-rq+HXkFbWRtiPOfAWc%V6fZ1LS>Ra&yn6j+4V3{ge`vB+LCU%!n1m}?wgLtH{fksJ5 zsl2^vKxlk+R#9HQKS_!^emLz$3@Yk#60>gl_4Y&X z8+(z+p9T(2_7Ce|s3_yY#k*O=7*-L`o?#2yfq(c@oHg4=JlRtwnKCB2hiE_&X;xZc z`2%)~K7u3HK`O|tv;GK~cEZKNj=bU=V2_N3uLJFD!s}N^K=YGw( z31&Q(W`o3+9!t(&eSUGHNlMXD)1jXW?+tywf)9=<`P`k{L!TTe6EdKi0@uKEqel%- zi+02)&SjxWVPrml8{fzPH_ALN@apHE5>!#4fA`5QDpnH3>gSc`VvEtD3CN!oR(nh6 zcxt_GNWJV<0WOX}N%a2kd;3@3Hg+k3skK9rUr1YeiEyfySAWLX`x>QUo?&|UZR>IL zNBzwZYeK2*VGyytJ$a-z{R*Y4NM)+u+Wt{P@1SQ; zb>j!Kx$0lnL}+X|1a%Vg%LTObAlo&l-+uO^w*0EYL(^={J=&j_#WWoaC-i=~V~*^J z$m#aH_RD)}?^iyPzJw+?LG_kpcW;sLHIm*d3Nvu7oLjm1_+UzlmE}1@k#v~!@wOd| zs-Kp(f`F-~qak-~JdteAeQ&Pc{A{0Z#jpG<2f1FovYtpjabAP`EfDc zH>X~HpUxWnZDV}i2Y@zRDPoD5Y zqzCtBNuE%v5tew8r?A0leF}jMvVLMwbKZ{uVNB_BTz?Kv!@Qc%T9}y7xiUs9 zniBw-3CXD|zi3;27#AgO_1F*784qP{Lqx~&XFU@}pA;XY6YMapJ%fgrPpA$Ze+`|_ zoo$>B!iFa-n(=Er@Diq(mm>Gty^9WoUlhUgk97jze| zHS(~GkG5NjSnJo18&+Bm`WTlz!=%Z9g(a!dBK9&7#i)5ohU&XTzoo`s6&HJ#$OnIc zz16vvQ&I41bZzR8aD?=CEnjcdpvTu(WF}PMLXJeQ<0aLa@oussp?3Poh${^%{G z6S0Y$K~@8Lkq`pwfF%obA+U;Bw9v`8jHVF@9Mkd#-8eYDgneRbM~-^sz=VLrizzul zHA{h^I5D4&Hlgbhnt-^yb26L`r#@*)gK`~)K)V}5zx>W28f_%V-=1aqyfVxvk^3tA zh`kSyCE33uc9-Kx<{NA2+f9hdgFhl zYwlZZ@Cs;c7C=%>`&iC|t(7g+8Icw}h0&~!X9?>$VQEY@* z3aN@t&CO!$e~MCJLU9O$wp1ZBHGQ!-g4D2O7U$P~dUy3C9na~o7u~!u;e|BvHTIu( z_RfnK^*mF;MG16;N_8epR!Wz4m-?Ezar}bzWu%70t@T8h_-u>%q==O1Fe@Eh}I5psiK)IndyKV%CNW#__T5X)IHF5 zlyu{~s0z&HCNj_!E$uVFPh<@ll?V&yH8@vIgrCK?wX+Cy;E272S)8UI)faOZ+$H8; z&r6h<*T|zA$-MEQWt0shdivPUnC>~wsrwu|OX$5he;v;eEG^II;K^Ehpz@TZKcK5N-+b>?yL1x*F&SHcWu4b z;`f0u5B8M;MM50E9@=PJ4p-$UDP&xX3DJCk22EoQty0qq6)yW2wz_^X3 z>Szs!rF(JO+?SA*yh@c!Q|e(WYYGnC7_>oh(<6m(F=6OCzME%d_1B>X!7A+H&JqBh z_e-9-H-DMn(xQJu@M#<}1l^8}Y)-FvE;irnne>F1XqQ{#kHw5zgg*d$)cc-eVZyOsRWC-$-p`%IdVMp338Te=#~`>bb^bY`!i07k)Xzhhx7+* zt3mIP(6sj&k9&>1M_ReP>(fViW7D`;zuSU^OXh1LZ}jF7o@LjOtG3bdy5`r$i{ESR zskm#j0>_x?dDdK3pIUQK`SS|~x!#ETJGSb^xWM+oKFdLvi2lotB94cE`2erRv0ZA! zbvpt>mn8e}>qD9br8*_NdGYh6XCtmv5ObFU8lWU-fN+L zn9zZoAILom!C5#Khx_psHV7q`vk~ zf1{mT>teXBD2*+C0*&Qzf!*Kn5Y}hHlTe%wdJ4C8Cv!`H>90cf=xzxRxqP1%h@7>{ zY>7O3Un;DhE}VMAJ}RdxrVou^R_*itZB8A9l`RrtS`EJ#O9<6}Xw~zJFnaqbL&0!V zc5wK`DwUUT0o`ZHi53vc2cbp~eBkPY)(@%JV;`oE8n8mjUJBx@4XCSOiIDw(yslVc z@d|a&iGZt`Y4+kXACq5ga-3ZGZ^*R2x}q=>G*jqR)T@7x#+~EKAt-=i;_~gf+-^Nx zoqWJgFAnoI> z%jf1)U(^Jg!`4|agh*B^TxE#mxr~^Rw!3@qCM9fBOf|h@KCq!pY{psgx|Caq;#qs$`gXsYRq=y6d zAYTN;zY=0gPdAY$D}`K8l|FCx=YA3|7*ug5_E0g#M(BcU)?IERgtO7^C$(-TCQZZE zuZ`95M^`OO-|_z-4SkEm;PFMsR@yj4a3uQpQbj(d0l1;M7Hlh2ybnPdsiq_W;8@67gLf5L@h_0 zW$Qw0f6Gdc-TC|sQZ&>}v(*3R%j(n$P=f_b2}b_62`-w z`j&nDH(;s!RwRTM&9K&F@703zVv%Rm@S*6OftVkIH`5S-Wud;;aY8O~%zc_*YUxjX zpt9E71RA9L_7PI7Z#;?0IDBpy!VS&HTXAl}LV*B{c&8~mS{&1Ep9PFaCioYc3P~VQ z|2v;&Ow9JkuuZhL9DHIkYa*PRqfS-{{hqvn+Obc2-+_Dfc@ZoUmXc_2H`C+J5HwHC zp02_~3M9aw!#1gX%+B3&16lNx z<#XPMFO2nC3Uz!0{aUWtznD9yG7dXMR4thPIe<}X!Kh=5nBcn6OAN3_!-@heXsr&= zS6HSvrk>s#x5B2cJXi}ApikKEt}`eWoyHPxAW0>cWZ-yUL03yK_TcjoLfpqYw1oM~!G<}Nx>BH(H{VT_SvIl{i9 zL=vJCr3S6cNc?bt*?V5n3{?Z18&L>Xa7E@ZB1z6*>q3y?HpW6LhX zTKt*B4z~$wzEu;@OisyaT~Z@;+h)4+wQ3kuE-)Y!R;G2SjQT;T9QEp53Nda_(^?E& z&$|)=!hW95B*2Lr#*9^cg9yu~0ezJyCBTcZj8IfFq~(^;kK4QS=|p#R77di33dO7t znxJY8J#uFs>YBoD&Ba_};{8e=0DT2`>GCKa{CCwlb$n)#?3?*bih1-0y zc%byJ%V%l?eK*152ma{ZN{owRWff;jyqE7F>U)jT_kYD@8NFG{t=zm?=z;z>)Hf|} zD?nm%NYYFeS+jvj-Lf$ZFeI5Gb`8<<`Z0@%BulSr9Lvhb9Fw}lTc>SFg%R6;AZ~pB zNUQtBKP2s~NLi~Khz=>s3S6$SkvVXJRZTg_pB!0PA*JrC)w3M+9It@7>#=3tqC9|E z4vF^!gczPeXI(;#Tf42LPuZ+mQTP6ru)E45D%aYe&^u=Z-Fr5icQU}ooN&pXD0UO^sB{r%z4-Opp9kOLwz^5rPEAR-@W?5HFBbVszPk`hzDF{ z11E5}qhB&Vw2zz=MbuSnlrNpKW+x3+(=-YTfn7VM+l@M{fAKiO;P|Z>2=z_G0xk#6 z9Nj%XXLsL66T!^LeOz_Q@}m^c@bJGwRGInglxUVQAuGv(3WQ z`;q%vU0!lBGT+fiw^T7Q+ShA%sa%Lc$cTZ_m9393gLNTc;<)U&Tm+u;Q-&Z$}Zz%e6q@Hxu}?>%ma@{CdL%`<9lm=q~Q3~ z9~0QRrtt_ogluqcs{x&L&<1z|y$m=;`;RVQG4#+ni9`E~t0a7XB)!^ow9% zSMDq%A2xi7q6Xvm$!t(>-^oQ{wBdcXNhx5r1uFM7F?Y^0H+C-*t_E&A$qu-8h9J_9 zz6o<%w|L9iIv^Xb#;h?Y##x%h4yrJOFA}90Ba7hVCQ|*ozC5M0D)8saa0@;Zorw03 z)KjF8zsdj9z)VM{NB;P2E2y*P(UF`K?PdV=%--Re==9tYg|A|Qf!6*dc34X&FdO5~ zM_1(QCk%+yeV>zyz+i8exuCDL@EE1bUka^)h8MDCsgInx8<$q%@<;;TA)4|dRJpx1 z^J7`>Y7woNFO&s#8v<(r29 z%weN>|0X2xt>{(&j+?q2_<$C7GG9YZInbMe3QXOKum9z?Sxb>GCx9I6!Qf1KQF839Pfk955y$Ok6UjZ z;39dw9E&r8VXrf)W=E(qo`gCN;-n(3Md^1-Q2MNdzB zCC9;Qt?P0rKWt8BNg_OADZBEP8exGnp0`Yxb#CDdGnwZ8PuyCm`bA^Fwyj;>T9Wd% zPVGq^xkTPwu@oG4egSmcFDQ_E{!d|!9{T3ut~{$lV`nD*urOPIzyjWO#u8)Q!1Wqs z9F16hiLs0o4|(~8VNlr91oWpN@QB`qXP>q+xh1qwmc%7--j?onxEbtL$}W}qNI~~9bC?&Y0H^RdH{K%9tW7oU>eCk z&2N5;*A73;ldHyB(>^e6@kqX7*-4E^$hXd-yKsfmpL z*+rOO(_*%U9|6L=5V_8SN#_>7_w%Qom=LP)<@o@^?kd;2luJ2{*YXk+)j+9HAm1l$ zhFcI9Hxdnep~G+80Ccep=s3>k1eV9P)ypCrzk;(p#mrWvf!8az)2B3}?Vh*wZ+!_Q z)yr0<{djk86a|97_4`o=@yKzA+xO7LCoL{N;zXWxT^$&s87u7UgaW@y@JTvW{?3$t zO-~ft@9J8a!bG4iW3fv#e;ehJx&^i0+z!nIQWw?rIE-hs?LqT9XV&}j(FE9}1rRW# z>3+#Zyd5&E@Ua#wV1556nSI&XIDQe+2}2~95G>M+DNyVU5F0kxwG3UjB`jhx#r)!7 zhnpN%2=DOh^Vqf~PZ++OS;a9zg`MU&uX+q^uQSec(@D{fn!SFM;RGud*z}1&kIUUt zabgCHgSdr5`N766^N;LzlaovzTtb6h!^s8PO+hb$$`h)-OL984ZB8qGE?{d@%LcsU zdHy}+T8OD_7MY}d3lMzGd`4e%G8PRSeenagnU=8LerBvIH`^TM7oI*WDOsZmFeM|7 z*V2Ad5hLOD5gJr23s> zr>HzznMfD{raKja-lwWKqz}vZ))19Drbt+xU*dYd=h>}_dfap79H`+u(1Z?w_ce9; zbh6~&%)IZDgTxZjV9ZoHJ>mg*zD%v9_e0DI9gKr6sn6G4 zFHdJ#r%Z8@jINgous!0qF_?Ibx9l=fc1zR8&;khB=4fHw`NBetuXp)=keW+feN;GM zf?5MXEjH6~zqp#_G~g9J@lzl>)gus#)}_z0`B+!!<%y`$KM9z&U%R9D8#@1|1+Y3N zlt@Xw=*u`M`3_(p{?mx4vWzNn+GK1~pu@?VqJ^l&3!Q8;}0DZFfdsy|K zT`)F;HlMsCTWV+MkVR{EK32swIeqhaKt#5*p1H@)p2SD3`d0`ZF64k{Ur601Yr=g` zTI>gRLH9h$Z&i_0+f0iH4BTb04^?81uNL=f_R9(_X}SL19_Mz2O3W?k~W`x2}T9ph4&&*4|9$~oIdWybBfjOM^1h|h;#6b0!RHwTaA9((s1u*F zL%D~&pWzWr(f2(y%$AZlZmJsTXVr3?S7qY&RCNewnK-5WlJ4tJWw#)f7yTevDPlH3qYSiWcT%y(bqHO@>+_#Sbg?h&R1>sZCHSD z+15C8+!e8?DwxCN{p$9)+{9}_L1e^)yypaqs-RP+@Xb|x`>a^)=yEoSZq|3X_Z8>n zqHrz#*KbtHmj`_o9Vf{5+p!wI9zMJ95_Vq7bQaw#JMQ3F%MNzko9W8l`Q=UJz<&Di zv_eo_Ol4%a25b;Jp(4Jf$hn3YkblBwsl4Ts8^M|WLtf^)Z&6N4cWX-k%b78$&^S;2 z!JP$G#d|UHF&Aj_JoVNeTxH_z66><**0GU~{40y!7Pc87E=8Vveiik8851d!wmbsp zqb#un{nN+(LmN|14Gx*?Rfoi0+mJp5mHJ#5LHa#5GS^YXido(r&#jFr8%yq-{D`Dd z#c@{#j&cIj03GrkdfHpFcZ4kVx9Rh@qriJ?JA*%VK@6T^T506vhnRj2R~miSesFZf z<<~h2nHM9M%8@tVNaK>T#2+Nc2+&G3()GP-@ubbLylekxWx4=w{bRIVv-mB0>fkBy zM{%;#KQ6}Gk!&Q!as!bImppFIi{J(Lm*K(}h;5`I6k4VCEmlW{eema*>3mHrFxiS1 z%5tun;3MK@?psqPWI~u}QxsIE(5myzr{siKp^_C-B$N zMJ7|J1mSEPLbfxX9q55ed)}zlZzJU9WlJcd?E$9B5zb6s|bXzK@F1sef-Y=4kML(e)N!QFZU$Fx?>?5&{a+DILXOG7tEe@tsQHvd)@K7WADFVhpyYY z7jBMrHz7G{%q)qROlIzw9_9*Mex9ukmpdn}IGHm2HAKbLZBm1()RU@YT{?<18GL5L z-S9<58!p3Cj>Ox;c6Y9Ud*fL8az?+c_B&$^XFpi7i{>qE75WaG;PUS8=6GY)&iP9z z@+!@`Bw}1YUp#6Bk`qyM3Ut@h+T|!Hi&dRvUbMQ#R>cKp*h(D&!xtLuWl>NIK-J;g zm1C9MK-_pGo7Eq7w@Kyj*y_jCxi35)koX-4s^+src#d=hXN;l*RbqWk32(hHiFGl3 ze|%N@TH9>nEA{5QhacL{E^bHQ-~w(F^i0)mt9;%*Ul`e zeu=qmxI0N~i?wyya|a8cTi#j;~ps_*uG&5K0B^_lUoM2R zCy?<;#>)M^b(_1>dv@h_z3Ug%$Wniywd1`M$v}}g;2HN))oRR=>_~6kYpgP!0&u4b zSwZJ~9q~B?+jmz9Qdc~pXEmE9P{z0LXeRu88xEt7)W3bh!qqaI+|M{2iu@TMkYCt+ zSKcj&bCq%u-;aIi(`Op~OUaetXBFuvFJ(&oP8Lij-uT$&s7{1wh%YtBUAw zRGqJ3^b68OjJzZlZE#xGiGmO7r;DK@p5~Lg{PAhu)hMDPpSw#L&@(rm zxV8JwV$b!x+5RfMt?xd|DUbCZ#maItwG~jTP)&~7 z{WNL88lk)5U5Q5&m~Bx7h1&<{y1s)f-ZV>KX_O-v$z}@D$Ns_M8^?;|UItVOo^!ZL zL{+e`d{?~qFM?KtmLuybcRDQn{9HgsYl#hYq!8JK$fwJbz4MAj4LUEZBy+VUSH+9% zE(s4Z^196ycpKl1m5s7Z6G@Z=W{9x-{Z4)GH7x{Y3eCS8N!<-vA=|w;9ETgo=kpxP zCh(ZfnUToEvi7u|!U9nl&eDeHH?7+At~n+N&Ac$|QZ&@EK4)BYW4MN7%pCH;=p;IeR95 zx5E7GvYp@ar@?h%@W896&)RFsT=Q#b(KBd~N~+>(_LD}*`GyR*@^5}QY3vB(C)owA z_I#NNnZYB?5OH(0_R@>RZTVQR(5XLI4KVRcz4@1UzZbki4pyy%?}+abv}tMYBJ9K~ zo9A%hE8s5&S+LR|#}38IE`nLGv}eB0O?VlQI5Z+=`S7ZXkWQ`D7-WKdl^WfUPu&luzR)8_}-6~g}K1MsHcj3J7(-%tOc zbr;exMe+ksbHjge^XE$L*Jvf1m@x>4IESbq%asVVn(?b8hfegddT9>$CGm3mf%fUi z%R3mt7a}|yEz!Q;ig=XEe?7uWoS8wFTf#f97^pexC9=#y1Ep{|*>5Rx{%|ev zN~=@`ndlAY;OBBgrwFPUPHk=U-778AGWlLGTH?&(f2EX#M@Ihcw#=m}O>?~>_*@Y6 z2h+O^YZ&3?e#PXPZ*N87C)`1yayO$?kwp-+x5-vCGf=SdOUv3BhmtOXOD^J!(AQ;| zHu^!!TB4%xSEdJOk`}9?pjAL8WCZx8XnzJTcP5rQrzK4A?4`WS1hjw%et)|GYF7Iy z2V&iz+s^8xi!l8pdy{P(19l zeMZ7A2wZ zFKRqpvNcb8BV1dgj}cc1xbiM^&HSjAklLvDfa!I1bQ#-?CVDtN)+KDi{*ud$r>$jBi;>dR7Wo-Hsduz43)lj(8h(x@!6s+dgN##RXJN zonM5Jm;r(&Y29AwZhBWLUwfkLMA;lGCm zsjXY@F!J{{1C(Sq&SevP$fV+H@w$kD!s6T0yA7{4s-!=x13cE&ot1#A@&M$0k1kWh zr$}_Cp*?Qzw1W{jZi1`I3Ns!^JHE+@GgV~sT^WgS$AT@uS7XIa+o(BC`-j+L(aHGQ!~(B@h}wZNOY3W%r}HsNW!5!<*g=w(Re zU5ZhdvY6o#Gx_tnkX(u3!i5cNUe?*@g4(I$SANJS?N6In0n^!Q(q?K{_^KT;Jc?!z z1rc_zBwMV#erIn4%dLAw_~vjg%55*8T80L#nrW3V3b#@SmY7B)ea4Gb(BMRF2e=dY zz&2I|0xzN>{tAmO&){mbATQofML~aXGMhyZ+4h%l-J~B9e^|hM=k%aakI3(XD;~m* zRJBxs7yXi@;;SXx8LXuH0XV>TB@e%T7ON`^WkzgTUC--M0W<9G@_<|e>I7MJ4!6J1 z*aWbxjcNTzG6M9|&3O4Emz~{Ri`xvBgG9h4Aa!o^EMK-Bz&4fJ1gy*Lf}@RrL_ZG` zK&5FR!_J?l@?HRomv=JsE&>KA{qKG<@vi*uv-m`$+X$!#^64ZiI~eKFs|Ad%)7f%P zKaxCGeo69=$0-e@COB!WrFIpcTY%&Y=Nb##8A&mJ=Mv0Fzr=_oJ_kB}IR7NNKE55` z;`F}tB(VT{xd`_KZQ?5t?4y#KiWZlh$z=2rng3Wj@f@#4W>fD5{NAFD1C^Z^B+CII zb22Nhu8b08;Tl@<(X%g zr(FcHZ!joNAP$k;g_Mc!dAT^+0&5fy)Ivew%QtIiWB z7!+U*s9h1@HuNCPS~Y)u+|)~e664jCC)7Aqk{c{{;#KquJ4iEU!qoY8Z}H?U+&TDu zDUvm3iYUMGC=aj(nY5*bU&RF(DMp}nc6?DyJ9F>y2&R6up5@?Bhppa6M@!A)P)}_( zPM9vAPYlgOPHG#`4Tj{+VN#5J~KCU~qtY zAWpimZdb3o$Mq$OH{;T$k4-Hwl(zM&Kz_If_S@+kN*&SM%%}J2mL4gMOB0RX=ei_^ zyegVEok2uyN*cP4Rbw$bpXa|bg&S1oPi004(uZZiOujqxrDXw5coKH&x`nT~Yv=M^ z+rUn^GRw@mq)+k(ACy6x}o>lH5|F2~Xz;Tqu6BBxDjhQ*o%K7*gnPsi+ zQBd59u|}dIW|0v&KsYxXf~|bl@W`41jpj(`Jx`;V4==v;lEjjd)&#BIYxyNTH)e2? zSy_R6c`Z=h&bc#y23pD=KnbXvl2BkH z>ppXg5h{NZdgdK5-gpG;_u(W_8k1L!&frlU;Ss7B*uX=WAM(w+B)bqdsWvuQS&3!H zCSbaD>y4w=L%VJlze!PdFV2+*HZ#v*>Mzubim~Ks;_H_h3@ZzWD_s`Zh#Cx+m$OwT zFid@imN=|)m0)j00DIFF%#;2ua3%n6cWf0Q(|LOrPEa!MCyHR`Ua1FOSZECizy)sL z^JGqt!4n*U2-gR8*q0;DSIk@nZ&=Uz05;McS0Y_2X%^o7sw-z#`LcEI=y#|G(;oXK zErbiUTjUG9x_Dd)5dgfD`{+$1s^fg~jJgXy?tVa%X1J(yn@s>7KdvbYu4IS%ovkns+3)J2GgH90i_9`ggMc~?^y^>b@@{r z&)kGlZ_7IQ2uL#oL>LBq1x*#r{r`gm%cp$c7&5Kt?(Z_)Rp#-Ikt6$$Yy^*6;Sh`g zFu!04#K9|OvmMdZ)b&yY2>srjCGw^1eW#1*1;7*-kq+>o>-Td_q0L&-h_TaFz!pI* zD#Q?8Kp00H?-ju0fA$+u7~Yo03{jrTlF?lV5cTwdN-tpSz-VGwr zS-#F+s}UgyJ{ftyHp7+?acX(XKfpz3oFRF%2BJO~uMG16c;Z@GmUX(5eTUr6k$|X_zY6R%xsrkBH_vpt#TJkivK9eQH99cl>tvD0s4PY?y2NojN<6^tfZoeHR_NY}cXu&$TmWbX7z?w*x=CbRKT zcCw7?Hvg-zF^q4vV``(yY+oJ<=ivU*IE0}T%&h`rQ6)!8h=s9&LOkfgo0)odZ19v$ z{KYSOwg0+ThF&4@q@H=_7jo^v9i0Y11kn|0QWy3X$bC@FcAHRdB60XfObS$c+7P#Y zbTw}^=*|-Zqh(hfX|wRAfcO zkxN=uU@gjKNQ=FN{}~fVue3qBw7+f656kp6yw$hAbw(cY0ZJH{fn$iiGf6wcl|E{7 zg?`R~ZCOe-vonTmi8&yc-5ZI@LloCH)TSlM%2DBR&F|RMjS@=zGUKEBXbnkjv?`Oa zOWH(l^H`+6{<4Wb8GzV^02Vy6vCAg+)~KQINC$zN96tNml24Mr)raM#{O%4)H{pWG zx=~zGfpDNqp-U#;LndV)Yl`41qj$5$Ta8%c;{&2MML78vme24=}Og+3qIyX*<{>glIx|y{|2_VG=pT-DJWNDJjseWvaww|pHc=3Pzgb6pI+7*FTSb7>Hb-oazyR5wjYa56@Z*RY43ghDf6r=1atgS$}Xz>u9H$dlrFJ% z^wDi9R~q-K(eRAv31eXFNJ&?4B$F)s_t)tt=7(dcpcn-1{|@q1oO@k8omhq~Z{5-?iyN$woBu^_T7dib{eLwT*7Xn>R^Hcr6<2 zf!i2otR2aE@mZRrM?0a6@8)CphUW7^8$73wm7Icf+`0X~*q%=&Q;> zoVyQsI4S3|??LQh3iHXQd4la%E?uU>3G(Wp8Y<1JVhTGR+;@GR+Zozl3x7&odF}9~ za6$TtC1Z!HOnXt5AMW0EBDeRg-)o)Pu?^}hO>ZQ>2iaomTEY2$e>6R^7JC(I{uNp2 zszp6HWl^@yACJ*s?LpBCdsjQq+q>~^gaJdhC(^D2wGYPjnS2$1{e}zek9qV-%tI?a zKEPlwxQvVp-p>cWRh3dW0y)hFq)v{dK3I+jd9Y4!!*t>sMJ3X5SD0pBO0D!ntL||FNxs=g?ogTteX<>I zi}ByLaA89j?=NxLqy%ek`S4+RG%<8ndWmTgO9IPraXP|&*3a%2o7u}iC0sdI^jwLd z9%U8zZAMYi1kWa$%lyjxr;Pr~ocr%hdt))q8h&yH*wTI}WPB^G?{ooqL2OFud^W~M z()N&hR_^^s-kJIGxxX)`KbB9u&y+MYI<+BnHY{yTr^=+ehy_hF_aQ>g6l0|`-_p7{ zCNj4N;KhPisTYaC_+Sell%1$T(gi9;Zk=R^5oYoFupWMc#Ha%s=Fesl=@v$f$v-b)`$= zGDM7-rZbP{MP1@u1Sp+d*G%X~s#&|QfQUL;EsGN@Zx{@*n9j~>u**z5*02r0HBzM` zxnvEL*H*Wva>`*g=;OHQXDb3(FRsnRcB*!Q2+34NeblWp+P4F!FCIOQ^r+3CE}wh& zK?vit>h9*Q;^CUf@FeG3&fVRPMUUZ0^P_^ ztkb&(`RAE3I}qPZOFLJvrS`~q!ZtS_S6Nv(tlDhwvP+gW zO3|EOks9;X^ENcizGZh%DV0lLsaUGCH(*{Tb!{*C$C+oanEtd$=W91LS|^hg=$65@ zqIpwoD2Z6b2UtG&uj85>pM8`^gzMk;?>l++Jb-{MDXCKVDdhGv=t(usnv+g_Q=mfv z-D_A`KHw9U^(tx}qs-}Adl`_L|MZr2LI!ep|i@|4c2CTK3 z=-1AYDl0!^hVlIOmQ-&g<#*?8uY2rGs)-kZ!K>qsHC1nL`ypXW}*3r(96H?dC*3e=WPQU9%3 zN+1r_Y~vKws>fnql{M~gfenAp{ua4iw9bFXU%z16%3w2TIUyc)p=!#7rdNCr^G6Vq zukGNQBmUQ)hR2Y9-Xo+VcV+p)G>5Ge1^R`EnY$0fAQ{Fb=E6=N|K}Jtw-g8C#px)| zuN-skNhu(*ZtwiCqEGW$7{yRzZ`2=> zKj7C41+xk9!FlPCp+Oj4IVV>*xU5!n&_to^Kqf7GX)BK4j^B45K_^nNuE5~z6R1xp zV59t>2hj<1CltU)g`)Soui?LEXRbvFCN)hxzRL6@UuY`uA0G06O*-qtJCy+!*!UEt zp$Tbc@9%ED@F2khqIC6v0SjjUg0zta!U8AVw2_n=P1ni z<*N!a)(R)>cn718`f2*@bLsm5LjNp%9R9-JwNG>A0y@DK-+p)~q3Q4HqdpLyv;2wZ zl8kt6JNB$E{#`Y@gunchP%+oj*wxjCkD%Q@*34^U$crC--M3$LAcoaW4lXrz+JY_~ zybU&^nIW>5pPAg!``;WjY518t6lo0V{`Y47chP^F^$a$tP?AiSIROK``P>>r=EjjI zahH5>sA-)!@W!4o-I>c)PVR`dHq0!%UwK$88y6|o_*eoj&P3bF!m#=tYR zO7Z;+l=^^_EKM1Km43+%>l4NfF^BcpP!vc7`cz0gl;`kK|8~`<`x#1`Vx8zvWr33` zf#Q}BESe@kKm*L&4Wrn`^Tvd%Q@W0Se_&xlxRkf`&O?pNY(mQYzCp z^#N-LOkrpF^xrkagvi1+;oqhG|1=Xo-Kjvz;yu1d$LOu1s2zx;t$IXo+Gx(U9OC`9optl>11G*!<|p?&)=eV z5k-@{s7tari1yh|=T`EI*69J47Y8DH z|5`SD-@nS~wQQ+A>1i?98*x5Mxc$6n2J59x!i6W3&B;gU+q`s^zbB?AJica#_}iUf z^VNPr8UUCEx`arA)KFjk!?|haHm^e$vD$2CwxuZl*1D22_{h2wMcz*ceuk?n(su&L z8Q4dT$jYkvnFq0%#BBB7hCZ$Npv+!ZZlh-31~+WCxBt1Gh9QL!!hkeo=--oI*Ftt| z5Q@QaHWym6tGn|>^8#;gG5fJDp*uLkeIV=93yC|=T0XWtd zp(1`^O6j-#T(#+q&3DgaPQ@*Fvmd#k$(2zOjm(7;k4uboSvleQw?+4WQDHxf3km&G z2s`u}j-7_cL7(o1-Sr#nFve;-4nMB4ui1r=9z2Y&?mbBEwAl=Z$09!?SnB-r6!$Z$ zd%1HtceOJi-dRH+^`D;!@sg?li5U+M1uj-*^X0lVhR8Y_D!HJ$h$8V9gdk+_tRv6$XWdv!F6AQM)=X73fw-500Jc(+TW%U z-2UWfa?IxFIP26Gc*$On^AM2`?p(u@5U;^BJT$GQGBD%!&R(zUQ^1daa!KlFta@vz zW!m6^`)5PSH#Bi+r;;x_i=AH@XF>QmX1xO>G^UZ;5%Z!YOVcjdX%nRd7&UYg;!l#x zv)wt~ru=D?q*n1f_dW6Qhu%4C9kz=#A0^wp{d4Qx!F$(g%+_BQUkUA~!M-%mI(pm~ zDl~8!>0%U1poZP%hNk)NVV1MGqgnZH_REm1MYWNn?O@N0yXV?B4N-cZkOIa(zlJ|F zuJZ@}F@*v1hdw-{kejZlB5|?x2N(u@RPb2NcEB~^xwD9PJGNd_WFqyyS|pMQ5;YMnto5!y4Ut z+=FnzZ~VY6xJwQ^7aF}{|5yM#08YL!#Qf$pLt;GQZlj*Fb7zndZCD73o5+cPi~Vck zdx_hnsVbf^r&~D zS&;Fe(K{_?BmL6sMxj0ajkk9shsMr;C?p@2hnTYs4}F5&y%{SseYrAwd;Bw2i=+%Z zDD-7GjoN5nY`5lMXw8_!`3h&>M@wozxlp*NhF;XIr5@9Hi9-A^$SHIT8e45vEuSQ89IW}=4j8MW-lpfFdC=`~l!jcgGcI)=aF<=N6TJlrxu-A7 z3Xriv%)_0Xv#f`PvZ2(M=T+F*^xY{n=cL?Dm6O|hKRb~a%|o?EQ*rvI)6|6j--TFn z9E;WXl`Q!nf{GYb2~C|0Y0y5Z{ld(;jUC;kH5u{ak{z+=VFV0HeqdxkRS^)lzWfLX ziNJR%I2{iX2ks%O*RmdG1reSk{A5j?wj#-D6%4OIA9EK`-Zy~m8m6)gf{QwN&sHk= z8f*_CAU5MWNiDY+o8>vV8+A_@U1|f<0Eq&0Q^TkP>O{VAU}5Stq7y92AmIfRo80=w zsg>GWo&5u`m4^l(thz&qtcgdXZ5m4obYW^YQm5>Ph)ed6h76lD(?)+rZb-g!&18d% z9l*O;|2-zyh7rrc^as;3CVwU#`s9K^eC9tx6PE~Et^O6fXZ172EQrnJlXvG=6oj{= zsAtz0EA~}RicSgC!?*x{0IbC2zlW*<8Z8uz`Q;y=#s@CON?12o<_5s7SrpK#%< z)NO9&?vARDMZrUaF+r|L-mhnm1?dU#z;rd_q_f}x59FL}r>UrN#0Q~=8;I{Bd$s@1 zOJAgiIXK1a?h`k3Q&To-WWe;xSBigB^V6hnM@baFQBOT5*TjK*1Fk_T%%_4H2Xe0w z*we`^Jb9VQLzP>!@RrL;SW2}r5a{sRcs^*=j@tvv13S;@+vb0)pI9cq2DWeoLhV*# z{$tWK4Of576d1QA`uELO=HJ;Iw_}Tg{}E)h2go8_QAAy{&);8HOOmQe?`Gt^Su-ey zSU1l4zHeE-^vKgZax%nmBBMr(a(PW+9r$PnGESEdjy%_M6u=tsDzE1;RN@dHtv zX{$O_S3Ya=!yQ$$o}Mt=IJcSaY_;6e*E7*#4Ke1v_2&4TocqYa2Yz8OuDXPX#JuSZ zG7JGsFCq6T1dpP^Br(z+kC&`2RKM5xIixqT9qe&jAGg+pp|w)7P*yGjtAhwEV+-Dc zh2?KOiX_gw9D=TXWNs|9>eC&v`Ob`D(oFFkoltg5afh4whCy&E%9#`O=LrL7a(h!9 zvj$p}O{|An#js;RHG6M{^V?F5Am)I^82@h!xj53NGoo_;Tq4+6JvXT~8x=f&5ANG~ zFDfW?(kHR?v3{|%uic-$E-2j&)RBCIV@{s>!R+}S=(L|rvNB;)5Y*5-;KAvekQ?>k z!}tN+!sgHg>DdbV+UBoFx`l?21MXYzbbRB2Uvoa2d7JK@sv-R?naK_ zd~rxvnsRw+Cp6iFGGkGag?W>mL$T0&G}HQy^;{J4$?SzfA}%CaTi`uq?&#boNb$l? zWBg9Rtt6>h?E4jiuOI%m$67s31%Uy~cH`NsJm5;2&{QWL=a<|8h~6!_0D;9B6W(Q8 z|4ufysig1}UB09|6(61mWS(;(gJcIdS8FOfP`U#TsqFup#jdU%h|=sN^T!?~4@xor zKI|rA&+E&)<{K}zV5hN?EBriHZ@llfTq25U)(MsdEv;^f8;TbW$mbMWZOBR+k7+$5lCzcw@j^AM?r8jNjpu;Z0jI1Q<` zTPoH^D6+}S`PDNQXE!!=&jTP^yLgvBn*ns2O>nJcgi=RSp*;_3#~#l2U1HmWdejcl zPV(z}U}L$YY5bAkv`g4?(%#dlm~Ao#GhK)j8$cOo+e@7eaL@gQQ`bv0TwWO8g`A6h z|BU$%sjYG|PZ--1MKvb7B0!6Fqdr^xhv2KLZb0k1ne76xX$f);QEQc+D3e*axUupM zwvUO@lVGkgf#7hB2KZRJ?X@*%yVyg08o=>DmaXjouknN{>HMABRQ`MIqvKa+ zgYBh;&bvRY#+;jU#%nj{?wtls5HC?++b*7pthuO%r)xxO6~0~###kvNgpDyy@lE7I zVBdoA({RqZS+UqpY)zW1#ILk`x2r}wn=Cv@-F*U+6Tx#9>lk8_>+XS2DN03u>nM_d zAR{ckHS2-2;&*Hgri z2Wu6QU%r|+GX9YS9+0freelpKZ6rl8kMjxKq6)3IO?r^_o2+`^Fz>*S;{~ zm~D{Y6V9{)&ys4j4@63iY~6!;c%K$?QM_9y0_8s|pv7)r(>o-%0M@PsE6QDS;j|cu zmX}X&|NR@k7KWQ=9JL0%{|0xSpC^9iAWM-d^>BZIV`1CB>+I1J*~-}hi;iRV=z!Wv z0#N|HINNFJ$tT-X+-Q>a?%NJuTljUym_)QO!`Rn&KG8b8-!;=2bT@A*K0ndhJ<+Po z#q@#;lf1dhY_yUSTxyz=JnM^M2w%?(lNHPPi68xpWc(UWh)g@I00-NyxZKC5iD`R&tZZTwwuxV2`{v>c zcgOMI*n-bK9M}>3I#P0s><&K?2TnCe*V@f3nCb-?%9pKKxcVa>#^F%dt5IPQ{vE5P zK5!1rCpIodgC4!>Z$kN4|F|Kn7KiXT*j4f6MQfWkwE+Ifg3#t8pB$)`V>7@>X>y#x z1&YYh!=0GMOX{2y@NxROGVD;&0*Xd;_K#gBB^RnuYYHIF`((Dufm1{^joI#Z9IgbbW)QQ)S-Me=Pn<-f!Ip82~Rl#wq`Z;!OKOlEiv zJmnOrnm8^P@W^3K4ew#TPbr#p1GF`~n2TmI;9axCyRogU zS%i90BpKWR_E14{pt?&jc2hQLm1|+SJ>ZGwyB0gsdl)K+YG}|54AT^Z-a|Z z77G*i>wZQ85npLf#V`NFP=ox=%K#qMZ~WY69FfJB%e8a4M4sNWY8iOL-8ao2;zZ|g zNj#^jXCQu59bO<%Ods$QGyd^&=(w?fIlg&*9|10)=?^r=^~mL`RDx^0DWe@FdNo{d z6P=k~0Ca{A5(eL=FV3V2RDQB_0?_<9-n09=KO9~Ne_g07+@$dKxS z?^uJH{>4SZOZg|#z{SyMk0***Jo2*4ufojlV{}o<##wf)d43eS*tsd&M@yaGu(|-= z=nHn(sSJh>v#Hz>@QTZyYta% zIZPspj0)?l^U>Q_@#P(UB@(?D7r0dDXnlzvM*T8=hyi7#QSM9J(4SQ&Km9znhO!Gr z_QS1OlqWcF^BFT?y)0s}llJL=$t5#@7o2XbLlVav(&W3te>3z7RNzRH^NSkZ4ZgpkMn zec1)4U)NLJzw!pYphl9}(aFSM*x-_zxuHg1{=myCzYM5eeOLu`w>;_ewK`~9(9}mB zTt`G-9EpguHJn5hn~_T{n_qWD z8h8M5h;JYx$)T9UEZ?5I{Sv3I#)ctBoow15Q&Kq_T(02N6uGf3JruZ`1MBLQ;K zfB+~|>p(>y_fe?8TK}cWR^@5!@^wcy<6^j%MH{-$>fa2}vVVfy+ZoI+C~FTwXmAZm z|7L)D@`<@N-6Halu27xEi8CBWA_F=0$~{{k%hQ@d68wN0n|oK)(+41-1jvGu``84e zh&&OiC?KV83@~;L@fWqal#u-^hEE@u4##ry z<>=0k+jN5X&ha-Pf3=-5n#6;aL{V$0AQ#8+et`u9Hs@`^%Q2LbxH-q}ja}XY9L*8% zicd_;Va3OwP^A~`Nh_;w4kHN`-OEgvtB`jP1f3dmx{_Xi7p1vvf!BJU>G=kB`_tp6 zw|)AWco+b7oL$}{`N0i}q6^3i%yWu%=I@C_}u$?GngerSoRFpgIlI4Wal9??BdObzJkjQsT-S6olFRu$jZM#xFjBA1oUcec-?4YGbPkNYaCWZu)^w_3qJ2F>bj zv{S!rU1@gNWl6&YLVx~m7ORlbo&Uj#w@<=c{nN>WmqnZ-9__GUP=FqhceI>Zjv6bz zJi_nH8MCtX9b7IN3?rNRi+RCvJ%@5u>p6lrIlDtEvqLM~6!RB9-iyCQpVNa9;eB^h zj|GRkFI8l1>HsFPPX6mR{r_mXHyu1ZA(7w9XzJTJDU8Y`)S8S!SX?17F6}l0w zFm^3fOc=^Oh>NopKgkka_v4uz@w%aw5%Qx>5<}7nUbohY%PEJ7`c?uY;)0heYh+nZZGv|O^O7x*p^QDLlBqaQHPCDcj-RUitNNDV0|JGcUubWo6a3-W6tXjF`PBmznjkmmxt?WQ5+Rx)$6NmM0%WE;sT2k$XvBd7q){rSft%XH2G-n6kR^b zk33D3&(VE8GLJ-CL?h4=&^LMU40%=aBV$hu-0au{L`#2i5BIqPdAyDV`#fjG$eQ$x zlU2u;hl;^E)zGU!Y>|>dd@y6SJf-t+(eOaDAC_61v}vLW{yJwM&7QJCb64ZYDdfs- zMad zSb$dgPD1usqv{t=p^m(VLS78vYFbIm#)k(>I2IP=muNgr@vj${o8Goykh|_IcqKdP zW035tg>kA=(uXPX_VB+zguXdJPWZT|mb^MTt!Yhg@Eo>0j^VUkjZ6#h&?LwZTGj~X z;VdJn(Rlc$q&(q*XD$ZgtQqvr1vi}{!09{xta;*IdY*=-}5oEuujCgwB+)}dxSH&wF$DIs_7VK zj#M`|zj@Oy#8zf{C3Wn_Sd8eNur;J?sP;qt!$}A|0S+NpfK8R!cKKQ9ygx$G3!Xe4 zW&=au?P}8c$BBG+5d|sjMTaTMIVBEdmh+M;X%Jp4-K}Qi9ixc^lw8Th_ z4}lcjd;nVdR%BR+whjAUaotYaL#RBgQE@!}O6cc61nrWLp(mzCE{kf#PT8QmTMko3 zkeUndCUbm(Z|52veos8|&D>{tm|FW2fg>kd?MJL5@%z4PL)yqhKUVqT#j?`}japZh za)*;g&OTa^B+RqbGP%`ls$nR-^~htZX6!OwpO1keeG zIPU2MKYQT?(`4FuWA}e z%r32E9PvDQ2*QJyPA%O z3!6&sbA5gofTRmjRX$4>Sop+^b4p$DciI!ONe0r`Wqu@a2n!hi2T<J*+BAREe_K@d59PpE)G={I@0Yqm{hdJ9RM-12ofxxC@YcgF=E|}nner;qiGoSpHqaC)fn8kp(bWN3opG`z*sXEi*VT3Mw;j0;n+OE zd^z6_Nu4OkmYBJt=&wrZ!b#3y!?Ge;jWTiPuf^8MV-+|2S$nXY(Wd+OW^sLu+X_^G zNBO(#Uhzv-($;W>-@=Sx|HRw0kYh>k>m`h*_B_gApw@I)JNw`ob3)POb#`xlO-apY zQ5?PuOqf_`1aZYT^q7hV9&T{4vktUr+DMaC%z?e5(u<9%7HZ<5=53v+Z_q{p1hw{n zq*l-Uq*+nkRUY~iLalvCjF5w)(c1c)KpNh8IiC#joj|^CLkA;1ArA0sz;;3vyyJ|L zmtLvB>hrwNEHNBdiorwR*?h zxHuuV$7oRYuK!idAZntWt_W$$9&_6}b<=tk;wH+JXSjHmqBgHEq-waXaqn*A3=N6E z1>x7aUK5k=pY!DC8W=garW~gk+~n{7P7e-;#?*{ERiIUjW(u?GWPM!nx*l@LXaH7lO!kC{Fah4FaRhl-+BbeKpp!C9Tch6gWT zkbL8EtW2fQP7ED6YZ9Jw&#r%6Hm!ljW^qLuW)Tv1D%`w0(SrZAlu)`!d!6YrgQN^~ z3sDcYErCf(|yMa_-N*}#3Wi&AqDoh@i62s%?GtE8qccgG>eL+Cnf-WZx~#osyv!YQhI(Vd`6=IACq5kX?QGSGT8b-^vm zH6|^#r;Q(Gv?R1z;MUXXM7fp4LtIAA{$y|0ryQBSmzp4iSOk)7Aal7FpIT?SDi>m_&cYXsaLFY#i+Eo@ z{iGzIm74pQ_S(!YuF3{>jy-O)TO!K`bAj&#Mwn+TCZtCDcU0va<^;niPCAvtf_CW8 z1ot5L`J{Aakgq3gMm~QoLw`atkp#r^w0P~pm7$hopL792-e%aUFU=Ts2~NhOACV2w z@`~DYOfGHwErU!1InorPuBZ>fP=q_1%?~vTvD;Z1o6aCoTlb0gejt6>UapIlHN;qnZ%n7X%(JlDac^ z;dWOo=B;Di(m@g1udct4EZ;W>t71HqjJhT+&UuA1F9$h`R!MwGQ*?n?1pv%E(h>7n zBoyCEpdHncVN(U)<y)V5HU$i`t?Gq88#I#Sz$xG2!FoAxHZ zadnT=K|NqAx5Xn%reQ7(} z*HSk;N2Pg;n(}_LL0~h;qlrCBfp5!qbf^-0nh^{LZ(LhOJC}i9zpW8&9%;-aP%};R zBMKFRy0Dd8T_qYPG0Z(`CZ%jFc!_m;x7&Qe|JtyMZ3GC{5BfK_Uu*)o)sog7wHGys z7o#Uvw&wTngxtAgzS#bDdrtY}+AfjNrJqZX(hwlW)xfT>Q1@w;*5 zDf%nQt-jED-~VCjt>c<}-}hlcLQr@k(xr5V~8qE)3ZYzCf`+hI1?S0!au-$1$ zIlLt6^V>56(-lD3%h}wvf!-FM^cmCFTFICD45n7Awr5T!VE{2 zM=JwhsKdaU!AHv&N4T+fJFbav=1&^)7UlZp9DN|9<7@wM(hn!ykyidoruQ!122+IBdZnO1r=S1KlrDGfb;ur9IL|UnXTwJpU3!yc4we-| zu=s`5T>LyA{>&6ZNFnymQ#S!9aUJ|UsCZjknMX{f8@sxS?vP7JtRN{lbO`Y$*yip- zq#gOU&gATS&YQQDzofgUi>8{Cs4|H4q^DcuMnE2#&Z}AAn4JT+B}->(gyqk`wmUl0 zI@uFX>al?oe%qHID!q9}n}*6?v6E`&p0I49CIh>$kd1#bU%0N^V_>ISDhJZCQoJ%Z zB~!#&F(W>zyh72Uh*&(oL1)z`qreKtKV$ddG{kOuSDbdMH|rV=A)F4DoH(p9BHZ76 z+2jw*Crb|$8#thhuN79FwA`K5)F?OvvsDsPg}6}X{NqcyoLC9Is&9S&UF&IUqfCICF9}jTdaOaq3S;7`V^{J`2ky7;vFQO70&B?XSQ~R;;#*O|L=?U#Jhu4=UMWhNd7hqTi)=%b5v}Ck0zY@je z+mege>I_n)5H8?%+mXng>MWrUv&dZDi~>c_PSM7rjZgM_lJXlOotp+md3ouyAQBL_ z?yiaOC>uZ3m-mlH0023QmF`=WJXgMKzgXK_`L^xzI+{6ydRdwRske+jZ+G`D*xGal zVIJ_vp08}+(JQ3~A9hv&r2l7eP>m~DzX+c(0*h;io2GQKcC-~Q3lI50cHkxISQ8;8 z(q^`gNF(sQ;`#C`Gw|GEQ+u1MnmD z+B4{WPQ`A4$a}8)zpp7d%%{jEaOp)K{mF9J!XVz4hcNrn;Lzvak|Ou@E$lfQ9qmj0 zp`(=((yP|_C9dk2JzFtaLESHke#(BTxrPKENw}_5pC@Y>tPG&;D|zkigjz1y#Z)|8 z!rJOkQ8brc+4J}A`6OdFQz2Q0?y&KGwXIna-fFunIcqHCe2qyurI#`4f%)he#G#J* z!yg#;esD53e0+sFZ&#%^zq?%cML-Nwt zEYrHj@yF~xpB?K;#0RN+dmip9djW_&y}tCHWN0c^EU>1JZtJhxO9jxJaLx`KeGkDQ zpE}gZqNUeGFqy_7eG!RtqvBapqQB*yO zpubI~Zs*Rt5eo5O?%py1m06pmK4S0XhA25@^j~upbv*p3KxsPOB;dt|C)n+yvcDYE zSSc|CZz1v%_)vV1#yd?Ez}cOjf2y8J%gsoK>c}&irX-y&SOsdK>7qF5s2_CWBb|rVuRSG~#%CgO1;FYB<;U!?SS6jdW7^ zuqO})m6WO%=i&tv)HZ@U_s9$r)DvvrV_w1l1##50dm#LP)>>FFbl4K7+amrkF@A{E zPX8JG&rC{>EF3Iu8o@f$5>fB;q3+xCVm<0PeVS@vMTcTG28gd?@7yA8(dzmkQ7b;O z@Bb%pvfyx$g7e!0Z}J#+vaw1l!R*bBThlgwShssV3ZbfEAFeNbdw~dVD5Nfgh@PHX zIX=5c<`pPb6H*DiNs%ZIYpXT}1tu*T^3(OkGwke5j?C1m8J&0Tl@iWr0JVL5?tuyI zFYjh74kI}*2`ly_X}@gynmawD+wgr-kq!Y?)Lj31Z=Nw6&6=LqEz(97W~T%*foAsm zWhS*-zP?0`Ftz~cjrf9iIUsyF#$DIG>Ti}|#Bn3#jWG0sQ;*M*Sm+2_U_VK<+ zApj%%kE|6QL_fy0aoY&iuz1k^;BeB6?A@G6gr_>IlhQXb5&`EB!PS-=}W?VR%u-FAhj# zSHCk4W|l&=nQx`u25!3~Cz8+0!2p*)@olK;i_&b|j&X0muY%e{;kF!V1AFY-G)B9@i5RQ;6<}Q`wO+( zbboOFA}o@zhtoKv&+GdQs_78vB#xf(z?p{$%4PU+AqoE#WXdKrTmXr{jL8MRfOxo` zOfp_GK_5P5GbyB(Ps0i}NaWfwRG-W==L6-Ny9nS<@qhnY*^>f35 zzmT-XNW4DITSfZ=p>$nw3UigqJ^VUj|inVh4M395sVi3BP;|n){)xSM+^&p|H*8R_2EW$l*^h z*r8TS7a+^Cp3#NonyL2SF8+8ToiE>wb0{ZA?CN!iGro#*PJX|Z#EGD`_;|mvh9mpQ zIDM!<^Wc}D8^N4nVCr+CRt=ox8%Ts*iIKE2Dwk(yf;H#;7Mh4Y1&rq2O8IKpc*6eX?OCt5W*k zkz>;9)0%&!DgIxo8n;>g+=vFZSuYr+C>MO_=c&_v33HwT9{E5NAyTZSnEWn|^dNua zR>8CPM(5!eU86D(*>t`z;lk~B1|T(>1Lk!!Kxl-{t1$7nwS7zDi7zYXbhSk>YS{-` zaCtjX5dwk zuN%ptI9te2PHGsdo4f6VUwhk0?~9>j+LvQHirS(ciNW#ur6&^Or#}ir`;eo$5F>(V zokT7lz-3v9ZbDCZZgg=&vad0NEe_a zzl4t^Igs#*xmlZQe0VIexV7>`>Mj<%Z96X@oeeGgo4Kj~a1?&NeSqW2;U~Vzc5$B; z_ky~9hVxzYn%q&-lgGw+TA>yElfAm5?VQS+@R^pov_;))zq#eV2DSdM29DpNF)5`~ zYJetG5jgxf!Bo?|<&ZPWE0IXD2a|lz7HTLEi6qSqQiVWv85StfC9$k`f02tp;+= z!zDvDK^7HVw*jVd$~dnlbT^5HmInj`g#%Ag+%4}G03;#2|B(9yKY$4EXKvkRL>~E4*4Rd)r6bz`br{Cae~)QiF=|A zXeHY|&Yj8quWyJE59KZQ9hX8}64aOWN3V?=b>D*})aftEhO6^|3?(X>Qlvub`tm%) zh|otcnV;nplKPF%=>042n#@I#x*r4g%pSJ)}y-;ik>062v1^yh4R9jhBJr~tvqW~dLZ`f5M)7=$qu2aHf$=`PsluOzPa z>>=SXou2u>US_=OnbT|d3^wn+Kz5OLB=|wZ+7fc_<7VO6thP`IdaW1&L2@HU+ zub@z`7Tyyqr=X;8Qq*_Ifo$)P)*E&lp(6)US;lpf&rhGv#PWa5vCRej;UltsJBy)+Wh-+>2~GmQ!O|O*vd37NH=)69qHd2W{#m{PRF-b+WRwUr z@5?hHdr>{5suOR6tPmT|YE6hj*aD)caGgQyD<{mOc|z3p+92v4i`i9> z#T26)=>bsJ$~9heuObd_Gv%&}U*3K0II-F)frk>pPieCav(rj^Us3JJTe3Chc>OmT zBz#*J9^UmHyxVc;Jy0~Z=#JxdXSTm_RAw!=joL!Ag2GjD#y{8Tb+|g&a8oyR9Z?#& z&zO()(*ay~QMWQLc$ju6qIUkr=Ue)>l};#y1%LJ01Cin!o-|DLFGz3X9qTgf8u>SX z>RfKNS=)t}9sk;s`OriD59iC)JY_(xDfbLF&z}}G;=Gc zZbQgQI*Gs!U1Un&Cjk6SiF9<(7dNU|hqa&&ZmmNl=dR)0L!A@1jC62I}ZUMGS4X}y<`^zs7w-eFU%-pi28phdfb0CH?p zW*_T?=ec*cQ(U|JO)00>I*Pz|OA=rNk%V;gky-L}8xU#QH;+h!Dj04_m9;o=bw4x7 zc)Y4`IV-dFmdI#q0(-lPHFeonW=~MZ=)Pw|qjf53CMDKhjTO*Yk3*(jpQude83PDB zqs-6ww9-G|kkmjVeiXooEP1QfC+1QIDIISH0YdPf=&z^%s-0!<<_2b46&Kep$ ztk4UiPfI_%p+@7S5PZnp;YhcLaC&GLUNe#gu8LTFVDwuobDOL_SkYo zN7MB=X@q4RE{0F`+}#VLg5#7@E;s!pr%)h}x2xC6v(8^>@*if_ZeH%hakV$k3x41Em{5*XLJ^_NF%lCzT zFZ||~?3f~Jd4I3AHZ)@ZSb(A8naxArRru`CueQKg^9Na{5R>j#Y;7_$QaYBA#6hYF zI6}<4;)>j*9vQ~{%i5~m+%>)OQOJ)wmg@C$IiCZ{+mHw$wJW&QW z`M68$b`M_je}W$c9`c82sp&%F^eKQ2M^*>b7|85Upnuuv2jYo}4GHP1HCaWu+dBdF zF;3e*C!^P5ZbC2*C4kM$^6j^Y0%Tj1g79`&wFobe0I)u&leUV=y2;&jh#?A2(sZ`= zq(wxsD}GHbn8~XMDh!o4g*p~<$NW(iS$;M@MdHOeZIZ}GdWkG)s#N$JMEz_zMfFc_ z|04Aj{%1ZW&cmi@uExt}CE`Tszr6rOwDWzXBh2<$kEXqTwp%8*6KlWav3@`H=FBMD zr$p%VAEVexjc~6R-<%ARL)@g}H`)?%Voz#M_no9iOC6Xt+Q6v&N@m1^v56nCe=Bbr zUHk09ji8_70FA_NbzFZ15K?7E3hMeflY@Lh(gU66CDe@oe%Utpk;Nr`0~I#@ z?5^CH`z-*W5LD{ZMfwDiR*)G9wDZ0;9!c&j-acWr>s_c&5CY{xvd2soUNUhBCgHB) z+v5ej4kwVQts0+fqOUClo3n?H>Qb zOB)$T52Q5%9{=XoclqYHbaF#J8&##^-T`d`xC1^B5ynPU5 zaSZc{ZkjZgc6w^e)=nSp7ZM%wy;bL-QA_=^ShCKOPuxkkUP!lPK%5-JHb(8LelZEU zHI3m$tgQBs0!35p|HvWTciV3LR}SesD*`b8@X%h9PgLP+W4?* zyQ{dx(q~bc7o~5*IIGb@v8&mdr;ILyP$H*QS^NoBFF*3O@;Z z8P3zjNyY2~=?3H|7WkN5l=2-KrD`AYBxR&9-3iHTxFwFSQoIR`L!Ld@s-#6)^CBQ= zDwqdP9Qpn3vaU_SoR=33^&c;kn^DH0-JUtI4~}s$KQYNd9JuJXsdl>{8b^re50R6; zQA!l34$0yZH2SFRH=ji2#dT z^P~QgUwh(mQ4->cw-EwUS6p*-U#84bRW*i3OGYNWvK8xYtto_ZbwApex77&;auFJ@ zxw-eI8zq3W{ub@+Vcb@GvOUwZ&ytNb_1=}Wp$TOwuTbH7 z?Be_Ozou-mx}-G&u^Q4fATdIB}^xq*{x=k9SNluN7G zoX}v&8;w4kLd5d3FJHuS95$+FKdxJ!Um(?eokM4FM{|KXumOH4f*b2{o$NRDx-#gd zX+)S@>T!6)1iEk89Ki%2qNuDz=RQN6Ytuxoste?*8`a342dOD}?NkbHd1G;p0pJIa zX4?y^kWAbgL`8$7=D77k&*&fL#qH+SzzF-GuSY-Y))+1Ols0FBVl8mkq1(mK zA+f4vU z^LscRzRQS?qWSr)DTDfYc%v9l;gw^xtptvwH7sjZh^OzSf7rRz9SxMbgn-2|crVtb zV!NBwBNH<8Pv*PZk^;%RuBTALO4Uvr*Be^+@(u_6oblM;JzY8i#@I1L zTH3K-0zX^L4plKxYO4a`v7$#fC;ydrkOKPbXTDVc2BG2rv~sAcU^QR(~CbtIaq5y)W*ZQ5%8T566K9C%dRtS%5+X z2#6_fNtfK&eo9-=jW@QONHAoBn5*H4v}Uy6cwr7^e=1 zUH(g;hG-nuh&GjQdUHImeo9TUC2rD^9;(8n+|(6^LhgH-o=Zb>UbhUcrL(TIV_DM^ zn(^kgrPVfyw%97*LPp=prU57C*Z-)ZXgS1lpoT2-~g1Ai}Zl(dk5)Za0PM~SZPSk%=j!6Dncd5Yjl}h{;G(}r!=P=#AI zmb&!%qu=LfJ%mNGhQHxP2=QUw3E!r@`_!Ilr-6>Y2Fkppi_-G%7)&m6%Tv&bKbP0t zu3`FkJ_aQ+Vk+a#WrHSdC=tKkDQ*Oyl2Gh9)bJ5^>2Ga~sC3_8A2K&FDDC`B<+47? zWeMDbc!#aV_g>7fIqsgdn@G@HV45O`Gx|{C^+NAV`+Ghw1ov}^mZ0{wK$;--3|JRHiAZ@OUZwK{11zcRSX`$crH?eYD8?@_LhqAMwh&!B~jJXF$8{aR|%*%g1YG z+K8ylM*`{G@PFO8;7|MpZnBs)cP}YTiTl>9VnaTEth`BERS^7^?@dL^ zg0c(f%m~pPwiN5;rg#S2hYPQB_RX20C*6wE1(f^9<^jk&7we{50z;3-Y4qh3T~+zw zyUhE#nYznG3w)=~ah*D&Fo6o2JtdS~(xFQoJd$4X5Bi;rx&*%69V0efa zfS_3$0m!Bi>7GGsSiILlTz6NsaJv8bxWEXJ(YYv)z@^CM@PQM|BX@?jrg*CG2aaoi z;*C`Z6%*Y&pi^YeQAE81rL()m`8kVd{xCh1egLn_Xk);0t)C4t=YqFnsFQHjwLA1t zBy+XD(BJO)IbTb})zkIYnRv~+VX6ci+C0+K0OJUP3>dyWB!0PcrKH6U2a4 z?N5F1F~>$4fOH`U{Gi-`R{Wg~IA}mLc&&|g-pb-DZ^E|+s+$#hR%-rKqkp(_)f7{> z6>m5=YXv0dS%S?s+|rwdCHPqC3&H3=ZMMtw^A6c&VKV&byW=>Hnm{sEiRaU=Cmbic zC{615Ui*(-T{9jE?aQYo!{5dS)Kic>yX&1(R_#2#TkkXp{W`EKTeYEv-y9KZ#O3he zwv8kIndV-&PU}2jJxwyQ;-@~+=%bM1C9)^^slHZ@?D^3$PyA!xY~g#m5cHycD)m%1 zARlD3tw|WWNXHTQ6|mKqdE#6=S(vp5y6Wnj+Ok{f3vJ5P5tSnoel~vx=-=tb(P&Hi z9%N|2v4fH>eV4Co7isn{e=yEo&AYL6n?~Z*+iEd&A%2uO&!7&|%)^toD8O1K#lIre z?kzCt$K+6YcY4xvsCxQ}b*t|ly?4zG(`^pSy;}h;o2)h?{}Jp@PhXF{fe2Zu`!nD0 zPyd<)hu@geyMAYZswDhNFW8V2ff-s|e4DSm2WH)V-@DZYHIs*Dnec&cw} zu-B3O-I|IM-wyXVF3X1W3OQ8VV`gm}~1fRKIMB+=?=9qe<{$-C$l$IVqDJQ+f1TGPEr(K=;IVdev!#hGne zsIiEWtPAWlnQ~5gqn9t-u7u}ri4Xhsnb{_49qcp(J0HV-%FbplZnpC(_8fXII00M%{A zd_g#W&m+@hha*5xxe2CkNc1OpM$ zD>7QPZtno4hh`sFjXQ*NWwXX?c_Bi0dBG26RR-&V$Mj*kjAlLyUh1oNH`FXldXa-e z(1>%b&LSOTcVDa;qU`M8NWxZOckA2s7!o7dqnp2hKDi{v zdtv|bB6e*^*^`&u?BR?Qwm45hnDF>aImi9@gvQC_fDi$Q^VtKR(pT!!x7rPVOnn=p z87BebUr;TS7uAQBf6?hG`R?3yKZJg4;Vodw-Pp!P#p1gaH~cmW9rSP-*Se_k0e6_{ z-sf2$#i?xIkSE`{lb2!l`Ym93f}L*fU#ozt9YJ&3_fbqf+VNfj&X1_fyuu7~*HAC* zWRov}w%jKj%Np}CZRSc1jbi3k3pe>TvfZKC$O3m~rV^a8>M!e`2|BDKZe6Ea8k2Al zhknD89ZJ|#`xUBMvs*AnRuSonXy={ku=_VzaOC`DvTnR&cDQytY9Ed@TvCGl4HhOW zMEQVjexL<+j23b7pMsH&<;wsfbFyFLZJ`|SpA4DZ zH2&8Kc?6q=#18xS1rFZ?0nTv!GkuCot%ce>$mv&eFJSTgvRWYAZcMWp&S}FEEr9Ev zbj2-<)sI=Q^(ifX zx9o4`>6CR!vrfih;{?CjB`tx9Y%$H16YcMHd^N7*5yovbZ4Vq}>@EP_v1_WGaMeVb z^xjQm=M(pJ8PMne+sm1&IekdgnT9U-%heccSi9MQNt*m;lDa@Gy!WnK?NZI!#Urz} z!Zyb?6$*pK?rx^L7yCee`-*E#XY$jebzF0RBfJ$oeM@3#@wq)=8MapexNfzJY@1Gk zRv1ScsLlKzxKSeC^+8i<%;+pm`M{@xSn_ETY`qNKAF6AEL%j0(_7XDGVk3$kV9al1 zhCZ$E55oH%^WHDuzL}l=1vf5z@#F2o0n8Px2|8L_@{Ja3KfW6B~ z%MB-QY$UTXsZtnV{{R5of_8o4j^OODd&^Nn$l4DCV8zI~efIyGT z!ghUyx&wnXpBm+NtLPg%%>%pQ3t9Dk18n4`jJsYopE|COJGVJeCtPq z2+g+BKhW{nyQ}H`2TJF6lxkbHeK;}{V=wOwR#4QI9X7=SZ6hku7$I0W)7j}J)qF=- zt4wznF&BPeZq(xwRSVa*FAp zmQYj^<7xJkbHLRTWo2}D#%{Dw113(sXg$cg^H@T;`*to@dL*jm79`88@|;YGDEir~ zG0E?+X^RpL4h{{wfTf8lJ9BQ<>mjGR@8kK=bqDF4wQ7z~ak?$Lv3%r__mUCoY8 zY*>ty-&VcF_QiqqtcBaV6Jl5WR0%V&E7-7?6^Z z@|#q!zHRlm{P&eyK;e1i9D!%9Zh$|AT>j!CSEdvS6bYataPA!%HmoWNIsWIFT$6Oh8{6XAtbZ1ys(`()89kG&Hzkj z>&52A7zLbWzG@phtENHJ2p0fk_F$jjIoz8(;X*$_V%~0(ODu_dX@%Xl*M4fQU|g^R z@rz%*sqrq(bt289LAQWkt5FbA>fl;3kC{`!{r`KTA22LGn$Prn7hZe-1;Tf{wAU9> zv9BngTV}4S&>~9t0T5?M*qm}qvgFf)h1l5GBwVJY{I4G=+kJm~H-hm`4c+|htXx#i z&LhQ)rMRMYT5b2m1t`#Kod+)7`M`#fmQOMy=Tej3u3w^+@!nj$bhpy!F4ixpM&Qey z9d2~hzh06)6p30B)N3kWKwWCk56K~?#GxTuXCui+GVvQ@C%M1umL#@EH4utfb`DwH{$p9NoaNfPHn(jT|66gC$8ckk+N(1(rSm2@m)wQUaBhOA4>4;ifPbzR}fdDs0xwdCQ+Sv4Yn&4%PM z_FTJSXI~05ZJY-OU7z>*I&IQ{6Qe`FLf!BmD-3ex=(spM5zJM8P_6EkSDh38ZMs-x z?aA3MgEDhoao0e5o){aY$1vi9L`6hSjdhI*2mPj)e&}mFiD3yst4CJ;PMay9s_Q_h zRo~jWW1FpWlk)(%!QZ~+J=fQ!j^%U48z*(6K^#J(ab0oXgj5gZ+2lB^5ZY9CKfz>A zA?_OD$XvhIeewJ1lo1C9$DkzM&u~xc2)?ZxM;=&U7PR)^!p#9LhK?OZl($MuG(J4C zWV?Tm{0EsO7|RJ0L$}H#AGHh&k1;i~%4;E5xW(tp5wRn2rhXg~EXaLwM>NZk!_}7{ z_Uq%!tX{)QazCl*`zIFF-|)=JF&SRv!9EW;?Be3%Hb*htaj1e(uz||9dLKT|>0Dia zTFYJ>tvRTZ_YtJw@bs{FpHk|`6QKdo%$UG@o=Hf zu_a?iX1!BnZ#VeG>&7ry2{Q*8fr6{Cf-@V}TKI^-)2{7H(l`;;Ps`{)+Tu^cT)_NNU7JXG@2R6pwu`b$G#`|E8k`{nElSyF5WA$ zFf#kJI?n2hXJ+k_~QXVJ5x94E$S0~82q{y@w zQsBA4-nzf6wzjWQ_I%^I5b1KsM>*#kzt6T%MTsZ@@i{}s*>p@Z&*}apJSJ1>(^b)2 ziMgr}d43j=@U(Rg55FV^K- zH;_%tlb-xH6ZMRE!(3Kz?b%Lq90WhNIE&aWe|~PaKXa)HQ&njx92+pz*`rjJn=EfQ zYyX59UOTfsnjJXSDuR8P>q%1WOL7GzmT%GE20tl|k2BdA9L*4Op4?NPWT3&KdekFb z6Su(0nbzwlr6b+3rDwDMedlMB{iR4|`sVi6nUVSw4KwfKlWm7-HBPQ3emj9UAOOIu|$J9t&7LyylCYh1so@2Zjb~(E7M%d1^l@inghi)a*@be33G|T6*r1 zK^>je@w2Jpr%a-{hTt=eN|HTyk-az@1S0Yif!sRg}xviNO}?Ivl<+pP{)iI8r~shHZphc#FFf08BLkP z9u5`_cUBqnd&&mi_2YG`e9R|!A6qkqVQu+6@B$R~eEYO$@8_f>N%B-Z<;BfyL=8BM zE#t;r-a>h;$j-oVbdxMp77h$#35^C`-3$qV?g3u4{BQ65&!;{#+<#tw3AlhRJH-(l z1(~gc9*;73JaqliJZ<0y11?`Hi${Is#H#i6aZI3Z{5X&k&8FOv+IZ}$++v_|H5bWY zevXmp*>{}fw|HZ$xi}pP7)Lk0Vj3I$-1O;Lhj762q0hBk_KjtE+u5nq zc7{tU%b1xz-jjYe%a@8k?w#5TqX$VEd4d{FU34j0N@fk}yeQ!=-{I z48|JRNf$&C!b{wxQB^}@bfkVw5Cj4~bYUZqeKmg*0Ve!;T`_KHEGHR$0jowX>S%_u z%jwiO({nTs108uzCx%fH%0f+OEBW}FuoIhz`JD5vzCbV8aK+9Y4lSqD zxIFl!g4mX$Panl-RMtZ4#i9#KUJpU{kWH_vGBDOYOSb;#p6$*)?>NLvblMg>R};g{ z_IV0MTE6*L>RRv)BaTuMOO_W3D zDQ9w{#~jgl9I#x@*i{{7Aw$gjOD>WS4hO$CEIz-*Hx6vfw8WU+SQv92ied@u4VP?1 z_FP)7-lAm^l{EUt=7d4$N9dl@GX_o}V`>n{Jm@=yy@!=+b;C9Juk#s&YR;JnTDMce zmG}PIdd!NKcmv1f^suUnvJems(scIm#bMAm#2SYe77AZQfIne2cut?GxBOOZ`CSfU zZ4Rg!27mQu^ zVLBoMl?E=~>T(4J3bIN(0b2(4^_)@ag_{qkEh^2J`pF(l@CIWdD3@nuWF?Fq%g}oqpKDb^WgL9!C!mV5~Jf4LoSa zD#IOr4|O;zTAin%_5cxw`SJcHDZD)T@WJjl;^g9)0LXNGHYh2sswS%nl*-kgfnGY- zWX8KmH8^~LznQ+eR&IL#B!Cm$wOul{+47OWN7YQ%uR#udw`Qfu5BMK*cHm*9+#-a& z%h4bwZWteDeVmUsKd~vhb*#q&;}zFDLKN!k>8-66#RXIy?QK;e3SF))!CtEw`K^1= zL^lr#7RbvciWqN&J%BqSy#T7d2mFeu;)nJ_BL~B})U0t!azlkRKftu3NPj4bs z$l~)8KC2gp zP)71`jB$YA!j-SfIStuCUX5li+&R$`!|6pFcK+y;M)MQZqXG`lP*Z$W{z|V4dSW%R zC*{Tk$}A-RKCsP%=MQd)w#sFl|M%DMk~Q8N)Dy6;h-~^b$G3NQ6d8Cq3;!(yGLG9g z1CHTqInRG-(T8R?95&NI9PAB#%pO?DrcF*S61P(o3Q9~Z)ZJH8=^w!WBTz**n4u?T z;_N&`R*`>JCoX-c|L$GeGvJA3uUBQdU2OUBm`}z74^wFbG1f&5NW){&5F&!s**4u^ z@wp7lWIRe5y=#Vkp9)D}ui=ytM{Bs-bKOi*WzQ+D@c3G`?t0&;3|27KBU*H>^exU~ zZ50AoO`KhiM*s55{^pP1b5nWUOlarTUnB;P!;GR1QNvk{tiFfIGpbXtj%Rt%)%I3JGnw6(2F-eya8~Ns{svLPDC@3S5kAGhWLXMRVP_(~s4tb^kq3btfC(qear znQ`BDf%MKwnlryjT2 zO10DeDd{bh`q78*Ro(pnmCQaf?H!1ErYgE)7_94f#se~pn;E`b^AG<{y0$7K4w~Co z4p$WyDp=_-6B63oUQxsvWtJzo?{-JRwlDHGXMxn=@;mT{_p7N63P!@T?k43xLO5AgUX67n7$C+aMJfKgh8Jn`kzU&-h?4ZeV zW#za^`HMdqaWl>KG%@VUKUE2Sgyy_BFM@IUZ=|co>Fhxq1UZ#w7(RHG-!k6!EGx=S zN=+?1Zfejwo>VSt7~fcKxIFAH%)+vxRh2rM=?2EGcOAKonSVfH7ZBGwl=gWmEXmcg zUt}Vlsb>wZR3E0g41MB=akgLUM}@ODzMpgBIFvBTa`c2M_!+ zt7qq#zAl}~_hLS$gWoxROrPe5@d%MG(z6RmJ_jzy2(2eXqx(J~-1i1CN~u6Abjv3%_|$OIN4&&=k6mWrK%*IFZ%949+bsXxTm_X_|BgMkj! zKMQ0QyXg8Y9kZ`~NgiqwFi=%0xxO!fK)AbS!j~})XjK?Uvvtqi3z%|xp*g5Q8n~IG ze+XNP`TT|%M>$Tjr3##dIpsgS{auOiJ{HE)d5%RrfQg z8=4$4oF%@#m#In2DS5r`zPG)%YCNhg;cvH{8yI_L z3-tN@Y0*7BS$4*fpOW(aUmuVEMF0CS;_t`%Ktv0^Z3|0vqM`w(@xKsn@FwaR`45#s;vK z=7eezoCwGmc87j!teUixlcu+7nn#i^=m(=qgg7?QQpZeVifF%6GT`{t(2+r)UH%+f z4;$Ai7Z;6d)^E)61!j41YhT6P9q#VFdj#VEf#g9AzUS(`isZph9H(!44-4bx393Eo zV{x%ceNDqMG?`vK``9UOGOc?0^U;{sm;nHCL9n{?B_9ZXNn?{|efc-6K^cZDpJ&$MQo;1skVI0J+kv(Q-C6BZJ|M1?|XEJq{Oup^tlg}M@uu~>B_;E~x_l~Ua&)o`G3qB!;Sz^Ga z?LpUfJ|LV`B#>>qZ{7+Jn(9050p43VC8Ndoz9O2#4`n1zTa~f+xMaB>Km`0DRNO3ecuPi=Zwv-sZ6 zzAMolkn^5#a`jq|!P@?N*QHY`$9J!^#nxlGVeS?Np4osYovYoAzYDtlB)6U;@MmW1b{zHvREjo}8v57ka!_f^L;_lBLGAvqo|Q?tMJv zT~yPuNlSNpiDV_>G{(?oO4cPdL=&CYpsygd>FVbe=K@QNRa-DA7lyRV{d5+(>h*p5 zvHjPR5^5XeYqkAN{8Q?1jk?l}0pm%`&Zo#oW7|yT+KU6g3Zi~vShLrZ+N&cY?X!pq zSs=ZA?w=|*mq%ydrlW<>&gH>xnml>fUum9~WYSvA}u*v1~C*dycB z2Jg|M6)1ezZ$rwK1}y~gs(0QCXuNwWRopC*;lCzv+E8x;4H9g++o&WcI97?gPHJ|c z0elXJ>}!EfLe0dNNZS{Q=kXi7eg1a_DrbxLts&=AJ2G#-TQcnZV_-A0s(VV@haNC= zzeIEX?3e)23_J(6k*onpuKugW*EmCvxfQ*hrNbb83;jslv2~->N{X>D6FB81?FuTu zVhKJ4`3I%V+Bp@fvlv3r9qKi$eRmpeduj5$^v*1+)m>D!J-7)_q1`W!L%uwEvj1EfNO1GP>JmT9LKJa&a z)Vfx!RJu=_Su0z00Z-;iw7DPy&P{G#Dcgt0*q`xlREv`*rR2G9xlIh8R&Sh+TTj5? zU44~;Q<`uWLHXqep_oMn_pkQnk&tUwwkIxlIBg`(=O0;q5$ydlX~nSjnxPi=*=wgK zfQxnR0!HQevpVN-;>-Yd#9BX>lrWY>uV!?3^6H@i20W#~tmyCbM9$li!GakoRhuCM zx`Sa|;{JoH5K+33`?G@vHJuCkeU$FtA5d|}S-yXYnT20>D)yLjw@>C4Lp5|Nc0p;; z@x1n1b}dV}bF8Z=ojc{f@x??9FpIzc{-3Wle-_~51RJLVg`w4}bL^Zat#Fm7UB8p` z|JUA?e>IUO@pfm&dFv6KHR}ZoGb0m6G$IBBgMg!>PQ-wq%O$r02EsLq1CdK*1s#r6 zq8tH(A_PJpfQBm=gA;{uC4hv>0O3+FAR7px0+X=SoqccLzCHhd?O)RA?&@z_lvo>kI2K&3G-ha_qcv7YktB-EX<65X(ULQbUE8Pw_Wh8aMA_b z4Ea?~AbYQRQmmZ>65P!gl_*N~1(Ma3Y#46|jhkuCsE=#dR;9N*5>MY>Zq9eOE;k(rdhH==LXgTUEbmgv`KK{Uk5t{Kq3{WJY_L1KioLZSB4Oq)9uy}gFW+Q7 zhuRE|pKb`OBS^NaDqedyh~K*u&3&t`wb;BC-gOi6(LVN?3^6l9t8L!Gov&Y`sa=>z zTMi@A4Rn+eu53=|_0)l|SKaZLb!)(m(Kc29xT)qk7$btT+#%HVuy*@(n^ahD1c`VM zF%YCt|9s5lhT%(I6-KHLL!!AR>SL4{)LjEJ&j%MhL`B|e$tG=s5OCBBsR`X^7Z9W2 z28dIS+KOF+cBbXIbnu=ob{oJ{SBiAZ9xlpy-*qOi|BX?CQX_Wp7B^i(Au;DRij7Gh zU=N+#6SFnyKffPeEg#r6e=2z83Q$pyPDP3Fw&LszvVYZGiuNz$5g4jw@H!Pk)t*jF z6-BxsnII;jMIVFgA7=CFQS#7mHQ%ewsw|Ntn;$<^% zxv%+JF8sjJ?uU)`|FeJ6hQAC{jXp@b?T^;f;9FNji(Yr6)lyfvyNa>Cob zHFUDR7ypKnN;t`P2qWVV#PzXmlJ=8CUMiR1@`N~9#IC{w(<55hphHH&jgf~h)|Wz4 z13_M!p$2vV$5`weWJ7!4w9I$^*4W{d-aijS4T_YgiTNt-U=xlYe={23=zl)@;S450 z<>sOrRkK0mCwdIL0y+h5oHfm)QVpRheKO1=|C9V9)wVQ6i9cbgmJ%nuXDHN%!bat0 z%qULLyAEX~`nB&kbeAFv*tW6tUcaDVwC>BH9aG2L13Kd6O?AtV3$J#+Bmi3`B>wR~ z9PiDkM$7tuuQ}zCLYoc5WBiVS2q@0*pbmr};a7;f+clIFd?VD{Pk#FSx{vGlO{-yD z>g@3pT^^$pdbQKsZ*1Oqw)}KM)^l%{(d7t|X@~k5pA@P4wH)Wq^UR_qtHok7mz|M^cR^h)(%kOnr-TNhw8M8gy|I2D#*qh*MC3j)tO!6!cC{9 zR$evVG$U(!QA^j-(0Qi(tgwGy94^-^taCThFQ>Byu8o;jy2fu2Ge7suPyU*o~Q z=3=jC{7!N?FR@Lsglo0^u&Gv2GSXhBWXkhu6qfe|B(91OK&(tNW>*jYrryzEim0}B zu;LSl&}~b;iRI!rZp4#}#9y@z?MhF)T;wRRYE?5j64o^L2+|nlSA#ppzmZ(7JBJ_Y z9vJiyr^I78mxLhthcU$_cal?#s0*y9=;lL7mjS18ewUpz-q!Ih+={8V+GED1$Z|I- z@@L-^yRG6EM}s+5Kp7M~xT|c1U81w;z7bB6hsR59LxcmXTm~r9_;~u_KD%Q)*Yya3 z`v|j%rXaPT_u}vI6?^6d&N5%azCA`SQHXdV8XzL78C-(`VmR39Vx)#9iij(}8*Rb8 zKn^i%(HpGuwJWZ!ohY8e&%y(L+KL8MOk~G{htrLBr?G7No6MMs1PiW|rjqKJhq+&* zJ1s(`3ZUG1zli?DDICW{t!(QOqU+yWLu%)?SWd-s5hdmkKxb$cOg zdr@j^TVI_r`T6w2N^b-inx2Ln3_Yy9=AT6ave@0gI%WUqgRZ=Xdm6g5%swY5mM|i4Fs+Z7*6VuRa)_ zYm(-^V`OT_(_pVu4T*NkvCopf6fr4X2X3MAJZ3Is10@B|ONwU*L{b^eF{m!uQu^RY z`8lyFG&9cJ&I;rn!vcIenabXAio-}|<@sAn+`!n;ssRW$y2rX@v@}0J&%Ep_1lfN= zgazlu;d`Yc1K(UPd)hF@5|F}{p1Fsfkbh=~nkidH*Cgr*m0Qg&@1Y6bl+3Ye?*FI_ ztV;EJ9j-SUY76}7a-_1Zx=YUm2RcgTsl|X9lw_HW1#Fp|;INykavRC>&xZ+_^7)wx zYOG=V8iCi?iDG61IaRSza@5|KTx045T*hIFwZzN4@WC;$s8qTY3=jUx9Q5xQDwd6c zldMN`#{3VDx9%}m9{Ce|&SYT#O4tFPDS*^R-Y#mE7-KCt16ZPpf1T=8(K8si3SR#o d4$qmTWvp*M3skS#(uF=oIb{DW|A5b>zXF$>FjxQp diff --git a/Doc/html/mylibs__defs_8h_source.html b/Doc/html/mylibs__defs_8h_source.html index 5c4e9a8..570cc52 100644 --- a/Doc/html/mylibs__defs_8h_source.html +++ b/Doc/html/mylibs__defs_8h_source.html @@ -239,60 +239,60 @@ $(function(){initNavTree('mylibs__defs_8h_source.html','',''); });

    137
    138
    139/***************************************************************************
    -
    140*******************************UTIL_DEFINES********************************/
    -
    141static int dummy;
    -
    142/**
    -
    143 * @addtogroup UTILS_DEFINES Utils defines
    -
    144 * @ingroup MYLIBS_DEFINES
    -
    145 * @brief Общие вспомогательные макросы
    -
    146 * @{
    -
    147 */
    -
    148
    -
    149/**
    -
    150 * @brief Обнуление структуры.
    -
    151 * @param _struct_ Структура, которую нужно обнулить.
    -
    152 * @details Макрос использует memset для обнуления всей памяти структуры.
    -
    153 * Используется для быстрой и безопасной инициализации переменных структур до нуля.
    -
    154 */
    -
    155#define ClearStruct(_struct_) memset(&(_struct_), 0, sizeof(_struct_))
    -
    156
    -
    157/**
    -
    158 * @brief Деление с округлением вверх
    -
    159 * @param _val_ Делимое.
    -
    160 * @param _div_ Делитель.
    -
    161 * @return Результат деления, округленный вверх.
    -
    162 * @details Если результат деления без остатка: он возвращается как есть
    -
    163 Если с остатком - округляется вверх
    -
    164 */
    -
    165//#define Divide_Up(_val_, _div_) (((_val_)%(_div_))? (_val_)/(_div_)+1 : (_val_)/_div_) /* через тернарный оператор */
    -
    166#define Divide_Up(_val_, _div_) ((_val_ - 1) / _div_) + 1 /* через мат выражение */
    -
    167
    -
    168/**
    -
    169 * @brief Swap between Little Endian and Big Endian
    -
    170 * @param v Исходное 16-битное значение.
    -
    171 * @return Результат с поменяными местами старшим и младшим байтом.
    -
    172 * @details Переключения между двумя типами хранения слова: HI-LO байты и LO-HI байты.
    -
    173 */
    -
    174#define ByteSwap16(v) (((v&0xFF00) >> (8)) | ((v&0x00FF) << (8)))
    -
    175
    -
    176/**
    -
    177 * @brief Абсолютное значение числа
    -
    178 * @param x Число.
    -
    179 * @return Абсолютное значение числа x.
    -
    180 * @details Берет число по модулю. Хз как работает библиотечный abs в stdlib.h, мб это быстрее, но вряд ли конечно.
    -
    181 */
    -
    182#define ABS(x) ( ((x) > 0)? (x) : -(x))
    -
    183
    -
    184/** UTILS_DEFINES
    -
    185 * @}
    -
    186 */
    -
    187
    -
    188
    -
    189
    -
    190/**
    -
    191 * @cond LIBS_INTERNAL
    -
    192 */
    -
    193
    +
    140*******************************UTIL_DEFINES********************************/
    +
    141/**
    +
    142 * @addtogroup UTILS_DEFINES Utils defines
    +
    143 * @ingroup MYLIBS_DEFINES
    +
    144 * @brief Общие вспомогательные макросы
    +
    145 * @{
    +
    146 */
    +
    147
    +
    148/**
    +
    149 * @brief Обнуление структуры.
    +
    150 * @param _struct_ Структура, которую нужно обнулить.
    +
    151 * @details Макрос использует memset для обнуления всей памяти структуры.
    +
    152 * Используется для быстрой и безопасной инициализации переменных структур до нуля.
    +
    153 */
    +
    154#define ClearStruct(_struct_) memset(&(_struct_), 0, sizeof(_struct_))
    +
    155
    +
    156/**
    +
    157 * @brief Деление с округлением вверх
    +
    158 * @param _val_ Делимое.
    +
    159 * @param _div_ Делитель.
    +
    160 * @return Результат деления, округленный вверх.
    +
    161 * @details Если результат деления без остатка: он возвращается как есть
    +
    162 Если с остатком - округляется вверх
    +
    163 */
    +
    164//#define Divide_Up(_val_, _div_) (((_val_)%(_div_))? (_val_)/(_div_)+1 : (_val_)/_div_) /* через тернарный оператор */
    +
    165#define Divide_Up(_val_, _div_) ((_val_ - 1) / _div_) + 1 /* через мат выражение */
    +
    166
    +
    167/**
    +
    168 * @brief Swap between Little Endian and Big Endian
    +
    169 * @param v Исходное 16-битное значение.
    +
    170 * @return Результат с поменяными местами старшим и младшим байтом.
    +
    171 * @details Переключения между двумя типами хранения слова: HI-LO байты и LO-HI байты.
    +
    172 */
    +
    173#define ByteSwap16(v) (((v&0xFF00) >> (8)) | ((v&0x00FF) << (8)))
    +
    174
    +
    175/**
    +
    176 * @brief Абсолютное значение числа
    +
    177 * @param x Число.
    +
    178 * @return Абсолютное значение числа x.
    +
    179 * @details Берет число по модулю. Хз как работает библиотечный abs в stdlib.h, мб это быстрее, но вряд ли конечно.
    +
    180 */
    +
    181#define ABS(x) ( ((x) > 0)? (x) : -(x))
    +
    182
    +
    183/** UTILS_DEFINES
    +
    184 * @}
    +
    185 */
    +
    186
    +
    187
    +
    188
    +
    189/**
    +
    190 * @cond LIBS_INTERNAL
    +
    191 */
    +
    192
    +
    193static int dummy; // переменная которой присваиваются значения, которые некуда присвоить
    194
    195/**
    196 * @brief Аналог HAL макроса для привязки DMA к UART.
    diff --git a/Doc/html/mylibs__include_8h.html b/Doc/html/mylibs__include_8h.html index bf4d850..726ac42 100644 --- a/Doc/html/mylibs__include_8h.html +++ b/Doc/html/mylibs__include_8h.html @@ -108,7 +108,7 @@ $(function(){initNavTree('mylibs__include_8h.html','',''); }); #include "bit_access.h"
    #include "trackers.h"
    #include "trace.h"
    -#include "evolve_optimizer.h"
    +#include "gen_optimizer.h"
    #include "__general_flash.h"
    #include "general_gpio.h"
    Include dependency graph for mylibs_include.h:
    @@ -120,16 +120,16 @@ $(function(){initNavTree('mylibs__include_8h.html','',''); }); - - + + - - + + @@ -141,27 +141,232 @@ $(function(){initNavTree('mylibs__include_8h.html','',''); }); - - - - - - - - - + + + + + + + + +

    Go to the source code of this file.

    + + + + + + + + + + + +

    +Macros

    #define BenchTime_Init()
    #define BenchTime_Start(channel, ticks, tick_period)
    #define BenchTime_End(channel, ticks)
    #define BenchTime_GetMin(channel)
    #define BenchTime_GetMax(channel)
    #define BenchTime_GetAverage(channel)
    #define BenchTime_GetCount(channel)
    #define BenchTime_GetLast(channel)
    #define BenchTime_ResetStats(channel)

    Detailed Description

    Заголочный файл для всех библиотек

    Здесь нужно собрать библиотеки и дефайны, которые должны быть видны во всем проекте, чтобы не подключать 100 инклюдов в каждом ".c" файле

    Definition in file mylibs_include.h.

    -
    +

    Macro Definition Documentation

    + +

    ◆ BenchTime_Init

    + +
    +
    + + + + + + + +
    #define BenchTime_Init( void)
    +
    + +

    Definition at line 104 of file mylibs_include.h.

    + +
    +
    + +

    ◆ BenchTime_Start

    + +
    +
    + + + + + + + + + + + + + + + + +
    #define BenchTime_Start( channel,
    ticks,
    tick_period )
    +
    +Value:
    0
    +
    +

    Definition at line 105 of file mylibs_include.h.

    + +
    +
    + +

    ◆ BenchTime_End

    + +
    +
    + + + + + + + + + + + +
    #define BenchTime_End( channel,
    ticks )
    +
    +Value:
    0
    +
    +

    Definition at line 106 of file mylibs_include.h.

    + +
    +
    + +

    ◆ BenchTime_GetMin

    + +
    +
    + + + + + + + +
    #define BenchTime_GetMin( channel)
    +
    +Value:
    0
    +
    +

    Definition at line 107 of file mylibs_include.h.

    + +
    +
    + +

    ◆ BenchTime_GetMax

    + +
    +
    + + + + + + + +
    #define BenchTime_GetMax( channel)
    +
    +Value:
    0
    +
    +

    Definition at line 108 of file mylibs_include.h.

    + +
    +
    + +

    ◆ BenchTime_GetAverage

    + +
    +
    + + + + + + + +
    #define BenchTime_GetAverage( channel)
    +
    +Value:
    0
    +
    +

    Definition at line 109 of file mylibs_include.h.

    + +
    +
    + +

    ◆ BenchTime_GetCount

    + +
    +
    + + + + + + + +
    #define BenchTime_GetCount( channel)
    +
    +Value:
    0
    +
    +

    Definition at line 110 of file mylibs_include.h.

    + +
    +
    + +

    ◆ BenchTime_GetLast

    + +
    +
    + + + + + + + +
    #define BenchTime_GetLast( channel)
    +
    +Value:
    0
    +
    +

    Definition at line 111 of file mylibs_include.h.

    + +
    +
    + +

    ◆ BenchTime_ResetStats

    + +
    +
    + + + + + + + +
    #define BenchTime_ResetStats( channel)
    +
    + +

    Definition at line 112 of file mylibs_include.h.

    + +
    +
    + diff --git a/Doc/html/navtreedata.js b/Doc/html/navtreedata.js index b8175d6..bde56f6 100644 --- a/Doc/html/navtreedata.js +++ b/Doc/html/navtreedata.js @@ -49,8 +49,9 @@ var NAVTREE = [ "Files", "files.html", [ [ "File List", "files.html", "files_dup" ], [ "File Members", "globals.html", [ - [ "All", "globals.html", null ], + [ "All", "globals.html", "globals_dup" ], [ "Functions", "globals_func.html", null ], + [ "Variables", "globals_vars.html", null ], [ "Enumerations", "globals_enum.html", null ], [ "Enumerator", "globals_eval.html", null ], [ "Macros", "globals_defs.html", null ] @@ -62,7 +63,7 @@ var NAVTREE = var NAVTREEINDEX = [ "____general__flash_8c_source.html", -"struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae" +"group___u_a_r_t___i_n_i_t.html" ]; var SYNCONMSG = 'click to disable panel synchronization'; diff --git a/Doc/html/navtreeindex0.js b/Doc/html/navtreeindex0.js index 8854031..18c9dc7 100644 --- a/Doc/html/navtreeindex0.js +++ b/Doc/html/navtreeindex0.js @@ -3,19 +3,21 @@ var NAVTREEINDEX0 = "____general__flash_8c_source.html":[3,0,1,1,0], "____general__flash_8h_source.html":[3,0,1,0,0], "annotated.html":[2,0], -"bit__access_8h.html":[3,0,0,0,0], -"bit__access_8h_source.html":[3,0,0,0,0], +"bench__time_8h.html":[3,0,0,0,0], +"bench__time_8h_source.html":[3,0,0,0,0], +"bit__access_8h.html":[3,0,0,0,1], +"bit__access_8h_source.html":[3,0,0,0,1], "classes.html":[2,1], "dir_2cad7b5fa94233a09111fd73c6202518.html":[3,0,1,0], "dir_3d5e348fed410a00f9c665596ca3b887.html":[3,0,1,1], "dir_57feeba75fefbd1a9c832b76e3bce520.html":[3,0,1], "dir_8eb68c124db7670c3cb56141b10519ea.html":[3,0,0,0], "dir_d4b2573a0c19afb61452cc3d00967af1.html":[3,0,0], -"evolve__optimizer_8h.html":[3,0,0,0,1], -"evolve__optimizer_8h_source.html":[3,0,0,0,1], "files.html":[3,0], "functions.html":[2,2,0], "functions_vars.html":[2,2,1], +"gen__optimizer_8h.html":[3,0,0,0,2], +"gen__optimizer_8h_source.html":[3,0,0,0,2], "general__gpio_8c.html":[3,0,1,1,1], "general__gpio_8c_source.html":[3,0,1,1,1], "general__gpio_8h.html":[3,0,1,0,1], @@ -36,39 +38,70 @@ var NAVTREEINDEX0 = "general__uart_8h.html":[3,0,1,0,4], "general__uart_8h_source.html":[3,0,1,0,4], "globals.html":[3,1,0], -"globals_defs.html":[3,1,4], -"globals_enum.html":[3,1,2], -"globals_eval.html":[3,1,3], +"globals.html":[3,1,0,0], +"globals_b.html":[3,1,0,1], +"globals_c.html":[3,1,0,2], +"globals_d.html":[3,1,0,3], +"globals_defs.html":[3,1,5], +"globals_e.html":[3,1,0,4], +"globals_enum.html":[3,1,3], +"globals_eval.html":[3,1,4], +"globals_f.html":[3,1,0,5], "globals_func.html":[3,1,1], +"globals_g.html":[3,1,0,6], +"globals_h.html":[3,1,0,7], +"globals_i.html":[3,1,0,8], +"globals_l.html":[3,1,0,9], +"globals_m.html":[3,1,0,10], +"globals_n.html":[3,1,0,11], +"globals_p.html":[3,1,0,12], +"globals_r.html":[3,1,0,13], +"globals_s.html":[3,1,0,14], +"globals_t.html":[3,1,0,15], +"globals_u.html":[3,1,0,16], +"globals_vars.html":[3,1,2], +"group___b_e_n_c_h___t_i_m_e.html":[1,0,1,1], +"group___b_e_n_c_h___t_i_m_e.html#ga07e27d7b169c9fa1abd57281bb4e374e":[1,0,1,1,7], +"group___b_e_n_c_h___t_i_m_e.html#ga24e2450d5ea921074ec5d7a1e4d56ba8":[1,0,1,1,8], +"group___b_e_n_c_h___t_i_m_e.html#ga273d45255fe4403fc25648d60cca7705":[1,0,1,1,6], +"group___b_e_n_c_h___t_i_m_e.html#ga31a6b2b181b92bcb15f46758f5d57f35":[1,0,1,1,11], +"group___b_e_n_c_h___t_i_m_e.html#ga47a69851a2089140eac00cde18a12439":[1,0,1,1,5], +"group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d":[1,0,1,1,12], +"group___b_e_n_c_h___t_i_m_e.html#gabb7a665a9603ea2e4dbc4432e8cb6054":[1,0,1,1,3], +"group___b_e_n_c_h___t_i_m_e.html#gabd1301ca79a30c782970f89fd147df3a":[1,0,1,1,9], +"group___b_e_n_c_h___t_i_m_e.html#gac65338df38129964ce3e9d9cb2fcb349":[1,0,1,1,4], +"group___b_e_n_c_h___t_i_m_e.html#gacf3a738d6423d71b238058a63558a4ed":[1,0,1,1,10], "group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html":[1,0,1,0], "group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga47eb69ce9330a1c73fe8031240f02f0a":[1,0,1,0,7], "group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga57dc3bb3472a66fc92312f89d42d2396":[1,0,1,0,4], "group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga6a122b536ad99ae611c8cf01437af086":[1,0,1,0,5], "group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#gafaa2080168b1b6f7281e8bfabab022d1":[1,0,1,0,6], -"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html":[1,0,1,3], -"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga0b97e172659a59ee4fa56f851643ae85":[1,0,1,3,2], -"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga8a5051b1292d1019fe8dd3fc5521ab25":[1,0,1,3,1], -"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gabeb97579daeb622c6651ed03c4a27479":[1,0,1,3,0], -"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gaed082c07b9fc4d1894330d885b9b5518":[1,0,1,3,3], -"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html":[1,0,1,2], -"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga27b363f333cacdccc15f5174e096b5b3":[1,0,1,2,2], -"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga590973be111afc3f9ba15e6939530254":[1,0,1,2,4], -"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga5d066a5b9781f9437e75d98677489eb9":[1,0,1,2,1], -"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga838b40542faa9aa273d18f921b21fda2":[1,0,1,2,3], -"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gaab0aafd7a4a21ec4f338b19269f65490":[1,0,1,2,5], -"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae110df81afd885a390bbeb152d7b709f":[1,0,1,2,0], -"group___e_v_o_l_v_e___c_o_n_f_i_g.html":[1,0,0,1], -"group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga2cac097081444a7a9b040f4b11550e47":[1,0,0,1,0], -"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#ga2f2b1be34ad4eb1bf3267237200cd6c6":[1,0,1,1,3], -"group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga38607e23d9234524bc7de5869b15b8eb":[1,0,1,1,5], -"group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga4e3ea118b5b9068619c57724a925ba21":[1,0,1,1,6], -"group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga83abbcabaff9111c03ae2475ee72ea3e":[1,0,1,1,1], -"group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga861c1c6a503c21441abcec0d57b848bc":[1,0,1,1,4], -"group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gaa1d5510fe5f0bd989473f3ebe324bde3":[1,0,1,1,2], -"group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gaef44a1f3298514569cc2b396a92101ef":[1,0,1,1,7], +"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html":[1,0,1,4], +"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga0b97e172659a59ee4fa56f851643ae85":[1,0,1,4,2], +"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga8a5051b1292d1019fe8dd3fc5521ab25":[1,0,1,4,1], +"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gabeb97579daeb622c6651ed03c4a27479":[1,0,1,4,0], +"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gaed082c07b9fc4d1894330d885b9b5518":[1,0,1,4,3], +"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html":[1,0,1,3], +"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga27b363f333cacdccc15f5174e096b5b3":[1,0,1,3,2], +"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga590973be111afc3f9ba15e6939530254":[1,0,1,3,4], +"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga5d066a5b9781f9437e75d98677489eb9":[1,0,1,3,1], +"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga838b40542faa9aa273d18f921b21fda2":[1,0,1,3,3], +"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gaab0aafd7a4a21ec4f338b19269f65490":[1,0,1,3,5], +"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae110df81afd885a390bbeb152d7b709f":[1,0,1,3,0], +"group___g_e_n___c_o_n_f_i_g.html":[1,0,0,1], +"group___g_e_n___c_o_n_f_i_g.html#ga201cffde04ebc6540869c74bd1dae869":[1,0,0,1,2], +"group___g_e_n___c_o_n_f_i_g.html#ga67c3c54503b9bbd5d175ac46d37866d9":[1,0,0,1,3], +"group___g_e_n___c_o_n_f_i_g.html#ga74fdf777ceefa5e7d67120fbda4cde52":[1,0,0,1,4], +"group___g_e_n___c_o_n_f_i_g.html#ga8daf4b266a95353d580bd7946f47c0ab":[1,0,0,1,1], +"group___g_e_n___c_o_n_f_i_g.html#gae6d1db3c0b21f67cb0db2673d207b62c":[1,0,0,1,0], +"group___g_e_n___o_p_t_i_m_i_z_e_r.html":[1,0,1,2], +"group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga2db1df46b4082ad9280ef4344fdf4e8a":[1,0,1,2,6], +"group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga38607e23d9234524bc7de5869b15b8eb":[1,0,1,2,5], +"group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga3db7bdf57549722427e1e72dcaa87068":[1,0,1,2,3], +"group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga48dca8f0a0c9b96d02236ef76ac827fd":[1,0,1,2,4], +"group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga83abbcabaff9111c03ae2475ee72ea3e":[1,0,1,2,1], +"group___g_e_n___o_p_t_i_m_i_z_e_r.html#gaa1d5510fe5f0bd989473f3ebe324bde3":[1,0,1,2,2], +"group___g_e_n___o_p_t_i_m_i_z_e_r.html#gaa9a4c4f43f7beb926c85bd4817ebd628":[1,0,1,2,7], "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,4], "group___g_p_i_o___i_n_i_t.html#ga1d42e219765ec526d99e306638ac0023":[1,0,2,0,0,0,1], @@ -79,9 +112,9 @@ var NAVTREEINDEX0 = "group___l_i_b_s___c_o_n_f_i_g.html":[1,0,0,2], "group___l_i_b_s___c_o_n_f_i_g.html#ga0a3ca94b616997069dd53e2c6c2687d7":[1,0,0,2,4], "group___l_i_b_s___c_o_n_f_i_g.html#ga181a46326e46b60afb160190832c7281":[1,0,0,2,5], +"group___l_i_b_s___c_o_n_f_i_g.html#ga3cdc9ef47fd3ff080d38481295327692":[1,0,0,2,1], "group___l_i_b_s___c_o_n_f_i_g.html#ga4403055986b70bb02b8d37073a122e32":[1,0,0,2,3], "group___l_i_b_s___c_o_n_f_i_g.html#ga57c369737d5c0cfdb7baeecba0a4b151":[1,0,0,2,6], -"group___l_i_b_s___c_o_n_f_i_g.html#ga66560656d080d6551627a19dfb847c66":[1,0,0,2,1], "group___l_i_b_s___c_o_n_f_i_g.html#ga9c853b02c22f26023c34d1d404b6d653":[1,0,0,2,0], "group___l_i_b_s___c_o_n_f_i_g.html#gaf4ddb2a71ec0d05c2480e197cd17c0be":[1,0,0,2,2], "group___m_y___l_i_b_s___g_p_i_o.html":[1,0,2,0], @@ -164,7 +197,7 @@ var NAVTREEINDEX0 = "group___t_i_m___i_n_i_t.html#ga9ae40be31d5271abe3e49f896d916d5c":[1,0,2,2,0,0,13], "group___t_i_m___i_n_i_t.html#gaac627c0e98c9594cc41b1b46eb39e44a":[1,0,2,2,0,0,8], "group___t_i_m___i_n_i_t.html#gaf48ef87650517652ddec039a189507ac":[1,0,2,2,0,0,12], -"group___t_r_a_c_e.html":[1,0,1,5], +"group___t_r_a_c_e.html":[1,0,1,6], "group___t_r_a_c_e___c_o_n_f_i_g.html":[1,0,0,0], "group___t_r_a_c_e___c_o_n_f_i_g.html#ga00ff2175bdc1fb11c8ec970ea3010dd8":[1,0,0,0,2], "group___t_r_a_c_e___c_o_n_f_i_g.html#ga0b87e0d3bf5853bcbb0b66a7c48fdc05":[1,0,0,0,4], @@ -182,72 +215,39 @@ var NAVTREEINDEX0 = "group___t_r_a_c_e___c_o_n_f_i_g.html#gadc960255719c7eff4bdfaa850be9b313":[1,0,0,0,10], "group___t_r_a_c_e___c_o_n_f_i_g.html#gafcc7ea03d4df8f1909e580b519a7f3ca":[1,0,0,0,11], "group___t_r_a_c_e___c_o_n_f_i_g.html#gafeca0be3688dea07ff443f894668003d":[1,0,0,0,8], -"group___t_r_a_c_e___g_p_i_o.html":[1,0,1,5,1], -"group___t_r_a_c_e___g_p_i_o.html#ga02a6a7b273766121db8ad4a1371373eb":[1,0,1,5,1,1], -"group___t_r_a_c_e___g_p_i_o.html#ga69741d88c991112e99fe7a62e025108a":[1,0,1,5,1,0], -"group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html":[1,0,1,5,3], -"group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#ga03f8b6f3b537ee1c8e91065c60db504f":[1,0,1,5,3,1], -"group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#gadd8e10e7ec3b0204f7f92062ecd452f7":[1,0,1,5,3,2], -"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html":[1,0,1,5,2], -"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga21353cb4f5af666237739e62ce019cd6":[1,0,1,5,2,1], -"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga734b2ebbf0c77699b739013878cfd146":[1,0,1,5,2,3], -"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga79f222c8ab644de4d47f07528d1edd63":[1,0,1,5,2,2], -"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga8d8c6850e32b42871faefce3352012d1":[1,0,1,5,2,4], -"group___t_r_a_c_e___s_e_r_i_a_l.html":[1,0,1,5,0], -"group___t_r_a_c_e___s_e_r_i_a_l.html#ga730fb7b8d0bbb348dca73c15bd0e0b26":[1,0,1,5,0,1], -"group___t_r_a_c_e___s_e_r_i_a_l.html#gae9b9b8a611e291a2f2aa5abf99f3ebaa":[1,0,1,5,0,0], -"group___t_r_a_c_k_e_r_s.html":[1,0,1,6], -"group___t_r_a_c_k_e_r_s.html#ga063dab1067005e1600ea32531fdf3f8d":[1,0,1,6,18], -"group___t_r_a_c_k_e_r_s.html#ga1b7549afc4a1760b54a9b93b0f6d105e":[1,0,1,6,12], -"group___t_r_a_c_k_e_r_s.html#ga23de0006aa08984cfeddb6aa5e512fa1":[1,0,1,6,9], -"group___t_r_a_c_k_e_r_s.html#ga365a8c60bd13b75154feda649dd21ead":[1,0,1,6,17], -"group___t_r_a_c_k_e_r_s.html#ga39b6ffbc561f8caac276415e1ad32c30":[1,0,1,6,4], -"group___t_r_a_c_k_e_r_s.html#ga47ac59a406ee74d4cd9fe0fbaf63a758":[1,0,1,6,7], -"group___t_r_a_c_k_e_r_s.html#ga49af29ab3927cad105c1d2b018a767e9":[1,0,1,6,10], -"group___t_r_a_c_k_e_r_s.html#ga4b08632669043dfdbd219dda03502bdb":[1,0,1,6,8], -"group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4":[1,0,1,6,0], -"group___t_r_a_c_k_e_r_s.html#ga5dd8bac8c7ab5832019d55d7a68371b9":[1,0,1,6,15], -"group___t_r_a_c_k_e_r_s.html#ga704f7b9f8c65c9bcec48ce7cb77a2d3b":[1,0,1,6,14], -"group___t_r_a_c_k_e_r_s.html#ga72be24629fedb8bf70e830373d151fbc":[1,0,1,6,1], -"group___t_r_a_c_k_e_r_s.html#ga8017fb05a56a1b667244f1f786fa9c57":[1,0,1,6,11], -"group___t_r_a_c_k_e_r_s.html#ga9dc91e6b798a081f95f2ccef2c288e5e":[1,0,1,6,6], -"group___t_r_a_c_k_e_r_s.html#gaaec7ec19977bb26fa1919dfe920b82d5":[1,0,1,6,19], -"group___t_r_a_c_k_e_r_s.html#gab880911066605602a966641682090169":[1,0,1,6,5], -"group___t_r_a_c_k_e_r_s.html#gad2f4062a9ac8c2ab062a364f640ebc51":[1,0,1,6,13], -"group___t_r_a_c_k_e_r_s.html#gad91d8ca89074270fc040c0449e57cf07":[1,0,1,6,3], -"group___t_r_a_c_k_e_r_s.html#gadd7fd2c6e3a4800f1d5ddab35fd4b43e":[1,0,1,6,2], -"group___t_r_a_c_k_e_r_s.html#gae860b6947c6e317e14d40bd7b4b8eb74":[1,0,1,6,16], -"group___u_a_r_t___i_n_i_t.html":[1,0,2,3,0], -"group___u_a_r_t___i_n_i_t.html#ga167269406e73327b95c3bb7b9cfe6d89":[1,0,2,3,0,0], -"group___u_a_r_t___i_n_i_t.html#ga592c6bf4a6496d6806ba0838cdfa2340":[1,0,2,3,0,5], -"group___u_a_r_t___i_n_i_t.html#ga6dadd967b428aade24008ec060009976":[1,0,2,3,0,3], -"group___u_a_r_t___i_n_i_t.html#ga779530e93e7aa1f25eb13045ec42b8e7":[1,0,2,3,0,4], -"group___u_a_r_t___i_n_i_t.html#gaacb3968508217a0d8b3f64aa0c8aa07d":[1,0,2,3,0,2], -"group___u_a_r_t___i_n_i_t.html#gace54f148bb1d72f13bf397d096d38d1b":[1,0,2,3,0,1], -"group___u_a_r_t___i_n_i_t.html#gafaeb8bdd4aa7fb1987505530daa90868":[1,0,2,3,0,6], -"group___u_t_i_l_s___d_e_f_i_n_e_s.html":[1,0,1,4], -"group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga0f22e895ac7781c3d1b68fee182c4291":[1,0,1,4,2], -"group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga996f7be338ccb40d1a2a5abc1ad61759":[1,0,1,4,3], -"group___u_t_i_l_s___d_e_f_i_n_e_s.html#gabf45f2b60eedf80cf9d1dbe4302a741e":[1,0,1,4,1], -"group___u_t_i_l_s___d_e_f_i_n_e_s.html#gaf5e598848326d48e86167e5099a029be":[1,0,1,4,0], -"index.html":[], -"index.html#features":[0,0], -"index.html#gpio_module":[0,0,2], -"index.html#overview":[0], -"index.html#spi_module":[0,0,5], -"index.html#structure":[0,1], -"index.html#tim_module":[0,0,3], -"index.html#trace_module":[0,0,1], -"index.html#uart_module":[0,0,4], -"index.html#usage_basic":[0,2], -"index.html#utils_module":[0,0,0], -"mainpage_8h_source.html":[3,0,2], -"mylibs__config_8h.html":[3,0,0,0,2], -"mylibs__config_8h_source.html":[3,0,0,0,2], -"mylibs__defs_8h.html":[3,0,0,0,3], -"mylibs__defs_8h_source.html":[3,0,0,0,3], -"mylibs__include_8h.html":[3,0,0,0,4], -"mylibs__include_8h_source.html":[3,0,0,0,4], -"pages.html":[], -"struct_evolve_optimizer__t.html":[1,0,1,1,0] +"group___t_r_a_c_e___g_p_i_o.html":[1,0,1,6,1], +"group___t_r_a_c_e___g_p_i_o.html#ga02a6a7b273766121db8ad4a1371373eb":[1,0,1,6,1,1], +"group___t_r_a_c_e___g_p_i_o.html#ga69741d88c991112e99fe7a62e025108a":[1,0,1,6,1,0], +"group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html":[1,0,1,6,3], +"group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#ga03f8b6f3b537ee1c8e91065c60db504f":[1,0,1,6,3,1], +"group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#gadd8e10e7ec3b0204f7f92062ecd452f7":[1,0,1,6,3,2], +"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html":[1,0,1,6,2], +"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga21353cb4f5af666237739e62ce019cd6":[1,0,1,6,2,1], +"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga734b2ebbf0c77699b739013878cfd146":[1,0,1,6,2,3], +"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga79f222c8ab644de4d47f07528d1edd63":[1,0,1,6,2,2], +"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga8d8c6850e32b42871faefce3352012d1":[1,0,1,6,2,4], +"group___t_r_a_c_e___s_e_r_i_a_l.html":[1,0,1,6,0], +"group___t_r_a_c_e___s_e_r_i_a_l.html#ga730fb7b8d0bbb348dca73c15bd0e0b26":[1,0,1,6,0,1], +"group___t_r_a_c_e___s_e_r_i_a_l.html#gae9b9b8a611e291a2f2aa5abf99f3ebaa":[1,0,1,6,0,0], +"group___t_r_a_c_k_e_r_s.html":[1,0,1,7], +"group___t_r_a_c_k_e_r_s.html#ga063dab1067005e1600ea32531fdf3f8d":[1,0,1,7,18], +"group___t_r_a_c_k_e_r_s.html#ga1b7549afc4a1760b54a9b93b0f6d105e":[1,0,1,7,12], +"group___t_r_a_c_k_e_r_s.html#ga23de0006aa08984cfeddb6aa5e512fa1":[1,0,1,7,9], +"group___t_r_a_c_k_e_r_s.html#ga365a8c60bd13b75154feda649dd21ead":[1,0,1,7,17], +"group___t_r_a_c_k_e_r_s.html#ga39b6ffbc561f8caac276415e1ad32c30":[1,0,1,7,4], +"group___t_r_a_c_k_e_r_s.html#ga47ac59a406ee74d4cd9fe0fbaf63a758":[1,0,1,7,7], +"group___t_r_a_c_k_e_r_s.html#ga49af29ab3927cad105c1d2b018a767e9":[1,0,1,7,10], +"group___t_r_a_c_k_e_r_s.html#ga4b08632669043dfdbd219dda03502bdb":[1,0,1,7,8], +"group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4":[1,0,1,7,0], +"group___t_r_a_c_k_e_r_s.html#ga5dd8bac8c7ab5832019d55d7a68371b9":[1,0,1,7,15], +"group___t_r_a_c_k_e_r_s.html#ga704f7b9f8c65c9bcec48ce7cb77a2d3b":[1,0,1,7,14], +"group___t_r_a_c_k_e_r_s.html#ga72be24629fedb8bf70e830373d151fbc":[1,0,1,7,1], +"group___t_r_a_c_k_e_r_s.html#ga8017fb05a56a1b667244f1f786fa9c57":[1,0,1,7,11], +"group___t_r_a_c_k_e_r_s.html#ga9dc91e6b798a081f95f2ccef2c288e5e":[1,0,1,7,6], +"group___t_r_a_c_k_e_r_s.html#gaaec7ec19977bb26fa1919dfe920b82d5":[1,0,1,7,19], +"group___t_r_a_c_k_e_r_s.html#gab880911066605602a966641682090169":[1,0,1,7,5], +"group___t_r_a_c_k_e_r_s.html#gad2f4062a9ac8c2ab062a364f640ebc51":[1,0,1,7,13], +"group___t_r_a_c_k_e_r_s.html#gad91d8ca89074270fc040c0449e57cf07":[1,0,1,7,3], +"group___t_r_a_c_k_e_r_s.html#gadd7fd2c6e3a4800f1d5ddab35fd4b43e":[1,0,1,7,2], +"group___t_r_a_c_k_e_r_s.html#gae860b6947c6e317e14d40bd7b4b8eb74":[1,0,1,7,16] }; diff --git a/Doc/html/navtreeindex1.js b/Doc/html/navtreeindex1.js index be8ca82..7a2ccc1 100644 --- a/Doc/html/navtreeindex1.js +++ b/Doc/html/navtreeindex1.js @@ -1,16 +1,50 @@ var NAVTREEINDEX1 = { -"struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae":[1,0,1,1,0,5], -"struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8":[1,0,1,1,0,1], -"struct_evolve_optimizer__t.html#a3be8c0c34db8429210ff470497a56727":[1,0,1,1,0,7], -"struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a":[1,0,1,1,0,10], -"struct_evolve_optimizer__t.html#a80eb0b8525b6bb838484f5922b9d8f7c":[1,0,1,1,0,0], -"struct_evolve_optimizer__t.html#a93f628397c2f8d4027f2906752b650df":[1,0,1,1,0,8], -"struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6":[1,0,1,1,0,3], -"struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1":[1,0,1,1,0,2], -"struct_evolve_optimizer__t.html#ad0f464d7048a9ed0753b61f76f563108":[1,0,1,1,0,6], -"struct_evolve_optimizer__t.html#aec67667fd1f1533e693e41c79bc28da4":[1,0,1,1,0,9], -"struct_evolve_optimizer__t.html#af779c7aeba0053e36cee7aade160f1c8":[1,0,1,1,0,4], +"group___u_a_r_t___i_n_i_t.html":[1,0,2,3,0], +"group___u_a_r_t___i_n_i_t.html#ga167269406e73327b95c3bb7b9cfe6d89":[1,0,2,3,0,0], +"group___u_a_r_t___i_n_i_t.html#ga592c6bf4a6496d6806ba0838cdfa2340":[1,0,2,3,0,5], +"group___u_a_r_t___i_n_i_t.html#ga6dadd967b428aade24008ec060009976":[1,0,2,3,0,3], +"group___u_a_r_t___i_n_i_t.html#ga779530e93e7aa1f25eb13045ec42b8e7":[1,0,2,3,0,4], +"group___u_a_r_t___i_n_i_t.html#gaacb3968508217a0d8b3f64aa0c8aa07d":[1,0,2,3,0,2], +"group___u_a_r_t___i_n_i_t.html#gace54f148bb1d72f13bf397d096d38d1b":[1,0,2,3,0,1], +"group___u_a_r_t___i_n_i_t.html#gafaeb8bdd4aa7fb1987505530daa90868":[1,0,2,3,0,6], +"group___u_t_i_l_s___d_e_f_i_n_e_s.html":[1,0,1,5], +"group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga0f22e895ac7781c3d1b68fee182c4291":[1,0,1,5,2], +"group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga996f7be338ccb40d1a2a5abc1ad61759":[1,0,1,5,3], +"group___u_t_i_l_s___d_e_f_i_n_e_s.html#gabf45f2b60eedf80cf9d1dbe4302a741e":[1,0,1,5,1], +"group___u_t_i_l_s___d_e_f_i_n_e_s.html#gaf5e598848326d48e86167e5099a029be":[1,0,1,5,0], +"index.html":[], +"index.html#features":[0,0], +"index.html#gpio_module":[0,0,2], +"index.html#overview":[0], +"index.html#spi_module":[0,0,5], +"index.html#structure":[0,1], +"index.html#tim_module":[0,0,3], +"index.html#trace_module":[0,0,1], +"index.html#uart_module":[0,0,4], +"index.html#usage_basic":[0,2], +"index.html#utils_module":[0,0,0], +"mainpage_8h_source.html":[3,0,2], +"mylibs__config_8h.html":[3,0,0,0,3], +"mylibs__config_8h_source.html":[3,0,0,0,3], +"mylibs__defs_8h.html":[3,0,0,0,4], +"mylibs__defs_8h_source.html":[3,0,0,0,4], +"mylibs__include_8h.html":[3,0,0,0,5], +"mylibs__include_8h_source.html":[3,0,0,0,5], +"pages.html":[], +"struct_bench_time__t.html":[1,0,1,1,2], +"struct_bench_time__t.html#a9ae6d45c610be9d4b7628a614ccb06d6":[1,0,1,1,2,0], +"struct_bench_time_channel__t.html":[1,0,1,1,1], +"struct_bench_time_channel__t.html#a095d93e0228641f58b8661e263bc1bcd":[1,0,1,1,1,1], +"struct_bench_time_channel__t.html#a0f80bb194231df7921712d20bac603c9":[1,0,1,1,1,2], +"struct_bench_time_channel__t.html#a22a3913e7925aa89cc12ec1d24a6c16c":[1,0,1,1,1,3], +"struct_bench_time_channel__t.html#a8140fe9e3d323404651f0cfeeae53928":[1,0,1,1,1,0], +"struct_bench_time_stats__t.html":[1,0,1,1,0], +"struct_bench_time_stats__t.html#a21499b0b19d1ed27f8cea069f674e8ec":[1,0,1,1,0,2], +"struct_bench_time_stats__t.html#a2c739e1db6b26ceac5db3f2c44c177a0":[1,0,1,1,0,4], +"struct_bench_time_stats__t.html#a39b71a5d48c4a51a553a26a9fb961ac8":[1,0,1,1,0,0], +"struct_bench_time_stats__t.html#a3da36eb65b03ba995b5905b4650ea93c":[1,0,1,1,0,1], +"struct_bench_time_stats__t.html#a5e95ef31dd0daf973894ef2f034d1f71":[1,0,1,1,0,3], "struct_g_p_i_o___l_e_d_type_def.html":[1,0,2,0,2,0], "struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978":[1,0,2,0,2,0,2], "struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec":[1,0,2,0,2,0,4], @@ -23,19 +57,31 @@ var NAVTREEINDEX1 = "struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405":[1,0,2,0,1,0,2], "struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032":[1,0,2,0,1,0,1], "struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a":[1,0,2,0,1,0,0], -"struct_h_f___stack_frame__t.html":[1,0,1,5,3,0], -"struct_h_f___stack_frame__t.html#a16563896004751c90e41c81ae4570732":[1,0,1,5,3,0,6], -"struct_h_f___stack_frame__t.html#a286104d19185714940645a9df814ddea":[1,0,1,5,3,0,1], -"struct_h_f___stack_frame__t.html#a4146ed28926b5f234132b7112119a413":[1,0,1,5,3,0,0], -"struct_h_f___stack_frame__t.html#a453c7af42b6928a693af422e17c981d3":[1,0,1,5,3,0,3], -"struct_h_f___stack_frame__t.html#a5a52e5006dabcf68c0fa4cfb0e03335b":[1,0,1,5,3,0,2], -"struct_h_f___stack_frame__t.html#a6e51904297f7725e96d5b5fb291ef577":[1,0,1,5,3,0,5], -"struct_h_f___stack_frame__t.html#a819ee3bc518c460ece1b7c4079f8f80b":[1,0,1,5,3,0,4], -"struct_h_f___stack_frame__t.html#ae47cb051ee3c94471bfd4fe7e49c55f9":[1,0,1,5,3,0,7], -"struct_r_t_t___flash_header__t.html":[1,0,1,5,2,0], -"struct_r_t_t___flash_header__t.html#a844ee5470a323a749856cbb7a682dc57":[1,0,1,5,2,0,0], -"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_gen_optimizer__t.html":[1,0,1,2,0], +"struct_gen_optimizer__t.html#a04a72c1a13e17581e84eaaf3d245bbfc":[1,0,1,2,0,5], +"struct_gen_optimizer__t.html#a2c9a50ea7d975b9bc22a67e453ab83df":[1,0,1,2,0,9], +"struct_gen_optimizer__t.html#a8201f1eede36a2c04ec7b4caac7465c9":[1,0,1,2,0,3], +"struct_gen_optimizer__t.html#a8b5066935d99f2fc7ebb94cc3652fc73":[1,0,1,2,0,8], +"struct_gen_optimizer__t.html#a8f226c85e9bb034cb811aa0366bb191c":[1,0,1,2,0,6], +"struct_gen_optimizer__t.html#a9e20d2f6f39a5147e6dbac46baca73a9":[1,0,1,2,0,2], +"struct_gen_optimizer__t.html#abe0aacea949fbe93e5d4c002e37d7192":[1,0,1,2,0,0], +"struct_gen_optimizer__t.html#acfeb93ef4823e09473ddba52fae9a6b1":[1,0,1,2,0,7], +"struct_gen_optimizer__t.html#ad37161efa27ef1390d1f7e6ee2f79b12":[1,0,1,2,0,10], +"struct_gen_optimizer__t.html#ad4dc0e53b3ca6bf2a642dfe7a1d1f26c":[1,0,1,2,0,4], +"struct_gen_optimizer__t.html#afe598a90024a8aa628dd16f3a2b38eb5":[1,0,1,2,0,1], +"struct_h_f___stack_frame__t.html":[1,0,1,6,3,0], +"struct_h_f___stack_frame__t.html#a16563896004751c90e41c81ae4570732":[1,0,1,6,3,0,6], +"struct_h_f___stack_frame__t.html#a286104d19185714940645a9df814ddea":[1,0,1,6,3,0,1], +"struct_h_f___stack_frame__t.html#a4146ed28926b5f234132b7112119a413":[1,0,1,6,3,0,0], +"struct_h_f___stack_frame__t.html#a453c7af42b6928a693af422e17c981d3":[1,0,1,6,3,0,3], +"struct_h_f___stack_frame__t.html#a5a52e5006dabcf68c0fa4cfb0e03335b":[1,0,1,6,3,0,2], +"struct_h_f___stack_frame__t.html#a6e51904297f7725e96d5b5fb291ef577":[1,0,1,6,3,0,5], +"struct_h_f___stack_frame__t.html#a819ee3bc518c460ece1b7c4079f8f80b":[1,0,1,6,3,0,4], +"struct_h_f___stack_frame__t.html#ae47cb051ee3c94471bfd4fe7e49c55f9":[1,0,1,6,3,0,7], +"struct_r_t_t___flash_header__t.html":[1,0,1,6,2,0], +"struct_r_t_t___flash_header__t.html#a844ee5470a323a749856cbb7a682dc57":[1,0,1,6,2,0,0], +"struct_r_t_t___flash_header__t.html#ae7276198385c8d6f6508f433d042d52a":[1,0,1,6,2,0,2], +"struct_r_t_t___flash_header__t.html#afd1a5c51af6f97d170c2ccbbe3e34699":[1,0,1,6,2,0,1], "struct_s_p_i___settings_type_def.html":[1,0,2,1,1], "struct_s_p_i___settings_type_def.html#a0af3bdb273818ff97eb4ff3cff918820":[1,0,2,1,1,7], "struct_s_p_i___settings_type_def.html#a0d55a2941854f61934487f3d209cfa95":[1,0,2,1,1,4], @@ -78,10 +124,10 @@ var NAVTREEINDEX1 = "struct_u_a_r_t___settings_type_def.html#accf2c9448a3ea8eb3b8c25a569276fea":[1,0,2,3,1,0], "struct_u_a_r_t___settings_type_def.html#af6f9910d065bae715cdb4a1024143a8f":[1,0,2,3,1,1], "topics.html":[1], -"trace_8h.html":[3,0,0,0,5], -"trace_8h_source.html":[3,0,0,0,5], -"trackers_8h.html":[3,0,0,0,6], -"trackers_8h_source.html":[3,0,0,0,6], +"trace_8h.html":[3,0,0,0,6], +"trace_8h_source.html":[3,0,0,0,6], +"trackers_8h.html":[3,0,0,0,7], +"trackers_8h_source.html":[3,0,0,0,7], "unionuint16___bit_type_def.html":[1,0,1,0,1], "unionuint32___bit_type_def.html":[1,0,1,0,2], "unionuint64___bit_type_def.html":[1,0,1,0,3], diff --git a/Doc/html/search/all_1.js b/Doc/html/search/all_1.js index fa8ea03..2595211 100644 --- a/Doc/html/search/all_1.js +++ b/Doc/html/search/all_1.js @@ -1,7 +1,22 @@ var searchData= [ - ['bit_20access_20defines_0',['Bit access defines',['../group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html',1,'']]], - ['bit_5faccess_2eh_1',['bit_access.h',['../bit__access_8h.html',1,'']]], - ['buffer_2',['Flash RTT Buffer',['../group___t_r_a_c_e___r_t_t___f_l_a_s_h.html',1,'']]], - ['byteswap16_3',['ByteSwap16',['../group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga0f22e895ac7781c3d1b68fee182c4291',1,'mylibs_defs.h']]] + ['bench_5ftime_2eh_0',['bench_time.h',['../bench__time_8h.html',1,'']]], + ['bench_5ftime_5fenable_1',['BENCH_TIME_ENABLE',['../group___g_e_n___c_o_n_f_i_g.html#ga67c3c54503b9bbd5d175ac46d37866d9',1,'mylibs_config.h']]], + ['bench_5ftime_5fmax_5fchannels_2',['BENCH_TIME_MAX_CHANNELS',['../group___g_e_n___c_o_n_f_i_g.html#ga74fdf777ceefa5e7d67120fbda4cde52',1,'mylibs_config.h']]], + ['benchtime_5fend_3',['BenchTime_End',['../group___b_e_n_c_h___t_i_m_e.html#ga47a69851a2089140eac00cde18a12439',1,'bench_time.h']]], + ['benchtime_5fgetaverage_4',['BenchTime_GetAverage',['../group___b_e_n_c_h___t_i_m_e.html#ga24e2450d5ea921074ec5d7a1e4d56ba8',1,'bench_time.h']]], + ['benchtime_5fgetcount_5',['BenchTime_GetCount',['../group___b_e_n_c_h___t_i_m_e.html#gabd1301ca79a30c782970f89fd147df3a',1,'bench_time.h']]], + ['benchtime_5fgetlast_6',['BenchTime_GetLast',['../group___b_e_n_c_h___t_i_m_e.html#gacf3a738d6423d71b238058a63558a4ed',1,'bench_time.h']]], + ['benchtime_5fgetmax_7',['BenchTime_GetMax',['../group___b_e_n_c_h___t_i_m_e.html#ga07e27d7b169c9fa1abd57281bb4e374e',1,'bench_time.h']]], + ['benchtime_5fgetmin_8',['BenchTime_GetMin',['../group___b_e_n_c_h___t_i_m_e.html#ga273d45255fe4403fc25648d60cca7705',1,'bench_time.h']]], + ['benchtime_5finit_9',['BenchTime_Init',['../group___b_e_n_c_h___t_i_m_e.html#gabb7a665a9603ea2e4dbc4432e8cb6054',1,'bench_time.h']]], + ['benchtime_5fresetstats_10',['BenchTime_ResetStats',['../group___b_e_n_c_h___t_i_m_e.html#ga31a6b2b181b92bcb15f46758f5d57f35',1,'bench_time.h']]], + ['benchtime_5fstart_11',['BenchTime_Start',['../group___b_e_n_c_h___t_i_m_e.html#gac65338df38129964ce3e9d9cb2fcb349',1,'bench_time.h']]], + ['benchtime_5ft_12',['BenchTime_t',['../struct_bench_time__t.html',1,'']]], + ['benchtimechannel_5ft_13',['BenchTimeChannel_t',['../struct_bench_time_channel__t.html',1,'']]], + ['benchtimestats_5ft_14',['BenchTimeStats_t',['../struct_bench_time_stats__t.html',1,'']]], + ['bit_20access_20defines_15',['Bit access defines',['../group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html',1,'']]], + ['bit_5faccess_2eh_16',['bit_access.h',['../bit__access_8h.html',1,'']]], + ['buffer_17',['Flash RTT Buffer',['../group___t_r_a_c_e___r_t_t___f_l_a_s_h.html',1,'']]], + ['byteswap16_18',['ByteSwap16',['../group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga0f22e895ac7781c3d1b68fee182c4291',1,'mylibs_defs.h']]] ]; diff --git a/Doc/html/search/all_10.js b/Doc/html/search/all_10.js index 91de365..4476016 100644 --- a/Doc/html/search/all_10.js +++ b/Doc/html/search/all_10.js @@ -2,57 +2,60 @@ var searchData= [ ['tag_0',['tag',['../struct_r_t_t___flash_header__t.html#a844ee5470a323a749856cbb7a682dc57',1,'RTT_FlashHeader_t']]], ['tern_5fassert_5fusertracker_1',['tern_assert_usertracker',['../group___t_r_a_c_k_e_r_s.html#ga39b6ffbc561f8caac276415e1ad32c30',1,'trackers.h']]], - ['tim_20tools_2',['TIM Tools',['../group___m_y___l_i_b_s___t_i_m.html',1,'']]], - ['tim_5fbase_5fdisable_3',['TIM_Base_Disable',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800ae838122c0e83bc57ad31b546bf2f00e5',1,'general_tim.h']]], - ['tim_5fbase_5finit_4',['TIM_Base_Init',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ga7044214f24a9868ba7e1650b55e639ec',1,'TIM_Base_Init(TIM_SettingsTypeDef *stim): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ga7044214f24a9868ba7e1650b55e639ec',1,'TIM_Base_Init(TIM_SettingsTypeDef *stim): general_tim.c']]], - ['tim_5fbase_5fmspdeinit_5',['TIM_Base_MspDeInit',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ga879e3f1c919c02990736730275367115',1,'TIM_Base_MspDeInit(TIM_HandleTypeDef *htim): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ga879e3f1c919c02990736730275367115',1,'TIM_Base_MspDeInit(TIM_HandleTypeDef *htim): general_tim.c']]], - ['tim_5fbase_5fmspinit_6',['TIM_Base_MspInit',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#gaad47337be7ba2f6c0777c40d7278c931',1,'TIM_Base_MspInit(TIM_HandleTypeDef *htim, TIM_ITModeTypeDef it_mode): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#gaad47337be7ba2f6c0777c40d7278c931',1,'TIM_Base_MspInit(TIM_HandleTypeDef *htim, TIM_ITModeTypeDef it_mode): general_tim.c']]], - ['tim_5fdefault_7',['TIM_DEFAULT',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaeb611874216a4661fb83366b99b9e787ab0869828a4dfd62eaa44868ca27835f8',1,'general_tim.h']]], - ['tim_5fdelay_8',['TIM_Delay',['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html#ga88c552a133cb6e3015453cccab74c07e',1,'TIM_Delay(TIM_HandleTypeDef *htim, uint16_t delay): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html#ga88c552a133cb6e3015453cccab74c07e',1,'TIM_Delay(TIM_HandleTypeDef *htim, uint16_t delay): general_tim.c']]], - ['tim_5fdelay_5fnonblocking_9',['TIM_Delay_NonBlocking',['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html#ga108637af414bff3373059273b815ce9b',1,'TIM_Delay_NonBlocking(TIM_HandleTypeDef *htim, uint16_t delay): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html#ga108637af414bff3373059273b815ce9b',1,'TIM_Delay_NonBlocking(TIM_HandleTypeDef *htim, uint16_t delay): general_tim.c']]], - ['tim_5fdelay_5fstart_10',['TIM_Delay_Start',['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html#ga4c0dfde4e15f677600605348b4e97834',1,'TIM_Delay_Start(TIM_HandleTypeDef *htim): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html#ga4c0dfde4e15f677600605348b4e97834',1,'TIM_Delay_Start(TIM_HandleTypeDef *htim): general_tim.c']]], - ['tim_5fencoder_5finit_11',['TIM_Encoder_Init',['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html#ga8d16c3b7e7c6decc54c5c3d1a8bf0fbc',1,'TIM_Encoder_Init(TIM_EncoderTypeDef *henc1, TIM_HandleTypeDef *htim): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html#ga8d16c3b7e7c6decc54c5c3d1a8bf0fbc',1,'TIM_Encoder_Init(TIM_EncoderTypeDef *henc, TIM_HandleTypeDef *htim): general_tim.c']]], - ['tim_5fencoder_5fread_12',['TIM_Encoder_Read',['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html#gac3bc6525f88c275e47eb864e6d567501',1,'TIM_Encoder_Read(TIM_EncoderTypeDef *henc): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html#gac3bc6525f88c275e47eb864e6d567501',1,'TIM_Encoder_Read(TIM_EncoderTypeDef *henc): general_tim.c']]], - ['tim_5fencoder_5freadswitch_13',['TIM_Encoder_ReadSwitch',['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html#ga117b795017e9e3a357ddefe323412761',1,'TIM_Encoder_ReadSwitch(TIM_EncoderTypeDef *henc): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html#ga117b795017e9e3a357ddefe323412761',1,'TIM_Encoder_ReadSwitch(TIM_EncoderTypeDef *henc): general_tim.c']]], - ['tim_5fencodertypedef_14',['TIM_EncoderTypeDef',['../struct_t_i_m___encoder_type_def.html',1,'']]], - ['tim_5fit_5fmode_15',['TIM_IT_MODE',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaeb611874216a4661fb83366b99b9e787a89ecf1ef6d45ead2efcb7dd30396114c',1,'general_tim.h']]], - ['tim_5fitmodetypedef_16',['TIM_ITModeTypeDef',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#gaeb611874216a4661fb83366b99b9e787',1,'general_tim.h']]], - ['tim_5fmhztickbasetypedef_17',['TIM_MHzTickBaseTypeDef',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#gaa0a51c870325217ac099881f09dd0800',1,'general_tim.h']]], - ['tim_5foc_5fcomparator_5finit_18',['TIM_OC_Comparator_Init',['../group___m_y_l_i_b_s___t_i_m___o_c.html#gae2608ca8023e9a0713af0b4fbfbc1889',1,'TIM_OC_Comparator_Init(TIM_HandleTypeDef *htim, uint32_t TIM_CHANNEL): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___o_c.html#gae2608ca8023e9a0713af0b4fbfbc1889',1,'TIM_OC_Comparator_Init(TIM_HandleTypeDef *htim, uint32_t TIM_CHANNEL): general_tim.c']]], - ['tim_5foutput_5fpwm_5finit_19',['TIM_Output_PWM_Init',['../group___m_y_l_i_b_s___t_i_m___o_c.html#gadb2f465d89f609e035867e980c3a29c6',1,'TIM_Output_PWM_Init(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfigOC, uint32_t TIM_CHANNEL, GPIO_TypeDef *GPIOx, uint32_t PWM_PIN): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___o_c.html#gadb2f465d89f609e035867e980c3a29c6',1,'TIM_Output_PWM_Init(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfigOC, uint32_t TIM_CHANNEL, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN): general_tim.c']]], - ['tim_5fsettingstypedef_20',['TIM_SettingsTypeDef',['../struct_t_i_m___settings_type_def.html',1,'']]], - ['tim_5ftickbase_5f100ms_21',['TIM_TickBase_100MS',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a18527a2d781eb4365aecd9a3184fc1da',1,'general_tim.h']]], - ['tim_5ftickbase_5f100us_22',['TIM_TickBase_100US',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a096ef0ab67788487f69d8877c6d89b30',1,'general_tim.h']]], - ['tim_5ftickbase_5f10ms_23',['TIM_TickBase_10MS',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a7421a08abd119e71aa99eea5ab5d6daa',1,'general_tim.h']]], - ['tim_5ftickbase_5f10us_24',['TIM_TickBase_10US',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a060b01e890891fd17c8f95b55a94139f',1,'general_tim.h']]], - ['tim_5ftickbase_5f1ms_25',['TIM_TickBase_1MS',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a6a66c5ed1d966c9e30f0219b664d2b25',1,'general_tim.h']]], - ['tim_5ftickbase_5f1us_26',['TIM_TickBase_1US',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a63df3123d0ddc592b189ed1594456ea2',1,'general_tim.h']]], - ['tools_27',['Tools',['../group___m_y_l_i_b_s___d_e_f_i_n_e_s.html',1,'General Tools'],['../group___m_y___l_i_b_s___g_p_i_o.html',1,'GPIO Tools'],['../group___m_y___l_i_b_s___s_p_i.html',1,'SPI Tools'],['../group___m_y___l_i_b_s___t_i_m.html',1,'TIM Tools'],['../group___m_y___l_i_b_s___u_a_r_t.html',1,'UART Tools']]], - ['tools_28',['tools',['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html',1,'Delay tools'],['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html',1,'Encoder tools'],['../group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html',1,'General tools'],['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html',1,'General tools'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html',1,'LED tools'],['../group___m_y_l_i_b_s___t_i_m___o_c.html',1,'PWM/OC Channels tools'],['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html',1,'Switch tools']]], - ['trace_29',['Трассировка <a class="el" href="group___t_r_a_c_e.html">Trace defines</a>',['../index.html#trace_module',1,'']]], - ['trace_20configs_30',['Trace configs',['../group___t_r_a_c_e___c_o_n_f_i_g.html',1,'']]], - ['trace_20defines_31',['Trace defines',['../group___t_r_a_c_e.html',1,'']]], - ['trace_20defines_32',['trace defines',['../group___t_r_a_c_e___g_p_i_o.html',1,'GPIO trace defines'],['../group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html',1,'Hardfault trace defines'],['../group___t_r_a_c_e___s_e_r_i_a_l.html',1,'Serial trace defines']]], - ['trace_2eh_33',['trace.h',['../trace_8h.html',1,'']]], - ['trace_5fgpio_5freset_34',['TRACE_GPIO_RESET',['../group___t_r_a_c_e___g_p_i_o.html#ga69741d88c991112e99fe7a62e025108a',1,'trace.h']]], - ['trace_5fgpio_5fset_35',['TRACE_GPIO_SET',['../group___t_r_a_c_e___g_p_i_o.html#ga02a6a7b273766121db8ad4a1371373eb',1,'trace.h']]], - ['trackerclear_5fall_36',['TrackerClear_All',['../group___t_r_a_c_k_e_r_s.html#ga704f7b9f8c65c9bcec48ce7cb77a2d3b',1,'trackers.h']]], - ['trackerclear_5ferr_37',['TrackerClear_Err',['../group___t_r_a_c_k_e_r_s.html#gae860b6947c6e317e14d40bd7b4b8eb74',1,'trackers.h']]], - ['trackerclear_5fok_38',['TrackerClear_Ok',['../group___t_r_a_c_k_e_r_s.html#ga5dd8bac8c7ab5832019d55d7a68371b9',1,'trackers.h']]], - ['trackerclear_5fuser_39',['TrackerClear_User',['../group___t_r_a_c_k_e_r_s.html#ga063dab1067005e1600ea32531fdf3f8d',1,'trackers.h']]], - ['trackerclear_5fuserall_40',['TrackerClear_UserAll',['../group___t_r_a_c_k_e_r_s.html#gaaec7ec19977bb26fa1919dfe920b82d5',1,'trackers.h']]], - ['trackerclear_5fwarn_41',['TrackerClear_Warn',['../group___t_r_a_c_k_e_r_s.html#ga365a8c60bd13b75154feda649dd21ead',1,'trackers.h']]], - ['trackercnt_5ferr_42',['TrackerCnt_Err',['../group___t_r_a_c_k_e_r_s.html#ga49af29ab3927cad105c1d2b018a767e9',1,'trackers.h']]], - ['trackercnt_5fok_43',['TrackerCnt_Ok',['../group___t_r_a_c_k_e_r_s.html#ga23de0006aa08984cfeddb6aa5e512fa1',1,'trackers.h']]], - ['trackercnt_5fuser_44',['TrackerCnt_User',['../group___t_r_a_c_k_e_r_s.html#ga1b7549afc4a1760b54a9b93b0f6d105e',1,'trackers.h']]], - ['trackercnt_5fwarn_45',['TrackerCnt_Warn',['../group___t_r_a_c_k_e_r_s.html#ga8017fb05a56a1b667244f1f786fa9c57',1,'trackers.h']]], - ['trackerget_5ferr_46',['TrackerGet_Err',['../group___t_r_a_c_k_e_r_s.html#ga9dc91e6b798a081f95f2ccef2c288e5e',1,'trackers.h']]], - ['trackerget_5fok_47',['TrackerGet_Ok',['../group___t_r_a_c_k_e_r_s.html#gab880911066605602a966641682090169',1,'trackers.h']]], - ['trackerget_5fuser_48',['TrackerGet_User',['../group___t_r_a_c_k_e_r_s.html#ga4b08632669043dfdbd219dda03502bdb',1,'trackers.h']]], - ['trackerget_5fwarn_49',['TrackerGet_Warn',['../group___t_r_a_c_k_e_r_s.html#ga47ac59a406ee74d4cd9fe0fbaf63a758',1,'trackers.h']]], - ['trackers_20defines_50',['Trackers defines',['../group___t_r_a_c_k_e_r_s.html',1,'']]], - ['trackers_2eh_51',['trackers.h',['../trackers_8h.html',1,'']]], - ['trackers_5fenable_52',['TRACKERS_ENABLE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#gac9eaedc31ab023ce7d6403999216e496',1,'mylibs_config.h']]], - ['trackertypedef_53',['TrackerTypeDef',['../group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4',1,'trackers.h']]], - ['trackerwrite_5fuser_54',['TrackerWrite_User',['../group___t_r_a_c_k_e_r_s.html#gad2f4062a9ac8c2ab062a364f640ebc51',1,'trackers.h']]] + ['tick_5fperiod_2',['tick_period',['../struct_bench_time_channel__t.html#a095d93e0228641f58b8661e263bc1bcd',1,'BenchTimeChannel_t']]], + ['tim_20tools_3',['TIM Tools',['../group___m_y___l_i_b_s___t_i_m.html',1,'']]], + ['tim_5fbase_5fdisable_4',['TIM_Base_Disable',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800ae838122c0e83bc57ad31b546bf2f00e5',1,'general_tim.h']]], + ['tim_5fbase_5finit_5',['TIM_Base_Init',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ga7044214f24a9868ba7e1650b55e639ec',1,'TIM_Base_Init(TIM_SettingsTypeDef *stim): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ga7044214f24a9868ba7e1650b55e639ec',1,'TIM_Base_Init(TIM_SettingsTypeDef *stim): general_tim.c']]], + ['tim_5fbase_5fmspdeinit_6',['TIM_Base_MspDeInit',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ga879e3f1c919c02990736730275367115',1,'TIM_Base_MspDeInit(TIM_HandleTypeDef *htim): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ga879e3f1c919c02990736730275367115',1,'TIM_Base_MspDeInit(TIM_HandleTypeDef *htim): general_tim.c']]], + ['tim_5fbase_5fmspinit_7',['TIM_Base_MspInit',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#gaad47337be7ba2f6c0777c40d7278c931',1,'TIM_Base_MspInit(TIM_HandleTypeDef *htim, TIM_ITModeTypeDef it_mode): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#gaad47337be7ba2f6c0777c40d7278c931',1,'TIM_Base_MspInit(TIM_HandleTypeDef *htim, TIM_ITModeTypeDef it_mode): general_tim.c']]], + ['tim_5fdefault_8',['TIM_DEFAULT',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaeb611874216a4661fb83366b99b9e787ab0869828a4dfd62eaa44868ca27835f8',1,'general_tim.h']]], + ['tim_5fdelay_9',['TIM_Delay',['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html#ga88c552a133cb6e3015453cccab74c07e',1,'TIM_Delay(TIM_HandleTypeDef *htim, uint16_t delay): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html#ga88c552a133cb6e3015453cccab74c07e',1,'TIM_Delay(TIM_HandleTypeDef *htim, uint16_t delay): general_tim.c']]], + ['tim_5fdelay_5fnonblocking_10',['TIM_Delay_NonBlocking',['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html#ga108637af414bff3373059273b815ce9b',1,'TIM_Delay_NonBlocking(TIM_HandleTypeDef *htim, uint16_t delay): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html#ga108637af414bff3373059273b815ce9b',1,'TIM_Delay_NonBlocking(TIM_HandleTypeDef *htim, uint16_t delay): general_tim.c']]], + ['tim_5fdelay_5fstart_11',['TIM_Delay_Start',['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html#ga4c0dfde4e15f677600605348b4e97834',1,'TIM_Delay_Start(TIM_HandleTypeDef *htim): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html#ga4c0dfde4e15f677600605348b4e97834',1,'TIM_Delay_Start(TIM_HandleTypeDef *htim): general_tim.c']]], + ['tim_5fencoder_5finit_12',['TIM_Encoder_Init',['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html#ga8d16c3b7e7c6decc54c5c3d1a8bf0fbc',1,'TIM_Encoder_Init(TIM_EncoderTypeDef *henc1, TIM_HandleTypeDef *htim): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html#ga8d16c3b7e7c6decc54c5c3d1a8bf0fbc',1,'TIM_Encoder_Init(TIM_EncoderTypeDef *henc, TIM_HandleTypeDef *htim): general_tim.c']]], + ['tim_5fencoder_5fread_13',['TIM_Encoder_Read',['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html#gac3bc6525f88c275e47eb864e6d567501',1,'TIM_Encoder_Read(TIM_EncoderTypeDef *henc): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html#gac3bc6525f88c275e47eb864e6d567501',1,'TIM_Encoder_Read(TIM_EncoderTypeDef *henc): general_tim.c']]], + ['tim_5fencoder_5freadswitch_14',['TIM_Encoder_ReadSwitch',['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html#ga117b795017e9e3a357ddefe323412761',1,'TIM_Encoder_ReadSwitch(TIM_EncoderTypeDef *henc): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html#ga117b795017e9e3a357ddefe323412761',1,'TIM_Encoder_ReadSwitch(TIM_EncoderTypeDef *henc): general_tim.c']]], + ['tim_5fencodertypedef_15',['TIM_EncoderTypeDef',['../struct_t_i_m___encoder_type_def.html',1,'']]], + ['tim_5fit_5fmode_16',['TIM_IT_MODE',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaeb611874216a4661fb83366b99b9e787a89ecf1ef6d45ead2efcb7dd30396114c',1,'general_tim.h']]], + ['tim_5fitmodetypedef_17',['TIM_ITModeTypeDef',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#gaeb611874216a4661fb83366b99b9e787',1,'general_tim.h']]], + ['tim_5fmhztickbasetypedef_18',['TIM_MHzTickBaseTypeDef',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#gaa0a51c870325217ac099881f09dd0800',1,'general_tim.h']]], + ['tim_5foc_5fcomparator_5finit_19',['TIM_OC_Comparator_Init',['../group___m_y_l_i_b_s___t_i_m___o_c.html#gae2608ca8023e9a0713af0b4fbfbc1889',1,'TIM_OC_Comparator_Init(TIM_HandleTypeDef *htim, uint32_t TIM_CHANNEL): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___o_c.html#gae2608ca8023e9a0713af0b4fbfbc1889',1,'TIM_OC_Comparator_Init(TIM_HandleTypeDef *htim, uint32_t TIM_CHANNEL): general_tim.c']]], + ['tim_5foutput_5fpwm_5finit_20',['TIM_Output_PWM_Init',['../group___m_y_l_i_b_s___t_i_m___o_c.html#gadb2f465d89f609e035867e980c3a29c6',1,'TIM_Output_PWM_Init(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfigOC, uint32_t TIM_CHANNEL, GPIO_TypeDef *GPIOx, uint32_t PWM_PIN): general_tim.c'],['../group___m_y_l_i_b_s___t_i_m___o_c.html#gadb2f465d89f609e035867e980c3a29c6',1,'TIM_Output_PWM_Init(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfigOC, uint32_t TIM_CHANNEL, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN): general_tim.c']]], + ['tim_5fsettingstypedef_21',['TIM_SettingsTypeDef',['../struct_t_i_m___settings_type_def.html',1,'']]], + ['tim_5ftickbase_5f100ms_22',['TIM_TickBase_100MS',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a18527a2d781eb4365aecd9a3184fc1da',1,'general_tim.h']]], + ['tim_5ftickbase_5f100us_23',['TIM_TickBase_100US',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a096ef0ab67788487f69d8877c6d89b30',1,'general_tim.h']]], + ['tim_5ftickbase_5f10ms_24',['TIM_TickBase_10MS',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a7421a08abd119e71aa99eea5ab5d6daa',1,'general_tim.h']]], + ['tim_5ftickbase_5f10us_25',['TIM_TickBase_10US',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a060b01e890891fd17c8f95b55a94139f',1,'general_tim.h']]], + ['tim_5ftickbase_5f1ms_26',['TIM_TickBase_1MS',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a6a66c5ed1d966c9e30f0219b664d2b25',1,'general_tim.h']]], + ['tim_5ftickbase_5f1us_27',['TIM_TickBase_1US',['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a63df3123d0ddc592b189ed1594456ea2',1,'general_tim.h']]], + ['time_20measurement_28',['Time measurement',['../group___b_e_n_c_h___t_i_m_e.html',1,'']]], + ['tools_29',['Tools',['../group___m_y_l_i_b_s___d_e_f_i_n_e_s.html',1,'General Tools'],['../group___m_y___l_i_b_s___g_p_i_o.html',1,'GPIO Tools'],['../group___m_y___l_i_b_s___s_p_i.html',1,'SPI Tools'],['../group___m_y___l_i_b_s___t_i_m.html',1,'TIM Tools'],['../group___m_y___l_i_b_s___u_a_r_t.html',1,'UART Tools']]], + ['tools_30',['tools',['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html',1,'Delay tools'],['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html',1,'Encoder tools'],['../group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html',1,'General tools'],['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html',1,'General tools'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html',1,'LED tools'],['../group___m_y_l_i_b_s___t_i_m___o_c.html',1,'PWM/OC Channels tools'],['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html',1,'Switch tools']]], + ['total_5fticks_31',['total_ticks',['../struct_bench_time_stats__t.html#a21499b0b19d1ed27f8cea069f674e8ec',1,'BenchTimeStats_t']]], + ['trace_32',['Трассировка <a class="el" href="group___t_r_a_c_e.html">Trace defines</a>',['../index.html#trace_module',1,'']]], + ['trace_20configs_33',['Trace configs',['../group___t_r_a_c_e___c_o_n_f_i_g.html',1,'']]], + ['trace_20defines_34',['Trace defines',['../group___t_r_a_c_e.html',1,'']]], + ['trace_20defines_35',['trace defines',['../group___t_r_a_c_e___g_p_i_o.html',1,'GPIO trace defines'],['../group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html',1,'Hardfault trace defines'],['../group___t_r_a_c_e___s_e_r_i_a_l.html',1,'Serial trace defines']]], + ['trace_2eh_36',['trace.h',['../trace_8h.html',1,'']]], + ['trace_5fgpio_5freset_37',['TRACE_GPIO_RESET',['../group___t_r_a_c_e___g_p_i_o.html#ga69741d88c991112e99fe7a62e025108a',1,'trace.h']]], + ['trace_5fgpio_5fset_38',['TRACE_GPIO_SET',['../group___t_r_a_c_e___g_p_i_o.html#ga02a6a7b273766121db8ad4a1371373eb',1,'trace.h']]], + ['trackerclear_5fall_39',['TrackerClear_All',['../group___t_r_a_c_k_e_r_s.html#ga704f7b9f8c65c9bcec48ce7cb77a2d3b',1,'trackers.h']]], + ['trackerclear_5ferr_40',['TrackerClear_Err',['../group___t_r_a_c_k_e_r_s.html#gae860b6947c6e317e14d40bd7b4b8eb74',1,'trackers.h']]], + ['trackerclear_5fok_41',['TrackerClear_Ok',['../group___t_r_a_c_k_e_r_s.html#ga5dd8bac8c7ab5832019d55d7a68371b9',1,'trackers.h']]], + ['trackerclear_5fuser_42',['TrackerClear_User',['../group___t_r_a_c_k_e_r_s.html#ga063dab1067005e1600ea32531fdf3f8d',1,'trackers.h']]], + ['trackerclear_5fuserall_43',['TrackerClear_UserAll',['../group___t_r_a_c_k_e_r_s.html#gaaec7ec19977bb26fa1919dfe920b82d5',1,'trackers.h']]], + ['trackerclear_5fwarn_44',['TrackerClear_Warn',['../group___t_r_a_c_k_e_r_s.html#ga365a8c60bd13b75154feda649dd21ead',1,'trackers.h']]], + ['trackercnt_5ferr_45',['TrackerCnt_Err',['../group___t_r_a_c_k_e_r_s.html#ga49af29ab3927cad105c1d2b018a767e9',1,'trackers.h']]], + ['trackercnt_5fok_46',['TrackerCnt_Ok',['../group___t_r_a_c_k_e_r_s.html#ga23de0006aa08984cfeddb6aa5e512fa1',1,'trackers.h']]], + ['trackercnt_5fuser_47',['TrackerCnt_User',['../group___t_r_a_c_k_e_r_s.html#ga1b7549afc4a1760b54a9b93b0f6d105e',1,'trackers.h']]], + ['trackercnt_5fwarn_48',['TrackerCnt_Warn',['../group___t_r_a_c_k_e_r_s.html#ga8017fb05a56a1b667244f1f786fa9c57',1,'trackers.h']]], + ['trackerget_5ferr_49',['TrackerGet_Err',['../group___t_r_a_c_k_e_r_s.html#ga9dc91e6b798a081f95f2ccef2c288e5e',1,'trackers.h']]], + ['trackerget_5fok_50',['TrackerGet_Ok',['../group___t_r_a_c_k_e_r_s.html#gab880911066605602a966641682090169',1,'trackers.h']]], + ['trackerget_5fuser_51',['TrackerGet_User',['../group___t_r_a_c_k_e_r_s.html#ga4b08632669043dfdbd219dda03502bdb',1,'trackers.h']]], + ['trackerget_5fwarn_52',['TrackerGet_Warn',['../group___t_r_a_c_k_e_r_s.html#ga47ac59a406ee74d4cd9fe0fbaf63a758',1,'trackers.h']]], + ['trackers_20defines_53',['Trackers defines',['../group___t_r_a_c_k_e_r_s.html',1,'']]], + ['trackers_2eh_54',['trackers.h',['../trackers_8h.html',1,'']]], + ['trackers_5fenable_55',['TRACKERS_ENABLE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#gac9eaedc31ab023ce7d6403999216e496',1,'mylibs_config.h']]], + ['trackertypedef_56',['TrackerTypeDef',['../group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4',1,'trackers.h']]], + ['trackerwrite_5fuser_57',['TrackerWrite_User',['../group___t_r_a_c_k_e_r_s.html#gad2f4062a9ac8c2ab062a364f640ebc51',1,'trackers.h']]] ]; diff --git a/Doc/html/search/all_2.js b/Doc/html/search/all_2.js index 0a30887..28874f5 100644 --- a/Doc/html/search/all_2.js +++ b/Doc/html/search/all_2.js @@ -1,17 +1,19 @@ var searchData= [ - ['cand_5findex_0',['cand_index',['../struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae',1,'EvolveOptimizer_t']]], - ['candidates_1',['candidates',['../struct_evolve_optimizer__t.html#aec67667fd1f1533e693e41c79bc28da4',1,'EvolveOptimizer_t']]], - ['channels_20tools_2',['PWM/OC Channels tools',['../group___m_y_l_i_b_s___t_i_m___o_c.html',1,'']]], - ['check_5fnull_5fptr_5f1_3',['check_null_ptr_1',['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga5d066a5b9781f9437e75d98677489eb9',1,'mylibs_defs.h']]], - ['check_5fnull_5fptr_5f2_4',['check_null_ptr_2',['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga27b363f333cacdccc15f5174e096b5b3',1,'mylibs_defs.h']]], - ['check_5fnull_5fptr_5f3_5',['check_null_ptr_3',['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga838b40542faa9aa273d18f921b21fda2',1,'mylibs_defs.h']]], - ['check_5fnull_5fptr_5f4_6',['check_null_ptr_4',['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga590973be111afc3f9ba15e6939530254',1,'mylibs_defs.h']]], - ['check_5fnull_5fptr_5f5_7',['check_null_ptr_5',['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gaab0aafd7a4a21ec4f338b19269f65490',1,'mylibs_defs.h']]], - ['clearstruct_8',['ClearStruct',['../group___u_t_i_l_s___d_e_f_i_n_e_s.html#gaf5e598848326d48e86167e5099a029be',1,'mylibs_defs.h']]], - ['clk_5fgpio_5falternagefunc_9',['CLK_GPIO_AlternageFunc',['../struct_s_p_i___settings_type_def.html#a3f3748103a0b7861f6700042fd691ba1',1,'SPI_SettingsTypeDef']]], - ['clk_5fgpiox_10',['CLK_GPIOx',['../struct_s_p_i___settings_type_def.html#a6a15d48eccf92959de3a086031fdc979',1,'SPI_SettingsTypeDef']]], - ['clk_5fpin_11',['CLK_PIN',['../struct_s_p_i___settings_type_def.html#a3bcb1ed12da3544e02e6d36493669bdc',1,'SPI_SettingsTypeDef']]], - ['configs_12',['Configs',['../group___m_y_l_i_b_s___c_o_n_f_i_g.html',1,'']]], - ['configs_13',['configs',['../group___e_v_o_l_v_e___c_o_n_f_i_g.html',1,'Evolve configs'],['../group___l_i_b_s___c_o_n_f_i_g.html',1,'Libraries configs'],['../group___t_r_a_c_e___c_o_n_f_i_g.html',1,'Trace configs']]] + ['cand_5findex_0',['cand_index',['../struct_gen_optimizer__t.html#a04a72c1a13e17581e84eaaf3d245bbfc',1,'GenOptimizer_t']]], + ['candidates_1',['candidates',['../struct_gen_optimizer__t.html#a2c9a50ea7d975b9bc22a67e453ab83df',1,'GenOptimizer_t']]], + ['channels_2',['channels',['../struct_bench_time__t.html#a9ae6d45c610be9d4b7628a614ccb06d6',1,'BenchTime_t']]], + ['channels_20tools_3',['PWM/OC Channels tools',['../group___m_y_l_i_b_s___t_i_m___o_c.html',1,'']]], + ['check_5fnull_5fptr_5f1_4',['check_null_ptr_1',['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga5d066a5b9781f9437e75d98677489eb9',1,'mylibs_defs.h']]], + ['check_5fnull_5fptr_5f2_5',['check_null_ptr_2',['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga27b363f333cacdccc15f5174e096b5b3',1,'mylibs_defs.h']]], + ['check_5fnull_5fptr_5f3_6',['check_null_ptr_3',['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga838b40542faa9aa273d18f921b21fda2',1,'mylibs_defs.h']]], + ['check_5fnull_5fptr_5f4_7',['check_null_ptr_4',['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga590973be111afc3f9ba15e6939530254',1,'mylibs_defs.h']]], + ['check_5fnull_5fptr_5f5_8',['check_null_ptr_5',['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gaab0aafd7a4a21ec4f338b19269f65490',1,'mylibs_defs.h']]], + ['clearstruct_9',['ClearStruct',['../group___u_t_i_l_s___d_e_f_i_n_e_s.html#gaf5e598848326d48e86167e5099a029be',1,'mylibs_defs.h']]], + ['clk_5fgpio_5falternagefunc_10',['CLK_GPIO_AlternageFunc',['../struct_s_p_i___settings_type_def.html#a3f3748103a0b7861f6700042fd691ba1',1,'SPI_SettingsTypeDef']]], + ['clk_5fgpiox_11',['CLK_GPIOx',['../struct_s_p_i___settings_type_def.html#a6a15d48eccf92959de3a086031fdc979',1,'SPI_SettingsTypeDef']]], + ['clk_5fpin_12',['CLK_PIN',['../struct_s_p_i___settings_type_def.html#a3bcb1ed12da3544e02e6d36493669bdc',1,'SPI_SettingsTypeDef']]], + ['configs_13',['Configs',['../group___m_y_l_i_b_s___c_o_n_f_i_g.html',1,'']]], + ['configs_14',['configs',['../group___g_e_n___c_o_n_f_i_g.html',1,'Genetic configs'],['../group___l_i_b_s___c_o_n_f_i_g.html',1,'Libraries configs'],['../group___t_r_a_c_e___c_o_n_f_i_g.html',1,'Trace configs']]], + ['count_15',['count',['../struct_bench_time_stats__t.html#a5e95ef31dd0daf973894ef2f034d1f71',1,'BenchTimeStats_t']]] ]; diff --git a/Doc/html/search/all_4.js b/Doc/html/search/all_4.js index 0884da6..7efe25f 100644 --- a/Doc/html/search/all_4.js +++ b/Doc/html/search/all_4.js @@ -1,19 +1,8 @@ var searchData= [ - ['elovle_5fn_5felite_5fcandidate_0',['ELOVLE_N_ELITE_CANDIDATE',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga38607e23d9234524bc7de5869b15b8eb',1,'evolve_optimizer.h']]], - ['enable_5fevolve_5foptimization_1',['ENABLE_EVOLVE_OPTIMIZATION',['../group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga2cac097081444a7a9b040f4b11550e47',1,'mylibs_config.h']]], - ['encoder_20tools_2',['Encoder tools',['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html',1,'']]], - ['encoder_5fdiff_3',['Encoder_Diff',['../struct_t_i_m___encoder_type_def.html#a6f769f027b760a4b496e2b2b77bf54a3',1,'TIM_EncoderTypeDef']]], - ['encoder_5fshdw_4',['Encoder_Shdw',['../struct_t_i_m___encoder_type_def.html#a0dacce3dde7df3122583869d96a372a2',1,'TIM_EncoderTypeDef']]], - ['error_20handler_20defines_5',['Error Handler defines',['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html',1,'']]], - ['evolve_20configs_6',['Evolve configs',['../group___e_v_o_l_v_e___c_o_n_f_i_g.html',1,'']]], - ['evolve_20optimizer_7',['Evolve optimizer',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html',1,'']]], - ['evolve_5fmax_5fcandidates_8',['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_9',['EVOLVE_MAX_PARAMS',['../group___e_v_o_l_v_e___c_o_n_f_i_g.html#ga80d6162495fc3776d8902610657d4fee',1,'mylibs_config.h']]], - ['evolve_5fmutation_5fmax_5fpct_10',['EVOLVE_MUTATION_MAX_PCT',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga861c1c6a503c21441abcec0d57b848bc',1,'evolve_optimizer.h']]], - ['evolve_5fmutation_5fmin_5fpct_11',['EVOLVE_MUTATION_MIN_PCT',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga2f2b1be34ad4eb1bf3267237200cd6c6',1,'evolve_optimizer.h']]], - ['evolve_5foptimizer_2eh_12',['evolve_optimizer.h',['../evolve__optimizer_8h.html',1,'']]], - ['evolveoptimizer_5finit_13',['EvolveOptimizer_Init',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga4e3ea118b5b9068619c57724a925ba21',1,'evolve_optimizer.h']]], - ['evolveoptimizer_5fstep_14',['EvolveOptimizer_Step',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gaef44a1f3298514569cc2b396a92101ef',1,'evolve_optimizer.h']]], - ['evolveoptimizer_5ft_15',['EvolveOptimizer_t',['../struct_evolve_optimizer__t.html',1,'']]] + ['elovle_5fn_5felite_5fcandidate_0',['ELOVLE_N_ELITE_CANDIDATE',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga38607e23d9234524bc7de5869b15b8eb',1,'gen_optimizer.h']]], + ['encoder_20tools_1',['Encoder tools',['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html',1,'']]], + ['encoder_5fdiff_2',['Encoder_Diff',['../struct_t_i_m___encoder_type_def.html#a6f769f027b760a4b496e2b2b77bf54a3',1,'TIM_EncoderTypeDef']]], + ['encoder_5fshdw_3',['Encoder_Shdw',['../struct_t_i_m___encoder_type_def.html#a0dacce3dde7df3122583869d96a372a2',1,'TIM_EncoderTypeDef']]], + ['error_20handler_20defines_4',['Error Handler defines',['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html',1,'']]] ]; diff --git a/Doc/html/search/all_6.js b/Doc/html/search/all_6.js index 8d7f470..81020f3 100644 --- a/Doc/html/search/all_6.js +++ b/Doc/html/search/all_6.js @@ -1,38 +1,49 @@ var searchData= [ - ['gen_5findex_0',['gen_index',['../struct_evolve_optimizer__t.html#ad0f464d7048a9ed0753b61f76f563108',1,'EvolveOptimizer_t']]], - ['gen_5fmut_1',['gen_mut',['../struct_evolve_optimizer__t.html#a3be8c0c34db8429210ff470497a56727',1,'EvolveOptimizer_t']]], - ['general_20tools_2',['General Tools',['../group___m_y_l_i_b_s___d_e_f_i_n_e_s.html',1,'']]], - ['general_20tools_3',['General tools',['../group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html',1,'General tools'],['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html',1,'General tools']]], - ['general_5fgpio_2ec_4',['general_gpio.c',['../general__gpio_8c.html',1,'']]], - ['general_5fgpio_2eh_5',['general_gpio.h',['../general__gpio_8h.html',1,'']]], - ['general_5fspi_2ec_6',['general_spi.c',['../general__spi_8c.html',1,'']]], - ['general_5fspi_2eh_7',['general_spi.h',['../general__spi_8h.html',1,'']]], - ['general_5ftim_2ec_8',['general_tim.c',['../general__tim_8c.html',1,'']]], - ['general_5ftim_2eh_9',['general_tim.h',['../general__tim_8h.html',1,'']]], - ['general_5fuart_2ec_10',['general_uart.c',['../general__uart_8c.html',1,'']]], - ['general_5fuart_2eh_11',['general_uart.h',['../general__uart_8h.html',1,'']]], - ['gpio_20my_5flibs_5fgpio_12',['Модуль GPIO <a class="el" href="group___m_y___l_i_b_s___g_p_i_o.html">GPIO Tools</a>',['../index.html#gpio_module',1,'']]], - ['gpio_20tools_13',['GPIO Tools',['../group___m_y___l_i_b_s___g_p_i_o.html',1,'']]], - ['gpio_20trace_20defines_14',['GPIO trace defines',['../group___t_r_a_c_e___g_p_i_o.html',1,'']]], - ['gpio_5fclock_5fenable_15',['GPIO_Clock_Enable',['../group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6',1,'GPIO_Clock_Enable(GPIO_TypeDef *GPIOx): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6',1,'GPIO_Clock_Enable(GPIO_TypeDef *GPIOx): general_gpio.c']]], - ['gpio_5fled_5fblink_5fstart_16',['GPIO_LED_Blink_Start',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9',1,'GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9',1,'GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period): general_gpio.c']]], - ['gpio_5fled_5fdynamic_5fhandle_17',['GPIO_LED_Dynamic_Handle',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2',1,'GPIO_LED_Dynamic_Handle(GPIO_LEDTypeDef *led): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2',1,'GPIO_LED_Dynamic_Handle(GPIO_LEDTypeDef *led): general_gpio.c']]], - ['gpio_5fled_5ffading_5fstart_18',['GPIO_LED_Fading_Start',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a',1,'GPIO_LED_Fading_Start(GPIO_LEDTypeDef *led, uint32_t period): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a',1,'GPIO_LED_Fading_Start(GPIO_LEDTypeDef *led, uint32_t period): general_gpio.c']]], - ['gpio_5fled_5finit_19',['GPIO_LED_Init',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084',1,'GPIO_LED_Init(GPIO_LEDTypeDef *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_On_State): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084',1,'GPIO_LED_Init(GPIO_LEDTypeDef *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_ActiveLevel): general_gpio.c']]], - ['gpio_5fled_5foff_20',['GPIO_LED_Off',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357',1,'GPIO_LED_Off(GPIO_LEDTypeDef *led): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357',1,'GPIO_LED_Off(GPIO_LEDTypeDef *led): general_gpio.c']]], - ['gpio_5fled_5fon_21',['GPIO_LED_On',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c',1,'GPIO_LED_On(GPIO_LEDTypeDef *led): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c',1,'GPIO_LED_On(GPIO_LEDTypeDef *led): general_gpio.c']]], - ['gpio_5fled_5fset_22',['GPIO_LED_Set',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2',1,'GPIO_LED_Set(GPIO_LEDTypeDef *led, uint8_t led_state): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2',1,'GPIO_LED_Set(GPIO_LEDTypeDef *led, uint8_t led_state): general_gpio.c']]], - ['gpio_5fledstatetypedef_23',['GPIO_LEDStateTypeDef',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1',1,'general_gpio.h']]], - ['gpio_5fledtypedef_24',['GPIO_LEDTypeDef',['../struct_g_p_i_o___l_e_d_type_def.html',1,'']]], - ['gpio_5fpin_5frx_25',['GPIO_PIN_RX',['../struct_u_a_r_t___settings_type_def.html#a3fba2b52788fe453348b5d92ed52ba49',1,'UART_SettingsTypeDef']]], - ['gpio_5fpin_5fsw_26',['GPIO_PIN_SW',['../struct_t_i_m___encoder_type_def.html#a6973108a83d2a3ea4fc3e0e8a501af80',1,'TIM_EncoderTypeDef']]], - ['gpio_5fpin_5fti1_27',['GPIO_PIN_TI1',['../struct_t_i_m___encoder_type_def.html#a4fc05ef011205a6702cb3d006bab677e',1,'TIM_EncoderTypeDef']]], - ['gpio_5fpin_5fti2_28',['GPIO_PIN_TI2',['../struct_t_i_m___encoder_type_def.html#a67ad037b92162546763fc9c425b5e3c5',1,'TIM_EncoderTypeDef']]], - ['gpio_5fpin_5ftx_29',['GPIO_PIN_TX',['../struct_u_a_r_t___settings_type_def.html#a5f1babfcfb436cd77f5614253c0a5bef',1,'UART_SettingsTypeDef']]], - ['gpio_5fread_5fswitch_30',['GPIO_Read_Switch',['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#ga960b24335b2026abcad126ab8c422d70',1,'GPIO_Read_Switch(GPIO_SwitchTypeDef *swstart): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#ga960b24335b2026abcad126ab8c422d70',1,'GPIO_Read_Switch(GPIO_SwitchTypeDef *sw): general_gpio.c']]], - ['gpio_5fswitch_5finit_31',['GPIO_Switch_Init',['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7',1,'GPIO_Switch_Init(GPIO_SwitchTypeDef *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_On_State): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7',1,'GPIO_Switch_Init(GPIO_SwitchTypeDef *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_ActiveLevel): general_gpio.c']]], - ['gpio_5fswitchtypedef_32',['GPIO_SwitchTypeDef',['../struct_g_p_i_o___switch_type_def.html',1,'']]], - ['gpio_5ftrace_5fenable_33',['GPIO_TRACE_ENABLE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#ga4222e0e400ad81737cefcabeb03fd23b',1,'mylibs_config.h']]], - ['gpiox_34',['GPIOx',['../struct_t_i_m___encoder_type_def.html#ad29873fc8cdc71462e6d8744621120e9',1,'TIM_EncoderTypeDef::GPIOx'],['../struct_u_a_r_t___settings_type_def.html#af6f9910d065bae715cdb4a1024143a8f',1,'UART_SettingsTypeDef::GPIOx']]] + ['gen_5findex_0',['gen_index',['../struct_gen_optimizer__t.html#a8f226c85e9bb034cb811aa0366bb191c',1,'GenOptimizer_t']]], + ['gen_5fmax_5fcandidates_1',['GEN_MAX_CANDIDATES',['../group___g_e_n___c_o_n_f_i_g.html#ga201cffde04ebc6540869c74bd1dae869',1,'mylibs_config.h']]], + ['gen_5fmax_5fparams_2',['GEN_MAX_PARAMS',['../group___g_e_n___c_o_n_f_i_g.html#ga8daf4b266a95353d580bd7946f47c0ab',1,'mylibs_config.h']]], + ['gen_5fmut_3',['gen_mut',['../struct_gen_optimizer__t.html#acfeb93ef4823e09473ddba52fae9a6b1',1,'GenOptimizer_t']]], + ['gen_5fmutation_5fmax_5fpct_4',['GEN_MUTATION_MAX_PCT',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga48dca8f0a0c9b96d02236ef76ac827fd',1,'gen_optimizer.h']]], + ['gen_5fmutation_5fmin_5fpct_5',['GEN_MUTATION_MIN_PCT',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga3db7bdf57549722427e1e72dcaa87068',1,'gen_optimizer.h']]], + ['gen_5foptimization_5fenable_6',['GEN_OPTIMIZATION_ENABLE',['../group___g_e_n___c_o_n_f_i_g.html#gae6d1db3c0b21f67cb0db2673d207b62c',1,'mylibs_config.h']]], + ['gen_5foptimizer_2eh_7',['gen_optimizer.h',['../gen__optimizer_8h.html',1,'']]], + ['general_20tools_8',['General Tools',['../group___m_y_l_i_b_s___d_e_f_i_n_e_s.html',1,'']]], + ['general_20tools_9',['General tools',['../group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html',1,'General tools'],['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html',1,'General tools']]], + ['general_5fgpio_2ec_10',['general_gpio.c',['../general__gpio_8c.html',1,'']]], + ['general_5fgpio_2eh_11',['general_gpio.h',['../general__gpio_8h.html',1,'']]], + ['general_5fspi_2ec_12',['general_spi.c',['../general__spi_8c.html',1,'']]], + ['general_5fspi_2eh_13',['general_spi.h',['../general__spi_8h.html',1,'']]], + ['general_5ftim_2ec_14',['general_tim.c',['../general__tim_8c.html',1,'']]], + ['general_5ftim_2eh_15',['general_tim.h',['../general__tim_8h.html',1,'']]], + ['general_5fuart_2ec_16',['general_uart.c',['../general__uart_8c.html',1,'']]], + ['general_5fuart_2eh_17',['general_uart.h',['../general__uart_8h.html',1,'']]], + ['genetic_20configs_18',['Genetic configs',['../group___g_e_n___c_o_n_f_i_g.html',1,'']]], + ['genetic_20optimizer_19',['Genetic optimizer',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html',1,'']]], + ['genoptimizer_5finit_20',['GenOptimizer_Init',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga2db1df46b4082ad9280ef4344fdf4e8a',1,'gen_optimizer.h']]], + ['genoptimizer_5fstep_21',['GenOptimizer_Step',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html#gaa9a4c4f43f7beb926c85bd4817ebd628',1,'gen_optimizer.h']]], + ['genoptimizer_5ft_22',['GenOptimizer_t',['../struct_gen_optimizer__t.html',1,'']]], + ['gpio_20my_5flibs_5fgpio_23',['Модуль GPIO <a class="el" href="group___m_y___l_i_b_s___g_p_i_o.html">GPIO Tools</a>',['../index.html#gpio_module',1,'']]], + ['gpio_20tools_24',['GPIO Tools',['../group___m_y___l_i_b_s___g_p_i_o.html',1,'']]], + ['gpio_20trace_20defines_25',['GPIO trace defines',['../group___t_r_a_c_e___g_p_i_o.html',1,'']]], + ['gpio_5fclock_5fenable_26',['GPIO_Clock_Enable',['../group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6',1,'GPIO_Clock_Enable(GPIO_TypeDef *GPIOx): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6',1,'GPIO_Clock_Enable(GPIO_TypeDef *GPIOx): general_gpio.c']]], + ['gpio_5fled_5fblink_5fstart_27',['GPIO_LED_Blink_Start',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9',1,'GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9',1,'GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period): general_gpio.c']]], + ['gpio_5fled_5fdynamic_5fhandle_28',['GPIO_LED_Dynamic_Handle',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2',1,'GPIO_LED_Dynamic_Handle(GPIO_LEDTypeDef *led): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2',1,'GPIO_LED_Dynamic_Handle(GPIO_LEDTypeDef *led): general_gpio.c']]], + ['gpio_5fled_5ffading_5fstart_29',['GPIO_LED_Fading_Start',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a',1,'GPIO_LED_Fading_Start(GPIO_LEDTypeDef *led, uint32_t period): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a',1,'GPIO_LED_Fading_Start(GPIO_LEDTypeDef *led, uint32_t period): general_gpio.c']]], + ['gpio_5fled_5finit_30',['GPIO_LED_Init',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084',1,'GPIO_LED_Init(GPIO_LEDTypeDef *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_On_State): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084',1,'GPIO_LED_Init(GPIO_LEDTypeDef *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_ActiveLevel): general_gpio.c']]], + ['gpio_5fled_5foff_31',['GPIO_LED_Off',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357',1,'GPIO_LED_Off(GPIO_LEDTypeDef *led): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357',1,'GPIO_LED_Off(GPIO_LEDTypeDef *led): general_gpio.c']]], + ['gpio_5fled_5fon_32',['GPIO_LED_On',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c',1,'GPIO_LED_On(GPIO_LEDTypeDef *led): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c',1,'GPIO_LED_On(GPIO_LEDTypeDef *led): general_gpio.c']]], + ['gpio_5fled_5fset_33',['GPIO_LED_Set',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2',1,'GPIO_LED_Set(GPIO_LEDTypeDef *led, uint8_t led_state): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2',1,'GPIO_LED_Set(GPIO_LEDTypeDef *led, uint8_t led_state): general_gpio.c']]], + ['gpio_5fledstatetypedef_34',['GPIO_LEDStateTypeDef',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1',1,'general_gpio.h']]], + ['gpio_5fledtypedef_35',['GPIO_LEDTypeDef',['../struct_g_p_i_o___l_e_d_type_def.html',1,'']]], + ['gpio_5fpin_5frx_36',['GPIO_PIN_RX',['../struct_u_a_r_t___settings_type_def.html#a3fba2b52788fe453348b5d92ed52ba49',1,'UART_SettingsTypeDef']]], + ['gpio_5fpin_5fsw_37',['GPIO_PIN_SW',['../struct_t_i_m___encoder_type_def.html#a6973108a83d2a3ea4fc3e0e8a501af80',1,'TIM_EncoderTypeDef']]], + ['gpio_5fpin_5fti1_38',['GPIO_PIN_TI1',['../struct_t_i_m___encoder_type_def.html#a4fc05ef011205a6702cb3d006bab677e',1,'TIM_EncoderTypeDef']]], + ['gpio_5fpin_5fti2_39',['GPIO_PIN_TI2',['../struct_t_i_m___encoder_type_def.html#a67ad037b92162546763fc9c425b5e3c5',1,'TIM_EncoderTypeDef']]], + ['gpio_5fpin_5ftx_40',['GPIO_PIN_TX',['../struct_u_a_r_t___settings_type_def.html#a5f1babfcfb436cd77f5614253c0a5bef',1,'UART_SettingsTypeDef']]], + ['gpio_5fread_5fswitch_41',['GPIO_Read_Switch',['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#ga960b24335b2026abcad126ab8c422d70',1,'GPIO_Read_Switch(GPIO_SwitchTypeDef *swstart): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#ga960b24335b2026abcad126ab8c422d70',1,'GPIO_Read_Switch(GPIO_SwitchTypeDef *sw): general_gpio.c']]], + ['gpio_5fswitch_5finit_42',['GPIO_Switch_Init',['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7',1,'GPIO_Switch_Init(GPIO_SwitchTypeDef *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_On_State): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7',1,'GPIO_Switch_Init(GPIO_SwitchTypeDef *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_ActiveLevel): general_gpio.c']]], + ['gpio_5fswitchtypedef_43',['GPIO_SwitchTypeDef',['../struct_g_p_i_o___switch_type_def.html',1,'']]], + ['gpio_5ftrace_5fenable_44',['GPIO_TRACE_ENABLE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#ga4222e0e400ad81737cefcabeb03fd23b',1,'mylibs_config.h']]], + ['gpiox_45',['GPIOx',['../struct_t_i_m___encoder_type_def.html#ad29873fc8cdc71462e6d8744621120e9',1,'TIM_EncoderTypeDef::GPIOx'],['../struct_u_a_r_t___settings_type_def.html#af6f9910d065bae715cdb4a1024143a8f',1,'UART_SettingsTypeDef::GPIOx']]] ]; diff --git a/Doc/html/search/all_7.js b/Doc/html/search/all_7.js index abe2462..3fb8b1e 100644 --- a/Doc/html/search/all_7.js +++ b/Doc/html/search/all_7.js @@ -5,15 +5,16 @@ var searchData= ['handler_20defines_2',['Error Handler defines',['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html',1,'']]], ['hardfault_20trace_20defines_3',['Hardfault trace defines',['../group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html',1,'']]], ['hardfault_5fserial_5ftrace_4',['HARDFAULT_SERIAL_TRACE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#ga47f454f804b4dbc26cae079e8d8641e6',1,'mylibs_config.h']]], - ['hf_5fcheckrecovered_5',['HF_CheckRecovered',['../group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#ga03f8b6f3b537ee1c8e91065c60db504f',1,'trace.h']]], - ['hf_5fflash_5faddr_6',['HF_FLASH_ADDR',['../group___t_r_a_c_e___c_o_n_f_i_g.html#ga0c602733a4a359bf8c095d71cd4d0f63',1,'mylibs_config.h']]], - ['hf_5fhandlefault_7',['HF_HandleFault',['../group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#gadd8e10e7ec3b0204f7f92062ecd452f7',1,'trace.h']]], - ['hf_5fram_5fend_8',['HF_RAM_END',['../group___t_r_a_c_e___c_o_n_f_i_g.html#ga92d0d14732edb7dfa21d483304bdb051',1,'mylibs_config.h']]], - ['hf_5frtt_5ftag_5fbase_9',['HF_RTT_TAG_BASE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#gadc960255719c7eff4bdfaa850be9b313',1,'mylibs_config.h']]], - ['hf_5frtt_5ftail_5fsize_10',['HF_RTT_TAIL_SIZE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#gafcc7ea03d4df8f1909e580b519a7f3ca',1,'mylibs_config.h']]], - ['hf_5fstack_5fdump_5fwords_11',['HF_STACK_DUMP_WORDS',['../group___t_r_a_c_e___c_o_n_f_i_g.html#gaa31234688b333a505aaa57b8ecdedf5b',1,'mylibs_config.h']]], - ['hf_5fstackframe_5ft_12',['HF_StackFrame_t',['../struct_h_f___stack_frame__t.html',1,'']]], - ['hspi_13',['hspi',['../struct_s_p_i___settings_type_def.html#ad203d8b8d67e4f477d002d15b03ba422',1,'SPI_SettingsTypeDef']]], - ['htim_14',['htim',['../struct_t_i_m___settings_type_def.html#ada49efdbd35a8e442c3cff630d42f34c',1,'TIM_SettingsTypeDef::htim'],['../struct_t_i_m___encoder_type_def.html#adc80bd5a90444c31d84157f35c59b95c',1,'TIM_EncoderTypeDef::htim']]], - ['huart_15',['huart',['../struct_u_a_r_t___settings_type_def.html#accf2c9448a3ea8eb3b8c25a569276fea',1,'UART_SettingsTypeDef']]] + ['hbt_5',['hbt',['../group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d',1,'bench_time.h']]], + ['hf_5fcheckrecovered_6',['HF_CheckRecovered',['../group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#ga03f8b6f3b537ee1c8e91065c60db504f',1,'trace.h']]], + ['hf_5fflash_5faddr_7',['HF_FLASH_ADDR',['../group___t_r_a_c_e___c_o_n_f_i_g.html#ga0c602733a4a359bf8c095d71cd4d0f63',1,'mylibs_config.h']]], + ['hf_5fhandlefault_8',['HF_HandleFault',['../group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#gadd8e10e7ec3b0204f7f92062ecd452f7',1,'trace.h']]], + ['hf_5fram_5fend_9',['HF_RAM_END',['../group___t_r_a_c_e___c_o_n_f_i_g.html#ga92d0d14732edb7dfa21d483304bdb051',1,'mylibs_config.h']]], + ['hf_5frtt_5ftag_5fbase_10',['HF_RTT_TAG_BASE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#gadc960255719c7eff4bdfaa850be9b313',1,'mylibs_config.h']]], + ['hf_5frtt_5ftail_5fsize_11',['HF_RTT_TAIL_SIZE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#gafcc7ea03d4df8f1909e580b519a7f3ca',1,'mylibs_config.h']]], + ['hf_5fstack_5fdump_5fwords_12',['HF_STACK_DUMP_WORDS',['../group___t_r_a_c_e___c_o_n_f_i_g.html#gaa31234688b333a505aaa57b8ecdedf5b',1,'mylibs_config.h']]], + ['hf_5fstackframe_5ft_13',['HF_StackFrame_t',['../struct_h_f___stack_frame__t.html',1,'']]], + ['hspi_14',['hspi',['../struct_s_p_i___settings_type_def.html#ad203d8b8d67e4f477d002d15b03ba422',1,'SPI_SettingsTypeDef']]], + ['htim_15',['htim',['../struct_t_i_m___settings_type_def.html#ada49efdbd35a8e442c3cff630d42f34c',1,'TIM_SettingsTypeDef::htim'],['../struct_t_i_m___encoder_type_def.html#adc80bd5a90444c31d84157f35c59b95c',1,'TIM_EncoderTypeDef::htim']]], + ['huart_16',['huart',['../struct_u_a_r_t___settings_type_def.html#accf2c9448a3ea8eb3b8c25a569276fea',1,'UART_SettingsTypeDef']]] ]; diff --git a/Doc/html/search/all_8.js b/Doc/html/search/all_8.js index 01381de..61586fa 100644 --- a/Doc/html/search/all_8.js +++ b/Doc/html/search/all_8.js @@ -2,9 +2,10 @@ var searchData= [ ['if_5fassert_5fusertracker_0',['if_assert_usertracker',['../group___t_r_a_c_k_e_r_s.html#gad91d8ca89074270fc040c0449e57cf07',1,'trackers.h']]], ['include_5fbit_5faccess_5flib_1',['INCLUDE_BIT_ACCESS_LIB',['../group___l_i_b_s___c_o_n_f_i_g.html#gaf4ddb2a71ec0d05c2480e197cd17c0be',1,'mylibs_config.h']]], - ['include_5fevolve_5foptimizer_2',['INCLUDE_EVOLVE_OPTIMIZER',['../group___l_i_b_s___c_o_n_f_i_g.html#ga66560656d080d6551627a19dfb847c66',1,'mylibs_config.h']]], + ['include_5fgen_5foptimizer_2',['INCLUDE_GEN_OPTIMIZER',['../group___l_i_b_s___c_o_n_f_i_g.html#ga3cdc9ef47fd3ff080d38481295327692',1,'mylibs_config.h']]], ['include_5fgeneral_5fperiph_5flibs_3',['INCLUDE_GENERAL_PERIPH_LIBS',['../group___l_i_b_s___c_o_n_f_i_g.html#ga181a46326e46b60afb160190832c7281',1,'mylibs_config.h']]], ['include_5ftrace_5flib_4',['INCLUDE_TRACE_LIB',['../group___l_i_b_s___c_o_n_f_i_g.html#ga0a3ca94b616997069dd53e2c6c2687d7',1,'mylibs_config.h']]], ['include_5ftrackers_5flib_5',['INCLUDE_TRACKERS_LIB',['../group___l_i_b_s___c_o_n_f_i_g.html#ga4403055986b70bb02b8d37073a122e32',1,'mylibs_config.h']]], - ['init_20defines_6',['Init defines',['../group___g_p_i_o___i_n_i_t.html',1,'Init defines'],['../group___s_p_i___i_n_i_t.html',1,'Init defines'],['../group___t_i_m___i_n_i_t.html',1,'Init defines'],['../group___u_a_r_t___i_n_i_t.html',1,'Init defines']]] + ['init_20defines_6',['Init defines',['../group___g_p_i_o___i_n_i_t.html',1,'Init defines'],['../group___s_p_i___i_n_i_t.html',1,'Init defines'],['../group___t_i_m___i_n_i_t.html',1,'Init defines'],['../group___u_a_r_t___i_n_i_t.html',1,'Init defines']]], + ['is_5frunning_7',['is_running',['../struct_bench_time_channel__t.html#a0f80bb194231df7921712d20bac603c9',1,'BenchTimeChannel_t']]] ]; diff --git a/Doc/html/search/all_9.js b/Doc/html/search/all_9.js index 8a2f81a..959bc31 100644 --- a/Doc/html/search/all_9.js +++ b/Doc/html/search/all_9.js @@ -1,22 +1,23 @@ var searchData= [ - ['led_20tools_0',['LED tools',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html',1,'']]], - ['led_5factivelvl_1',['LED_ActiveLvl',['../struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816',1,'GPIO_LEDTypeDef']]], - ['led_5fis_5fblinking_2',['LED_IS_BLINKING',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb',1,'general_gpio.h']]], - ['led_5fis_5ffading_3',['LED_IS_FADING',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b',1,'general_gpio.h']]], - ['led_5fis_5foff_4',['LED_IS_OFF',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae',1,'general_gpio.h']]], - ['led_5fis_5fon_5',['LED_IS_ON',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea',1,'general_gpio.h']]], - ['led_5foff_6',['LED_OFF',['../group___g_p_i_o___i_n_i_t.html#ga80700bb63bd56ebabbb4728aa433fd29',1,'general_gpio.h']]], - ['led_5fon_7',['LED_ON',['../group___g_p_i_o___i_n_i_t.html#gaf2e697ac60e05813d45ea2c9c9e79c25',1,'general_gpio.h']]], - ['led_5fperiod_8',['LED_Period',['../struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec',1,'GPIO_LEDTypeDef']]], - ['led_5fpin_9',['LED_Pin',['../struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978',1,'GPIO_LEDTypeDef']]], - ['led_5fport_10',['LED_Port',['../struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf',1,'GPIO_LEDTypeDef']]], - ['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,'']]], - ['local_5ftime_14',['local_time',['../group___l_i_b_s___c_o_n_f_i_g.html#ga9c853b02c22f26023c34d1d404b6d653',1,'local_time: mylibs_config.h'],['../group___g_p_i_o___i_n_i_t.html#ga9c853b02c22f26023c34d1d404b6d653',1,'local_time: general_gpio.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#a93f628397c2f8d4027f2906752b650df',1,'EvolveOptimizer_t']]], - ['lr_18',['lr',['../struct_h_f___stack_frame__t.html#a6e51904297f7725e96d5b5fb291ef577',1,'HF_StackFrame_t']]] + ['last_5fticks_0',['last_ticks',['../struct_bench_time_stats__t.html#a2c739e1db6b26ceac5db3f2c44c177a0',1,'BenchTimeStats_t']]], + ['led_20tools_1',['LED tools',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html',1,'']]], + ['led_5factivelvl_2',['LED_ActiveLvl',['../struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816',1,'GPIO_LEDTypeDef']]], + ['led_5fis_5fblinking_3',['LED_IS_BLINKING',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb',1,'general_gpio.h']]], + ['led_5fis_5ffading_4',['LED_IS_FADING',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b',1,'general_gpio.h']]], + ['led_5fis_5foff_5',['LED_IS_OFF',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae',1,'general_gpio.h']]], + ['led_5fis_5fon_6',['LED_IS_ON',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea',1,'general_gpio.h']]], + ['led_5foff_7',['LED_OFF',['../group___g_p_i_o___i_n_i_t.html#ga80700bb63bd56ebabbb4728aa433fd29',1,'general_gpio.h']]], + ['led_5fon_8',['LED_ON',['../group___g_p_i_o___i_n_i_t.html#gaf2e697ac60e05813d45ea2c9c9e79c25',1,'general_gpio.h']]], + ['led_5fperiod_9',['LED_Period',['../struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec',1,'GPIO_LEDTypeDef']]], + ['led_5fpin_10',['LED_Pin',['../struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978',1,'GPIO_LEDTypeDef']]], + ['led_5fport_11',['LED_Port',['../struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf',1,'GPIO_LEDTypeDef']]], + ['led_5fpwm_5fticks_12',['LED_PWM_TICKS',['../group___g_p_i_o___i_n_i_t.html#ga1d42e219765ec526d99e306638ac0023',1,'general_gpio.h']]], + ['libraries_20configs_13',['Libraries configs',['../group___l_i_b_s___c_o_n_f_i_g.html',1,'']]], + ['libs_14',['My Libs',['../group___m_y_l_i_b_s___a_l_l.html',1,'']]], + ['local_5ftime_15',['local_time',['../group___l_i_b_s___c_o_n_f_i_g.html#ga9c853b02c22f26023c34d1d404b6d653',1,'local_time: mylibs_config.h'],['../group___g_p_i_o___i_n_i_t.html#ga9c853b02c22f26023c34d1d404b6d653',1,'local_time: general_gpio.h']]], + ['log_5flevel_16',['LOG_LEVEL',['../group___t_r_a_c_e___c_o_n_f_i_g.html#ga0b87e0d3bf5853bcbb0b66a7c48fdc05',1,'mylibs_config.h']]], + ['log_5fprintf_17',['log_printf',['../group___t_r_a_c_e___s_e_r_i_a_l.html#ga730fb7b8d0bbb348dca73c15bd0e0b26',1,'trace.h']]], + ['loss_18',['loss',['../struct_gen_optimizer__t.html#a8b5066935d99f2fc7ebb94cc3652fc73',1,'GenOptimizer_t']]], + ['lr_19',['lr',['../struct_h_f___stack_frame__t.html#a6e51904297f7725e96d5b5fb291ef577',1,'HF_StackFrame_t']]] ]; diff --git a/Doc/html/search/all_a.js b/Doc/html/search/all_a.js index 45e0ffa..e17cff4 100644 --- a/Doc/html/search/all_a.js +++ b/Doc/html/search/all_a.js @@ -1,26 +1,29 @@ var searchData= [ - ['miso_5fgpio_5falternagefunc_0',['MISO_GPIO_AlternageFunc',['../struct_s_p_i___settings_type_def.html#aecd7a5c6e205335b8ed229d74cd35d14',1,'SPI_SettingsTypeDef']]], - ['miso_5fgpiox_1',['MISO_GPIOx',['../struct_s_p_i___settings_type_def.html#a0d55a2941854f61934487f3d209cfa95',1,'SPI_SettingsTypeDef']]], - ['miso_5fpin_2',['MISO_PIN',['../struct_s_p_i___settings_type_def.html#a3366c654d7ec6dd41c6a0b504dc8509a',1,'SPI_SettingsTypeDef']]], - ['mosi_5fgpio_5falternagefunc_3',['MOSI_GPIO_AlternageFunc',['../struct_s_p_i___settings_type_def.html#afbe75a1c36650a4a9b41fa706a4c7eab',1,'SPI_SettingsTypeDef']]], - ['mosi_5fgpiox_4',['MOSI_GPIOx',['../struct_s_p_i___settings_type_def.html#a0af3bdb273818ff97eb4ff3cff918820',1,'SPI_SettingsTypeDef']]], - ['mosi_5fpin_5',['MOSI_PIN',['../struct_s_p_i___settings_type_def.html#a961208869faf4a7369aaf4edde75f176',1,'SPI_SettingsTypeDef']]], - ['msdelay_6',['msDelay',['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gabeb97579daeb622c6651ed03c4a27479',1,'mylibs_defs.h']]], - ['msdelaystart_7',['msDelayStart',['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga8a5051b1292d1019fe8dd3fc5521ab25',1,'mylibs_defs.h']]], - ['msdelaywaitdone_8',['msDelayWaitDone',['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gaed082c07b9fc4d1894330d885b9b5518',1,'mylibs_defs.h']]], - ['msdelaywhileactive_9',['msDelayWhileActive',['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga0b97e172659a59ee4fa56f851643ae85',1,'mylibs_defs.h']]], - ['mutation_5famp_10',['mutation_amp',['../struct_evolve_optimizer__t.html#af779c7aeba0053e36cee7aade160f1c8',1,'EvolveOptimizer_t']]], - ['my_20libs_11',['My Libs',['../group___m_y_l_i_b_s___a_l_l.html',1,'']]], - ['my_5flibs_5fgpio_12',['Модуль GPIO <a class="el" href="group___m_y___l_i_b_s___g_p_i_o.html">GPIO Tools</a>',['../index.html#gpio_module',1,'']]], - ['my_5flibs_5fspi_13',['Модуль SPI <a class="el" href="group___m_y___l_i_b_s___s_p_i.html">SPI Tools</a>',['../index.html#spi_module',1,'']]], - ['my_5flibs_5ftim_14',['Модуль таймеров <a class="el" href="group___m_y___l_i_b_s___t_i_m.html">TIM Tools</a>',['../index.html#tim_module',1,'']]], - ['my_5flibs_5fuart_15',['Модуль UART <a class="el" href="group___m_y___l_i_b_s___u_a_r_t.html">UART Tools</a>',['../index.html#uart_module',1,'']]], - ['my_5fprintf_16',['my_printf',['../group___t_r_a_c_e___s_e_r_i_a_l.html#gae9b9b8a611e291a2f2aa5abf99f3ebaa',1,'trace.h']]], - ['mylibs_17',['MyLibs',['../index.html',1,'']]], - ['mylibs_5fconfig_2eh_18',['mylibs_config.h',['../mylibs__config_8h.html',1,'']]], - ['mylibs_5fdefines_19',['Общие утилиты (<a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Tools</a>)',['../index.html#utils_module',1,'']]], - ['mylibs_5fdefs_2eh_20',['mylibs_defs.h',['../mylibs__defs_8h.html',1,'']]], - ['mylibs_5ferror_5fhandler_21',['MyLibs_Error_Handler',['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae110df81afd885a390bbeb152d7b709f',1,'mylibs_defs.h']]], - ['mylibs_5finclude_2eh_22',['mylibs_include.h',['../mylibs__include_8h.html',1,'']]] + ['max_5fticks_0',['max_ticks',['../struct_bench_time_stats__t.html#a3da36eb65b03ba995b5905b4650ea93c',1,'BenchTimeStats_t']]], + ['measurement_1',['Time measurement',['../group___b_e_n_c_h___t_i_m_e.html',1,'']]], + ['min_5fticks_2',['min_ticks',['../struct_bench_time_stats__t.html#a39b71a5d48c4a51a553a26a9fb961ac8',1,'BenchTimeStats_t']]], + ['miso_5fgpio_5falternagefunc_3',['MISO_GPIO_AlternageFunc',['../struct_s_p_i___settings_type_def.html#aecd7a5c6e205335b8ed229d74cd35d14',1,'SPI_SettingsTypeDef']]], + ['miso_5fgpiox_4',['MISO_GPIOx',['../struct_s_p_i___settings_type_def.html#a0d55a2941854f61934487f3d209cfa95',1,'SPI_SettingsTypeDef']]], + ['miso_5fpin_5',['MISO_PIN',['../struct_s_p_i___settings_type_def.html#a3366c654d7ec6dd41c6a0b504dc8509a',1,'SPI_SettingsTypeDef']]], + ['mosi_5fgpio_5falternagefunc_6',['MOSI_GPIO_AlternageFunc',['../struct_s_p_i___settings_type_def.html#afbe75a1c36650a4a9b41fa706a4c7eab',1,'SPI_SettingsTypeDef']]], + ['mosi_5fgpiox_7',['MOSI_GPIOx',['../struct_s_p_i___settings_type_def.html#a0af3bdb273818ff97eb4ff3cff918820',1,'SPI_SettingsTypeDef']]], + ['mosi_5fpin_8',['MOSI_PIN',['../struct_s_p_i___settings_type_def.html#a961208869faf4a7369aaf4edde75f176',1,'SPI_SettingsTypeDef']]], + ['msdelay_9',['msDelay',['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gabeb97579daeb622c6651ed03c4a27479',1,'mylibs_defs.h']]], + ['msdelaystart_10',['msDelayStart',['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga8a5051b1292d1019fe8dd3fc5521ab25',1,'mylibs_defs.h']]], + ['msdelaywaitdone_11',['msDelayWaitDone',['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gaed082c07b9fc4d1894330d885b9b5518',1,'mylibs_defs.h']]], + ['msdelaywhileactive_12',['msDelayWhileActive',['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga0b97e172659a59ee4fa56f851643ae85',1,'mylibs_defs.h']]], + ['mutation_5famp_13',['mutation_amp',['../struct_gen_optimizer__t.html#ad4dc0e53b3ca6bf2a642dfe7a1d1f26c',1,'GenOptimizer_t']]], + ['my_20libs_14',['My Libs',['../group___m_y_l_i_b_s___a_l_l.html',1,'']]], + ['my_5flibs_5fgpio_15',['Модуль GPIO <a class="el" href="group___m_y___l_i_b_s___g_p_i_o.html">GPIO Tools</a>',['../index.html#gpio_module',1,'']]], + ['my_5flibs_5fspi_16',['Модуль SPI <a class="el" href="group___m_y___l_i_b_s___s_p_i.html">SPI Tools</a>',['../index.html#spi_module',1,'']]], + ['my_5flibs_5ftim_17',['Модуль таймеров <a class="el" href="group___m_y___l_i_b_s___t_i_m.html">TIM Tools</a>',['../index.html#tim_module',1,'']]], + ['my_5flibs_5fuart_18',['Модуль UART <a class="el" href="group___m_y___l_i_b_s___u_a_r_t.html">UART Tools</a>',['../index.html#uart_module',1,'']]], + ['my_5fprintf_19',['my_printf',['../group___t_r_a_c_e___s_e_r_i_a_l.html#gae9b9b8a611e291a2f2aa5abf99f3ebaa',1,'trace.h']]], + ['mylibs_20',['MyLibs',['../index.html',1,'']]], + ['mylibs_5fconfig_2eh_21',['mylibs_config.h',['../mylibs__config_8h.html',1,'']]], + ['mylibs_5fdefines_22',['Общие утилиты (<a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Tools</a>)',['../index.html#utils_module',1,'']]], + ['mylibs_5fdefs_2eh_23',['mylibs_defs.h',['../mylibs__defs_8h.html',1,'']]], + ['mylibs_5ferror_5fhandler_24',['MyLibs_Error_Handler',['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae110df81afd885a390bbeb152d7b709f',1,'mylibs_defs.h']]], + ['mylibs_5finclude_2eh_25',['mylibs_include.h',['../mylibs__include_8h.html',1,'']]] ]; diff --git a/Doc/html/search/all_b.js b/Doc/html/search/all_b.js index ec18e7a..ff965e9 100644 --- a/Doc/html/search/all_b.js +++ b/Doc/html/search/all_b.js @@ -1,7 +1,7 @@ var searchData= [ - ['n_5fbest_0',['n_best',['../struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6',1,'EvolveOptimizer_t']]], - ['n_5fcand_1',['n_cand',['../struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1',1,'EvolveOptimizer_t']]], - ['n_5fparams_2',['n_params',['../struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8',1,'EvolveOptimizer_t']]], + ['n_5fbest_0',['n_best',['../struct_gen_optimizer__t.html#a8201f1eede36a2c04ec7b4caac7465c9',1,'GenOptimizer_t']]], + ['n_5fcand_1',['n_cand',['../struct_gen_optimizer__t.html#a9e20d2f6f39a5147e6dbac46baca73a9',1,'GenOptimizer_t']]], + ['n_5fparams_2',['n_params',['../struct_gen_optimizer__t.html#afe598a90024a8aa628dd16f3a2b38eb5',1,'GenOptimizer_t']]], ['num_5fof_5fusercnts_3',['num_of_usercnts',['../group___t_r_a_c_k_e_r_s.html#ga72be24629fedb8bf70e830373d151fbc',1,'trackers.h']]] ]; diff --git a/Doc/html/search/all_c.js b/Doc/html/search/all_c.js index fa27ef2..9094ace 100644 --- a/Doc/html/search/all_c.js +++ b/Doc/html/search/all_c.js @@ -1,5 +1,5 @@ var searchData= [ ['oc_20channels_20tools_0',['PWM/OC Channels tools',['../group___m_y_l_i_b_s___t_i_m___o_c.html',1,'']]], - ['optimizer_1',['Evolve optimizer',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html',1,'']]] + ['optimizer_1',['Genetic optimizer',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html',1,'']]] ]; diff --git a/Doc/html/search/all_d.js b/Doc/html/search/all_d.js index 7209e2c..77e15f2 100644 --- a/Doc/html/search/all_d.js +++ b/Doc/html/search/all_d.js @@ -1,7 +1,7 @@ var searchData= [ - ['param_5fscale_0',['PARAM_SCALE',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga83abbcabaff9111c03ae2475ee72ea3e',1,'evolve_optimizer.h']]], - ['param_5funscale_1',['PARAM_UNSCALE',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#gaa1d5510fe5f0bd989473f3ebe324bde3',1,'evolve_optimizer.h']]], + ['param_5fscale_0',['PARAM_SCALE',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga83abbcabaff9111c03ae2475ee72ea3e',1,'gen_optimizer.h']]], + ['param_5funscale_1',['PARAM_UNSCALE',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html#gaa1d5510fe5f0bd989473f3ebe324bde3',1,'gen_optimizer.h']]], ['pc_2',['pc',['../struct_h_f___stack_frame__t.html#a16563896004751c90e41c81ae4570732',1,'HF_StackFrame_t']]], ['peripheral_3',['Peripheral',['../group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html',1,'']]], ['psr_4',['psr',['../struct_h_f___stack_frame__t.html#ae47cb051ee3c94471bfd4fe7e49c55f9',1,'HF_StackFrame_t']]], diff --git a/Doc/html/search/all_f.js b/Doc/html/search/all_f.js index 103d4c4..037ff30 100644 --- a/Doc/html/search/all_f.js +++ b/Doc/html/search/all_f.js @@ -7,7 +7,7 @@ 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']]], - ['sorted_5fidx_7',['sorted_idx',['../struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a',1,'EvolveOptimizer_t']]], + ['sorted_5fidx_7',['sorted_idx',['../struct_gen_optimizer__t.html#ad37161efa27ef1390d1f7e6ee2f79b12',1,'GenOptimizer_t']]], ['spi_20my_5flibs_5fspi_8',['Модуль SPI <a class="el" href="group___m_y___l_i_b_s___s_p_i.html">SPI Tools</a>',['../index.html#spi_module',1,'']]], ['spi_20tools_9',['SPI Tools',['../group___m_y___l_i_b_s___s_p_i.html',1,'']]], ['spi_5fbase_5finit_10',['SPI_Base_Init',['../group___m_y___l_i_b_s___s_p_i.html#ga0e177e3c57a8fcdc73b5602e72ec66ba',1,'SPI_Base_Init(SPI_SettingsTypeDef *sspi): general_spi.c'],['../group___m_y___l_i_b_s___s_p_i.html#ga0e177e3c57a8fcdc73b5602e72ec66ba',1,'SPI_Base_Init(SPI_SettingsTypeDef *sspi): general_spi.c']]], @@ -17,21 +17,23 @@ var searchData= ['spi_5fmspinit_14',['SPI_MspInit',['../group___m_y___l_i_b_s___s_p_i.html#gab9f13318daf02bc5b5f302ae392dccac',1,'SPI_MspInit(SPI_HandleTypeDef *hspi): general_spi.c'],['../group___m_y___l_i_b_s___s_p_i.html#gab9f13318daf02bc5b5f302ae392dccac',1,'SPI_MspInit(SPI_HandleTypeDef *hspi): general_spi.c']]], ['spi_5fsettingstypedef_15',['SPI_SettingsTypeDef',['../struct_s_p_i___settings_type_def.html',1,'']]], ['sslaveconfig_16',['sSlaveConfig',['../struct_t_i_m___settings_type_def.html#a9694cf0910a69d48ff94f8aeac106969',1,'TIM_SettingsTypeDef']]], - ['stability_17',['stability',['../struct_evolve_optimizer__t.html#a80eb0b8525b6bb838484f5922b9d8f7c',1,'EvolveOptimizer_t']]], - ['state_18',['state',['../struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435',1,'GPIO_LEDTypeDef']]], - ['stickbaseprescaler_19',['sTickBasePrescaler',['../struct_t_i_m___settings_type_def.html#a11151fe125960cb8e61328ffd06b7718',1,'TIM_SettingsTypeDef']]], - ['stickbaseus_20',['sTickBaseUS',['../struct_t_i_m___settings_type_def.html#a58da1b4c0f6d12d7d9fb2f170b9b9e6e',1,'TIM_SettingsTypeDef']]], - ['stimahbfreqmhz_21',['sTimAHBFreqMHz',['../struct_t_i_m___settings_type_def.html#a7073358fd3a722687eb85238ab570014',1,'TIM_SettingsTypeDef']]], - ['stimfreqhz_22',['sTimFreqHz',['../struct_t_i_m___settings_type_def.html#af6057ff3f60f5e01b41d4a347b79a5e4',1,'TIM_SettingsTypeDef']]], - ['stimmode_23',['sTimMode',['../struct_t_i_m___settings_type_def.html#ab90e370c3edda88e76583293c250d2b0',1,'TIM_SettingsTypeDef']]], - ['sw_24',['Sw',['../struct_t_i_m___encoder_type_def.html#a99295760ff8b27d1e6f1710f29383a45',1,'TIM_EncoderTypeDef']]], - ['sw_5factivelvl_25',['Sw_ActiveLvl',['../struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405',1,'GPIO_SwitchTypeDef']]], - ['sw_5ffilterdelay_26',['Sw_FilterDelay',['../struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06',1,'GPIO_SwitchTypeDef']]], - ['sw_5foff_27',['SW_OFF',['../group___g_p_i_o___i_n_i_t.html#gacd8900c9ec0efde1da3253b718574067',1,'general_gpio.h']]], - ['sw_5fon_28',['SW_ON',['../group___g_p_i_o___i_n_i_t.html#ga19d9e3aced311179a2914e0c9b13d0f9',1,'general_gpio.h']]], - ['sw_5fpin_29',['Sw_Pin',['../struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032',1,'GPIO_SwitchTypeDef']]], - ['sw_5fport_30',['Sw_Port',['../struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a',1,'GPIO_SwitchTypeDef']]], - ['sw_5fprevstate_31',['Sw_PrevState',['../struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89',1,'GPIO_SwitchTypeDef']]], - ['switch_20tools_32',['Switch tools',['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html',1,'']]], - ['swo_5ftrace_5fenable_33',['SWO_TRACE_ENABLE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#gab8db9704b5d11858aa879689b9d36336',1,'mylibs_config.h']]] + ['stability_17',['stability',['../struct_gen_optimizer__t.html#abe0aacea949fbe93e5d4c002e37d7192',1,'GenOptimizer_t']]], + ['start_5ftick_18',['start_tick',['../struct_bench_time_channel__t.html#a8140fe9e3d323404651f0cfeeae53928',1,'BenchTimeChannel_t']]], + ['state_19',['state',['../struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435',1,'GPIO_LEDTypeDef']]], + ['stats_20',['stats',['../struct_bench_time_channel__t.html#a22a3913e7925aa89cc12ec1d24a6c16c',1,'BenchTimeChannel_t']]], + ['stickbaseprescaler_21',['sTickBasePrescaler',['../struct_t_i_m___settings_type_def.html#a11151fe125960cb8e61328ffd06b7718',1,'TIM_SettingsTypeDef']]], + ['stickbaseus_22',['sTickBaseUS',['../struct_t_i_m___settings_type_def.html#a58da1b4c0f6d12d7d9fb2f170b9b9e6e',1,'TIM_SettingsTypeDef']]], + ['stimahbfreqmhz_23',['sTimAHBFreqMHz',['../struct_t_i_m___settings_type_def.html#a7073358fd3a722687eb85238ab570014',1,'TIM_SettingsTypeDef']]], + ['stimfreqhz_24',['sTimFreqHz',['../struct_t_i_m___settings_type_def.html#af6057ff3f60f5e01b41d4a347b79a5e4',1,'TIM_SettingsTypeDef']]], + ['stimmode_25',['sTimMode',['../struct_t_i_m___settings_type_def.html#ab90e370c3edda88e76583293c250d2b0',1,'TIM_SettingsTypeDef']]], + ['sw_26',['Sw',['../struct_t_i_m___encoder_type_def.html#a99295760ff8b27d1e6f1710f29383a45',1,'TIM_EncoderTypeDef']]], + ['sw_5factivelvl_27',['Sw_ActiveLvl',['../struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405',1,'GPIO_SwitchTypeDef']]], + ['sw_5ffilterdelay_28',['Sw_FilterDelay',['../struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06',1,'GPIO_SwitchTypeDef']]], + ['sw_5foff_29',['SW_OFF',['../group___g_p_i_o___i_n_i_t.html#gacd8900c9ec0efde1da3253b718574067',1,'general_gpio.h']]], + ['sw_5fon_30',['SW_ON',['../group___g_p_i_o___i_n_i_t.html#ga19d9e3aced311179a2914e0c9b13d0f9',1,'general_gpio.h']]], + ['sw_5fpin_31',['Sw_Pin',['../struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032',1,'GPIO_SwitchTypeDef']]], + ['sw_5fport_32',['Sw_Port',['../struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a',1,'GPIO_SwitchTypeDef']]], + ['sw_5fprevstate_33',['Sw_PrevState',['../struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89',1,'GPIO_SwitchTypeDef']]], + ['switch_20tools_34',['Switch tools',['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html',1,'']]], + ['swo_5ftrace_5fenable_35',['SWO_TRACE_ENABLE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#gab8db9704b5d11858aa879689b9d36336',1,'mylibs_config.h']]] ]; diff --git a/Doc/html/search/classes_0.js b/Doc/html/search/classes_0.js index e1df323..54d0c71 100644 --- a/Doc/html/search/classes_0.js +++ b/Doc/html/search/classes_0.js @@ -1,4 +1,6 @@ var searchData= [ - ['evolveoptimizer_5ft_0',['EvolveOptimizer_t',['../struct_evolve_optimizer__t.html',1,'']]] + ['benchtime_5ft_0',['BenchTime_t',['../struct_bench_time__t.html',1,'']]], + ['benchtimechannel_5ft_1',['BenchTimeChannel_t',['../struct_bench_time_channel__t.html',1,'']]], + ['benchtimestats_5ft_2',['BenchTimeStats_t',['../struct_bench_time_stats__t.html',1,'']]] ]; diff --git a/Doc/html/search/classes_1.js b/Doc/html/search/classes_1.js index 7f32de6..0c5d0d7 100644 --- a/Doc/html/search/classes_1.js +++ b/Doc/html/search/classes_1.js @@ -1,5 +1,6 @@ var searchData= [ - ['gpio_5fledtypedef_0',['GPIO_LEDTypeDef',['../struct_g_p_i_o___l_e_d_type_def.html',1,'']]], - ['gpio_5fswitchtypedef_1',['GPIO_SwitchTypeDef',['../struct_g_p_i_o___switch_type_def.html',1,'']]] + ['genoptimizer_5ft_0',['GenOptimizer_t',['../struct_gen_optimizer__t.html',1,'']]], + ['gpio_5fledtypedef_1',['GPIO_LEDTypeDef',['../struct_g_p_i_o___l_e_d_type_def.html',1,'']]], + ['gpio_5fswitchtypedef_2',['GPIO_SwitchTypeDef',['../struct_g_p_i_o___switch_type_def.html',1,'']]] ]; diff --git a/Doc/html/search/files_0.js b/Doc/html/search/files_0.js index 317d2f4..ff4d1c6 100644 --- a/Doc/html/search/files_0.js +++ b/Doc/html/search/files_0.js @@ -1,4 +1,5 @@ var searchData= [ - ['bit_5faccess_2eh_0',['bit_access.h',['../bit__access_8h.html',1,'']]] + ['bench_5ftime_2eh_0',['bench_time.h',['../bench__time_8h.html',1,'']]], + ['bit_5faccess_2eh_1',['bit_access.h',['../bit__access_8h.html',1,'']]] ]; diff --git a/Doc/html/search/files_1.js b/Doc/html/search/files_1.js index 9050e12..7a27173 100644 --- a/Doc/html/search/files_1.js +++ b/Doc/html/search/files_1.js @@ -1,4 +1,12 @@ var searchData= [ - ['evolve_5foptimizer_2eh_0',['evolve_optimizer.h',['../evolve__optimizer_8h.html',1,'']]] + ['gen_5foptimizer_2eh_0',['gen_optimizer.h',['../gen__optimizer_8h.html',1,'']]], + ['general_5fgpio_2ec_1',['general_gpio.c',['../general__gpio_8c.html',1,'']]], + ['general_5fgpio_2eh_2',['general_gpio.h',['../general__gpio_8h.html',1,'']]], + ['general_5fspi_2ec_3',['general_spi.c',['../general__spi_8c.html',1,'']]], + ['general_5fspi_2eh_4',['general_spi.h',['../general__spi_8h.html',1,'']]], + ['general_5ftim_2ec_5',['general_tim.c',['../general__tim_8c.html',1,'']]], + ['general_5ftim_2eh_6',['general_tim.h',['../general__tim_8h.html',1,'']]], + ['general_5fuart_2ec_7',['general_uart.c',['../general__uart_8c.html',1,'']]], + ['general_5fuart_2eh_8',['general_uart.h',['../general__uart_8h.html',1,'']]] ]; diff --git a/Doc/html/search/files_2.js b/Doc/html/search/files_2.js index 045601b..3a61f58 100644 --- a/Doc/html/search/files_2.js +++ b/Doc/html/search/files_2.js @@ -1,11 +1,6 @@ var searchData= [ - ['general_5fgpio_2ec_0',['general_gpio.c',['../general__gpio_8c.html',1,'']]], - ['general_5fgpio_2eh_1',['general_gpio.h',['../general__gpio_8h.html',1,'']]], - ['general_5fspi_2ec_2',['general_spi.c',['../general__spi_8c.html',1,'']]], - ['general_5fspi_2eh_3',['general_spi.h',['../general__spi_8h.html',1,'']]], - ['general_5ftim_2ec_4',['general_tim.c',['../general__tim_8c.html',1,'']]], - ['general_5ftim_2eh_5',['general_tim.h',['../general__tim_8h.html',1,'']]], - ['general_5fuart_2ec_6',['general_uart.c',['../general__uart_8c.html',1,'']]], - ['general_5fuart_2eh_7',['general_uart.h',['../general__uart_8h.html',1,'']]] + ['mylibs_5fconfig_2eh_0',['mylibs_config.h',['../mylibs__config_8h.html',1,'']]], + ['mylibs_5fdefs_2eh_1',['mylibs_defs.h',['../mylibs__defs_8h.html',1,'']]], + ['mylibs_5finclude_2eh_2',['mylibs_include.h',['../mylibs__include_8h.html',1,'']]] ]; diff --git a/Doc/html/search/files_3.js b/Doc/html/search/files_3.js index 3a61f58..f744967 100644 --- a/Doc/html/search/files_3.js +++ b/Doc/html/search/files_3.js @@ -1,6 +1,5 @@ var searchData= [ - ['mylibs_5fconfig_2eh_0',['mylibs_config.h',['../mylibs__config_8h.html',1,'']]], - ['mylibs_5fdefs_2eh_1',['mylibs_defs.h',['../mylibs__defs_8h.html',1,'']]], - ['mylibs_5finclude_2eh_2',['mylibs_include.h',['../mylibs__include_8h.html',1,'']]] + ['trace_2eh_0',['trace.h',['../trace_8h.html',1,'']]], + ['trackers_2eh_1',['trackers.h',['../trackers_8h.html',1,'']]] ]; diff --git a/Doc/html/search/files_4.js b/Doc/html/search/files_4.js deleted file mode 100644 index f744967..0000000 --- a/Doc/html/search/files_4.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['trace_2eh_0',['trace.h',['../trace_8h.html',1,'']]], - ['trackers_2eh_1',['trackers.h',['../trackers_8h.html',1,'']]] -]; diff --git a/Doc/html/search/functions_0.js b/Doc/html/search/functions_0.js index 32253ba..7ef7b4f 100644 --- a/Doc/html/search/functions_0.js +++ b/Doc/html/search/functions_0.js @@ -1,5 +1,12 @@ var searchData= [ - ['evolveoptimizer_5finit_0',['EvolveOptimizer_Init',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html#ga4e3ea118b5b9068619c57724a925ba21',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#gaef44a1f3298514569cc2b396a92101ef',1,'evolve_optimizer.h']]] + ['benchtime_5fend_0',['BenchTime_End',['../group___b_e_n_c_h___t_i_m_e.html#ga47a69851a2089140eac00cde18a12439',1,'bench_time.h']]], + ['benchtime_5fgetaverage_1',['BenchTime_GetAverage',['../group___b_e_n_c_h___t_i_m_e.html#ga24e2450d5ea921074ec5d7a1e4d56ba8',1,'bench_time.h']]], + ['benchtime_5fgetcount_2',['BenchTime_GetCount',['../group___b_e_n_c_h___t_i_m_e.html#gabd1301ca79a30c782970f89fd147df3a',1,'bench_time.h']]], + ['benchtime_5fgetlast_3',['BenchTime_GetLast',['../group___b_e_n_c_h___t_i_m_e.html#gacf3a738d6423d71b238058a63558a4ed',1,'bench_time.h']]], + ['benchtime_5fgetmax_4',['BenchTime_GetMax',['../group___b_e_n_c_h___t_i_m_e.html#ga07e27d7b169c9fa1abd57281bb4e374e',1,'bench_time.h']]], + ['benchtime_5fgetmin_5',['BenchTime_GetMin',['../group___b_e_n_c_h___t_i_m_e.html#ga273d45255fe4403fc25648d60cca7705',1,'bench_time.h']]], + ['benchtime_5finit_6',['BenchTime_Init',['../group___b_e_n_c_h___t_i_m_e.html#gabb7a665a9603ea2e4dbc4432e8cb6054',1,'bench_time.h']]], + ['benchtime_5fresetstats_7',['BenchTime_ResetStats',['../group___b_e_n_c_h___t_i_m_e.html#ga31a6b2b181b92bcb15f46758f5d57f35',1,'bench_time.h']]], + ['benchtime_5fstart_8',['BenchTime_Start',['../group___b_e_n_c_h___t_i_m_e.html#gac65338df38129964ce3e9d9cb2fcb349',1,'bench_time.h']]] ]; diff --git a/Doc/html/search/functions_1.js b/Doc/html/search/functions_1.js index a564d7b..3e028e5 100644 --- a/Doc/html/search/functions_1.js +++ b/Doc/html/search/functions_1.js @@ -1,13 +1,15 @@ var searchData= [ - ['gpio_5fclock_5fenable_0',['GPIO_Clock_Enable',['../group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6',1,'GPIO_Clock_Enable(GPIO_TypeDef *GPIOx): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6',1,'GPIO_Clock_Enable(GPIO_TypeDef *GPIOx): general_gpio.c']]], - ['gpio_5fled_5fblink_5fstart_1',['GPIO_LED_Blink_Start',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9',1,'GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9',1,'GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period): general_gpio.c']]], - ['gpio_5fled_5fdynamic_5fhandle_2',['GPIO_LED_Dynamic_Handle',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2',1,'GPIO_LED_Dynamic_Handle(GPIO_LEDTypeDef *led): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2',1,'GPIO_LED_Dynamic_Handle(GPIO_LEDTypeDef *led): general_gpio.c']]], - ['gpio_5fled_5ffading_5fstart_3',['GPIO_LED_Fading_Start',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a',1,'GPIO_LED_Fading_Start(GPIO_LEDTypeDef *led, uint32_t period): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a',1,'GPIO_LED_Fading_Start(GPIO_LEDTypeDef *led, uint32_t period): general_gpio.c']]], - ['gpio_5fled_5finit_4',['GPIO_LED_Init',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084',1,'GPIO_LED_Init(GPIO_LEDTypeDef *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_On_State): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084',1,'GPIO_LED_Init(GPIO_LEDTypeDef *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_ActiveLevel): general_gpio.c']]], - ['gpio_5fled_5foff_5',['GPIO_LED_Off',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357',1,'GPIO_LED_Off(GPIO_LEDTypeDef *led): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357',1,'GPIO_LED_Off(GPIO_LEDTypeDef *led): general_gpio.c']]], - ['gpio_5fled_5fon_6',['GPIO_LED_On',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c',1,'GPIO_LED_On(GPIO_LEDTypeDef *led): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c',1,'GPIO_LED_On(GPIO_LEDTypeDef *led): general_gpio.c']]], - ['gpio_5fled_5fset_7',['GPIO_LED_Set',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2',1,'GPIO_LED_Set(GPIO_LEDTypeDef *led, uint8_t led_state): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2',1,'GPIO_LED_Set(GPIO_LEDTypeDef *led, uint8_t led_state): general_gpio.c']]], - ['gpio_5fread_5fswitch_8',['GPIO_Read_Switch',['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#ga960b24335b2026abcad126ab8c422d70',1,'GPIO_Read_Switch(GPIO_SwitchTypeDef *swstart): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#ga960b24335b2026abcad126ab8c422d70',1,'GPIO_Read_Switch(GPIO_SwitchTypeDef *sw): general_gpio.c']]], - ['gpio_5fswitch_5finit_9',['GPIO_Switch_Init',['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7',1,'GPIO_Switch_Init(GPIO_SwitchTypeDef *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_On_State): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7',1,'GPIO_Switch_Init(GPIO_SwitchTypeDef *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_ActiveLevel): general_gpio.c']]] + ['genoptimizer_5finit_0',['GenOptimizer_Init',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga2db1df46b4082ad9280ef4344fdf4e8a',1,'gen_optimizer.h']]], + ['genoptimizer_5fstep_1',['GenOptimizer_Step',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html#gaa9a4c4f43f7beb926c85bd4817ebd628',1,'gen_optimizer.h']]], + ['gpio_5fclock_5fenable_2',['GPIO_Clock_Enable',['../group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6',1,'GPIO_Clock_Enable(GPIO_TypeDef *GPIOx): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6',1,'GPIO_Clock_Enable(GPIO_TypeDef *GPIOx): general_gpio.c']]], + ['gpio_5fled_5fblink_5fstart_3',['GPIO_LED_Blink_Start',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9',1,'GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9',1,'GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period): general_gpio.c']]], + ['gpio_5fled_5fdynamic_5fhandle_4',['GPIO_LED_Dynamic_Handle',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2',1,'GPIO_LED_Dynamic_Handle(GPIO_LEDTypeDef *led): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2',1,'GPIO_LED_Dynamic_Handle(GPIO_LEDTypeDef *led): general_gpio.c']]], + ['gpio_5fled_5ffading_5fstart_5',['GPIO_LED_Fading_Start',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a',1,'GPIO_LED_Fading_Start(GPIO_LEDTypeDef *led, uint32_t period): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a',1,'GPIO_LED_Fading_Start(GPIO_LEDTypeDef *led, uint32_t period): general_gpio.c']]], + ['gpio_5fled_5finit_6',['GPIO_LED_Init',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084',1,'GPIO_LED_Init(GPIO_LEDTypeDef *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_On_State): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084',1,'GPIO_LED_Init(GPIO_LEDTypeDef *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_ActiveLevel): general_gpio.c']]], + ['gpio_5fled_5foff_7',['GPIO_LED_Off',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357',1,'GPIO_LED_Off(GPIO_LEDTypeDef *led): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357',1,'GPIO_LED_Off(GPIO_LEDTypeDef *led): general_gpio.c']]], + ['gpio_5fled_5fon_8',['GPIO_LED_On',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c',1,'GPIO_LED_On(GPIO_LEDTypeDef *led): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c',1,'GPIO_LED_On(GPIO_LEDTypeDef *led): general_gpio.c']]], + ['gpio_5fled_5fset_9',['GPIO_LED_Set',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2',1,'GPIO_LED_Set(GPIO_LEDTypeDef *led, uint8_t led_state): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2',1,'GPIO_LED_Set(GPIO_LEDTypeDef *led, uint8_t led_state): general_gpio.c']]], + ['gpio_5fread_5fswitch_10',['GPIO_Read_Switch',['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#ga960b24335b2026abcad126ab8c422d70',1,'GPIO_Read_Switch(GPIO_SwitchTypeDef *swstart): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#ga960b24335b2026abcad126ab8c422d70',1,'GPIO_Read_Switch(GPIO_SwitchTypeDef *sw): general_gpio.c']]], + ['gpio_5fswitch_5finit_11',['GPIO_Switch_Init',['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7',1,'GPIO_Switch_Init(GPIO_SwitchTypeDef *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_On_State): general_gpio.c'],['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7',1,'GPIO_Switch_Init(GPIO_SwitchTypeDef *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_ActiveLevel): general_gpio.c']]] ]; diff --git a/Doc/html/search/groups_2.js b/Doc/html/search/groups_2.js index e1a626d..1f5d168 100644 --- a/Doc/html/search/groups_2.js +++ b/Doc/html/search/groups_2.js @@ -2,5 +2,5 @@ var searchData= [ ['channels_20tools_0',['PWM/OC Channels tools',['../group___m_y_l_i_b_s___t_i_m___o_c.html',1,'']]], ['configs_1',['Configs',['../group___m_y_l_i_b_s___c_o_n_f_i_g.html',1,'']]], - ['configs_2',['configs',['../group___e_v_o_l_v_e___c_o_n_f_i_g.html',1,'Evolve configs'],['../group___l_i_b_s___c_o_n_f_i_g.html',1,'Libraries configs'],['../group___t_r_a_c_e___c_o_n_f_i_g.html',1,'Trace configs']]] + ['configs_2',['configs',['../group___g_e_n___c_o_n_f_i_g.html',1,'Genetic configs'],['../group___l_i_b_s___c_o_n_f_i_g.html',1,'Libraries configs'],['../group___t_r_a_c_e___c_o_n_f_i_g.html',1,'Trace configs']]] ]; diff --git a/Doc/html/search/groups_4.js b/Doc/html/search/groups_4.js index ca0406b..d2fc234 100644 --- a/Doc/html/search/groups_4.js +++ b/Doc/html/search/groups_4.js @@ -1,7 +1,5 @@ var searchData= [ ['encoder_20tools_0',['Encoder tools',['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html',1,'']]], - ['error_20handler_20defines_1',['Error Handler defines',['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html',1,'']]], - ['evolve_20configs_2',['Evolve configs',['../group___e_v_o_l_v_e___c_o_n_f_i_g.html',1,'']]], - ['evolve_20optimizer_3',['Evolve optimizer',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html',1,'']]] + ['error_20handler_20defines_1',['Error Handler defines',['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html',1,'']]] ]; diff --git a/Doc/html/search/groups_6.js b/Doc/html/search/groups_6.js index 96772f9..451771a 100644 --- a/Doc/html/search/groups_6.js +++ b/Doc/html/search/groups_6.js @@ -2,6 +2,8 @@ var searchData= [ ['general_20tools_0',['General Tools',['../group___m_y_l_i_b_s___d_e_f_i_n_e_s.html',1,'']]], ['general_20tools_1',['General tools',['../group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html',1,'General tools'],['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html',1,'General tools']]], - ['gpio_20tools_2',['GPIO Tools',['../group___m_y___l_i_b_s___g_p_i_o.html',1,'']]], - ['gpio_20trace_20defines_3',['GPIO trace defines',['../group___t_r_a_c_e___g_p_i_o.html',1,'']]] + ['genetic_20configs_2',['Genetic configs',['../group___g_e_n___c_o_n_f_i_g.html',1,'']]], + ['genetic_20optimizer_3',['Genetic optimizer',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html',1,'']]], + ['gpio_20tools_4',['GPIO Tools',['../group___m_y___l_i_b_s___g_p_i_o.html',1,'']]], + ['gpio_20trace_20defines_5',['GPIO trace defines',['../group___t_r_a_c_e___g_p_i_o.html',1,'']]] ]; diff --git a/Doc/html/search/groups_a.js b/Doc/html/search/groups_a.js index 44a62b4..b997f53 100644 --- a/Doc/html/search/groups_a.js +++ b/Doc/html/search/groups_a.js @@ -1,4 +1,5 @@ var searchData= [ - ['my_20libs_0',['My Libs',['../group___m_y_l_i_b_s___a_l_l.html',1,'']]] + ['measurement_0',['Time measurement',['../group___b_e_n_c_h___t_i_m_e.html',1,'']]], + ['my_20libs_1',['My Libs',['../group___m_y_l_i_b_s___a_l_l.html',1,'']]] ]; diff --git a/Doc/html/search/groups_b.js b/Doc/html/search/groups_b.js index fa27ef2..9094ace 100644 --- a/Doc/html/search/groups_b.js +++ b/Doc/html/search/groups_b.js @@ -1,5 +1,5 @@ var searchData= [ ['oc_20channels_20tools_0',['PWM/OC Channels tools',['../group___m_y_l_i_b_s___t_i_m___o_c.html',1,'']]], - ['optimizer_1',['Evolve optimizer',['../group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.html',1,'']]] + ['optimizer_1',['Genetic optimizer',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html',1,'']]] ]; diff --git a/Doc/html/search/groups_f.js b/Doc/html/search/groups_f.js index 0864006..dcdcef1 100644 --- a/Doc/html/search/groups_f.js +++ b/Doc/html/search/groups_f.js @@ -1,10 +1,11 @@ var searchData= [ ['tim_20tools_0',['TIM Tools',['../group___m_y___l_i_b_s___t_i_m.html',1,'']]], - ['tools_1',['Tools',['../group___m_y_l_i_b_s___d_e_f_i_n_e_s.html',1,'General Tools'],['../group___m_y___l_i_b_s___g_p_i_o.html',1,'GPIO Tools'],['../group___m_y___l_i_b_s___s_p_i.html',1,'SPI Tools'],['../group___m_y___l_i_b_s___t_i_m.html',1,'TIM Tools'],['../group___m_y___l_i_b_s___u_a_r_t.html',1,'UART Tools']]], - ['tools_2',['tools',['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html',1,'Delay tools'],['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html',1,'Encoder tools'],['../group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html',1,'General tools'],['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html',1,'General tools'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html',1,'LED tools'],['../group___m_y_l_i_b_s___t_i_m___o_c.html',1,'PWM/OC Channels tools'],['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html',1,'Switch tools']]], - ['trace_20configs_3',['Trace configs',['../group___t_r_a_c_e___c_o_n_f_i_g.html',1,'']]], - ['trace_20defines_4',['Trace defines',['../group___t_r_a_c_e.html',1,'']]], - ['trace_20defines_5',['trace defines',['../group___t_r_a_c_e___g_p_i_o.html',1,'GPIO trace defines'],['../group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html',1,'Hardfault trace defines'],['../group___t_r_a_c_e___s_e_r_i_a_l.html',1,'Serial trace defines']]], - ['trackers_20defines_6',['Trackers defines',['../group___t_r_a_c_k_e_r_s.html',1,'']]] + ['time_20measurement_1',['Time measurement',['../group___b_e_n_c_h___t_i_m_e.html',1,'']]], + ['tools_2',['Tools',['../group___m_y_l_i_b_s___d_e_f_i_n_e_s.html',1,'General Tools'],['../group___m_y___l_i_b_s___g_p_i_o.html',1,'GPIO Tools'],['../group___m_y___l_i_b_s___s_p_i.html',1,'SPI Tools'],['../group___m_y___l_i_b_s___t_i_m.html',1,'TIM Tools'],['../group___m_y___l_i_b_s___u_a_r_t.html',1,'UART Tools']]], + ['tools_3',['tools',['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html',1,'Delay tools'],['../group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html',1,'Encoder tools'],['../group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html',1,'General tools'],['../group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html',1,'General tools'],['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html',1,'LED tools'],['../group___m_y_l_i_b_s___t_i_m___o_c.html',1,'PWM/OC Channels tools'],['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html',1,'Switch tools']]], + ['trace_20configs_4',['Trace configs',['../group___t_r_a_c_e___c_o_n_f_i_g.html',1,'']]], + ['trace_20defines_5',['Trace defines',['../group___t_r_a_c_e.html',1,'']]], + ['trace_20defines_6',['trace defines',['../group___t_r_a_c_e___g_p_i_o.html',1,'GPIO trace defines'],['../group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html',1,'Hardfault trace defines'],['../group___t_r_a_c_e___s_e_r_i_a_l.html',1,'Serial trace defines']]], + ['trackers_20defines_7',['Trackers defines',['../group___t_r_a_c_k_e_r_s.html',1,'']]] ]; diff --git a/Doc/html/search/searchdata.js b/Doc/html/search/searchdata.js index 7f3006a..457d6e9 100644 --- a/Doc/html/search/searchdata.js +++ b/Doc/html/search/searchdata.js @@ -1,10 +1,10 @@ var indexSectionsWithContent = { 0: "abcdefghilmnoprstuвимопсту", - 1: "eghrstu", - 2: "begmt", - 3: "eghrstu", - 4: "cdeghlmnprst", + 1: "bghrstu", + 2: "bgmt", + 3: "bghrstu", + 4: "cdeghilmnprst", 5: "gt", 6: "lt", 7: "abcdefghilmoprstu", diff --git a/Doc/html/search/variables_0.js b/Doc/html/search/variables_0.js index 91d9d13..d01d6ca 100644 --- a/Doc/html/search/variables_0.js +++ b/Doc/html/search/variables_0.js @@ -1,8 +1,10 @@ var searchData= [ - ['cand_5findex_0',['cand_index',['../struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae',1,'EvolveOptimizer_t']]], - ['candidates_1',['candidates',['../struct_evolve_optimizer__t.html#aec67667fd1f1533e693e41c79bc28da4',1,'EvolveOptimizer_t']]], - ['clk_5fgpio_5falternagefunc_2',['CLK_GPIO_AlternageFunc',['../struct_s_p_i___settings_type_def.html#a3f3748103a0b7861f6700042fd691ba1',1,'SPI_SettingsTypeDef']]], - ['clk_5fgpiox_3',['CLK_GPIOx',['../struct_s_p_i___settings_type_def.html#a6a15d48eccf92959de3a086031fdc979',1,'SPI_SettingsTypeDef']]], - ['clk_5fpin_4',['CLK_PIN',['../struct_s_p_i___settings_type_def.html#a3bcb1ed12da3544e02e6d36493669bdc',1,'SPI_SettingsTypeDef']]] + ['cand_5findex_0',['cand_index',['../struct_gen_optimizer__t.html#a04a72c1a13e17581e84eaaf3d245bbfc',1,'GenOptimizer_t']]], + ['candidates_1',['candidates',['../struct_gen_optimizer__t.html#a2c9a50ea7d975b9bc22a67e453ab83df',1,'GenOptimizer_t']]], + ['channels_2',['channels',['../struct_bench_time__t.html#a9ae6d45c610be9d4b7628a614ccb06d6',1,'BenchTime_t']]], + ['clk_5fgpio_5falternagefunc_3',['CLK_GPIO_AlternageFunc',['../struct_s_p_i___settings_type_def.html#a3f3748103a0b7861f6700042fd691ba1',1,'SPI_SettingsTypeDef']]], + ['clk_5fgpiox_4',['CLK_GPIOx',['../struct_s_p_i___settings_type_def.html#a6a15d48eccf92959de3a086031fdc979',1,'SPI_SettingsTypeDef']]], + ['clk_5fpin_5',['CLK_PIN',['../struct_s_p_i___settings_type_def.html#a3bcb1ed12da3544e02e6d36493669bdc',1,'SPI_SettingsTypeDef']]], + ['count_6',['count',['../struct_bench_time_stats__t.html#a5e95ef31dd0daf973894ef2f034d1f71',1,'BenchTimeStats_t']]] ]; diff --git a/Doc/html/search/variables_3.js b/Doc/html/search/variables_3.js index 3e4add5..aff98e3 100644 --- a/Doc/html/search/variables_3.js +++ b/Doc/html/search/variables_3.js @@ -1,7 +1,7 @@ var searchData= [ - ['gen_5findex_0',['gen_index',['../struct_evolve_optimizer__t.html#ad0f464d7048a9ed0753b61f76f563108',1,'EvolveOptimizer_t']]], - ['gen_5fmut_1',['gen_mut',['../struct_evolve_optimizer__t.html#a3be8c0c34db8429210ff470497a56727',1,'EvolveOptimizer_t']]], + ['gen_5findex_0',['gen_index',['../struct_gen_optimizer__t.html#a8f226c85e9bb034cb811aa0366bb191c',1,'GenOptimizer_t']]], + ['gen_5fmut_1',['gen_mut',['../struct_gen_optimizer__t.html#acfeb93ef4823e09473ddba52fae9a6b1',1,'GenOptimizer_t']]], ['gpio_5fpin_5frx_2',['GPIO_PIN_RX',['../struct_u_a_r_t___settings_type_def.html#a3fba2b52788fe453348b5d92ed52ba49',1,'UART_SettingsTypeDef']]], ['gpio_5fpin_5fsw_3',['GPIO_PIN_SW',['../struct_t_i_m___encoder_type_def.html#a6973108a83d2a3ea4fc3e0e8a501af80',1,'TIM_EncoderTypeDef']]], ['gpio_5fpin_5fti1_4',['GPIO_PIN_TI1',['../struct_t_i_m___encoder_type_def.html#a4fc05ef011205a6702cb3d006bab677e',1,'TIM_EncoderTypeDef']]], diff --git a/Doc/html/search/variables_4.js b/Doc/html/search/variables_4.js index 1d4c0a0..182e697 100644 --- a/Doc/html/search/variables_4.js +++ b/Doc/html/search/variables_4.js @@ -1,6 +1,7 @@ var searchData= [ - ['hspi_0',['hspi',['../struct_s_p_i___settings_type_def.html#ad203d8b8d67e4f477d002d15b03ba422',1,'SPI_SettingsTypeDef']]], - ['htim_1',['htim',['../struct_t_i_m___settings_type_def.html#ada49efdbd35a8e442c3cff630d42f34c',1,'TIM_SettingsTypeDef::htim'],['../struct_t_i_m___encoder_type_def.html#adc80bd5a90444c31d84157f35c59b95c',1,'TIM_EncoderTypeDef::htim']]], - ['huart_2',['huart',['../struct_u_a_r_t___settings_type_def.html#accf2c9448a3ea8eb3b8c25a569276fea',1,'UART_SettingsTypeDef']]] + ['hbt_0',['hbt',['../group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d',1,'bench_time.h']]], + ['hspi_1',['hspi',['../struct_s_p_i___settings_type_def.html#ad203d8b8d67e4f477d002d15b03ba422',1,'SPI_SettingsTypeDef']]], + ['htim_2',['htim',['../struct_t_i_m___settings_type_def.html#ada49efdbd35a8e442c3cff630d42f34c',1,'TIM_SettingsTypeDef::htim'],['../struct_t_i_m___encoder_type_def.html#adc80bd5a90444c31d84157f35c59b95c',1,'TIM_EncoderTypeDef::htim']]], + ['huart_3',['huart',['../struct_u_a_r_t___settings_type_def.html#accf2c9448a3ea8eb3b8c25a569276fea',1,'UART_SettingsTypeDef']]] ]; diff --git a/Doc/html/search/variables_5.js b/Doc/html/search/variables_5.js index 6a97596..3cfd1f9 100644 --- a/Doc/html/search/variables_5.js +++ b/Doc/html/search/variables_5.js @@ -1,9 +1,4 @@ var searchData= [ - ['led_5factivelvl_0',['LED_ActiveLvl',['../struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816',1,'GPIO_LEDTypeDef']]], - ['led_5fperiod_1',['LED_Period',['../struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec',1,'GPIO_LEDTypeDef']]], - ['led_5fpin_2',['LED_Pin',['../struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978',1,'GPIO_LEDTypeDef']]], - ['led_5fport_3',['LED_Port',['../struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf',1,'GPIO_LEDTypeDef']]], - ['loss_4',['loss',['../struct_evolve_optimizer__t.html#a93f628397c2f8d4027f2906752b650df',1,'EvolveOptimizer_t']]], - ['lr_5',['lr',['../struct_h_f___stack_frame__t.html#a6e51904297f7725e96d5b5fb291ef577',1,'HF_StackFrame_t']]] + ['is_5frunning_0',['is_running',['../struct_bench_time_channel__t.html#a0f80bb194231df7921712d20bac603c9',1,'BenchTimeChannel_t']]] ]; diff --git a/Doc/html/search/variables_6.js b/Doc/html/search/variables_6.js index bd7bed0..c8e17d1 100644 --- a/Doc/html/search/variables_6.js +++ b/Doc/html/search/variables_6.js @@ -1,10 +1,10 @@ var searchData= [ - ['miso_5fgpio_5falternagefunc_0',['MISO_GPIO_AlternageFunc',['../struct_s_p_i___settings_type_def.html#aecd7a5c6e205335b8ed229d74cd35d14',1,'SPI_SettingsTypeDef']]], - ['miso_5fgpiox_1',['MISO_GPIOx',['../struct_s_p_i___settings_type_def.html#a0d55a2941854f61934487f3d209cfa95',1,'SPI_SettingsTypeDef']]], - ['miso_5fpin_2',['MISO_PIN',['../struct_s_p_i___settings_type_def.html#a3366c654d7ec6dd41c6a0b504dc8509a',1,'SPI_SettingsTypeDef']]], - ['mosi_5fgpio_5falternagefunc_3',['MOSI_GPIO_AlternageFunc',['../struct_s_p_i___settings_type_def.html#afbe75a1c36650a4a9b41fa706a4c7eab',1,'SPI_SettingsTypeDef']]], - ['mosi_5fgpiox_4',['MOSI_GPIOx',['../struct_s_p_i___settings_type_def.html#a0af3bdb273818ff97eb4ff3cff918820',1,'SPI_SettingsTypeDef']]], - ['mosi_5fpin_5',['MOSI_PIN',['../struct_s_p_i___settings_type_def.html#a961208869faf4a7369aaf4edde75f176',1,'SPI_SettingsTypeDef']]], - ['mutation_5famp_6',['mutation_amp',['../struct_evolve_optimizer__t.html#af779c7aeba0053e36cee7aade160f1c8',1,'EvolveOptimizer_t']]] + ['last_5fticks_0',['last_ticks',['../struct_bench_time_stats__t.html#a2c739e1db6b26ceac5db3f2c44c177a0',1,'BenchTimeStats_t']]], + ['led_5factivelvl_1',['LED_ActiveLvl',['../struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816',1,'GPIO_LEDTypeDef']]], + ['led_5fperiod_2',['LED_Period',['../struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec',1,'GPIO_LEDTypeDef']]], + ['led_5fpin_3',['LED_Pin',['../struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978',1,'GPIO_LEDTypeDef']]], + ['led_5fport_4',['LED_Port',['../struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf',1,'GPIO_LEDTypeDef']]], + ['loss_5',['loss',['../struct_gen_optimizer__t.html#a8b5066935d99f2fc7ebb94cc3652fc73',1,'GenOptimizer_t']]], + ['lr_6',['lr',['../struct_h_f___stack_frame__t.html#a6e51904297f7725e96d5b5fb291ef577',1,'HF_StackFrame_t']]] ]; diff --git a/Doc/html/search/variables_7.js b/Doc/html/search/variables_7.js index 0e355de..eac5a24 100644 --- a/Doc/html/search/variables_7.js +++ b/Doc/html/search/variables_7.js @@ -1,6 +1,12 @@ var searchData= [ - ['n_5fbest_0',['n_best',['../struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6',1,'EvolveOptimizer_t']]], - ['n_5fcand_1',['n_cand',['../struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1',1,'EvolveOptimizer_t']]], - ['n_5fparams_2',['n_params',['../struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8',1,'EvolveOptimizer_t']]] + ['max_5fticks_0',['max_ticks',['../struct_bench_time_stats__t.html#a3da36eb65b03ba995b5905b4650ea93c',1,'BenchTimeStats_t']]], + ['min_5fticks_1',['min_ticks',['../struct_bench_time_stats__t.html#a39b71a5d48c4a51a553a26a9fb961ac8',1,'BenchTimeStats_t']]], + ['miso_5fgpio_5falternagefunc_2',['MISO_GPIO_AlternageFunc',['../struct_s_p_i___settings_type_def.html#aecd7a5c6e205335b8ed229d74cd35d14',1,'SPI_SettingsTypeDef']]], + ['miso_5fgpiox_3',['MISO_GPIOx',['../struct_s_p_i___settings_type_def.html#a0d55a2941854f61934487f3d209cfa95',1,'SPI_SettingsTypeDef']]], + ['miso_5fpin_4',['MISO_PIN',['../struct_s_p_i___settings_type_def.html#a3366c654d7ec6dd41c6a0b504dc8509a',1,'SPI_SettingsTypeDef']]], + ['mosi_5fgpio_5falternagefunc_5',['MOSI_GPIO_AlternageFunc',['../struct_s_p_i___settings_type_def.html#afbe75a1c36650a4a9b41fa706a4c7eab',1,'SPI_SettingsTypeDef']]], + ['mosi_5fgpiox_6',['MOSI_GPIOx',['../struct_s_p_i___settings_type_def.html#a0af3bdb273818ff97eb4ff3cff918820',1,'SPI_SettingsTypeDef']]], + ['mosi_5fpin_7',['MOSI_PIN',['../struct_s_p_i___settings_type_def.html#a961208869faf4a7369aaf4edde75f176',1,'SPI_SettingsTypeDef']]], + ['mutation_5famp_8',['mutation_amp',['../struct_gen_optimizer__t.html#ad4dc0e53b3ca6bf2a642dfe7a1d1f26c',1,'GenOptimizer_t']]] ]; diff --git a/Doc/html/search/variables_8.js b/Doc/html/search/variables_8.js index 7d04971..88c43fd 100644 --- a/Doc/html/search/variables_8.js +++ b/Doc/html/search/variables_8.js @@ -1,5 +1,6 @@ var searchData= [ - ['pc_0',['pc',['../struct_h_f___stack_frame__t.html#a16563896004751c90e41c81ae4570732',1,'HF_StackFrame_t']]], - ['psr_1',['psr',['../struct_h_f___stack_frame__t.html#ae47cb051ee3c94471bfd4fe7e49c55f9',1,'HF_StackFrame_t']]] + ['n_5fbest_0',['n_best',['../struct_gen_optimizer__t.html#a8201f1eede36a2c04ec7b4caac7465c9',1,'GenOptimizer_t']]], + ['n_5fcand_1',['n_cand',['../struct_gen_optimizer__t.html#a9e20d2f6f39a5147e6dbac46baca73a9',1,'GenOptimizer_t']]], + ['n_5fparams_2',['n_params',['../struct_gen_optimizer__t.html#afe598a90024a8aa628dd16f3a2b38eb5',1,'GenOptimizer_t']]] ]; diff --git a/Doc/html/search/variables_9.js b/Doc/html/search/variables_9.js index 29cfada..7d04971 100644 --- a/Doc/html/search/variables_9.js +++ b/Doc/html/search/variables_9.js @@ -1,8 +1,5 @@ var searchData= [ - ['r0_0',['r0',['../struct_h_f___stack_frame__t.html#a4146ed28926b5f234132b7112119a413',1,'HF_StackFrame_t']]], - ['r1_1',['r1',['../struct_h_f___stack_frame__t.html#a286104d19185714940645a9df814ddea',1,'HF_StackFrame_t']]], - ['r12_2',['r12',['../struct_h_f___stack_frame__t.html#a819ee3bc518c460ece1b7c4079f8f80b',1,'HF_StackFrame_t']]], - ['r2_3',['r2',['../struct_h_f___stack_frame__t.html#a5a52e5006dabcf68c0fa4cfb0e03335b',1,'HF_StackFrame_t']]], - ['r3_4',['r3',['../struct_h_f___stack_frame__t.html#a453c7af42b6928a693af422e17c981d3',1,'HF_StackFrame_t']]] + ['pc_0',['pc',['../struct_h_f___stack_frame__t.html#a16563896004751c90e41c81ae4570732',1,'HF_StackFrame_t']]], + ['psr_1',['psr',['../struct_h_f___stack_frame__t.html#ae47cb051ee3c94471bfd4fe7e49c55f9',1,'HF_StackFrame_t']]] ]; diff --git a/Doc/html/search/variables_a.js b/Doc/html/search/variables_a.js index e291301..29cfada 100644 --- a/Doc/html/search/variables_a.js +++ b/Doc/html/search/variables_a.js @@ -1,23 +1,8 @@ var searchData= [ - ['sbreakdeadtimeconfig_0',['sBreakDeadTimeConfig',['../struct_t_i_m___settings_type_def.html#a961f19f0e1672715c27bc94d7871dbb7',1,'TIM_SettingsTypeDef']]], - ['sclocksourceconfig_1',['sClockSourceConfig',['../struct_t_i_m___settings_type_def.html#a3805f627567798c3cd1d79a0da42bea0',1,'TIM_SettingsTypeDef']]], - ['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']]], - ['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']]], - ['stability_7',['stability',['../struct_evolve_optimizer__t.html#a80eb0b8525b6bb838484f5922b9d8f7c',1,'EvolveOptimizer_t']]], - ['state_8',['state',['../struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435',1,'GPIO_LEDTypeDef']]], - ['stickbaseprescaler_9',['sTickBasePrescaler',['../struct_t_i_m___settings_type_def.html#a11151fe125960cb8e61328ffd06b7718',1,'TIM_SettingsTypeDef']]], - ['stickbaseus_10',['sTickBaseUS',['../struct_t_i_m___settings_type_def.html#a58da1b4c0f6d12d7d9fb2f170b9b9e6e',1,'TIM_SettingsTypeDef']]], - ['stimahbfreqmhz_11',['sTimAHBFreqMHz',['../struct_t_i_m___settings_type_def.html#a7073358fd3a722687eb85238ab570014',1,'TIM_SettingsTypeDef']]], - ['stimfreqhz_12',['sTimFreqHz',['../struct_t_i_m___settings_type_def.html#af6057ff3f60f5e01b41d4a347b79a5e4',1,'TIM_SettingsTypeDef']]], - ['stimmode_13',['sTimMode',['../struct_t_i_m___settings_type_def.html#ab90e370c3edda88e76583293c250d2b0',1,'TIM_SettingsTypeDef']]], - ['sw_14',['Sw',['../struct_t_i_m___encoder_type_def.html#a99295760ff8b27d1e6f1710f29383a45',1,'TIM_EncoderTypeDef']]], - ['sw_5factivelvl_15',['Sw_ActiveLvl',['../struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405',1,'GPIO_SwitchTypeDef']]], - ['sw_5ffilterdelay_16',['Sw_FilterDelay',['../struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06',1,'GPIO_SwitchTypeDef']]], - ['sw_5fpin_17',['Sw_Pin',['../struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032',1,'GPIO_SwitchTypeDef']]], - ['sw_5fport_18',['Sw_Port',['../struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a',1,'GPIO_SwitchTypeDef']]], - ['sw_5fprevstate_19',['Sw_PrevState',['../struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89',1,'GPIO_SwitchTypeDef']]] + ['r0_0',['r0',['../struct_h_f___stack_frame__t.html#a4146ed28926b5f234132b7112119a413',1,'HF_StackFrame_t']]], + ['r1_1',['r1',['../struct_h_f___stack_frame__t.html#a286104d19185714940645a9df814ddea',1,'HF_StackFrame_t']]], + ['r12_2',['r12',['../struct_h_f___stack_frame__t.html#a819ee3bc518c460ece1b7c4079f8f80b',1,'HF_StackFrame_t']]], + ['r2_3',['r2',['../struct_h_f___stack_frame__t.html#a5a52e5006dabcf68c0fa4cfb0e03335b',1,'HF_StackFrame_t']]], + ['r3_4',['r3',['../struct_h_f___stack_frame__t.html#a453c7af42b6928a693af422e17c981d3',1,'HF_StackFrame_t']]] ]; diff --git a/Doc/html/search/variables_b.js b/Doc/html/search/variables_b.js index 24558b0..928694e 100644 --- a/Doc/html/search/variables_b.js +++ b/Doc/html/search/variables_b.js @@ -1,4 +1,25 @@ var searchData= [ - ['tag_0',['tag',['../struct_r_t_t___flash_header__t.html#a844ee5470a323a749856cbb7a682dc57',1,'RTT_FlashHeader_t']]] + ['sbreakdeadtimeconfig_0',['sBreakDeadTimeConfig',['../struct_t_i_m___settings_type_def.html#a961f19f0e1672715c27bc94d7871dbb7',1,'TIM_SettingsTypeDef']]], + ['sclocksourceconfig_1',['sClockSourceConfig',['../struct_t_i_m___settings_type_def.html#a3805f627567798c3cd1d79a0da42bea0',1,'TIM_SettingsTypeDef']]], + ['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']]], + ['sorted_5fidx_5',['sorted_idx',['../struct_gen_optimizer__t.html#ad37161efa27ef1390d1f7e6ee2f79b12',1,'GenOptimizer_t']]], + ['sslaveconfig_6',['sSlaveConfig',['../struct_t_i_m___settings_type_def.html#a9694cf0910a69d48ff94f8aeac106969',1,'TIM_SettingsTypeDef']]], + ['stability_7',['stability',['../struct_gen_optimizer__t.html#abe0aacea949fbe93e5d4c002e37d7192',1,'GenOptimizer_t']]], + ['start_5ftick_8',['start_tick',['../struct_bench_time_channel__t.html#a8140fe9e3d323404651f0cfeeae53928',1,'BenchTimeChannel_t']]], + ['state_9',['state',['../struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435',1,'GPIO_LEDTypeDef']]], + ['stats_10',['stats',['../struct_bench_time_channel__t.html#a22a3913e7925aa89cc12ec1d24a6c16c',1,'BenchTimeChannel_t']]], + ['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_5fpin_19',['Sw_Pin',['../struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032',1,'GPIO_SwitchTypeDef']]], + ['sw_5fport_20',['Sw_Port',['../struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a',1,'GPIO_SwitchTypeDef']]], + ['sw_5fprevstate_21',['Sw_PrevState',['../struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89',1,'GPIO_SwitchTypeDef']]] ]; diff --git a/Doc/html/search/variables_c.js b/Doc/html/search/variables_c.js new file mode 100644 index 0000000..f83ad97 --- /dev/null +++ b/Doc/html/search/variables_c.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['tag_0',['tag',['../struct_r_t_t___flash_header__t.html#a844ee5470a323a749856cbb7a682dc57',1,'RTT_FlashHeader_t']]], + ['tick_5fperiod_1',['tick_period',['../struct_bench_time_channel__t.html#a095d93e0228641f58b8661e263bc1bcd',1,'BenchTimeChannel_t']]], + ['total_5fticks_2',['total_ticks',['../struct_bench_time_stats__t.html#a21499b0b19d1ed27f8cea069f674e8ec',1,'BenchTimeStats_t']]] +]; diff --git a/Doc/html/struct_bench_time__t-members.html b/Doc/html/struct_bench_time__t-members.html new file mode 100644 index 0000000..434af22 --- /dev/null +++ b/Doc/html/struct_bench_time__t-members.html @@ -0,0 +1,117 @@ + + + + + + + +MyLibs: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    BenchTime_t Member List
    +
    +
    + +

    This is the complete list of members for BenchTime_t, including all inherited members.

    + + +
    channelsBenchTime_t
    +
    +
    + + + + diff --git a/Doc/html/struct_bench_time__t.html b/Doc/html/struct_bench_time__t.html new file mode 100644 index 0000000..440831d --- /dev/null +++ b/Doc/html/struct_bench_time__t.html @@ -0,0 +1,171 @@ + + + + + + + +MyLibs: BenchTime_t Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    BenchTime_t Struct Reference
    +
    +
    + +

    Основная структура менеджера измерений + More...

    + +

    #include <bench_time.h>

    +
    Collaboration diagram for BenchTime_t:
    +
    +
    + + + + + +

    +Public Attributes

    BenchTimeChannel_t channels [16]
     Каналы измерения
    +

    Detailed Description

    +

    Основная структура менеджера измерений

    + +

    Definition at line 102 of file bench_time.h.

    +

    Member Data Documentation

    + +

    ◆ channels

    + +
    +
    + + + + +
    BenchTimeChannel_t BenchTime_t::channels[16]
    +
    + +

    Каналы измерения

    + +

    Definition at line 103 of file bench_time.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/bench_time.h
    • +
    +
    +
    + +
    + + + + diff --git a/Doc/html/struct_bench_time__t.js b/Doc/html/struct_bench_time__t.js new file mode 100644 index 0000000..7f4e613 --- /dev/null +++ b/Doc/html/struct_bench_time__t.js @@ -0,0 +1,4 @@ +var struct_bench_time__t = +[ + [ "channels", "struct_bench_time__t.html#a9ae6d45c610be9d4b7628a614ccb06d6", null ] +]; \ No newline at end of file diff --git a/Doc/html/struct_bench_time__t__coll__graph.map b/Doc/html/struct_bench_time__t__coll__graph.map new file mode 100644 index 0000000..5b2f5df --- /dev/null +++ b/Doc/html/struct_bench_time__t__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Doc/html/struct_bench_time__t__coll__graph.md5 b/Doc/html/struct_bench_time__t__coll__graph.md5 new file mode 100644 index 0000000..cb61ea0 --- /dev/null +++ b/Doc/html/struct_bench_time__t__coll__graph.md5 @@ -0,0 +1 @@ +38d4100ea738d751cba8e97cbba534f5 \ No newline at end of file diff --git a/Doc/html/struct_bench_time__t__coll__graph.png b/Doc/html/struct_bench_time__t__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..3d24b09fa705ee1a9d7dcdc05d6c02b702597aa6 GIT binary patch literal 2906 zcmZ`*2{aU1A6Ho>vbTzqWXc*-FGjX$Y%$0l#*&bc5ym9TcxA?tEmVXdjb}?k*)rBl z8s69$%S^VCZ5q6+J!X94d#`hP=Y8M3=iYnHz4v#|fBoHmyp@Hqu%MJ64-b#9sR`7Y zyW+Wn3E=0>!SKhs2mCk8jG;U`yZw1%Q92Kgkf5M%=Bt9o4^vBh{3Zb9xxXzWp|pquakNZRLS{g$RVcTMaO1UJs-D zEGl>QqKK@nxpA_zy06IT$&YoxD9-lx7*pr+uQzyN4CeG@AOZ_wV5`{P`(Uid;4!#H zM}ihdsw&QQJitZPbWKdB^jwMmv5RNc>gIl%T$*^qLHxu?wb*k~I1%_^YD=_OzRC2>wTzd>#?3GvKy{E(J+>3#Xk}MDfRmgl&4WiPK7Y>qZ>tO zRiUm^O;;5L5Kj8vZmaprze;ez5sBL8$_s`)G?Ln2&#rIPgoLhFJ^hqDGgE*|-^cXQ{@U1WNUs-pX ze(&y>;eiET@-t7y{rTok2PATgP)x zFNQ-Y{JY$m$7viE6WAf>-D}B7~huStYEGyls8E1u*-A>ZMFqRjb3a5qoXrFSlcsG_{Jsm zT)?4bug)8L6j0qGLKxRRtwy#%$6JJ&2zKdIF_Lno#iK{Y=8-oRgs8tdZVT)Xb%4|R zJsx)L9bk&#N88lZmN6$Pu(~oa8|OPVu$#)M5fz*=;8y|H<SO`eJNKra(+~)h8ZYa=|MnvQzo$n?SN??_ku9{FbGyyz;G%~5@`w9o+742j zmCu;ZttHd}*-;|p;#d>X_>-diE1a6Zji9I z%!(df*r`50LAl(=F8 zvIl5}b!;b}B4o&qqs#0~|SzmT3$)l$RT;0GZ+||IGbvp7A`9ADF8#Tk{7d zF{B%J0!MfjizF&{KQq(c&iO4Obbs)6<8wJ0rdJ3=Sx>bU?IUER(VyBmR5j0iE8T$E|AIKj zk_=v`3MNM?(5$>B->fcWX}Ae+t=h(RhsuXck3F=#Lg^H3e$f+~;p2Y;%XgTx!VHR#?2CF;aW>Vw`r z;`1kzJj3{Ya`$rHD}%AZ-uU*s_&G13YRxYl8@Z!9c|Z;)nFU@zs#qQ$WQsmZp6gUi ze!Z-BqFzroN)rK~WQXixAyX{nbq9eSVO{e{ z`!dkPL}BEkUQP8^i5uB@Ek35xTxKW=_hbhI>oelxOhOs#m>m`B87+Z)YCO(T&}Mlu zH7*p@k2G9-x0*#R&#h}HQXh&+x#WV7h^n5CS}=}^T#O8VQpa~1E|T<`qn^xpq0zT) zuu}i@YLEmZV_)UA{)>D`Z*g6(68T*r<~rXcNb2_0zn9oZP`rE#;**&quwLgl;iDINg$IZvUk8y5_unz~bj};Cdz~~GxWW^eFZa2mpiI}3b zsj+Pc3K?8d(vPzMbes%1b65}1u%z^4`T|xpT7Q#QvSxVi?9rzJAVW^K&C7r2SFxYiakPbvYMWG(;J>2>SN}Ir?f$p?%N*1Xh?NHSF`kWq zL(yE_{~x5pttdM?Tl+(2Gi|ZfJn0>pzV*&$ekM06b)q4lJ_iDw{({5dCVba@SupVp z7Q^QyGp($ba;p_Bj&o@Yqg`ztg4Et!a&?B2rJVE0>i?ookwGnS61pDG{9d|6D?9a) zG?@lvtHDo2p&wA?V_W%3aW-fQ2Wd7nsYmvxtrq_+lS%1 O8>WU9P$I + + + + + + +MyLibs: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    BenchTimeChannel_t Member List
    +
    +
    + +

    This is the complete list of members for BenchTimeChannel_t, including all inherited members.

    + + + + + +
    is_runningBenchTimeChannel_t
    start_tickBenchTimeChannel_t
    statsBenchTimeChannel_t
    tick_periodBenchTimeChannel_t
    +
    +
    + + + + diff --git a/Doc/html/struct_bench_time_channel__t.html b/Doc/html/struct_bench_time_channel__t.html new file mode 100644 index 0000000..09d2745 --- /dev/null +++ b/Doc/html/struct_bench_time_channel__t.html @@ -0,0 +1,229 @@ + + + + + + + +MyLibs: BenchTimeChannel_t Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    BenchTimeChannel_t Struct Reference
    +
    +
    + +

    Структура канала измерения + More...

    + +

    #include <bench_time.h>

    +
    Collaboration diagram for BenchTimeChannel_t:
    +
    +
    + + + + + + + + + + + +

    +Public Attributes

    uint32_t start_tick
     Время старта в тиках
    uint32_t tick_period
     Период тиков для переполнения
    uint32_t is_running
     Флаг активного измерения
    BenchTimeStats_t stats
     Статистика измерений
    +

    Detailed Description

    +

    Структура канала измерения

    + +

    Definition at line 92 of file bench_time.h.

    +

    Member Data Documentation

    + +

    ◆ start_tick

    + +
    +
    + + + + +
    uint32_t BenchTimeChannel_t::start_tick
    +
    + +

    Время старта в тиках

    + +

    Definition at line 93 of file bench_time.h.

    + +
    +
    + +

    ◆ tick_period

    + +
    +
    + + + + +
    uint32_t BenchTimeChannel_t::tick_period
    +
    + +

    Период тиков для переполнения

    + +

    Definition at line 94 of file bench_time.h.

    + +
    +
    + +

    ◆ is_running

    + +
    +
    + + + + +
    uint32_t BenchTimeChannel_t::is_running
    +
    + +

    Флаг активного измерения

    + +

    Definition at line 95 of file bench_time.h.

    + +
    +
    + +

    ◆ stats

    + +
    +
    + + + + +
    BenchTimeStats_t BenchTimeChannel_t::stats
    +
    + +

    Статистика измерений

    + +

    Definition at line 96 of file bench_time.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/bench_time.h
    • +
    +
    +
    + +
    + + + + diff --git a/Doc/html/struct_bench_time_channel__t.js b/Doc/html/struct_bench_time_channel__t.js new file mode 100644 index 0000000..ec6b79e --- /dev/null +++ b/Doc/html/struct_bench_time_channel__t.js @@ -0,0 +1,7 @@ +var struct_bench_time_channel__t = +[ + [ "start_tick", "struct_bench_time_channel__t.html#a8140fe9e3d323404651f0cfeeae53928", null ], + [ "tick_period", "struct_bench_time_channel__t.html#a095d93e0228641f58b8661e263bc1bcd", null ], + [ "is_running", "struct_bench_time_channel__t.html#a0f80bb194231df7921712d20bac603c9", null ], + [ "stats", "struct_bench_time_channel__t.html#a22a3913e7925aa89cc12ec1d24a6c16c", null ] +]; \ No newline at end of file diff --git a/Doc/html/struct_bench_time_channel__t__coll__graph.map b/Doc/html/struct_bench_time_channel__t__coll__graph.map new file mode 100644 index 0000000..64ddd1a --- /dev/null +++ b/Doc/html/struct_bench_time_channel__t__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/Doc/html/struct_bench_time_channel__t__coll__graph.md5 b/Doc/html/struct_bench_time_channel__t__coll__graph.md5 new file mode 100644 index 0000000..abd7684 --- /dev/null +++ b/Doc/html/struct_bench_time_channel__t__coll__graph.md5 @@ -0,0 +1 @@ +5f298be6c8f367b71f1703e38d9f38a3 \ No newline at end of file diff --git a/Doc/html/struct_bench_time_channel__t__coll__graph.png b/Doc/html/struct_bench_time_channel__t__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ae2c4a600b05a7edcd159b9048222879feaba999 GIT binary patch literal 1827 zcmZ9M2{aq%7RPl^o~>2V#S+BUmYLEjt)*HL#FDhA*h0rz6h$o6swp}er0ug)(X@iG zFHJ46wFtFOWTFNMVo4)SQ6aU2Vb08)H}Ct-cYo*JbM86!-tYV``Z~-~QcO-vKtMne zY6Z66CwBim5k0(b`6jI0eH`|(u>=e39b8;nX~uqF916bX7*oKZjRYz9o)lSO=Gl!t z_sVybbvx~t;&B$Ee<+}>5@$tHND8dWPDn;QGuunp6;6nq&<4d&3h<@4aTAv#r>r1w zplp()8HuoAIq1h+{}qpgEq>e{HX0dh+2&uhit?lL;x=fS%iF^~^)^ELl?YUOXPBj? zriMzB4-M4)bU!585DTE0d24)+!C>O9oRsj;IV0XxM83Ua0Y0~seZksrWKGV0q_Ft$ zW8n;jj!-qS#X?IS$_Qj3zA1&;S!Oy&{ z&jzWM;PovZTa8MSqVKqztAuGobu+W>y6|xn&4w-bR^&Ub7$YzXHMsLhi)hkn8ruBn zA)s2`h&)$MvA=nb142L#_khuZK}G*cyz8j8wL%f~j@dTDB1}+4^&ROm8eHwcbg4&;|ApgsKWuFg!(58+Y~J?tMr>PA zQ2|P3(m}?}o7Y(Ww8(mJ$DgX3mRa0PT`2dy3m8KkHZ0xAz<+aRX2#bqIlCv}FW{V! ztmh;>Xw_*1+O=AIFH&C`;b`bOpkl zp||fzA)CV%uL0_s533?!ZhKeW;$-0@&YG;LTEk0shG`}AbIVIi-7j$|BPo7P*T{3~R z+TwSAr!AcU3VE!A4ZK|Lr3xQWVM%BYRbz2IGbiNqJctk07CbAS_Fl~Oxb|-WD5MYn z#1xK3f7-?_AL#AR1DX9nM$i-6+8qBz_mauw+fz;4wa;zkb77J{NXd`;M5Z~%HTEqz z)6dgF40vt@Yy~!`wYbA~HYq^=g#vwy6Gi=^FW=iK>XMH%szdc7Y~BQEc1{+lI(`eA zXb1HYMJYk(Q42h%D2uJCSb|8+AJSmkCf>8urp2#q3PwfS?A@I#Ga90VxTp zstm8LnSHG@dTOP0Cgf;@DRNBjB=A*duf;&IqCDc<--TZ~^6|dJ%tNBr%8CC7YVauU zy{!z7CgTOe{vU!d@rHjV)k^Rvr{3{Vq!~u-p(!{*;$Iu$uW?NkvQbq|Y}8R9M7d}W zz~M!5$x}YPU~g{o%M!n@V;P|c$KEUCL0f3;()0$Vophq|rT#&tpP%16C<1nsog9yg z1BWgbCEgTqaFdspmlb+{Ubzp_WjbGhmL6De8~9;o==<1!F{I_K@~0>j9VrXl>ve%mHvPD{_?+BV8Z-J)F!Z*7>{*m4iEuioSA-cQplYy7Xp=!L|BrJ;Is# zLwFO|mP=^?bZ0iUbCuogJyD2Z2D$oY)5sHJT-O&Dv8=EL!`GFuYYjP#Gy=c6QW0Vr z8{s^r?`!(({8Ej>bgBkcs{`$VdYL@@M9Ba!alN#?=JRJN;R2g0Z$seayH9=B@xkzo z#7*9-aWt4KOm^wY%ha-QGKS1a<}^k&lbn<$4D-e#TDBMr#`fUO`qY&BZ2ymh&33qT z*%}tce6bScu5dW)wdS$wp7(Y=g2mINo>)ayrLh42v)|nrXz-|M|97%)HCdVVrpL&e jVqT9_2pRB$&)4zU6|t)wO7qkF3OMkg5E!`H>{h}bITeX> literal 0 HcmV?d00001 diff --git a/Doc/html/struct_bench_time_stats__t-members.html b/Doc/html/struct_bench_time_stats__t-members.html new file mode 100644 index 0000000..2b179d6 --- /dev/null +++ b/Doc/html/struct_bench_time_stats__t-members.html @@ -0,0 +1,121 @@ + + + + + + + +MyLibs: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    BenchTimeStats_t Member List
    +
    + +
    +
    + + + + diff --git a/Doc/html/struct_bench_time_stats__t.html b/Doc/html/struct_bench_time_stats__t.html new file mode 100644 index 0000000..7df43c4 --- /dev/null +++ b/Doc/html/struct_bench_time_stats__t.html @@ -0,0 +1,238 @@ + + + + + + + +MyLibs: BenchTimeStats_t Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    BenchTimeStats_t Struct Reference
    +
    +
    + +

    Структура статистики измерений + More...

    + +

    #include <bench_time.h>

    + + + + + + + + + + + + +

    +Public Attributes

    uint32_t min_ticks
     Минимальное время в тиках
    uint32_t max_ticks
     Максимальное время в тиках
    uint32_t total_ticks
     Суммарное время в тиках
    uint32_t count
     Количество измерений
    uint32_t last_ticks
     Последнее измеренное время
    +

    Detailed Description

    +

    Структура статистики измерений

    + +

    Definition at line 81 of file bench_time.h.

    +

    Member Data Documentation

    + +

    ◆ min_ticks

    + +
    +
    + + + + +
    uint32_t BenchTimeStats_t::min_ticks
    +
    + +

    Минимальное время в тиках

    + +

    Definition at line 82 of file bench_time.h.

    + +
    +
    + +

    ◆ max_ticks

    + +
    +
    + + + + +
    uint32_t BenchTimeStats_t::max_ticks
    +
    + +

    Максимальное время в тиках

    + +

    Definition at line 83 of file bench_time.h.

    + +
    +
    + +

    ◆ total_ticks

    + +
    +
    + + + + +
    uint32_t BenchTimeStats_t::total_ticks
    +
    + +

    Суммарное время в тиках

    + +

    Definition at line 84 of file bench_time.h.

    + +
    +
    + +

    ◆ count

    + +
    +
    + + + + +
    uint32_t BenchTimeStats_t::count
    +
    + +

    Количество измерений

    + +

    Definition at line 85 of file bench_time.h.

    + +
    +
    + +

    ◆ last_ticks

    + +
    +
    + + + + +
    uint32_t BenchTimeStats_t::last_ticks
    +
    + +

    Последнее измеренное время

    + +

    Definition at line 86 of file bench_time.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/bench_time.h
    • +
    +
    +
    + +
    + + + + diff --git a/Doc/html/struct_bench_time_stats__t.js b/Doc/html/struct_bench_time_stats__t.js new file mode 100644 index 0000000..20c1e62 --- /dev/null +++ b/Doc/html/struct_bench_time_stats__t.js @@ -0,0 +1,8 @@ +var struct_bench_time_stats__t = +[ + [ "min_ticks", "struct_bench_time_stats__t.html#a39b71a5d48c4a51a553a26a9fb961ac8", null ], + [ "max_ticks", "struct_bench_time_stats__t.html#a3da36eb65b03ba995b5905b4650ea93c", null ], + [ "total_ticks", "struct_bench_time_stats__t.html#a21499b0b19d1ed27f8cea069f674e8ec", null ], + [ "count", "struct_bench_time_stats__t.html#a5e95ef31dd0daf973894ef2f034d1f71", null ], + [ "last_ticks", "struct_bench_time_stats__t.html#a2c739e1db6b26ceac5db3f2c44c177a0", null ] +]; \ No newline at end of file diff --git a/Doc/html/struct_evolve_optimizer__t.html b/Doc/html/struct_evolve_optimizer__t.html deleted file mode 100644 index 12ac0cd..0000000 --- a/Doc/html/struct_evolve_optimizer__t.html +++ /dev/null @@ -1,358 +0,0 @@ - - - - - - - -MyLibs: EvolveOptimizer_t Struct Reference - - - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    MyLibs 1.0 -
    -
    Расширенные библиотеки для STM32
    -
    -
    - - - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    EvolveOptimizer_t Struct Reference
    -
    -
    - -

    Структура эволюционного оптимизатора - More...

    - -

    #include <evolve_optimizer.h>

    - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    float stability
     Коэффициент насколько стабильная популяция (0..1)(n_cand)
    uint16_t n_params
     Количество параметров
    uint16_t n_cand
     Количество кандидатов в популяции
    uint16_t n_best
     Количество лучших, усредняемых
    float mutation_amp
     Амплитуда мутации (0..1)
    uint16_t cand_index
     Индекс кандидата для обработки
    uint16_t gen_index
     Индекс популяции
    float gen_mut
     Амплитуда мутации у текущей популяции
    float loss [100]
     Loss для каждого кандидата
    float candidates [100][20]
     Параметры кандидатов
    uint16_t sorted_idx [100]
     Индексы отсортированных кандидатов
    -

    Detailed Description

    -

    Структура эволюционного оптимизатора

    - -

    Definition at line 102 of file evolve_optimizer.h.

    -

    Member Data Documentation

    - -

    ◆ stability

    - -
    -
    - - - - -
    float EvolveOptimizer_t::stability
    -
    - -

    Коэффициент насколько стабильная популяция (0..1)(n_cand)

    - -

    Definition at line 103 of file evolve_optimizer.h.

    - -
    -
    - -

    ◆ n_params

    - -
    -
    - - - - -
    uint16_t EvolveOptimizer_t::n_params
    -
    - -

    Количество параметров

    - -

    Definition at line 105 of file evolve_optimizer.h.

    - -
    -
    - -

    ◆ n_cand

    - -
    -
    - - - - -
    uint16_t EvolveOptimizer_t::n_cand
    -
    - -

    Количество кандидатов в популяции

    - -

    Definition at line 106 of file evolve_optimizer.h.

    - -
    -
    - -

    ◆ n_best

    - -
    -
    - - - - -
    uint16_t EvolveOptimizer_t::n_best
    -
    - -

    Количество лучших, усредняемых

    - -

    Definition at line 107 of file evolve_optimizer.h.

    - -
    -
    - -

    ◆ mutation_amp

    - -
    -
    - - - - -
    float EvolveOptimizer_t::mutation_amp
    -
    - -

    Амплитуда мутации (0..1)

    - -

    Definition at line 108 of file evolve_optimizer.h.

    - -
    -
    - -

    ◆ cand_index

    - -
    -
    - - - - -
    uint16_t EvolveOptimizer_t::cand_index
    -
    - -

    Индекс кандидата для обработки

    - -

    Definition at line 110 of file evolve_optimizer.h.

    - -
    -
    - -

    ◆ gen_index

    - -
    -
    - - - - -
    uint16_t EvolveOptimizer_t::gen_index
    -
    - -

    Индекс популяции

    - -

    Definition at line 111 of file evolve_optimizer.h.

    - -
    -
    - -

    ◆ gen_mut

    - -
    -
    - - - - -
    float EvolveOptimizer_t::gen_mut
    -
    - -

    Амплитуда мутации у текущей популяции

    - -

    Definition at line 114 of file evolve_optimizer.h.

    - -
    -
    - -

    ◆ loss

    - -
    -
    - - - - -
    float EvolveOptimizer_t::loss[100]
    -
    - -

    Loss для каждого кандидата

    - -

    Definition at line 116 of file evolve_optimizer.h.

    - -
    -
    - -

    ◆ candidates

    - -
    -
    - - - - -
    float EvolveOptimizer_t::candidates[100][20]
    -
    - -

    Параметры кандидатов

    - -

    Definition at line 117 of file evolve_optimizer.h.

    - -
    -
    - -

    ◆ sorted_idx

    - -
    -
    - - - - -
    uint16_t EvolveOptimizer_t::sorted_idx[100]
    -
    - -

    Индексы отсортированных кандидатов

    - -

    Definition at line 118 of file evolve_optimizer.h.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    -
    - -
    - - - - diff --git a/Doc/html/struct_evolve_optimizer__t.js b/Doc/html/struct_evolve_optimizer__t.js deleted file mode 100644 index 588d42a..0000000 --- a/Doc/html/struct_evolve_optimizer__t.js +++ /dev/null @@ -1,14 +0,0 @@ -var struct_evolve_optimizer__t = -[ - [ "stability", "struct_evolve_optimizer__t.html#a80eb0b8525b6bb838484f5922b9d8f7c", null ], - [ "n_params", "struct_evolve_optimizer__t.html#a1c270fce82e0c97e6c88fd0971c1eed8", null ], - [ "n_cand", "struct_evolve_optimizer__t.html#ac35c7ca8cede4ab9c53a2845a91cd1b1", null ], - [ "n_best", "struct_evolve_optimizer__t.html#a950cd70cb6bff33b78ad35ee58c729a6", null ], - [ "mutation_amp", "struct_evolve_optimizer__t.html#af779c7aeba0053e36cee7aade160f1c8", null ], - [ "cand_index", "struct_evolve_optimizer__t.html#a0ae0e63ba351335d4445d927991c64ae", null ], - [ "gen_index", "struct_evolve_optimizer__t.html#ad0f464d7048a9ed0753b61f76f563108", null ], - [ "gen_mut", "struct_evolve_optimizer__t.html#a3be8c0c34db8429210ff470497a56727", null ], - [ "loss", "struct_evolve_optimizer__t.html#a93f628397c2f8d4027f2906752b650df", null ], - [ "candidates", "struct_evolve_optimizer__t.html#aec67667fd1f1533e693e41c79bc28da4", null ], - [ "sorted_idx", "struct_evolve_optimizer__t.html#a74b81df1c298c99162310f3f7d91735a", null ] -]; \ No newline at end of file diff --git a/Doc/html/struct_evolve_optimizer__t-members.html b/Doc/html/struct_gen_optimizer__t-members.html similarity index 61% rename from Doc/html/struct_evolve_optimizer__t-members.html rename to Doc/html/struct_gen_optimizer__t-members.html index dbd3cfc..df5e548 100644 --- a/Doc/html/struct_evolve_optimizer__t-members.html +++ b/Doc/html/struct_gen_optimizer__t-members.html @@ -71,7 +71,7 @@ $(function() { diff --git a/Doc/html/struct_gen_optimizer__t.html b/Doc/html/struct_gen_optimizer__t.html new file mode 100644 index 0000000..2ef2f85 --- /dev/null +++ b/Doc/html/struct_gen_optimizer__t.html @@ -0,0 +1,358 @@ + + + + + + + +MyLibs: GenOptimizer_t Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    GenOptimizer_t Struct Reference
    +
    +
    + +

    Структура эволюционного оптимизатора + More...

    + +

    #include <gen_optimizer.h>

    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    float stability
     Коэффициент насколько стабильная популяция (0..1)(n_cand)
    uint16_t n_params
     Количество параметров
    uint16_t n_cand
     Количество кандидатов в популяции
    uint16_t n_best
     Количество лучших, усредняемых
    float mutation_amp
     Амплитуда мутации (0..1)
    uint16_t cand_index
     Индекс текущего кандидата
    uint16_t gen_index
     Индекс популяции
    float gen_mut
     Амплитуда мутации у текущей популяции
    float loss [100]
     Loss для каждого кандидата
    float candidates [100][20]
     Параметры кандидатов
    uint16_t sorted_idx [100]
     Индексы отсортированных кандидатов
    +

    Detailed Description

    +

    Структура эволюционного оптимизатора

    + +

    Definition at line 102 of file gen_optimizer.h.

    +

    Member Data Documentation

    + +

    ◆ stability

    + +
    +
    + + + + +
    float GenOptimizer_t::stability
    +
    + +

    Коэффициент насколько стабильная популяция (0..1)(n_cand)

    + +

    Definition at line 103 of file gen_optimizer.h.

    + +
    +
    + +

    ◆ n_params

    + +
    +
    + + + + +
    uint16_t GenOptimizer_t::n_params
    +
    + +

    Количество параметров

    + +

    Definition at line 105 of file gen_optimizer.h.

    + +
    +
    + +

    ◆ n_cand

    + +
    +
    + + + + +
    uint16_t GenOptimizer_t::n_cand
    +
    + +

    Количество кандидатов в популяции

    + +

    Definition at line 106 of file gen_optimizer.h.

    + +
    +
    + +

    ◆ n_best

    + +
    +
    + + + + +
    uint16_t GenOptimizer_t::n_best
    +
    + +

    Количество лучших, усредняемых

    + +

    Definition at line 107 of file gen_optimizer.h.

    + +
    +
    + +

    ◆ mutation_amp

    + +
    +
    + + + + +
    float GenOptimizer_t::mutation_amp
    +
    + +

    Амплитуда мутации (0..1)

    + +

    Definition at line 108 of file gen_optimizer.h.

    + +
    +
    + +

    ◆ cand_index

    + +
    +
    + + + + +
    uint16_t GenOptimizer_t::cand_index
    +
    + +

    Индекс текущего кандидата

    + +

    Definition at line 110 of file gen_optimizer.h.

    + +
    +
    + +

    ◆ gen_index

    + +
    +
    + + + + +
    uint16_t GenOptimizer_t::gen_index
    +
    + +

    Индекс популяции

    + +

    Definition at line 111 of file gen_optimizer.h.

    + +
    +
    + +

    ◆ gen_mut

    + +
    +
    + + + + +
    float GenOptimizer_t::gen_mut
    +
    + +

    Амплитуда мутации у текущей популяции

    + +

    Definition at line 114 of file gen_optimizer.h.

    + +
    +
    + +

    ◆ loss

    + +
    +
    + + + + +
    float GenOptimizer_t::loss[100]
    +
    + +

    Loss для каждого кандидата

    + +

    Definition at line 116 of file gen_optimizer.h.

    + +
    +
    + +

    ◆ candidates

    + +
    +
    + + + + +
    float GenOptimizer_t::candidates[100][20]
    +
    + +

    Параметры кандидатов

    + +

    Definition at line 117 of file gen_optimizer.h.

    + +
    +
    + +

    ◆ sorted_idx

    + +
    +
    + + + + +
    uint16_t GenOptimizer_t::sorted_idx[100]
    +
    + +

    Индексы отсортированных кандидатов

    + +

    Definition at line 118 of file gen_optimizer.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + +
    + + + + diff --git a/Doc/html/struct_gen_optimizer__t.js b/Doc/html/struct_gen_optimizer__t.js new file mode 100644 index 0000000..1a11730 --- /dev/null +++ b/Doc/html/struct_gen_optimizer__t.js @@ -0,0 +1,14 @@ +var struct_gen_optimizer__t = +[ + [ "stability", "struct_gen_optimizer__t.html#abe0aacea949fbe93e5d4c002e37d7192", null ], + [ "n_params", "struct_gen_optimizer__t.html#afe598a90024a8aa628dd16f3a2b38eb5", null ], + [ "n_cand", "struct_gen_optimizer__t.html#a9e20d2f6f39a5147e6dbac46baca73a9", null ], + [ "n_best", "struct_gen_optimizer__t.html#a8201f1eede36a2c04ec7b4caac7465c9", null ], + [ "mutation_amp", "struct_gen_optimizer__t.html#ad4dc0e53b3ca6bf2a642dfe7a1d1f26c", null ], + [ "cand_index", "struct_gen_optimizer__t.html#a04a72c1a13e17581e84eaaf3d245bbfc", null ], + [ "gen_index", "struct_gen_optimizer__t.html#a8f226c85e9bb034cb811aa0366bb191c", null ], + [ "gen_mut", "struct_gen_optimizer__t.html#acfeb93ef4823e09473ddba52fae9a6b1", null ], + [ "loss", "struct_gen_optimizer__t.html#a8b5066935d99f2fc7ebb94cc3652fc73", null ], + [ "candidates", "struct_gen_optimizer__t.html#a2c9a50ea7d975b9bc22a67e453ab83df", null ], + [ "sorted_idx", "struct_gen_optimizer__t.html#ad37161efa27ef1390d1f7e6ee2f79b12", null ] +]; \ No newline at end of file diff --git a/Doc/html/topics.html b/Doc/html/topics.html index 8fdffb3..121e67f 100644 --- a/Doc/html/topics.html +++ b/Doc/html/topics.html @@ -105,36 +105,37 @@ $(function(){initNavTree('topics.html','',''); });  My LibsВсе используемые MyLibs библиотеки  ConfigsКонфигурации для библиотек MyLibs  Trace configsКонфигурация трекеров и трассировки - Evolve configsКонфигурация однослойного персептрона и алгоритма обучения + Genetic configsКонфигурация генетического алгоритма обучения  Libraries configsПодключение различных модулей библиотеки  General ToolsОбщие макросы и typedef'ы, используемые по всему проекту  Bit access definesМакросы и typedef'ы для работы с битами в unsigned типах - Evolve optimizerБиблиотека для эволюционного подбора параметров - Error Handler definesДефайны для обработки ошибок - Delays definesМакросы и определения для работы с задержками в миллисекундах - Utils definesОбщие вспомогательные макросы - Trace definesДефайны для работы с трассировкой - Serial trace definesДефайны для работы с serial трассировкой (SWO, RTT) - GPIO trace definesДефайны для работы с GPIO трассировкой - Flash RTT BufferМакросы и функции для сохранения/чтения RTT буфера в Flash - Hardfault trace definesМодуль трассировки HardFault с возможностью сохранения RTT буфера во Flash - Trackers definesДефайны для работы с трекерами - PeripheralМодули для управления периферией - GPIO ToolsФункции и макросы для удобной работы с GPIO - General toolsОбщие функции/макросы для работы с GPIO - Init definesНастройка состояний кнопок и количества тиков в периоде ШИМ - Switch toolsФункции для работы с GPIO, как с кнопкой - LED toolsФункции для работы с GPIO, для управления светодиодом - SPI ToolsФункции и макросы для удобной работы с SPI - Init definesНастройка SPI - TIM ToolsФункции и макросы для удобной работы с TIM - General toolsФункции для базовой инициализации таймеров - Init definesНастройка таймеров - Delay toolsФункции для формирования задержек с помощью таймеров - PWM/OC Channels toolsФункции для инициализации базовых функций каналов таймера - Encoder toolsФункции для считывания энкодера - UART ToolsФункции и макросы для удобной работы с UART - Init definesНастройка UART + Time measurementБиблиотека для измерения времени/тиков между событиями + Genetic optimizerБиблиотека для эволюционного подбора параметров + Error Handler definesДефайны для обработки ошибок + Delays definesМакросы и определения для работы с задержками в миллисекундах + Utils definesОбщие вспомогательные макросы + Trace definesДефайны для работы с трассировкой + Serial trace definesДефайны для работы с serial трассировкой (SWO, RTT) + GPIO trace definesДефайны для работы с GPIO трассировкой + Flash RTT BufferМакросы и функции для сохранения/чтения RTT буфера в Flash + Hardfault trace definesМодуль трассировки HardFault с возможностью сохранения RTT буфера во Flash + Trackers definesДефайны для работы с трекерами + PeripheralМодули для управления периферией + GPIO ToolsФункции и макросы для удобной работы с GPIO + General toolsОбщие функции/макросы для работы с GPIO + Init definesНастройка состояний кнопок и количества тиков в периоде ШИМ + Switch toolsФункции для работы с GPIO, как с кнопкой + LED toolsФункции для работы с GPIO, для управления светодиодом + SPI ToolsФункции и макросы для удобной работы с SPI + Init definesНастройка SPI + TIM ToolsФункции и макросы для удобной работы с TIM + General toolsФункции для базовой инициализации таймеров + Init definesНастройка таймеров + Delay toolsФункции для формирования задержек с помощью таймеров + PWM/OC Channels toolsФункции для инициализации базовых функций каналов таймера + Encoder toolsФункции для считывания энкодера + UART ToolsФункции и макросы для удобной работы с UART + Init definesНастройка UART diff --git a/Doc/html/trace_8h.html b/Doc/html/trace_8h.html index b8f5a47..7ef9cc8 100644 --- a/Doc/html/trace_8h.html +++ b/Doc/html/trace_8h.html @@ -171,6 +171,12 @@ Functions  Проверка и вывод последнего HardFault-трейса из Flash.
    __STATIC_FORCEINLINE void HF_HandleFault (void)  Обработчик HardFault.
    + + + + +

    +Variables

    static HF_StackFrame_tstack_frame
    static uint32_t stack_dump [32]
    static void * ret_adr [10] = {0}

    Detailed Description

    Заголочный файл для работы с трассировкой.

    diff --git a/Doc/latex/annotated.tex b/Doc/latex/annotated.tex index 7c59474..428a296 100644 --- a/Doc/latex/annotated.tex +++ b/Doc/latex/annotated.tex @@ -1,6 +1,9 @@ \doxysection{Class List} Here are the classes, structs, unions and interfaces with brief descriptions\+:\begin{DoxyCompactList} -\item\contentsline{section}{\mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}} \\*Структура эволюционного оптимизатора }{\pageref{struct_evolve_optimizer__t}}{} +\item\contentsline{section}{\mbox{\hyperlink{struct_bench_time__t}{Bench\+Time\+\_\+t}} \\*Основная структура менеджера измерений }{\pageref{struct_bench_time__t}}{} +\item\contentsline{section}{\mbox{\hyperlink{struct_bench_time_channel__t}{Bench\+Time\+Channel\+\_\+t}} \\*Структура канала измерения }{\pageref{struct_bench_time_channel__t}}{} +\item\contentsline{section}{\mbox{\hyperlink{struct_bench_time_stats__t}{Bench\+Time\+Stats\+\_\+t}} \\*Структура статистики измерений }{\pageref{struct_bench_time_stats__t}}{} +\item\contentsline{section}{\mbox{\hyperlink{struct_gen_optimizer__t}{Gen\+Optimizer\+\_\+t}} \\*Структура эволюционного оптимизатора }{\pageref{struct_gen_optimizer__t}}{} \item\contentsline{section}{\mbox{\hyperlink{struct_g_p_i_o___l_e_d_type_def}{GPIO\+\_\+\+LEDType\+Def}} \\*Структура светодиода }{\pageref{struct_g_p_i_o___l_e_d_type_def}}{} \item\contentsline{section}{\mbox{\hyperlink{struct_g_p_i_o___switch_type_def}{GPIO\+\_\+\+Switch\+Type\+Def}} \\*Структура кнопки }{\pageref{struct_g_p_i_o___switch_type_def}}{} \item\contentsline{section}{\mbox{\hyperlink{struct_h_f___stack_frame__t}{HF\+\_\+\+Stack\+Frame\+\_\+t}} \\*Контекст стек-\/фрейма процессора при Hard\+Fault }{\pageref{struct_h_f___stack_frame__t}}{} diff --git a/Doc/latex/bench__time_8h.tex b/Doc/latex/bench__time_8h.tex new file mode 100644 index 0000000..db1c3db --- /dev/null +++ b/Doc/latex/bench__time_8h.tex @@ -0,0 +1,61 @@ +\doxysection{E\+:/.WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/bench\+\_\+time.h File Reference} +\hypertarget{bench__time_8h}{}\label{bench__time_8h}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/bench\_time.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/bench\_time.h}} + + +Заголовочный файл для измерения времени между событиями + + +{\ttfamily \#include "{}mylibs\+\_\+defs.\+h"{}}\newline +{\ttfamily \#include $<$stdint.\+h$>$}\newline +Include dependency graph for bench\+\_\+time.\+h\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=230pt]{bench__time_8h__incl} +\end{center} +\end{figure} +\doxysubsubsection*{Classes} +\begin{DoxyCompactItemize} +\item +struct \mbox{\hyperlink{struct_bench_time_stats__t}{Bench\+Time\+Stats\+\_\+t}} +\begin{DoxyCompactList}\small\item\em Структура статистики измерений \end{DoxyCompactList}\item +struct \mbox{\hyperlink{struct_bench_time_channel__t}{Bench\+Time\+Channel\+\_\+t}} +\begin{DoxyCompactList}\small\item\em Структура канала измерения \end{DoxyCompactList}\item +struct \mbox{\hyperlink{struct_bench_time__t}{Bench\+Time\+\_\+t}} +\begin{DoxyCompactList}\small\item\em Основная структура менеджера измерений \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +static void \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gabb7a665a9603ea2e4dbc4432e8cb6054}{Bench\+Time\+\_\+\+Init}} (void) +\begin{DoxyCompactList}\small\item\em Инициализация системы измерения времени \end{DoxyCompactList}\item +static uint32\+\_\+t \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gac65338df38129964ce3e9d9cb2fcb349}{Bench\+Time\+\_\+\+Start}} (uint8\+\_\+t channel, uint32\+\_\+t ticks, uint32\+\_\+t tick\+\_\+period) +\begin{DoxyCompactList}\small\item\em Начало измерения на указанном канале \end{DoxyCompactList}\item +static uint32\+\_\+t \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga47a69851a2089140eac00cde18a12439}{Bench\+Time\+\_\+\+End}} (uint8\+\_\+t channel, uint32\+\_\+t ticks) +\begin{DoxyCompactList}\small\item\em Окончание измерения на указанном канале \end{DoxyCompactList}\item +static uint32\+\_\+t \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga273d45255fe4403fc25648d60cca7705}{Bench\+Time\+\_\+\+Get\+Min}} (uint8\+\_\+t channel) +\begin{DoxyCompactList}\small\item\em Получение минимального времени измерения \end{DoxyCompactList}\item +static uint32\+\_\+t \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga07e27d7b169c9fa1abd57281bb4e374e}{Bench\+Time\+\_\+\+Get\+Max}} (uint8\+\_\+t channel) +\begin{DoxyCompactList}\small\item\em Получение максимального времени измерения \end{DoxyCompactList}\item +static uint32\+\_\+t \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga24e2450d5ea921074ec5d7a1e4d56ba8}{Bench\+Time\+\_\+\+Get\+Average}} (uint8\+\_\+t channel) +\begin{DoxyCompactList}\small\item\em Получение среднего времени измерения \end{DoxyCompactList}\item +static uint32\+\_\+t \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gabd1301ca79a30c782970f89fd147df3a}{Bench\+Time\+\_\+\+Get\+Count}} (uint8\+\_\+t channel) +\begin{DoxyCompactList}\small\item\em Получение количества измерений \end{DoxyCompactList}\item +static uint32\+\_\+t \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gacf3a738d6423d71b238058a63558a4ed}{Bench\+Time\+\_\+\+Get\+Last}} (uint8\+\_\+t channel) +\begin{DoxyCompactList}\small\item\em Получение последнего измеренного времени \end{DoxyCompactList}\item +static void \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga31a6b2b181b92bcb15f46758f5d57f35}{Bench\+Time\+\_\+\+Reset\+Stats}} (uint8\+\_\+t channel) +\begin{DoxyCompactList}\small\item\em Сброс статистики для канала \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsubsection*{Variables} +\begin{DoxyCompactItemize} +\item +static \mbox{\hyperlink{struct_bench_time__t}{Bench\+Time\+\_\+t}} \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}} = \{0\} +\begin{DoxyCompactList}\small\item\em Внутренний экземпляр \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +Заголовочный файл для измерения времени между событиями + + + +Definition in file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + diff --git a/Doc/latex/bench__time_8h__incl.md5 b/Doc/latex/bench__time_8h__incl.md5 new file mode 100644 index 0000000..1ed4101 --- /dev/null +++ b/Doc/latex/bench__time_8h__incl.md5 @@ -0,0 +1 @@ +122aa7271e7507ca099dc86bd8c9c747 \ No newline at end of file diff --git a/Doc/latex/bench__time_8h__incl.pdf b/Doc/latex/bench__time_8h__incl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1bd577ff11abfc96d435aa2db30624b44fc20e00 GIT binary patch literal 21634 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 z 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 literal 0 HcmV?d00001 diff --git a/Doc/latex/bench__time_8h_source.tex b/Doc/latex/bench__time_8h_source.tex new file mode 100644 index 0000000..7f76067 --- /dev/null +++ b/Doc/latex/bench__time_8h_source.tex @@ -0,0 +1,264 @@ +\doxysection{bench\+\_\+time.\+h} +\hypertarget{bench__time_8h_source}{}\label{bench__time_8h_source}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/bench\_time.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/bench\_time.h}} +\mbox{\hyperlink{bench__time_8h}{Go to the documentation of this file.}} +\begin{DoxyCode}{0} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00001}00001\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00002}00002\ \textcolor{comment}{******************************************************************************}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00003}00003\ \textcolor{comment}{*\ @file\ bench\_time.h}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00004}00004\ \textcolor{comment}{*\ @brief\ Заголовочный\ файл\ для\ измерения\ времени\ между\ событиями}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00005}00005\ \textcolor{comment}{******************************************************************************}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00006}00006\ \textcolor{comment}{*\ @addtogroup\ BENCH\_TIME\ \ \ \ Time\ measurement}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00007}00007\ \textcolor{comment}{*\ @ingroup\ \ \ \ MYLIBS\_DEFINES}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00008}00008\ \textcolor{comment}{*\ @brief\ \ \ \ \ \ Библиотека\ для\ измерения\ времени/тиков\ между\ событиями}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00009}00009\ \textcolor{comment}{*\ @details}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00010}00010\ \textcolor{comment}{Поддерживает:}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00011}00011\ \textcolor{comment}{-\/\ Многоканальные\ измерения\ (несколько\ независимых\ таймеров)}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00012}00012\ \textcolor{comment}{-\/\ Платформонезависимый\ интерфейс}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00013}00013\ \textcolor{comment}{-\/\ Измерение\ в\ тиках\ или\ временных\ единицах}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00014}00014\ \textcolor{comment}{-\/\ Статистику\ измерений\ (мин/макс/среднее)}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00015}00015\ \textcolor{comment}{-\/\ Настраиваемый\ размер\ тиков\ для\ каждого\ канала}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00016}00016\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00017}00017\ \textcolor{comment}{Параметры\ для\ конфигурации:}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00018}00018\ \textcolor{comment}{-\/\ @ref\ BENCH\_TIME\_ENABLE\ -\/\ Включить\ бенч\ времени}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00019}00019\ \textcolor{comment}{-\/\ @ref\ BENCH\_TIME\_MAX\_CHANNELS\ -\/\ Максимальное\ количество\ каналов\ измерения\ (по\ умолчанию\ 8)}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00020}00020\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00021}00021\ \textcolor{comment}{@par\ Пример\ использования:}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00022}00022\ \textcolor{comment}{@code}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00023}00023\ \textcolor{comment}{\#include\ "{}bench\_time.h"{}}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00024}00024\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00025}00025\ \textcolor{comment}{//\ Инициализация}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00026}00026\ \textcolor{comment}{BenchTime\_Init();}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00027}00027\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00028}00028\ \textcolor{comment}{//\ Измерение\ с\ SysTick}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00029}00029\ \textcolor{comment}{BenchTime\_Start(0,\ HAL\_GetTick,\ 0xFFFFFFFF);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00030}00030\ \textcolor{comment}{some\_function();}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00031}00031\ \textcolor{comment}{uint32\_t\ time\ =\ BenchTime\_End(0,\ HAL\_GetTick);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00032}00032\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00033}00033\ \textcolor{comment}{//\ Измерение\ с\ TIM2\ (16-\/бит)}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00034}00034\ \textcolor{comment}{BenchTime\_Start(1,\ TIM2-\/>CNT,\ 0xFFFF);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00035}00035\ \textcolor{comment}{fast\_function();\ }} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00036}00036\ \textcolor{comment}{uint32\_t\ time2\ =\ BenchTime\_End(1,\ TIM2-\/>CNT);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00037}00037\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00038}00038\ \textcolor{comment}{//\ Измерение\ с\ DWT\ цикловым\ счетчиком}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00039}00039\ \textcolor{comment}{BenchTime\_Start(2,\ DWT-\/>CYCCNT,\ 0xFFFFFFFF);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00040}00040\ \textcolor{comment}{critical\_function();}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00041}00041\ \textcolor{comment}{uint32\_t\ cycles\ =\ BenchTime\_End(2,\ DWT-\/>CYCCNT);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00042}00042\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00043}00043\ \textcolor{comment}{//\ Многоканальное\ измерение}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00044}00044\ \textcolor{comment}{BenchTime\_Start(0,\ HAL\_GetTick,\ 1000);\ \ \ \ \ \ \ \ //\ общее\ время}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00045}00045\ \textcolor{comment}{BenchTime\_Start(1,\ TIM3-\/>CNT,\ 500);\ \ \ \ \ \ \ \ \ \ \ //\ часть\ 1}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00046}00046\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00047}00047\ \textcolor{comment}{//\ ...\ код\ 1}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00048}00048\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00049}00049\ \textcolor{comment}{uint32\_t\ part1\ =\ BenchTime\_End(1,\ TIM3-\/>CNT);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00050}00050\ \textcolor{comment}{BenchTime\_Start(2,\ TIM4-\/>CNT,\ 200);\ \ \ \ \ \ \ \ \ \ \ //\ часть\ 2\ \ }} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00051}00051\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00052}00052\ \textcolor{comment}{//\ ...\ код\ 2}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00053}00053\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00054}00054\ \textcolor{comment}{uint32\_t\ part2\ =\ BenchTime\_End(2,\ TIM4-\/>CNT);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00055}00055\ \textcolor{comment}{uint32\_t\ total\ =\ BenchTime\_End(0,\ HAL\_GetTick);\ //\ общее\ время}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00056}00056\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00057}00057\ \textcolor{comment}{//\ Статистика}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00058}00058\ \textcolor{comment}{uint32\_t\ min\_time\ =\ BenchTime\_GetMin(0);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00059}00059\ \textcolor{comment}{uint32\_t\ max\_time\ =\ BenchTime\_GetMax(0);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00060}00060\ \textcolor{comment}{uint32\_t\ avg\_time\ =\ BenchTime\_GetAverage(0);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00061}00061\ \textcolor{comment}{uint32\_t\ count\ =\ BenchTime\_GetCount(0);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00062}00062\ \textcolor{comment}{@endcode}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00063}00063\ \textcolor{comment}{*\ @\{\ \ }} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00064}00064\ \textcolor{comment}{*****************************************************************************/}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00065}00065\ \textcolor{preprocessor}{\#ifndef\ \_\_BENCH\_TIME\_H\_}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00066}00066\ \textcolor{preprocessor}{\#define\ \_\_BENCH\_TIME\_H\_}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00067}00067\ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00068}00068\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{mylibs__defs_8h}{mylibs\_defs.h}}"{}}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00069}00069\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00070}00070\ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00071}00071\ \textcolor{preprocessor}{\#ifdef\ BENCH\_TIME\_ENABLE}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00072}00072\ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00073}00073\ \textcolor{comment}{//\ Конфигурация\ библиотеки}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00074}00074\ \textcolor{preprocessor}{\#ifndef\ BENCH\_TIME\_MAX\_CHANNELS}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00075}00075\ \textcolor{preprocessor}{\#define\ BENCH\_TIME\_MAX\_CHANNELS\ \ 8\ \ \ \ }\textcolor{comment}{///<\ Максимальное\ количество\ каналов\ измерения}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00076}00076\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00077}00077\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00078}00078\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00079}00079\ \textcolor{comment}{\ \ *\ @brief\ Структура\ статистики\ измерений}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00080}00080\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00081}\mbox{\hyperlink{struct_bench_time_stats__t}{00081}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00082}\mbox{\hyperlink{struct_bench_time_stats__t_a39b71a5d48c4a51a553a26a9fb961ac8}{00082}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_bench_time_stats__t_a39b71a5d48c4a51a553a26a9fb961ac8}{min\_ticks}};\ \ \ \ \ \ \textcolor{comment}{///<\ Минимальное\ время\ в\ тиках}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00083}\mbox{\hyperlink{struct_bench_time_stats__t_a3da36eb65b03ba995b5905b4650ea93c}{00083}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_bench_time_stats__t_a3da36eb65b03ba995b5905b4650ea93c}{max\_ticks}};\ \ \ \ \ \ \textcolor{comment}{///<\ Максимальное\ время\ в\ тиках\ \ }} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00084}\mbox{\hyperlink{struct_bench_time_stats__t_a21499b0b19d1ed27f8cea069f674e8ec}{00084}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_bench_time_stats__t_a21499b0b19d1ed27f8cea069f674e8ec}{total\_ticks}};\ \ \ \ \textcolor{comment}{///<\ Суммарное\ время\ в\ тиках}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00085}\mbox{\hyperlink{struct_bench_time_stats__t_a5e95ef31dd0daf973894ef2f034d1f71}{00085}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_bench_time_stats__t_a5e95ef31dd0daf973894ef2f034d1f71}{count}};\ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Количество\ измерений}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00086}\mbox{\hyperlink{struct_bench_time_stats__t_a2c739e1db6b26ceac5db3f2c44c177a0}{00086}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_bench_time_stats__t_a2c739e1db6b26ceac5db3f2c44c177a0}{last\_ticks}};\ \ \ \ \ \textcolor{comment}{///<\ Последнее\ измеренное\ время}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00087}00087\ \}\ \mbox{\hyperlink{struct_bench_time_stats__t}{BenchTimeStats\_t}};} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00088}00088\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00089}00089\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00090}00090\ \textcolor{comment}{\ \ *\ @brief\ Структура\ канала\ измерения}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00091}00091\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00092}\mbox{\hyperlink{struct_bench_time_channel__t}{00092}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00093}\mbox{\hyperlink{struct_bench_time_channel__t_a8140fe9e3d323404651f0cfeeae53928}{00093}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_bench_time_channel__t_a8140fe9e3d323404651f0cfeeae53928}{start\_tick}};\ \ \ \ \ \textcolor{comment}{///<\ Время\ старта\ в\ тиках}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00094}\mbox{\hyperlink{struct_bench_time_channel__t_a095d93e0228641f58b8661e263bc1bcd}{00094}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_bench_time_channel__t_a095d93e0228641f58b8661e263bc1bcd}{tick\_period}};\ \ \ \ \textcolor{comment}{///<\ Период\ тиков\ для\ переполнения}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00095}\mbox{\hyperlink{struct_bench_time_channel__t_a0f80bb194231df7921712d20bac603c9}{00095}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_bench_time_channel__t_a0f80bb194231df7921712d20bac603c9}{is\_running}};\ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Флаг\ активного\ измерения}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00096}\mbox{\hyperlink{struct_bench_time_channel__t_a22a3913e7925aa89cc12ec1d24a6c16c}{00096}}\ \ \ \mbox{\hyperlink{struct_bench_time_stats__t}{BenchTimeStats\_t}}\ \mbox{\hyperlink{struct_bench_time_channel__t_a22a3913e7925aa89cc12ec1d24a6c16c}{stats}};\ \ \textcolor{comment}{///<\ Статистика\ измерений}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00097}00097\ \}\ \mbox{\hyperlink{struct_bench_time_channel__t}{BenchTimeChannel\_t}};} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00098}00098\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00099}00099\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00100}00100\ \textcolor{comment}{\ \ *\ @brief\ Основная\ структура\ менеджера\ измерений}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00101}00101\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00102}\mbox{\hyperlink{struct_bench_time__t}{00102}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00103}\mbox{\hyperlink{struct_bench_time__t_a9ae6d45c610be9d4b7628a614ccb06d6}{00103}}\ \ \ \mbox{\hyperlink{struct_bench_time_channel__t}{BenchTimeChannel\_t}}\ \mbox{\hyperlink{struct_bench_time__t_a9ae6d45c610be9d4b7628a614ccb06d6}{channels}}[\mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga74fdf777ceefa5e7d67120fbda4cde52}{BENCH\_TIME\_MAX\_CHANNELS}}];\ \textcolor{comment}{///<\ Каналы\ измерения}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00104}00104\ \}\ \mbox{\hyperlink{struct_bench_time__t}{BenchTime\_t}};} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00105}00105\ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00106}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{00106}}\ \textcolor{keyword}{static}\ \mbox{\hyperlink{struct_bench_time__t}{BenchTime\_t}}\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}\ =\ \{0\};\ \textcolor{comment}{///<\ Внутренний\ экземпляр}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00107}00107\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00108}00108\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00109}00109\ \textcolor{comment}{\ \ *\ @brief\ Инициализация\ системы\ измерения\ времени}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00110}00110\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00111}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gabb7a665a9603ea2e4dbc4432e8cb6054}{00111}}\ \textcolor{keyword}{static}\ \textcolor{keyword}{inline}\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gabb7a665a9603ea2e4dbc4432e8cb6054}{BenchTime\_Init}}(\textcolor{keywordtype}{void})\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00112}00112\ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keywordtype}{int}\ i\ =\ 0;\ i\ <\ \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga74fdf777ceefa5e7d67120fbda4cde52}{BENCH\_TIME\_MAX\_CHANNELS}};\ i++)\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00113}00113\ \ \ \ \ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[i].start\_tick\ =\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00114}00114\ \ \ \ \ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[i].tick\_period\ =\ 0xFFFFFFFF;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00115}00115\ \ \ \ \ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[i].is\_running\ =\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00116}00116\ \ \ \ \ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[i].stats.min\_ticks\ =\ 0xFFFFFFFF;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00117}00117\ \ \ \ \ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[i].stats.max\_ticks\ =\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00118}00118\ \ \ \ \ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[i].stats.total\_ticks\ =\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00119}00119\ \ \ \ \ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[i].stats.count\ =\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00120}00120\ \ \ \ \ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[i].stats.last\_ticks\ =\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00121}00121\ \ \ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00122}00122\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00123}00123\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00124}00124\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00125}00125\ \textcolor{comment}{\ \ *\ @brief\ Начало\ измерения\ на\ указанном\ канале}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00126}00126\ \textcolor{comment}{\ \ *\ @param\ channel\ Номер\ канала\ (0..BENCH\_TIME\_MAX\_CHANNELS-\/1)}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00127}00127\ \textcolor{comment}{\ \ *\ @param\ ticks\ Источник\ тиков\ (например:\ HAL\_GetTick(),\ TIM2-\/>CNT,\ DWT-\/>CYCCNT)}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00128}00128\ \textcolor{comment}{\ \ *\ @param\ tick\_period\ Период\ тиков\ для\ переполнения}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00129}00129\ \textcolor{comment}{\ \ *\ @return\ 1\ -\/\ успех,\ 0\ -\/\ ошибка}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00130}00130\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00131}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gac65338df38129964ce3e9d9cb2fcb349}{00131}}\ \textcolor{keyword}{static}\ \textcolor{keyword}{inline}\ uint32\_t\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gac65338df38129964ce3e9d9cb2fcb349}{BenchTime\_Start}}(uint8\_t\ channel,\ uint32\_t\ ticks,\ uint32\_t\ tick\_period)\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00132}00132\ \ \ \textcolor{keywordflow}{if}\ (channel\ >=\ \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga74fdf777ceefa5e7d67120fbda4cde52}{BENCH\_TIME\_MAX\_CHANNELS}})\ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00133}00133\ \ \ \textcolor{keywordflow}{if}\ (\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[channel].is\_running)\ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00134}00134\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00135}00135\ \ \ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[channel].start\_tick\ =\ ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00136}00136\ \ \ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[channel].tick\_period\ =\ tick\_period;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00137}00137\ \ \ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[channel].is\_running\ =\ 1;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00138}00138\ \ \ \textcolor{keywordflow}{return}\ 1;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00139}00139\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00140}00140\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00141}00141\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00142}00142\ \textcolor{comment}{\ \ *\ @brief\ Окончание\ измерения\ на\ указанном\ канале}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00143}00143\ \textcolor{comment}{\ \ *\ @param\ channel\ Номер\ канала\ (0..BENCH\_TIME\_MAX\_CHANNELS-\/1)}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00144}00144\ \textcolor{comment}{\ \ *\ @param\ ticks\ Источник\ тиков\ (должен\ быть\ тот\ же\ что\ в\ Start)}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00145}00145\ \textcolor{comment}{\ \ *\ @return\ Измеренное\ время\ в\ тиках,\ 0\ -\/\ в\ случае\ ошибки}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00146}00146\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00147}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga47a69851a2089140eac00cde18a12439}{00147}}\ \textcolor{keyword}{static}\ \textcolor{keyword}{inline}\ uint32\_t\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga47a69851a2089140eac00cde18a12439}{BenchTime\_End}}(uint8\_t\ channel,\ uint32\_t\ ticks)\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00148}00148\ \ \ \textcolor{keywordflow}{if}\ (channel\ >=\ \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga74fdf777ceefa5e7d67120fbda4cde52}{BENCH\_TIME\_MAX\_CHANNELS}})\ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00149}00149\ \ \ \textcolor{keywordflow}{if}\ (!\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[channel].is\_running)\ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00150}00150\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00151}00151\ \ \ uint32\_t\ end\_tick\ =\ ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00152}00152\ \ \ uint32\_t\ start\_tick\ =\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[channel].start\_tick;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00153}00153\ \ \ uint32\_t\ tick\_period\ =\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[channel].tick\_period;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00154}00154\ \ \ uint32\_t\ elapsed\_ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00155}00155\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00156}00156\ \ \ \textcolor{keywordflow}{if}\ (end\_tick\ >=\ start\_tick)\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00157}00157\ \ \ \ \ elapsed\_ticks\ =\ end\_tick\ -\/\ start\_tick;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00158}00158\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00159}00159\ \ \ \ \ elapsed\_ticks\ =\ (tick\_period\ -\/\ start\_tick)\ +\ end\_tick\ +\ 1;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00160}00160\ \ \ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00161}00161\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00162}00162\ \ \ \textcolor{keywordflow}{if}\ (elapsed\_ticks\ >\ tick\_period)\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00163}00163\ \ \ \ \ elapsed\_ticks\ =\ tick\_period;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00164}00164\ \ \ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00165}00165\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00166}00166\ \ \ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[channel].is\_running\ =\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00167}00167\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00168}00168\ \ \ \textcolor{comment}{//\ Обновление\ статистики}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00169}00169\ \ \ \mbox{\hyperlink{struct_bench_time_stats__t}{BenchTimeStats\_t}}*\ stats\ =\ \&\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[channel].stats;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00170}00170\ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a2c739e1db6b26ceac5db3f2c44c177a0}{last\_ticks}}\ =\ elapsed\_ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00171}00171\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00172}00172\ \ \ \textcolor{keywordflow}{if}\ (elapsed\_ticks\ <\ stats-\/>min\_ticks)\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00173}00173\ \ \ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a39b71a5d48c4a51a553a26a9fb961ac8}{min\_ticks}}\ =\ elapsed\_ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00174}00174\ \ \ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00175}00175\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00176}00176\ \ \ \textcolor{keywordflow}{if}\ (elapsed\_ticks\ >\ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a3da36eb65b03ba995b5905b4650ea93c}{max\_ticks}})\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00177}00177\ \ \ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a3da36eb65b03ba995b5905b4650ea93c}{max\_ticks}}\ =\ elapsed\_ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00178}00178\ \ \ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00179}00179\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00180}00180\ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a21499b0b19d1ed27f8cea069f674e8ec}{total\_ticks}}\ +=\ elapsed\_ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00181}00181\ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a5e95ef31dd0daf973894ef2f034d1f71}{count}}++;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00182}00182\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00183}00183\ \ \ \textcolor{keywordflow}{return}\ elapsed\_ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00184}00184\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00185}00185\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00186}00186\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00187}00187\ \textcolor{comment}{\ \ *\ @brief\ Получение\ минимального\ времени\ измерения}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00188}00188\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00189}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga273d45255fe4403fc25648d60cca7705}{00189}}\ \textcolor{keyword}{static}\ \textcolor{keyword}{inline}\ uint32\_t\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga273d45255fe4403fc25648d60cca7705}{BenchTime\_GetMin}}(uint8\_t\ channel)\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00190}00190\ \ \ \textcolor{keywordflow}{if}\ (channel\ >=\ \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga74fdf777ceefa5e7d67120fbda4cde52}{BENCH\_TIME\_MAX\_CHANNELS}})\ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00191}00191\ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[channel].stats.min\_ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00192}00192\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00193}00193\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00194}00194\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00195}00195\ \textcolor{comment}{\ \ *\ @brief\ Получение\ максимального\ времени\ измерения}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00196}00196\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00197}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga07e27d7b169c9fa1abd57281bb4e374e}{00197}}\ \textcolor{keyword}{static}\ \textcolor{keyword}{inline}\ uint32\_t\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga07e27d7b169c9fa1abd57281bb4e374e}{BenchTime\_GetMax}}(uint8\_t\ channel)\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00198}00198\ \ \ \textcolor{keywordflow}{if}\ (channel\ >=\ \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga74fdf777ceefa5e7d67120fbda4cde52}{BENCH\_TIME\_MAX\_CHANNELS}})\ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00199}00199\ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[channel].stats.max\_ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00200}00200\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00201}00201\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00202}00202\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00203}00203\ \textcolor{comment}{\ \ *\ @brief\ Получение\ среднего\ времени\ измерения}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00204}00204\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00205}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga24e2450d5ea921074ec5d7a1e4d56ba8}{00205}}\ \textcolor{keyword}{static}\ \textcolor{keyword}{inline}\ uint32\_t\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga24e2450d5ea921074ec5d7a1e4d56ba8}{BenchTime\_GetAverage}}(uint8\_t\ channel)\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00206}00206\ \ \ \textcolor{keywordflow}{if}\ (channel\ >=\ \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga74fdf777ceefa5e7d67120fbda4cde52}{BENCH\_TIME\_MAX\_CHANNELS}})\ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00207}00207\ \ \ \mbox{\hyperlink{struct_bench_time_stats__t}{BenchTimeStats\_t}}*\ stats\ =\ \&\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[channel].stats;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00208}00208\ \ \ \textcolor{keywordflow}{if}\ (stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a5e95ef31dd0daf973894ef2f034d1f71}{count}}\ ==\ 0)\ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00209}00209\ \ \ \textcolor{keywordflow}{return}\ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a21499b0b19d1ed27f8cea069f674e8ec}{total\_ticks}}\ /\ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a5e95ef31dd0daf973894ef2f034d1f71}{count}};} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00210}00210\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00211}00211\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00212}00212\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00213}00213\ \textcolor{comment}{\ \ *\ @brief\ Получение\ количества\ измерений}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00214}00214\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00215}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gabd1301ca79a30c782970f89fd147df3a}{00215}}\ \textcolor{keyword}{static}\ \textcolor{keyword}{inline}\ uint32\_t\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gabd1301ca79a30c782970f89fd147df3a}{BenchTime\_GetCount}}(uint8\_t\ channel)\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00216}00216\ \ \ \textcolor{keywordflow}{if}\ (channel\ >=\ \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga74fdf777ceefa5e7d67120fbda4cde52}{BENCH\_TIME\_MAX\_CHANNELS}})\ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00217}00217\ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[channel].stats.count;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00218}00218\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00219}00219\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00220}00220\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00221}00221\ \textcolor{comment}{\ \ *\ @brief\ Получение\ последнего\ измеренного\ времени}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00222}00222\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00223}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gacf3a738d6423d71b238058a63558a4ed}{00223}}\ \textcolor{keyword}{static}\ \textcolor{keyword}{inline}\ uint32\_t\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gacf3a738d6423d71b238058a63558a4ed}{BenchTime\_GetLast}}(uint8\_t\ channel)\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00224}00224\ \ \ \textcolor{keywordflow}{if}\ (channel\ >=\ \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga74fdf777ceefa5e7d67120fbda4cde52}{BENCH\_TIME\_MAX\_CHANNELS}})\ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00225}00225\ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[channel].stats.last\_ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00226}00226\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00227}00227\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00228}00228\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00229}00229\ \textcolor{comment}{\ \ *\ @brief\ Сброс\ статистики\ для\ канала}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00230}00230\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00231}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga31a6b2b181b92bcb15f46758f5d57f35}{00231}}\ \textcolor{keyword}{static}\ \textcolor{keyword}{inline}\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga31a6b2b181b92bcb15f46758f5d57f35}{BenchTime\_ResetStats}}(uint8\_t\ channel)\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00232}00232\ \ \ \textcolor{keywordflow}{if}\ (channel\ >=\ \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga74fdf777ceefa5e7d67120fbda4cde52}{BENCH\_TIME\_MAX\_CHANNELS}})\ \textcolor{keywordflow}{return};} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00233}00233\ \ \ \mbox{\hyperlink{struct_bench_time_stats__t}{BenchTimeStats\_t}}*\ stats\ =\ \&\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{hbt}}.channels[channel].stats;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00234}00234\ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a39b71a5d48c4a51a553a26a9fb961ac8}{min\_ticks}}\ =\ 0xFFFFFFFF;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00235}00235\ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a3da36eb65b03ba995b5905b4650ea93c}{max\_ticks}}\ =\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00236}00236\ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a21499b0b19d1ed27f8cea069f674e8ec}{total\_ticks}}\ =\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00237}00237\ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a5e95ef31dd0daf973894ef2f034d1f71}{count}}\ =\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00238}00238\ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a2c739e1db6b26ceac5db3f2c44c177a0}{last\_ticks}}\ =\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00239}00239\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00240}00240\ \textcolor{preprocessor}{\#else\ }\textcolor{comment}{//BENCH\_TIME\_ENABLE}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00241}00241\ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00242}00242\ \textcolor{preprocessor}{\#define\ BenchTime\_Init()}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00243}00243\ \textcolor{preprocessor}{\#define\ BenchTime\_Start(channel,\ ticks,\ tick\_period)\ \ 0}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00244}00244\ \textcolor{preprocessor}{\#define\ BenchTime\_End(channel,\ ticks)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00245}00245\ \textcolor{preprocessor}{\#define\ BenchTime\_GetMin(channel)\ \ \ \ \ \ \ 0}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00246}00246\ \textcolor{preprocessor}{\#define\ BenchTime\_GetMax(channel)\ \ \ \ \ \ \ 0}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00247}00247\ \textcolor{preprocessor}{\#define\ BenchTime\_GetAverage(channel)\ \ \ 0}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00248}00248\ \textcolor{preprocessor}{\#define\ BenchTime\_GetCount(channel)\ \ \ \ \ 0}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00249}00249\ \textcolor{preprocessor}{\#define\ BenchTime\_GetLast(channel)\ \ \ \ \ \ 0}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00250}00250\ \textcolor{preprocessor}{\#define\ BenchTime\_ResetStats(channel)}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00251}00251\ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00252}00252\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//BENCH\_TIME\_ENABLE}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00253}00253\ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00254}00254\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ \_\_BENCH\_TIME\_H\_}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00255}00255\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00256}00256\ \textcolor{comment}{/**\ BENCH\_TIME}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00257}00257\ \textcolor{comment}{\ \ *\ @\}}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00258}00258\ \textcolor{comment}{\ \ */}} + +\end{DoxyCode} diff --git a/Doc/latex/bit__access_8h__dep__incl.pdf b/Doc/latex/bit__access_8h__dep__incl.pdf index 9be0751370425a965eb9dc5e5be19ce0e33c3eda..f3819bf3a613e308d62f91cd9aa7ca4d0b9b69fe 100644 GIT binary patch delta 401 zcmV;C0dD@ooB_j}0kB9*e>Rp-uqD~9-4Y5-GD_(-JSSrxMhU7c5;4azvOJo9KgpJj z!-kDHJ>6OF-a8S%D249=>?o9Ur1vi?0FJw|uj0|=Mh#b7r5B7;YO-@#C8z=D4vr9 zOehs^-Puxh`<90j#f1bSAHH6zGIajAlR-=y0mYMDOd5Ya414sbS#y%S4U|4EmxG^L zFelfR83Bv!J;gL3n5OtH%5ZvvqfZzwuW7pZfREnG(b$RGS5Zo~R_~S~whtu~D2}J; zsf}>H-%j~YT6N7o9`@+W!o6m7+qkp%WrUx>>Lte2#%68BAIU}Ww4NDRh*ou)ix!gU v%=t{V_M#y4bL3{YAINKA2R<8SSf!4>WqUtn9belvbM`N3SKsin7ELVyi7>(1 delta 401 zcmV;C0dD@ooB_j}0kB9*e^!<-uqD}^y%GvdGD_(>JSSxzMhU7c5;4azvOJc5U&)q@ z!-kDHJ>6OF-a8S%D24haBLyC8ImnT(#S=_&ONMFE^x7D!;Mt+i0vSJDISvq zOehua-Puxh`<90j#f1bSAHH6zGIaj6lR-=y0m+kHOd5YS414sbS#y%S4U|4EmxG^L zFelfR83Bv!EyXk;m=c^|646gM`iSxJnx>l%xba?&#!lRxMJd@@{k0UaeJG(oaXd{= zZG`jv^OXOfRoDFEVUNx%+-p|1jXR59M)(n|USeErY}Qu%kz5oH>zR>-XjP}VXd#)- voX=!yFG?UkM{b7ufxH%W;Imy6ZH7Y1 zQbd6>j%WmgV2-9!2-oM6gm5W#vO)k5-WS^nz5xXc89X-7T-Buke}b;Bdn<0rQkf>b zs-H{)eJslF9x=Mk%~ELDtaH#qEw)Qll*VnIq(RDnFbX7&gF%$iE^8xyd?s_#ENUb$#W5HTWnW^?VyzLGGI|D7n@ZS2^5cXVO znJ%^3*16O$%0;0Skbv+2!)R~Jsk#co2Hk0K+822hD7_nxfBhtADV*U8VI+(eR}@o5 zFir6!;+Vh3(L0RCL$YqN;B7kv-AG&*ev;cl%+wD{)Cr}8+Bv3|xhsuy&BHJCw_4Sw zU%H?{drh#`qO4Btto+=;cVJzU-QV0+E#ym)%j|a6>xE2Ks@A!zAibQ~Z|usxH%%wH zL2z9iH^wGI8GAjexiI3OcCB#xzVvhtudsK^KLM29E%uY#QXm00ll@XG0W*`KP#Kd$ zQ%G4+3P3;@1mO91S(M1NM2QQykXILwH%Cy)Dcr&l)=XZ$re+!dF*;O$$VDPdq{5lo z07FgOqFu?<-^4d!CBv+AkoFP}>2`7c&p~*RiNeO0?G%6yCVUM9ljTz&2s8>MB}Gq0 E3b;@~6aWAK delta 670 zcmV;P0%84)r~!?r0kFtWe_dHD>ZplX zVg*?)%fFvK?9^s^7~7tFeeRWX&e6RhfKdz#qXg)LAxeNn3`M}Q6fsDm1W^o0W-=5~ zmLdun%Mgu#5S*du6vFlSBp_V!ov0B2g!kpPhHpRtLk^D)n#-ore?ZXnb#KK@RY~pA ztL8~N=wn%Z_lQoF2fZ1KOVEoAjv?*3Ts=jLcg+dKw> zZ8O-IK-7g4SQ|bLJ@P($IEW)^IbAGT0`*({j|FQbL@wLw@U~kB%nY;?!+YbSBkZ}p zGF>XUZ3>}aRPa(sAOXn&45Pi)r}`=k9lBHev@eS~kZLy`fBQ*Lf?LBETniX2t|+FA zU`jB=^AOSX${!%OfG?SrF8Iwd) zNLtMafG`vT;Pln{1ERQ=D2OiLLS9`!yg7m(IE7QVLQU}U5l9Gt7!4I5a*+rpf-q+r z;7}7=v@4nVoA^eoWSEr>(q7^r-7e1mITc=HqHyEOb_&1;CUFe{ljTz&2r~*LB}Gq0 E3f*2cWdHyG diff --git a/Doc/latex/evolve__optimizer_8h__dep__incl.md5 b/Doc/latex/evolve__optimizer_8h__dep__incl.md5 deleted file mode 100644 index 8ece981..0000000 --- a/Doc/latex/evolve__optimizer_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -a0affaffafe83b1e4cf8ca3fc40e3aed \ No newline at end of file diff --git a/Doc/latex/evolve__optimizer_8h__dep__incl.pdf b/Doc/latex/evolve__optimizer_8h__dep__incl.pdf deleted file mode 100644 index 850bc9fe8617a16ce8398483a1366f591e0d6a56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21173 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 Pva(<@US5rBnq>b4yE|== diff --git a/Doc/latex/evolve__optimizer_8h_source.tex b/Doc/latex/evolve__optimizer_8h_source.tex deleted file mode 100644 index 99f6969..0000000 --- a/Doc/latex/evolve__optimizer_8h_source.tex +++ /dev/null @@ -1,344 +0,0 @@ -\doxysection{evolve\+\_\+optimizer.\+h} -\hypertarget{evolve__optimizer_8h_source}{}\label{evolve__optimizer_8h_source}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/evolve\_optimizer.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/evolve\_optimizer.h}} -\mbox{\hyperlink{evolve__optimizer_8h}{Go to the documentation of this file.}} -\begin{DoxyCode}{0} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00001}00001\ \textcolor{comment}{/**}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00002}00002\ \textcolor{comment}{******************************************************************************}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00003}00003\ \textcolor{comment}{*\ @file\ evolve\_optimizer.h}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00004}00004\ \textcolor{comment}{*\ @brief\ Заголовочный\ файл\ для\ адаптивного\ подбора\ параметров}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00005}00005\ \textcolor{comment}{******************************************************************************}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00006}00006\ \textcolor{comment}{*\ @addtogroup\ EVOLVE\_OPTIMIZER\ \ \ \ Evolve\ optimizer}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00007}00007\ \textcolor{comment}{*\ @ingroup\ \ \ \ MYLIBS\_DEFINES}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00008}00008\ \textcolor{comment}{*\ @brief\ \ \ \ \ \ Библиотека\ для\ эволюционного\ подбора\ параметров}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00009}00009\ \textcolor{comment}{*\ @details}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00010}00010\ \textcolor{comment}{Поддерживает:}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00011}00011\ \textcolor{comment}{-\/\ Любое\ количество\ параметров}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00012}00012\ \textcolor{comment}{-\/\ Генерацию\ новых\ параметров\ на\ основе\ лучших\ кандидатов}} -\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}{}} -\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}{-\/\ (опционально)\ @ref\ EVOLVE\_MUTATION\_MIN\_PCT\ \ \ \ -\/\ Минимальная\ мутация\ в\ процентах\ от\ Loss\ (по\ умолчанию\ 10\%)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00024}00024\ \textcolor{comment}{-\/\ (опционально)\ @ref\ EVOLVE\_MUTATION\_MAX\_PCT\ \ \ \ -\/\ Максимальная\ мутация\ в\ процентах\ от\ Loss\ (по\ умолчанию\ 100\%)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00025}00025\ \textcolor{comment}{-\/\ (опционально)\ @ref\ ELOVLE\_N\_ELITE\_CANDIDATE\ \ \ -\/\ Количество\ кандидатов,\ которые\ проходят\ в\ поколение\ без\ изменений}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00026}00026\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00027}00027\ \textcolor{comment}{@par\ Пример\ использования:}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00028}00028\ \textcolor{comment}{@code}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00029}00029\ \textcolor{comment}{\#include\ "{}evolve\_optimizer.h"{}}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00030}00030\ \textcolor{comment}{\#define\ N\_PARAMS\ \ \ \ \ \ \ \ 4}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00031}00031\ \textcolor{comment}{\#define\ N\_CANDIDATES\ \ \ \ 100}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00032}00032\ \textcolor{comment}{\#define\ N\_BEST\ \ \ \ \ \ \ \ \ \ 10}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00033}00033\ \textcolor{comment}{\#define\ MUTATION\ \ \ \ \ \ \ \ 0.1f}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00034}00034\ \textcolor{comment}{float\ params[N\_PARAMS];}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00035}00035\ \textcolor{comment}{EvolveOptimizer\_t\ optimizer;}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00036}00036\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00037}00037\ \textcolor{comment}{//\ Формирование\ параметров}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00038}00038\ \textcolor{comment}{uint16\_t\ \ param\_u16\ =\ 800;}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00039}00039\ \textcolor{comment}{float\ \ \ \ \ param\_f\ \ \ =\ 0.01f;}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00040}00040\ \textcolor{comment}{uint8\_t\ \ \ param\_u8\ \ =\ 40;}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00041}00041\ \textcolor{comment}{int16\_t\ \ \ param\_i16\ =\ 1600;}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00042}00042\ \textcolor{comment}{params[0]\ =\ PARAM\_SCALE(param\_u16,\ \ 0.0f,\ \ \ 1000.0f);}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00043}00043\ \textcolor{comment}{params[1]\ =\ PARAM\_SCALE(param\_f,\ \ \ \ 0.001f,\ 0.1f);}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00044}00044\ \textcolor{comment}{params[2]\ =\ PARAM\_SCALE(param\_u8,\ \ \ 10.0f,\ \ 100.0f);}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00045}00045\ \textcolor{comment}{params[3]\ =\ PARAM\_SCALE(param\_i16,\ \ 500.0f,\ 5000.0f);}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00046}00046\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00047}00047\ \textcolor{comment}{//\ Инициалиазция}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00048}00048\ \textcolor{comment}{EvolveOptimizer\_Init(\&optimizer,\ N\_PARAMS,\ N\_CANDIDATES,\ N\_BEST,\ MUTATION,\ params);}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00049}00049\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00050}00050\ \textcolor{comment}{//\ Шаг\ эволюции}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00051}00051\ \textcolor{comment}{float\ loss\ =\ calc\_loss();\ //\ расчет\ эффективности\ параметров\ (от\ 0\ до\ 1)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00052}00052\ \textcolor{comment}{EvolveOptimizer\_Step(\&optimizer,\ params,\ loss);}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00053}00053\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00054}00054\ \textcolor{comment}{//\ Взятие\ следующих\ для\ эволюции\ параметров}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00055}00055\ \textcolor{comment}{param\_u16\ =\ PARAM\_UNSCALE(params[0],\ \ 0.0f,\ \ \ 1000.0f);}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00056}00056\ \textcolor{comment}{param\_f\ \ \ =\ PARAM\_UNSCALE(params[1],\ \ 0.001f,\ 0.1f);}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00057}00057\ \textcolor{comment}{param\_u8\ \ =\ PARAM\_UNSCALE(params[2],\ \ 10.0f,\ \ 100.0f);}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00058}00058\ \textcolor{comment}{param\_i16\ =\ PARAM\_UNSCALE(params[3],\ \ 500.0f,\ 5000.0f);}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00059}00059\ \textcolor{comment}{@endcode}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00060}00060\ \textcolor{comment}{*\ @\{\ \ }} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00061}00061\ \textcolor{comment}{*****************************************************************************/}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00062}00062\ \textcolor{preprocessor}{\#ifndef\ \_\_EVOLVE\_OPTIMIZER\_H\_}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00063}00063\ \textcolor{preprocessor}{\#define\ \_\_EVOLVE\_OPTIMIZER\_H\_}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00064}00064\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00065}00065\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{mylibs__defs_8h}{mylibs\_defs.h}}"{}}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00066}00066\ \textcolor{preprocessor}{\#include\ }} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00067}00067\ \textcolor{preprocessor}{\#include\ }} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00068}00068\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00069}00069\ \textcolor{preprocessor}{\#ifdef\ ENABLE\_EVOLVE\_OPTIMIZATION}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00070}00070\ \textcolor{comment}{/**}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00071}00071\ \textcolor{comment}{\ \ *\ @brief\ Линейное\ масштабирование\ x\ из\ диапазона\ [min\_val,\ max\_val]\ в\ диапазон\ [0,\ 1)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00072}00072\ \textcolor{comment}{\ \ */}\textcolor{preprocessor}{}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00073}\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e}{00073}}\ \textcolor{preprocessor}{\#define\ PARAM\_SCALE(x,\ min\_val,\ max\_val)\ \(\backslash\)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00074}00074\ \textcolor{preprocessor}{(((float)(x)\ -\/\ (float)(min\_val))\ /\ ((float)(max\_val)\ -\/\ (float)(min\_val)))}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00075}00075\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00076}00076\ \textcolor{comment}{/**}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00077}00077\ \textcolor{comment}{\ \ *\ @brief\ Обратное\ линейное\ масштабирование\ значения\ из\ [0,\ 1)\ в\ диапазон\ [min\_val,\ max\_val]}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00078}00078\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00079}\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gaa1d5510fe5f0bd989473f3ebe324bde3}{00079}}\ \textcolor{preprocessor}{\#define\ PARAM\_UNSCALE(val,\ min\_val,\ max\_val)\ \(\backslash\)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00080}00080\ \textcolor{preprocessor}{(((float)(val))\ *\ ((float)(max\_val)\ -\/\ (float)(min\_val))\ +\ (float)(min\_val))}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00081}00081\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00082}00082\ \textcolor{preprocessor}{\#ifndef\ local\_time}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00083}00083\ \textcolor{preprocessor}{\#define\ local\_time()\ \ HAL\_GetTick()\ }\textcolor{comment}{///<\ Локальное\ время}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00084}00084\ \textcolor{preprocessor}{\#endif}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00085}00085\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00086}00086\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00087}00087\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00088}00088\ \textcolor{preprocessor}{\#ifndef\ EVOLVE\_MUTATION\_MIN\_PCT}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00089}\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga2f2b1be34ad4eb1bf3267237200cd6c6}{00089}}\ \textcolor{preprocessor}{\#define\ EVOLVE\_MUTATION\_MIN\_PCT\ \ \ 10\ \ \ \ }\textcolor{comment}{///<\ Минимальная\ мутация\ (в\ процентах\ от\ Loss)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00090}00090\ \textcolor{preprocessor}{\#endif}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00091}00091\ \textcolor{preprocessor}{\#ifndef\ EVOLVE\_MUTATION\_MAX\_PCT}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00092}\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga861c1c6a503c21441abcec0d57b848bc}{00092}}\ \textcolor{preprocessor}{\#define\ EVOLVE\_MUTATION\_MAX\_PCT\ \ \ 100\ \ \ }\textcolor{comment}{///<\ Максимальная\ мутация\ (в\ процентах\ от\ Loss)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00093}00093\ \textcolor{preprocessor}{\#endif}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00094}00094\ \textcolor{preprocessor}{\#ifndef\ ELOVLE\_N\_ELITE\_CANDIDATE}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00095}\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga38607e23d9234524bc7de5869b15b8eb}{00095}}\ \textcolor{preprocessor}{\#define\ ELOVLE\_N\_ELITE\_CANDIDATE\ \ 2\ \ \ \ \ }\textcolor{comment}{///<\ Количество\ кандидатов,\ которые\ проходят\ в\ поколение\ без\ изменений\ (по\ умолчанию\ 2)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00096}00096\ \textcolor{preprocessor}{\#endif}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00097}00097\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00098}00098\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00099}00099\ \textcolor{comment}{/**}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00100}00100\ \textcolor{comment}{\ \ *\ @brief\ Структура\ эволюционного\ оптимизатора}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00101}00101\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00102}\mbox{\hyperlink{struct_evolve_optimizer__t}{00102}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00103}\mbox{\hyperlink{struct_evolve_optimizer__t_a80eb0b8525b6bb838484f5922b9d8f7c}{00103}}\ \ \ \textcolor{keywordtype}{float}\ \ \ \ \ \mbox{\hyperlink{struct_evolve_optimizer__t_a80eb0b8525b6bb838484f5922b9d8f7c}{stability}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Коэффициент\ насколько\ стабильная\ популяция\ (0..1)(@ref\ n\_cand)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00104}00104\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00105}\mbox{\hyperlink{struct_evolve_optimizer__t_a1c270fce82e0c97e6c88fd0971c1eed8}{00105}}\ \ \ uint16\_t\ \ \mbox{\hyperlink{struct_evolve_optimizer__t_a1c270fce82e0c97e6c88fd0971c1eed8}{n\_params}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Количество\ параметров}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00106}\mbox{\hyperlink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{00106}}\ \ \ uint16\_t\ \ \mbox{\hyperlink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{n\_cand}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Количество\ кандидатов\ в\ популяции}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00107}\mbox{\hyperlink{struct_evolve_optimizer__t_a950cd70cb6bff33b78ad35ee58c729a6}{00107}}\ \ \ uint16\_t\ \ \mbox{\hyperlink{struct_evolve_optimizer__t_a950cd70cb6bff33b78ad35ee58c729a6}{n\_best}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Количество\ лучших,\ усредняемых}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00108}\mbox{\hyperlink{struct_evolve_optimizer__t_af779c7aeba0053e36cee7aade160f1c8}{00108}}\ \ \ \textcolor{keywordtype}{float}\ \ \ \ \ \mbox{\hyperlink{struct_evolve_optimizer__t_af779c7aeba0053e36cee7aade160f1c8}{mutation\_amp}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Амплитуда\ мутации\ (0..1)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00109}00109\ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00110}\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{00110}}\ \ \ uint16\_t\ \ \mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Индекс\ кандидата\ для\ обработки}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00111}\mbox{\hyperlink{struct_evolve_optimizer__t_ad0f464d7048a9ed0753b61f76f563108}{00111}}\ \ \ uint16\_t\ \ \mbox{\hyperlink{struct_evolve_optimizer__t_ad0f464d7048a9ed0753b61f76f563108}{gen\_index}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Индекс\ популяции\ \ }} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00112}00112\ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00113}00113\ \ \ \textcolor{comment}{//INTERNAL}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00114}\mbox{\hyperlink{struct_evolve_optimizer__t_a3be8c0c34db8429210ff470497a56727}{00114}}\ \ \ \textcolor{keywordtype}{float}\ \ \ \ \ \mbox{\hyperlink{struct_evolve_optimizer__t_a3be8c0c34db8429210ff470497a56727}{gen\_mut}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Амплитуда\ мутации\ у\ текущей\ популяции\ \ }} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00115}00115\ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00116}\mbox{\hyperlink{struct_evolve_optimizer__t_a93f628397c2f8d4027f2906752b650df}{00116}}\ \ \ \textcolor{keywordtype}{float}\ \ \ \ \ \mbox{\hyperlink{struct_evolve_optimizer__t_a93f628397c2f8d4027f2906752b650df}{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_l00117}\mbox{\hyperlink{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}{00117}}\ \ \ \textcolor{keywordtype}{float}\ \ \ \ \ \mbox{\hyperlink{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}{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_l00118}\mbox{\hyperlink{struct_evolve_optimizer__t_a74b81df1c298c99162310f3f7d91735a}{00118}}\ \ \ 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_l00119}00119\ \}\ \mbox{\hyperlink{struct_evolve_optimizer__t}{EvolveOptimizer\_t}};} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00120}00120\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00121}00121\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00122}00122\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00123}00123\ \textcolor{comment}{/**\ }} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00124}00124\ \textcolor{comment}{\ *\ @cond\ EVOLVE\_INTERNAL}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00125}00125\ \textcolor{comment}{\ */}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00126}00126\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00127}00127\ \textcolor{comment}{//\ Вспомогательный\ указатель\ для\ сортировки}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00128}00128\ \textcolor{keyword}{static}\ \mbox{\hyperlink{struct_evolve_optimizer__t}{EvolveOptimizer\_t}}\ *g\_sort\_opt;\ \textcolor{comment}{//\ глобальный\ указатель\ на\ текущий\ оптимизатор}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00129}00129\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00130}00130\ \textcolor{comment}{//\ функция\ условия\ сортировки}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00131}00131\ \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_l00132}00132\ \ \ \textcolor{keywordflow}{if}\ (g\_sort\_opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a93f628397c2f8d4027f2906752b650df}{loss}}[*(\textcolor{keyword}{const}\ uint16\_t*)a]\ <\ g\_sort\_opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a93f628397c2f8d4027f2906752b650df}{loss}}[*(\textcolor{keyword}{const}\ uint16\_t*)b])\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00133}00133\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00134}00134\ \ \ \textcolor{keywordflow}{if}\ (g\_sort\_opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a93f628397c2f8d4027f2906752b650df}{loss}}[*(\textcolor{keyword}{const}\ uint16\_t*)a]\ >\ g\_sort\_opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a93f628397c2f8d4027f2906752b650df}{loss}}[*(\textcolor{keyword}{const}\ uint16\_t*)b])\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00135}00135\ \ \ \ \ \textcolor{keywordflow}{return}\ 1;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00136}00136\ \ \ \textcolor{keywordflow}{return}\ 0;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00137}00137\ \}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00138}00138\ \textcolor{comment}{/**\ @endcond\ */}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00139}00139\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00140}00140\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00141}00141\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00142}00142\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00143}00143\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00144}00144\ \textcolor{comment}{/**}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00145}00145\ \textcolor{comment}{\ \ *\ @brief\ Инициализация\ эволюционного\ оптимизатора.}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00146}00146\ \textcolor{comment}{\ \ *\ @param\ opt\ \ \ \ \ \ \ \ \ \ Указатель\ на\ структуру\ оптимизатора}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00147}00147\ \textcolor{comment}{\ \ *\ @param\ n\_params\ \ \ \ \ Количество\ параметров\ в\ одном\ кандидате}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00148}00148\ \textcolor{comment}{\ \ *\ @param\ n\_cand\ \ \ \ \ \ \ Количество\ кандидатов}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00149}00149\ \textcolor{comment}{\ \ *\ @param\ n\_best\ \ \ \ \ \ \ Количество\ лучших,\ усредняемых}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00150}00150\ \textcolor{comment}{\ \ *\ @param\ mutation\_amp\ Амплитуда\ мутации\ (в\ диапазоне\ 0.0–1.0)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00151}00151\ \textcolor{comment}{\ \ *\ @param\ start\_params\ Начальные\ параметры\ (в\ диапазоне\ 0.0–1.0)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00152}00152\ \textcolor{comment}{\ \ *\ @return\ 0\ \ \ —\ если\ окей,\ }} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00153}00153\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ -\/1\ \ —\ если\ ошибка}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00154}00154\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00155}\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga4e3ea118b5b9068619c57724a925ba21}{00155}}\ \_\_STATIC\_INLINE\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga4e3ea118b5b9068619c57724a925ba21}{EvolveOptimizer\_Init}}(\mbox{\hyperlink{struct_evolve_optimizer__t}{EvolveOptimizer\_t}}*\ opt,} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00156}00156\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint16\_t\ n\_params,} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00157}00157\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint16\_t\ n\_cand,} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00158}00158\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint16\_t\ n\_best,} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00159}00159\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ mutation\_amp,} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00160}00160\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}*\ start\_params)} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00161}00161\ \{} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00162}00162\ \ \ \textcolor{keywordflow}{if}((opt\ ==\ NULL)\ ||\ (start\_params\ ==\ NULL))} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00163}00163\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00164}00164\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00165}00165\ \ \ \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_l00166}00166\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00167}00167\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a1c270fce82e0c97e6c88fd0971c1eed8}{n\_params}}\ \ \ \ \ =\ n\_params;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00168}00168\ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00169}00169\ \ \ \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_l00170}00170\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00171}00171\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{n\_cand}}\ \ \ \ \ \ \ =\ n\_cand;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00172}00172\ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00173}00173\ \ \ \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_l00174}00174\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00175}00175\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a950cd70cb6bff33b78ad35ee58c729a6}{n\_best}}\ \ \ \ \ \ \ =\ n\_best;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00176}00176\ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00177}00177\ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00178}00178\ \ \ \textcolor{keywordflow}{if}((mutation\_amp\ >\ 1)\ ||\ (mutation\_amp\ <\ 0))} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00179}00179\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00180}00180\ \ \ \textcolor{keywordflow}{if}(mutation\_amp\ <=\ 0.001f)} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00181}00181\ \ \ \ \ mutation\_amp\ =\ 0.001f;\ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00182}00182\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_af779c7aeba0053e36cee7aade160f1c8}{mutation\_amp}}\ \ =\ mutation\_amp;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00183}00183\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00184}00184\ \ \ uint32\_t\ seed\ =\ \mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga9c853b02c22f26023c34d1d404b6d653}{local\_time}}();} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00185}00185\ \textcolor{preprocessor}{\#ifdef\ ADC1}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00186}00186\ \ \ seed\ +=\ (ADC1-\/>DR\ \&\ 0xFF);} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00187}00187\ \textcolor{preprocessor}{\#endif}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00188}00188\ \ \ srand(seed);} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00189}00189\ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00190}00190\ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_cand;\ i++)\ \{} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00191}00191\ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ j\ =\ 0;\ j\ <\ n\_params;\ j++)\ \{} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00192}00192\ \ \ \ \ \ \ \textcolor{comment}{//\ Добавляем\ случайную\ мутацию\ вокруг\ стартового\ параметра}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00193}00193\ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ base\ =\ start\_params[j];} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00194}00194\ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ inv\_randmax\ =\ 1.0f\ /\ (float)RAND\_MAX;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00195}00195\ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ noise\ =\ ((float)rand()\ *\ inv\_randmax\ *\ 2.0f\ -\/\ 1.0f)\ *\ mutation\_amp;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00196}00196\ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}{candidates}}[i][j]\ =\ base\ +\ noise;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00197}00197\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}{candidates}}[i][j]\ <\ 0.0f)\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}{candidates}}[i][j]\ =\ 0.0f;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00198}00198\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}{candidates}}[i][j]\ >\ 1.0f)\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}{candidates}}[i][j]\ =\ 1.0f;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00199}00199\ \ \ \ \ \}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00200}00200\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a93f628397c2f8d4027f2906752b650df}{loss}}[i]\ =\ 0.0f;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00201}00201\ \ \ \}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00202}00202\ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00203}00203\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}}\ =\ 0;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00204}00204\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ad0f464d7048a9ed0753b61f76f563108}{gen\_index}}\ =\ 0;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00205}00205\ \ \ \textcolor{keywordflow}{return}\ 0;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00206}00206\ \}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00207}00207\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00208}00208\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00209}00209\ \textcolor{comment}{/**}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00210}00210\ \textcolor{comment}{\ \ *\ @brief\ Один\ шаг\ эволюционного\ оптимизатора.}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00211}00211\ \textcolor{comment}{\ \ *\ @param\ opt\ \ \ \ Указатель\ на\ структуру\ оптимизатора}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00212}00212\ \textcolor{comment}{\ \ *\ @param\ params\ Массив\ параметров,\ которые\ будут\ обновлены\ (на\ выходе\ —\ новые\ параметры)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00213}00213\ \textcolor{comment}{\ \ *\ @param\ loss\ \ \ Loss\ текущего\ кандидата}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00214}00214\ \textcolor{comment}{\ \ *\ @return\ 0\ \ \ —\ если\ окей,\ }} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00215}00215\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ -\/1\ \ —\ если\ ошибка}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00216}00216\ \textcolor{comment}{\ \ *\ @details}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00217}00217\ \textcolor{comment}{\ \ *\ Сохраняет\ loss\ текущего\ кандидата\ и\ формирует\ параметры\ следующего\ кандидата.}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00218}00218\ \textcolor{comment}{\ \ *\ Если\ накоплено\ n\_cand\ кандидатов,\ генерируется\ новое\ поколение.}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00219}00219\ \textcolor{comment}{\ \ *\ Новое\ поколение\ формируется\ случайным\ выбором\ из\ n\_best\ лучших\ с\ добавлением\ мутации.}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00220}00220\ \textcolor{comment}{\ \ *}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00221}00221\ \textcolor{comment}{\ \ *\ На\ выходе\ params\ содержит\ параметры\ следующего\ кандидата\ для\ измерений.}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00222}00222\ \textcolor{comment}{\ \ *\ @note\ Функция\ использует\ глобальную\ внутреннюю\ переменную\ для\ сортировки.}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00223}00223\ \textcolor{comment}{\ \ *\ Надо\ убедится\ что\ только\ один\ экземпляр\ функции\ запущен\ в\ момент\ времени}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00224}00224\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00225}\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gaef44a1f3298514569cc2b396a92101ef}{00225}}\ \_\_STATIC\_INLINE\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gaef44a1f3298514569cc2b396a92101ef}{EvolveOptimizer\_Step}}(\mbox{\hyperlink{struct_evolve_optimizer__t}{EvolveOptimizer\_t}}*\ opt,} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00226}00226\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}*\ params,} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00227}00227\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ loss)} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00228}00228\ \{} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00229}00229\ \ \ \textcolor{keywordflow}{if}((opt\ ==\ NULL)\ ||\ (params\ ==\ NULL))} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00230}00230\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00231}00231\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00232}00232\ \ \ uint16\_t\ n\_params\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a1c270fce82e0c97e6c88fd0971c1eed8}{n\_params}};\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00233}00233\ \ \ \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_l00234}00234\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00235}00235\ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00236}00236\ \ \ uint16\_t\ n\_cand\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{n\_cand}};\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00237}00237\ \ \ \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_l00238}00238\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00239}00239\ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00240}00240\ \ \ uint16\_t\ n\_best\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a950cd70cb6bff33b78ad35ee58c729a6}{n\_best}};\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00241}00241\ \ \ \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_l00242}00242\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00243}00243\ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00244}00244\ \ \ \textcolor{keywordtype}{float}\ \ \ \ mut\ \ \ \ \ \ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_af779c7aeba0053e36cee7aade160f1c8}{mutation\_amp}};} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00245}00245\ \ \ \textcolor{keywordflow}{if}((mut\ >\ 1)\ ||(mut\ <\ 0))} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00246}00246\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00247}00247\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00248}00248\ \ \ \textcolor{comment}{//\ 1.\ Сохраняем\ loss\ текущего\ кандидата}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00249}00249\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a93f628397c2f8d4027f2906752b650df}{loss}}[opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}}]\ =\ loss;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00250}00250\ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}}++;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00251}00251\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00252}00252\ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}}\ >=\ n\_cand)\ \{} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00253}00253\ \ \ \ \ \textcolor{comment}{//\ 2.\ Сортируем\ текущее\ поколение\ по\ loss}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00254}00254\ \ \ \ \ \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_l00255}00255\ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a74b81df1c298c99162310f3f7d91735a}{sorted\_idx}}[i]\ =\ i;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00256}00256\ \ \ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00257}00257\ \ \ \ \ g\_sort\_opt\ =\ opt;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00258}00258\ \ \ \ \ 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_l00259}00259\ \ \ \ \ g\_sort\_opt\ =\ NULL;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00260}00260\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00261}00261\ \ \ \ \ \textcolor{comment}{//\ -\/-\/-\/\ Адаптивная\ мутация\ в\ зависимости\ от\ Loss\ -\/-\/-\/}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00262}00262\ \ \ \ \ \textcolor{keywordtype}{float}\ best\_loss\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a93f628397c2f8d4027f2906752b650df}{loss}}[opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a74b81df1c298c99162310f3f7d91735a}{sorted\_idx}}[0]];} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00263}00263\ \ \ \ \ \textcolor{keywordtype}{float}\ worst\_loss\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a93f628397c2f8d4027f2906752b650df}{loss}}[opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a74b81df1c298c99162310f3f7d91735a}{sorted\_idx}}[opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{n\_cand}}\ -\/\ 1]];} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00264}00264\ \ \ \ \ \textcolor{keywordtype}{float}\ diff\ =\ worst\_loss\ -\/\ best\_loss;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00265}00265\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00266}00266\ \ \ \ \ \textcolor{keywordtype}{float}\ sum\_loss\ =\ 0.0f;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00267}00267\ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_cand;\ i++)} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00268}00268\ \ \ \ \ \ \ sum\_loss\ +=\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a93f628397c2f8d4027f2906752b650df}{loss}}[i];} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00269}00269\ \ \ \ \ \textcolor{keywordtype}{float}\ avg\_loss\ =\ sum\_loss\ /\ (float)n\_cand;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00270}00270\ \ \ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00271}00271\ \ \ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00272}00272\ \ \ \ \ \textcolor{keywordtype}{float}\ loss\_ratio\ =\ (diff\ >\ 0.0f)\ ?\ ((avg\_loss\ -\/\ best\_loss)\ /\ diff)\ :\ 0.5f;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00273}00273\ \ \ \ \ \textcolor{keywordflow}{if}\ (loss\_ratio\ <\ 0.0f)\ loss\_ratio\ =\ 0.0f;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00274}00274\ \ \ \ \ \textcolor{keywordflow}{if}\ (loss\_ratio\ >\ 1.0f)\ loss\_ratio\ =\ 1.0f;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00275}00275\ \ \ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00276}00276\ \ \ \ \ \textcolor{comment}{//\ Записываем\ стабильность\ популяции\ в\ структуру}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00277}00277\ \ \ \ \ \textcolor{keywordflow}{if}(diff\ <\ 0.0f)\ diff\ =\ 0.0f;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00278}00278\ \ \ \ \ \textcolor{keywordflow}{if}(diff\ >\ 1.0f)\ diff\ =\ 1.0f;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00279}00279\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a80eb0b8525b6bb838484f5922b9d8f7c}{stability}}\ =\ (1.0f\ -\/\ worst\_loss)\ *\ (1.0f\ -\/\ (worst\_loss\ -\/\ best\_loss));} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00280}00280\ \ \ \ \ \textcolor{keywordflow}{if}(opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a80eb0b8525b6bb838484f5922b9d8f7c}{stability}}\ <\ 0.0f)\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a80eb0b8525b6bb838484f5922b9d8f7c}{stability}}\ =\ 0.0f;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00281}00281\ \ \ \ \ \textcolor{keywordflow}{if}(opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a80eb0b8525b6bb838484f5922b9d8f7c}{stability}}\ >\ 1.0f)\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a80eb0b8525b6bb838484f5922b9d8f7c}{stability}}\ =\ 1.0f;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00282}00282\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00283}00283\ \ \ \ \ \textcolor{keywordtype}{float}\ mut\_pct\ =\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga2f2b1be34ad4eb1bf3267237200cd6c6}{EVOLVE\_MUTATION\_MIN\_PCT}}\ +} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00284}00284\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga861c1c6a503c21441abcec0d57b848bc}{EVOLVE\_MUTATION\_MAX\_PCT}}\ -\/\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga2f2b1be34ad4eb1bf3267237200cd6c6}{EVOLVE\_MUTATION\_MIN\_PCT}})\ *\ loss\_ratio;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00285}00285\ \ \ \ \ \textcolor{keywordtype}{float}\ adaptive\_mut\ =\ mut\ *\ (mut\_pct\ /\ 100.0f);} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00286}00286\ \ \ \ \ \textcolor{keywordflow}{if}\ (adaptive\_mut\ <\ 0.0001f)\ adaptive\_mut\ =\ 0.0001f;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00287}00287\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a3be8c0c34db8429210ff470497a56727}{gen\_mut}}\ =\ adaptive\_mut;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00288}00288\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00289}00289\ \ \ \ \ \textcolor{comment}{//\ 3.\ Генерируем\ новое\ поколение}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00290}00290\ \ \ \ \ uint16\_t\ n\_elite\ =\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga38607e23d9234524bc7de5869b15b8eb}{ELOVLE\_N\_ELITE\_CANDIDATE}};} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00291}00291\ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ c\ =\ 0;\ c\ <\ n\_cand;\ c++)\ \{} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00292}00292\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (c\ <\ n\_elite)\ \{} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00293}00293\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_params;\ i++)} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00294}00294\ \ \ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}{candidates}}[c][i]\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}{candidates}}[opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a74b81df1c298c99162310f3f7d91735a}{sorted\_idx}}[c]][i];} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00295}00295\ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a93f628397c2f8d4027f2906752b650df}{loss}}[c]\ =\ 0.0f;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00296}00296\ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00297}00297\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_params;\ i++)\ \{} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00298}00298\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ inv\_randmax\ =\ 1.0f\ /\ (float)RAND\_MAX;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00299}00299\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ noise\ =\ ((float)rand()\ *\ inv\_randmax\ *\ 2.0f\ -\/\ 1.0f)\ *\ adaptive\_mut;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00300}00300\ \ \ \ \ \ \ \ \ \ \ uint16\_t\ parent\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a74b81df1c298c99162310f3f7d91735a}{sorted\_idx}}[rand()\ \%\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a950cd70cb6bff33b78ad35ee58c729a6}{n\_best}}];} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00301}00301\ \ \ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}{candidates}}[c][i]\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}{candidates}}[parent][i]\ +\ noise;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00302}00302\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}{candidates}}[c][i]\ <\ 0.0f)\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}{candidates}}[c][i]\ =\ 0.0f;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00303}00303\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}{candidates}}[c][i]\ >\ 1.0f)\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}{candidates}}[c][i]\ =\ 1.0f;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00304}00304\ \ \ \ \ \ \ \ \ \}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00305}00305\ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a93f628397c2f8d4027f2906752b650df}{loss}}[c]\ =\ 0.0f;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00306}00306\ \ \ \ \ \ \ \}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00307}00307\ \ \ \ \ \}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00308}00308\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}}\ =\ 0;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00309}00309\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_ad0f464d7048a9ed0753b61f76f563108}{gen\_index}}++;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00310}00310\ \ \ \}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00311}00311\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00312}00312\ \ \ \textcolor{comment}{//\ 4.\ Возвращаем\ параметры\ следующего\ кандидата}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00313}00313\ \ \ \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_l00314}00314\ \ \ \ \ params[i]\ =\ opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}{candidates}}[opt-\/>\mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\_index}}][i];} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00315}00315\ \ \ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00316}00316\ \ \ \textcolor{keywordflow}{return}\ 0;} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00317}00317\ \}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00318}00318\ \textcolor{preprocessor}{\#else\ }\textcolor{comment}{//\ ENABLE\_EVOLVE\_OPTIMIZATION}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00319}00319\ \textcolor{comment}{//заглушки}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00320}00320\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00321}00321\ \ \ uint16\_t\ n\_params;\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00322}00322\ \ \ uint16\_t\ n\_cand;\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00323}00323\ \ \ uint16\_t\ n\_best;\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00324}00324\ \ \ \textcolor{keywordtype}{float}\ mutation\_amp;\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00325}00325\ \ \ \textcolor{keywordtype}{float}\ loss[0];\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00326}00326\ \ \ \textcolor{keywordtype}{float}\ candidates[0][0];\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00327}00327\ \}\ \mbox{\hyperlink{struct_evolve_optimizer__t}{EvolveOptimizer\_t}};} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00328}00328\ \textcolor{preprocessor}{\#define\ EvolveOptimizer\_Init(opt,\ n\_params,\ n\_cand,\ n\_best,\ mutation\_amp,\ start\_params)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00329}00329\ \textcolor{preprocessor}{\#define\ EvolveOptimizer\_Step(opt,\ params,\ LossFunc)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00330}00330\ \textcolor{preprocessor}{\#define\ PARAM\_SCALE(x,\ min\_val,\ max\_val)\ \ \ \ \ \ \ \ \ (x)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00331}00331\ \textcolor{preprocessor}{\#define\ PARAM\_UNSCALE(val,\ min\_val,\ max\_val)\ \ \ \ \ (val)}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00332}00332\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ ENABLE\_EVOLVE\_OPTIMIZATION}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00333}00333\ } -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00334}00334\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ \_\_EVOLVE\_OPTIMIZER\_H\_}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00335}00335\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00336}00336\ \textcolor{comment}{/**\ EVOLVE\_OPTIMIZER}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00337}00337\ \textcolor{comment}{\ \ *\ @\}}} -\DoxyCodeLine{\Hypertarget{evolve__optimizer_8h_source_l00338}00338\ \textcolor{comment}{\ \ */}} - -\end{DoxyCode} diff --git a/Doc/latex/files.tex b/Doc/latex/files.tex index 3015b2d..87d066a 100644 --- a/Doc/latex/files.tex +++ b/Doc/latex/files.tex @@ -1,8 +1,9 @@ \doxysection{File List} Here is a list of all documented files with brief descriptions\+:\begin{DoxyCompactList} \item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\mbox{\hyperlink{mainpage_8h_source}{mainpage.\+h}} }{\pageref{mainpage_8h_source}}{} +\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{bench__time_8h}{bench\+\_\+time.\+h}} \\*Заголовочный файл для измерения времени между событиями }{\pageref{bench__time_8h}}{} \item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{bit__access_8h}{bit\+\_\+access.\+h}} \\*Заголочный файл для дефайнов битового доступа }{\pageref{bit__access_8h}}{} -\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{evolve__optimizer_8h}{evolve\+\_\+optimizer.\+h}} \\*Заголовочный файл для адаптивного подбора параметров }{\pageref{evolve__optimizer_8h}}{} +\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{gen__optimizer_8h}{gen\+\_\+optimizer.\+h}} \\*Заголовочный файл для адаптивного подбора параметров }{\pageref{gen__optimizer_8h}}{} \item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{mylibs__config_8h}{mylibs\+\_\+config.\+h}} \\*Конфигурации для библиотек My\+Libs }{\pageref{mylibs__config_8h}}{} \item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{mylibs__defs_8h}{mylibs\+\_\+defs.\+h}} \\*Заголочный файл для дефайнов библиотеки My\+Libs\+General }{\pageref{mylibs__defs_8h}}{} \item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{mylibs__include_8h}{mylibs\+\_\+include.\+h}} \\*Заголочный файл для всех библиотек }{\pageref{mylibs__include_8h}}{} diff --git a/Doc/latex/evolve__optimizer_8h.tex b/Doc/latex/gen__optimizer_8h.tex similarity index 52% rename from Doc/latex/evolve__optimizer_8h.tex rename to Doc/latex/gen__optimizer_8h.tex index 4068f31..9639f6c 100644 --- a/Doc/latex/evolve__optimizer_8h.tex +++ b/Doc/latex/gen__optimizer_8h.tex @@ -1,5 +1,5 @@ -\doxysection{E\+:/.WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/evolve\+\_\+optimizer.h File Reference} -\hypertarget{evolve__optimizer_8h}{}\label{evolve__optimizer_8h}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/evolve\_optimizer.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/evolve\_optimizer.h}} +\doxysection{E\+:/.WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/gen\+\_\+optimizer.h File Reference} +\hypertarget{gen__optimizer_8h}{}\label{gen__optimizer_8h}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/gen\_optimizer.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/gen\_optimizer.h}} Заголовочный файл для адаптивного подбора параметров @@ -8,12 +8,12 @@ {\ttfamily \#include "{}mylibs\+\_\+defs.\+h"{}}\newline {\ttfamily \#include $<$stdint.\+h$>$}\newline {\ttfamily \#include $<$stdlib.\+h$>$}\newline -Include dependency graph for evolve\+\_\+optimizer.\+h\+: +Include dependency graph for gen\+\_\+optimizer.\+h\+: \nopagebreak \begin{figure}[H] \begin{center} \leavevmode -\includegraphics[width=295pt]{evolve__optimizer_8h__incl} +\includegraphics[width=295pt]{gen__optimizer_8h__incl} \end{center} \end{figure} This graph shows which files directly or indirectly include this file\+: @@ -21,33 +21,33 @@ This graph shows which files directly or indirectly include this file\+: \begin{figure}[H] \begin{center} \leavevmode -\includegraphics[width=212pt]{evolve__optimizer_8h__dep__incl} +\includegraphics[width=212pt]{gen__optimizer_8h__dep__incl} \end{center} \end{figure} \doxysubsubsection*{Classes} \begin{DoxyCompactItemize} \item -struct \mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}} +struct \mbox{\hyperlink{struct_gen_optimizer__t}{Gen\+Optimizer\+\_\+t}} \begin{DoxyCompactList}\small\item\em Структура эволюционного оптимизатора \end{DoxyCompactList}\end{DoxyCompactItemize} \doxysubsubsection*{Macros} \begin{DoxyCompactItemize} \item -\#define \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e}{PARAM\+\_\+\+SCALE}}(x, min\+\_\+val, max\+\_\+val) +\#define \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e}{PARAM\+\_\+\+SCALE}}(x, min\+\_\+val, max\+\_\+val) \begin{DoxyCompactList}\small\item\em Линейное масштабирование x из диапазона \mbox{[}min\+\_\+val, max\+\_\+val\mbox{]} в диапазон \mbox{[}0, 1) \end{DoxyCompactList}\item -\#define \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gaa1d5510fe5f0bd989473f3ebe324bde3}{PARAM\+\_\+\+UNSCALE}}(val, min\+\_\+val, max\+\_\+val) +\#define \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa1d5510fe5f0bd989473f3ebe324bde3}{PARAM\+\_\+\+UNSCALE}}(val, min\+\_\+val, max\+\_\+val) \begin{DoxyCompactList}\small\item\em Обратное линейное масштабирование значения из \mbox{[}0, 1) в диапазон \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_ga2f2b1be34ad4eb1bf3267237200cd6c6}{EVOLVE\+\_\+\+MUTATION\+\_\+\+MIN\+\_\+\+PCT}}~10 +\#define \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga3db7bdf57549722427e1e72dcaa87068}{GEN\+\_\+\+MUTATION\+\_\+\+MIN\+\_\+\+PCT}}~10 \begin{DoxyCompactList}\small\item\em Минимальная мутация (в процентах от Loss) \end{DoxyCompactList}\item -\#define \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga861c1c6a503c21441abcec0d57b848bc}{EVOLVE\+\_\+\+MUTATION\+\_\+\+MAX\+\_\+\+PCT}}~100 +\#define \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga48dca8f0a0c9b96d02236ef76ac827fd}{GEN\+\_\+\+MUTATION\+\_\+\+MAX\+\_\+\+PCT}}~100 \begin{DoxyCompactList}\small\item\em Максимальная мутация (в процентах от Loss) \end{DoxyCompactList}\item -\#define \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga38607e23d9234524bc7de5869b15b8eb}{ELOVLE\+\_\+\+N\+\_\+\+ELITE\+\_\+\+CANDIDATE}}~2 +\#define \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga38607e23d9234524bc7de5869b15b8eb}{ELOVLE\+\_\+\+N\+\_\+\+ELITE\+\_\+\+CANDIDATE}}~2 \begin{DoxyCompactList}\small\item\em Количество кандидатов, которые проходят в поколение без изменений (по умолчанию 2) \end{DoxyCompactList}\end{DoxyCompactItemize} \doxysubsubsection*{Functions} \begin{DoxyCompactItemize} \item -\+\_\+\+\_\+\+STATIC\+\_\+\+INLINE int \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga4e3ea118b5b9068619c57724a925ba21}{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, float mutation\+\_\+amp, float \texorpdfstring{$\ast$}{*}start\+\_\+params) +static int \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga2db1df46b4082ad9280ef4344fdf4e8a}{Gen\+Optimizer\+\_\+\+Init}} (\mbox{\hyperlink{struct_gen_optimizer__t}{Gen\+Optimizer\+\_\+t}} \texorpdfstring{$\ast$}{*}opt, uint16\+\_\+t n\+\_\+params, uint16\+\_\+t n\+\_\+cand, uint16\+\_\+t n\+\_\+best, float mutation\+\_\+amp, float \texorpdfstring{$\ast$}{*}start\+\_\+params) \begin{DoxyCompactList}\small\item\em Инициализация эволюционного оптимизатора. \end{DoxyCompactList}\item -\+\_\+\+\_\+\+STATIC\+\_\+\+INLINE int \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gaef44a1f3298514569cc2b396a92101ef}{Evolve\+Optimizer\+\_\+\+Step}} (\mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}} \texorpdfstring{$\ast$}{*}opt, float \texorpdfstring{$\ast$}{*}params, float loss) +static int \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa9a4c4f43f7beb926c85bd4817ebd628}{Gen\+Optimizer\+\_\+\+Step}} (\mbox{\hyperlink{struct_gen_optimizer__t}{Gen\+Optimizer\+\_\+t}} \texorpdfstring{$\ast$}{*}opt, float \texorpdfstring{$\ast$}{*}params, float loss) \begin{DoxyCompactList}\small\item\em Один шаг эволюционного оптимизатора. \end{DoxyCompactList}\end{DoxyCompactItemize} @@ -56,5 +56,5 @@ struct \mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}} -Definition in file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}. +Definition in file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. diff --git a/Doc/latex/gen__optimizer_8h__dep__incl.md5 b/Doc/latex/gen__optimizer_8h__dep__incl.md5 new file mode 100644 index 0000000..d842556 --- /dev/null +++ b/Doc/latex/gen__optimizer_8h__dep__incl.md5 @@ -0,0 +1 @@ +f620087f87f5ce223eef2578f5c74e74 \ No newline at end of file diff --git a/Doc/latex/gen__optimizer_8h__dep__incl.pdf b/Doc/latex/gen__optimizer_8h__dep__incl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..be1ec98ea5f4599e4e29b16f15b51d5c7eec960f GIT binary patch literal 21222 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 TJK0DW3{E}*g@rZs&~*O-tn*um literal 0 HcmV?d00001 diff --git a/Doc/latex/gen__optimizer_8h_source.tex b/Doc/latex/gen__optimizer_8h_source.tex new file mode 100644 index 0000000..a7832c0 --- /dev/null +++ b/Doc/latex/gen__optimizer_8h_source.tex @@ -0,0 +1,344 @@ +\doxysection{gen\+\_\+optimizer.\+h} +\hypertarget{gen__optimizer_8h_source}{}\label{gen__optimizer_8h_source}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/gen\_optimizer.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/gen\_optimizer.h}} +\mbox{\hyperlink{gen__optimizer_8h}{Go to the documentation of this file.}} +\begin{DoxyCode}{0} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00001}00001\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00002}00002\ \textcolor{comment}{******************************************************************************}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00003}00003\ \textcolor{comment}{*\ @file\ gen\_optimizer.h}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00004}00004\ \textcolor{comment}{*\ @brief\ Заголовочный\ файл\ для\ адаптивного\ подбора\ параметров}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00005}00005\ \textcolor{comment}{******************************************************************************}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00006}00006\ \textcolor{comment}{*\ @addtogroup\ GEN\_OPTIMIZER\ \ \ \ Genetic\ optimizer}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00007}00007\ \textcolor{comment}{*\ @ingroup\ \ \ \ MYLIBS\_DEFINES}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00008}00008\ \textcolor{comment}{*\ @brief\ \ \ \ \ \ Библиотека\ для\ эволюционного\ подбора\ параметров}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00009}00009\ \textcolor{comment}{*\ @details}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00010}00010\ \textcolor{comment}{Поддерживает:}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00011}00011\ \textcolor{comment}{-\/\ Любое\ количество\ параметров}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00012}00012\ \textcolor{comment}{-\/\ Генерацию\ новых\ параметров\ на\ основе\ лучших\ кандидатов}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00013}00013\ \textcolor{comment}{-\/\ Мутацию\ для\ поиска\ оптимальных\ параметров}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00014}00014\ \textcolor{comment}{-\/\ Несколько\ независимых\ оптимизаторов\ в\ одной\ программе}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00015}00015\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00016}00016\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00017}00017\ \textcolor{comment}{Параметры\ для\ конфигурации:}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00018}00018\ \textcolor{comment}{-\/\ @ref\ GEN\_OPTIMIZATION\_ENABLE\ -\/\ Включить\ оптимизацию\ параметров}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00019}00019\ \textcolor{comment}{\ \ Если\ библиотека\ отключена\ @ref\ GEN\_OPTIMIZATION\_ENABLE,\ то\ вставляются\ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00020}00020\ \textcolor{comment}{\ \ заглушки,\ никак\ не\ влияющие\ на\ параметры\ и\ остальную\ программу}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00021}00021\ \textcolor{comment}{-\/\ @ref\ GEN\_MAX\_PARAMS\ \ \ \ \ \ \ \ \ \ -\/\ Максимальное\ количество\ параметров}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00022}00022\ \textcolor{comment}{-\/\ @ref\ GEN\_MAX\_CANDIDATES\ \ \ \ \ \ -\/\ Максимальное\ количество\ кандидатов\ для\ обучения}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00023}00023\ \textcolor{comment}{-\/\ (опционально)\ @ref\ GEN\_MUTATION\_MIN\_PCT\ \ \ \ \ \ \ -\/\ Минимальная\ мутация\ в\ процентах\ от\ Loss\ (по\ умолчанию\ 10\%)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00024}00024\ \textcolor{comment}{-\/\ (опционально)\ @ref\ GEN\_MUTATION\_MAX\_PCT\ \ \ \ \ \ \ -\/\ Максимальная\ мутация\ в\ процентах\ от\ Loss\ (по\ умолчанию\ 100\%)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00025}00025\ \textcolor{comment}{-\/\ (опционально)\ @ref\ ELOVLE\_N\_ELITE\_CANDIDATE\ \ \ -\/\ Количество\ кандидатов,\ которые\ проходят\ в\ поколение\ без\ изменений}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00026}00026\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00027}00027\ \textcolor{comment}{@par\ Пример\ использования:}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00028}00028\ \textcolor{comment}{@code}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00029}00029\ \textcolor{comment}{\#include\ "{}gen\_optimizer.h"{}}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00030}00030\ \textcolor{comment}{\#define\ N\_PARAMS\ \ \ \ \ \ \ \ 4}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00031}00031\ \textcolor{comment}{\#define\ N\_CANDIDATES\ \ \ \ 100}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00032}00032\ \textcolor{comment}{\#define\ N\_BEST\ \ \ \ \ \ \ \ \ \ 10}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00033}00033\ \textcolor{comment}{\#define\ MUTATION\ \ \ \ \ \ \ \ 0.1f}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00034}00034\ \textcolor{comment}{float\ params[N\_PARAMS];}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00035}00035\ \textcolor{comment}{GenOptimizer\_t\ optimizer;}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00036}00036\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00037}00037\ \textcolor{comment}{//\ Формирование\ параметров}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00038}00038\ \textcolor{comment}{uint16\_t\ \ param\_u16\ =\ 800;}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00039}00039\ \textcolor{comment}{float\ \ \ \ \ param\_f\ \ \ =\ 0.01f;}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00040}00040\ \textcolor{comment}{uint8\_t\ \ \ param\_u8\ \ =\ 40;}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00041}00041\ \textcolor{comment}{int16\_t\ \ \ param\_i16\ =\ 1600;}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00042}00042\ \textcolor{comment}{params[0]\ =\ PARAM\_SCALE(param\_u16,\ \ 0.0f,\ \ \ 1000.0f);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00043}00043\ \textcolor{comment}{params[1]\ =\ PARAM\_SCALE(param\_f,\ \ \ \ 0.001f,\ 0.1f);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00044}00044\ \textcolor{comment}{params[2]\ =\ PARAM\_SCALE(param\_u8,\ \ \ 10.0f,\ \ 100.0f);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00045}00045\ \textcolor{comment}{params[3]\ =\ PARAM\_SCALE(param\_i16,\ \ 500.0f,\ 5000.0f);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00046}00046\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00047}00047\ \textcolor{comment}{//\ Инициалиазция}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00048}00048\ \textcolor{comment}{GenOptimizer\_Init(\&optimizer,\ N\_PARAMS,\ N\_CANDIDATES,\ N\_BEST,\ MUTATION,\ params);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00049}00049\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00050}00050\ \textcolor{comment}{//\ Шаг\ эволюции}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00051}00051\ \textcolor{comment}{float\ loss\ =\ calc\_loss();\ //\ расчет\ эффективности\ параметров\ (от\ 0\ до\ 1)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00052}00052\ \textcolor{comment}{GenOptimizer\_Step(\&optimizer,\ params,\ loss);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00053}00053\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00054}00054\ \textcolor{comment}{//\ Взятие\ следующих\ для\ эволюции\ параметров}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00055}00055\ \textcolor{comment}{param\_u16\ =\ PARAM\_UNSCALE(params[0],\ \ 0.0f,\ \ \ 1000.0f);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00056}00056\ \textcolor{comment}{param\_f\ \ \ =\ PARAM\_UNSCALE(params[1],\ \ 0.001f,\ 0.1f);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00057}00057\ \textcolor{comment}{param\_u8\ \ =\ PARAM\_UNSCALE(params[2],\ \ 10.0f,\ \ 100.0f);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00058}00058\ \textcolor{comment}{param\_i16\ =\ PARAM\_UNSCALE(params[3],\ \ 500.0f,\ 5000.0f);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00059}00059\ \textcolor{comment}{@endcode}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00060}00060\ \textcolor{comment}{*\ @\{\ \ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00061}00061\ \textcolor{comment}{*****************************************************************************/}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00062}00062\ \textcolor{preprocessor}{\#ifndef\ \_\_GEN\_OPTIMIZER\_H\_}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00063}00063\ \textcolor{preprocessor}{\#define\ \_\_GEN\_OPTIMIZER\_H\_}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00064}00064\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00065}00065\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{mylibs__defs_8h}{mylibs\_defs.h}}"{}}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00066}00066\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00067}00067\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00068}00068\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00069}00069\ \textcolor{preprocessor}{\#ifdef\ GEN\_OPTIMIZATION\_ENABLE}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00070}00070\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00071}00071\ \textcolor{comment}{\ \ *\ @brief\ Линейное\ масштабирование\ x\ из\ диапазона\ [min\_val,\ max\_val]\ в\ диапазон\ [0,\ 1)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00072}00072\ \textcolor{comment}{\ \ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00073}\mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e}{00073}}\ \textcolor{preprocessor}{\#define\ PARAM\_SCALE(x,\ min\_val,\ max\_val)\ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00074}00074\ \textcolor{preprocessor}{(((float)(x)\ -\/\ (float)(min\_val))\ /\ ((float)(max\_val)\ -\/\ (float)(min\_val)))}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00075}00075\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00076}00076\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00077}00077\ \textcolor{comment}{\ \ *\ @brief\ Обратное\ линейное\ масштабирование\ значения\ из\ [0,\ 1)\ в\ диапазон\ [min\_val,\ max\_val]}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00078}00078\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00079}\mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa1d5510fe5f0bd989473f3ebe324bde3}{00079}}\ \textcolor{preprocessor}{\#define\ PARAM\_UNSCALE(val,\ min\_val,\ max\_val)\ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00080}00080\ \textcolor{preprocessor}{(((float)(val))\ *\ ((float)(max\_val)\ -\/\ (float)(min\_val))\ +\ (float)(min\_val))}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00081}00081\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00082}00082\ \textcolor{preprocessor}{\#ifndef\ local\_time}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00083}00083\ \textcolor{preprocessor}{\#define\ local\_time()\ \ HAL\_GetTick()\ }\textcolor{comment}{///<\ Локальное\ время}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00084}00084\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00085}00085\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00086}00086\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00087}00087\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00088}00088\ \textcolor{preprocessor}{\#ifndef\ GEN\_MUTATION\_MIN\_PCT}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00089}\mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga3db7bdf57549722427e1e72dcaa87068}{00089}}\ \textcolor{preprocessor}{\#define\ GEN\_MUTATION\_MIN\_PCT\ \ \ 10\ \ \ \ }\textcolor{comment}{///<\ Минимальная\ мутация\ (в\ процентах\ от\ Loss)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00090}00090\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00091}00091\ \textcolor{preprocessor}{\#ifndef\ GEN\_MUTATION\_MAX\_PCT}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00092}\mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga48dca8f0a0c9b96d02236ef76ac827fd}{00092}}\ \textcolor{preprocessor}{\#define\ GEN\_MUTATION\_MAX\_PCT\ \ \ 100\ \ \ }\textcolor{comment}{///<\ Максимальная\ мутация\ (в\ процентах\ от\ Loss)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00093}00093\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00094}00094\ \textcolor{preprocessor}{\#ifndef\ ELOVLE\_N\_ELITE\_CANDIDATE}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00095}\mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga38607e23d9234524bc7de5869b15b8eb}{00095}}\ \textcolor{preprocessor}{\#define\ ELOVLE\_N\_ELITE\_CANDIDATE\ \ 2\ \ \ \ \ }\textcolor{comment}{///<\ Количество\ кандидатов,\ которые\ проходят\ в\ поколение\ без\ изменений\ (по\ умолчанию\ 2)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00096}00096\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00097}00097\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00098}00098\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00099}00099\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00100}00100\ \textcolor{comment}{\ \ *\ @brief\ Структура\ эволюционного\ оптимизатора}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00101}00101\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00102}\mbox{\hyperlink{struct_gen_optimizer__t}{00102}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00103}\mbox{\hyperlink{struct_gen_optimizer__t_abe0aacea949fbe93e5d4c002e37d7192}{00103}}\ \ \ \textcolor{keywordtype}{float}\ \ \ \ \ \mbox{\hyperlink{struct_gen_optimizer__t_abe0aacea949fbe93e5d4c002e37d7192}{stability}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Коэффициент\ насколько\ стабильная\ популяция\ (0..1)(@ref\ n\_cand)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00104}00104\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00105}\mbox{\hyperlink{struct_gen_optimizer__t_afe598a90024a8aa628dd16f3a2b38eb5}{00105}}\ \ \ uint16\_t\ \ \mbox{\hyperlink{struct_gen_optimizer__t_afe598a90024a8aa628dd16f3a2b38eb5}{n\_params}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Количество\ параметров}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00106}\mbox{\hyperlink{struct_gen_optimizer__t_a9e20d2f6f39a5147e6dbac46baca73a9}{00106}}\ \ \ uint16\_t\ \ \mbox{\hyperlink{struct_gen_optimizer__t_a9e20d2f6f39a5147e6dbac46baca73a9}{n\_cand}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Количество\ кандидатов\ в\ популяции}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00107}\mbox{\hyperlink{struct_gen_optimizer__t_a8201f1eede36a2c04ec7b4caac7465c9}{00107}}\ \ \ uint16\_t\ \ \mbox{\hyperlink{struct_gen_optimizer__t_a8201f1eede36a2c04ec7b4caac7465c9}{n\_best}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Количество\ лучших,\ усредняемых}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00108}\mbox{\hyperlink{struct_gen_optimizer__t_ad4dc0e53b3ca6bf2a642dfe7a1d1f26c}{00108}}\ \ \ \textcolor{keywordtype}{float}\ \ \ \ \ \mbox{\hyperlink{struct_gen_optimizer__t_ad4dc0e53b3ca6bf2a642dfe7a1d1f26c}{mutation\_amp}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Амплитуда\ мутации\ (0..1)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00109}00109\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00110}\mbox{\hyperlink{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}{00110}}\ \ \ uint16\_t\ \ \mbox{\hyperlink{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}{cand\_index}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Индекс\ текущего\ кандидата}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00111}\mbox{\hyperlink{struct_gen_optimizer__t_a8f226c85e9bb034cb811aa0366bb191c}{00111}}\ \ \ uint16\_t\ \ \mbox{\hyperlink{struct_gen_optimizer__t_a8f226c85e9bb034cb811aa0366bb191c}{gen\_index}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Индекс\ популяции\ \ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00112}00112\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00113}00113\ \ \ \textcolor{comment}{//INTERNAL}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00114}\mbox{\hyperlink{struct_gen_optimizer__t_acfeb93ef4823e09473ddba52fae9a6b1}{00114}}\ \ \ \textcolor{keywordtype}{float}\ \ \ \ \ \mbox{\hyperlink{struct_gen_optimizer__t_acfeb93ef4823e09473ddba52fae9a6b1}{gen\_mut}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Амплитуда\ мутации\ у\ текущей\ популяции\ \ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00115}00115\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00116}\mbox{\hyperlink{struct_gen_optimizer__t_a8b5066935d99f2fc7ebb94cc3652fc73}{00116}}\ \ \ \textcolor{keywordtype}{float}\ \ \ \ \ \mbox{\hyperlink{struct_gen_optimizer__t_a8b5066935d99f2fc7ebb94cc3652fc73}{loss}}[\mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga201cffde04ebc6540869c74bd1dae869}{GEN\_MAX\_CANDIDATES}}];\ \ \ \ \textcolor{comment}{///<\ Loss\ для\ каждого\ кандидата}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00117}\mbox{\hyperlink{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}{00117}}\ \ \ \textcolor{keywordtype}{float}\ \ \ \ \ \mbox{\hyperlink{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}{candidates}}[\mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga201cffde04ebc6540869c74bd1dae869}{GEN\_MAX\_CANDIDATES}}][\mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga8daf4b266a95353d580bd7946f47c0ab}{GEN\_MAX\_PARAMS}}];\ \textcolor{comment}{///<\ Параметры\ кандидатов}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00118}\mbox{\hyperlink{struct_gen_optimizer__t_ad37161efa27ef1390d1f7e6ee2f79b12}{00118}}\ \ \ uint16\_t\ \ \mbox{\hyperlink{struct_gen_optimizer__t_ad37161efa27ef1390d1f7e6ee2f79b12}{sorted\_idx}}[\mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga201cffde04ebc6540869c74bd1dae869}{GEN\_MAX\_CANDIDATES}}];\ \textcolor{comment}{///<\ Индексы\ отсортированных\ кандидатов}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00119}00119\ \}\ \mbox{\hyperlink{struct_gen_optimizer__t}{GenOptimizer\_t}};} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00120}00120\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00121}00121\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00122}00122\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00123}00123\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00124}00124\ \textcolor{comment}{\ *\ @cond\ GEN\_INTERNAL}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00125}00125\ \textcolor{comment}{\ */}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00126}00126\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00127}00127\ \textcolor{comment}{//\ Вспомогательный\ указатель\ для\ сортировки}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00128}00128\ \textcolor{keyword}{static}\ \mbox{\hyperlink{struct_gen_optimizer__t}{GenOptimizer\_t}}\ *g\_sort\_opt;\ \textcolor{comment}{//\ глобальный\ указатель\ на\ текущий\ оптимизатор}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00129}00129\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00130}00130\ \textcolor{comment}{//\ функция\ условия\ сортировки}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00131}00131\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ cmp\_idx(\textcolor{keyword}{const}\ \textcolor{keywordtype}{void}\ *a,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}\ *b)\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00132}00132\ \ \ \textcolor{keywordflow}{if}\ (g\_sort\_opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8b5066935d99f2fc7ebb94cc3652fc73}{loss}}[*(\textcolor{keyword}{const}\ uint16\_t*)a]\ <\ g\_sort\_opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8b5066935d99f2fc7ebb94cc3652fc73}{loss}}[*(\textcolor{keyword}{const}\ uint16\_t*)b])\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00133}00133\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00134}00134\ \ \ \textcolor{keywordflow}{if}\ (g\_sort\_opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8b5066935d99f2fc7ebb94cc3652fc73}{loss}}[*(\textcolor{keyword}{const}\ uint16\_t*)a]\ >\ g\_sort\_opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8b5066935d99f2fc7ebb94cc3652fc73}{loss}}[*(\textcolor{keyword}{const}\ uint16\_t*)b])\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00135}00135\ \ \ \ \ \textcolor{keywordflow}{return}\ 1;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00136}00136\ \ \ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00137}00137\ \}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00138}00138\ \textcolor{comment}{/**\ @endcond\ */}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00139}00139\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00140}00140\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00141}00141\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00142}00142\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00143}00143\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00144}00144\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00145}00145\ \textcolor{comment}{\ \ *\ @brief\ Инициализация\ эволюционного\ оптимизатора.}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00146}00146\ \textcolor{comment}{\ \ *\ @param\ opt\ \ \ \ \ \ \ \ \ \ Указатель\ на\ структуру\ оптимизатора}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00147}00147\ \textcolor{comment}{\ \ *\ @param\ n\_params\ \ \ \ \ Количество\ параметров\ в\ одном\ кандидате}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00148}00148\ \textcolor{comment}{\ \ *\ @param\ n\_cand\ \ \ \ \ \ \ Количество\ кандидатов}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00149}00149\ \textcolor{comment}{\ \ *\ @param\ n\_best\ \ \ \ \ \ \ Количество\ лучших,\ усредняемых}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00150}00150\ \textcolor{comment}{\ \ *\ @param\ mutation\_amp\ Амплитуда\ мутации\ (в\ диапазоне\ 0.0–1.0)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00151}00151\ \textcolor{comment}{\ \ *\ @param\ start\_params\ Начальные\ параметры\ (в\ диапазоне\ 0.0–1.0)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00152}00152\ \textcolor{comment}{\ \ *\ @return\ 0\ \ \ —\ если\ окей,\ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00153}00153\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ -\/1\ \ —\ если\ ошибка}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00154}00154\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00155}\mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga2db1df46b4082ad9280ef4344fdf4e8a}{00155}}\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga2db1df46b4082ad9280ef4344fdf4e8a}{GenOptimizer\_Init}}(\mbox{\hyperlink{struct_gen_optimizer__t}{GenOptimizer\_t}}*\ opt,} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00156}00156\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint16\_t\ n\_params,} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00157}00157\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint16\_t\ n\_cand,} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00158}00158\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint16\_t\ n\_best,} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00159}00159\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ mutation\_amp,} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00160}00160\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}*\ start\_params)} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00161}00161\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00162}00162\ \ \ \textcolor{keywordflow}{if}((opt\ ==\ NULL)\ ||\ (start\_params\ ==\ NULL))} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00163}00163\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00164}00164\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00165}00165\ \ \ \textcolor{keywordflow}{if}(n\_params\ >\ \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga8daf4b266a95353d580bd7946f47c0ab}{GEN\_MAX\_PARAMS}})} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00166}00166\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00167}00167\ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_afe598a90024a8aa628dd16f3a2b38eb5}{n\_params}}\ \ \ \ \ =\ n\_params;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00168}00168\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00169}00169\ \ \ \textcolor{keywordflow}{if}(n\_cand\ >\ \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga201cffde04ebc6540869c74bd1dae869}{GEN\_MAX\_CANDIDATES}})} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00170}00170\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00171}00171\ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a9e20d2f6f39a5147e6dbac46baca73a9}{n\_cand}}\ \ \ \ \ \ \ =\ n\_cand;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00172}00172\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00173}00173\ \ \ \textcolor{keywordflow}{if}(n\_best\ >\ \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga201cffde04ebc6540869c74bd1dae869}{GEN\_MAX\_CANDIDATES}}/2)} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00174}00174\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00175}00175\ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8201f1eede36a2c04ec7b4caac7465c9}{n\_best}}\ \ \ \ \ \ \ =\ n\_best;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00176}00176\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00177}00177\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00178}00178\ \ \ \textcolor{keywordflow}{if}((mutation\_amp\ >\ 1)\ ||\ (mutation\_amp\ <\ 0))} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00179}00179\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00180}00180\ \ \ \textcolor{keywordflow}{if}(mutation\_amp\ <=\ 0.001f)} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00181}00181\ \ \ \ \ mutation\_amp\ =\ 0.001f;\ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00182}00182\ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ad4dc0e53b3ca6bf2a642dfe7a1d1f26c}{mutation\_amp}}\ \ =\ mutation\_amp;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00183}00183\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00184}00184\ \ \ uint32\_t\ seed\ =\ \mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga9c853b02c22f26023c34d1d404b6d653}{local\_time}}();} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00185}00185\ \textcolor{preprocessor}{\#ifdef\ ADC1}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00186}00186\ \ \ seed\ +=\ (ADC1-\/>DR\ \&\ 0xFF);} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00187}00187\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00188}00188\ \ \ srand(seed);} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00189}00189\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00190}00190\ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_cand;\ i++)\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00191}00191\ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ j\ =\ 0;\ j\ <\ n\_params;\ j++)\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00192}00192\ \ \ \ \ \ \ \textcolor{comment}{//\ Добавляем\ случайную\ мутацию\ вокруг\ стартового\ параметра}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00193}00193\ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ base\ =\ start\_params[j];} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00194}00194\ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ inv\_randmax\ =\ 1.0f\ /\ (float)RAND\_MAX;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00195}00195\ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ noise\ =\ ((float)rand()\ *\ inv\_randmax\ *\ 2.0f\ -\/\ 1.0f)\ *\ mutation\_amp;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00196}00196\ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}{candidates}}[i][j]\ =\ base\ +\ noise;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00197}00197\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}{candidates}}[i][j]\ <\ 0.0f)\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}{candidates}}[i][j]\ =\ 0.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00198}00198\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}{candidates}}[i][j]\ >\ 1.0f)\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}{candidates}}[i][j]\ =\ 1.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00199}00199\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00200}00200\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8b5066935d99f2fc7ebb94cc3652fc73}{loss}}[i]\ =\ 0.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00201}00201\ \ \ \}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00202}00202\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00203}00203\ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}{cand\_index}}\ =\ 0;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00204}00204\ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8f226c85e9bb034cb811aa0366bb191c}{gen\_index}}\ =\ 0;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00205}00205\ \ \ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00206}00206\ \}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00207}00207\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00208}00208\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00209}00209\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00210}00210\ \textcolor{comment}{\ \ *\ @brief\ Один\ шаг\ эволюционного\ оптимизатора.}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00211}00211\ \textcolor{comment}{\ \ *\ @param\ opt\ \ \ \ Указатель\ на\ структуру\ оптимизатора}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00212}00212\ \textcolor{comment}{\ \ *\ @param\ params\ Массив\ параметров,\ которые\ будут\ обновлены\ (на\ выходе\ —\ новые\ параметры)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00213}00213\ \textcolor{comment}{\ \ *\ @param\ loss\ \ \ Loss\ текущего\ кандидата}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00214}00214\ \textcolor{comment}{\ \ *\ @return\ 0\ \ \ —\ если\ окей,\ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00215}00215\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ -\/1\ \ —\ если\ ошибка}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00216}00216\ \textcolor{comment}{\ \ *\ @details}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00217}00217\ \textcolor{comment}{\ \ *\ Сохраняет\ loss\ текущего\ кандидата\ и\ формирует\ параметры\ следующего\ кандидата.}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00218}00218\ \textcolor{comment}{\ \ *\ Если\ накоплено\ n\_cand\ кандидатов,\ генерируется\ новое\ поколение.}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00219}00219\ \textcolor{comment}{\ \ *\ Новое\ поколение\ формируется\ случайным\ выбором\ из\ n\_best\ лучших\ с\ добавлением\ мутации.}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00220}00220\ \textcolor{comment}{\ \ *}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00221}00221\ \textcolor{comment}{\ \ *\ На\ выходе\ params\ содержит\ параметры\ следующего\ кандидата\ для\ измерений.}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00222}00222\ \textcolor{comment}{\ \ *\ @note\ Функция\ использует\ глобальную\ внутреннюю\ переменную\ для\ сортировки.}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00223}00223\ \textcolor{comment}{\ \ *\ Надо\ убедится\ что\ только\ один\ экземпляр\ функции\ запущен\ в\ момент\ времени}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00224}00224\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00225}\mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa9a4c4f43f7beb926c85bd4817ebd628}{00225}}\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa9a4c4f43f7beb926c85bd4817ebd628}{GenOptimizer\_Step}}(\mbox{\hyperlink{struct_gen_optimizer__t}{GenOptimizer\_t}}*\ opt,} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00226}00226\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}*\ params,} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00227}00227\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ loss)} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00228}00228\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00229}00229\ \ \ \textcolor{keywordflow}{if}((opt\ ==\ NULL)\ ||\ (params\ ==\ NULL))} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00230}00230\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00231}00231\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00232}00232\ \ \ uint16\_t\ n\_params\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_afe598a90024a8aa628dd16f3a2b38eb5}{n\_params}};\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00233}00233\ \ \ \textcolor{keywordflow}{if}(n\_params\ >\ \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga8daf4b266a95353d580bd7946f47c0ab}{GEN\_MAX\_PARAMS}})} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00234}00234\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00235}00235\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00236}00236\ \ \ uint16\_t\ n\_cand\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a9e20d2f6f39a5147e6dbac46baca73a9}{n\_cand}};\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00237}00237\ \ \ \textcolor{keywordflow}{if}(n\_cand\ >\ \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga201cffde04ebc6540869c74bd1dae869}{GEN\_MAX\_CANDIDATES}})} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00238}00238\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00239}00239\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00240}00240\ \ \ uint16\_t\ n\_best\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8201f1eede36a2c04ec7b4caac7465c9}{n\_best}};\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00241}00241\ \ \ \textcolor{keywordflow}{if}(n\_best\ >\ \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga201cffde04ebc6540869c74bd1dae869}{GEN\_MAX\_CANDIDATES}}/2)} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00242}00242\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00243}00243\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00244}00244\ \ \ \textcolor{keywordtype}{float}\ \ \ \ mut\ \ \ \ \ \ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ad4dc0e53b3ca6bf2a642dfe7a1d1f26c}{mutation\_amp}};} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00245}00245\ \ \ \textcolor{keywordflow}{if}((mut\ >\ 1)\ ||(mut\ <\ 0))} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00246}00246\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00247}00247\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00248}00248\ \ \ \textcolor{comment}{//\ 1.\ Сохраняем\ loss\ текущего\ кандидата}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00249}00249\ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8b5066935d99f2fc7ebb94cc3652fc73}{loss}}[opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}{cand\_index}}]\ =\ loss;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00250}00250\ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}{cand\_index}}++;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00251}00251\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00252}00252\ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}{cand\_index}}\ >=\ n\_cand)\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00253}00253\ \ \ \ \ \textcolor{comment}{//\ 2.\ Сортируем\ текущее\ поколение\ по\ loss}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00254}00254\ \ \ \ \ \textcolor{keywordflow}{for}(uint16\_t\ i\ =\ 0;\ i\ <\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a9e20d2f6f39a5147e6dbac46baca73a9}{n\_cand}};\ i++)} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00255}00255\ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ad37161efa27ef1390d1f7e6ee2f79b12}{sorted\_idx}}[i]\ =\ i;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00256}00256\ \ \ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00257}00257\ \ \ \ \ g\_sort\_opt\ =\ opt;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00258}00258\ \ \ \ \ qsort(opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ad37161efa27ef1390d1f7e6ee2f79b12}{sorted\_idx}},\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a9e20d2f6f39a5147e6dbac46baca73a9}{n\_cand}},\ \textcolor{keyword}{sizeof}(uint16\_t),\ cmp\_idx);} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00259}00259\ \ \ \ \ g\_sort\_opt\ =\ NULL;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00260}00260\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00261}00261\ \ \ \ \ \textcolor{comment}{//\ -\/-\/-\/\ Адаптивная\ мутация\ в\ зависимости\ от\ Loss\ -\/-\/-\/}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00262}00262\ \ \ \ \ \textcolor{keywordtype}{float}\ best\_loss\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8b5066935d99f2fc7ebb94cc3652fc73}{loss}}[opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ad37161efa27ef1390d1f7e6ee2f79b12}{sorted\_idx}}[0]];} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00263}00263\ \ \ \ \ \textcolor{keywordtype}{float}\ worst\_loss\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8b5066935d99f2fc7ebb94cc3652fc73}{loss}}[opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ad37161efa27ef1390d1f7e6ee2f79b12}{sorted\_idx}}[opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a9e20d2f6f39a5147e6dbac46baca73a9}{n\_cand}}\ -\/\ 1]];} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00264}00264\ \ \ \ \ \textcolor{keywordtype}{float}\ diff\ =\ worst\_loss\ -\/\ best\_loss;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00265}00265\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00266}00266\ \ \ \ \ \textcolor{keywordtype}{float}\ sum\_loss\ =\ 0.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00267}00267\ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_cand;\ i++)} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00268}00268\ \ \ \ \ \ \ sum\_loss\ +=\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8b5066935d99f2fc7ebb94cc3652fc73}{loss}}[i];} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00269}00269\ \ \ \ \ \textcolor{keywordtype}{float}\ avg\_loss\ =\ sum\_loss\ /\ (float)n\_cand;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00270}00270\ \ \ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00271}00271\ \ \ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00272}00272\ \ \ \ \ \textcolor{keywordtype}{float}\ loss\_ratio\ =\ (diff\ >\ 0.0f)\ ?\ ((avg\_loss\ -\/\ best\_loss)\ /\ diff)\ :\ 0.5f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00273}00273\ \ \ \ \ \textcolor{keywordflow}{if}\ (loss\_ratio\ <\ 0.0f)\ loss\_ratio\ =\ 0.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00274}00274\ \ \ \ \ \textcolor{keywordflow}{if}\ (loss\_ratio\ >\ 1.0f)\ loss\_ratio\ =\ 1.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00275}00275\ \ \ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00276}00276\ \ \ \ \ \textcolor{comment}{//\ Записываем\ стабильность\ популяции\ в\ структуру}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00277}00277\ \ \ \ \ \textcolor{keywordflow}{if}(diff\ <\ 0.0f)\ diff\ =\ 0.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00278}00278\ \ \ \ \ \textcolor{keywordflow}{if}(diff\ >\ 1.0f)\ diff\ =\ 1.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00279}00279\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_abe0aacea949fbe93e5d4c002e37d7192}{stability}}\ =\ (1.0f\ -\/\ worst\_loss)\ *\ (1.0f\ -\/\ (worst\_loss\ -\/\ best\_loss));} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00280}00280\ \ \ \ \ \textcolor{keywordflow}{if}(opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_abe0aacea949fbe93e5d4c002e37d7192}{stability}}\ <\ 0.0f)\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_abe0aacea949fbe93e5d4c002e37d7192}{stability}}\ =\ 0.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00281}00281\ \ \ \ \ \textcolor{keywordflow}{if}(opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_abe0aacea949fbe93e5d4c002e37d7192}{stability}}\ >\ 1.0f)\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_abe0aacea949fbe93e5d4c002e37d7192}{stability}}\ =\ 1.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00282}00282\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00283}00283\ \ \ \ \ \textcolor{keywordtype}{float}\ mut\_pct\ =\ \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga3db7bdf57549722427e1e72dcaa87068}{GEN\_MUTATION\_MIN\_PCT}}\ +} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00284}00284\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga48dca8f0a0c9b96d02236ef76ac827fd}{GEN\_MUTATION\_MAX\_PCT}}\ -\/\ \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga3db7bdf57549722427e1e72dcaa87068}{GEN\_MUTATION\_MIN\_PCT}})\ *\ loss\_ratio;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00285}00285\ \ \ \ \ \textcolor{keywordtype}{float}\ adaptive\_mut\ =\ mut\ *\ (mut\_pct\ /\ 100.0f);} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00286}00286\ \ \ \ \ \textcolor{keywordflow}{if}\ (adaptive\_mut\ <\ 0.0001f)\ adaptive\_mut\ =\ 0.0001f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00287}00287\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_acfeb93ef4823e09473ddba52fae9a6b1}{gen\_mut}}\ =\ adaptive\_mut;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00288}00288\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00289}00289\ \ \ \ \ \textcolor{comment}{//\ 3.\ Генерируем\ новое\ поколение}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00290}00290\ \ \ \ \ uint16\_t\ n\_elite\ =\ \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga38607e23d9234524bc7de5869b15b8eb}{ELOVLE\_N\_ELITE\_CANDIDATE}};} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00291}00291\ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ c\ =\ 0;\ c\ <\ n\_cand;\ c++)\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00292}00292\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (c\ <\ n\_elite)\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00293}00293\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_params;\ i++)} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00294}00294\ \ \ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}{candidates}}[c][i]\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}{candidates}}[opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ad37161efa27ef1390d1f7e6ee2f79b12}{sorted\_idx}}[c]][i];} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00295}00295\ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8b5066935d99f2fc7ebb94cc3652fc73}{loss}}[c]\ =\ 0.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00296}00296\ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00297}00297\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_params;\ i++)\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00298}00298\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ inv\_randmax\ =\ 1.0f\ /\ (float)RAND\_MAX;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00299}00299\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ noise\ =\ ((float)rand()\ *\ inv\_randmax\ *\ 2.0f\ -\/\ 1.0f)\ *\ adaptive\_mut;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00300}00300\ \ \ \ \ \ \ \ \ \ \ uint16\_t\ parent\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ad37161efa27ef1390d1f7e6ee2f79b12}{sorted\_idx}}[rand()\ \%\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8201f1eede36a2c04ec7b4caac7465c9}{n\_best}}];} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00301}00301\ \ \ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}{candidates}}[c][i]\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}{candidates}}[parent][i]\ +\ noise;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00302}00302\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}{candidates}}[c][i]\ <\ 0.0f)\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}{candidates}}[c][i]\ =\ 0.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00303}00303\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}{candidates}}[c][i]\ >\ 1.0f)\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}{candidates}}[c][i]\ =\ 1.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00304}00304\ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00305}00305\ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8b5066935d99f2fc7ebb94cc3652fc73}{loss}}[c]\ =\ 0.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00306}00306\ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00307}00307\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00308}00308\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}{cand\_index}}\ =\ 0;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00309}00309\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8f226c85e9bb034cb811aa0366bb191c}{gen\_index}}++;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00310}00310\ \ \ \}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00311}00311\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00312}00312\ \ \ \textcolor{comment}{//\ 4.\ Возвращаем\ параметры\ следующего\ кандидата}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00313}00313\ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_afe598a90024a8aa628dd16f3a2b38eb5}{n\_params}};\ i++)} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00314}00314\ \ \ \ \ params[i]\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}{candidates}}[opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}{cand\_index}}][i];} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00315}00315\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00316}00316\ \ \ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00317}00317\ \}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00318}00318\ \textcolor{preprocessor}{\#else\ }\textcolor{comment}{//\ GEN\_OPTIMIZATION\_ENABLE}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00319}00319\ \textcolor{comment}{//заглушки}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00320}00320\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00321}00321\ \ \ uint16\_t\ n\_params;\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00322}00322\ \ \ uint16\_t\ n\_cand;\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00323}00323\ \ \ uint16\_t\ n\_best;\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00324}00324\ \ \ \textcolor{keywordtype}{float}\ mutation\_amp;\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00325}00325\ \ \ \textcolor{keywordtype}{float}\ loss[0];\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00326}00326\ \ \ \textcolor{keywordtype}{float}\ candidates[0][0];\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00327}00327\ \}\ \mbox{\hyperlink{struct_gen_optimizer__t}{GenOptimizer\_t}};} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00328}00328\ \textcolor{preprocessor}{\#define\ GenOptimizer\_Init(opt,\ n\_params,\ n\_cand,\ n\_best,\ mutation\_amp,\ start\_params)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00329}00329\ \textcolor{preprocessor}{\#define\ GenOptimizer\_Step(opt,\ params,\ LossFunc)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00330}00330\ \textcolor{preprocessor}{\#define\ PARAM\_SCALE(x,\ min\_val,\ max\_val)\ \ \ \ \ \ \ \ \ (x)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00331}00331\ \textcolor{preprocessor}{\#define\ PARAM\_UNSCALE(val,\ min\_val,\ max\_val)\ \ \ \ \ (val)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00332}00332\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ GEN\_OPTIMIZATION\_ENABLE}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00333}00333\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00334}00334\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ \_\_GEN\_OPTIMIZER\_H\_}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00335}00335\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00336}00336\ \textcolor{comment}{/**\ GEN\_OPTIMIZER}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00337}00337\ \textcolor{comment}{\ \ *\ @\}}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00338}00338\ \textcolor{comment}{\ \ */}} + +\end{DoxyCode} diff --git a/Doc/latex/general__gpio_8c__incl.pdf b/Doc/latex/general__gpio_8c__incl.pdf index 8c3a4fa7a4cacc380404c0275729aef47f27726a..064f67da1a3554cb1611cf44b7ff69395f14fbf5 100644 GIT binary patch delta 155 zcmV;M0A&B7uK}X30kGp$e=$x1j`>?0yuo-n4%zM}c-`)jZn5-neh|ANoy+egTx>ox z2q6f0zr9K=Y$FofJKQK)pMGm3#}4{vqtdcE*~hYTN8f@;p6E^sV|6W_icG9-=7V-x ziAvTg6BQ)=o5Lxo%ocaeY^TbONa!*fxo<~UbnlXTP%H?AH=Rm=kmJ=7n=_a zLI^_MZ?94d+lU1B4mV2Hr{5aMv4cL^sI;t3_Oa~T(YIidC%V(ZSY3;!A``2d`JkOv zqLQ`BLb$XC_tKTf^41xS{JqIQK0nI>v JRrWT0kD@;e{E~qFcAK(UvVEcmM}>4YRe@Q+H{n%7qYZtA4UnTBNDU3 z4z@hjf4`G#=gl3AE%`P=(BtP$mYzGEd<-a&pePA|N0MkzQWHi&Q$ZL9Mpa0d1SS|K zJOZWyN(8V#X`+CIG$bJoDj;anR1wB-RFW`sitrs=iZa7!eG(6qJlc zFnoC47#L3Cg((RD4Bw~o621Wk3R8IW)Hts)3yfS|?#;N$vfO&}ef4BL^&!o^*NiQy z#7^SE_<4@{T*dQAo@Um)TvA{h{~;f6bpQkDjX2axPfcQ*3COWfc<H1viMOVED_*SuEK^Hr5t3&4xKVMs3$xW#!U0( zAl3)YQP?}Qe{mkZclV|LcKhtqiK%naq@&5iE)SC;pI3<~pqIpHkpmkrJ)qEATDvJP zhC|OTig>e3lX8$3i+;au3knmvqjwWq1HGFIPPt-~hcptJ>bF$9p|pP}!?hXkx@ig8 z{$RWJk7l06*ZEJBK=Bt*>{_-pG0rnzFJ=6^q zlZUadcRY@5yvi3%R2FW%qvhJn?;Va`p?h&0lXh1i0XUPFSCDE7gFqC-@mXEtn#7M_ zNNa85Q6z!D)*ivm$~Iu(5pq@Y{-pUakAdMyI*vpS2^t9CpnwFrZU0kD@;f7^=NFc5v$SIk386AFp0wz7nU-E3KwUP!ZB`cRhObwpyC z*uj=d_wPHBFS&RNrA^*S2s%D9vUFxN@-U!8f}$hX<_lmK3 z8QW=;8$ZucpUY@5&63o*mrDwa<3HpBt`1-zy%C3M>6wXbJpnlu3h!Onu3$WNz~OpN zu}!kH;qGDhWp>v*e<6h4tIhK|c`D}fB#qbQ!p!w*u(F$V-+7@t=XiY&PUTk&05X54 znRhi~J_f8-E2QjVr?2rj){h2H3aS1v085jaJX+7^Hrbp@z38eJ0dEy67Id)_*Z3T( zM}sF73s0qfxlOXUj?W@rcI7LvOL(Al7dv%AzAPUNo(%Npe^l~|ZE`O4s;fSvyM*h2 zb}@=;eU8V=-v)LHyjuAGglfV=ZpaBrXP7zU=p_wjei=J9;;fHPE}c;FK#yIW{en3I3LfHxDfdU(jAwAi}E;^&6G z0}QBXo+jvZV}2yDncZIR6~@dIS((QM7j4h_LAe*$zxk?k*MskDd}#d+L08eH)lfB5 zOdiI*+VLc^(K=h!QCYh6j+SdOzjru(0fA+41qx+uWOHy#jrTz6jd6y}cuuhV hKd2yw8g4Frtc_pk2Wz4WxRa1rAP6xEB_%~qMhfsVsyzSz diff --git a/Doc/latex/general__gpio_8h__incl.pdf b/Doc/latex/general__gpio_8h__incl.pdf index b1cc4e0e4c8c013ba49065215fbca8b6bd885f2e..99fe613769dd18225c14e1a8623d9dffc9d62367 100644 GIT binary patch delta 234 zcmVa9F|668zp`GomTbvmo9MZpb0iQE2}e}m0vpg9&FWQ_qViBxAJR|%k*wB=!H~P zs@A!zAnwl`ws>XVAJ>UE64>9ND{M3_Z=-6Nne3?ct#SL_41ABT32<=B-vM?5F&C4j zRv-Z~lgC!6KZRSk(V1ZL5l9Gt7!5Tb3XupWQen<6z@Z^_Xjd^!8}Y3;$=oU3q+i5N k#zCzAb0)mVMd`xBHoU+G*7^(Gldo4G2s8>MB}Gq03Wx7*NB{r; delta 233 zcmVA{+SQ?3Kl=Sg;TGi)Yy1=o6CfMk#tj>5=e(C6YuvL@Y-_l0i%CAK()4Ro>7gAZN zTIaHYxIc5);+1`WTqoj4V1I|Mu+g}@jjCm4vZLC!#_fAE@IAi52*E9X2UkNd|C6Uy zAOSIx$X2O8;1-T_CfIxg5&|GbLk);RB*KYQn6nFTXowx!RZP=Hd@D{ecS<+u7qOFZ j5bOV(2`_R{y6~_KFYp1@?+e?LuvZ`mGYTaoMNdWw&IfQt diff --git a/Doc/latex/general__spi_8c__incl.pdf b/Doc/latex/general__spi_8c__incl.pdf index 3ed818effb7e7a1e0b33e9535837a5a17da5aa6b..a12720ec0a509efacec52c58c12559bfa5cd7495 100644 GIT binary patch delta 667 zcmV;M0%ZNDu>q*D0kG&)f6;2&Fcf{)SKNnw$CHV6sf0H!<0RK8)*YF(} zP*}jNqs~=RXh3p$dNAXxD3o@?H_e@P)W^K|(K5PfQaw*9>E>DLOOveUDlfGCctC;C z*d)xoNDLs0-JogOr57^Q-2`T%0vFwmoxyZ!fyG@;sm@i=b2s3BU0n4&17Y+glZC93 z?P^t*`6}Lc8@=0(e{G1-W}{{|U?qMt>J9TU!R%Nta`bp7l_5RGR$L$RT)Y`@Bt!gH z>a#LeuO*)!%a4U;%2Sx?3z^4;Fk;=X0R!1_%VEe}{L5AE9=G{jy;`m1ef?UZgWrfo zThSA9^1`rh5W|kQXebvQ*9HH*+Ef+ydG^P8KQ}v*v>m7Be~z$+-(m#bLk6OU9HJfu zFzMj!(7D!~4_mn-U8Z~E=D^wo{*MXEO3H=m%AnnDO99*a;a{8mb4Iluwf3~mJoz%O z)VfJ!1*0^{D+TCb>`@qPv@Yut-*;?QCFLehYfn|#c--E;l}zlWUnE+>=;DM?CXlj- zPIycw?+KM-ea=-#n=BOSWk=6IgyWUI2yhs>_q*D0kG&)e_di1DhgAKtwS?3KKhE0+4bf91y7> zc7!4#6F^2encA0Nghhay+Su5>6G0eYl*EMDsEI%_n?ZQ~nk)nu8L){4%TM7e;Kw%yaQ}!jlZ~ zU#ZWlLcNxJekeZ?fh|vAt1o5&8^Q_erY#uAPFfCQ?&Dvsdi%I3?&{@oCGYFk5*__U zG`fnO+M5^0{R=Vfc!!2^(Q{q!->c13d0*sztoL)XwMn~qe`)Ry zVFc3--VU8>-TAPQThe8^Gj0y7-QfRNaHFMMsICm!<8~CVogd+qJwI<$>rrb@>&%lc zbFEfQCN+$*w9pDLz$BnBS{qZDh^z+n67@Z$6$^=r| zIRr({-c$aLf70#vLBtt}3S*u28(r)^c<^J`m?Pt*6 z2X`I)2gF+&`)A^xNQZ8>Ii95^-Kf0tA$L1G+n_()2)zRM1@D*3=#!yP6SIC-DgjIW BQsV#s diff --git a/Doc/latex/general__spi_8h__dep__incl.pdf b/Doc/latex/general__spi_8h__dep__incl.pdf index 458dc12a3cd6be2f9eebba61cd1f8522b6a0a403..284ee2b95ac00d3ef491ecf27cc294b58d6ba43d 100644 GIT binary patch delta 502 zcmV0&P&-M z0EnKeV+%il0)_%!duXG&+5kcK_mhZ+x>ly&-gUoB4}GcX-ySi#e-kF>TJ~`cdg=Hv zS5QOc_LlwngoPBwyICl>`JD$?t(@WPP=_#;st0Tb(f8tMSXmQhA4*wE z&CiEJ+f;{CEKcTfo;w%YkMmmZz_s|{*S z-bGQ5mYO%GO0)~5%lX{Ps3mt?ZMl&!+ul)36N2dyXDr3p4Q8J(o?n;g#sWSD2?ssL z+P=zT#n)4LAI(%FwdC7L$&zWt%Ab s7h>$)h?7rEAOSg(a81|@1eEoyWMBXQAczdRlT=P12r~*LB}Gq03RFMyQUCw| delta 501 zcmVEde?N(Ms48u{?OprJcF^at`rRYef3(VG(qI?op>M4` zX1c7bKRl-XWy^T@rJd!zeZm}-?cE#{-1?mdSgpL_?NEoZrLG2S2hsQZX;?WEX738D z(8%-Q(A4E2Rg06ooaf%f_2a$PJMeA&a2-1&H2Jl?xJv!LE5dW(O$H*EFV|%B4Szc0 zg@h_bE;3+!{C@)We+DtvfySOL54o0yjM1~>K?E(r37OHyR-u8JlBLnW7A##*n4PSx zo4Y9L(89?2RH|m7O);PMG8&YgtF5#Mv+W(HJYkeGnouVAM=Cy0I=?Q{j|IFB5)OKf zwSB>3DcAbdl}O#gMGTzAa9F|668zp`GomTbvmo9MZpb0iQE2}e}m0vpg9&FWQ_qViBxAJR|%k*wB=!H~P zs@A!zAnwl`ws>XVAJ>UE64>9ND{M3_Z=-6Nne3?ct#SL_41ABT32<=B-vM?5F&C4r lRv-Z~lh0P&3_+l5*bN2-0O8^cB9pjRAP6!FB_%~qMhdVwRHpy{ delta 182 zcmV;n07?JhuL0n%0k9`le;E~&1^hJ)UQs$7i^WNUm+e$^Bho8;CwE1*P~WUjG|Gbz z_>A{+SQ?3Kl=Sg;TGi)Yy1=o6CfMk#tj>5=e(C6YuvL@Y-_l0i%CAK()4Ro>7gAZN zTIaHYxIc5);+1`WTqoj4V1I|Mu+g}@jjCm4vZLC!#_fAE@IAi52*E9X2UkNd|C6s) kAOSIx&{o|H0ibNybp{3i;nxfxlet$Q2r&vJB}Gq03S;P5_W%F@ diff --git a/Doc/latex/general__tim_8c__incl.pdf b/Doc/latex/general__tim_8c__incl.pdf index 177f0010356edac4fd21b4b1f52a4f8db6d761fb..6449f65ddc71bdbb8d7d358f47822d30e69e41ff 100644 GIT binary patch delta 806 zcmV+>1KIq*u>rxc0k8yBf7wa{wGi_yok>lfo zjFYM|)-PYTx7Jf1%j!qR*t*T_G^@4GbJUkMTTV?`S@+|K3K9uC#_FU9_zF?h8T*u%x4yYwm$%Jg zvDA0XYqcIdZ5>B6K-Va?q396tv|mLuXd3BmSuvmR4-7B1rFpHk#WRkJAVp`Db4>+| z4`ylMv(MSfZD;E zp@yAKAJ%$9c9rfWoC5DQ_&*ZnwbnDU8;H($M*-jK5niExUZ_r^PM%Jg2VJJMS+=>Z zVU%ZOZGZ(V4JeFO)^3}lF!XFuXWLboH-V{(@wmH-Yn?gM&oirGbbiDsmyGg+swk!E zJ&oQ`Ivy78f9`g8ySs<`OL<@IC%r7QQ}YXprugBJ071q6=C7=Fqs;g|;i5L}_Q@!E z_Fxj{byhW7w^@GQ)0cn}>i+Evqt5luGS{<<(}RJW>Bh8mu5r_cDi04@gMW(tJh+4D zPMJ3gV*gD2lhL8tU5#g%&DN&a=}@>G9&OOOdoTdMCINV#&pZlcZe(+Ga%Ev{3T19& zZ(?c+GB_YGAa7!73LqdLHa0Mmq*st+3WGotgyDIv#;6Gq592W;g0PoLom&X@7Ae!l z#>xxi6r1;x=3`(OMp8rub0k8yBfBB|vDPI;vxqSizRZ`tNro#cAC3VRY-m z2sp<__eS@gbEPn#M1Z6u2A(A(1u0U(C?uIATmqv)k_Z@M8NoLerz8Q!Swb@WiethB zu!v!7jNe&CI50^m;TV;~l1wHL&hNJh!f9TrmHUO!G#$JWGA)^5s-lwXr{*WI-Z<$5@>d0UyFt^y`Rx z0W(z?m*zMoeS%**fyu-Ii+7b3rqXrKT|@YFcGuH&7WyI4Pxt>v^K~fN*>{a??Vs{TTdOwWb9I2-umW#UEQ{e z#Zuk1uhn|=v~?WO09~WlMn;E-r~N9TLDNY4<&3$6e_(jIt@LZPEuL{)1SvY3S=X|F z@d3p1+6P!T^jkQN#nfi}z1@Yb@2c{TJOA8muzb5tfeCvRe^|^Q>LCZ&!w8Zd3dnZw zW~iap>BCxW$ga}8gj3*tga0F8-Y7NGyMge=TMGDIkMIipb3%EIygXi+2VJI(UUr3Q zU{vH)qk#o14JeFO#%$Z8Fm!C$%>C^NoKxM*~@eKLxU zJ($FKlh^ImZdTm)^d+E#s((AfsB`tRD%9-a^k5)os?}XnDBSd+%EN=!;-8{B5B6Z% zQ|8Qq*gaGCWOS&uukkE5`C6Ad9ZI{yqYZj@4+h{jC0WbQB?@J3WOHuEfkyoc499;D3~KJaz! jFWCQYH5Aam)#B6JI7>h6H4k!=nOGnQGzujpMNdWwrz(^B diff --git a/Doc/latex/general__tim_8h__dep__incl.pdf b/Doc/latex/general__tim_8h__dep__incl.pdf index 47e8c57a926662e4b6485e0f89c59ee8278946f8..3838a8d5d9aa8d1a793e95144782c915f6316937 100644 GIT binary patch delta 573 zcmV-D0>b_IodNot0k8{9e^7|^VmEdPg(exLbQ`Xdu@9pJO%aY+Vi{Q;?Z2O7$;M&B z#y&l|)7?GKi2z11Bp8tl=rThL7|9Sxf!(HvVu)FcC?qUFl)%zDtX2^1-x~>0&P&-M z0EnKeV+%il0)_%!duXG&+5kcK_mhZ+x>ly&-gUoB4}GcX-ySi#e-kF>TJ~`cdg=Hv zS5QOc_LlwngoPBwyICl>`JD$?t(@WPP=_#;st0Tb(f8tMSXmQhA4*wE z&CiE}sV;|9EKcTfo;w%YkMmmZz_s|{*S z-bGQ5mYO%GO0)~5%lX{Ps3mt?ZMl&!+ul)36N2dyXDr3p4Q8J(o?n;g#sWSD2?ssL z+P=zT#n)4LAI(%FwdC7L$&zWt%Ab z7hW~phLg`tAOSg(@J)_WI|_h65ChQ6_(c{xg;()|>>0e4hqH3a?d+`91e-@7Bmhcr z1VFT+5@z-QhLPB%c3|3i;)h6NKb2lG2QiT)lhyyfTDWLLXYpnmx%dF>>Ede?N(Ms48u{?OprJcF^at`rRYef3(VG(qI?op>M4` zX1c7bKRl-XWy^T@rJd!zeZm}-?cE#{-1?mdSgpL_?NEoZrLG2S2hsQZX;?WEX738D z(8%-QV9U!PRg06ooaf%f_2a$PJMeA&a2-1&H2Jl?xJv!LE5dW(O$H*EFV|%B4Szc0 zg@h_bE;3+!{C@)We+DtvfySOL54o0yjM1~>K?E(r37OHyR-u8JlBLnW7A##*n4PSx zo4Y9L(89?2RH|m7O);PMG8&YgtF5#Mv+W(HJYkeGnouUhM=Cy0I=?Q{j|IFB5)OKf zwSB>3DcAbdl}O#gMGTzAtw90kCdWe_d>p$&k*$>iW%~Ng#-l<6O1B= zgBVc?1Y;fG>o*ILUJ@1|8UXQqA1xN(ZqF45cb(?EMgZX675f^#e*y&z3EW$1C7MzJ zL6?`KjH|K~%5HC(2W6@EMft5|lx#A!P9?W_hWgZ``?V-aW&S*3PH1WfbUi`fc+oF7 zqC<#=Z4n92lufl92|}CF?p?uRVSvG1b(tze*>f9kKPR{SN<)~vI-QTjL%rMW`D49f z2j`$p$GHj7DoxaKe*;GB7u^TVyi7WME}anK1VFKt5#uSMtl!mWB3je!c1&!-%T?#R z%lR>smIKX>};F+7U9J&)bnAd1@@X zP8EmQ^##Q=Aecrt_87r$vG)e!`Ltv+qTqEmPWst0)cJw$i*zZz>vFMvsON*{vtfXh zikpK-@Q`pLT18VmJ4lutoujQx%epcj%g#N03%Yr{U#)c1HGe8Hp4==)$0^~pXk^A~ zh=*^EZ%M5OxjoG0R+%f}+s=memrc9e*0xGjdK7u5U(f52{HdQK%YOiRl7G#!#8))| Dvq~`L delta 617 zcmV-v0+#*xu>tw90kCdWe^G1OFc5y%uegVeB@AqxY&miXg(e-PbQ@XPv4>HD>!^-d zVg*?)%fFu_$6mbdVRVdPh(CS0i|@NnIs{5$;FKf~Q6vI*EC`EWk_r-mNRV(yk&+3d zJSB_)QfdQY`xXhYOB55rIA9#dWIBcL?y#2-F0w+_1OURDa$Un$e_%ji3HP3wtEMu5 zM}2Ct^+J`EaeqD$LE>uQwjR!dXz~l5 zus+1Xwuq(7jZgI)^2DdKdlxXBI^giJy4;ki>bP47KQFJlm4z^RwL5IfhkCVI%g1^p zHo?a1wqqA!Rl2Cze=Rt%Uu+*N^D^n|xpYJfI528uq;!aw=yoj{h_-aQouW^8x#~hz zQfJ%Ms@Rw6U&)Ss<9Hkh>ul;=O9NyBh?sN%4i5c}J%>-`&|bnLydO5MZO*%`+>v8>ecu+=SD*A>e-iGrluLCqwKdOCz(6fck_M0-V1Eq`cxE(24X3nz9 z%t#nro-xWeQihaMjH0(RdPC`WSh5>Y@cKATy4lj#`9ZGBY^J{3a;be-6hjn?et=a* zx`T+cPq@;mTG>B4NS-}8M|V1_>b?6|e(30Hu+5X*YHp)0#8Qgm6Ot-ZKMvjknR-Dwewto7$y|bSBSk*r|#+tUU z)7&V(&QV|5d@Cm~a{-yNF9ag|BYonJR1_&Rvl7!QI>mOePLE+-FqS zO4kE-4dK_>FML1`}R^ctMPZzvv_m+9rt^|B}l zc&8K(=MXw+eZZk|DIz2@NR?uW5JD4 zYNq>w=nmddz_)&ce^+>Z-l)!_&YsShCts#UFWN#G7!`SCG_ZilfWl~L?WQ>jL(i5b z-z=-53A8E4D zovVkcP_v8Eor0XHMz^L=xam`tyBDp&FQUH>?qd3HiMLkxr}R%o_ucMtJj-pq(q->M X>2^5SU^v~K0{8_1Va~0y##lK4O5I0C delta 637 zcmV-@0)qYjvjP9J0kB9`7c9$i359-)Qo4;S?byR8!F5!}EU|(ulV4UDelaEwYMCzA<; zH;)?);WR6BLjWMWDi;lW2M!cwaOQ5aZ**r`swTT&U)%&S^el3TerEL zX0`U~9QCEm7E@DJ*8RDlf5552gp(lNMO^tQe03YobZ+}_?t+vL?&eNlGI7A+KBL^0 zrW&|w2*1uQhY>;;y(x61>ufcjw^?oHY8fo;dNp=2D9wePUV~Hk4aFn#GQIq{UKYgx z@08-<96~3p4>(kgyeBz}|CRJ&Q<~S39zBg`4Oi)W|T7;Qx=K$G)FNWPC?FeW7;~`xam`tyBDp&FQUH>?qd3HiMLkzr}9rm_ucMtJj-mhGDYu0 X;dVIKU^v~K0{8{)an7H!##lK4^-(;l diff --git a/Doc/latex/general__uart_8h__dep__incl.pdf b/Doc/latex/general__uart_8h__dep__incl.pdf index c0c2040e4ec6d20a51364d5a5b52bdb0f091deaf..055d1c4b9292c666362e20d46ae5a061381cbb2c 100644 GIT binary patch delta 545 zcmV++0^a@LoB`pS0kCCDe{E~qFcALkUvVEcnox-KVy8|Cg(fMbbQ`Xdu@9pJRXH5f z#4@rx+J8UEmW{)PjeUA_r@MQe69p1P5R-r|fF&g0z?oenz~_sA5r}vkFo^j)U=(hw z!*U7X?z2J&Q;}mG06_R$9BTLt3dR28LhheyP{bP@Hxq_ym~OPHZFotuTcTeou$%cV1%?dy=HP-Ty8 zA^e#=^($+_i9%>f11E(Oiq_Sjc*&bUvMSI%*V-tc@@Tlg%w7ET)9rkOfaDxhDLI zkm+TaZZ6=f*RU6KsO>u*3b9fjwnSnd#v@=P8m6W+==7csRQ``zHPt@~w&+N}ofc(X zxm@zIho8Xmh5c%6y*Bu#keEHLMnYy-t42$#As%v$XR)>yq@5x+yX_!e65G|Y7Dk*@ z?pwC^V$|`aY$Ij=0$pU?+mkg-AOSg(R!y7+F2V*@U?!9JO&}mwJcw`NA@fH9$asp2 jOpDmdUnN}BqO}xR(+d0w+Y9=WI8Go4Hwq;sMNdWwL1P6$ delta 544 zcmV+*0^j}NoB`mR0kCCDf7^=NFc5wBSIk386AG~|cIqr)VUv_)*|xY&N*~G+RAq2X z6U)d_>Hd8sTQ&|YHumUfMl*BHhysZcNJ&Ijz%mkX;LI&D;LBCS2qZj>7^Hj|F$y1? z!+H(z;k7}Cb5UX&0YLm*om%(-3yVXzb!V^wo+}uBzJj!xQ3Px=My$)>-b`CoE8!-pxV5t>1Zo_1YWW4s}RVsd~Wn z5PvJ4hLtm6_NK%dwYVIQR%mm~v$HWxdl$zYT58dpE7>lTF6Z-JM~%XhwG#$mw!345rIavAQbIX@Pxw1R z=C@_~xq!Dp!$Huow$FH~#76ybB@*{Ao&Y1sI5o9FulI8FQ-9RTHvcHtp%VcQTGVah zbII2MegelA4y+Trg?V)3|{2w7mOtd`h9I_8|tV(TtQH${GSyFt7qwy$R^jJT*W zwCwK1q~lxJCd&Q=N^0HAlQvBt0XUOaO`HZR!Ui^AD3ke3ARyOt5Z}Z@=8puB@e~({ ii`dIwC0x{^wG>&?3j7Mt3;2^cP9O+23MC~)Peux3U<@+= diff --git a/Doc/latex/general__uart_8h__incl.pdf b/Doc/latex/general__uart_8h__incl.pdf index ccac83aa47a11ec599df5a3175f0df7d697bb4db..51da014a5ae3f2b8be4034dc8e7d782c68334bff 100644 GIT binary patch delta 151 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 rm^GTJU3+K%G*o6dO3(k)z}3yf#m&>@CNT,\ 0xFFFF);} +\DoxyCodeLine{fast\_function();\ } +\DoxyCodeLine{uint32\_t\ time2\ =\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga47a69851a2089140eac00cde18a12439}{BenchTime\_End}}(1,\ TIM2-\/>CNT);} +\DoxyCodeLine{} +\DoxyCodeLine{\textcolor{comment}{//\ Измерение\ с\ DWT\ цикловым\ счетчиком}} +\DoxyCodeLine{\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gac65338df38129964ce3e9d9cb2fcb349}{BenchTime\_Start}}(2,\ DWT-\/>CYCCNT,\ 0xFFFFFFFF);} +\DoxyCodeLine{critical\_function();} +\DoxyCodeLine{uint32\_t\ cycles\ =\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga47a69851a2089140eac00cde18a12439}{BenchTime\_End}}(2,\ DWT-\/>CYCCNT);} +\DoxyCodeLine{} +\DoxyCodeLine{\textcolor{comment}{//\ Многоканальное\ измерение}} +\DoxyCodeLine{\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gac65338df38129964ce3e9d9cb2fcb349}{BenchTime\_Start}}(0,\ HAL\_GetTick,\ 1000);\ \ \ \ \ \ \ \ \textcolor{comment}{//\ общее\ время}} +\DoxyCodeLine{\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gac65338df38129964ce3e9d9cb2fcb349}{BenchTime\_Start}}(1,\ TIM3-\/>CNT,\ 500);\ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ часть\ 1}} +\DoxyCodeLine{} +\DoxyCodeLine{\textcolor{comment}{//\ ...\ код\ 1}} +\DoxyCodeLine{} +\DoxyCodeLine{uint32\_t\ part1\ =\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga47a69851a2089140eac00cde18a12439}{BenchTime\_End}}(1,\ TIM3-\/>CNT);} +\DoxyCodeLine{\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gac65338df38129964ce3e9d9cb2fcb349}{BenchTime\_Start}}(2,\ TIM4-\/>CNT,\ 200);\ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ часть\ 2\ \ }} +\DoxyCodeLine{} +\DoxyCodeLine{\textcolor{comment}{//\ ...\ код\ 2}} +\DoxyCodeLine{} +\DoxyCodeLine{uint32\_t\ part2\ =\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga47a69851a2089140eac00cde18a12439}{BenchTime\_End}}(2,\ TIM4-\/>CNT);} +\DoxyCodeLine{uint32\_t\ total\ =\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga47a69851a2089140eac00cde18a12439}{BenchTime\_End}}(0,\ HAL\_GetTick);\ \textcolor{comment}{//\ общее\ время}} +\DoxyCodeLine{} +\DoxyCodeLine{\textcolor{comment}{//\ Статистика}} +\DoxyCodeLine{uint32\_t\ min\_time\ =\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga273d45255fe4403fc25648d60cca7705}{BenchTime\_GetMin}}(0);} +\DoxyCodeLine{uint32\_t\ max\_time\ =\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga07e27d7b169c9fa1abd57281bb4e374e}{BenchTime\_GetMax}}(0);} +\DoxyCodeLine{uint32\_t\ avg\_time\ =\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga24e2450d5ea921074ec5d7a1e4d56ba8}{BenchTime\_GetAverage}}(0);} +\DoxyCodeLine{uint32\_t\ count\ =\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gabd1301ca79a30c782970f89fd147df3a}{BenchTime\_GetCount}}(0);} + +\end{DoxyCode} + +\end{DoxyParagraph} + + +\label{doc-func-members} +\Hypertarget{group___b_e_n_c_h___t_i_m_e_doc-func-members} +\doxysubsubsubsection{Function Documentation} +\Hypertarget{group___b_e_n_c_h___t_i_m_e_gabb7a665a9603ea2e4dbc4432e8cb6054}\index{Time measurement@{Time measurement}!BenchTime\_Init@{BenchTime\_Init}} +\index{BenchTime\_Init@{BenchTime\_Init}!Time measurement@{Time measurement}} +\doxysubsubsubsubsection{\texorpdfstring{BenchTime\_Init()}{BenchTime\_Init()}} +{\footnotesize\ttfamily \label{group___b_e_n_c_h___t_i_m_e_gabb7a665a9603ea2e4dbc4432e8cb6054} +void Bench\+Time\+\_\+\+Init (\begin{DoxyParamCaption}\item[{void}]{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}} + + + +Инициализация системы измерения времени + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00111}{111}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + +\Hypertarget{group___b_e_n_c_h___t_i_m_e_gac65338df38129964ce3e9d9cb2fcb349}\index{Time measurement@{Time measurement}!BenchTime\_Start@{BenchTime\_Start}} +\index{BenchTime\_Start@{BenchTime\_Start}!Time measurement@{Time measurement}} +\doxysubsubsubsubsection{\texorpdfstring{BenchTime\_Start()}{BenchTime\_Start()}} +{\footnotesize\ttfamily \label{group___b_e_n_c_h___t_i_m_e_gac65338df38129964ce3e9d9cb2fcb349} +uint32\+\_\+t Bench\+Time\+\_\+\+Start (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{channel}{, }\item[{uint32\+\_\+t}]{ticks}{, }\item[{uint32\+\_\+t}]{tick\+\_\+period}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}} + + + +Начало измерения на указанном канале + + +\begin{DoxyParams}{Parameters} +{\em channel} & Номер канала (0..BENCH\+\_\+\+TIME\+\_\+\+MAX\+\_\+\+CHANNELS-\/1) \\ +\hline +{\em ticks} & Источник тиков (например\+: HAL\+\_\+\+Get\+Tick(), TIM2-\/\texorpdfstring{$>$}{>}CNT, DWT-\/\texorpdfstring{$>$}{>}CYCCNT) \\ +\hline +{\em tick\+\_\+period} & Период тиков для переполнения \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +1 -\/ успех, 0 -\/ ошибка +\end{DoxyReturn} + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00131}{131}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + +\Hypertarget{group___b_e_n_c_h___t_i_m_e_ga47a69851a2089140eac00cde18a12439}\index{Time measurement@{Time measurement}!BenchTime\_End@{BenchTime\_End}} +\index{BenchTime\_End@{BenchTime\_End}!Time measurement@{Time measurement}} +\doxysubsubsubsubsection{\texorpdfstring{BenchTime\_End()}{BenchTime\_End()}} +{\footnotesize\ttfamily \label{group___b_e_n_c_h___t_i_m_e_ga47a69851a2089140eac00cde18a12439} +uint32\+\_\+t Bench\+Time\+\_\+\+End (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{channel}{, }\item[{uint32\+\_\+t}]{ticks}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}} + + + +Окончание измерения на указанном канале + + +\begin{DoxyParams}{Parameters} +{\em channel} & Номер канала (0..BENCH\+\_\+\+TIME\+\_\+\+MAX\+\_\+\+CHANNELS-\/1) \\ +\hline +{\em ticks} & Источник тиков (должен быть тот же что в Start) \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +Измеренное время в тиках, 0 -\/ в случае ошибки +\end{DoxyReturn} + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00147}{147}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + +\Hypertarget{group___b_e_n_c_h___t_i_m_e_ga273d45255fe4403fc25648d60cca7705}\index{Time measurement@{Time measurement}!BenchTime\_GetMin@{BenchTime\_GetMin}} +\index{BenchTime\_GetMin@{BenchTime\_GetMin}!Time measurement@{Time measurement}} +\doxysubsubsubsubsection{\texorpdfstring{BenchTime\_GetMin()}{BenchTime\_GetMin()}} +{\footnotesize\ttfamily \label{group___b_e_n_c_h___t_i_m_e_ga273d45255fe4403fc25648d60cca7705} +uint32\+\_\+t Bench\+Time\+\_\+\+Get\+Min (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{channel}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}} + + + +Получение минимального времени измерения + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00189}{189}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + +\Hypertarget{group___b_e_n_c_h___t_i_m_e_ga07e27d7b169c9fa1abd57281bb4e374e}\index{Time measurement@{Time measurement}!BenchTime\_GetMax@{BenchTime\_GetMax}} +\index{BenchTime\_GetMax@{BenchTime\_GetMax}!Time measurement@{Time measurement}} +\doxysubsubsubsubsection{\texorpdfstring{BenchTime\_GetMax()}{BenchTime\_GetMax()}} +{\footnotesize\ttfamily \label{group___b_e_n_c_h___t_i_m_e_ga07e27d7b169c9fa1abd57281bb4e374e} +uint32\+\_\+t Bench\+Time\+\_\+\+Get\+Max (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{channel}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}} + + + +Получение максимального времени измерения + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00197}{197}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + +\Hypertarget{group___b_e_n_c_h___t_i_m_e_ga24e2450d5ea921074ec5d7a1e4d56ba8}\index{Time measurement@{Time measurement}!BenchTime\_GetAverage@{BenchTime\_GetAverage}} +\index{BenchTime\_GetAverage@{BenchTime\_GetAverage}!Time measurement@{Time measurement}} +\doxysubsubsubsubsection{\texorpdfstring{BenchTime\_GetAverage()}{BenchTime\_GetAverage()}} +{\footnotesize\ttfamily \label{group___b_e_n_c_h___t_i_m_e_ga24e2450d5ea921074ec5d7a1e4d56ba8} +uint32\+\_\+t Bench\+Time\+\_\+\+Get\+Average (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{channel}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}} + + + +Получение среднего времени измерения + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00205}{205}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + +\Hypertarget{group___b_e_n_c_h___t_i_m_e_gabd1301ca79a30c782970f89fd147df3a}\index{Time measurement@{Time measurement}!BenchTime\_GetCount@{BenchTime\_GetCount}} +\index{BenchTime\_GetCount@{BenchTime\_GetCount}!Time measurement@{Time measurement}} +\doxysubsubsubsubsection{\texorpdfstring{BenchTime\_GetCount()}{BenchTime\_GetCount()}} +{\footnotesize\ttfamily \label{group___b_e_n_c_h___t_i_m_e_gabd1301ca79a30c782970f89fd147df3a} +uint32\+\_\+t Bench\+Time\+\_\+\+Get\+Count (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{channel}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}} + + + +Получение количества измерений + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00215}{215}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + +\Hypertarget{group___b_e_n_c_h___t_i_m_e_gacf3a738d6423d71b238058a63558a4ed}\index{Time measurement@{Time measurement}!BenchTime\_GetLast@{BenchTime\_GetLast}} +\index{BenchTime\_GetLast@{BenchTime\_GetLast}!Time measurement@{Time measurement}} +\doxysubsubsubsubsection{\texorpdfstring{BenchTime\_GetLast()}{BenchTime\_GetLast()}} +{\footnotesize\ttfamily \label{group___b_e_n_c_h___t_i_m_e_gacf3a738d6423d71b238058a63558a4ed} +uint32\+\_\+t Bench\+Time\+\_\+\+Get\+Last (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{channel}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}} + + + +Получение последнего измеренного времени + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00223}{223}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + +\Hypertarget{group___b_e_n_c_h___t_i_m_e_ga31a6b2b181b92bcb15f46758f5d57f35}\index{Time measurement@{Time measurement}!BenchTime\_ResetStats@{BenchTime\_ResetStats}} +\index{BenchTime\_ResetStats@{BenchTime\_ResetStats}!Time measurement@{Time measurement}} +\doxysubsubsubsubsection{\texorpdfstring{BenchTime\_ResetStats()}{BenchTime\_ResetStats()}} +{\footnotesize\ttfamily \label{group___b_e_n_c_h___t_i_m_e_ga31a6b2b181b92bcb15f46758f5d57f35} +void Bench\+Time\+\_\+\+Reset\+Stats (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{channel}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}} + + + +Сброс статистики для канала + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00231}{231}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + + + +\label{doc-var-members} +\Hypertarget{group___b_e_n_c_h___t_i_m_e_doc-var-members} +\doxysubsubsubsection{Variable Documentation} +\Hypertarget{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}\index{Time measurement@{Time measurement}!hbt@{hbt}} +\index{hbt@{hbt}!Time measurement@{Time measurement}} +\doxysubsubsubsubsection{\texorpdfstring{hbt}{hbt}} +{\footnotesize\ttfamily \label{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d} +\mbox{\hyperlink{struct_bench_time__t}{Bench\+Time\+\_\+t}} hbt = \{0\}\hspace{0.3cm}{\ttfamily [static]}} + + + +Внутренний экземпляр + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00106}{106}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + diff --git a/Doc/latex/group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.pdf b/Doc/latex/group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.pdf index 2c8efa8866fbb3783deddc4b9ea4fb28c546f1b1..01802dba551bc91417e30cc4c025d84e0df64049 100644 GIT binary patch delta 497 zcmVeYG9*sj7eVh}CUw zQ=w%ShtStn6sf9ei-(64U&f-9AI+?|gWb1Jo5|ev&M~^gX!Sb}u-Tx2_E1f3D^-u! z0laV7)3|abEZ&q_wGHR|!ms?yEB?xjTNPaLpKevVzgeB^<-Ei&*C|GB4}cAScU(AR zX#Y!laXsKZg#>?DLX$x-m@l_9^;CR3%L^GQn^;PL_3{4+IBF>~H4xkri4Ztthm78{ z<0cqX8cs;HD%xCXSmdJ83fPJzD+-H~wT-#+ybdk3XiimbR!W!4WiPOn0{PnuD`By} z^Qj*(>VKf?AYtr14c<|@ye$(42HpG~S4(55Ydp0Nmlg055 delta 497 zcmV#`KZ|&1TWNp#?Ope3dgx2j{uvOX zy3*uai9QaY?;Wpl*|Y`^j|sk%CVrUAth9&icSu`^(hSZix}<0gI}fm0p@FumrZkOg zM{EbdkK$=uSrZl?Y9+ffW9-B(?8qAS%CucoOt9Z})!M)I59V}SVwmj|BiB2?hJRWv zEaKY#)}3q*xKDo|Lzd8_5IOVZnx=t@&qs0cTxAnWInW{gKLL9sL?Io)1Ca=URn}z; zo-H?#Q^}o>D_M1=P_QU@qa;wDWF_i^14hM82ISK9hIJH`zor2ujOQ$Es@wK%rc;aOykrVfrF4v z{*NfmJ5hUdrs-bsR-Z9fc^Tm+uzZPewXt4X@wX{O@wlD|SqLpVRSFHslyg3$+TNUg nuyCmR3B4wEsAt0sKg!y*Y%k2L<7?Sw%Kigu6y|EPdp0Nmtb+6K diff --git a/Doc/latex/group___d_e_l_a_y_s___d_e_f_i_n_e_s.pdf b/Doc/latex/group___d_e_l_a_y_s___d_e_f_i_n_e_s.pdf index 4b406c4b4d1fc1bf135564ef670968963d8a597e..cde64125b3a13c1ac63c6bfe59d72434bbe86584 100644 GIT binary patch delta 544 zcmV+*0^j}HZQO0J*)xAIuqD6MDWT9Lqm*vLbu#v06rtLhW0qJ(lFRb%C)u)b=&-R* zkM4AL&vPPxQ3NqYWCbCPQ3zoaBa%Y6ico+dN-zo_P6!GJq{d;r2LEtrIrtf?xIzHn zKh>pzUl0I>9A0{8E4oGlL3ekvi2J4yy5HV+ueyi6*3F**(XxLlbjBp_<1F;tu`&~N zqwV1lwl5*E7sN9w>0$F7(&oI-gL7hC5^D`R_pn}D!`iNzLf4`hu|4=d^2c#yOjvxV zr07~o>6u>WiPrR$Dzhpnr@zgrF@NP9_4%~4VWv|Xx!Hql_^08*Ag=xI-P!bD_c5fF zC2JB0o%wQ2(?Ea4mlHoDSJ}i;24sl;PryNPo(o6tK%|AhDC;u%PllV&spL+`q$s|1P3>G6{duI z#^EQ7m)B+5fq{=s+)?SNwr{+w*+%>|C1UdgHz5#=r*Tb`N37K;xI$3Z9@sx8uq{`f!ez5FN_Y-`>2^ zX?7BoYuQ|wS;yD1&6NEIcroU4ldd%&0XCD*HP|#DP}cMY0|Nled<+H(Wo~41baG{3 iZ3<;>WN%_>3UhQ}a&&ldWo8O7GdDOi3MC~)Peux@C<=4{ delta 516 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 B{6YW# diff --git a/Doc/latex/group___e_v_o_l_v_e___c_o_n_f_i_g.tex b/Doc/latex/group___e_v_o_l_v_e___c_o_n_f_i_g.tex deleted file mode 100644 index ababb3b..0000000 --- a/Doc/latex/group___e_v_o_l_v_e___c_o_n_f_i_g.tex +++ /dev/null @@ -1,76 +0,0 @@ -\doxysubsubsection{Evolve configs } -\hypertarget{group___e_v_o_l_v_e___c_o_n_f_i_g}{}\label{group___e_v_o_l_v_e___c_o_n_f_i_g}\index{Evolve configs@{Evolve configs}} - - -Конфигурация однослойного персептрона и алгоритма обучения - - -Collaboration diagram for Evolve configs\+: -\nopagebreak -\begin{figure}[H] -\begin{center} -\leavevmode -\includegraphics[width=246pt]{group___e_v_o_l_v_e___c_o_n_f_i_g} -\end{center} -\end{figure} -\doxysubsubsubsubsection*{Macros} -\begin{DoxyCompactItemize} -\item -\#define \mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga2cac097081444a7a9b040f4b11550e47}{ENABLE\+\_\+\+EVOLVE\+\_\+\+OPTIMIZATION}} -\begin{DoxyCompactList}\small\item\em Включить оптимизацию параметров \end{DoxyCompactList}\item -\#define \mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga80d6162495fc3776d8902610657d4fee}{EVOLVE\+\_\+\+MAX\+\_\+\+PARAMS}}~20 -\begin{DoxyCompactList}\small\item\em Максимальное количество параметров \end{DoxyCompactList}\item -\#define \mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga7c1396e5c95c766afccdb45cbfcf5971}{EVOLVE\+\_\+\+MAX\+\_\+\+CANDIDATES}}~100 -\begin{DoxyCompactList}\small\item\em Максимальное количество кандидатов для обучения \end{DoxyCompactList}\end{DoxyCompactItemize} - - -\doxysubsubsubsection{Detailed Description} -Конфигурация однослойного персептрона и алгоритма обучения - - - -\label{doc-define-members} -\Hypertarget{group___e_v_o_l_v_e___c_o_n_f_i_g_doc-define-members} -\doxysubsubsubsection{Macro Definition Documentation} -\Hypertarget{group___e_v_o_l_v_e___c_o_n_f_i_g_ga2cac097081444a7a9b040f4b11550e47}\index{Evolve configs@{Evolve configs}!ENABLE\_EVOLVE\_OPTIMIZATION@{ENABLE\_EVOLVE\_OPTIMIZATION}} -\index{ENABLE\_EVOLVE\_OPTIMIZATION@{ENABLE\_EVOLVE\_OPTIMIZATION}!Evolve configs@{Evolve configs}} -\doxysubsubsubsubsection{\texorpdfstring{ENABLE\_EVOLVE\_OPTIMIZATION}{ENABLE\_EVOLVE\_OPTIMIZATION}} -{\footnotesize\ttfamily \label{group___e_v_o_l_v_e___c_o_n_f_i_g_ga2cac097081444a7a9b040f4b11550e47} -\#define ENABLE\+\_\+\+EVOLVE\+\_\+\+OPTIMIZATION} - - - -Включить оптимизацию параметров - - - -Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00064}{64}} of file \mbox{\hyperlink{mylibs__config_8h_source}{mylibs\+\_\+config.\+h}}. - -\Hypertarget{group___e_v_o_l_v_e___c_o_n_f_i_g_ga80d6162495fc3776d8902610657d4fee}\index{Evolve configs@{Evolve configs}!EVOLVE\_MAX\_PARAMS@{EVOLVE\_MAX\_PARAMS}} -\index{EVOLVE\_MAX\_PARAMS@{EVOLVE\_MAX\_PARAMS}!Evolve configs@{Evolve configs}} -\doxysubsubsubsubsection{\texorpdfstring{EVOLVE\_MAX\_PARAMS}{EVOLVE\_MAX\_PARAMS}} -{\footnotesize\ttfamily \label{group___e_v_o_l_v_e___c_o_n_f_i_g_ga80d6162495fc3776d8902610657d4fee} -\#define EVOLVE\+\_\+\+MAX\+\_\+\+PARAMS~20} - - - -Максимальное количество параметров - - - -Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00065}{65}} of file \mbox{\hyperlink{mylibs__config_8h_source}{mylibs\+\_\+config.\+h}}. - -\Hypertarget{group___e_v_o_l_v_e___c_o_n_f_i_g_ga7c1396e5c95c766afccdb45cbfcf5971}\index{Evolve configs@{Evolve configs}!EVOLVE\_MAX\_CANDIDATES@{EVOLVE\_MAX\_CANDIDATES}} -\index{EVOLVE\_MAX\_CANDIDATES@{EVOLVE\_MAX\_CANDIDATES}!Evolve configs@{Evolve configs}} -\doxysubsubsubsubsection{\texorpdfstring{EVOLVE\_MAX\_CANDIDATES}{EVOLVE\_MAX\_CANDIDATES}} -{\footnotesize\ttfamily \label{group___e_v_o_l_v_e___c_o_n_f_i_g_ga7c1396e5c95c766afccdb45cbfcf5971} -\#define EVOLVE\+\_\+\+MAX\+\_\+\+CANDIDATES~100} - - - -Максимальное количество кандидатов для обучения - - - -Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00066}{66}} of file \mbox{\hyperlink{mylibs__config_8h_source}{mylibs\+\_\+config.\+h}}. - diff --git a/Doc/latex/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.md5 b/Doc/latex/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.md5 deleted file mode 100644 index b136329..0000000 --- a/Doc/latex/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.md5 +++ /dev/null @@ -1 +0,0 @@ -222e7e00155a235ae6b55b58801480e4 \ No newline at end of file diff --git a/Doc/latex/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.pdf b/Doc/latex/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.pdf deleted file mode 100644 index 86f3e87fefb43c2b0f8fcaeb314b4824d5afe0d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14651 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 diff --git a/Doc/latex/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.tex b/Doc/latex/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.tex deleted file mode 100644 index fc8f22f..0000000 --- a/Doc/latex/group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r.tex +++ /dev/null @@ -1,253 +0,0 @@ -\doxysubsubsection{Evolve optimizer } -\hypertarget{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r}{}\label{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r}\index{Evolve optimizer@{Evolve optimizer}} - - -Библиотека для эволюционного подбора параметров - - -Collaboration diagram for Evolve optimizer\+: -\nopagebreak -\begin{figure}[H] -\begin{center} -\leavevmode -\includegraphics[width=280pt]{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r} -\end{center} -\end{figure} -\doxysubsubsubsubsection*{Classes} -\begin{DoxyCompactItemize} -\item -struct \mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}} -\begin{DoxyCompactList}\small\item\em Структура эволюционного оптимизатора \end{DoxyCompactList}\end{DoxyCompactItemize} -\doxysubsubsubsubsection*{Macros} -\begin{DoxyCompactItemize} -\item -\#define \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e}{PARAM\+\_\+\+SCALE}}(x, min\+\_\+val, max\+\_\+val) -\begin{DoxyCompactList}\small\item\em Линейное масштабирование x из диапазона \mbox{[}min\+\_\+val, max\+\_\+val\mbox{]} в диапазон \mbox{[}0, 1) \end{DoxyCompactList}\item -\#define \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gaa1d5510fe5f0bd989473f3ebe324bde3}{PARAM\+\_\+\+UNSCALE}}(val, min\+\_\+val, max\+\_\+val) -\begin{DoxyCompactList}\small\item\em Обратное линейное масштабирование значения из \mbox{[}0, 1) в диапазон \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_ga2f2b1be34ad4eb1bf3267237200cd6c6}{EVOLVE\+\_\+\+MUTATION\+\_\+\+MIN\+\_\+\+PCT}}~10 -\begin{DoxyCompactList}\small\item\em Минимальная мутация (в процентах от Loss) \end{DoxyCompactList}\item -\#define \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga861c1c6a503c21441abcec0d57b848bc}{EVOLVE\+\_\+\+MUTATION\+\_\+\+MAX\+\_\+\+PCT}}~100 -\begin{DoxyCompactList}\small\item\em Максимальная мутация (в процентах от Loss) \end{DoxyCompactList}\item -\#define \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga38607e23d9234524bc7de5869b15b8eb}{ELOVLE\+\_\+\+N\+\_\+\+ELITE\+\_\+\+CANDIDATE}}~2 -\begin{DoxyCompactList}\small\item\em Количество кандидатов, которые проходят в поколение без изменений (по умолчанию 2) \end{DoxyCompactList}\end{DoxyCompactItemize} -\doxysubsubsubsubsection*{Functions} -\begin{DoxyCompactItemize} -\item -\+\_\+\+\_\+\+STATIC\+\_\+\+INLINE int \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga4e3ea118b5b9068619c57724a925ba21}{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, float mutation\+\_\+amp, float \texorpdfstring{$\ast$}{*}start\+\_\+params) -\begin{DoxyCompactList}\small\item\em Инициализация эволюционного оптимизатора. \end{DoxyCompactList}\item -\+\_\+\+\_\+\+STATIC\+\_\+\+INLINE int \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gaef44a1f3298514569cc2b396a92101ef}{Evolve\+Optimizer\+\_\+\+Step}} (\mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}} \texorpdfstring{$\ast$}{*}opt, float \texorpdfstring{$\ast$}{*}params, float loss) -\begin{DoxyCompactList}\small\item\em Один шаг эволюционного оптимизатора. \end{DoxyCompactList}\end{DoxyCompactItemize} - - -\doxysubsubsubsection{Detailed Description} -Библиотека для эволюционного подбора параметров - -Поддерживает\+: -\begin{DoxyItemize} -\item Любое количество параметров -\item Генерацию новых параметров на основе лучших кандидатов -\item Мутацию для поиска оптимальных параметров -\item Несколько независимых оптимизаторов в одной программе -\end{DoxyItemize} - -Параметры для конфигурации\+: -\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} -\/ Максимальное количество кандидатов для обучения -\item (опционально) \doxylink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga2f2b1be34ad4eb1bf3267237200cd6c6}{EVOLVE\+\_\+\+MUTATION\+\_\+\+MIN\+\_\+\+PCT} -\/ Минимальная мутация в процентах от Loss (по умолчанию 10\%) -\item (опционально) \doxylink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga861c1c6a503c21441abcec0d57b848bc}{EVOLVE\+\_\+\+MUTATION\+\_\+\+MAX\+\_\+\+PCT} -\/ Максимальная мутация в процентах от Loss (по умолчанию 100\%) -\item (опционально) \doxylink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga38607e23d9234524bc7de5869b15b8eb}{ELOVLE\+\_\+\+N\+\_\+\+ELITE\+\_\+\+CANDIDATE} -\/ Количество кандидатов, которые проходят в поколение без изменений -\end{DoxyItemize} - -\begin{DoxyParagraph}{Пример использования\+:} - -\begin{DoxyCode}{0} -\DoxyCodeLine{\textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{evolve__optimizer_8h}{evolve\_optimizer.h}}"{}}} -\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\ MUTATION\ \ \ \ \ \ \ \ 0.1f}} -\DoxyCodeLine{\textcolor{keywordtype}{float}\ params[N\_PARAMS];} -\DoxyCodeLine{\mbox{\hyperlink{struct_evolve_optimizer__t}{EvolveOptimizer\_t}}\ optimizer;} -\DoxyCodeLine{} -\DoxyCodeLine{\textcolor{comment}{//\ Формирование\ параметров}} -\DoxyCodeLine{uint16\_t\ \ param\_u16\ =\ 800;} -\DoxyCodeLine{\textcolor{keywordtype}{float}\ \ \ \ \ param\_f\ \ \ =\ 0.01f;} -\DoxyCodeLine{uint8\_t\ \ \ param\_u8\ \ =\ 40;} -\DoxyCodeLine{int16\_t\ \ \ param\_i16\ =\ 1600;} -\DoxyCodeLine{params[0]\ =\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e}{PARAM\_SCALE}}(param\_u16,\ \ 0.0f,\ \ \ 1000.0f);} -\DoxyCodeLine{params[1]\ =\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e}{PARAM\_SCALE}}(param\_f,\ \ \ \ 0.001f,\ 0.1f);} -\DoxyCodeLine{params[2]\ =\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e}{PARAM\_SCALE}}(param\_u8,\ \ \ 10.0f,\ \ 100.0f);} -\DoxyCodeLine{params[3]\ =\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e}{PARAM\_SCALE}}(param\_i16,\ \ 500.0f,\ 5000.0f);} -\DoxyCodeLine{} -\DoxyCodeLine{\textcolor{comment}{//\ Инициалиазция}} -\DoxyCodeLine{\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga4e3ea118b5b9068619c57724a925ba21}{EvolveOptimizer\_Init}}(\&optimizer,\ N\_PARAMS,\ N\_CANDIDATES,\ N\_BEST,\ MUTATION,\ params);} -\DoxyCodeLine{} -\DoxyCodeLine{\textcolor{comment}{//\ Шаг\ эволюции}} -\DoxyCodeLine{\textcolor{keywordtype}{float}\ loss\ =\ calc\_loss();\ \textcolor{comment}{//\ расчет\ эффективности\ параметров\ (от\ 0\ до\ 1)}} -\DoxyCodeLine{\mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gaef44a1f3298514569cc2b396a92101ef}{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_gaa1d5510fe5f0bd989473f3ebe324bde3}{PARAM\_UNSCALE}}(params[0],\ \ 0.0f,\ \ \ 1000.0f);} -\DoxyCodeLine{param\_f\ \ \ =\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gaa1d5510fe5f0bd989473f3ebe324bde3}{PARAM\_UNSCALE}}(params[1],\ \ 0.001f,\ 0.1f);} -\DoxyCodeLine{param\_u8\ \ =\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gaa1d5510fe5f0bd989473f3ebe324bde3}{PARAM\_UNSCALE}}(params[2],\ \ 10.0f,\ \ 100.0f);} -\DoxyCodeLine{param\_i16\ =\ \mbox{\hyperlink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gaa1d5510fe5f0bd989473f3ebe324bde3}{PARAM\_UNSCALE}}(params[3],\ \ 500.0f,\ 5000.0f);} - -\end{DoxyCode} - -\end{DoxyParagraph} - - -\label{doc-define-members} -\Hypertarget{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_doc-define-members} -\doxysubsubsubsection{Macro Definition Documentation} -\Hypertarget{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e}\index{Evolve optimizer@{Evolve optimizer}!PARAM\_SCALE@{PARAM\_SCALE}} -\index{PARAM\_SCALE@{PARAM\_SCALE}!Evolve optimizer@{Evolve optimizer}} -\doxysubsubsubsubsection{\texorpdfstring{PARAM\_SCALE}{PARAM\_SCALE}} -{\footnotesize\ttfamily \label{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e} -\#define PARAM\+\_\+\+SCALE(\begin{DoxyParamCaption}\item[{}]{x}{, }\item[{}]{min\+\_\+val}{, }\item[{}]{max\+\_\+val}{}\end{DoxyParamCaption})} - -{\bfseries Value\+:} -\begin{DoxyCode}{0} -\DoxyCodeLine{(((float)(x)\ -\/\ (float)(min\_val))\ /\ ((float)(max\_val)\ -\/\ (float)(min\_val)))} - -\end{DoxyCode} - - -Линейное масштабирование x из диапазона \mbox{[}min\+\_\+val, max\+\_\+val\mbox{]} в диапазон \mbox{[}0, 1) - - - -Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00073}{73}} 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_gaa1d5510fe5f0bd989473f3ebe324bde3}\index{Evolve optimizer@{Evolve optimizer}!PARAM\_UNSCALE@{PARAM\_UNSCALE}} -\index{PARAM\_UNSCALE@{PARAM\_UNSCALE}!Evolve optimizer@{Evolve optimizer}} -\doxysubsubsubsubsection{\texorpdfstring{PARAM\_UNSCALE}{PARAM\_UNSCALE}} -{\footnotesize\ttfamily \label{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_gaa1d5510fe5f0bd989473f3ebe324bde3} -\#define PARAM\+\_\+\+UNSCALE(\begin{DoxyParamCaption}\item[{}]{val}{, }\item[{}]{min\+\_\+val}{, }\item[{}]{max\+\_\+val}{}\end{DoxyParamCaption})} - -{\bfseries Value\+:} -\begin{DoxyCode}{0} -\DoxyCodeLine{(((float)(val))\ *\ ((float)(max\_val)\ -\/\ (float)(min\_val))\ +\ (float)(min\_val))} - -\end{DoxyCode} - - -Обратное линейное масштабирование значения из \mbox{[}0, 1) в диапазон \mbox{[}min\+\_\+val, max\+\_\+val\mbox{]}. - - - -Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00079}{79}} 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_ga2f2b1be34ad4eb1bf3267237200cd6c6}\index{Evolve optimizer@{Evolve optimizer}!EVOLVE\_MUTATION\_MIN\_PCT@{EVOLVE\_MUTATION\_MIN\_PCT}} -\index{EVOLVE\_MUTATION\_MIN\_PCT@{EVOLVE\_MUTATION\_MIN\_PCT}!Evolve optimizer@{Evolve optimizer}} -\doxysubsubsubsubsection{\texorpdfstring{EVOLVE\_MUTATION\_MIN\_PCT}{EVOLVE\_MUTATION\_MIN\_PCT}} -{\footnotesize\ttfamily \label{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga2f2b1be34ad4eb1bf3267237200cd6c6} -\#define EVOLVE\+\_\+\+MUTATION\+\_\+\+MIN\+\_\+\+PCT~10} - - - -Минимальная мутация (в процентах от Loss) - - - -Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00089}{89}} 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_ga861c1c6a503c21441abcec0d57b848bc}\index{Evolve optimizer@{Evolve optimizer}!EVOLVE\_MUTATION\_MAX\_PCT@{EVOLVE\_MUTATION\_MAX\_PCT}} -\index{EVOLVE\_MUTATION\_MAX\_PCT@{EVOLVE\_MUTATION\_MAX\_PCT}!Evolve optimizer@{Evolve optimizer}} -\doxysubsubsubsubsection{\texorpdfstring{EVOLVE\_MUTATION\_MAX\_PCT}{EVOLVE\_MUTATION\_MAX\_PCT}} -{\footnotesize\ttfamily \label{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga861c1c6a503c21441abcec0d57b848bc} -\#define EVOLVE\+\_\+\+MUTATION\+\_\+\+MAX\+\_\+\+PCT~100} - - - -Максимальная мутация (в процентах от Loss) - - - -Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00092}{92}} 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_ga38607e23d9234524bc7de5869b15b8eb}\index{Evolve optimizer@{Evolve optimizer}!ELOVLE\_N\_ELITE\_CANDIDATE@{ELOVLE\_N\_ELITE\_CANDIDATE}} -\index{ELOVLE\_N\_ELITE\_CANDIDATE@{ELOVLE\_N\_ELITE\_CANDIDATE}!Evolve optimizer@{Evolve optimizer}} -\doxysubsubsubsubsection{\texorpdfstring{ELOVLE\_N\_ELITE\_CANDIDATE}{ELOVLE\_N\_ELITE\_CANDIDATE}} -{\footnotesize\ttfamily \label{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r_ga38607e23d9234524bc7de5869b15b8eb} -\#define ELOVLE\+\_\+\+N\+\_\+\+ELITE\+\_\+\+CANDIDATE~2} - - - -Количество кандидатов, которые проходят в поколение без изменений (по умолчанию 2) - - - -Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00095}{95}} 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_ga4e3ea118b5b9068619c57724a925ba21}\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_ga4e3ea118b5b9068619c57724a925ba21} -\+\_\+\+\_\+\+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[{float}]{mutation\+\_\+amp}{, }\item[{float \texorpdfstring{$\ast$}{*}}]{start\+\_\+params}{}\end{DoxyParamCaption})} - - - -Инициализация эволюционного оптимизатора. - - -\begin{DoxyParams}{Parameters} -{\em opt} & Указатель на структуру оптимизатора \\ -\hline -{\em n\+\_\+params} & Количество параметров в одном кандидате \\ -\hline -{\em n\+\_\+cand} & Количество кандидатов \\ -\hline -{\em n\+\_\+best} & Количество лучших, усредняемых \\ -\hline -{\em mutation\+\_\+amp} & Амплитуда мутации (в диапазоне 0.\+0–1.0) \\ -\hline -{\em start\+\_\+params} & Начальные параметры (в диапазоне 0.\+0–1.0) \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -0 — если окей, -\/1 — если ошибка -\end{DoxyReturn} - - -Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00155}{155}} 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_gaef44a1f3298514569cc2b396a92101ef}\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_gaef44a1f3298514569cc2b396a92101ef} -\+\_\+\+\_\+\+STATIC\+\_\+\+INLINE int Evolve\+Optimizer\+\_\+\+Step (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_evolve_optimizer__t}{Evolve\+Optimizer\+\_\+t}} \texorpdfstring{$\ast$}{*}}]{opt}{, }\item[{float \texorpdfstring{$\ast$}{*}}]{params}{, }\item[{float}]{loss}{}\end{DoxyParamCaption})} - - - -Один шаг эволюционного оптимизатора. - - -\begin{DoxyParams}{Parameters} -{\em opt} & Указатель на структуру оптимизатора \\ -\hline -{\em params} & Массив параметров, которые будут обновлены (на выходе — новые параметры) \\ -\hline -{\em loss} & Loss текущего кандидата \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -0 — если окей, -\/1 — если ошибка -\end{DoxyReturn} -Сохраняет loss текущего кандидата и формирует параметры следующего кандидата. Если накоплено n\+\_\+cand кандидатов, генерируется новое поколение. Новое поколение формируется случайным выбором из n\+\_\+best лучших с добавлением мутации. - -На выходе params содержит параметры следующего кандидата для измерений. \begin{DoxyNote}{Note} -Функция использует глобальную внутреннюю переменную для сортировки. Надо убедится что только один экземпляр функции запущен в момент времени -\end{DoxyNote} - - -Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00225}{225}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}. - diff --git a/Doc/latex/group___g_e_n___c_o_n_f_i_g.md5 b/Doc/latex/group___g_e_n___c_o_n_f_i_g.md5 new file mode 100644 index 0000000..d496a11 --- /dev/null +++ b/Doc/latex/group___g_e_n___c_o_n_f_i_g.md5 @@ -0,0 +1 @@ +5f0295c96943053471a3de806e4b1afd \ No newline at end of file diff --git a/Doc/latex/group___g_e_n___c_o_n_f_i_g.pdf b/Doc/latex/group___g_e_n___c_o_n_f_i_g.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7114735c03030da120e53bec94fba206d0bde3c1 GIT binary patch literal 12917 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
      _lrqLr)2L)2LegW+@N8G8oR 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 literal 0 HcmV?d00001 diff --git a/Doc/latex/group___g_e_n___o_p_t_i_m_i_z_e_r.tex b/Doc/latex/group___g_e_n___o_p_t_i_m_i_z_e_r.tex new file mode 100644 index 0000000..7551dba --- /dev/null +++ b/Doc/latex/group___g_e_n___o_p_t_i_m_i_z_e_r.tex @@ -0,0 +1,253 @@ +\doxysubsubsection{Genetic optimizer } +\hypertarget{group___g_e_n___o_p_t_i_m_i_z_e_r}{}\label{group___g_e_n___o_p_t_i_m_i_z_e_r}\index{Genetic optimizer@{Genetic optimizer}} + + +Библиотека для эволюционного подбора параметров + + +Collaboration diagram for Genetic optimizer\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=284pt]{group___g_e_n___o_p_t_i_m_i_z_e_r} +\end{center} +\end{figure} +\doxysubsubsubsubsection*{Classes} +\begin{DoxyCompactItemize} +\item +struct \mbox{\hyperlink{struct_gen_optimizer__t}{Gen\+Optimizer\+\_\+t}} +\begin{DoxyCompactList}\small\item\em Структура эволюционного оптимизатора \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsubsubsubsection*{Macros} +\begin{DoxyCompactItemize} +\item +\#define \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e}{PARAM\+\_\+\+SCALE}}(x, min\+\_\+val, max\+\_\+val) +\begin{DoxyCompactList}\small\item\em Линейное масштабирование x из диапазона \mbox{[}min\+\_\+val, max\+\_\+val\mbox{]} в диапазон \mbox{[}0, 1) \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa1d5510fe5f0bd989473f3ebe324bde3}{PARAM\+\_\+\+UNSCALE}}(val, min\+\_\+val, max\+\_\+val) +\begin{DoxyCompactList}\small\item\em Обратное линейное масштабирование значения из \mbox{[}0, 1) в диапазон \mbox{[}min\+\_\+val, max\+\_\+val\mbox{]}. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga3db7bdf57549722427e1e72dcaa87068}{GEN\+\_\+\+MUTATION\+\_\+\+MIN\+\_\+\+PCT}}~10 +\begin{DoxyCompactList}\small\item\em Минимальная мутация (в процентах от Loss) \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga48dca8f0a0c9b96d02236ef76ac827fd}{GEN\+\_\+\+MUTATION\+\_\+\+MAX\+\_\+\+PCT}}~100 +\begin{DoxyCompactList}\small\item\em Максимальная мутация (в процентах от Loss) \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga38607e23d9234524bc7de5869b15b8eb}{ELOVLE\+\_\+\+N\+\_\+\+ELITE\+\_\+\+CANDIDATE}}~2 +\begin{DoxyCompactList}\small\item\em Количество кандидатов, которые проходят в поколение без изменений (по умолчанию 2) \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsubsubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +static int \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga2db1df46b4082ad9280ef4344fdf4e8a}{Gen\+Optimizer\+\_\+\+Init}} (\mbox{\hyperlink{struct_gen_optimizer__t}{Gen\+Optimizer\+\_\+t}} \texorpdfstring{$\ast$}{*}opt, uint16\+\_\+t n\+\_\+params, uint16\+\_\+t n\+\_\+cand, uint16\+\_\+t n\+\_\+best, float mutation\+\_\+amp, float \texorpdfstring{$\ast$}{*}start\+\_\+params) +\begin{DoxyCompactList}\small\item\em Инициализация эволюционного оптимизатора. \end{DoxyCompactList}\item +static int \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa9a4c4f43f7beb926c85bd4817ebd628}{Gen\+Optimizer\+\_\+\+Step}} (\mbox{\hyperlink{struct_gen_optimizer__t}{Gen\+Optimizer\+\_\+t}} \texorpdfstring{$\ast$}{*}opt, float \texorpdfstring{$\ast$}{*}params, float loss) +\begin{DoxyCompactList}\small\item\em Один шаг эволюционного оптимизатора. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsubsubsection{Detailed Description} +Библиотека для эволюционного подбора параметров + +Поддерживает\+: +\begin{DoxyItemize} +\item Любое количество параметров +\item Генерацию новых параметров на основе лучших кандидатов +\item Мутацию для поиска оптимальных параметров +\item Несколько независимых оптимизаторов в одной программе +\end{DoxyItemize} + +Параметры для конфигурации\+: +\begin{DoxyItemize} +\item \doxylink{group___g_e_n___c_o_n_f_i_g_gae6d1db3c0b21f67cb0db2673d207b62c}{GEN\+\_\+\+OPTIMIZATION\+\_\+\+ENABLE} -\/ Включить оптимизацию параметров Если библиотека отключена \doxylink{group___g_e_n___c_o_n_f_i_g_gae6d1db3c0b21f67cb0db2673d207b62c}{GEN\+\_\+\+OPTIMIZATION\+\_\+\+ENABLE}, то вставляются заглушки, никак не влияющие на параметры и остальную программу +\item \doxylink{group___g_e_n___c_o_n_f_i_g_ga8daf4b266a95353d580bd7946f47c0ab}{GEN\+\_\+\+MAX\+\_\+\+PARAMS} -\/ Максимальное количество параметров +\item \doxylink{group___g_e_n___c_o_n_f_i_g_ga201cffde04ebc6540869c74bd1dae869}{GEN\+\_\+\+MAX\+\_\+\+CANDIDATES} -\/ Максимальное количество кандидатов для обучения +\item (опционально) \doxylink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga3db7bdf57549722427e1e72dcaa87068}{GEN\+\_\+\+MUTATION\+\_\+\+MIN\+\_\+\+PCT} -\/ Минимальная мутация в процентах от Loss (по умолчанию 10\%) +\item (опционально) \doxylink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga48dca8f0a0c9b96d02236ef76ac827fd}{GEN\+\_\+\+MUTATION\+\_\+\+MAX\+\_\+\+PCT} -\/ Максимальная мутация в процентах от Loss (по умолчанию 100\%) +\item (опционально) \doxylink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga38607e23d9234524bc7de5869b15b8eb}{ELOVLE\+\_\+\+N\+\_\+\+ELITE\+\_\+\+CANDIDATE} -\/ Количество кандидатов, которые проходят в поколение без изменений +\end{DoxyItemize} + +\begin{DoxyParagraph}{Пример использования\+:} + +\begin{DoxyCode}{0} +\DoxyCodeLine{\textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{gen__optimizer_8h}{gen\_optimizer.h}}"{}}} +\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\ MUTATION\ \ \ \ \ \ \ \ 0.1f}} +\DoxyCodeLine{\textcolor{keywordtype}{float}\ params[N\_PARAMS];} +\DoxyCodeLine{\mbox{\hyperlink{struct_gen_optimizer__t}{GenOptimizer\_t}}\ optimizer;} +\DoxyCodeLine{} +\DoxyCodeLine{\textcolor{comment}{//\ Формирование\ параметров}} +\DoxyCodeLine{uint16\_t\ \ param\_u16\ =\ 800;} +\DoxyCodeLine{\textcolor{keywordtype}{float}\ \ \ \ \ param\_f\ \ \ =\ 0.01f;} +\DoxyCodeLine{uint8\_t\ \ \ param\_u8\ \ =\ 40;} +\DoxyCodeLine{int16\_t\ \ \ param\_i16\ =\ 1600;} +\DoxyCodeLine{params[0]\ =\ \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e}{PARAM\_SCALE}}(param\_u16,\ \ 0.0f,\ \ \ 1000.0f);} +\DoxyCodeLine{params[1]\ =\ \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e}{PARAM\_SCALE}}(param\_f,\ \ \ \ 0.001f,\ 0.1f);} +\DoxyCodeLine{params[2]\ =\ \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e}{PARAM\_SCALE}}(param\_u8,\ \ \ 10.0f,\ \ 100.0f);} +\DoxyCodeLine{params[3]\ =\ \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e}{PARAM\_SCALE}}(param\_i16,\ \ 500.0f,\ 5000.0f);} +\DoxyCodeLine{} +\DoxyCodeLine{\textcolor{comment}{//\ Инициалиазция}} +\DoxyCodeLine{\mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga2db1df46b4082ad9280ef4344fdf4e8a}{GenOptimizer\_Init}}(\&optimizer,\ N\_PARAMS,\ N\_CANDIDATES,\ N\_BEST,\ MUTATION,\ params);} +\DoxyCodeLine{} +\DoxyCodeLine{\textcolor{comment}{//\ Шаг\ эволюции}} +\DoxyCodeLine{\textcolor{keywordtype}{float}\ loss\ =\ calc\_loss();\ \textcolor{comment}{//\ расчет\ эффективности\ параметров\ (от\ 0\ до\ 1)}} +\DoxyCodeLine{\mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa9a4c4f43f7beb926c85bd4817ebd628}{GenOptimizer\_Step}}(\&optimizer,\ params,\ loss);} +\DoxyCodeLine{} +\DoxyCodeLine{\textcolor{comment}{//\ Взятие\ следующих\ для\ эволюции\ параметров}} +\DoxyCodeLine{param\_u16\ =\ \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa1d5510fe5f0bd989473f3ebe324bde3}{PARAM\_UNSCALE}}(params[0],\ \ 0.0f,\ \ \ 1000.0f);} +\DoxyCodeLine{param\_f\ \ \ =\ \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa1d5510fe5f0bd989473f3ebe324bde3}{PARAM\_UNSCALE}}(params[1],\ \ 0.001f,\ 0.1f);} +\DoxyCodeLine{param\_u8\ \ =\ \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa1d5510fe5f0bd989473f3ebe324bde3}{PARAM\_UNSCALE}}(params[2],\ \ 10.0f,\ \ 100.0f);} +\DoxyCodeLine{param\_i16\ =\ \mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa1d5510fe5f0bd989473f3ebe324bde3}{PARAM\_UNSCALE}}(params[3],\ \ 500.0f,\ 5000.0f);} + +\end{DoxyCode} + +\end{DoxyParagraph} + + +\label{doc-define-members} +\Hypertarget{group___g_e_n___o_p_t_i_m_i_z_e_r_doc-define-members} +\doxysubsubsubsection{Macro Definition Documentation} +\Hypertarget{group___g_e_n___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e}\index{Genetic optimizer@{Genetic optimizer}!PARAM\_SCALE@{PARAM\_SCALE}} +\index{PARAM\_SCALE@{PARAM\_SCALE}!Genetic optimizer@{Genetic optimizer}} +\doxysubsubsubsubsection{\texorpdfstring{PARAM\_SCALE}{PARAM\_SCALE}} +{\footnotesize\ttfamily \label{group___g_e_n___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e} +\#define PARAM\+\_\+\+SCALE(\begin{DoxyParamCaption}\item[{}]{x}{, }\item[{}]{min\+\_\+val}{, }\item[{}]{max\+\_\+val}{}\end{DoxyParamCaption})} + +{\bfseries Value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{(((float)(x)\ -\/\ (float)(min\_val))\ /\ ((float)(max\_val)\ -\/\ (float)(min\_val)))} + +\end{DoxyCode} + + +Линейное масштабирование x из диапазона \mbox{[}min\+\_\+val, max\+\_\+val\mbox{]} в диапазон \mbox{[}0, 1) + + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00073}{73}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + +\Hypertarget{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa1d5510fe5f0bd989473f3ebe324bde3}\index{Genetic optimizer@{Genetic optimizer}!PARAM\_UNSCALE@{PARAM\_UNSCALE}} +\index{PARAM\_UNSCALE@{PARAM\_UNSCALE}!Genetic optimizer@{Genetic optimizer}} +\doxysubsubsubsubsection{\texorpdfstring{PARAM\_UNSCALE}{PARAM\_UNSCALE}} +{\footnotesize\ttfamily \label{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa1d5510fe5f0bd989473f3ebe324bde3} +\#define PARAM\+\_\+\+UNSCALE(\begin{DoxyParamCaption}\item[{}]{val}{, }\item[{}]{min\+\_\+val}{, }\item[{}]{max\+\_\+val}{}\end{DoxyParamCaption})} + +{\bfseries Value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{(((float)(val))\ *\ ((float)(max\_val)\ -\/\ (float)(min\_val))\ +\ (float)(min\_val))} + +\end{DoxyCode} + + +Обратное линейное масштабирование значения из \mbox{[}0, 1) в диапазон \mbox{[}min\+\_\+val, max\+\_\+val\mbox{]}. + + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00079}{79}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + +\Hypertarget{group___g_e_n___o_p_t_i_m_i_z_e_r_ga3db7bdf57549722427e1e72dcaa87068}\index{Genetic optimizer@{Genetic optimizer}!GEN\_MUTATION\_MIN\_PCT@{GEN\_MUTATION\_MIN\_PCT}} +\index{GEN\_MUTATION\_MIN\_PCT@{GEN\_MUTATION\_MIN\_PCT}!Genetic optimizer@{Genetic optimizer}} +\doxysubsubsubsubsection{\texorpdfstring{GEN\_MUTATION\_MIN\_PCT}{GEN\_MUTATION\_MIN\_PCT}} +{\footnotesize\ttfamily \label{group___g_e_n___o_p_t_i_m_i_z_e_r_ga3db7bdf57549722427e1e72dcaa87068} +\#define GEN\+\_\+\+MUTATION\+\_\+\+MIN\+\_\+\+PCT~10} + + + +Минимальная мутация (в процентах от Loss) + + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00089}{89}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + +\Hypertarget{group___g_e_n___o_p_t_i_m_i_z_e_r_ga48dca8f0a0c9b96d02236ef76ac827fd}\index{Genetic optimizer@{Genetic optimizer}!GEN\_MUTATION\_MAX\_PCT@{GEN\_MUTATION\_MAX\_PCT}} +\index{GEN\_MUTATION\_MAX\_PCT@{GEN\_MUTATION\_MAX\_PCT}!Genetic optimizer@{Genetic optimizer}} +\doxysubsubsubsubsection{\texorpdfstring{GEN\_MUTATION\_MAX\_PCT}{GEN\_MUTATION\_MAX\_PCT}} +{\footnotesize\ttfamily \label{group___g_e_n___o_p_t_i_m_i_z_e_r_ga48dca8f0a0c9b96d02236ef76ac827fd} +\#define GEN\+\_\+\+MUTATION\+\_\+\+MAX\+\_\+\+PCT~100} + + + +Максимальная мутация (в процентах от Loss) + + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00092}{92}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + +\Hypertarget{group___g_e_n___o_p_t_i_m_i_z_e_r_ga38607e23d9234524bc7de5869b15b8eb}\index{Genetic optimizer@{Genetic optimizer}!ELOVLE\_N\_ELITE\_CANDIDATE@{ELOVLE\_N\_ELITE\_CANDIDATE}} +\index{ELOVLE\_N\_ELITE\_CANDIDATE@{ELOVLE\_N\_ELITE\_CANDIDATE}!Genetic optimizer@{Genetic optimizer}} +\doxysubsubsubsubsection{\texorpdfstring{ELOVLE\_N\_ELITE\_CANDIDATE}{ELOVLE\_N\_ELITE\_CANDIDATE}} +{\footnotesize\ttfamily \label{group___g_e_n___o_p_t_i_m_i_z_e_r_ga38607e23d9234524bc7de5869b15b8eb} +\#define ELOVLE\+\_\+\+N\+\_\+\+ELITE\+\_\+\+CANDIDATE~2} + + + +Количество кандидатов, которые проходят в поколение без изменений (по умолчанию 2) + + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00095}{95}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + + + +\label{doc-func-members} +\Hypertarget{group___g_e_n___o_p_t_i_m_i_z_e_r_doc-func-members} +\doxysubsubsubsection{Function Documentation} +\Hypertarget{group___g_e_n___o_p_t_i_m_i_z_e_r_ga2db1df46b4082ad9280ef4344fdf4e8a}\index{Genetic optimizer@{Genetic optimizer}!GenOptimizer\_Init@{GenOptimizer\_Init}} +\index{GenOptimizer\_Init@{GenOptimizer\_Init}!Genetic optimizer@{Genetic optimizer}} +\doxysubsubsubsubsection{\texorpdfstring{GenOptimizer\_Init()}{GenOptimizer\_Init()}} +{\footnotesize\ttfamily \label{group___g_e_n___o_p_t_i_m_i_z_e_r_ga2db1df46b4082ad9280ef4344fdf4e8a} +int Gen\+Optimizer\+\_\+\+Init (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_gen_optimizer__t}{Gen\+Optimizer\+\_\+t}} \texorpdfstring{$\ast$}{*}}]{opt}{, }\item[{uint16\+\_\+t}]{n\+\_\+params}{, }\item[{uint16\+\_\+t}]{n\+\_\+cand}{, }\item[{uint16\+\_\+t}]{n\+\_\+best}{, }\item[{float}]{mutation\+\_\+amp}{, }\item[{float \texorpdfstring{$\ast$}{*}}]{start\+\_\+params}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}} + + + +Инициализация эволюционного оптимизатора. + + +\begin{DoxyParams}{Parameters} +{\em opt} & Указатель на структуру оптимизатора \\ +\hline +{\em n\+\_\+params} & Количество параметров в одном кандидате \\ +\hline +{\em n\+\_\+cand} & Количество кандидатов \\ +\hline +{\em n\+\_\+best} & Количество лучших, усредняемых \\ +\hline +{\em mutation\+\_\+amp} & Амплитуда мутации (в диапазоне 0.\+0–1.0) \\ +\hline +{\em start\+\_\+params} & Начальные параметры (в диапазоне 0.\+0–1.0) \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +0 — если окей, -\/1 — если ошибка +\end{DoxyReturn} + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00155}{155}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + +\Hypertarget{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa9a4c4f43f7beb926c85bd4817ebd628}\index{Genetic optimizer@{Genetic optimizer}!GenOptimizer\_Step@{GenOptimizer\_Step}} +\index{GenOptimizer\_Step@{GenOptimizer\_Step}!Genetic optimizer@{Genetic optimizer}} +\doxysubsubsubsubsection{\texorpdfstring{GenOptimizer\_Step()}{GenOptimizer\_Step()}} +{\footnotesize\ttfamily \label{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa9a4c4f43f7beb926c85bd4817ebd628} +int Gen\+Optimizer\+\_\+\+Step (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_gen_optimizer__t}{Gen\+Optimizer\+\_\+t}} \texorpdfstring{$\ast$}{*}}]{opt}{, }\item[{float \texorpdfstring{$\ast$}{*}}]{params}{, }\item[{float}]{loss}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}} + + + +Один шаг эволюционного оптимизатора. + + +\begin{DoxyParams}{Parameters} +{\em opt} & Указатель на структуру оптимизатора \\ +\hline +{\em params} & Массив параметров, которые будут обновлены (на выходе — новые параметры) \\ +\hline +{\em loss} & Loss текущего кандидата \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +0 — если окей, -\/1 — если ошибка +\end{DoxyReturn} +Сохраняет loss текущего кандидата и формирует параметры следующего кандидата. Если накоплено n\+\_\+cand кандидатов, генерируется новое поколение. Новое поколение формируется случайным выбором из n\+\_\+best лучших с добавлением мутации. + +На выходе params содержит параметры следующего кандидата для измерений. \begin{DoxyNote}{Note} +Функция использует глобальную внутреннюю переменную для сортировки. Надо убедится что только один экземпляр функции запущен в момент времени +\end{DoxyNote} + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00225}{225}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + diff --git a/Doc/latex/group___g_p_i_o___i_n_i_t.pdf b/Doc/latex/group___g_p_i_o___i_n_i_t.pdf index 82aa69ec0b3dc8df525b782ef30b99dd04515792..7c35f0b40c7f654fcd924d025a3f07701e97c06c 100644 GIT binary patch delta 528 zcmV+r0`L9YXx(VAP%(e^SIk386AHHEOX6L^!X_!pvTbplls=S2XdU60I+l^;()@ij zvTPh$eBtP5B+Z;NqCmVD65`Q2h-l(P5G9F6Q;13Ig#_X?@j^(})C(!3CSbFH;CO8X z1Q{Z2_X>3;nh+***6-f_wX=V@z^v{+v!99rY(QYP zht#*8pE6lB8aIy#zLZA(I+>xBrOkghHW!5+f>#(4BN}ENVY5Mi*kx1bN;V^RfZ%)n zJdO;6#k*3;zGaME*p=0+VsET7qms1-ON#_+%%>P;JRhsD#L+lX{R8DKH+p6N49{ zQsn${J7h|p`a&pJ6ueRrs83U$z~ZcR+ua9&WlP1|b5(S{RONCxSgiy{CHGtlSnTgZ z5+;;{YjPK*lzt@92SS#&X=3ZZduQ|L`IOriajN)M{xM@I67z&f43vuFkCDTia&N{sq1G>RgjAGamvuFq2R-*bE6MYaGeI008q3 S3+R(HG$05y3MC~)Peuw0#QoF& delta 527 zcmV+q0`UFaXxwP9P%(ekSIk386AH0pTS>Zvg-ueHW!vI9DSar5&^p2~bu1&xW%Kvd z$QK-1eBtP5B+Z;NVn9g@oD%j4BF0Gs5$A-hA*L}2Da0#ELf|V#LI!IWu-QOxyw(bW zMCPg?01!MErv`pO2ozFy@zhSYl?6ub?Y| z`rgV@qKnGn<}t;Wv1qa46SVZS`*+8tDzjbi5<_A{-OK}QHV6>+*<`lR)xaGf_>n#h zBL`vjE;qWZg%B5U6{RS|t7zOP7q!FMBPA;L86icvINM7(#|>P~xX1PYSo%+=ieq{q zzO@%u4bD?oqh5aq8ALsNxfQGv<#VYnq|b5GD*@K6|IdP>Q7YBF)SaYAf%CXOF?e<= zMZI7B4vEpHHd6*>nJkP3wqWZ8h1uEKy15Gi&*nzf=OSws+T`g$hBU*KZ z&bSgb&p<-_qPZw^ABs?F&-#N0Sgnj(#sEjm$juXx=yrdDwo;3q)7#Ncf(YAb$Kg~%V*6Crca%1#xcg?Owv-Om;;ja@6V k&vrSliS7H@aLrG$bR*+knM`~w+eFzvIaB2~vs5%I0Y`lCDF6Tf delta 494 zcmVyQo0S-$=JgvLRB=!EU}C% zm*wA2l4aLn!^Yfwy7S$A-w6W>QXnY6OGpq35=c_xWRPUbAV!c962w5rB8V|$CSbLK zXn$!0L^&%(8vsD`SRGpU2{9lj;MqYN+0`0waCr1I@QDS_rQDPy;R9S$}W`tCcmZ?OWlxlJ$V? zAo^ZB44yGz_O4X2Ybd2>dZ8y;(HGhpk5fr&`pfubc+}_9+$NbJZQgnZcGe$;27~y? zzjbHRzCAZhTY`VAi6Qak^EE>~3!hKo9QeLQf^xup{(lnoN{B*wZhHpF-$_V!gADz=t?Op9U2JTXZCBQ$POt%coz#Tb8Y zrTIrvhfWmTD^|CSt;H_``~Ze8F?bsjwH2=w7sdU0B4i<2*(oksAY;wxezxY)xV5tT k?3VMI*uI|))9fTmKeD+ilZmfon<)DiB^u=?vs5%I0c4u+Hvj+t diff --git a/Doc/latex/group___l_i_b_s___c_o_n_f_i_g.tex b/Doc/latex/group___l_i_b_s___c_o_n_f_i_g.tex index f01d1d5..b1d0342 100644 --- a/Doc/latex/group___l_i_b_s___c_o_n_f_i_g.tex +++ b/Doc/latex/group___l_i_b_s___c_o_n_f_i_g.tex @@ -18,7 +18,7 @@ Collaboration diagram for Libraries configs\+: \item \#define \mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga9c853b02c22f26023c34d1d404b6d653}{local\+\_\+time}}() \begin{DoxyCompactList}\small\item\em Локальное время \end{DoxyCompactList}\item -\#define \mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga66560656d080d6551627a19dfb847c66}{INCLUDE\+\_\+\+EVOLVE\+\_\+\+OPTIMIZER}} +\#define \mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga3cdc9ef47fd3ff080d38481295327692}{INCLUDE\+\_\+\+GEN\+\_\+\+OPTIMIZER}} \begin{DoxyCompactList}\small\item\em Подключить библиотеку для оптимизации параметров \end{DoxyCompactList}\item \#define \mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_gaf4ddb2a71ec0d05c2480e197cd17c0be}{INCLUDE\+\_\+\+BIT\+\_\+\+ACCESS\+\_\+\+LIB}} \begin{DoxyCompactList}\small\item\em Подключить библиотеку с typedef с битовыми полями \end{DoxyCompactList}\item @@ -57,13 +57,13 @@ Collaboration diagram for Libraries configs\+: -Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00080}{80}} of file \mbox{\hyperlink{mylibs__config_8h_source}{mylibs\+\_\+config.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00097}{97}} of file \mbox{\hyperlink{mylibs__config_8h_source}{mylibs\+\_\+config.\+h}}. -\Hypertarget{group___l_i_b_s___c_o_n_f_i_g_ga66560656d080d6551627a19dfb847c66}\index{Libraries configs@{Libraries configs}!INCLUDE\_EVOLVE\_OPTIMIZER@{INCLUDE\_EVOLVE\_OPTIMIZER}} -\index{INCLUDE\_EVOLVE\_OPTIMIZER@{INCLUDE\_EVOLVE\_OPTIMIZER}!Libraries configs@{Libraries configs}} -\doxysubsubsubsubsection{\texorpdfstring{INCLUDE\_EVOLVE\_OPTIMIZER}{INCLUDE\_EVOLVE\_OPTIMIZER}} -{\footnotesize\ttfamily \label{group___l_i_b_s___c_o_n_f_i_g_ga66560656d080d6551627a19dfb847c66} -\#define INCLUDE\+\_\+\+EVOLVE\+\_\+\+OPTIMIZER} +\Hypertarget{group___l_i_b_s___c_o_n_f_i_g_ga3cdc9ef47fd3ff080d38481295327692}\index{Libraries configs@{Libraries configs}!INCLUDE\_GEN\_OPTIMIZER@{INCLUDE\_GEN\_OPTIMIZER}} +\index{INCLUDE\_GEN\_OPTIMIZER@{INCLUDE\_GEN\_OPTIMIZER}!Libraries configs@{Libraries configs}} +\doxysubsubsubsubsection{\texorpdfstring{INCLUDE\_GEN\_OPTIMIZER}{INCLUDE\_GEN\_OPTIMIZER}} +{\footnotesize\ttfamily \label{group___l_i_b_s___c_o_n_f_i_g_ga3cdc9ef47fd3ff080d38481295327692} +\#define INCLUDE\+\_\+\+GEN\+\_\+\+OPTIMIZER} @@ -71,7 +71,7 @@ Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00080}{80}} of fil -Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00082}{82}} of file \mbox{\hyperlink{mylibs__config_8h_source}{mylibs\+\_\+config.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00099}{99}} of file \mbox{\hyperlink{mylibs__config_8h_source}{mylibs\+\_\+config.\+h}}. \Hypertarget{group___l_i_b_s___c_o_n_f_i_g_gaf4ddb2a71ec0d05c2480e197cd17c0be}\index{Libraries configs@{Libraries configs}!INCLUDE\_BIT\_ACCESS\_LIB@{INCLUDE\_BIT\_ACCESS\_LIB}} \index{INCLUDE\_BIT\_ACCESS\_LIB@{INCLUDE\_BIT\_ACCESS\_LIB}!Libraries configs@{Libraries configs}} @@ -85,7 +85,7 @@ Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00082}{82}} of fil -Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00083}{83}} of file \mbox{\hyperlink{mylibs__config_8h_source}{mylibs\+\_\+config.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00100}{100}} of file \mbox{\hyperlink{mylibs__config_8h_source}{mylibs\+\_\+config.\+h}}. \Hypertarget{group___l_i_b_s___c_o_n_f_i_g_ga4403055986b70bb02b8d37073a122e32}\index{Libraries configs@{Libraries configs}!INCLUDE\_TRACKERS\_LIB@{INCLUDE\_TRACKERS\_LIB}} \index{INCLUDE\_TRACKERS\_LIB@{INCLUDE\_TRACKERS\_LIB}!Libraries configs@{Libraries configs}} @@ -99,7 +99,7 @@ Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00083}{83}} of fil -Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00084}{84}} of file \mbox{\hyperlink{mylibs__config_8h_source}{mylibs\+\_\+config.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00101}{101}} of file \mbox{\hyperlink{mylibs__config_8h_source}{mylibs\+\_\+config.\+h}}. \Hypertarget{group___l_i_b_s___c_o_n_f_i_g_ga0a3ca94b616997069dd53e2c6c2687d7}\index{Libraries configs@{Libraries configs}!INCLUDE\_TRACE\_LIB@{INCLUDE\_TRACE\_LIB}} \index{INCLUDE\_TRACE\_LIB@{INCLUDE\_TRACE\_LIB}!Libraries configs@{Libraries configs}} @@ -113,7 +113,7 @@ Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00084}{84}} of fil -Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00085}{85}} of file \mbox{\hyperlink{mylibs__config_8h_source}{mylibs\+\_\+config.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00102}{102}} of file \mbox{\hyperlink{mylibs__config_8h_source}{mylibs\+\_\+config.\+h}}. \Hypertarget{group___l_i_b_s___c_o_n_f_i_g_ga181a46326e46b60afb160190832c7281}\index{Libraries configs@{Libraries configs}!INCLUDE\_GENERAL\_PERIPH\_LIBS@{INCLUDE\_GENERAL\_PERIPH\_LIBS}} \index{INCLUDE\_GENERAL\_PERIPH\_LIBS@{INCLUDE\_GENERAL\_PERIPH\_LIBS}!Libraries configs@{Libraries configs}} @@ -127,7 +127,7 @@ Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00085}{85}} of fil -Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00086}{86}} of file \mbox{\hyperlink{mylibs__config_8h_source}{mylibs\+\_\+config.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00103}{103}} of file \mbox{\hyperlink{mylibs__config_8h_source}{mylibs\+\_\+config.\+h}}. \Hypertarget{group___l_i_b_s___c_o_n_f_i_g_ga57c369737d5c0cfdb7baeecba0a4b151}\index{Libraries configs@{Libraries configs}!FREERTOS\_DELAY@{FREERTOS\_DELAY}} \index{FREERTOS\_DELAY@{FREERTOS\_DELAY}!Libraries configs@{Libraries configs}} @@ -141,5 +141,5 @@ Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00086}{86}} of fil -Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00087}{87}} of file \mbox{\hyperlink{mylibs__config_8h_source}{mylibs\+\_\+config.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__config_8h_source_l00104}{104}} of file \mbox{\hyperlink{mylibs__config_8h_source}{mylibs\+\_\+config.\+h}}. diff --git a/Doc/latex/group___m_y___l_i_b_s___g_p_i_o.pdf b/Doc/latex/group___m_y___l_i_b_s___g_p_i_o.pdf index 4d52e25752284109a284c4ff8afcc5d116d1b2a0..9dc1317c7b030e699f9ddb9dd8d546acc4f56a57 100644 GIT binary patch delta 670 zcmV;P0%85Th5@^V0kCyHe`g7WrX8hp8(EsMhf##<2*)h3j4f~Lzu%P{yGh%Z4e~HT ztfM1c>+0xSnE@pMgp@=ectR40C?$+S5=VrGz?cw30OK?!*yCYDVqk)XB*i8S2oHb- zR1h9vo5X|z3zLL!oRx%v%x2)P9%}{uA}dr&0KmU3*DZVp4iuJffA6SE-Bkt{IX^#$ zxTq>^-0)rZU>x!ajke z%1s~UNWr*^=m#%gHnYIueQLQWbv1Bz;D24-3_XM}c~dmHtEH4X`6#!tln=7SULkA5 z+94$?{5LX_TW@1_f7_{j0SaK>F~0+=!#9)&nSWD-zoJSIcnR)1PC(GW6UQ)3#t8_I zbqNB?;kny@)2XsWMb@%Ci5}uLm!w{VE)OVf?FEeJI04}^pQM%(SSSHKp&qULg~-TU zZcd^}@KO`p4<2!vdg0jO$s_yR6FtQ!J%uG|R~jX@o4+fPf6v_xcVWjVUP$(ev6z7v zAct^(0^$Lpz4!3`Sjt|m4_mb(`yGr*F0d?I(EkyzYLr^)y)XLnw-oSE5C0aA)d|&W z)XUQ=^Q6n7(d#Z(4NUT^Y&0;BB_4&z#+bT2^L@t_O;&Hpy!CWbOsD-F->A%*;VLr< zCRb;i@{my;f74VXjK8Pi9i`Lb#O*f&-tO=B;j$mI{iN1qHrKx~X^KA);+-8w;}@ke z$~v0yG2q%-?S(}hd*IMjlT~eP7t0?9`UX%!HS{iV)|L8M=4yF8KQQD{wYqC^g^NCA zd01~Per#Qx*!pzE=A@0>GjUHwkJavTyv$6t)x}?UnrHps&W zv5t>)t*fJRB?gp45L1$X;2Fsvp_DKRS(*?Y17kuE0gTg>;2Vz^sQ)vAT>z=6UNf9^eXp}X1wBd4c( z5odL+t?$0=9;~N6R`rjbv8F5RA~(v%IqFN7uNJzht^c@4gVd#u%VI1zKq48t5%viz zRbl%uPYT9;MBjM^^SJ{K?@}vlrR#yah4Ab0dU!(!lQ*T&T_dI3%1618m3)vbzLl~; ztUXe)#=nud+yra8f89*o2T%a_jq_V@I($Qkkoh-N_$#VJQIO%f(+mWS0&xgu**E~< zp)OJ6INWy^a6DBusK`pTN6|yP=8{>EpvxnQOM3wmIu1bi%qKI)2`rR|9#M~0{z7DB zA=gLIBzma{t_QbxHVfjh#hpj?xhHyxQF;tZG`=({Y}bERe1v<3(=sjV^aO50q|(XA=y&yJvtuwhHyRv;RRn E0mzm{EC2ui diff --git a/Doc/latex/group___m_y___l_i_b_s___s_p_i.pdf b/Doc/latex/group___m_y___l_i_b_s___s_p_i.pdf index 64f21f21876125c7d017c76e08deddac1161da69..a1fad2b5a7676dbf023cc0b3cab78b6202b5be99 100644 GIT binary patch delta 654 zcmV;90&)G%bkKCL12=!$irX*{eb-maLrW71u_VWrEMZ}jlx5krq)tj7$|AImNK6yU z$Z~1^z9ZRAo$gC13%-obXsk15X3T(+DMXaS5YmKj22m7|5Mo?J5JxfL6cQQ{&LK%~ z1EfhxcnFN~l+5Q4Y|oW~U@iBmCIApT7P}h00|yEjJb7rTo6>&*Be%DMh`X}X*1I>& zv-Qx&qWsY!)-<_YOQU?8gT6F!x7I~z-N&cYU9;IFy1Zi#;j=w5Q@L$7BE+b7ww^nf z&z<4yj!A9{UG~@pg0I;_zd{p6Z}vtvl@Q`2&f+Kv@hoawRYD1at4bWaCB<=au&3kL z1!Jx*ez5_U@;84}1Cjp|fWH)g^DcKj3x@_K+q(W10#WarO>||~c>Af>2-q5>GToJ>mES>tbJ0-@ z9#KtCxaInX>DuUBlPd$GToy(Ho3M03VRW#zs&9h8qkDfNt3#336K(e6aXTGGNhkYC zS_Pxk4W~R}lqYl+ri{O*;X6vl*JRza!P{;!`Z2jM{G@h;Tyi`dQ>EyI%}?Ayc((Os;B3E@uuK zyvBc!??)jw5PrP9u<^CLEvu!p@~HP+;`q-QITwj2L}j688)o1GGYt$slP5YL2sH{NB}Gq03d!p-egFUf delta 653 zcmV;80&@M(bkB6K12=z7i`y^|z57?pp`{6hSdt? z1I&_Hz#^cO&4R@O!tJ?I5THq-3$6{B*cVIvugC`HIbW?v?puz3!AmXkpwe{{z z^K3ozu_%AEh&4@aQ)!fsbI_MY?owTp)_r_R+%=z1_~jjY2%qhdnaXXu5g|&vv-RA; zV&M#DcT93y=(5K)5Pr=b`W2cmdb2mWse}+GaTZ5Wh-XpbsuD^VTvg)WEh&zZgFPL` zE*Nul@yiXkl)rzW8i@R#0PLjzjCHxQc{DUI+1B;95Quu`eEK>{)R=XF??RM#+keaZ zb8|xS&hKjC8pPQYqTXb{JM-yUt5%N>M|BE1W*4baVC|<~BVcQk%5+zjR(=No&P7Kt zd_*-p;g;(krm4}pCRYYVxh#wZI-#=(fziR*s=f(BkM4hstPVw9Pqf*O$L(|&C7tYR zX%&ptH;gb&38RD)8u9ledPm6knyi~Pc-u`zKPDH3pVY39OZ^LpxL;L|#nLL* zM6=8OdsovJz2MP7D{PG{>&l&#pL_TLP&L)BR=8`eeipgP?w5mJ$W*NxldBq%%bCLl zukjz``_Ui`gdcA&YR*p1U(jIrE| zUg*^;ol58NkrW1$gdi!2Krl*TkSZdKLM%hVI4~wC;R={YI1#`?6%z?eaz)T|a}!_@ zmxM8FRY-UQOmRVY3@m2Y2bM5NcmkZoicF_4dDv|YOlIlQ)C2$~e|Pz!hVQ_E!WQ>MYJ15HRK_v^Ms7u^i%ODb@pczJ~tao#f{_57P(v2X$GQ`9Aqa2s7{8E zbkd!Vy?z|BZTWpzn+@4#(W9N={o#ZD(}0J{n0dLcthR!j1-vIXxx-@clv}_p+ZOAd z=rhk*RW6#$e^fBa(!45x1uPCIj8@ie>$AzkyUQxwuJWu7%4#_tw@+ndQddaVsWmXV zKI4>2M!BMih#7xR#XCyJ!~MIb7vAol$?nbUH~q;h^7OL&g?p#?C-4#EEbJfV!Wwrp z(CGqhT$#QoZ|@#d_d}Hy_0}zx?K=AwkfiB)S2*k1Mf}V&Grze!DC)VX%cjZzX2gbN_dl6 zMj!z-lY2&|1PEoJT$3h8N-MhzBnoA2WOHn+a delta 754 zcmVs-iUZpNACE7}7M5 zeal#EZQJ-o=Q=ljs`VIkA%5rrrc*1d-ft#1MOAj*JxspNZ@V5!7`<86Rl8M6ZPZS! zRiU0#gT1ZNs>a?{f32L#)H+z1&3bHuF9=kxl;*|jC_R& zW{=6^ogid9R1xh)Q4M(rYCRznJN;BVDwY2kh0pBq;r{K@3vc(&WcOzFoBpI1MRr;J!o5@c6Zi;n7WNNwX|z2W z=yU-$woG4?w{s7w`=QRtW@{JAcb$C;NK$vbE1Y$$M1K~!p5I&^6!ly;Ra@s87wt=S zaBv&^4dc$3J?QSWcWB+0gT&LOzTrdYeydlR$=20!k7H>UI$Edu)(7SA8w{mNX_H$< kAOSR!d`71P2W6pPlP5R8rJTal)94jfNdc7Ts#ab zW5VRsUdgUujGfq-9a+VmS!-4e6HJ*^!w$~k>^M8<({XBpO|CY6xdEH<7o&zj{!Re; zQUK}|2yryLOqzf6Hv;rnzwzG{=uDQ1X=7EaHn;w>j6ZfKL)-doHEe5Gn?N|26yn}| zx>m_6@$M*2sONSODF^C5^*;i(N{B-C1@XdL2+TzE6oW^jrz7mS{$iRdx$8=yU{dl* zNgy*apJA9Bv~Jp)AaLkj@#avK?M$lubn53q32ud7b1i>hvc931#st$8XW^XCw>W%* z@${Okoiljd&%`hw7lt3iuHsAi!w|KJhEe2tf0)8r3)?>P%l>;?)fe61&`~pN6|dXI zo>iU)_yLS+Vpy%ruC@4Hm7=&`j(VXGt?X1OT1YQvj$6Ame;?P8b`;!TJ7JS+c|EHY e*Ze5=ec})1Z!^mKx`d-D{{-9`H#oClJ2L?sTMtYC delta 540 zcmV+%0^|LZd6apuRylu?B`j=`vMk#c*GcI^S%lURiD_aPSuV}rR~OrL*gllD;LGTY z#yWFm#sn~mAjT+x5T}R|h@%AxA;AR2kQfKWkSrF6Qb<#RD9lreXb6N*ik3?Vc9&W} zknw|P5C8;^<-UQhKmkJzPYznkw$eb*?d>SyuBxPV?rr<59rS;`tiE|ftG3V?SHi_v z=u^x0nJg=9KOSLwEf%wQcqa}rPk&@C3hg%QW2wF!j1Ng?jc zr)!nG67Nppj5=PVgJ3Y>Wgl0=%^WXidRi- z&nhlG`~XHZ(XZBK*G7CV3z6TiM!k@WMz*RD4Wz@F-^X>N9R)YoPT1sHUe9XH eH9yHim$(o4+l=zQF5#%kKLNXH delta 30 mcmeBeWbAEZ+;G;8ttcjcO6P~km+hKZ9`2Z?xjE9_gb@JHQw=Nt diff --git a/Doc/latex/group___m_y_l_i_b_s___c_o_n_f_i_g.md5 b/Doc/latex/group___m_y_l_i_b_s___c_o_n_f_i_g.md5 index 3f02def..34ea56a 100644 --- a/Doc/latex/group___m_y_l_i_b_s___c_o_n_f_i_g.md5 +++ b/Doc/latex/group___m_y_l_i_b_s___c_o_n_f_i_g.md5 @@ -1 +1 @@ -e39777f4e691429c305a230cb7233db5 \ No newline at end of file +d391fab11da478dd495954b9be42bbb6 \ No newline at end of file diff --git a/Doc/latex/group___m_y_l_i_b_s___c_o_n_f_i_g.pdf b/Doc/latex/group___m_y_l_i_b_s___c_o_n_f_i_g.pdf index fc97eb7ff729209d51299ef383f07b327e9b7ace..3eddb634fe50c462bb0cdb9f3084be4d3be393fb 100644 GIT binary patch delta 14837 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 b0*kOo7i5wQgOln%9ttorH3}sqMNdWw>DJ1S delta 14972 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 B*U$g} diff --git a/Doc/latex/group___m_y_l_i_b_s___c_o_n_f_i_g.tex b/Doc/latex/group___m_y_l_i_b_s___c_o_n_f_i_g.tex index 843cfc2..35e80d3 100644 --- a/Doc/latex/group___m_y_l_i_b_s___c_o_n_f_i_g.tex +++ b/Doc/latex/group___m_y_l_i_b_s___c_o_n_f_i_g.tex @@ -18,8 +18,8 @@ Collaboration diagram for Configs\+: \item \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g}{Trace configs}} \begin{DoxyCompactList}\small\item\em Конфигурация трекеров и трассировки \end{DoxyCompactList}\item -\mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g}{Evolve configs}} -\begin{DoxyCompactList}\small\item\em Конфигурация однослойного персептрона и алгоритма обучения \end{DoxyCompactList}\item +\mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g}{Genetic configs}} +\begin{DoxyCompactList}\small\item\em Конфигурация генетического алгоритма обучения \end{DoxyCompactList}\item \mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g}{Libraries configs}} \begin{DoxyCompactList}\small\item\em Подключение различных модулей библиотеки \end{DoxyCompactList}\end{DoxyCompactItemize} @@ -28,5 +28,5 @@ Collaboration diagram for Configs\+: Конфигурации для библиотек My\+Libs. \input{group___t_r_a_c_e___c_o_n_f_i_g} -\input{group___e_v_o_l_v_e___c_o_n_f_i_g} +\input{group___g_e_n___c_o_n_f_i_g} \input{group___l_i_b_s___c_o_n_f_i_g} diff --git a/Doc/latex/group___m_y_l_i_b_s___d_e_f_i_n_e_s.md5 b/Doc/latex/group___m_y_l_i_b_s___d_e_f_i_n_e_s.md5 index 21a4273..01910aa 100644 --- a/Doc/latex/group___m_y_l_i_b_s___d_e_f_i_n_e_s.md5 +++ b/Doc/latex/group___m_y_l_i_b_s___d_e_f_i_n_e_s.md5 @@ -1 +1 @@ -e21133381fcfb6b51ca1c555273b8ce6 \ No newline at end of file +264808d6452fadd8a8ce8eeb10b2b251 \ No newline at end of file diff --git a/Doc/latex/group___m_y_l_i_b_s___d_e_f_i_n_e_s.pdf b/Doc/latex/group___m_y_l_i_b_s___d_e_f_i_n_e_s.pdf index fe2af8c6fdbd7c85881f85e2a77fce9558f630ca..a54e0d1fef7cd6ee566bba102ed9df4f6dcad0ae 100644 GIT binary patch delta 19402 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 Y+=4>FgRq`_a3~D9&+Jk(wKe1WFBq7k1poj5 delta 19256 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 NAP6`LB_%~qMhYb;d^`XE delta 262 zcmV+h0r~#bZ`5zF9X5YTFvBEdS2+BH@%WOgn=ts;PD3{uJ;SeZpNo}xu|%EFka6oa z?&q&C()H22&%blEebW;j9kj$wi=rysS?Rfh@4>nzyQj6y+Q{E|D&xD=pci6UsamJ9 zf?0p&u*WO=-SK_tX2LhPH7UK=)+{2UREj1KYiCe@)=1%D${VFyxykuR1cTldU%( M2sa8PB}Gq03TUW%=l}o! diff --git a/Doc/latex/group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.pdf b/Doc/latex/group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.pdf index 233193f1c18a78a71172c8d6f28183ecfa7ffc2c..106c61c633204583b7e102015a2e2dcd5c4f80ae 100644 GIT binary patch delta 494 zcmV$c6xb|6Cp$_yrs&r108NTh&$u7`eZnWIR-rGTndizI`(t^|h>i_l(hP zZW5tomxt6#D~^dOD}x^oDZY%x9*-s{?r6LA*QPQzeQ=B+3q<|N1FY8w5W8w}Q>tp< z_Tc|WpN5@-U9ziP&smwhWsOBeR$HvRlewJdm}0xctj!*<*`HPi%edCR zw-;MKo>N$&LI{5u1P;F5O4Q5ndrpk%ii-;6hSKW>Nv(+VV z4!JKRS{>V5YMAAs)C!o#mL7%K$(Xvi^Zkx3w5U&I-grtE^LcNsmIAfg2_s>)yW^Bc zjPeCt1xv<1)8G@O^V>3USm2{Gc5r#D?VCK7Vx#`r5~*Q*c*w1JbR4D1NF0KAjDJL9 z-Wl4l6F(1HR85U{<=26J0;`uCc3T^@lYh!wrjMJ6k*RD{t8>{vG~PKK(8m5X-B95` kchh+*Y+uh-7;#pGYuWxRla6m~n>hOqh)?9)votL$0n&B%00000 delta 494 zcmV`bq?FQaxK74ClwwpzIHrkZ zWO*$A{dBf$96D^o)6<=G_uiQSB_TwVup0;{BLM^tyNnYVC3#@l5t;E%5;Cn+xFdb)c3Ob=ozEi z+$2KFE)S`fR_qg1Rt7&FQhXVWJswR^+|hRJuT5oc`rsHtt`YSo_pn?dK6V~Xt(vsPQcW`A29EaO`L z*`93ucurw~3L$@F5IFdDDN!%O!%?1yt7=pz0oLdLCt;_hOqCP27ZEA2uDTojXRAx# z9CBYswA#11)G*6MsTDAfEj$XdgE4h;>-!yBXi*=^yz!JS=JVcMEd^?~5k|snbIU1@ z80Cyclm*c@8eCC2zbq4n1-?3C2bag%e#m_(R_d=Uk=kL0huoS+$5E<`#36{s_(wG6 zlc60u@pGp|)zo-bejey2uzJa1x3*Cm`KQcf`nZ}HnaW1BI+qPZG;yNiL?IzbyeievotL$0ptp< z_Tc|WpN5@-U9ziP&smwhWsOBeR$HvRlewJdm}0xctj!*<*`HPi%edCR zw-;MKo>PcXA%qM92VZX`>Sg$HmKWlx8Wl=__4)rvIA|$T<;3kpL<+2{?neLF>Jm7I z+!qq9j%_YA%yLm`1m@L~0)%a%&zPN2xLrhaei`AJLe1 zhIZ`4&x00KQ{!Fvb)cWX>LrKW)<*5*pE8%}<7Q%HDjU`6Ts9DncP35;w6T9pH&i&# z-E`gx+t;%dMx0gQTDCvSq~lxLCeHo?iizajlg2e50Wy>4H7o%)lP>}plPxw#Q@aU( zKmY^Kg6)~JII+rmjD0& delta 554 zcmV+_0@eNTZSife`7;7?)06u%DSred>=q)*NCeS>5w?WrmJ&{3A!5Qoh#SHgEM35A z1>ycuD+m)=sD=PQ_*@M@cE+#1MXt(y)rYg66aEu{0i29QUSgjBs_J7snw$#S?e8Ovp<~g0iqS0-PTIO;qw(? s5##1`itaLx=qI!O|8f&dVJgO3ZPe}q+qw*(lgTz92sa8PB}Gq03O*qRZ~y=R diff --git a/Doc/latex/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.pdf b/Doc/latex/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.pdf index 36e36b4fb425fc8f833825e4116486a3afcb1cc6..eef90f4eadb5231802ce26a5fe0953ac4277dba3 100644 GIT binary patch delta 711 zcmV;&0yzDoiUFjG0kAMZe?DwWE}_tmQOZ8Z(vDq>Vq8bKW{Dkad943_N0RL(X)nfT zZbmNj`qh!8^Y};#14=@OD2ah55m6Au5n&V*PYC0{Xu=4Wz(gpB02ZPhVIvhmGvbmY z*vObL1}x?g;W4%{BwPWL_$qvbiethP;7lkopTq3-ajRjr$O_#Oe*l<$ELSc301gzE zaObRxx~mK@a(cQm;;gD_~`ScsDTnw!9vmP{QO*(bU~GP18;K zn6A?@y-!_x(;j( zGIt)wGa;l$$h^aIp-Ii(<^HAHU;?%uH)d=PO{*D*L2`%&DL@V~gk+Gm@_T)^Pt;TU zu+|&W=P&|Y0QZyqrvq*qt(SFQPrh!f1$-np`-r9BD0{%3t;gCEed4)j>Q$HP1}1q{ zHZ`z-ser=df5Dh-dor6jw`j8MLz%Zh-4xTQzxf)S*)qD!jE2eO38y?_luMcj#lrVg zyrXowzkYj@!rT7V8?L}{(Vz9I%+BlIxOR#^AsF7o;dswhM%xX6&M@H07U{F%cJ5AX z-!@s*ZtZ0G<6vI{lGMY~1x8)!UuCYBSLZuLz0_^pI5oM(Nyn1i+paDCC2>2iRztoG&Wb3-;*XVaEUf delta 711 zcmV;&0yzDoiUFjG0kAMZeu`Bi4^{XRG=kbvg29!h~D2ah5f+!HNAdG_I31J)26e*k75%T)_MfCGgk z+&Sx_?kWR}oSyECIIF7KxbBHs1NtZe|KGb>%vyr~%4CZqytnSy6o3gG3?*?Yyme<1*N|?MUn!4MjX}U=t z({);=_i2ky8R~WLe_%H2sSU^c?1=LluxWlr0_gl(()@YSoQDD9n5l?>t0V~JftJxz z4C*}$*x>^b>IS_IiFAiWk#14fN1+kEL_-EPQHGVS#Gwr1F#zQO3F-S)?1sEPiPn-h z3Ww+=4soFH>r3U5$4$E{6Ey~)Jm3(!Zp0wf5hxf`o1;(=e=kwscBgZ96pSLKt^=Ec z%$>*aOo-?aGVkzQXj1ccxqs<4n1JoajTzfR(`p9cAUTLZh9CzSK{7~N`Mti|C+ewv zSnCbxa~Odxfcwe*(*d`Q*2}uDCto+#0zML)eZ*35ls#b2)?@97KJi>M^{UHt1Cu-} zn;KZaR6t?!e_+hEJ($P8ErQNI>Ue~Tcpp5+qpZn zecNPJyS0<$kAr;;NKy|^7Z`P^f0emjUY+k0^-{NWIM?JFCml<6Z@aemm&ENbyS?4z t?a;a}2g=i?zTx}O{ZcP7ldbEb$5Ggc4(1uY^-ekb0rV6$!n5N;K>?t@X6yg} diff --git a/Doc/latex/group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.pdf b/Doc/latex/group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.pdf index 0798e4b86350df5409ded067dbfa5600cf37fd60..f3e73bb30027647f6a89a7f841ded5750d427a03 100644 GIT binary patch delta 524 zcmV+n0`vW}X0>LpEHHo3irX*{eAid(LrW71wj{@ieT0KcQjX)=;yNjPD2LHG!ZD4l zAj{?Q_g&et>(F8&MkB4XJF{Xy$pS)3SPVQ~k^q8WNmv9y6cSEh5i-Id3_0NpR=8ok z2LEuqNbnO;$c6xb|6Cp$_z4^+r0~*FTh-PE7`eZnL_E~BGTndjzI`e`zXn({Dv8jxFdH9$>w;z+#t5Zc0@T z+#dYz>C-Sn2(x#ER_!IrvMRgcc+Se~HER$VM3r|k)p>3Mus|EL*@La~2TFj9tNLqO zVd{3BLS)6UkU@Xo;LEK#y#k-kvLY_0QJe%=AOD|#gO)N?PS;*PO92|{ZuFl~l)#ze zPDr#mwzA1IyQrfK^G-aAhRgU8&y$YUus>J3w*_;FwKj8QsvQEjC4e>v`dw6^?X zXU9(5JZMoj7kgKJ9q1=Oz2q?4;;x{m!qr51W>#64)kCsG>?uGF4T#iIPnFFjdGU7C{Rb z88bEierGU@XcNeKe)idS@0}?SX9WRqXbdb49Upu@bZ7*A6gZ5)DxeO7AYcxoaElw( zYw!-2Mu3;_LbMJ5c+cgrg`dEHKnkxtwUu41fjam1vxtYfmb!mm-gj@hr@oZ+uYu93 z%XPw)=;I9a((z*=%UYYmSH%2rY}Mbo z3R5@h1R^7jffRpy3tz9*85H<@7L{Xjn#4(f4)Om9I4B`fX>}d+GZdhq_D1g+Me(gU z_Jl;qW0wmBi=3BA0(EKR5?GwHZrVG~>)Ar_=2YgbD^;;v4!$bEjdDA#1uS-VjIe+b zMoB=ZAKnoE6Cum%G)wv=B^p&U>@P2h+Ed>E*sL zuZ11**>cU#valuNJDF8{ZQIP*KezDXxRVGn9|AWylPNOT3=$}7WWc}x0NnEnFp~{4 NAP6`LB_%~qMheUa{y_i$ diff --git a/Doc/latex/group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.pdf b/Doc/latex/group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.pdf index b71ba93ef20d95a9b2d5a09c4369aa576672180b..70d362fa10620aacabb15e1f7f51766388cc4e6d 100644 GIT binary patch delta 526 zcmV+p0`dLQX4Gb|RWN^6Ezu;fAtX>mm71igs%{e_nf76-kV`Cr8Za_uYX1GsU>MOV zkoElRv+v$JGoWMv0VON~FIo~Ge1Az;2!0q4kHR8g#DgI4h{s@s8`f)Z50_ei8}nQ= z1OVLU;@H4%@PI-BFCDd&ZKZ*cySqumeN{=_E$`b`-BDkQ>aBlgv}!XQb0xYsL;Yy^ zF_uN8&EX4b{wQ=-!9TF$L#}+f*`L$ZFvB;QmaWh8aSb zeae+=>oiTv^n&9#Ez;MtL8K9t&PkW&xe34mP0VHwrp{j|0W!Ag?`?^xn{^7I5ywCV zzJ)K>>huacoJD_0Y)+#%F|a=VgMfn)B9T_tUOz(t8ftHJpHURwnqyChl{~hYP%z7Q zp(HSeg${+;N$a|~b={856|YZ4);Ln-^Lg*965J@a<66LMck59vVANaD$Pd}#3-v!! zI=@cS^a6IeX}~BQyQtE__`g*g_dgn2{1Y@g4TYkrow zEg9d*q~dGaCeHo^&K~2+lO{4B0yr>}M=~n{IWUu`0v(f)GL8%qC~FkJzyJXI)(ioY QDl;DmI4}w&B}Gq03P#EHR{#J2 delta 524 zcmV+n0`vXUX3}P`RWN@xEm0+~AyBBIN=-6VRkw+fO#3iZ$R!p*3m6$QHUEBRFpOvu z$a;SE*>~@q8BnrfmrQCJ0xcn}00@fh6VhV>fU!=(}6CcF?W z0RZ>8Jht!?JfM)mYfo)uS8HJ8{(ctmP}frT%lqz4_tclN{xyFvT6MWjxDtJwpw#8jL@w?1L`nZ`HnTl3+DiR`OCo&%bH#w6?GAjZ&Ig_XY9g~tWjtc@PYXnpb0Q<`e|C1~; O9|<=(3MC~)Peuy<)%qp? diff --git a/Doc/latex/group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.pdf b/Doc/latex/group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.pdf index d765e02408e1833ca91db6e61998729885591418..32a3068be1de6c87c1004ad7aa1d01b95f294cab 100644 GIT binary patch delta 567 zcmV-70?7TTaHw#w@-%<^T|%KrMk(Ef>tyU<6r(yKF-xo<%cJ@C(}$fp>&qAge_S73 zS?3(xD*_mW5MdMp%~C`OL}7>mh_V<(5Qh<>7~(8MltL26h(a1Chz39iNziNt{`z#} z;OA`1TLb|9L%nI?Cs4ppz>|d*qH7cobaOMBaoaRP+2K|9tSo=@rEY#XM9HpFIg{MZ zGtgtlHo2%9Wq%%qUIZbA0H@<1#{G~E+|mWFl$&6%0B0uI4c)?QW&#uUlqyw=X24e9 ze=qKbFCD_++!Ab=l}!c{_F3PfeSi1R!KNxqOduFS3Q-?ET{`95 z_`K%_)bl$Vl>>FZdXEWf$$26AO>yQM2y`>_6#WP7s3q*UzB0|F*mM<_FsWEA1rU#< z9)`(IsbhQX`xf0wcHGrf>j}A?PF+h#&W!m>rZ`NN*A#!#h+vxFEJ#Usg@aERPcO-u z7K4v{I}E*XX84tFYBm=yny3*Pgqe05pBu1I+>}sy&c8D|`=%l+Ix2{@WKDZCYgMNK zz6b3ZAHEhkYsr7t6)*1Qqgp6_;67LxOt<+zmxekAOSa%8aI~(Uqokcf|Is4NCVaju9E>cAP6%GB_%~q FMhdcw3t#{M delta 567 zcmV-70?7TSaH(*x@-%;JD|QKmCK;u48>y4Ahf$2`h{PZ~tg6#Q|0 zbY-1$bgu|t6hnd$1Dd6X5=i10MUZ3+CBWhYQ4B1L5v4F;3{gng1knfxArmy6LbyI1 z1%yk!6%7J_@S)l?@DnIt$l=LBbJ^A!2)el$%($&t`cl=uJfc-w>Lpjg z&9l&B%Qs6|)!O|$j)MeZ3=vL;0mI#p3H;KzD7Bwpu?S~2*$>^qbZP?|ca%z9$-2i@ z5Pr|^`!5s1=)+dY_E;2!E~?^S-c?bXTL(LR*pF?hk!Z7LE3is`7!wTgf4b>g-G;ll zvNV_^uK{!5-->@dl)aPQLvb?Cz0vwyG`;?RQ~j+y80vN$1HrZ`Y)l~PLkdY3K3zKH z-T1s02h{O98?^-LfAt;{)=G$6cAMhOw-A_S=qQE{#!*MubA4sHRC3dnLcyrym6AXL zk_H$?JFSn+br?EytN3wOl}#Ykc0Beip#-<)FSr&kT3mlqOcR1B!3ic2yTZ{YjK`N` zZHvLjt{wW`I5YezHWi=A7emwvjpEF>jn55OYhg<$J?G!qoqbag4jmN4TJgF$+O^74 z58s1vP4r)LleG}Pt5W25vq3H7qLHmCMFW%bn#1yL%)#TT(zb)EZD%aIwAZtmbItd1 z+X*)Z%|HwHag1@Wg*AVQ+b|G(*H`RAOA`vVB*%$;go8^`j^okh&|)J-BdxSMvtmHW0zyhy3_M8V7<1$VwXy8N>vZs z9{lg=(=bB_vv-A7?Ip{yD!bx%&dTgHYY-Vkm3K1Ld2R!+KpV5!gRS!iN`Q>3`fFQZ z>UNz%WW}+NLEwMj%dI-S0-w&ZA}*&ag1@Wg*AU_+b|S;*H_$!jU^OpNse5*ghG>yQo0S-$=JgvMsq+1C2uzKoEq8L=Z#_Q4A|a5Cz64q6BWuhV>f! z!=(}6C%h0X0s#NHJht!?C}2q8wWqeSt2GdGe?Nz(HAov&c_&?+mo~r@Xk#{euyy`05*Wr+{jIA^ z>UJGNWW}+NK;VDi>$N(A0-w*KLN2FCoCL@a|DS+^5+apO*Fir^ficwG=sz1#0%wjp zAyM+!UDji`^Z?lo3n` zW|#!w4GunGyu41+_6dA+o{k1jxqTJKl5ga@NfDbbz!Y8x##0y7T3G+XY5$|OB h3p?bq<(i*m;Yv2|WLELDZ8K;80Jikwx3ge3ECGTY>Zbqz diff --git a/Doc/latex/group___s_p_i___i_n_i_t.pdf b/Doc/latex/group___s_p_i___i_n_i_t.pdf index e6e178aba062b343874078798113839a8609be37..493f12873be02afefc1cf23b4ec567b9d3e45e77 100644 GIT binary patch delta 482 zcmV<80UiFuX2oW(MlgS_UvVEcmN1AVza(}Eg(exLbQ`Xdu@9pN)e(+ZVi`#u%fFvw z%f_L@M%+ERlkT49L;#~05{yU&VTMrzQDmJIqE&`M3~`*G5R!O_LINuruwFxOxHcSu zoK;*S00^GNQNu3?0Yd?=9ki8gZGfQr`$@(_T}#t#@7p)iL0^AG{kunuYD<$d#k)KQ zy|nC@OHmtlc#PejrG8y@u3h`<3SOE%XgLJ+8xOEvJHy$&h|&mI57-`pAH~z)SrcX- zDka;7QhK3RyPm0_Z&X`L(}s%0$z0BJmtb3SIh#GW4u9I_E#mwA-d=3cZXZMHXmKWi z$eXXXy!5?)IrD!D@->aLYCLnmq;6svXP z?kcYX`~;RSK6qOjwc~$8$&1I$M96|`*{YIjNX9#-Q>pD!=|;*;aW|5;#P;=UnPF#H Y`IhYqnRI+B+eF!aN1o!7vluch0Rs!`5dZ)H delta 482 zcmV<80UiFuX2oW(MlgTwUvVEcmN1AV`K3+?g(fMbbRC|Pu@9pd)e(+pVi`#u%fGKA z%f?~DM%+ERlkT49gaHLHBq+d3AWIZP5JkqxAi7xw1VJ1p0f8h=1A^hk1gusN?k_Ea zFsC(B0RV*0{Gi}B5I|7CtAjS8Yc$~C?rxHC-!wwI?Ope#9rS;VH}5^7WmoB(O6Kw` z^rNGPT<}KQ!((LsW#-q^xn}LJD_EubpmYf8H|}AzvWB&N5tZhm8L%CMKZ~cqGbYSF z)lzhAS(fMWV%Ag1%ePV)OO= z7$R@JUh~rT{&0U{=fKxA(vk!2^Z%2umy8v{Guks}Auv+<8^dQqO5|nnC*)Ebx{67d zRg_Bsc!9G8g4t2)R^5i7Lu*OfBd^p#$a+5S6_t!y=C)Kbm~C$fA_+zWqXgk7{feS5 z2+gm{v=aiKy_$oxV{I?&!0B52H6!`Cbc}zrviu{bLnmtPC2dq| z@2V~X`~-$CHh3EowPk;J#fr!EM96|E(aDM_NX9#-Q>n~TaU*4?*p1{hv3)%os_9A8 YzGd@5CLLePHc|EiGiBm~vluch0fZszbN~PV diff --git a/Doc/latex/group___t_i_m___i_n_i_t.pdf b/Doc/latex/group___t_i_m___i_n_i_t.pdf index 2e60311b14701fcdf2f3ac4beee0a22991e4afb3..ce202321564893e4d24e8f0315b3db3492b97aa8 100644 GIT binary patch delta 501 zcmV6c9*^!*&b) z>DmhLQ(lM;0f7Hfo;&yn0bt1Bb%6G=Z!{3}@UVz@Y#OPD?PGucrU&SA+58$2t@>Q2 zT!|shLf?9RPG#9>dw7WLO$hbwqJ;3RlD)CcthBLe^DUTQjd>K~tnx0puGTi(bZk%99l6rXGRBF< ro%w@?0kgwBOzJJMV?BGWc_jb+xwPrek};_5il= zpN12II2yk9wdsGw?qf(STh=5%o%woA*GS2iO4P_zIJ1=k8RP#Ga8yEM(h)rpY9TNR zyNv#`;fOl5+zF|Yr#=@7Ryi+~1mcmz!>~GQ-FA1rKcI!;?YYc5PpV?Q9)(tdTORjZ z3s~*%0vtpH2Lwl$(D(+^PZ+PS%d~?7ADzgP;&W}^#HncHTlsEE#O4a35D3QeST$PM zfrw}SM=R1l;tuFS+oR%5*V4^M5?1kl}%u zjJVuGjDID5%7<>_nJHYi+;fa6zqp$^hRMVOkGBUZTv=B=cLn3Gvx|O&5Jqnnwr)3C z>$SeuD_!ba-QZ}hjlRQCg|Ug2ZoNA2X;`e!Jh=j2^EZ?OnZHwjKUIJySd)xF?8hYT zc#MPkd$M2r?+Q3=b*>AnSnGw}VD}_Wq#@yD z6<8v&=z}|qEjq)!iWc#6E{LNvk$_bRB_qZMFiUp}5I%B5>^Y&7Pk321ERGz;J5(aa z4q3j68uIy`z*ZLzLD4{Bc+wAQxA0}FZ}8hligbwqq9bWGsZMZo|JGE&S_)zrjsHeHhSM_2m$HH&)XrKPB_Xq6o N8(v;Il(SPrLjlo2NsRyi delta 679 zcmV;Y0$BZ)ivgC40kDff1{gT{uwp zQ!>VoB!n?w3Uj!^m`K7?V2Q#puv8_4kAX8WCX)$_ZXPxUM$>FzY61YGt72Zmci=!_ z2DgDatD4dQBge;k87E~~xiEd*+_^w~EXp4(<7|_=X=Y8x^VF9nn@_8vbpDUW6vlX9 zCL=EQ5PxHdpYoyIcxH0fF83T`$}euGPGB+G@{A%wx3g{_*6 z)_ScU^hy`{PS-e^YoqURRAQ{7rCYCtJ`IcYnWxv_YyO6EAoF($@aGEf1Z$Epi2azv zEswERe@AwU|6Kv6tGiF8?3&1mCD6|%6}D)WVlO_Bz+`QH;bsRfZ~A^Ng5Jf zR)HlVi$1u=*q}4qt7s7)azPxWi3F@lC>b%{gX46!0O1oy#GVsM`Gl8M!{W$cyhkN6 z?2zTFs38yc1h%?(42lL4!?S)+yM-@XeU0B1`ytb-Kdbw5v&O^wd2CMQe>FX3AUeoF zc7ISn(m}kx4*DM0;@iHOtzsWmW=*y=?8Ka6PlTlZG~vb?Gpn{Y1sl z#^we$-C4HRsx|&k5<1Mcc6hymwBhC;ZPli2;C<2Cqn>3hTUCp#91FkElYP3o-UqY8 NZ%Ac2gtJpbLjjO9U8n#6 diff --git a/Doc/latex/group___t_r_a_c_e___c_o_n_f_i_g.pdf b/Doc/latex/group___t_r_a_c_e___c_o_n_f_i_g.pdf index b5a80db99557ac10e42d439f45553353a902a445..73c92874e4d7cf8ba38bd345da8560d7791559d4 100644 GIT binary patch delta 515 zcmV+e0{s1zXqITO6)}HMuqD5wb_sOK^q%%1fJ53pPs!`QBsQrEH>uq^~%i>JXu6K3x! zCA%|Y?8GkY$ZGb+TJ%aLS;KyyU-<`pI?hcJ4r%gMTQIYJLmCiqlYi+>*uFW(rVT;H zq!2mt^_rocg^zznaq?VWBSAUPKL0-nJ0(OR9k)G)1_Bh-RSceyn8*p_{*WuV?@FOy zR`Oa&pgv7~0<(kG=k_iLELtgkKGbFFOI6M1y|zkl!`_B#0kh3rNWz4Y@RnpzO5+<6 zeIR6h-KN_zlEcP{D$=}!_!6%FuqD4_P6>r38Kra^u9LA3qX^Z}9J9nSvRsybzmqJx4jVS+ z?$Mp^?s-lWh!;abJi3I45HEr#Mkj?RU3wvbI7z$^l4Rk96jBUWtsvN68UaDZOVN4& z5Ik0g7Jfnq1af$`&_;H(2I}43PBQN5T55Z|>t3{lzEt(^9?^fQD|E({uz3c0>i8j( zRjtj>V`AQP>3>SzjD-d9+ZWA6q5DvTmiDYaxP#To7{+$36uOf2fbAgoo<9s8nlO7; zD%mxRu`|1{6RX$@Ytbv1WHtMRe(4|e`7}34IHbv2@4(FZ18G3SP5!MrWBcYDn>GX) zlS1Uo=WB*~7CwKU#MyIwjRa*t`~3eT?3EC?blmnF8VFESS21`*Vj?Gy`$MMWp(})f zS-~qMf%-J{3CxaKH|KHI zvUDTkU71XLE!#xdza**UCX?whAOSOz3NzRY7f{w%kbwaJuwDxOlkPJh2r~*LB}Gq0 E3P)Y|hyVZp diff --git a/Doc/latex/group___t_r_a_c_e___g_p_i_o.pdf b/Doc/latex/group___t_r_a_c_e___g_p_i_o.pdf index 442e91e3914d387485f4fe843122b6e085451eee..fe7b5f84818897da14ffc8af14571f5c13c06ac4 100644 GIT binary patch delta 596 zcmV-a0;~O}ZK-XrsWX4uirX*{eb-maLrW71wj|$@B`j=`vMk#c*GcI^S&XU($275w zESKHCuf{hVS}e@yXht)0&WHgeAw-n0HSkqJ0tk3Q*b0IqCY(YTa>5}B1Hu_3&SA3w z|M*rb@KaH!h5&&7T%H>E2^=V7@X|p$-BuPDxxb%9JXDpo-SK~+{bf7ob6NfF5o=m$ zQ(;sWhtRiHoKjs@7B3GeF2*8{M>8w#VE6CSW=h)LIYyTlt^VWzHXAh19;%VH)YXU` z!2g~-jXP(;;$2~MTjzOhbCZi)=E^(U>t%^ft}pc49st|>;W~H7(CpXt>MF)_3M=FU zO$NbWzTA@1H~xR=qON49W8x$Q*2n)R;AoV}^gw4%8$#f895VXPj)`EONt6;IeIusr&ev0i$#pp2}A$ls%sOA5n^bB<#?cf=45& zrp8?IZG@k|@ukMy&Ux+CpHiyqaXS+-Q;lwoR1HK^&iP0-?wxdFgd^O|<1Mj$Jv(8= zMHfTM?s?2QzLjmJ>|g7!-*c0GH6Q^plbZ65mLel`hhs;vqvP irvEP&E(%du+_}aZ_yC?L3cQnlHXsNz3MC~)Peux^8X(yK delta 596 zcmV-a0;~P0ZKrLpsWX3VYuhjo{;pqfA2yayh$Zf#W3X~i+sWo7a5h~i=_UhsHgB^~VkecDV(+dC)dlAzU}JivO52HL(FX-i!V z*dBuK+0(FdCd@t*Mz?jI=QcOF$Yrh;Cwn>1(aH6New#gDdp}&~4)M)?YcH;1Jg2Zi zPS9i!dh_*~l)iuQ&u4WZzK)TT6j&espMZl=D$}0Mo;HNQ>F6^C&yI=EYvON6jXt(g z8JI~?8Vzj0RtpNVleKko7X%$z7*U@}*(|gv=JQ@oqXe?G6IQ`&cgHD@8Rd+|l!eI+ z4L?yjzb+HU13r2w2VKY7zN%v>Hu}w#NZrS888Ax6;i*`xLfMni{}HA5N5T%BD0ncU zYHG|S-v{^!9A9eKZJpOn{VAo&9yb#qGu7zUNYy|*=A4dXu{F=ru%Ay9t0m00YqE{DBB= zVJV7SX`@@&xq()WAh@HP2{w;}Kmeo^&;X`1nIU-qL@T&?t(C^r^%Y?k)8cfA{xpvm iIy3)&xe2B)6{An%4Sb$63cizpHXsN!3MC~)Peuy7yAzB6 diff --git a/Doc/latex/group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.pdf b/Doc/latex/group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.pdf index 055bed77b8cce5939bb098917ee30ddf1c9965f5..77d699f21a785265cb36288a3ffed2da246752c1 100644 GIT binary patch delta 589 zcmV-T0V*)p)T1j1)5K#0qKJ76;wbbOh15E% z*AN`u8wo+iOWAq=5Ik4M7JdQ)0y(_)&{lP|0qWh~&mtb`TA6?Tc;EdpJ@loje-DV! zoiG{KvX4XPrQ^p;Rkgv(BZ7<4*k|#~N_yD-hqSpAW^hi>B|&RAd4TmA4YXY~!c?jr zu{{Le^QUoVO;~&=wd$IpC`_RXUWh{aCv!P3(aH9Oew#gDdp~UF7IDpf>n^rpJSVV1 zPSB(fI`j3Kl%ap|&u4k@Tpbf98PFmAKLH0VWv(2Z18oR_)zM`Po-Grh)5P77X?5&` z)UXh|(h8_gS3ZHo$(W|S3xXakHE&LpXnm#2<#LcyOO9;qxRJ2f-7&&qN?1y6!xfEg zNcf46<#m}j9`MmgIqEvq_EjD$zEN+sL}I^?BtQw7hNoCI5@k;&|3{SK9|?POrr<&I zx@|C*cpu>>uzbmJx3yk7`KJ;xf85N3%w?-OEo2Mvlyg3kt$io`7~u%_^LS0{P|ubd zepaPx**=e1$JesWl>H0nyWen=_A?*>Gm{rIECD!^J^~q&T{KZkhayEA#cN>c@&AHOFaKyDO^;d bvD|Xa6Yv4hh6=Bf_%t90GzujpMNdWw-*X!g delta 587 zcmV-R0<`_2YM^ScA~Jv5irX*{eb-maLrW71wj^JYE@5Gllx5krxK2tR%3@SSIHrkZ zWVv+zz8YIL4lNdDbTp%xIcLOxk{A+7*azV26^S6?E5gf;dl+KE%9tJ>n_F~!AL67XbZr9JHaL)u(PJ2N#O zCulN=y!moV%FuuK$BViWU&q8r25gA`Pr%VAm1|GuKpR5fbo3d+XU9b3HSsrOMxQ#V z3@oImj0P64bwFWpwzg^S!mvk6Bbsw1+d!Lgxg6v)N+4T%VHGU)cbxKsQO;;WS(Lt~ z(K||)w`JmZz*{fnsOwbQXLYK?R{wD&QujqP1xD#KJhfLNZ6w@1&>D5 zZG*Yw>j*!A<4cXZo%7nO-<4GP<8~%wu3Ft0sai;;ob!=v-8<>W2uHY|$6I2DdUnE! zi!Oc3?s?2QzLjmJ>|fM^-(ZvXGavynlNdBC0XLIA0vVHDG*L>62v*ik;1l7EXXgfX zF5nVkMIz}E&;M5n7nNu% Zw_NiCe9(Iet&{pRAP6%GB_%~qMhdJH62Jfe diff --git a/Doc/latex/group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.tex b/Doc/latex/group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.tex index 6d9fd50..dbb5af5 100644 --- a/Doc/latex/group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.tex +++ b/Doc/latex/group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.tex @@ -25,6 +25,15 @@ struct \mbox{\hyperlink{struct_h_f___stack_frame__t}{HF\+\_\+\+Stack\+Frame\+\_\ \begin{DoxyCompactList}\small\item\em Проверка и вывод последнего Hard\+Fault-\/трейса из Flash. \end{DoxyCompactList}\item \+\_\+\+\_\+\+STATIC\+\_\+\+FORCEINLINE void \mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_gadd8e10e7ec3b0204f7f92062ecd452f7}{HF\+\_\+\+Handle\+Fault}} (void) \begin{DoxyCompactList}\small\item\em Обработчик Hard\+Fault. \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsubsubsubsubsection*{Variables} +\begin{DoxyCompactItemize} +\item +static \mbox{\hyperlink{struct_h_f___stack_frame__t}{HF\+\_\+\+Stack\+Frame\+\_\+t}} \texorpdfstring{$\ast$}{*} \mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_ga8bde6da023f9fc577e2004c56c09bc3e}{stack\+\_\+frame}} +\item +static uint32\+\_\+t \mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_ga5eaebf741ff2454968da6e6c28ac92b7}{stack\+\_\+dump}} \mbox{[}32\mbox{]} +\item +static void \texorpdfstring{$\ast$}{*} \mbox{\hyperlink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_gadb6ef6ffef1b50aec4abb32b03bceb79}{ret\+\_\+adr}} \mbox{[}10\mbox{]} = \{0\} +\end{DoxyCompactItemize} \doxysubsubsubsubsection{Detailed Description} @@ -135,3 +144,38 @@ Definition at line \mbox{\hyperlink{trace_8h_source_l00499}{499}} of file \mbox{ Definition at line \mbox{\hyperlink{trace_8h_source_l00540}{540}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}. + + +\label{doc-var-members} +\Hypertarget{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_doc-var-members} +\doxysubsubsubsubsection{Variable Documentation} +\Hypertarget{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_ga8bde6da023f9fc577e2004c56c09bc3e}\index{Hardfault trace defines@{Hardfault trace defines}!stack\_frame@{stack\_frame}} +\index{stack\_frame@{stack\_frame}!Hardfault trace defines@{Hardfault trace defines}} +\doxysubsubsubsubsubsection{\texorpdfstring{stack\_frame}{stack\_frame}} +{\footnotesize\ttfamily \label{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_ga8bde6da023f9fc577e2004c56c09bc3e} +\mbox{\hyperlink{struct_h_f___stack_frame__t}{HF\+\_\+\+Stack\+Frame\+\_\+t}}\texorpdfstring{$\ast$}{*} stack\+\_\+frame\hspace{0.3cm}{\ttfamily [static]}} + + + +Definition at line \mbox{\hyperlink{trace_8h_source_l00523}{523}} 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_ga5eaebf741ff2454968da6e6c28ac92b7}\index{Hardfault trace defines@{Hardfault trace defines}!stack\_dump@{stack\_dump}} +\index{stack\_dump@{stack\_dump}!Hardfault trace defines@{Hardfault trace defines}} +\doxysubsubsubsubsubsection{\texorpdfstring{stack\_dump}{stack\_dump}} +{\footnotesize\ttfamily \label{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_ga5eaebf741ff2454968da6e6c28ac92b7} +uint32\+\_\+t stack\+\_\+dump\mbox{[}32\mbox{]}\hspace{0.3cm}{\ttfamily [static]}} + + + +Definition at line \mbox{\hyperlink{trace_8h_source_l00524}{524}} 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_gadb6ef6ffef1b50aec4abb32b03bceb79}\index{Hardfault trace defines@{Hardfault trace defines}!ret\_adr@{ret\_adr}} +\index{ret\_adr@{ret\_adr}!Hardfault trace defines@{Hardfault trace defines}} +\doxysubsubsubsubsubsection{\texorpdfstring{ret\_adr}{ret\_adr}} +{\footnotesize\ttfamily \label{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t_gadb6ef6ffef1b50aec4abb32b03bceb79} +void\texorpdfstring{$\ast$}{*} ret\+\_\+adr\mbox{[}10\mbox{]} = \{0\}\hspace{0.3cm}{\ttfamily [static]}} + + + +Definition at line \mbox{\hyperlink{trace_8h_source_l00525}{525}} of file \mbox{\hyperlink{trace_8h_source}{trace.\+h}}. + diff --git a/Doc/latex/group___t_r_a_c_e___r_t_t___f_l_a_s_h.pdf b/Doc/latex/group___t_r_a_c_e___r_t_t___f_l_a_s_h.pdf index 1d09cf9005557b242292ea6ce47156a3d0fe5225..04f0bcb92cabac783f9a6edcef9937d827b1d7f1 100644 GIT binary patch delta 577 zcmV-H0>1sWaJO)Kp=%_3r^O zx)UbjTJ~`Wy>$GTsj4=3`HJA8H1b(Av*I4M{~>KIg&CYfa$bsM;(dgl!15)>-PU^T%W&1p49bd~fQ}!?H?%#Bi3O67DGm|Sfnn~J#1(>2io7RrCKE#9ANqSW$Sw=CFc!~S}tAvYMw3a8XIRPJ<&Zo delta 576 zcmV-G0>AyYaJF!;HZ_0SirX*{eb-maLrW71wj^JYE@5Gllx5krxK2tR%3@SSIHrkZ zWVv+zz8YIL4lNdDbTp%xIcLOxk{A+7*azV26^S6?E5gf;dl+KE%9tJ>n_F~!AL67XbZr9JHaL)u(PJ2N#O zCulN=y!moV%FuuK$BViWU&q8r25gA`Pr%VAm1|GuKpR5fbo3d+XU9b3HSsrOMxQ#V z3@oImj0P64bwFWpwzg^S!mvk6Bbsw1+d!Lgxg6v)N+4T%VHGU)cbxKsQO;;WS(Lt~ z(K||)w`JmZz*{fnsOwbQXLYK?R{wD&QupyS2S({MJhfLNZ6w@1&>D5 zZG*Yw>j*!A<4cXZo%7nO-<4GP<8~%wu3Ft0sai;;ob!=v-8<>W2uHY|$6I2DdUnE! zi!Oc3?s?2QzLjmJ>|fV*-(!;tHy{BrlPouyNm_snn7Jx!duDcEW^NZo#+J0sU~;%H zFaUCPw1B8Y5N37&hK|^#wPDQ<@gR1xzN(W5}B1Hu_3&SA3w z|M*rb@KaH!h5&&7T%H>E2^=V7@X|p$-BuPDxxb%9JXDpo-SK~+{bf7ob6NfF5o=m$ zQ(;sWhtRiHoKjs@7B3GeF2*8{M>8w#VE6CSW=h)LIYyTlt^VWzHXAh19;%VH)YXU` z!2g~-jXP(;;$2~MTjzOhbCZi)=E^(U>t%^ft}pc49st|>;W~H7(CpXt>MF)_3M=FU zO$NbWzTA@1H~xR=qON49W8x$Q*2n)R;AoV}^gw4%8$#f895VXPj)`EONt6;IeIusr&ev0i$#pp2}A$ls%sOA5n^bB<#?cf=45& zrp8?IZG@k|@ukMy&Ux+CpHiyqaXS+-Q;lwoR1HK^&iP0-?wxdFgd^O|<1Mj$Jv(8= aMHfTM?s?2QzLjmJ>|gBf-*mGvG%W#svhuV5 delta 484 zcmVV*)p)T1j1)5K#0qKJ76;wbbOh15E% z*AN`u8wo+iOWAq=5Ik4M7JdQ)0y(_)&{lP|0qWh~&mtb`TA6?Tc;EdpJ@loje-DV! zoiG{KvX4XPrQ^p;Rkgv(BZ7<4*k|#~N_yD-hqSpAW^hi>B|&RAd4TmA4YXY~!c?jr zu{{Le^QUoVO;~&=wd$IpC`_RXUWh{aCv!P3(aH9Oew#gDdp~UF7IDpf>n^rpJSVV1 zPSB(fI`j3Kl%ap|&u4k@Tpbf98PFmAKLH0VWv(2Z18oR_)zM`Po-Grh)5P77X?5&` z)UXh|(h8_gS3ZHo$(W|S3xXakHE&LpXnm#2<#LcyOO9;qxRJ2f-7&&qN*EofR9efQP-)quku*&je4^s68o`R3Y3s(cxqQ8QTAl=e?%$%k+4T+3LZ4C z+Xi!q_Yr;q%a*LyL_)I-1eUoHL?8ya;0A(KUo5_Cg4w*rO?g>&OcTL<#W%h!g4s6jJN3 z*?@n%wgUW&S3-LL;6K-;h93|BfgE0XXeYbI0QK(gXAuugBTaw5edu0I4}GeeUjt%P zSD1_|(Z?b5wc}+b>&D>W5y6+zcooDmE9qhT9n$8aFoSb~E(u!0&I4>VXrS$?DNHS! z5j%kYEq@wU)`Z2IO3AKej9u83omtIZnYOEv3HH;j8vEC)lewIi7-l=g$n62J;qR6U zi@5f`bQjwL?h}7VktH-KgwA}qrD>qz<5^rhSJ}i;26Tx3Pry+LkxNJLKqNw7m30~Y zXUk3KRB|U|N|s$A6f6o}D+zQ((-ncm$(UB(`F@X9inph_&?~8`<#G^M36A{jxe>6~ z-vuOyDG5H1b(qrlJqh0tvb-%52L|3caYv=6+CGc2=38a?$CgO!6Qou^LZ)$QjKD!i zCjUni=O0mfbf)Q1@kY0ptGJHv6Ii~)xY}8-z4%=hB7fY@gv^DOohpQec*;2+Qf+Te zKUg@_{e<2UJJhq|hM#5STDBKv*72=uGiCn*dphQIlj}7g0XCBiHkuKYBUtMpx|^LF g*a_AyVC8h;leacC14#==lkYYl2sH{NB}Gq03J-(@S^xk5 delta 541 zcmV+&0^#`KZ|&18fky}?S1!VdgycA{2CCW zy24~!i9QaYmyVa2tQ&)eM+9F=<5dvPtfYtScSxIy!VJy{x+G`~I}fm4qk*=orZBZ^ zMr;rMxBO{bSrZoTDkZy?F?MDbc49SqW7@7tCfHBAYV2RHj^=z?Vwmj|BR6}%hQC`b zEaKY#+MR6=xKDo|MV8Q{5IXbqnx=t@PbYEqTxAnW8PFmAKLH0NL@ph{1Ca=URn}$n zpDj0`Q^}o>DOq-fP_QU?tt8MDO;-dKM`K!j=leZcDc&CILa(H%mdin4B{=f8<3_+@ zcNdT#rX-*wCN%tbL&6V)EU(MNfr0l<+)?SNwlAWr`9@^^u_Y4w1gRB}kZGJ6BXAIs z$^Q|>`A5_qooRYdywNS@DlQ}Z1ePx`uC~@|Cw|w3$R9T|A#@^?(HIofCnh}jFSnDCWo1Gij f3Dz!P<#fuExHdHdJ_|;Z@HQX_GzujpMNdWwR^R^e diff --git a/Doc/latex/group___u_a_r_t___i_n_i_t.pdf b/Doc/latex/group___u_a_r_t___i_n_i_t.pdf index 589fe8365d5a9070dc6462174acb2e96a89fb14f..5d22ebd4cddff5c96ae682f27956d19264f656e6 100644 GIT binary patch delta 143 zcmV;A0C4}DX`E@W@iKpJX%fUNx}m`*O6S*Q;;6t!C+nc`Sld^5D8*X6+Y+h${4lZN z(Q%L}BXI6v*uI{PFyf>N*Rp*ola8-tn<)DS-a-Q8zq4{PDgo4LOpgEn delta 143 zcmV;A0C4}DX`E@W@iKoIjVKFlZ)os|()o3nI4bbb$vS8}*7j8%O0ib&wnS<_KTNE6 zbR4A0NF0IX=>Leq{3B?GPW0SsQ8hK@$}a=_1ePy3>^9bGD}R@{%pTVhAv4*iR_C&T xXv{es&&Ix)Zm4jayV<-Zwy$R+j5w*nwQQftq~mMZCd&Q+$_WDGud{M9DglqUNn`*3 diff --git a/Doc/latex/group___u_t_i_l_s___d_e_f_i_n_e_s.pdf b/Doc/latex/group___u_t_i_l_s___d_e_f_i_n_e_s.pdf index 8e5d91b5c1c5f7eda7b62f3649033f83f0b7e491..6b0c886ed661049bbe0a4d20feb539440d6446a3 100644 GIT binary patch delta 524 zcmV+n0`vXwYVc~XVKRT)irX*{eb-maLrW71u_RyWEMZ}jlx5krxK2tR$|AJ3>X;^$ zk>t|+eI;8q4lOqJ=x9bWbIynWMiImqku`)kMj?bzj7SRMIzkjflwd?5P6(m|QtPnU zKybXa0)mWJLL&eOp6gP>51@b{hnF7O$*wU#(Ea@^;-P7z>9>Cm-K*)LPj&NaK#b}N zlW`^bI0t?0c$vw%G4AjPyO)r7MdO*3^sxO7X>(DS!8vg*iL-{C2iR%xd<^v|W`=IlQFHn3xXc46mL&;p;uB>%jF=j65R2(=SIL{ ze@8Km38o+LI!sCO9*6HRUf!1J1_s`GaYv=6+CGc2=39UH$CilgLlX)F<7u24BitY) zlmDX==O0mfbf)Q1@kX~US8*NTC$M~pakaBvd-1z2MEk`@sx8uq}tw` zez4q7_Y-`>2+8-A9RZ`od$S;x1s&6NEMe0Sz{3T19&b98cLVQmU!Ze(v_Y6>zk OATS_rVrsKpG!p^RZ35E( delta 524 zcmV+n0`vXwYVc~XVKRShYuhjo{;pqfA2yayuqF9rX$gfU8Kra^u9LA3qX^a39J9nS zl024wKgpJj!-kE0dUU6|d!7>kjABSIBDWCX1Vs?V2_h?qZev6-#3@D;l9V7yU}YWF zYX}dQRzR5XN@xTC;d5PT_yH6!fe5E)09LQoKFZg$|^umdin4CAi~n$Blr+ z?v7%b5KIY9Fo{0i;OGO!%j+`Tz`%Pi?x^%s+ZR#Rd?SDV*b=dQXi9-#JdIOhgd2o( z@_%&V{3B|Q&NMwJ-ssllDlQ}Z1ePx`uC~@|Cw|w3$R9T|A#-bu>nX-QYX8-183T19&b98cLVQmU!Ze(v_Y6>zk OATS_rVrsKpG!p?(efgUJ diff --git a/Doc/latex/group___u_t_i_l_s___d_e_f_i_n_e_s.tex b/Doc/latex/group___u_t_i_l_s___d_e_f_i_n_e_s.tex index 8571583..5797503 100644 --- a/Doc/latex/group___u_t_i_l_s___d_e_f_i_n_e_s.tex +++ b/Doc/latex/group___u_t_i_l_s___d_e_f_i_n_e_s.tex @@ -56,7 +56,7 @@ Collaboration diagram for Utils defines\+: \end{DoxyParams} Макрос использует memset для обнуления всей памяти структуры. Используется для быстрой и безопасной инициализации переменных структур до нуля. -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00155}{155}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00154}{154}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. \Hypertarget{group___u_t_i_l_s___d_e_f_i_n_e_s_gabf45f2b60eedf80cf9d1dbe4302a741e}\index{Utils defines@{Utils defines}!Divide\_Up@{Divide\_Up}} \index{Divide\_Up@{Divide\_Up}!Utils defines@{Utils defines}} @@ -85,7 +85,7 @@ Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00155}{155}} of file \end{DoxyReturn} Если результат деления без остатка\+: он возвращается как есть Если с остатком -\/ округляется вверх -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00166}{166}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00165}{165}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. \Hypertarget{group___u_t_i_l_s___d_e_f_i_n_e_s_ga0f22e895ac7781c3d1b68fee182c4291}\index{Utils defines@{Utils defines}!ByteSwap16@{ByteSwap16}} \index{ByteSwap16@{ByteSwap16}!Utils defines@{Utils defines}} @@ -112,7 +112,7 @@ Swap between Little Endian and Big Endian. \end{DoxyReturn} Переключения между двумя типами хранения слова\+: HI-\/\+LO байты и LO-\/\+HI байты. -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00174}{174}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00173}{173}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. \Hypertarget{group___u_t_i_l_s___d_e_f_i_n_e_s_ga996f7be338ccb40d1a2a5abc1ad61759}\index{Utils defines@{Utils defines}!ABS@{ABS}} \index{ABS@{ABS}!Utils defines@{Utils defines}} @@ -139,5 +139,5 @@ Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00174}{174}} of file \end{DoxyReturn} Берет число по модулю. Хз как работает библиотечный abs в stdlib.\+h, мб это быстрее, но вряд ли конечно. -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00182}{182}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00181}{181}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. diff --git a/Doc/latex/index.tex b/Doc/latex/index.tex index b2c5da4..ac123f4 100644 --- a/Doc/latex/index.tex +++ b/Doc/latex/index.tex @@ -9,7 +9,7 @@ My\+Libs -\/ это набор библиотек для удобной рабо \begin{DoxyItemize} \item Макросы для задержек и утилит (\doxylink{group___d_e_l_a_y_s___d_e_f_i_n_e_s}{Delays defines} и \doxylink{group___u_t_i_l_s___d_e_f_i_n_e_s}{Utils defines}) \item Трекеры для статистики и отладки (\doxylink{group___t_r_a_c_k_e_r_s}{Trackers defines} и \doxylink{group___t_r_a_c_e}{Trace defines}) -\item Эволюционный алгоритм для оптимизации параметров (\doxylink{group___e_v_o_l_v_e___o_p_t_i_m_i_z_e_r}{Evolve optimizer}) +\item Эволюционный алгоритм для оптимизации параметров (\doxylink{group___g_e_n___o_p_t_i_m_i_z_e_r}{Genetic optimizer}) \item Битовый доступ к регистрам через union (\doxylink{group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s}{Bit access defines}) \end{DoxyItemize}\hypertarget{index_trace_module}{}\doxysubsubsection{\texorpdfstring{Трассировка \protect\doxylink{group___t_r_a_c_e}{Trace defines}}{Трассировка {Trace defines}}}\label{index_trace_module} @@ -49,7 +49,7 @@ My\+Libs -\/ это набор библиотек для удобной рабо \DoxyCodeLine{│\ \ \ │\ \ \ ├──\ mylibs\_config.h\ \ \ \ \ \ \#\ Конфигурация\ библиотек} \DoxyCodeLine{│\ \ \ │\ \ \ ├──\ mylibs\_defs.h\ \ \ \ \ \ \ \ \#\ Общие\ определения\ и\ макросы} \DoxyCodeLine{│\ \ \ │\ \ \ ├──\ bit\_access.h\ \ \ \ \ \ \ \ \ \#\ Битовый\ доступ\ к\ регистрам} -\DoxyCodeLine{│\ \ \ │\ \ \ ├──\ evolve\_optimizer.h\ \ \ \#\ Оптимизатор\ (генетический\ алгоритм)} +\DoxyCodeLine{│\ \ \ │\ \ \ ├──\ gen\_optimizer.h\ \ \ \#\ Оптимизатор\ (генетический\ алгоритм)} \DoxyCodeLine{│\ \ \ │\ \ \ ├──\ trackers.h\ \ \ \ \ \ \ \ \ \ \ \#\ Трекеры\ для\ отладки} \DoxyCodeLine{│\ \ \ │\ \ \ └──\ trace.h\ \ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Трассировка\ и\ логирование} \DoxyCodeLine{│\ \ \ └──\ src/} diff --git a/Doc/latex/mainpage_8h_source.tex b/Doc/latex/mainpage_8h_source.tex index df9df03..194c8be 100644 --- a/Doc/latex/mainpage_8h_source.tex +++ b/Doc/latex/mainpage_8h_source.tex @@ -17,7 +17,7 @@ \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00014}00014\ \textcolor{comment}{@subsubsection\ utils\_module\ Общие\ утилиты\ (@ref\ MYLIBS\_DEFINES)}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00015}00015\ \textcolor{comment}{-\/\ Макросы\ для\ задержек\ и\ утилит\ (@ref\ DELAYS\_DEFINES\ и\ @ref\ UTILS\_DEFINES)}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00016}00016\ \textcolor{comment}{-\/\ Трекеры\ для\ статистики\ и\ отладки\ \ (@ref\ TRACKERS\ и\ @ref\ TRACE)}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00017}00017\ \textcolor{comment}{-\/\ Эволюционный\ алгоритм\ для\ оптимизации\ параметров\ \ (@ref\ EVOLVE\_OPTIMIZER)}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00017}00017\ \textcolor{comment}{-\/\ Эволюционный\ алгоритм\ для\ оптимизации\ параметров\ \ (@ref\ GEN\_OPTIMIZER)}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00018}00018\ \textcolor{comment}{-\/\ Битовый\ доступ\ к\ регистрам\ через\ union\ \ (@ref\ BIT\_ACCESS\_DEFINES)}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00019}00019\ \textcolor{comment}{}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00020}00020\ \textcolor{comment}{@subsubsection\ trace\_module\ Трассировка\ @ref\ TRACE}} @@ -53,7 +53,7 @@ \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00050}00050\ \textcolor{comment}{│\ \ \ │\ \ \ ├──\ mylibs\_config.h\ \ \ \ \ \ \#\ Конфигурация\ библиотек}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00051}00051\ \textcolor{comment}{│\ \ \ │\ \ \ ├──\ mylibs\_defs.h\ \ \ \ \ \ \ \ \#\ Общие\ определения\ и\ макросы}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00052}00052\ \textcolor{comment}{│\ \ \ │\ \ \ ├──\ bit\_access.h\ \ \ \ \ \ \ \ \ \#\ Битовый\ доступ\ к\ регистрам}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00053}00053\ \textcolor{comment}{│\ \ \ │\ \ \ ├──\ evolve\_optimizer.h\ \ \ \#\ Оптимизатор\ (генетический\ алгоритм)}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00053}00053\ \textcolor{comment}{│\ \ \ │\ \ \ ├──\ gen\_optimizer.h\ \ \ \#\ Оптимизатор\ (генетический\ алгоритм)}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00054}00054\ \textcolor{comment}{│\ \ \ │\ \ \ ├──\ trackers.h\ \ \ \ \ \ \ \ \ \ \ \#\ Трекеры\ для\ отладки}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00055}00055\ \textcolor{comment}{│\ \ \ │\ \ \ └──\ trace.h\ \ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Трассировка\ и\ логирование}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00056}00056\ \textcolor{comment}{│\ \ \ └──\ src/}} diff --git a/Doc/latex/mylibs__config_8h.tex b/Doc/latex/mylibs__config_8h.tex index dceb968..373df53 100644 --- a/Doc/latex/mylibs__config_8h.tex +++ b/Doc/latex/mylibs__config_8h.tex @@ -57,15 +57,19 @@ This graph shows which files directly or indirectly include this file\+: \begin{DoxyCompactList}\small\item\em Конец RAM памяти (чтобы во время анализа стека не выйти за пределы) \end{DoxyCompactList}\item \#define \mbox{\hyperlink{group___t_r_a_c_e___c_o_n_f_i_g_ga4222e0e400ad81737cefcabeb03fd23b}{GPIO\+\_\+\+TRACE\+\_\+\+ENABLE}} \begin{DoxyCompactList}\small\item\em Включить GPIO трассировку \end{DoxyCompactList}\item -\#define \mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga2cac097081444a7a9b040f4b11550e47}{ENABLE\+\_\+\+EVOLVE\+\_\+\+OPTIMIZATION}} +\#define \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_gae6d1db3c0b21f67cb0db2673d207b62c}{GEN\+\_\+\+OPTIMIZATION\+\_\+\+ENABLE}} \begin{DoxyCompactList}\small\item\em Включить оптимизацию параметров \end{DoxyCompactList}\item -\#define \mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga80d6162495fc3776d8902610657d4fee}{EVOLVE\+\_\+\+MAX\+\_\+\+PARAMS}}~20 +\#define \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga8daf4b266a95353d580bd7946f47c0ab}{GEN\+\_\+\+MAX\+\_\+\+PARAMS}}~20 \begin{DoxyCompactList}\small\item\em Максимальное количество параметров \end{DoxyCompactList}\item -\#define \mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga7c1396e5c95c766afccdb45cbfcf5971}{EVOLVE\+\_\+\+MAX\+\_\+\+CANDIDATES}}~100 +\#define \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga201cffde04ebc6540869c74bd1dae869}{GEN\+\_\+\+MAX\+\_\+\+CANDIDATES}}~100 \begin{DoxyCompactList}\small\item\em Максимальное количество кандидатов для обучения \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga67c3c54503b9bbd5d175ac46d37866d9}{BENCH\+\_\+\+TIME\+\_\+\+ENABLE}} +\begin{DoxyCompactList}\small\item\em Включить бенч времени \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga74fdf777ceefa5e7d67120fbda4cde52}{BENCH\+\_\+\+TIME\+\_\+\+MAX\+\_\+\+CHANNELS}}~16 +\begin{DoxyCompactList}\small\item\em Максимальное количество каналов измерения \end{DoxyCompactList}\item \#define \mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga9c853b02c22f26023c34d1d404b6d653}{local\+\_\+time}}() \begin{DoxyCompactList}\small\item\em Локальное время \end{DoxyCompactList}\item -\#define \mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga66560656d080d6551627a19dfb847c66}{INCLUDE\+\_\+\+EVOLVE\+\_\+\+OPTIMIZER}} +\#define \mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga3cdc9ef47fd3ff080d38481295327692}{INCLUDE\+\_\+\+GEN\+\_\+\+OPTIMIZER}} \begin{DoxyCompactList}\small\item\em Подключить библиотеку для оптимизации параметров \end{DoxyCompactList}\item \#define \mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_gaf4ddb2a71ec0d05c2480e197cd17c0be}{INCLUDE\+\_\+\+BIT\+\_\+\+ACCESS\+\_\+\+LIB}} \begin{DoxyCompactList}\small\item\em Подключить библиотеку с typedef с битовыми полями \end{DoxyCompactList}\item diff --git a/Doc/latex/mylibs__config_8h__dep__incl.md5 b/Doc/latex/mylibs__config_8h__dep__incl.md5 index 2b33d81..1088441 100644 --- a/Doc/latex/mylibs__config_8h__dep__incl.md5 +++ b/Doc/latex/mylibs__config_8h__dep__incl.md5 @@ -1 +1 @@ -549ad4f84281da5919a8182a1cfa8419 \ No newline at end of file +26252fa1f097da1581d5603686501d37 \ No newline at end of file diff --git a/Doc/latex/mylibs__config_8h__dep__incl.pdf b/Doc/latex/mylibs__config_8h__dep__incl.pdf index ca5df57ecaeec2cfb2542f4750ef71f6e04524b3..c6a3764a6fa07e957ce4fdfefafcaf2066815528 100644 GIT binary patch delta 25064 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 V$H5UxP*g}j7>k8PSyu(?e*wFAYWn~H diff --git a/Doc/latex/mylibs__config_8h__incl.pdf b/Doc/latex/mylibs__config_8h__incl.pdf index bb3dab5a7903be952850b83931116bc339d10765..8d7ea2cfaec61b4da581c6537171f60e69208e6e 100644 GIT binary patch delta 315 zcmV-B0mS~?qygQe0kAJnfBuTOlqv;H;=0;J_OJ>|DFtzRD?NlbxPf9MiKYARo9JpO zInBqLy!RLiB%pi9NWg$*G@v=8`7S6+NZxNFLelUaO#lGNtLzMX00ROoe9ov+(_n!H z$K$-wXw^*uHH3mot$@a~hzW#OYe#cPl9~3Jk5?&7taKkm%QqUif0b&exkU);10yV> zgyrNpE$IGqF|tI1z1cyQK!zu_8v4xelWZ`etGQa>&(agR|~t{_|J!8*Bt-KIZl zHH}b~e(>|+G1C=Y9MyaNt@IFLa0A6i5=-~rH__En za+;4fdG9e4kkDtykuab+CA5I7*pae?^!+wUNE_ZuO8_8!Rh@+oV1UrV=Zq>n4Gt(d z9_Nk5=x!3yKqR;_8fZfI2|{#rZnTFqooR3QcvZqC+VpX}d}Abce@YKEcM_udz>wt> z8O0oFRy<+$h#0RXf3e`fTZjFI8yRwhWHWe^o#H3`a;e#E6m$3V@_(kEC z=+f-#J~Um1SSc3lQmKx M2s8>MB}Gq03iyi_@% diff --git a/Doc/latex/mylibs__config_8h_source.tex b/Doc/latex/mylibs__config_8h_source.tex index ae9b037..13d6468 100644 --- a/Doc/latex/mylibs__config_8h_source.tex +++ b/Doc/latex/mylibs__config_8h_source.tex @@ -59,44 +59,61 @@ \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00055}00055\ } \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00056}00056\ \textcolor{comment}{}} \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00057}00057\ \textcolor{comment}{/**\ }} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00058}00058\ \textcolor{comment}{\ \ *\ @addtogroup\ EVOLVE\_CONFIG\ \ \ Evolve\ configs}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00058}00058\ \textcolor{comment}{\ \ *\ @addtogroup\ GEN\_CONFIG\ \ \ Genetic\ configs}} \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00059}00059\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ MYLIBS\_CONFIG}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00060}00060\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Конфигурация\ однослойного\ персептрона\ и\ алгоритма\ обучения}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00060}00060\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Конфигурация\ генетического\ алгоритма\ обучения}} \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00061}00061\ \textcolor{comment}{\ \ *\ @\{}} \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00062}00062\ \textcolor{comment}{\ \ */}} \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00063}00063\ } -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00064}\mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga2cac097081444a7a9b040f4b11550e47}{00064}}\ \textcolor{preprocessor}{\#define\ ENABLE\_EVOLVE\_OPTIMIZATION\ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Включить\ оптимизацию\ параметров}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00065}\mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga80d6162495fc3776d8902610657d4fee}{00065}}\ \textcolor{preprocessor}{\#define\ EVOLVE\_MAX\_PARAMS\ \ \ \ \ \ \ 20\ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Максимальное\ количество\ параметров}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00066}\mbox{\hyperlink{group___e_v_o_l_v_e___c_o_n_f_i_g_ga7c1396e5c95c766afccdb45cbfcf5971}{00066}}\ \textcolor{preprocessor}{\#define\ EVOLVE\_MAX\_CANDIDATES\ \ \ 100\ \ \ \ \ \ \ }\textcolor{comment}{///<\ Максимальное\ количество\ кандидатов\ для\ обучения}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00064}\mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_gae6d1db3c0b21f67cb0db2673d207b62c}{00064}}\ \textcolor{preprocessor}{\#define\ GEN\_OPTIMIZATION\_ENABLE\ \ \ \ \ \ \ }\textcolor{comment}{///<\ Включить\ оптимизацию\ параметров}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00065}\mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga8daf4b266a95353d580bd7946f47c0ab}{00065}}\ \textcolor{preprocessor}{\#define\ GEN\_MAX\_PARAMS\ \ \ \ \ \ \ 20\ \ \ \ \ \ \ }\textcolor{comment}{///<\ Максимальное\ количество\ параметров}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00066}\mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga201cffde04ebc6540869c74bd1dae869}{00066}}\ \textcolor{preprocessor}{\#define\ GEN\_MAX\_CANDIDATES\ \ \ 100\ \ \ \ \ \ }\textcolor{comment}{///<\ Максимальное\ количество\ кандидатов\ для\ обучения}} \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00067}00067\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00068}00068\ \textcolor{comment}{/**\ EVOLVE\_CONFIG}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00068}00068\ \textcolor{comment}{/**\ GEN\_CONFIG}} \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00069}00069\ \textcolor{comment}{\ \ *\ @\}}} \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00070}00070\ \textcolor{comment}{\ \ */}} \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00071}00071\ } \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00072}00072\ \textcolor{comment}{}} \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00073}00073\ \textcolor{comment}{/**\ }} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00074}00074\ \textcolor{comment}{\ \ *\ @addtogroup\ LIBS\_CONFIG\ \ \ Libraries\ configs}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00074}00074\ \textcolor{comment}{\ \ *\ @addtogroup\ GEN\_CONFIG\ \ \ Genetic\ configs}} \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00075}00075\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ MYLIBS\_CONFIG}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00076}00076\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Подключение\ различных\ модулей\ библиотеки}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00076}00076\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Конфигурация\ генетического\ алгоритма\ обучения}} \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00077}00077\ \textcolor{comment}{\ \ *\ @\{}} \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00078}00078\ \textcolor{comment}{\ \ */}} \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00079}00079\ } -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00080}\mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga9c853b02c22f26023c34d1d404b6d653}{00080}}\ \textcolor{preprocessor}{\#define\ local\_time()\ \ \ \ \ \ uwTick\ \ \ \ \ \ }\textcolor{comment}{///<\ Локальное\ время}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00081}00081\ } -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00082}\mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga66560656d080d6551627a19dfb847c66}{00082}}\ \textcolor{preprocessor}{\#define\ INCLUDE\_EVOLVE\_OPTIMIZER\ \ \ \ \ \ }\textcolor{comment}{///<\ Подключить\ библиотеку\ для\ оптимизации\ параметров}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00083}\mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_gaf4ddb2a71ec0d05c2480e197cd17c0be}{00083}}\ \textcolor{preprocessor}{\#define\ INCLUDE\_BIT\_ACCESS\_LIB\ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Подключить\ библиотеку\ с\ typedef\ с\ битовыми\ полями}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00084}\mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga4403055986b70bb02b8d37073a122e32}{00084}}\ \textcolor{preprocessor}{\#define\ INCLUDE\_TRACKERS\_LIB\ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Подключить\ библиотеку\ с\ трекерами}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00085}\mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga0a3ca94b616997069dd53e2c6c2687d7}{00085}}\ \textcolor{preprocessor}{\#define\ INCLUDE\_TRACE\_LIB\ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Подключить\ библиотеку\ с\ трейсами}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00086}\mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga181a46326e46b60afb160190832c7281}{00086}}\ \textcolor{preprocessor}{\#define\ INCLUDE\_GENERAL\_PERIPH\_LIBS\ \ \ }\textcolor{comment}{///<\ Подключить\ библиотеку\ с\ периферией}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00087}\mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga57c369737d5c0cfdb7baeecba0a4b151}{00087}}\ \textcolor{preprocessor}{\#define\ FREERTOS\_DELAY\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Использовать\ FreeRTOS\ задержку,\ вместо\ HAL}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00088}00088\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00089}00089\ \textcolor{comment}{/**\ LIBS\_CONFIG}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00090}00090\ \textcolor{comment}{\ \ *\ @\}}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00091}00091\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00092}00092\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00093}00093\ \textcolor{comment}{/**\ MYLIBS\_CONFIG}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00094}00094\ \textcolor{comment}{\ \ *\ @\}}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00080}00080\ } +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00081}\mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga67c3c54503b9bbd5d175ac46d37866d9}{00081}}\ \textcolor{preprocessor}{\#define\ BENCH\_TIME\_ENABLE\ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Включить\ бенч\ времени}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00082}\mbox{\hyperlink{group___g_e_n___c_o_n_f_i_g_ga74fdf777ceefa5e7d67120fbda4cde52}{00082}}\ \textcolor{preprocessor}{\#define\ BENCH\_TIME\_MAX\_CHANNELS\ 16\ \ \ \ }\textcolor{comment}{///<\ Максимальное\ количество\ каналов\ измерения}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00083}00083\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00084}00084\ \textcolor{comment}{/**\ GEN\_CONFIG}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00085}00085\ \textcolor{comment}{\ \ *\ @\}}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00086}00086\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00087}00087\ } +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00088}00088\ } +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00089}00089\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00090}00090\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00091}00091\ \textcolor{comment}{\ \ *\ @addtogroup\ LIBS\_CONFIG\ \ \ Libraries\ configs}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00092}00092\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ MYLIBS\_CONFIG}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00093}00093\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Подключение\ различных\ модулей\ библиотеки}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00094}00094\ \textcolor{comment}{\ \ *\ @\{}} \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00095}00095\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00096}00096\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\_\_MYLIBS\_CONFIG\_H\_}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00096}00096\ } +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00097}\mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga9c853b02c22f26023c34d1d404b6d653}{00097}}\ \textcolor{preprocessor}{\#define\ local\_time()\ \ \ \ \ \ uwTick\ \ \ \ \ \ }\textcolor{comment}{///<\ Локальное\ время}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00098}00098\ } +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00099}\mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga3cdc9ef47fd3ff080d38481295327692}{00099}}\ \textcolor{preprocessor}{\#define\ INCLUDE\_GEN\_OPTIMIZER\ \ \ \ \ \ }\textcolor{comment}{///<\ Подключить\ библиотеку\ для\ оптимизации\ параметров}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00100}\mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_gaf4ddb2a71ec0d05c2480e197cd17c0be}{00100}}\ \textcolor{preprocessor}{\#define\ INCLUDE\_BIT\_ACCESS\_LIB\ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Подключить\ библиотеку\ с\ typedef\ с\ битовыми\ полями}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00101}\mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga4403055986b70bb02b8d37073a122e32}{00101}}\ \textcolor{preprocessor}{\#define\ INCLUDE\_TRACKERS\_LIB\ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Подключить\ библиотеку\ с\ трекерами}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00102}\mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga0a3ca94b616997069dd53e2c6c2687d7}{00102}}\ \textcolor{preprocessor}{\#define\ INCLUDE\_TRACE\_LIB\ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Подключить\ библиотеку\ с\ трейсами}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00103}\mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga181a46326e46b60afb160190832c7281}{00103}}\ \textcolor{preprocessor}{\#define\ INCLUDE\_GENERAL\_PERIPH\_LIBS\ \ \ }\textcolor{comment}{///<\ Подключить\ библиотеку\ с\ периферией}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00104}\mbox{\hyperlink{group___l_i_b_s___c_o_n_f_i_g_ga57c369737d5c0cfdb7baeecba0a4b151}{00104}}\ \textcolor{preprocessor}{\#define\ FREERTOS\_DELAY\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Использовать\ FreeRTOS\ задержку,\ вместо\ HAL}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00105}00105\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00106}00106\ \textcolor{comment}{/**\ LIBS\_CONFIG}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00107}00107\ \textcolor{comment}{\ \ *\ @\}}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00108}00108\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00109}00109\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00110}00110\ \textcolor{comment}{/**\ MYLIBS\_CONFIG}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00111}00111\ \textcolor{comment}{\ \ *\ @\}}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00112}00112\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00113}00113\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\_\_MYLIBS\_CONFIG\_H\_}} \end{DoxyCode} diff --git a/Doc/latex/mylibs__defs_8h__dep__incl.md5 b/Doc/latex/mylibs__defs_8h__dep__incl.md5 index ceb12cf..186de66 100644 --- a/Doc/latex/mylibs__defs_8h__dep__incl.md5 +++ b/Doc/latex/mylibs__defs_8h__dep__incl.md5 @@ -1 +1 @@ -cdcbb90c558ed039bffebd441292f445 \ No newline at end of file +69bb9960f1fbfb4580bf7e3b97eade6b \ No newline at end of file diff --git a/Doc/latex/mylibs__defs_8h__dep__incl.pdf b/Doc/latex/mylibs__defs_8h__dep__incl.pdf index a81b136b841e59bda1a3fc9acb059f70811e0b39..ab88f79f39124a557091fe65b01a817806d0fc99 100644 GIT binary patch delta 24992 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 N;zwg(kX4sM`+o@`Oh^C# delta 25319 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 Ab^rhX delta 146 zcmV;D0B!&OrUCz^0kG0he=tfSLWAW;5_}+Je%mH)2)uV{4$_XjeUZnKuhk#hBC#K% z3|J74`%@W-%Ex2;qgHMGkAxjMQE;z$)znx^TnG3GEMIasZEVz5zLi4ekL!t$xolLc zg=`=iYfiVau}`I2Biv$K$?%rgzMl;@{HzK$vV9?wiEm|_DEk+B0}S9Nvs6+m0U^gl A4FCWD diff --git a/Doc/latex/mylibs__defs_8h_source.tex b/Doc/latex/mylibs__defs_8h_source.tex index 5261bae..dceb954 100644 --- a/Doc/latex/mylibs__defs_8h_source.tex +++ b/Doc/latex/mylibs__defs_8h_source.tex @@ -141,60 +141,60 @@ \DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00137}00137\ } \DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00138}00138\ } \DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00139}00139\ \textcolor{comment}{/***************************************************************************}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00140}00140\ \textcolor{comment}{*******************************UTIL\_DEFINES********************************/}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00141}00141\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ dummy;\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00142}00142\ \textcolor{comment}{/**\ }} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00143}00143\ \textcolor{comment}{\ \ *\ @addtogroup\ UTILS\_DEFINES\ \ \ \ \ \ Utils\ defines}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00144}00144\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ MYLIBS\_DEFINES}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00145}00145\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Общие\ вспомогательные\ макросы}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00146}00146\ \textcolor{comment}{\ \ *\ @\{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00147}00147\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00148}00148\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00149}00149\ \textcolor{comment}{/**}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00150}00150\ \textcolor{comment}{\ *\ @brief\ Обнуление\ структуры.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00151}00151\ \textcolor{comment}{\ *\ @param\ \_struct\_\ Структура,\ которую\ нужно\ обнулить.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00152}00152\ \textcolor{comment}{\ *\ @details\ Макрос\ использует\ memset\ для\ обнуления\ всей\ памяти\ структуры.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00153}00153\ \textcolor{comment}{\ *\ Используется\ для\ быстрой\ и\ безопасной\ инициализации\ переменных\ структур\ до\ нуля.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00154}00154\ \textcolor{comment}{\ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00155}\mbox{\hyperlink{group___u_t_i_l_s___d_e_f_i_n_e_s_gaf5e598848326d48e86167e5099a029be}{00155}}\ \textcolor{preprocessor}{\#define\ ClearStruct(\_struct\_)\ \ \ \ \ memset(\&(\_struct\_),\ 0,\ sizeof(\_struct\_))}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00156}00156\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00157}00157\ \textcolor{comment}{/**}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00158}00158\ \textcolor{comment}{\ \ *\ @brief\ \ Деление\ с\ округлением\ вверх}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00159}00159\ \textcolor{comment}{\ \ *\ @param\ \_val\_\ Делимое.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00160}00160\ \textcolor{comment}{\ \ *\ @param\ \_div\_\ Делитель.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00161}00161\ \textcolor{comment}{\ \ *\ @return\ Результат\ деления,\ округленный\ вверх.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00162}00162\ \textcolor{comment}{\ \ *\ @details\ \ Если\ результат\ деления\ без\ остатка:\ он\ возвращается\ как\ есть}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00163}00163\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ Если\ с\ остатком\ -\/\ округляется\ вверх}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00164}00164\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00165}00165\ \textcolor{comment}{//\#define\ Divide\_Up(\_val\_,\ \_div\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (((\_val\_)\%(\_div\_))?\ (\_val\_)/(\_div\_)+1\ :\ (\_val\_)/\_div\_)\ \ /*\ через\ тернарный\ оператор\ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00166}\mbox{\hyperlink{group___u_t_i_l_s___d_e_f_i_n_e_s_gabf45f2b60eedf80cf9d1dbe4302a741e}{00166}}\ \textcolor{preprocessor}{\#define\ Divide\_Up(\_val\_,\ \_div\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((\_val\_\ -\/\ 1)\ /\ \_div\_)\ +\ 1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{/*\ через\ мат\ выражение\ */}\textcolor{preprocessor}{\ }} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00167}00167\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00168}00168\ \textcolor{comment}{/**\ }} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00169}00169\ \textcolor{comment}{\ \ *\ @brief\ \ Swap\ between\ Little\ Endian\ and\ Big\ Endian}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00170}00170\ \textcolor{comment}{\ \ *\ @param\ v\ Исходное\ 16-\/битное\ значение.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00171}00171\ \textcolor{comment}{\ \ *\ @return\ Результат\ с\ поменяными\ местами\ старшим\ и\ младшим\ байтом.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00172}00172\ \textcolor{comment}{\ \ *\ @details\ \ Переключения\ между\ двумя\ типами\ хранения\ слова:\ HI-\/LO\ байты\ и\ LO-\/HI\ байты.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00173}00173\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00174}\mbox{\hyperlink{group___u_t_i_l_s___d_e_f_i_n_e_s_ga0f22e895ac7781c3d1b68fee182c4291}{00174}}\ \textcolor{preprocessor}{\#define\ ByteSwap16(v)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (((v\&0xFF00)\ >>\ (8))\ |\ ((v\&0x00FF)\ <<\ (8)))}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00175}00175\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00176}00176\ \textcolor{comment}{/**\ }} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00177}00177\ \textcolor{comment}{\ \ *\ @brief\ \ Абсолютное\ значение\ числа}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00178}00178\ \textcolor{comment}{\ \ *\ @param\ x\ Число.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00179}00179\ \textcolor{comment}{\ \ *\ @return\ Абсолютное\ значение\ числа\ x.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00180}00180\ \textcolor{comment}{\ \ *\ @details\ \ Берет\ число\ по\ модулю.\ Хз\ как\ работает\ библиотечный\ abs\ в\ stdlib.h,\ мб\ это\ быстрее,\ но\ вряд\ ли\ конечно.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00181}00181\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00182}\mbox{\hyperlink{group___u_t_i_l_s___d_e_f_i_n_e_s_ga996f7be338ccb40d1a2a5abc1ad61759}{00182}}\ \textcolor{preprocessor}{\#define\ ABS(x)\ (\ ((x)\ >\ 0)?\ (x)\ :\ -\/(x))}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00183}00183\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00184}00184\ \textcolor{comment}{/**\ UTILS\_DEFINES}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00185}00185\ \textcolor{comment}{\ \ *\ @\}}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00186}00186\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00187}00187\ \ \ } -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00188}00188\ } -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00189}00189\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00190}00190\ \textcolor{comment}{/**\ }} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00191}00191\ \textcolor{comment}{\ *\ @cond\ LIBS\_INTERNAL}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00192}00192\ \textcolor{comment}{\ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00193}00193\ } +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00140}00140\ \textcolor{comment}{*******************************UTIL\_DEFINES********************************/}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00141}00141\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00142}00142\ \textcolor{comment}{\ \ *\ @addtogroup\ UTILS\_DEFINES\ \ \ \ \ \ Utils\ defines}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00143}00143\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ MYLIBS\_DEFINES}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00144}00144\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Общие\ вспомогательные\ макросы}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00145}00145\ \textcolor{comment}{\ \ *\ @\{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00146}00146\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00147}00147\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00148}00148\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00149}00149\ \textcolor{comment}{\ *\ @brief\ Обнуление\ структуры.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00150}00150\ \textcolor{comment}{\ *\ @param\ \_struct\_\ Структура,\ которую\ нужно\ обнулить.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00151}00151\ \textcolor{comment}{\ *\ @details\ Макрос\ использует\ memset\ для\ обнуления\ всей\ памяти\ структуры.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00152}00152\ \textcolor{comment}{\ *\ Используется\ для\ быстрой\ и\ безопасной\ инициализации\ переменных\ структур\ до\ нуля.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00153}00153\ \textcolor{comment}{\ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00154}\mbox{\hyperlink{group___u_t_i_l_s___d_e_f_i_n_e_s_gaf5e598848326d48e86167e5099a029be}{00154}}\ \textcolor{preprocessor}{\#define\ ClearStruct(\_struct\_)\ \ \ \ \ memset(\&(\_struct\_),\ 0,\ sizeof(\_struct\_))}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00155}00155\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00156}00156\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00157}00157\ \textcolor{comment}{\ \ *\ @brief\ \ Деление\ с\ округлением\ вверх}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00158}00158\ \textcolor{comment}{\ \ *\ @param\ \_val\_\ Делимое.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00159}00159\ \textcolor{comment}{\ \ *\ @param\ \_div\_\ Делитель.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00160}00160\ \textcolor{comment}{\ \ *\ @return\ Результат\ деления,\ округленный\ вверх.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00161}00161\ \textcolor{comment}{\ \ *\ @details\ \ Если\ результат\ деления\ без\ остатка:\ он\ возвращается\ как\ есть}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00162}00162\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ Если\ с\ остатком\ -\/\ округляется\ вверх}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00163}00163\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00164}00164\ \textcolor{comment}{//\#define\ Divide\_Up(\_val\_,\ \_div\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (((\_val\_)\%(\_div\_))?\ (\_val\_)/(\_div\_)+1\ :\ (\_val\_)/\_div\_)\ \ /*\ через\ тернарный\ оператор\ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00165}\mbox{\hyperlink{group___u_t_i_l_s___d_e_f_i_n_e_s_gabf45f2b60eedf80cf9d1dbe4302a741e}{00165}}\ \textcolor{preprocessor}{\#define\ Divide\_Up(\_val\_,\ \_div\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((\_val\_\ -\/\ 1)\ /\ \_div\_)\ +\ 1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{/*\ через\ мат\ выражение\ */}\textcolor{preprocessor}{\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00166}00166\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00167}00167\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00168}00168\ \textcolor{comment}{\ \ *\ @brief\ \ Swap\ between\ Little\ Endian\ and\ Big\ Endian}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00169}00169\ \textcolor{comment}{\ \ *\ @param\ v\ Исходное\ 16-\/битное\ значение.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00170}00170\ \textcolor{comment}{\ \ *\ @return\ Результат\ с\ поменяными\ местами\ старшим\ и\ младшим\ байтом.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00171}00171\ \textcolor{comment}{\ \ *\ @details\ \ Переключения\ между\ двумя\ типами\ хранения\ слова:\ HI-\/LO\ байты\ и\ LO-\/HI\ байты.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00172}00172\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00173}\mbox{\hyperlink{group___u_t_i_l_s___d_e_f_i_n_e_s_ga0f22e895ac7781c3d1b68fee182c4291}{00173}}\ \textcolor{preprocessor}{\#define\ ByteSwap16(v)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (((v\&0xFF00)\ >>\ (8))\ |\ ((v\&0x00FF)\ <<\ (8)))}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00174}00174\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00175}00175\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00176}00176\ \textcolor{comment}{\ \ *\ @brief\ \ Абсолютное\ значение\ числа}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00177}00177\ \textcolor{comment}{\ \ *\ @param\ x\ Число.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00178}00178\ \textcolor{comment}{\ \ *\ @return\ Абсолютное\ значение\ числа\ x.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00179}00179\ \textcolor{comment}{\ \ *\ @details\ \ Берет\ число\ по\ модулю.\ Хз\ как\ работает\ библиотечный\ abs\ в\ stdlib.h,\ мб\ это\ быстрее,\ но\ вряд\ ли\ конечно.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00180}00180\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00181}\mbox{\hyperlink{group___u_t_i_l_s___d_e_f_i_n_e_s_ga996f7be338ccb40d1a2a5abc1ad61759}{00181}}\ \textcolor{preprocessor}{\#define\ ABS(x)\ (\ ((x)\ >\ 0)?\ (x)\ :\ -\/(x))}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00182}00182\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00183}00183\ \textcolor{comment}{/**\ UTILS\_DEFINES}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00184}00184\ \textcolor{comment}{\ \ *\ @\}}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00185}00185\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00186}00186\ \ \ } +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00187}00187\ } +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00188}00188\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00189}00189\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00190}00190\ \textcolor{comment}{\ *\ @cond\ LIBS\_INTERNAL}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00191}00191\ \textcolor{comment}{\ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00192}00192\ } +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00193}00193\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ dummy;\ \textcolor{comment}{//\ переменная\ которой\ присваиваются\ значения,\ которые\ некуда\ присвоить}} \DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00194}00194\ \textcolor{comment}{}} \DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00195}00195\ \textcolor{comment}{/**\ \ }} \DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00196}00196\ \textcolor{comment}{\ \ *\ @brief\ \ Аналог\ HAL\ макроса\ для\ привязки\ DMA\ к\ UART.}} diff --git a/Doc/latex/mylibs__include_8h.tex b/Doc/latex/mylibs__include_8h.tex index c1ec186..13645be 100644 --- a/Doc/latex/mylibs__include_8h.tex +++ b/Doc/latex/mylibs__include_8h.tex @@ -10,7 +10,7 @@ {\ttfamily \#include "{}bit\+\_\+access.\+h"{}}\newline {\ttfamily \#include "{}trackers.\+h"{}}\newline {\ttfamily \#include "{}trace.\+h"{}}\newline -{\ttfamily \#include "{}evolve\+\_\+optimizer.\+h"{}}\newline +{\ttfamily \#include "{}gen\+\_\+optimizer.\+h"{}}\newline {\ttfamily \#include "{}\+\_\+\+\_\+general\+\_\+flash.\+h"{}}\newline {\ttfamily \#include "{}general\+\_\+gpio.\+h"{}}\newline Include dependency graph for mylibs\+\_\+include.\+h\+: @@ -21,6 +21,27 @@ Include dependency graph for mylibs\+\_\+include.\+h\+: \includegraphics[width=350pt]{mylibs__include_8h__incl} \end{center} \end{figure} +\doxysubsubsection*{Macros} +\begin{DoxyCompactItemize} +\item +\#define \mbox{\hyperlink{mylibs__include_8h_a31b9f2267c562f3ceb533606daf0b789}{Bench\+Time\+\_\+\+Init}}() +\item +\#define \mbox{\hyperlink{mylibs__include_8h_a89ff6c06fc21fb2bbfbf8cbf863316f1}{Bench\+Time\+\_\+\+Start}}(channel, ticks, tick\+\_\+period) +\item +\#define \mbox{\hyperlink{mylibs__include_8h_adddc120d43a10fad50fbdeeab8d086b5}{Bench\+Time\+\_\+\+End}}(channel, ticks) +\item +\#define \mbox{\hyperlink{mylibs__include_8h_a91e352219014c7ea5507bbbe4b15912d}{Bench\+Time\+\_\+\+Get\+Min}}(channel) +\item +\#define \mbox{\hyperlink{mylibs__include_8h_ab8103362e89bad95d965ac668284065c}{Bench\+Time\+\_\+\+Get\+Max}}(channel) +\item +\#define \mbox{\hyperlink{mylibs__include_8h_a9f82f5ed8cfae31292dc3dca41471dd5}{Bench\+Time\+\_\+\+Get\+Average}}(channel) +\item +\#define \mbox{\hyperlink{mylibs__include_8h_aafbca7155cfc97b68428da2b0b1200ef}{Bench\+Time\+\_\+\+Get\+Count}}(channel) +\item +\#define \mbox{\hyperlink{mylibs__include_8h_a9911aa13a8fa67c35a261d1cb3dc11e7}{Bench\+Time\+\_\+\+Get\+Last}}(channel) +\item +\#define \mbox{\hyperlink{mylibs__include_8h_a09b9a6ef9b60605fc0015f6b379d8420}{Bench\+Time\+\_\+\+Reset\+Stats}}(channel) +\end{DoxyCompactItemize} \doxysubsection{Detailed Description} @@ -30,3 +51,133 @@ Include dependency graph for mylibs\+\_\+include.\+h\+: Definition in file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. + + +\label{doc-define-members} +\Hypertarget{mylibs__include_8h_doc-define-members} +\doxysubsection{Macro Definition Documentation} +\Hypertarget{mylibs__include_8h_a31b9f2267c562f3ceb533606daf0b789}\index{mylibs\_include.h@{mylibs\_include.h}!BenchTime\_Init@{BenchTime\_Init}} +\index{BenchTime\_Init@{BenchTime\_Init}!mylibs\_include.h@{mylibs\_include.h}} +\doxysubsubsection{\texorpdfstring{BenchTime\_Init}{BenchTime\_Init}} +{\footnotesize\ttfamily \label{mylibs__include_8h_a31b9f2267c562f3ceb533606daf0b789} +\#define Bench\+Time\+\_\+\+Init(\begin{DoxyParamCaption}\item[{}]{void}{}\end{DoxyParamCaption})} + + + +Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00104}{104}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. + +\Hypertarget{mylibs__include_8h_a89ff6c06fc21fb2bbfbf8cbf863316f1}\index{mylibs\_include.h@{mylibs\_include.h}!BenchTime\_Start@{BenchTime\_Start}} +\index{BenchTime\_Start@{BenchTime\_Start}!mylibs\_include.h@{mylibs\_include.h}} +\doxysubsubsection{\texorpdfstring{BenchTime\_Start}{BenchTime\_Start}} +{\footnotesize\ttfamily \label{mylibs__include_8h_a89ff6c06fc21fb2bbfbf8cbf863316f1} +\#define Bench\+Time\+\_\+\+Start(\begin{DoxyParamCaption}\item[{}]{channel}{, }\item[{}]{ticks}{, }\item[{}]{tick\+\_\+period}{}\end{DoxyParamCaption})} + +{\bfseries Value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{0} + +\end{DoxyCode} + + +Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00105}{105}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. + +\Hypertarget{mylibs__include_8h_adddc120d43a10fad50fbdeeab8d086b5}\index{mylibs\_include.h@{mylibs\_include.h}!BenchTime\_End@{BenchTime\_End}} +\index{BenchTime\_End@{BenchTime\_End}!mylibs\_include.h@{mylibs\_include.h}} +\doxysubsubsection{\texorpdfstring{BenchTime\_End}{BenchTime\_End}} +{\footnotesize\ttfamily \label{mylibs__include_8h_adddc120d43a10fad50fbdeeab8d086b5} +\#define Bench\+Time\+\_\+\+End(\begin{DoxyParamCaption}\item[{}]{channel}{, }\item[{}]{ticks}{}\end{DoxyParamCaption})} + +{\bfseries Value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{0} + +\end{DoxyCode} + + +Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00106}{106}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. + +\Hypertarget{mylibs__include_8h_a91e352219014c7ea5507bbbe4b15912d}\index{mylibs\_include.h@{mylibs\_include.h}!BenchTime\_GetMin@{BenchTime\_GetMin}} +\index{BenchTime\_GetMin@{BenchTime\_GetMin}!mylibs\_include.h@{mylibs\_include.h}} +\doxysubsubsection{\texorpdfstring{BenchTime\_GetMin}{BenchTime\_GetMin}} +{\footnotesize\ttfamily \label{mylibs__include_8h_a91e352219014c7ea5507bbbe4b15912d} +\#define Bench\+Time\+\_\+\+Get\+Min(\begin{DoxyParamCaption}\item[{}]{channel}{}\end{DoxyParamCaption})} + +{\bfseries Value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{0} + +\end{DoxyCode} + + +Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00107}{107}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. + +\Hypertarget{mylibs__include_8h_ab8103362e89bad95d965ac668284065c}\index{mylibs\_include.h@{mylibs\_include.h}!BenchTime\_GetMax@{BenchTime\_GetMax}} +\index{BenchTime\_GetMax@{BenchTime\_GetMax}!mylibs\_include.h@{mylibs\_include.h}} +\doxysubsubsection{\texorpdfstring{BenchTime\_GetMax}{BenchTime\_GetMax}} +{\footnotesize\ttfamily \label{mylibs__include_8h_ab8103362e89bad95d965ac668284065c} +\#define Bench\+Time\+\_\+\+Get\+Max(\begin{DoxyParamCaption}\item[{}]{channel}{}\end{DoxyParamCaption})} + +{\bfseries Value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{0} + +\end{DoxyCode} + + +Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00108}{108}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. + +\Hypertarget{mylibs__include_8h_a9f82f5ed8cfae31292dc3dca41471dd5}\index{mylibs\_include.h@{mylibs\_include.h}!BenchTime\_GetAverage@{BenchTime\_GetAverage}} +\index{BenchTime\_GetAverage@{BenchTime\_GetAverage}!mylibs\_include.h@{mylibs\_include.h}} +\doxysubsubsection{\texorpdfstring{BenchTime\_GetAverage}{BenchTime\_GetAverage}} +{\footnotesize\ttfamily \label{mylibs__include_8h_a9f82f5ed8cfae31292dc3dca41471dd5} +\#define Bench\+Time\+\_\+\+Get\+Average(\begin{DoxyParamCaption}\item[{}]{channel}{}\end{DoxyParamCaption})} + +{\bfseries Value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{0} + +\end{DoxyCode} + + +Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00109}{109}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. + +\Hypertarget{mylibs__include_8h_aafbca7155cfc97b68428da2b0b1200ef}\index{mylibs\_include.h@{mylibs\_include.h}!BenchTime\_GetCount@{BenchTime\_GetCount}} +\index{BenchTime\_GetCount@{BenchTime\_GetCount}!mylibs\_include.h@{mylibs\_include.h}} +\doxysubsubsection{\texorpdfstring{BenchTime\_GetCount}{BenchTime\_GetCount}} +{\footnotesize\ttfamily \label{mylibs__include_8h_aafbca7155cfc97b68428da2b0b1200ef} +\#define Bench\+Time\+\_\+\+Get\+Count(\begin{DoxyParamCaption}\item[{}]{channel}{}\end{DoxyParamCaption})} + +{\bfseries Value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{0} + +\end{DoxyCode} + + +Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00110}{110}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. + +\Hypertarget{mylibs__include_8h_a9911aa13a8fa67c35a261d1cb3dc11e7}\index{mylibs\_include.h@{mylibs\_include.h}!BenchTime\_GetLast@{BenchTime\_GetLast}} +\index{BenchTime\_GetLast@{BenchTime\_GetLast}!mylibs\_include.h@{mylibs\_include.h}} +\doxysubsubsection{\texorpdfstring{BenchTime\_GetLast}{BenchTime\_GetLast}} +{\footnotesize\ttfamily \label{mylibs__include_8h_a9911aa13a8fa67c35a261d1cb3dc11e7} +\#define Bench\+Time\+\_\+\+Get\+Last(\begin{DoxyParamCaption}\item[{}]{channel}{}\end{DoxyParamCaption})} + +{\bfseries Value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{0} + +\end{DoxyCode} + + +Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00111}{111}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. + +\Hypertarget{mylibs__include_8h_a09b9a6ef9b60605fc0015f6b379d8420}\index{mylibs\_include.h@{mylibs\_include.h}!BenchTime\_ResetStats@{BenchTime\_ResetStats}} +\index{BenchTime\_ResetStats@{BenchTime\_ResetStats}!mylibs\_include.h@{mylibs\_include.h}} +\doxysubsubsection{\texorpdfstring{BenchTime\_ResetStats}{BenchTime\_ResetStats}} +{\footnotesize\ttfamily \label{mylibs__include_8h_a09b9a6ef9b60605fc0015f6b379d8420} +\#define Bench\+Time\+\_\+\+Reset\+Stats(\begin{DoxyParamCaption}\item[{}]{channel}{}\end{DoxyParamCaption})} + + + +Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00112}{112}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. + diff --git a/Doc/latex/mylibs__include_8h__incl.md5 b/Doc/latex/mylibs__include_8h__incl.md5 index a515c46..0123200 100644 --- a/Doc/latex/mylibs__include_8h__incl.md5 +++ b/Doc/latex/mylibs__include_8h__incl.md5 @@ -1 +1 @@ -817f7e940e65c096c687de633dbb8802 \ No newline at end of file +64f981d795a52476ad96388f8545ab10 \ No newline at end of file diff --git a/Doc/latex/mylibs__include_8h__incl.pdf b/Doc/latex/mylibs__include_8h__incl.pdf index 09d7e8f699517733e10070fffa97987920d044f2..f28f26dfac09cdfad0f7db88fda5c7c758c029c7 100644 GIT binary patch delta 24046 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 delta 24436 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 + + + +Collaboration diagram for Bench\+Time\+\_\+t\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=190pt]{struct_bench_time__t__coll__graph} +\end{center} +\end{figure} +\doxysubsubsection*{Public Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\hyperlink{struct_bench_time_channel__t}{Bench\+Time\+Channel\+\_\+t}} \mbox{\hyperlink{struct_bench_time__t_a9ae6d45c610be9d4b7628a614ccb06d6}{channels}} \mbox{[}16\mbox{]} +\begin{DoxyCompactList}\small\item\em Каналы измерения \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +Основная структура менеджера измерений + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00102}{102}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + + + +\label{doc-variable-members} +\Hypertarget{struct_bench_time__t_doc-variable-members} +\doxysubsection{Member Data Documentation} +\Hypertarget{struct_bench_time__t_a9ae6d45c610be9d4b7628a614ccb06d6}\index{BenchTime\_t@{BenchTime\_t}!channels@{channels}} +\index{channels@{channels}!BenchTime\_t@{BenchTime\_t}} +\doxysubsubsection{\texorpdfstring{channels}{channels}} +{\footnotesize\ttfamily \label{struct_bench_time__t_a9ae6d45c610be9d4b7628a614ccb06d6} +\mbox{\hyperlink{struct_bench_time_channel__t}{Bench\+Time\+Channel\+\_\+t}} Bench\+Time\+\_\+t\+::channels\mbox{[}16\mbox{]}} + + + +Каналы измерения + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00103}{103}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + + + +The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} +\item +E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{bench__time_8h}{bench\+\_\+time.\+h}}\end{DoxyCompactItemize} diff --git a/Doc/latex/struct_bench_time__t__coll__graph.md5 b/Doc/latex/struct_bench_time__t__coll__graph.md5 new file mode 100644 index 0000000..33c3634 --- /dev/null +++ b/Doc/latex/struct_bench_time__t__coll__graph.md5 @@ -0,0 +1 @@ +99de2aa6d22284dc8ac4dd052cd3054b \ No newline at end of file diff --git a/Doc/latex/struct_bench_time__t__coll__graph.pdf b/Doc/latex/struct_bench_time__t__coll__graph.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c2acde100934389934b3209786cfc4afca82c409 GIT binary patch literal 14502 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 Z=-N5B*u6a;6Elz*2uDsXBqI#>{{hA2=+*!L literal 0 HcmV?d00001 diff --git a/Doc/latex/struct_bench_time_channel__t.tex b/Doc/latex/struct_bench_time_channel__t.tex new file mode 100644 index 0000000..67de03b --- /dev/null +++ b/Doc/latex/struct_bench_time_channel__t.tex @@ -0,0 +1,105 @@ +\doxysection{Bench\+Time\+Channel\+\_\+t Struct Reference} +\hypertarget{struct_bench_time_channel__t}{}\label{struct_bench_time_channel__t}\index{BenchTimeChannel\_t@{BenchTimeChannel\_t}} + + +Структура канала измерения + + + + +{\ttfamily \#include $<$bench\+\_\+time.\+h$>$} + + + +Collaboration diagram for Bench\+Time\+Channel\+\_\+t\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=190pt]{struct_bench_time_channel__t__coll__graph} +\end{center} +\end{figure} +\doxysubsubsection*{Public Attributes} +\begin{DoxyCompactItemize} +\item +uint32\+\_\+t \mbox{\hyperlink{struct_bench_time_channel__t_a8140fe9e3d323404651f0cfeeae53928}{start\+\_\+tick}} +\begin{DoxyCompactList}\small\item\em Время старта в тиках \end{DoxyCompactList}\item +uint32\+\_\+t \mbox{\hyperlink{struct_bench_time_channel__t_a095d93e0228641f58b8661e263bc1bcd}{tick\+\_\+period}} +\begin{DoxyCompactList}\small\item\em Период тиков для переполнения \end{DoxyCompactList}\item +uint32\+\_\+t \mbox{\hyperlink{struct_bench_time_channel__t_a0f80bb194231df7921712d20bac603c9}{is\+\_\+running}} +\begin{DoxyCompactList}\small\item\em Флаг активного измерения \end{DoxyCompactList}\item +\mbox{\hyperlink{struct_bench_time_stats__t}{Bench\+Time\+Stats\+\_\+t}} \mbox{\hyperlink{struct_bench_time_channel__t_a22a3913e7925aa89cc12ec1d24a6c16c}{stats}} +\begin{DoxyCompactList}\small\item\em Статистика измерений \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +Структура канала измерения + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00092}{92}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + + + +\label{doc-variable-members} +\Hypertarget{struct_bench_time_channel__t_doc-variable-members} +\doxysubsection{Member Data Documentation} +\Hypertarget{struct_bench_time_channel__t_a8140fe9e3d323404651f0cfeeae53928}\index{BenchTimeChannel\_t@{BenchTimeChannel\_t}!start\_tick@{start\_tick}} +\index{start\_tick@{start\_tick}!BenchTimeChannel\_t@{BenchTimeChannel\_t}} +\doxysubsubsection{\texorpdfstring{start\_tick}{start\_tick}} +{\footnotesize\ttfamily \label{struct_bench_time_channel__t_a8140fe9e3d323404651f0cfeeae53928} +uint32\+\_\+t Bench\+Time\+Channel\+\_\+t\+::start\+\_\+tick} + + + +Время старта в тиках + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00093}{93}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + +\Hypertarget{struct_bench_time_channel__t_a095d93e0228641f58b8661e263bc1bcd}\index{BenchTimeChannel\_t@{BenchTimeChannel\_t}!tick\_period@{tick\_period}} +\index{tick\_period@{tick\_period}!BenchTimeChannel\_t@{BenchTimeChannel\_t}} +\doxysubsubsection{\texorpdfstring{tick\_period}{tick\_period}} +{\footnotesize\ttfamily \label{struct_bench_time_channel__t_a095d93e0228641f58b8661e263bc1bcd} +uint32\+\_\+t Bench\+Time\+Channel\+\_\+t\+::tick\+\_\+period} + + + +Период тиков для переполнения + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00094}{94}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + +\Hypertarget{struct_bench_time_channel__t_a0f80bb194231df7921712d20bac603c9}\index{BenchTimeChannel\_t@{BenchTimeChannel\_t}!is\_running@{is\_running}} +\index{is\_running@{is\_running}!BenchTimeChannel\_t@{BenchTimeChannel\_t}} +\doxysubsubsection{\texorpdfstring{is\_running}{is\_running}} +{\footnotesize\ttfamily \label{struct_bench_time_channel__t_a0f80bb194231df7921712d20bac603c9} +uint32\+\_\+t Bench\+Time\+Channel\+\_\+t\+::is\+\_\+running} + + + +Флаг активного измерения + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00095}{95}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + +\Hypertarget{struct_bench_time_channel__t_a22a3913e7925aa89cc12ec1d24a6c16c}\index{BenchTimeChannel\_t@{BenchTimeChannel\_t}!stats@{stats}} +\index{stats@{stats}!BenchTimeChannel\_t@{BenchTimeChannel\_t}} +\doxysubsubsection{\texorpdfstring{stats}{stats}} +{\footnotesize\ttfamily \label{struct_bench_time_channel__t_a22a3913e7925aa89cc12ec1d24a6c16c} +\mbox{\hyperlink{struct_bench_time_stats__t}{Bench\+Time\+Stats\+\_\+t}} Bench\+Time\+Channel\+\_\+t\+::stats} + + + +Статистика измерений + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00096}{96}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + + + +The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} +\item +E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{bench__time_8h}{bench\+\_\+time.\+h}}\end{DoxyCompactItemize} diff --git a/Doc/latex/struct_bench_time_channel__t__coll__graph.md5 b/Doc/latex/struct_bench_time_channel__t__coll__graph.md5 new file mode 100644 index 0000000..851c636 --- /dev/null +++ b/Doc/latex/struct_bench_time_channel__t__coll__graph.md5 @@ -0,0 +1 @@ +47051da0ae1727593c14401e5b86376e \ No newline at end of file diff --git a/Doc/latex/struct_bench_time_channel__t__coll__graph.pdf b/Doc/latex/struct_bench_time_channel__t__coll__graph.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8b375d50c6448708c34638760bee404eb162d74a GIT binary patch literal 14368 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 literal 0 HcmV?d00001 diff --git a/Doc/latex/struct_bench_time_stats__t.tex b/Doc/latex/struct_bench_time_stats__t.tex new file mode 100644 index 0000000..3a6d468 --- /dev/null +++ b/Doc/latex/struct_bench_time_stats__t.tex @@ -0,0 +1,111 @@ +\doxysection{Bench\+Time\+Stats\+\_\+t Struct Reference} +\hypertarget{struct_bench_time_stats__t}{}\label{struct_bench_time_stats__t}\index{BenchTimeStats\_t@{BenchTimeStats\_t}} + + +Структура статистики измерений + + + + +{\ttfamily \#include $<$bench\+\_\+time.\+h$>$} + +\doxysubsubsection*{Public Attributes} +\begin{DoxyCompactItemize} +\item +uint32\+\_\+t \mbox{\hyperlink{struct_bench_time_stats__t_a39b71a5d48c4a51a553a26a9fb961ac8}{min\+\_\+ticks}} +\begin{DoxyCompactList}\small\item\em Минимальное время в тиках \end{DoxyCompactList}\item +uint32\+\_\+t \mbox{\hyperlink{struct_bench_time_stats__t_a3da36eb65b03ba995b5905b4650ea93c}{max\+\_\+ticks}} +\begin{DoxyCompactList}\small\item\em Максимальное время в тиках \end{DoxyCompactList}\item +uint32\+\_\+t \mbox{\hyperlink{struct_bench_time_stats__t_a21499b0b19d1ed27f8cea069f674e8ec}{total\+\_\+ticks}} +\begin{DoxyCompactList}\small\item\em Суммарное время в тиках \end{DoxyCompactList}\item +uint32\+\_\+t \mbox{\hyperlink{struct_bench_time_stats__t_a5e95ef31dd0daf973894ef2f034d1f71}{count}} +\begin{DoxyCompactList}\small\item\em Количество измерений \end{DoxyCompactList}\item +uint32\+\_\+t \mbox{\hyperlink{struct_bench_time_stats__t_a2c739e1db6b26ceac5db3f2c44c177a0}{last\+\_\+ticks}} +\begin{DoxyCompactList}\small\item\em Последнее измеренное время \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +Структура статистики измерений + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00081}{81}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + + + +\label{doc-variable-members} +\Hypertarget{struct_bench_time_stats__t_doc-variable-members} +\doxysubsection{Member Data Documentation} +\Hypertarget{struct_bench_time_stats__t_a39b71a5d48c4a51a553a26a9fb961ac8}\index{BenchTimeStats\_t@{BenchTimeStats\_t}!min\_ticks@{min\_ticks}} +\index{min\_ticks@{min\_ticks}!BenchTimeStats\_t@{BenchTimeStats\_t}} +\doxysubsubsection{\texorpdfstring{min\_ticks}{min\_ticks}} +{\footnotesize\ttfamily \label{struct_bench_time_stats__t_a39b71a5d48c4a51a553a26a9fb961ac8} +uint32\+\_\+t Bench\+Time\+Stats\+\_\+t\+::min\+\_\+ticks} + + + +Минимальное время в тиках + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00082}{82}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + +\Hypertarget{struct_bench_time_stats__t_a3da36eb65b03ba995b5905b4650ea93c}\index{BenchTimeStats\_t@{BenchTimeStats\_t}!max\_ticks@{max\_ticks}} +\index{max\_ticks@{max\_ticks}!BenchTimeStats\_t@{BenchTimeStats\_t}} +\doxysubsubsection{\texorpdfstring{max\_ticks}{max\_ticks}} +{\footnotesize\ttfamily \label{struct_bench_time_stats__t_a3da36eb65b03ba995b5905b4650ea93c} +uint32\+\_\+t Bench\+Time\+Stats\+\_\+t\+::max\+\_\+ticks} + + + +Максимальное время в тиках + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00083}{83}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + +\Hypertarget{struct_bench_time_stats__t_a21499b0b19d1ed27f8cea069f674e8ec}\index{BenchTimeStats\_t@{BenchTimeStats\_t}!total\_ticks@{total\_ticks}} +\index{total\_ticks@{total\_ticks}!BenchTimeStats\_t@{BenchTimeStats\_t}} +\doxysubsubsection{\texorpdfstring{total\_ticks}{total\_ticks}} +{\footnotesize\ttfamily \label{struct_bench_time_stats__t_a21499b0b19d1ed27f8cea069f674e8ec} +uint32\+\_\+t Bench\+Time\+Stats\+\_\+t\+::total\+\_\+ticks} + + + +Суммарное время в тиках + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00084}{84}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + +\Hypertarget{struct_bench_time_stats__t_a5e95ef31dd0daf973894ef2f034d1f71}\index{BenchTimeStats\_t@{BenchTimeStats\_t}!count@{count}} +\index{count@{count}!BenchTimeStats\_t@{BenchTimeStats\_t}} +\doxysubsubsection{\texorpdfstring{count}{count}} +{\footnotesize\ttfamily \label{struct_bench_time_stats__t_a5e95ef31dd0daf973894ef2f034d1f71} +uint32\+\_\+t Bench\+Time\+Stats\+\_\+t\+::count} + + + +Количество измерений + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00085}{85}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + +\Hypertarget{struct_bench_time_stats__t_a2c739e1db6b26ceac5db3f2c44c177a0}\index{BenchTimeStats\_t@{BenchTimeStats\_t}!last\_ticks@{last\_ticks}} +\index{last\_ticks@{last\_ticks}!BenchTimeStats\_t@{BenchTimeStats\_t}} +\doxysubsubsection{\texorpdfstring{last\_ticks}{last\_ticks}} +{\footnotesize\ttfamily \label{struct_bench_time_stats__t_a2c739e1db6b26ceac5db3f2c44c177a0} +uint32\+\_\+t Bench\+Time\+Stats\+\_\+t\+::last\+\_\+ticks} + + + +Последнее измеренное время + + + +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00086}{86}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. + + + +The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} +\item +E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{bench__time_8h}{bench\+\_\+time.\+h}}\end{DoxyCompactItemize} diff --git a/Doc/latex/struct_evolve_optimizer__t.tex b/Doc/latex/struct_evolve_optimizer__t.tex deleted file mode 100644 index d261b31..0000000 --- a/Doc/latex/struct_evolve_optimizer__t.tex +++ /dev/null @@ -1,207 +0,0 @@ -\doxysection{Evolve\+Optimizer\+\_\+t Struct Reference} -\hypertarget{struct_evolve_optimizer__t}{}\label{struct_evolve_optimizer__t}\index{EvolveOptimizer\_t@{EvolveOptimizer\_t}} - - -Структура эволюционного оптимизатора - - - - -{\ttfamily \#include $<$evolve\+\_\+optimizer.\+h$>$} - -\doxysubsubsection*{Public Attributes} -\begin{DoxyCompactItemize} -\item -float \mbox{\hyperlink{struct_evolve_optimizer__t_a80eb0b8525b6bb838484f5922b9d8f7c}{stability}} -\begin{DoxyCompactList}\small\item\em Коэффициент насколько стабильная популяция (0..1)(\doxylink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{n\+\_\+cand}) \end{DoxyCompactList}\item -uint16\+\_\+t \mbox{\hyperlink{struct_evolve_optimizer__t_a1c270fce82e0c97e6c88fd0971c1eed8}{n\+\_\+params}} -\begin{DoxyCompactList}\small\item\em Количество параметров \end{DoxyCompactList}\item -uint16\+\_\+t \mbox{\hyperlink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{n\+\_\+cand}} -\begin{DoxyCompactList}\small\item\em Количество кандидатов в популяции \end{DoxyCompactList}\item -uint16\+\_\+t \mbox{\hyperlink{struct_evolve_optimizer__t_a950cd70cb6bff33b78ad35ee58c729a6}{n\+\_\+best}} -\begin{DoxyCompactList}\small\item\em Количество лучших, усредняемых \end{DoxyCompactList}\item -float \mbox{\hyperlink{struct_evolve_optimizer__t_af779c7aeba0053e36cee7aade160f1c8}{mutation\+\_\+amp}} -\begin{DoxyCompactList}\small\item\em Амплитуда мутации (0..1) \end{DoxyCompactList}\item -uint16\+\_\+t \mbox{\hyperlink{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae}{cand\+\_\+index}} -\begin{DoxyCompactList}\small\item\em Индекс кандидата для обработки \end{DoxyCompactList}\item -uint16\+\_\+t \mbox{\hyperlink{struct_evolve_optimizer__t_ad0f464d7048a9ed0753b61f76f563108}{gen\+\_\+index}} -\begin{DoxyCompactList}\small\item\em Индекс популяции \end{DoxyCompactList}\item -float \mbox{\hyperlink{struct_evolve_optimizer__t_a3be8c0c34db8429210ff470497a56727}{gen\+\_\+mut}} -\begin{DoxyCompactList}\small\item\em Амплитуда мутации у текущей популяции \end{DoxyCompactList}\item -float \mbox{\hyperlink{struct_evolve_optimizer__t_a93f628397c2f8d4027f2906752b650df}{loss}} \mbox{[}100\mbox{]} -\begin{DoxyCompactList}\small\item\em Loss для каждого кандидата \end{DoxyCompactList}\item -float \mbox{\hyperlink{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}{candidates}} \mbox{[}100\mbox{]}\mbox{[}20\mbox{]} -\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_l00102}{102}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}. - - - -\label{doc-variable-members} -\Hypertarget{struct_evolve_optimizer__t_doc-variable-members} -\doxysubsection{Member Data Documentation} -\Hypertarget{struct_evolve_optimizer__t_a80eb0b8525b6bb838484f5922b9d8f7c}\index{EvolveOptimizer\_t@{EvolveOptimizer\_t}!stability@{stability}} -\index{stability@{stability}!EvolveOptimizer\_t@{EvolveOptimizer\_t}} -\doxysubsubsection{\texorpdfstring{stability}{stability}} -{\footnotesize\ttfamily \label{struct_evolve_optimizer__t_a80eb0b8525b6bb838484f5922b9d8f7c} -float Evolve\+Optimizer\+\_\+t\+::stability} - - - -Коэффициент насколько стабильная популяция (0..1)(\doxylink{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1}{n\+\_\+cand}) - - - -Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00103}{103}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}. - -\Hypertarget{struct_evolve_optimizer__t_a1c270fce82e0c97e6c88fd0971c1eed8}\index{EvolveOptimizer\_t@{EvolveOptimizer\_t}!n\_params@{n\_params}} -\index{n\_params@{n\_params}!EvolveOptimizer\_t@{EvolveOptimizer\_t}} -\doxysubsubsection{\texorpdfstring{n\_params}{n\_params}} -{\footnotesize\ttfamily \label{struct_evolve_optimizer__t_a1c270fce82e0c97e6c88fd0971c1eed8} -uint16\+\_\+t Evolve\+Optimizer\+\_\+t\+::n\+\_\+params} - - - -Количество параметров - - - -Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00105}{105}} 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}} -\doxysubsubsection{\texorpdfstring{n\_cand}{n\_cand}} -{\footnotesize\ttfamily \label{struct_evolve_optimizer__t_ac35c7ca8cede4ab9c53a2845a91cd1b1} -uint16\+\_\+t Evolve\+Optimizer\+\_\+t\+::n\+\_\+cand} - - - -Количество кандидатов в популяции - - - -Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00106}{106}} 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}} -\doxysubsubsection{\texorpdfstring{n\_best}{n\_best}} -{\footnotesize\ttfamily \label{struct_evolve_optimizer__t_a950cd70cb6bff33b78ad35ee58c729a6} -uint16\+\_\+t Evolve\+Optimizer\+\_\+t\+::n\+\_\+best} - - - -Количество лучших, усредняемых - - - -Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00107}{107}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}. - -\Hypertarget{struct_evolve_optimizer__t_af779c7aeba0053e36cee7aade160f1c8}\index{EvolveOptimizer\_t@{EvolveOptimizer\_t}!mutation\_amp@{mutation\_amp}} -\index{mutation\_amp@{mutation\_amp}!EvolveOptimizer\_t@{EvolveOptimizer\_t}} -\doxysubsubsection{\texorpdfstring{mutation\_amp}{mutation\_amp}} -{\footnotesize\ttfamily \label{struct_evolve_optimizer__t_af779c7aeba0053e36cee7aade160f1c8} -float Evolve\+Optimizer\+\_\+t\+::mutation\+\_\+amp} - - - -Амплитуда мутации (0..1) - - - -Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00108}{108}} 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}} -\doxysubsubsection{\texorpdfstring{cand\_index}{cand\_index}} -{\footnotesize\ttfamily \label{struct_evolve_optimizer__t_a0ae0e63ba351335d4445d927991c64ae} -uint16\+\_\+t Evolve\+Optimizer\+\_\+t\+::cand\+\_\+index} - - - -Индекс кандидата для обработки - - - -Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00110}{110}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}. - -\Hypertarget{struct_evolve_optimizer__t_ad0f464d7048a9ed0753b61f76f563108}\index{EvolveOptimizer\_t@{EvolveOptimizer\_t}!gen\_index@{gen\_index}} -\index{gen\_index@{gen\_index}!EvolveOptimizer\_t@{EvolveOptimizer\_t}} -\doxysubsubsection{\texorpdfstring{gen\_index}{gen\_index}} -{\footnotesize\ttfamily \label{struct_evolve_optimizer__t_ad0f464d7048a9ed0753b61f76f563108} -uint16\+\_\+t Evolve\+Optimizer\+\_\+t\+::gen\+\_\+index} - - - -Индекс популяции - - - -Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00111}{111}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}. - -\Hypertarget{struct_evolve_optimizer__t_a3be8c0c34db8429210ff470497a56727}\index{EvolveOptimizer\_t@{EvolveOptimizer\_t}!gen\_mut@{gen\_mut}} -\index{gen\_mut@{gen\_mut}!EvolveOptimizer\_t@{EvolveOptimizer\_t}} -\doxysubsubsection{\texorpdfstring{gen\_mut}{gen\_mut}} -{\footnotesize\ttfamily \label{struct_evolve_optimizer__t_a3be8c0c34db8429210ff470497a56727} -float Evolve\+Optimizer\+\_\+t\+::gen\+\_\+mut} - - - -Амплитуда мутации у текущей популяции - - - -Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00114}{114}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}. - -\Hypertarget{struct_evolve_optimizer__t_a93f628397c2f8d4027f2906752b650df}\index{EvolveOptimizer\_t@{EvolveOptimizer\_t}!loss@{loss}} -\index{loss@{loss}!EvolveOptimizer\_t@{EvolveOptimizer\_t}} -\doxysubsubsection{\texorpdfstring{loss}{loss}} -{\footnotesize\ttfamily \label{struct_evolve_optimizer__t_a93f628397c2f8d4027f2906752b650df} -float Evolve\+Optimizer\+\_\+t\+::loss\mbox{[}100\mbox{]}} - - - -Loss для каждого кандидата - - - -Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00116}{116}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}. - -\Hypertarget{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4}\index{EvolveOptimizer\_t@{EvolveOptimizer\_t}!candidates@{candidates}} -\index{candidates@{candidates}!EvolveOptimizer\_t@{EvolveOptimizer\_t}} -\doxysubsubsection{\texorpdfstring{candidates}{candidates}} -{\footnotesize\ttfamily \label{struct_evolve_optimizer__t_aec67667fd1f1533e693e41c79bc28da4} -float Evolve\+Optimizer\+\_\+t\+::candidates\mbox{[}100\mbox{]}\mbox{[}20\mbox{]}} - - - -Параметры кандидатов - - - -Definition at line \mbox{\hyperlink{evolve__optimizer_8h_source_l00117}{117}} 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_l00118}{118}} of file \mbox{\hyperlink{evolve__optimizer_8h_source}{evolve\+\_\+optimizer.\+h}}. - - - -The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} -\item -E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{evolve__optimizer_8h}{evolve\+\_\+optimizer.\+h}}\end{DoxyCompactItemize} diff --git a/Doc/latex/struct_gen_optimizer__t.tex b/Doc/latex/struct_gen_optimizer__t.tex new file mode 100644 index 0000000..4e88d5e --- /dev/null +++ b/Doc/latex/struct_gen_optimizer__t.tex @@ -0,0 +1,207 @@ +\doxysection{Gen\+Optimizer\+\_\+t Struct Reference} +\hypertarget{struct_gen_optimizer__t}{}\label{struct_gen_optimizer__t}\index{GenOptimizer\_t@{GenOptimizer\_t}} + + +Структура эволюционного оптимизатора + + + + +{\ttfamily \#include $<$gen\+\_\+optimizer.\+h$>$} + +\doxysubsubsection*{Public Attributes} +\begin{DoxyCompactItemize} +\item +float \mbox{\hyperlink{struct_gen_optimizer__t_abe0aacea949fbe93e5d4c002e37d7192}{stability}} +\begin{DoxyCompactList}\small\item\em Коэффициент насколько стабильная популяция (0..1)(\doxylink{struct_gen_optimizer__t_a9e20d2f6f39a5147e6dbac46baca73a9}{n\+\_\+cand}) \end{DoxyCompactList}\item +uint16\+\_\+t \mbox{\hyperlink{struct_gen_optimizer__t_afe598a90024a8aa628dd16f3a2b38eb5}{n\+\_\+params}} +\begin{DoxyCompactList}\small\item\em Количество параметров \end{DoxyCompactList}\item +uint16\+\_\+t \mbox{\hyperlink{struct_gen_optimizer__t_a9e20d2f6f39a5147e6dbac46baca73a9}{n\+\_\+cand}} +\begin{DoxyCompactList}\small\item\em Количество кандидатов в популяции \end{DoxyCompactList}\item +uint16\+\_\+t \mbox{\hyperlink{struct_gen_optimizer__t_a8201f1eede36a2c04ec7b4caac7465c9}{n\+\_\+best}} +\begin{DoxyCompactList}\small\item\em Количество лучших, усредняемых \end{DoxyCompactList}\item +float \mbox{\hyperlink{struct_gen_optimizer__t_ad4dc0e53b3ca6bf2a642dfe7a1d1f26c}{mutation\+\_\+amp}} +\begin{DoxyCompactList}\small\item\em Амплитуда мутации (0..1) \end{DoxyCompactList}\item +uint16\+\_\+t \mbox{\hyperlink{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}{cand\+\_\+index}} +\begin{DoxyCompactList}\small\item\em Индекс текущего кандидата \end{DoxyCompactList}\item +uint16\+\_\+t \mbox{\hyperlink{struct_gen_optimizer__t_a8f226c85e9bb034cb811aa0366bb191c}{gen\+\_\+index}} +\begin{DoxyCompactList}\small\item\em Индекс популяции \end{DoxyCompactList}\item +float \mbox{\hyperlink{struct_gen_optimizer__t_acfeb93ef4823e09473ddba52fae9a6b1}{gen\+\_\+mut}} +\begin{DoxyCompactList}\small\item\em Амплитуда мутации у текущей популяции \end{DoxyCompactList}\item +float \mbox{\hyperlink{struct_gen_optimizer__t_a8b5066935d99f2fc7ebb94cc3652fc73}{loss}} \mbox{[}100\mbox{]} +\begin{DoxyCompactList}\small\item\em Loss для каждого кандидата \end{DoxyCompactList}\item +float \mbox{\hyperlink{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}{candidates}} \mbox{[}100\mbox{]}\mbox{[}20\mbox{]} +\begin{DoxyCompactList}\small\item\em Параметры кандидатов \end{DoxyCompactList}\item +uint16\+\_\+t \mbox{\hyperlink{struct_gen_optimizer__t_ad37161efa27ef1390d1f7e6ee2f79b12}{sorted\+\_\+idx}} \mbox{[}100\mbox{]} +\begin{DoxyCompactList}\small\item\em Индексы отсортированных кандидатов \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +Структура эволюционного оптимизатора + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00102}{102}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + + + +\label{doc-variable-members} +\Hypertarget{struct_gen_optimizer__t_doc-variable-members} +\doxysubsection{Member Data Documentation} +\Hypertarget{struct_gen_optimizer__t_abe0aacea949fbe93e5d4c002e37d7192}\index{GenOptimizer\_t@{GenOptimizer\_t}!stability@{stability}} +\index{stability@{stability}!GenOptimizer\_t@{GenOptimizer\_t}} +\doxysubsubsection{\texorpdfstring{stability}{stability}} +{\footnotesize\ttfamily \label{struct_gen_optimizer__t_abe0aacea949fbe93e5d4c002e37d7192} +float Gen\+Optimizer\+\_\+t\+::stability} + + + +Коэффициент насколько стабильная популяция (0..1)(\doxylink{struct_gen_optimizer__t_a9e20d2f6f39a5147e6dbac46baca73a9}{n\+\_\+cand}) + + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00103}{103}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + +\Hypertarget{struct_gen_optimizer__t_afe598a90024a8aa628dd16f3a2b38eb5}\index{GenOptimizer\_t@{GenOptimizer\_t}!n\_params@{n\_params}} +\index{n\_params@{n\_params}!GenOptimizer\_t@{GenOptimizer\_t}} +\doxysubsubsection{\texorpdfstring{n\_params}{n\_params}} +{\footnotesize\ttfamily \label{struct_gen_optimizer__t_afe598a90024a8aa628dd16f3a2b38eb5} +uint16\+\_\+t Gen\+Optimizer\+\_\+t\+::n\+\_\+params} + + + +Количество параметров + + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00105}{105}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + +\Hypertarget{struct_gen_optimizer__t_a9e20d2f6f39a5147e6dbac46baca73a9}\index{GenOptimizer\_t@{GenOptimizer\_t}!n\_cand@{n\_cand}} +\index{n\_cand@{n\_cand}!GenOptimizer\_t@{GenOptimizer\_t}} +\doxysubsubsection{\texorpdfstring{n\_cand}{n\_cand}} +{\footnotesize\ttfamily \label{struct_gen_optimizer__t_a9e20d2f6f39a5147e6dbac46baca73a9} +uint16\+\_\+t Gen\+Optimizer\+\_\+t\+::n\+\_\+cand} + + + +Количество кандидатов в популяции + + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00106}{106}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + +\Hypertarget{struct_gen_optimizer__t_a8201f1eede36a2c04ec7b4caac7465c9}\index{GenOptimizer\_t@{GenOptimizer\_t}!n\_best@{n\_best}} +\index{n\_best@{n\_best}!GenOptimizer\_t@{GenOptimizer\_t}} +\doxysubsubsection{\texorpdfstring{n\_best}{n\_best}} +{\footnotesize\ttfamily \label{struct_gen_optimizer__t_a8201f1eede36a2c04ec7b4caac7465c9} +uint16\+\_\+t Gen\+Optimizer\+\_\+t\+::n\+\_\+best} + + + +Количество лучших, усредняемых + + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00107}{107}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + +\Hypertarget{struct_gen_optimizer__t_ad4dc0e53b3ca6bf2a642dfe7a1d1f26c}\index{GenOptimizer\_t@{GenOptimizer\_t}!mutation\_amp@{mutation\_amp}} +\index{mutation\_amp@{mutation\_amp}!GenOptimizer\_t@{GenOptimizer\_t}} +\doxysubsubsection{\texorpdfstring{mutation\_amp}{mutation\_amp}} +{\footnotesize\ttfamily \label{struct_gen_optimizer__t_ad4dc0e53b3ca6bf2a642dfe7a1d1f26c} +float Gen\+Optimizer\+\_\+t\+::mutation\+\_\+amp} + + + +Амплитуда мутации (0..1) + + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00108}{108}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + +\Hypertarget{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}\index{GenOptimizer\_t@{GenOptimizer\_t}!cand\_index@{cand\_index}} +\index{cand\_index@{cand\_index}!GenOptimizer\_t@{GenOptimizer\_t}} +\doxysubsubsection{\texorpdfstring{cand\_index}{cand\_index}} +{\footnotesize\ttfamily \label{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc} +uint16\+\_\+t Gen\+Optimizer\+\_\+t\+::cand\+\_\+index} + + + +Индекс текущего кандидата + + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00110}{110}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + +\Hypertarget{struct_gen_optimizer__t_a8f226c85e9bb034cb811aa0366bb191c}\index{GenOptimizer\_t@{GenOptimizer\_t}!gen\_index@{gen\_index}} +\index{gen\_index@{gen\_index}!GenOptimizer\_t@{GenOptimizer\_t}} +\doxysubsubsection{\texorpdfstring{gen\_index}{gen\_index}} +{\footnotesize\ttfamily \label{struct_gen_optimizer__t_a8f226c85e9bb034cb811aa0366bb191c} +uint16\+\_\+t Gen\+Optimizer\+\_\+t\+::gen\+\_\+index} + + + +Индекс популяции + + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00111}{111}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + +\Hypertarget{struct_gen_optimizer__t_acfeb93ef4823e09473ddba52fae9a6b1}\index{GenOptimizer\_t@{GenOptimizer\_t}!gen\_mut@{gen\_mut}} +\index{gen\_mut@{gen\_mut}!GenOptimizer\_t@{GenOptimizer\_t}} +\doxysubsubsection{\texorpdfstring{gen\_mut}{gen\_mut}} +{\footnotesize\ttfamily \label{struct_gen_optimizer__t_acfeb93ef4823e09473ddba52fae9a6b1} +float Gen\+Optimizer\+\_\+t\+::gen\+\_\+mut} + + + +Амплитуда мутации у текущей популяции + + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00114}{114}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + +\Hypertarget{struct_gen_optimizer__t_a8b5066935d99f2fc7ebb94cc3652fc73}\index{GenOptimizer\_t@{GenOptimizer\_t}!loss@{loss}} +\index{loss@{loss}!GenOptimizer\_t@{GenOptimizer\_t}} +\doxysubsubsection{\texorpdfstring{loss}{loss}} +{\footnotesize\ttfamily \label{struct_gen_optimizer__t_a8b5066935d99f2fc7ebb94cc3652fc73} +float Gen\+Optimizer\+\_\+t\+::loss\mbox{[}100\mbox{]}} + + + +Loss для каждого кандидата + + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00116}{116}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + +\Hypertarget{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df}\index{GenOptimizer\_t@{GenOptimizer\_t}!candidates@{candidates}} +\index{candidates@{candidates}!GenOptimizer\_t@{GenOptimizer\_t}} +\doxysubsubsection{\texorpdfstring{candidates}{candidates}} +{\footnotesize\ttfamily \label{struct_gen_optimizer__t_a2c9a50ea7d975b9bc22a67e453ab83df} +float Gen\+Optimizer\+\_\+t\+::candidates\mbox{[}100\mbox{]}\mbox{[}20\mbox{]}} + + + +Параметры кандидатов + + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00117}{117}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + +\Hypertarget{struct_gen_optimizer__t_ad37161efa27ef1390d1f7e6ee2f79b12}\index{GenOptimizer\_t@{GenOptimizer\_t}!sorted\_idx@{sorted\_idx}} +\index{sorted\_idx@{sorted\_idx}!GenOptimizer\_t@{GenOptimizer\_t}} +\doxysubsubsection{\texorpdfstring{sorted\_idx}{sorted\_idx}} +{\footnotesize\ttfamily \label{struct_gen_optimizer__t_ad37161efa27ef1390d1f7e6ee2f79b12} +uint16\+\_\+t Gen\+Optimizer\+\_\+t\+::sorted\+\_\+idx\mbox{[}100\mbox{]}} + + + +Индексы отсортированных кандидатов + + + +Definition at line \mbox{\hyperlink{gen__optimizer_8h_source_l00118}{118}} of file \mbox{\hyperlink{gen__optimizer_8h_source}{gen\+\_\+optimizer.\+h}}. + + + +The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} +\item +E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{gen__optimizer_8h}{gen\+\_\+optimizer.\+h}}\end{DoxyCompactItemize} diff --git a/Doc/latex/struct_t_i_m___encoder_type_def__coll__graph.pdf b/Doc/latex/struct_t_i_m___encoder_type_def__coll__graph.pdf index d7d2e72ddf3fc7138743292f505b725b230e38ff..5e47ceed9df5c32b886f1844b57512aa740dce24 100644 GIT binary patch delta 447 zcmV;w0YLtPg#m4rx2m!_s;5hWx@ysNVb?RSV zI%9=$3B*JZ8{PZvV7oPjv0YDvs(CYDM+m-U55q~Duy`kJXL*&kd7bk-&*h(56@Ta4 z43L-Xmw#5*%hKfNVNKfZ2xjK*nhuRP2A;aB9>e$%B!(zsVj#|Zo-@_6@#(^@o@;9) zDh1r<|0m%j7|XchxaZP9pv83+gGWsbaYDHpQo+lvU;-8etpx|{I4jl4n;@`g zC1`uD3+Z!FEtkEA@>fhq=z!+%YP!Wg4)jW#5~tB;6$KxjE{)9ehqclr)ukG*|i zWleYduWk|P4{x+|>uB7lMlrJst1Fq2lxRrUu-z-b<}~q z)CJ4#cM~BqCV3|cCLtbcPWM#m$78q3?6qCeIk9~|d#dP#S8ineW+oHQWeA%n`v$m1 p=M$4wK_CG)lXpSb44FV##|8!l00ONHQIlIjAP6`LB_%~qMhY3*&j0`b delta 446 zcmV;v0YUzRg#m+w0kD=o1lAIajFXx_IDZ%fDXm!R0YLD`%NBk>2naHGw$NU5wF2zj z-cB;^>RKr4K6XEqg+BB8caJF96)L5Y**pV%?P!?_UMq8XgaG3Ra2)#UcxIBwI`ywF zov}i>1Y)9yjqZJSu-zKN*siBSaZwN05rS{o!*J3jEZ()Yv%JcioaZ9X^Y#x{#eX?B z1LP(9<)78{vNSn*Sd+Fpf|>cdrb8o+fv4`O$1r{bi6P3E7>F~U=S=l%e7dl!=h_;H zN&)xz|4BGW#xmhJ?zuD&XmMS|;89aUoKWtDREn}In1n?^xfFnXocIV9XQi6zWYmy%po+obaDNk`FvcjvC`Op9KO*u0q2;_yvorAC={tx$_V$I9 zobJS5-6GN--e~F8(YR5yVrCasWBk1oUGtBk7M%!slC*9cQ>%C#;0MrrvEj7WQ3v+I z3zpsQCPHSc6`d?t3-MTUx~HvvJa((hUfU&|6WjN*r;1)gRp-uqD~9-4Y5-GD_(-JSSrxMhU7c5;4azvOJo9KgpJj z!-kDHJ>6OF-a8S%D249=>?o9Ur1vi?0FJw|uj0|=Mh#b7r5B7;YO-@#C8z=D4vtY zOeisL-Puxh`<90j#f1bSAHH6zGIajA5@+OzOrqpKhWh^$?6nYu@_G)sIS8zg{>1Rb zlORnRe?AO*^r%^LlDrL+J}#GopIR^{*OnOpi|swdG$EL#_%6ywdV`}+7%#7By7_>Q z-pkS0iQ89EO14(-mLj$fB@`%*r|GGUaK7J8`A=GP%|9OY=*+^sW_8=Rv-o9%pTX)S z#?{7VZN(qSMe($r8Ci%{b()J7lIhI(Ot$u-AoO$OX1E{7YhedI8)jIgj=p7kKV}_Y R+ctCdFKU7 delta 423 zcmV;Y0a*Too&kiO0k8{9e^!<-uqD}^y%GvdGD_(>JSSxzMhU7c5;4azvOJc5U&)q@ z!-kDHJ>6OF-a8S%D24haBLyC8ImnT(#S=_&ONMFE^x7D!;Mt+i0vSJDISx@ zOeit$-Puxh`<90j#f1bSAHH6zGIaj65@+OzOrqpKhWh^$?6nYu@_G)sIS8zg{>1Rf zlORnRe>Mzz^r%^LlDrL+J}#GopIR^{*OnOpi|sANG$EK0oL~~ApK$aMZEInPNxIZON)3wrz)5F+K4u;90$>VkL`Sr z01pUwn~ZmpnelEIP%?p#k_ZCI2r>vmMgoXvKthN@BuIhV69mo!f)Miw!2lS;37O5n z-(1cD{8hRaB>@2cA>Wno84xHW@Z_k4tO^Z`+}!j!Zi_-{cf78if3>6D<;9np(W=Vy zDpkVuS?aM$cPp6}+P-`edJ%@eLIj5B1^g$>u`4mK7LkZdyH>|BYawjUZecdFz~V+- zrgK@e+#39k$$k4|AdFs}F30@2+-`T`rQF5`@1Re|u`Mw!ZPk1Y*6b&fgJJ&8I{wBw z^I~Ih8W{_b$8Z1{e~a1z3x~#;;}~+=@$bGfS-j-?KX(41IvM%)oC2eEI4oumv=AX| z;L|XzI+3?WaUzYTF02(`{i^@buu(!JvbmW00xSh)CmM9miWkSIy zOLHZGc`WuQj1F3#%WL0v>|UkkL!OnMRQvI`-V7yD8~8HSe*#9!Yor)5ikwb^nDHwb zyrFbF6l*sPUN>9Ou1Kfwz1ZdHTz)e`t{Y&49w zR<%fVdX)RdF}V5P^n4Gmuy@Pf0h4Vo+X`iFWOHPqMwJ2mtsG#jb+SfIuOIM@KDXU20(D=4Q}wTb5G0<8}R{e;xIqI=qDUuUt(Y*A{DuIt&U^X0`JalVLrFO;#OU* z3t4vD8vKvxefMM_OkSKW$Kt8lZg=9j+QtX(pijrCEio=_)nX0S>?f0hVgAlK{>D1< zVq@_tG!{aS;RrGoe|7~Hj*T>NlkQ5OH;KHUyEF%cZ64WF!|pMe2=eiaLeBTeUC883T19&b98cLVQmU!Ze(v_Y6>zmATS_rVrmK? mARsj}Ig=z--V1=TVcHA~05?qx*^>=d9|<)%3MC~)Peux8upL(b diff --git a/Doc/latex/trackers_8h__dep__incl.pdf b/Doc/latex/trackers_8h__dep__incl.pdf index 897c9d361dbfb7e83a9b70948254a5b594b3b764..fb8b130d1661f067f64e3f2aece59e8941e58210 100644 GIT binary patch delta 423 zcmV;Y0a*T&q5+hm0k9iRe>Rp-uqD~9-4Y5-GD_(-JSSrxMhU7c5;4azvOJo9KgpJj z!-kDHJ>6OF-a8S%D249=>?o9Ur1vi?0FJw|uj0|=Mh#b7r5B7;YO-@#C8z=D4vto zPAD;N-Puxh`<90j#f1bSAHH6zGIajA5@+OzOrqpKhWh^$?6nYu@_G)sIS8zg{>1Rb zlQ2&je?AO*^r%^LlDrL+J}#GopIR^{*OnOpi|swdG$EL#_%6ywdV`}+7%#7By7_>Q z-pkS0iQ89EO14(-mLj$fB@`%*r|GGUaK7J8`A=GP%|9OY=*+^sW_8=Rv-o9%pTX)S z#?{7VZN(qSMe($r8Ci%{b()J7lIhI(Ot$u-AoO$OX1E{7YhedI8)jIgj=p7kKV}_Y R+ctCdFKUJSSxzMhU7c5;4azvOJc5U&)q@ z!-kDHJ>6OF-a8S%D24haBLyC8ImnT(#S=_&ONMFE^x7D!;Mt+i0vSJDISy8 zPAD<&-Puxh`<90j#f1bSAHH6zGIaj65@+OzOrqpKhWh^$?6nYu@_G)sIS8zg{>1Rf zlQ2&je>Mzz^r%^LlDrL+J}#GopIR^{*OnOpi|sANG$EK0oL~}VpK$aMf2(A3`lSmT+G~Qf;#GaJXBFoTz60Z$=>F!WY9U_ALgcrzUN7XL zmW?Vz4e8~~eq-0>y>Xpr2f=oA?2Ju@_Ig%xuK7XkTH)q>>FFL`31RP+e*%=>E%uYG lRUiR3lg?G$3T;u=% delta 182 zcmV;n07?JgtpVSy0k9@je@ZaJB+B07=pDx6Az3?F@V1?TZX_-YKZ$M0XYz+3YK2ll z%^cIq+*MlG=E*Mgw@NmrU%J4dy(U;IUezaiR&nm&J20+^?r(0Y7UHEWM1DK#^+GOc z*{DL)kY3L0H+F5_8`p_;5Nub+&e&vVuV*#qnjhq@6>i>_p6=ll2=;FICw~Dg<&&;e kAOSX$&sE(F{Xp5!YYYqk@xlyylektO2s8>MB}Gq03Kj5JssI20 diff --git a/MyLibs/Inc/bench_time.h b/MyLibs/Inc/bench_time.h new file mode 100644 index 0000000..1704b3e --- /dev/null +++ b/MyLibs/Inc/bench_time.h @@ -0,0 +1,258 @@ +/** +****************************************************************************** +* @file bench_time.h +* @brief Заголовочный файл для измерения времени между событиями +****************************************************************************** +* @addtogroup BENCH_TIME Time measurement +* @ingroup MYLIBS_DEFINES +* @brief Библиотека для измерения времени/тиков между событиями +* @details +Поддерживает: +- Многоканальные измерения (несколько независимых таймеров) +- Платформонезависимый интерфейс +- Измерение в тиках или временных единицах +- Статистику измерений (мин/макс/среднее) +- Настраиваемый размер тиков для каждого канала + +Параметры для конфигурации: +- @ref BENCH_TIME_ENABLE - Включить бенч времени +- @ref BENCH_TIME_MAX_CHANNELS - Максимальное количество каналов измерения (по умолчанию 8) + +@par Пример использования: +@code +#include "bench_time.h" + +// Инициализация +BenchTime_Init(); + +// Измерение с SysTick +BenchTime_Start(0, HAL_GetTick, 0xFFFFFFFF); +some_function(); +uint32_t time = BenchTime_End(0, HAL_GetTick); + +// Измерение с TIM2 (16-бит) +BenchTime_Start(1, TIM2->CNT, 0xFFFF); +fast_function(); +uint32_t time2 = BenchTime_End(1, TIM2->CNT); + +// Измерение с DWT цикловым счетчиком +BenchTime_Start(2, DWT->CYCCNT, 0xFFFFFFFF); +critical_function(); +uint32_t cycles = BenchTime_End(2, DWT->CYCCNT); + +// Многоканальное измерение +BenchTime_Start(0, HAL_GetTick, 1000); // общее время +BenchTime_Start(1, TIM3->CNT, 500); // часть 1 + +// ... код 1 + +uint32_t part1 = BenchTime_End(1, TIM3->CNT); +BenchTime_Start(2, TIM4->CNT, 200); // часть 2 + +// ... код 2 + +uint32_t part2 = BenchTime_End(2, TIM4->CNT); +uint32_t total = BenchTime_End(0, HAL_GetTick); // общее время + +// Статистика +uint32_t min_time = BenchTime_GetMin(0); +uint32_t max_time = BenchTime_GetMax(0); +uint32_t avg_time = BenchTime_GetAverage(0); +uint32_t count = BenchTime_GetCount(0); +@endcode +* @{ +*****************************************************************************/ +#ifndef __BENCH_TIME_H_ +#define __BENCH_TIME_H_ + +#include "mylibs_defs.h" +#include + +#ifdef BENCH_TIME_ENABLE + +// Конфигурация библиотеки +#ifndef BENCH_TIME_MAX_CHANNELS +#define BENCH_TIME_MAX_CHANNELS 8 ///< Максимальное количество каналов измерения +#endif + +/** + * @brief Структура статистики измерений + */ +typedef struct { + uint32_t min_ticks; ///< Минимальное время в тиках + uint32_t max_ticks; ///< Максимальное время в тиках + uint32_t total_ticks; ///< Суммарное время в тиках + uint32_t count; ///< Количество измерений + uint32_t last_ticks; ///< Последнее измеренное время +} BenchTimeStats_t; + +/** + * @brief Структура канала измерения + */ +typedef struct { + uint32_t start_tick; ///< Время старта в тиках + uint32_t tick_period; ///< Период тиков для переполнения + uint32_t is_running; ///< Флаг активного измерения + BenchTimeStats_t stats; ///< Статистика измерений +} BenchTimeChannel_t; + +/** + * @brief Основная структура менеджера измерений + */ +typedef struct { + BenchTimeChannel_t channels[BENCH_TIME_MAX_CHANNELS]; ///< Каналы измерения +} BenchTime_t; + +static BenchTime_t hbt = {0}; ///< Внутренний экземпляр + +/** + * @brief Инициализация системы измерения времени + */ +static inline void BenchTime_Init(void) { + for (int i = 0; i < BENCH_TIME_MAX_CHANNELS; i++) { + hbt.channels[i].start_tick = 0; + hbt.channels[i].tick_period = 0xFFFFFFFF; + hbt.channels[i].is_running = 0; + hbt.channels[i].stats.min_ticks = 0xFFFFFFFF; + hbt.channels[i].stats.max_ticks = 0; + hbt.channels[i].stats.total_ticks = 0; + hbt.channels[i].stats.count = 0; + hbt.channels[i].stats.last_ticks = 0; + } +} + +/** + * @brief Начало измерения на указанном канале + * @param channel Номер канала (0..BENCH_TIME_MAX_CHANNELS-1) + * @param ticks Источник тиков (например: HAL_GetTick(), TIM2->CNT, DWT->CYCCNT) + * @param tick_period Период тиков для переполнения + * @return 1 - успех, 0 - ошибка + */ +static inline uint32_t BenchTime_Start(uint8_t channel, uint32_t ticks, uint32_t tick_period) { + if (channel >= BENCH_TIME_MAX_CHANNELS) return 0; + if (hbt.channels[channel].is_running) return 0; + + hbt.channels[channel].start_tick = ticks; + hbt.channels[channel].tick_period = tick_period; + hbt.channels[channel].is_running = 1; + return 1; +} + +/** + * @brief Окончание измерения на указанном канале + * @param channel Номер канала (0..BENCH_TIME_MAX_CHANNELS-1) + * @param ticks Источник тиков (должен быть тот же что в Start) + * @return Измеренное время в тиках, 0 - в случае ошибки + */ +static inline uint32_t BenchTime_End(uint8_t channel, uint32_t ticks) { + if (channel >= BENCH_TIME_MAX_CHANNELS) return 0; + if (!hbt.channels[channel].is_running) return 0; + + uint32_t end_tick = ticks; + uint32_t start_tick = hbt.channels[channel].start_tick; + uint32_t tick_period = hbt.channels[channel].tick_period; + uint32_t elapsed_ticks; + + if (end_tick >= start_tick) { + elapsed_ticks = end_tick - start_tick; + } else { + elapsed_ticks = (tick_period - start_tick) + end_tick + 1; + } + + if (elapsed_ticks > tick_period) { + elapsed_ticks = tick_period; + } + + hbt.channels[channel].is_running = 0; + + // Обновление статистики + BenchTimeStats_t* stats = &hbt.channels[channel].stats; + stats->last_ticks = elapsed_ticks; + + if (elapsed_ticks < stats->min_ticks) { + stats->min_ticks = elapsed_ticks; + } + + if (elapsed_ticks > stats->max_ticks) { + stats->max_ticks = elapsed_ticks; + } + + stats->total_ticks += elapsed_ticks; + stats->count++; + + return elapsed_ticks; +} + +/** + * @brief Получение минимального времени измерения + */ +static inline uint32_t BenchTime_GetMin(uint8_t channel) { + if (channel >= BENCH_TIME_MAX_CHANNELS) return 0; + return hbt.channels[channel].stats.min_ticks; +} + +/** + * @brief Получение максимального времени измерения + */ +static inline uint32_t BenchTime_GetMax(uint8_t channel) { + if (channel >= BENCH_TIME_MAX_CHANNELS) return 0; + return hbt.channels[channel].stats.max_ticks; +} + +/** + * @brief Получение среднего времени измерения + */ +static inline uint32_t BenchTime_GetAverage(uint8_t channel) { + if (channel >= BENCH_TIME_MAX_CHANNELS) return 0; + BenchTimeStats_t* stats = &hbt.channels[channel].stats; + if (stats->count == 0) return 0; + return stats->total_ticks / stats->count; +} + +/** + * @brief Получение количества измерений + */ +static inline uint32_t BenchTime_GetCount(uint8_t channel) { + if (channel >= BENCH_TIME_MAX_CHANNELS) return 0; + return hbt.channels[channel].stats.count; +} + +/** + * @brief Получение последнего измеренного времени + */ +static inline uint32_t BenchTime_GetLast(uint8_t channel) { + if (channel >= BENCH_TIME_MAX_CHANNELS) return 0; + return hbt.channels[channel].stats.last_ticks; +} + +/** + * @brief Сброс статистики для канала + */ +static inline void BenchTime_ResetStats(uint8_t channel) { + if (channel >= BENCH_TIME_MAX_CHANNELS) return; + BenchTimeStats_t* stats = &hbt.channels[channel].stats; + stats->min_ticks = 0xFFFFFFFF; + stats->max_ticks = 0; + stats->total_ticks = 0; + stats->count = 0; + stats->last_ticks = 0; +} +#else //BENCH_TIME_ENABLE + +#define BenchTime_Init() +#define BenchTime_Start(channel, ticks, tick_period) 0 +#define BenchTime_End(channel, ticks) 0 +#define BenchTime_GetMin(channel) 0 +#define BenchTime_GetMax(channel) 0 +#define BenchTime_GetAverage(channel) 0 +#define BenchTime_GetCount(channel) 0 +#define BenchTime_GetLast(channel) 0 +#define BenchTime_ResetStats(channel) + +#endif //BENCH_TIME_ENABLE + +#endif // __BENCH_TIME_H_ + +/** BENCH_TIME + * @} + */ \ No newline at end of file diff --git a/MyLibs/Inc/evolve_optimizer.h b/MyLibs/Inc/gen_optimizer.h similarity index 82% rename from MyLibs/Inc/evolve_optimizer.h rename to MyLibs/Inc/gen_optimizer.h index 150186b..9a3b332 100644 --- a/MyLibs/Inc/evolve_optimizer.h +++ b/MyLibs/Inc/gen_optimizer.h @@ -1,9 +1,9 @@ /** ****************************************************************************** -* @file evolve_optimizer.h +* @file gen_optimizer.h * @brief Заголовочный файл для адаптивного подбора параметров ****************************************************************************** -* @addtogroup EVOLVE_OPTIMIZER Evolve optimizer +* @addtogroup GEN_OPTIMIZER Genetic optimizer * @ingroup MYLIBS_DEFINES * @brief Библиотека для эволюционного подбора параметров * @details @@ -15,24 +15,24 @@ Параметры для конфигурации: -- @ref ENABLE_EVOLVE_OPTIMIZATION - Включить оптимизацию параметров - Если библиотека отключена @ref ENABLE_EVOLVE_OPTIMIZATION, то вставляются +- @ref GEN_OPTIMIZATION_ENABLE - Включить оптимизацию параметров + Если библиотека отключена @ref GEN_OPTIMIZATION_ENABLE, то вставляются заглушки, никак не влияющие на параметры и остальную программу -- @ref EVOLVE_MAX_PARAMS - Максимальное количество параметров -- @ref EVOLVE_MAX_CANDIDATES - Максимальное количество кандидатов для обучения -- (опционально) @ref EVOLVE_MUTATION_MIN_PCT - Минимальная мутация в процентах от Loss (по умолчанию 10%) -- (опционально) @ref EVOLVE_MUTATION_MAX_PCT - Максимальная мутация в процентах от Loss (по умолчанию 100%) +- @ref GEN_MAX_PARAMS - Максимальное количество параметров +- @ref GEN_MAX_CANDIDATES - Максимальное количество кандидатов для обучения +- (опционально) @ref GEN_MUTATION_MIN_PCT - Минимальная мутация в процентах от Loss (по умолчанию 10%) +- (опционально) @ref GEN_MUTATION_MAX_PCT - Максимальная мутация в процентах от Loss (по умолчанию 100%) - (опционально) @ref ELOVLE_N_ELITE_CANDIDATE - Количество кандидатов, которые проходят в поколение без изменений @par Пример использования: @code -#include "evolve_optimizer.h" +#include "gen_optimizer.h" #define N_PARAMS 4 #define N_CANDIDATES 100 #define N_BEST 10 #define MUTATION 0.1f float params[N_PARAMS]; -EvolveOptimizer_t optimizer; +GenOptimizer_t optimizer; // Формирование параметров uint16_t param_u16 = 800; @@ -45,11 +45,11 @@ params[2] = PARAM_SCALE(param_u8, 10.0f, 100.0f); params[3] = PARAM_SCALE(param_i16, 500.0f, 5000.0f); // Инициалиазция -EvolveOptimizer_Init(&optimizer, N_PARAMS, N_CANDIDATES, N_BEST, MUTATION, params); +GenOptimizer_Init(&optimizer, N_PARAMS, N_CANDIDATES, N_BEST, MUTATION, params); // Шаг эволюции float loss = calc_loss(); // расчет эффективности параметров (от 0 до 1) -EvolveOptimizer_Step(&optimizer, params, loss); +GenOptimizer_Step(&optimizer, params, loss); // Взятие следующих для эволюции параметров param_u16 = PARAM_UNSCALE(params[0], 0.0f, 1000.0f); @@ -59,14 +59,14 @@ param_i16 = PARAM_UNSCALE(params[3], 500.0f, 5000.0f); @endcode * @{ *****************************************************************************/ -#ifndef __EVOLVE_OPTIMIZER_H_ -#define __EVOLVE_OPTIMIZER_H_ +#ifndef __GEN_OPTIMIZER_H_ +#define __GEN_OPTIMIZER_H_ #include "mylibs_defs.h" #include #include -#ifdef ENABLE_EVOLVE_OPTIMIZATION +#ifdef GEN_OPTIMIZATION_ENABLE /** * @brief Линейное масштабирование x из диапазона [min_val, max_val] в диапазон [0, 1) */ @@ -85,11 +85,11 @@ param_i16 = PARAM_UNSCALE(params[3], 500.0f, 5000.0f); -#ifndef EVOLVE_MUTATION_MIN_PCT -#define EVOLVE_MUTATION_MIN_PCT 10 ///< Минимальная мутация (в процентах от Loss) +#ifndef GEN_MUTATION_MIN_PCT +#define GEN_MUTATION_MIN_PCT 10 ///< Минимальная мутация (в процентах от Loss) #endif -#ifndef EVOLVE_MUTATION_MAX_PCT -#define EVOLVE_MUTATION_MAX_PCT 100 ///< Максимальная мутация (в процентах от Loss) +#ifndef GEN_MUTATION_MAX_PCT +#define GEN_MUTATION_MAX_PCT 100 ///< Максимальная мутация (в процентах от Loss) #endif #ifndef ELOVLE_N_ELITE_CANDIDATE #define ELOVLE_N_ELITE_CANDIDATE 2 ///< Количество кандидатов, которые проходят в поколение без изменений (по умолчанию 2) @@ -113,19 +113,19 @@ typedef struct { //INTERNAL float gen_mut; ///< Амплитуда мутации у текущей популяции - float loss[EVOLVE_MAX_CANDIDATES]; ///< Loss для каждого кандидата - float candidates[EVOLVE_MAX_CANDIDATES][EVOLVE_MAX_PARAMS]; ///< Параметры кандидатов - uint16_t sorted_idx[EVOLVE_MAX_CANDIDATES]; ///< Индексы отсортированных кандидатов -} EvolveOptimizer_t; + float loss[GEN_MAX_CANDIDATES]; ///< Loss для каждого кандидата + float candidates[GEN_MAX_CANDIDATES][GEN_MAX_PARAMS]; ///< Параметры кандидатов + uint16_t sorted_idx[GEN_MAX_CANDIDATES]; ///< Индексы отсортированных кандидатов +} GenOptimizer_t; /** - * @cond EVOLVE_INTERNAL + * @cond GEN_INTERNAL */ // Вспомогательный указатель для сортировки -static EvolveOptimizer_t *g_sort_opt; // глобальный указатель на текущий оптимизатор +static GenOptimizer_t *g_sort_opt; // глобальный указатель на текущий оптимизатор // функция условия сортировки static int cmp_idx(const void *a, const void *b) { @@ -152,7 +152,7 @@ static int cmp_idx(const void *a, const void *b) { * @return 0 — если окей, * -1 — если ошибка */ -__STATIC_INLINE int EvolveOptimizer_Init(EvolveOptimizer_t* opt, +static int GenOptimizer_Init(GenOptimizer_t* opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, @@ -162,15 +162,15 @@ __STATIC_INLINE int EvolveOptimizer_Init(EvolveOptimizer_t* opt, if((opt == NULL) || (start_params == NULL)) return -1; - if(n_params > EVOLVE_MAX_PARAMS) + if(n_params > GEN_MAX_PARAMS) return -1; opt->n_params = n_params; - if(n_cand > EVOLVE_MAX_CANDIDATES) + if(n_cand > GEN_MAX_CANDIDATES) return -1; opt->n_cand = n_cand; - if(n_best > EVOLVE_MAX_CANDIDATES/2) + if(n_best > GEN_MAX_CANDIDATES/2) return -1; opt->n_best = n_best; @@ -222,7 +222,7 @@ __STATIC_INLINE int EvolveOptimizer_Init(EvolveOptimizer_t* opt, * @note Функция использует глобальную внутреннюю переменную для сортировки. * Надо убедится что только один экземпляр функции запущен в момент времени */ -__STATIC_INLINE int EvolveOptimizer_Step(EvolveOptimizer_t* opt, +static int GenOptimizer_Step(GenOptimizer_t* opt, float* params, float loss) { @@ -230,15 +230,15 @@ __STATIC_INLINE int EvolveOptimizer_Step(EvolveOptimizer_t* opt, return -1; uint16_t n_params = opt->n_params; - if(n_params > EVOLVE_MAX_PARAMS) + if(n_params > GEN_MAX_PARAMS) return -1; uint16_t n_cand = opt->n_cand; - if(n_cand > EVOLVE_MAX_CANDIDATES) + if(n_cand > GEN_MAX_CANDIDATES) return -1; uint16_t n_best = opt->n_best; - if(n_best > EVOLVE_MAX_CANDIDATES/2) + if(n_best > GEN_MAX_CANDIDATES/2) return -1; float mut = opt->mutation_amp; @@ -280,8 +280,8 @@ __STATIC_INLINE int EvolveOptimizer_Step(EvolveOptimizer_t* opt, if(opt->stability < 0.0f) opt->stability = 0.0f; if(opt->stability > 1.0f) opt->stability = 1.0f; - float mut_pct = EVOLVE_MUTATION_MIN_PCT + - (EVOLVE_MUTATION_MAX_PCT - EVOLVE_MUTATION_MIN_PCT) * loss_ratio; + float mut_pct = GEN_MUTATION_MIN_PCT + + (GEN_MUTATION_MAX_PCT - GEN_MUTATION_MIN_PCT) * loss_ratio; float adaptive_mut = mut * (mut_pct / 100.0f); if (adaptive_mut < 0.0001f) adaptive_mut = 0.0001f; opt->gen_mut = adaptive_mut; @@ -315,7 +315,7 @@ __STATIC_INLINE int EvolveOptimizer_Step(EvolveOptimizer_t* opt, return 0; } -#else // ENABLE_EVOLVE_OPTIMIZATION +#else // GEN_OPTIMIZATION_ENABLE //заглушки typedef struct { uint16_t n_params; @@ -324,15 +324,15 @@ typedef struct { float mutation_amp; float loss[0]; float candidates[0][0]; -} EvolveOptimizer_t; -#define EvolveOptimizer_Init(opt, n_params, n_cand, n_best, mutation_amp, start_params) -#define EvolveOptimizer_Step(opt, params, LossFunc) +} GenOptimizer_t; +#define GenOptimizer_Init(opt, n_params, n_cand, n_best, mutation_amp, start_params) +#define GenOptimizer_Step(opt, params, LossFunc) #define PARAM_SCALE(x, min_val, max_val) (x) #define PARAM_UNSCALE(val, min_val, max_val) (val) -#endif // ENABLE_EVOLVE_OPTIMIZATION +#endif // GEN_OPTIMIZATION_ENABLE -#endif // __EVOLVE_OPTIMIZER_H_ +#endif // __GEN_OPTIMIZER_H_ -/** EVOLVE_OPTIMIZER +/** GEN_OPTIMIZER * @} */ diff --git a/MyLibs/Inc/mylibs_config.h b/MyLibs/Inc/mylibs_config.h index 68208d2..5e56f3d 100644 --- a/MyLibs/Inc/mylibs_config.h +++ b/MyLibs/Inc/mylibs_config.h @@ -55,21 +55,38 @@ /** - * @addtogroup EVOLVE_CONFIG Evolve configs + * @addtogroup GEN_CONFIG Genetic configs * @ingroup MYLIBS_CONFIG - * @brief Конфигурация однослойного персептрона и алгоритма обучения + * @brief Конфигурация генетического алгоритма обучения * @{ */ -#define ENABLE_EVOLVE_OPTIMIZATION ///< Включить оптимизацию параметров -#define EVOLVE_MAX_PARAMS 20 ///< Максимальное количество параметров -#define EVOLVE_MAX_CANDIDATES 100 ///< Максимальное количество кандидатов для обучения +#define GEN_OPTIMIZATION_ENABLE ///< Включить оптимизацию параметров +#define GEN_MAX_PARAMS 20 ///< Максимальное количество параметров +#define GEN_MAX_CANDIDATES 100 ///< Максимальное количество кандидатов для обучения -/** EVOLVE_CONFIG +/** GEN_CONFIG * @} */ +/** + * @addtogroup GEN_CONFIG Genetic configs + * @ingroup MYLIBS_CONFIG + * @brief Конфигурация генетического алгоритма обучения + * @{ + */ + + +#define BENCH_TIME_ENABLE ///< Включить бенч времени +#define BENCH_TIME_MAX_CHANNELS 16 ///< Максимальное количество каналов измерения + +/** GEN_CONFIG + * @} + */ + + + /** * @addtogroup LIBS_CONFIG Libraries configs * @ingroup MYLIBS_CONFIG @@ -79,7 +96,7 @@ #define local_time() uwTick ///< Локальное время -#define INCLUDE_EVOLVE_OPTIMIZER ///< Подключить библиотеку для оптимизации параметров +#define INCLUDE_GEN_OPTIMIZER ///< Подключить библиотеку для оптимизации параметров #define INCLUDE_BIT_ACCESS_LIB ///< Подключить библиотеку с typedef с битовыми полями #define INCLUDE_TRACKERS_LIB ///< Подключить библиотеку с трекерами #define INCLUDE_TRACE_LIB ///< Подключить библиотеку с трейсами diff --git a/MyLibs/Inc/mylibs_include.h b/MyLibs/Inc/mylibs_include.h index e9acba2..6f12c6c 100644 --- a/MyLibs/Inc/mylibs_include.h +++ b/MyLibs/Inc/mylibs_include.h @@ -79,8 +79,8 @@ #define HF_HandleFault(...) #endif -#ifdef INCLUDE_EVOLVE_OPTIMIZER -#include "evolve_optimizer.h" +#ifdef INCLUDE_GEN_OPTIMIZER +#include "gen_optimizer.h" #else typedef struct { uint16_t n_params; @@ -89,13 +89,29 @@ typedef struct { uint16_t iq_mutation; int32_t loss[0]; int32_t candidates[0][0]; -} EvolveOptimizer_t; -#define EvolveOptimizer_Init(opt, n_params, n_cand, n_best, iq_mutation, start_params) -#define EvolveOptimizer_Step(opt, params, LossFunc) +} GenOptimizer_t; +#define GenOptimizer_Init(opt, n_params, n_cand, n_best, iq_mutation, start_params) +#define GenOptimizer_Step(opt, params, LossFunc) #define PARAM_SCALE_Q16(x, min_val, max_val) (x) #define PARAM_UNSCALE_Q16(q16_val, min_val, max_val) (q16_val) #endif + + +#ifdef INCLUDE_BENCH_TEST +#include "bench_time.h" +#else //BENCH_TIME_ENABLE +#define BenchTime_Init() +#define BenchTime_Start(channel, ticks, tick_period) 0 +#define BenchTime_End(channel, ticks) 0 +#define BenchTime_GetMin(channel) 0 +#define BenchTime_GetMax(channel) 0 +#define BenchTime_GetAverage(channel) 0 +#define BenchTime_GetCount(channel) 0 +#define BenchTime_GetLast(channel) 0 +#define BenchTime_ResetStats(channel) +#endif //BENCH_TIME_ENABLE + #ifdef INCLUDE_GENERAL_PERIPH_LIBS #include "__general_flash.h" diff --git a/mainpage.h b/mainpage.h index 7b4af51..bfb5b30 100644 --- a/mainpage.h +++ b/mainpage.h @@ -14,7 +14,7 @@ MyLibs - это набор библиотек для удобной работы @subsubsection utils_module Общие утилиты (@ref MYLIBS_DEFINES) - Макросы для задержек и утилит (@ref DELAYS_DEFINES и @ref UTILS_DEFINES) - Трекеры для статистики и отладки (@ref TRACKERS и @ref TRACE) -- Эволюционный алгоритм для оптимизации параметров (@ref EVOLVE_OPTIMIZER) +- Эволюционный алгоритм для оптимизации параметров (@ref GEN_OPTIMIZER) - Битовый доступ к регистрам через union (@ref BIT_ACCESS_DEFINES) @subsubsection trace_module Трассировка @ref TRACE @@ -50,7 +50,7 @@ ProjectRoot/ │ │ ├── mylibs_config.h # Конфигурация библиотек │ │ ├── mylibs_defs.h # Общие определения и макросы │ │ ├── bit_access.h # Битовый доступ к регистрам -│ │ ├── evolve_optimizer.h # Оптимизатор (генетический алгоритм) +│ │ ├── gen_optimizer.h # Оптимизатор (генетический алгоритм) │ │ ├── trackers.h # Трекеры для отладки │ │ └── trace.h # Трассировка и логирование │ └── src/