From 3718c1eb77413ddf5a2afe2e63a9ec4e1d434af7 Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Fri, 7 Nov 2025 20:26:38 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20Doxygen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Doc/Doxyfile | 13 +- Doc/html/_s_e_g_g_e_r___r_t_t_8c_source.html | 2216 +++++++++++++++++ Doc/html/_s_e_g_g_e_r___r_t_t_8h_source.html | 636 +++++ ..._s_e_g_g_e_r___r_t_t___conf_8h_source.html | 543 ++++ ..._r_t_t___syscalls___k_e_i_l_8c_source.html | 508 ++++ ...s_e_g_g_e_r___r_t_t__printf_8c_source.html | 625 +++++ Doc/html/annotated.html | 22 +- Doc/html/annotated_dup.js | 10 +- Doc/html/bench__time_8h.html | 8 +- Doc/html/bench__time_8h__incl.map | 4 +- Doc/html/bench__time_8h__incl.md5 | 2 +- Doc/html/bench__time_8h__incl.png | Bin 5686 -> 5760 bytes Doc/html/bench__time_8h_source.html | 575 +++-- Doc/html/bit__access_8h.html | 30 +- Doc/html/bit__access_8h__dep__incl.map | 8 +- Doc/html/bit__access_8h__dep__incl.md5 | 2 +- Doc/html/bit__access_8h__dep__incl.png | Bin 2719 -> 2929 bytes Doc/html/bit__access_8h__incl.map | 16 +- Doc/html/bit__access_8h__incl.md5 | 2 +- Doc/html/bit__access_8h__incl.png | Bin 3898 -> 3967 bytes Doc/html/bit__access_8h_source.html | 4 +- Doc/html/classes.html | 11 +- .../dir_7de012165f681bf20d3995ae88f6551e.html | 130 + .../dir_7de012165f681bf20d3995ae88f6551e.js | 8 + .../dir_8eb68c124db7670c3cb56141b10519ea.html | 11 +- ...r_8eb68c124db7670c3cb56141b10519ea_dep.map | 9 +- ...r_8eb68c124db7670c3cb56141b10519ea_dep.md5 | 2 +- ...r_8eb68c124db7670c3cb56141b10519ea_dep.png | Bin 1860 -> 886 bytes .../dir_d4b2573a0c19afb61452cc3d00967af1.html | 15 +- Doc/html/doxygen_crawl.html | 238 +- Doc/html/files.html | 21 +- Doc/html/files_dup.js | 2 +- Doc/html/functions.html | 61 +- Doc/html/functions_vars.html | 61 +- Doc/html/gen__optimizer_8h.html | 18 +- Doc/html/gen__optimizer_8h__dep__incl.map | 8 +- Doc/html/gen__optimizer_8h__dep__incl.md5 | 2 +- Doc/html/gen__optimizer_8h__dep__incl.png | Bin 2768 -> 2990 bytes Doc/html/gen__optimizer_8h__incl.map | 4 +- Doc/html/gen__optimizer_8h__incl.md5 | 2 +- Doc/html/gen__optimizer_8h__incl.png | Bin 6168 -> 6234 bytes Doc/html/gen__optimizer_8h_source.html | 691 +++-- Doc/html/globals.html | 155 ++ Doc/html/globals_defs.html | 32 +- Doc/html/globals_func.html | 60 +- Doc/html/group___b_e_n_c_h___t_i_m_e.html | 30 +- Doc/html/group___b_e_n_c_h___t_i_m_e.js | 2 +- 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 | 2 +- Doc/html/group___b_e_n_c_h___t_i_m_e.png | Bin 1095 -> 1078 bytes ...__b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html | 4 +- ...___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.map | 2 +- ...___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.md5 | 2 +- .../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html | 16 +- .../group___d_e_l_a_y_s___d_e_f_i_n_e_s.map | 2 +- .../group___d_e_l_a_y_s___d_e_f_i_n_e_s.md5 | 2 +- ...r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html | 16 +- ..._r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.map | 2 +- ..._r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.md5 | 2 +- .../group___g_e_n___o_p_t_i_m_i_z_e_r.html | 32 +- Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.js | 6 +- .../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 | 2 +- .../group___g_e_n___o_p_t_i_m_i_z_e_r.png | Bin 1121 -> 1115 bytes Doc/html/group___m_y_l_i_b_s___a_l_l.html | 15 +- Doc/html/group___m_y_l_i_b_s___a_l_l.js | 4 +- Doc/html/group___m_y_l_i_b_s___a_l_l.map | 4 +- Doc/html/group___m_y_l_i_b_s___a_l_l.md5 | 2 +- Doc/html/group___m_y_l_i_b_s___a_l_l.png | Bin 2675 -> 2703 bytes ...__m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.html | 151 ++ ...p___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.js | 7 + ...___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.map | 8 + ...___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.md5 | 1 + ...___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.png | Bin 0 -> 5702 bytes ...p___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html | 23 +- ...up___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.map | 8 +- ...up___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.md5 | 2 +- ...up___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.png | Bin 5076 -> 957 bytes Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.html | 151 ++ Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.js | 7 + Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.map | 8 + Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.md5 | 1 + Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.png | Bin 0 -> 5702 bytes Doc/html/group___t_r_a_c_e.html | 14 +- Doc/html/group___t_r_a_c_e.map | 12 +- Doc/html/group___t_r_a_c_e.md5 | 2 +- Doc/html/group___t_r_a_c_e.png | Bin 5961 -> 5958 bytes Doc/html/group___t_r_a_c_e___g_p_i_o.html | 6 +- ...group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html | 26 +- ...group___t_r_a_c_e___r_t_t___f_l_a_s_h.html | 10 +- .../group___t_r_a_c_e___r_t_t___f_l_a_s_h.js | 2 +- Doc/html/group___t_r_a_c_e___s_e_r_i_a_l.html | 14 +- Doc/html/group___t_r_a_c_k_e_r_s.html | 54 +- Doc/html/group___t_r_a_c_k_e_r_s.map | 4 +- Doc/html/group___t_r_a_c_k_e_r_s.md5 | 2 +- Doc/html/group___t_r_a_c_k_e_r_s.png | Bin 1118 -> 1103 bytes .../group___u_t_i_l_s___d_e_f_i_n_e_s.html | 12 +- .../group___u_t_i_l_s___d_e_f_i_n_e_s.map | 2 +- .../group___u_t_i_l_s___d_e_f_i_n_e_s.md5 | 2 +- Doc/html/index.html | 140 +- Doc/html/index.js | 6 + Doc/html/mainpage_8h_source.html | 86 +- Doc/html/menudata.js | 47 +- Doc/html/mylibs__config_8h.html | 79 +- Doc/html/mylibs__config_8h__dep__incl.map | 65 +- Doc/html/mylibs__config_8h__dep__incl.md5 | 2 +- Doc/html/mylibs__config_8h__dep__incl.png | Bin 60111 -> 23867 bytes Doc/html/mylibs__config_8h__incl.map | 8 +- Doc/html/mylibs__config_8h__incl.md5 | 2 +- Doc/html/mylibs__config_8h__incl.png | Bin 2217 -> 2284 bytes Doc/html/mylibs__config_8h_source.html | 2 +- Doc/html/mylibs__defs_8h.html | 79 +- Doc/html/mylibs__defs_8h__dep__incl.map | 61 +- Doc/html/mylibs__defs_8h__dep__incl.md5 | 2 +- Doc/html/mylibs__defs_8h__dep__incl.png | Bin 56859 -> 21452 bytes Doc/html/mylibs__defs_8h__incl.map | 12 +- Doc/html/mylibs__defs_8h__incl.md5 | 2 +- Doc/html/mylibs__defs_8h__incl.png | Bin 3085 -> 3155 bytes Doc/html/mylibs__defs_8h_source.html | 409 +-- Doc/html/mylibs__include_8h.html | 100 +- Doc/html/mylibs__include_8h__incl.map | 76 +- Doc/html/mylibs__include_8h__incl.md5 | 2 +- Doc/html/mylibs__include_8h__incl.png | Bin 27999 -> 33678 bytes Doc/html/mylibs__include_8h_source.html | 247 +- Doc/html/navtreedata.js | 20 +- Doc/html/navtreeindex0.js | 341 ++- Doc/html/search/all_10.js | 83 +- Doc/html/search/all_11.js | 50 +- Doc/html/search/all_12.js | 2 +- Doc/html/search/all_13.js | 2 +- Doc/html/search/all_14.js | 5 +- Doc/html/search/all_15.js | 7 +- Doc/html/search/all_16.js | 3 +- Doc/html/search/all_17.js | 2 +- Doc/html/search/all_18.js | 3 +- Doc/html/search/all_19.js | 2 +- Doc/html/search/all_1a.js | 4 + Doc/html/search/all_1b.js | 4 + Doc/html/search/all_2.js | 26 +- Doc/html/search/all_3.js | 10 +- Doc/html/search/all_4.js | 6 +- Doc/html/search/all_6.js | 46 +- Doc/html/search/all_7.js | 29 +- Doc/html/search/all_8.js | 3 +- Doc/html/search/all_9.js | 26 +- Doc/html/search/all_a.js | 37 +- Doc/html/search/all_c.js | 3 +- Doc/html/search/all_d.js | 4 +- Doc/html/search/all_f.js | 48 +- Doc/html/search/classes_1.js | 4 +- Doc/html/search/classes_4.js | 5 +- Doc/html/search/classes_5.js | 6 +- Doc/html/search/files_1.js | 10 +- Doc/html/search/functions_1.js | 12 +- Doc/html/search/groups_2.js | 5 +- Doc/html/search/groups_3.js | 4 +- Doc/html/search/groups_4.js | 3 +- Doc/html/search/groups_6.js | 10 +- Doc/html/search/groups_8.js | 3 +- Doc/html/search/groups_9.js | 5 +- Doc/html/search/groups_a.js | 3 +- Doc/html/search/groups_b.js | 3 +- Doc/html/search/groups_c.js | 3 +- Doc/html/search/groups_d.js | 7 +- Doc/html/search/groups_e.js | 4 +- Doc/html/search/groups_f.js | 9 +- Doc/html/search/pages_0.js | 2 +- Doc/html/search/pages_1.js | 9 +- Doc/html/search/pages_2.js | 2 +- Doc/html/search/pages_3.js | 2 +- Doc/html/search/pages_4.js | 2 +- Doc/html/search/pages_5.js | 5 +- Doc/html/search/pages_6.js | 3 +- Doc/html/search/pages_7.js | 5 +- Doc/html/search/pages_8.js | 4 +- Doc/html/search/pages_9.js | 2 +- Doc/html/search/pages_a.js | 2 +- Doc/html/search/pages_b.js | 3 +- Doc/html/search/pages_c.js | 2 +- Doc/html/search/pages_d.js | 4 + Doc/html/search/pages_e.js | 4 + Doc/html/search/pages_f.js | 4 + Doc/html/search/searchdata.js | 26 +- Doc/html/search/variables_0.js | 9 +- Doc/html/search/variables_1.js | 4 +- Doc/html/search/variables_2.js | 4 +- Doc/html/search/variables_3.js | 9 +- Doc/html/search/variables_4.js | 5 +- Doc/html/search/variables_5.js | 4 +- Doc/html/search/variables_6.js | 10 +- 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 | 10 +- Doc/html/search/variables_b.js | 25 +- Doc/html/struct_bench_time__t-members.html | 2 +- Doc/html/struct_bench_time__t.html | 18 +- Doc/html/struct_bench_time__t.js | 2 +- Doc/html/struct_bench_time_channel__t.html | 14 +- Doc/html/struct_bench_time_stats__t.html | 16 +- Doc/html/struct_gen_optimizer__t-members.html | 6 +- Doc/html/struct_gen_optimizer__t.html | 58 +- Doc/html/struct_gen_optimizer__t.js | 6 +- Doc/html/struct_h_f___stack_frame__t.html | 22 +- ...truct_r_t_t___flash_header__t-members.html | 2 +- Doc/html/struct_r_t_t___flash_header__t.html | 22 +- Doc/html/struct_r_t_t___flash_header__t.js | 2 +- ...r_t_t___b_u_f_f_e_r___d_o_w_n-members.html | 122 + ...g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n.html | 234 ++ ...r___r_t_t___b_u_f_f_e_r___u_p-members.html | 122 + ...e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p.html | 234 ++ ...uct_s_e_g_g_e_r___r_t_t___c_b-members.html | 121 + .../struct_s_e_g_g_e_r___r_t_t___c_b.html | 230 ++ ...s_e_g_g_e_r___r_t_t___c_b__coll__graph.map | 7 + ...s_e_g_g_e_r___r_t_t___c_b__coll__graph.md5 | 1 + ...s_e_g_g_e_r___r_t_t___c_b__coll__graph.png | Bin 0 -> 4216 bytes ...r_t_t___p_r_i_n_t_f___d_e_s_c-members.html | 121 + ...g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c.html | 217 ++ Doc/html/topics.html | 43 +- Doc/html/trace_8h.html | 42 +- Doc/html/trace_8h__dep__incl.map | 8 +- Doc/html/trace_8h__dep__incl.md5 | 2 +- Doc/html/trace_8h__dep__incl.png | Bin 2676 -> 2894 bytes Doc/html/trace_8h__incl.map | 26 +- Doc/html/trace_8h__incl.md5 | 2 +- Doc/html/trace_8h__incl.png | Bin 6782 -> 12483 bytes Doc/html/trace_8h_source.html | 1212 +++++---- Doc/html/trackers_8h.html | 30 +- Doc/html/trackers_8h__dep__incl.map | 8 +- Doc/html/trackers_8h__dep__incl.md5 | 2 +- Doc/html/trackers_8h__dep__incl.png | Bin 2718 -> 2928 bytes Doc/html/trackers_8h__incl.map | 16 +- Doc/html/trackers_8h__incl.md5 | 2 +- Doc/html/trackers_8h__incl.png | Bin 3894 -> 3964 bytes Doc/html/trackers_8h_source.html | 315 ++- Doc/html/unionuint16___bit_type_def.html | 40 +- Doc/html/unionuint32___bit_type_def.html | 72 +- Doc/html/unionuint64___bit_type_def.html | 136 +- Doc/html/unionuint8___bit_type_def.html | 24 +- Doc/latex/_s_e_g_g_e_r___r_t_t_8c_source.tex | 2105 ++++++++++++++++ Doc/latex/_s_e_g_g_e_r___r_t_t_8h_source.tex | 519 ++++ .../_s_e_g_g_e_r___r_t_t___conf_8h_source.tex | 435 ++++ ...__r_t_t___syscalls___k_e_i_l_8c_source.tex | 400 +++ ..._s_e_g_g_e_r___r_t_t__printf_8c_source.tex | 514 ++++ Doc/latex/annotated.tex | 10 +- Doc/latex/bench__time_8h.tex | 9 +- Doc/latex/bench__time_8h__incl.md5 | 2 +- Doc/latex/bench__time_8h__incl.pdf | Bin 21634 -> 21650 bytes Doc/latex/bench__time_8h_source.tex | 505 ++-- Doc/latex/bit__access_8h.tex | 14 +- Doc/latex/bit__access_8h__dep__incl.md5 | 2 +- Doc/latex/bit__access_8h__dep__incl.pdf | Bin 20035 -> 20055 bytes Doc/latex/bit__access_8h__incl.md5 | 2 +- Doc/latex/bit__access_8h__incl.pdf | Bin 21517 -> 21532 bytes Doc/latex/bit__access_8h_source.tex | 4 +- Doc/latex/files.tex | 33 +- Doc/latex/gen__optimizer_8h.tex | 12 +- Doc/latex/gen__optimizer_8h__dep__incl.md5 | 2 +- Doc/latex/gen__optimizer_8h__dep__incl.pdf | Bin 21222 -> 21238 bytes Doc/latex/gen__optimizer_8h__incl.md5 | 2 +- Doc/latex/gen__optimizer_8h__incl.pdf | Bin 22697 -> 22691 bytes Doc/latex/gen__optimizer_8h_source.tex | 647 +++-- Doc/latex/group___b_e_n_c_h___t_i_m_e.md5 | 2 +- Doc/latex/group___b_e_n_c_h___t_i_m_e.pdf | Bin 13487 -> 14306 bytes Doc/latex/group___b_e_n_c_h___t_i_m_e.tex | 27 +- ...___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.md5 | 2 +- ...___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.pdf | Bin 14243 -> 14236 bytes .../group___d_e_l_a_y_s___d_e_f_i_n_e_s.md5 | 2 +- .../group___d_e_l_a_y_s___d_e_f_i_n_e_s.pdf | Bin 14044 -> 14039 bytes .../group___d_e_l_a_y_s___d_e_f_i_n_e_s.tex | 11 +- ..._r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.md5 | 2 +- ..._r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.pdf | Bin 13525 -> 13521 bytes ..._r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.tex | 15 +- Doc/latex/group___g_e_n___c_o_n_f_i_g.tex | 3 +- .../group___g_e_n___o_p_t_i_m_i_z_e_r.md5 | 2 +- .../group___g_e_n___o_p_t_i_m_i_z_e_r.pdf | Bin 14446 -> 15303 bytes .../group___g_e_n___o_p_t_i_m_i_z_e_r.tex | 21 +- Doc/latex/group___l_i_b_s___c_o_n_f_i_g.tex | 3 +- Doc/latex/group___m_y_l_i_b_s___a_l_l.md5 | 2 +- Doc/latex/group___m_y_l_i_b_s___a_l_l.pdf | Bin 16525 -> 16232 bytes Doc/latex/group___m_y_l_i_b_s___a_l_l.tex | 16 +- .../group___m_y_l_i_b_s___c_o_n_f_i_g.tex | 3 +- ...___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.md5 | 1 + ...___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.pdf | Bin 0 -> 19247 bytes ...___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.tex | 34 + .../group___m_y_l_i_b_s___d_e_f_i_n_e_s.tex | 3 +- ...up___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.md5 | 2 +- ...up___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.pdf | Bin 17700 -> 13699 bytes ...up___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.tex | 23 +- Doc/latex/group___m_y_l_i_b_s___t_o_o_l_s.md5 | 1 + Doc/latex/group___m_y_l_i_b_s___t_o_o_l_s.pdf | Bin 0 -> 17625 bytes Doc/latex/group___m_y_l_i_b_s___t_o_o_l_s.tex | 35 + Doc/latex/group___t_r_a_c_e.md5 | 2 +- Doc/latex/group___t_r_a_c_e.pdf | Bin 17814 -> 18952 bytes Doc/latex/group___t_r_a_c_e.tex | 3 +- Doc/latex/group___t_r_a_c_e___c_o_n_f_i_g.tex | 3 +- Doc/latex/group___t_r_a_c_e___g_p_i_o.tex | 7 +- .../group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.tex | 21 +- .../group___t_r_a_c_e___r_t_t___f_l_a_s_h.tex | 11 +- Doc/latex/group___t_r_a_c_e___s_e_r_i_a_l.tex | 15 +- Doc/latex/group___t_r_a_c_k_e_r_s.md5 | 2 +- Doc/latex/group___t_r_a_c_k_e_r_s.pdf | Bin 14104 -> 15246 bytes Doc/latex/group___t_r_a_c_k_e_r_s.tex | 45 +- .../group___u_t_i_l_s___d_e_f_i_n_e_s.md5 | 2 +- .../group___u_t_i_l_s___d_e_f_i_n_e_s.pdf | Bin 13680 -> 13675 bytes .../group___u_t_i_l_s___d_e_f_i_n_e_s.tex | 11 +- Doc/latex/index.tex | 144 +- Doc/latex/mainpage_8h_source.tex | 84 +- 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 26299 -> 24073 bytes Doc/latex/mylibs__config_8h__incl.md5 | 2 +- Doc/latex/mylibs__config_8h__incl.pdf | Bin 21085 -> 21095 bytes Doc/latex/mylibs__config_8h_source.tex | 2 +- Doc/latex/mylibs__defs_8h.tex | 12 +- Doc/latex/mylibs__defs_8h__dep__incl.md5 | 2 +- Doc/latex/mylibs__defs_8h__dep__incl.pdf | Bin 26171 -> 23959 bytes Doc/latex/mylibs__defs_8h__incl.md5 | 2 +- Doc/latex/mylibs__defs_8h__incl.pdf | Bin 21375 -> 21394 bytes Doc/latex/mylibs__defs_8h_source.tex | 409 +-- Doc/latex/mylibs__include_8h.tex | 25 +- Doc/latex/mylibs__include_8h__incl.md5 | 2 +- Doc/latex/mylibs__include_8h__incl.pdf | Bin 25600 -> 26153 bytes Doc/latex/mylibs__include_8h_source.tex | 241 +- Doc/latex/refman.tex | 33 +- Doc/latex/struct_bench_time__t.tex | 17 +- Doc/latex/struct_bench_time_channel__t.tex | 15 +- Doc/latex/struct_bench_time_stats__t.tex | 14 +- Doc/latex/struct_gen_optimizer__t.tex | 50 +- Doc/latex/struct_h_f___stack_frame__t.tex | 20 +- Doc/latex/struct_r_t_t___flash_header__t.tex | 18 +- ..._g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n.tex | 94 + ..._e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p.tex | 94 + .../struct_s_e_g_g_e_r___r_t_t___c_b.tex | 91 + ...s_e_g_g_e_r___r_t_t___c_b__coll__graph.md5 | 1 + ...s_e_g_g_e_r___r_t_t___c_b__coll__graph.pdf | Bin 0 -> 16092 bytes ..._g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c.tex | 82 + Doc/latex/topics.tex | 39 +- Doc/latex/trace_8h.tex | 16 +- Doc/latex/trace_8h__dep__incl.md5 | 2 +- Doc/latex/trace_8h__dep__incl.pdf | Bin 20228 -> 20259 bytes Doc/latex/trace_8h__incl.md5 | 2 +- Doc/latex/trace_8h__incl.pdf | Bin 22325 -> 23189 bytes Doc/latex/trace_8h_source.tex | 1153 +++++---- Doc/latex/trackers_8h.tex | 14 +- Doc/latex/trackers_8h__dep__incl.md5 | 2 +- Doc/latex/trackers_8h__dep__incl.pdf | Bin 20756 -> 20771 bytes Doc/latex/trackers_8h__incl.md5 | 2 +- Doc/latex/trackers_8h__incl.pdf | Bin 22240 -> 22252 bytes Doc/latex/trackers_8h_source.tex | 313 ++- Doc/latex/unionuint16___bit_type_def.tex | 4 +- Doc/latex/unionuint32___bit_type_def.tex | 4 +- Doc/latex/unionuint64___bit_type_def.tex | 4 +- Doc/latex/unionuint8___bit_type_def.tex | 4 +- MyLibs/Inc/bench_time.h | 1 - MyLibs/Inc/bit_access.h | 2 +- MyLibs/Inc/gen_optimizer.h | 1 - MyLibs/Inc/mylibs_defs.h | 29 +- MyLibs/Inc/mylibs_include.h | 7 +- MyLibs/Inc/trace.h | 1 - MyLibs/Inc/trackers.h | 1 - README.md | 82 + mainpage.h | 94 - 363 files changed, 16172 insertions(+), 6104 deletions(-) create mode 100644 Doc/html/_s_e_g_g_e_r___r_t_t_8c_source.html create mode 100644 Doc/html/_s_e_g_g_e_r___r_t_t_8h_source.html create mode 100644 Doc/html/_s_e_g_g_e_r___r_t_t___conf_8h_source.html create mode 100644 Doc/html/_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source.html create mode 100644 Doc/html/_s_e_g_g_e_r___r_t_t__printf_8c_source.html create mode 100644 Doc/html/dir_7de012165f681bf20d3995ae88f6551e.html create mode 100644 Doc/html/dir_7de012165f681bf20d3995ae88f6551e.js create mode 100644 Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.html create mode 100644 Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.js create mode 100644 Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.map create mode 100644 Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.md5 create mode 100644 Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.png create mode 100644 Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.html create mode 100644 Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.js create mode 100644 Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.map create mode 100644 Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.md5 create mode 100644 Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.png create mode 100644 Doc/html/index.js create mode 100644 Doc/html/search/all_1a.js create mode 100644 Doc/html/search/all_1b.js create mode 100644 Doc/html/search/pages_d.js create mode 100644 Doc/html/search/pages_e.js create mode 100644 Doc/html/search/pages_f.js create mode 100644 Doc/html/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n-members.html create mode 100644 Doc/html/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n.html create mode 100644 Doc/html/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p-members.html create mode 100644 Doc/html/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p.html create mode 100644 Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b-members.html create mode 100644 Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b.html create mode 100644 Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b__coll__graph.map create mode 100644 Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b__coll__graph.md5 create mode 100644 Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b__coll__graph.png create mode 100644 Doc/html/struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c-members.html create mode 100644 Doc/html/struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c.html create mode 100644 Doc/latex/_s_e_g_g_e_r___r_t_t_8c_source.tex create mode 100644 Doc/latex/_s_e_g_g_e_r___r_t_t_8h_source.tex create mode 100644 Doc/latex/_s_e_g_g_e_r___r_t_t___conf_8h_source.tex create mode 100644 Doc/latex/_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source.tex create mode 100644 Doc/latex/_s_e_g_g_e_r___r_t_t__printf_8c_source.tex create mode 100644 Doc/latex/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.md5 create mode 100644 Doc/latex/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.pdf create mode 100644 Doc/latex/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.tex create mode 100644 Doc/latex/group___m_y_l_i_b_s___t_o_o_l_s.md5 create mode 100644 Doc/latex/group___m_y_l_i_b_s___t_o_o_l_s.pdf create mode 100644 Doc/latex/group___m_y_l_i_b_s___t_o_o_l_s.tex create mode 100644 Doc/latex/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n.tex create mode 100644 Doc/latex/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p.tex create mode 100644 Doc/latex/struct_s_e_g_g_e_r___r_t_t___c_b.tex create mode 100644 Doc/latex/struct_s_e_g_g_e_r___r_t_t___c_b__coll__graph.md5 create mode 100644 Doc/latex/struct_s_e_g_g_e_r___r_t_t___c_b__coll__graph.pdf create mode 100644 Doc/latex/struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c.tex create mode 100644 README.md delete mode 100644 mainpage.h diff --git a/Doc/Doxyfile b/Doc/Doxyfile index 71d218b..bba7b58 100644 --- a/Doc/Doxyfile +++ b/Doc/Doxyfile @@ -991,9 +991,10 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = E:\.WORK\STM32\STM32_ExtendedLibs\MyLibs \ - E:\.WORK\STM32\STM32_ExtendedLibs\STM32_General \ - E:\.WORK\STM32\STM32_ExtendedLibs\mainpage.h +INPUT = ../MyLibs/Inc \ + ../MyLibs/Src \ + ../RTT \ + ../ # This tag can be used to specify the character encoding of the source files # that Doxygen parses. Internally Doxygen uses the UTF-8 encoding. Doxygen uses @@ -1088,7 +1089,7 @@ FILE_PATTERNS = *.c \ # be searched for input files as well. # The default value is: NO. -RECURSIVE = YES +RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a @@ -1208,7 +1209,7 @@ FILTER_SOURCE_PATTERNS = # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the Doxygen output. -USE_MDFILE_AS_MAINPAGE = +USE_MDFILE_AS_MAINPAGE = ..\README.md # If the IMPLICIT_DIR_DOCS tag is set to YES, any README.md file found in sub- # directories of the project's root, is used as the documentation for that sub- @@ -2500,7 +2501,7 @@ MACRO_EXPANSION = YES # The default value is: NO. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -EXPAND_ONLY_PREDEF = NO +EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES, the include files in the # INCLUDE_PATH will be searched if a #include is found. diff --git a/Doc/html/_s_e_g_g_e_r___r_t_t_8c_source.html b/Doc/html/_s_e_g_g_e_r___r_t_t_8c_source.html new file mode 100644 index 0000000..fb443ed --- /dev/null +++ b/Doc/html/_s_e_g_g_e_r___r_t_t_8c_source.html @@ -0,0 +1,2216 @@ + + + + + + + +MyLibs: E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/RTT/SEGGER_RTT.c Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SEGGER_RTT.c
+
+
+
1/*********************************************************************
+
2* SEGGER Microcontroller GmbH *
+
3* The Embedded Experts *
+
4**********************************************************************
+
5* *
+
6* (c) 1995 - 2021 SEGGER Microcontroller GmbH *
+
7* *
+
8* www.segger.com Support: support@segger.com *
+
9* *
+
10**********************************************************************
+
11* *
+
12* SEGGER RTT * Real Time Transfer for embedded targets *
+
13* *
+
14**********************************************************************
+
15* *
+
16* All rights reserved. *
+
17* *
+
18* SEGGER strongly recommends to not make any changes *
+
19* to or modify the source code of this software in order to stay *
+
20* compatible with the RTT protocol and J-Link. *
+
21* *
+
22* Redistribution and use in source and binary forms, with or *
+
23* without modification, are permitted provided that the following *
+
24* condition is met: *
+
25* *
+
26* o Redistributions of source code must retain the above copyright *
+
27* notice, this condition and the following disclaimer. *
+
28* *
+
29* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
+
30* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
+
31* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
+
32* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
+
33* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
+
34* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
+
35* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
+
36* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
+
37* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
+
38* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
+
39* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
+
40* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
+
41* DAMAGE. *
+
42* *
+
43**********************************************************************
+
44* *
+
45* RTT version: 8.10g *
+
46* *
+
47**********************************************************************
+
48
+
49---------------------------END-OF-HEADER------------------------------
+
50File : SEGGER_RTT.c
+
51Purpose : Implementation of SEGGER real-time transfer (RTT) which
+
52 allows real-time communication on targets which support
+
53 debugger memory accesses while the CPU is running.
+
54Revision: $Rev: 29668 $
+
55
+
56Additional information:
+
57 Type "int" is assumed to be 32-bits in size
+
58 H->T Host to target communication
+
59 T->H Target to host communication
+
60
+
61 RTT channel 0 is always present and reserved for Terminal usage.
+
62 Name is fixed to "Terminal"
+
63
+
64 Effective buffer size: SizeOfBuffer - 1
+
65
+
66 WrOff == RdOff: Buffer is empty
+
67 WrOff == (RdOff - 1): Buffer is full
+
68 WrOff > RdOff: Free space includes wrap-around
+
69 WrOff < RdOff: Used space includes wrap-around
+
70 (WrOff == (SizeOfBuffer - 1)) && (RdOff == 0):
+
71 Buffer full and wrap-around after next byte
+
72
+
73
+
74----------------------------------------------------------------------
+
75*/
+
76
+
77#include "SEGGER_RTT.h"
+
78
+
79#include <string.h> // for memcpy
+
80
+
81/*********************************************************************
+
82*
+
83* Configuration, default values
+
84*
+
85**********************************************************************
+
86*/
+
87
+
88#if SEGGER_RTT_CPU_CACHE_LINE_SIZE
+
89 #ifdef SEGGER_RTT_CB_ALIGN
+
90 #error "Custom SEGGER_RTT_CB_ALIGN() is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
+
91 #endif
+
92 #ifdef SEGGER_RTT_BUFFER_ALIGN
+
93 #error "Custom SEGGER_RTT_BUFFER_ALIGN() is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
+
94 #endif
+
95 #ifdef SEGGER_RTT_PUT_CB_SECTION
+
96 #error "Custom SEGGER_RTT_PUT_CB_SECTION() is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
+
97 #endif
+
98 #ifdef SEGGER_RTT_PUT_BUFFER_SECTION
+
99 #error "Custom SEGGER_RTT_PUT_BUFFER_SECTION() is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
+
100 #endif
+
101 #ifdef SEGGER_RTT_BUFFER_ALIGNMENT
+
102 #error "Custom SEGGER_RTT_BUFFER_ALIGNMENT is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
+
103 #endif
+
104 #ifdef SEGGER_RTT_ALIGNMENT
+
105 #error "Custom SEGGER_RTT_ALIGNMENT is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
+
106 #endif
+
107#endif
+
108
+
109#ifndef BUFFER_SIZE_UP
+
110 #define BUFFER_SIZE_UP 1024 // Size of the buffer for terminal output of target, up to host
+
111#endif
+
112
+
113#ifndef BUFFER_SIZE_DOWN
+
114 #define BUFFER_SIZE_DOWN 16 // Size of the buffer for terminal input to target from host (Usually keyboard input)
+
115#endif
+
116
+
117#ifndef SEGGER_RTT_MAX_NUM_UP_BUFFERS
+
118 #define SEGGER_RTT_MAX_NUM_UP_BUFFERS 2 // Number of up-buffers (T->H) available on this target
+
119#endif
+
120
+
121#ifndef SEGGER_RTT_MAX_NUM_DOWN_BUFFERS
+
122 #define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS 2 // Number of down-buffers (H->T) available on this target
+
123#endif
+
124
+
125#ifndef SEGGER_RTT_BUFFER_SECTION
+
126 #if defined(SEGGER_RTT_SECTION)
+
127 #define SEGGER_RTT_BUFFER_SECTION SEGGER_RTT_SECTION
+
128 #endif
+
129#endif
+
130
+
131#ifndef SEGGER_RTT_ALIGNMENT
+
132 #define SEGGER_RTT_ALIGNMENT SEGGER_RTT_CPU_CACHE_LINE_SIZE
+
133#endif
+
134
+
135#ifndef SEGGER_RTT_BUFFER_ALIGNMENT
+
136 #define SEGGER_RTT_BUFFER_ALIGNMENT SEGGER_RTT_CPU_CACHE_LINE_SIZE
+
137#endif
+
138
+
139#ifndef SEGGER_RTT_MODE_DEFAULT
+
140 #define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP
+
141#endif
+
142
+
143#ifndef SEGGER_RTT_LOCK
+
144 #define SEGGER_RTT_LOCK()
+
145#endif
+
146
+
147#ifndef SEGGER_RTT_UNLOCK
+
148 #define SEGGER_RTT_UNLOCK()
+
149#endif
+
150
+
151#ifndef STRLEN
+
152 #define STRLEN(a) strlen((a))
+
153#endif
+
154
+
155#ifndef STRCPY
+
156 #define STRCPY(pDest, pSrc) strcpy((pDest), (pSrc))
+
157#endif
+
158
+
159#ifndef SEGGER_RTT_MEMCPY_USE_BYTELOOP
+
160 #define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0
+
161#endif
+
162
+
163#ifndef SEGGER_RTT_MEMCPY
+
164 #ifdef MEMCPY
+
165 #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) MEMCPY((pDest), (pSrc), (NumBytes))
+
166 #else
+
167 #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) memcpy((pDest), (pSrc), (NumBytes))
+
168 #endif
+
169#endif
+
170
+
171#ifndef MIN
+
172 #define MIN(a, b) (((a) < (b)) ? (a) : (b))
+
173#endif
+
174
+
175#ifndef MAX
+
176 #define MAX(a, b) (((a) > (b)) ? (a) : (b))
+
177#endif
+
178
+
179/*********************************************************************
+
180*
+
181* Defines, fixed
+
182*
+
183**********************************************************************
+
184*/
+
185#if (defined __ICCARM__) || (defined __ICCRX__)
+
186 #define RTT_PRAGMA(P) _Pragma(#P)
+
187#endif
+
188
+
189#if SEGGER_RTT_ALIGNMENT || SEGGER_RTT_BUFFER_ALIGNMENT
+
190 #if ((defined __GNUC__) || (defined __clang__))
+
191 #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment)))
+
192 #elif (defined __ICCARM__) || (defined __ICCRX__)
+
193 #define PRAGMA(A) _Pragma(#A)
+
194#define SEGGER_RTT_ALIGN(Var, Alignment) RTT_PRAGMA(data_alignment=Alignment) \
+
195 Var
+
196 #elif (defined __CC_ARM)
+
197 #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment)))
+
198 #else
+
199 #error "Alignment not supported for this compiler."
+
200 #endif
+
201#else
+
202 #define SEGGER_RTT_ALIGN(Var, Alignment) Var
+
203#endif
+
204
+
205#if defined(SEGGER_RTT_SECTION) || defined (SEGGER_RTT_BUFFER_SECTION)
+
206 #if ((defined __GNUC__) || (defined __clang__))
+
207 #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section))) Var
+
208 #elif (defined __ICCARM__) || (defined __ICCRX__)
+
209#define SEGGER_RTT_PUT_SECTION(Var, Section) RTT_PRAGMA(location=Section) \
+
210 Var
+
211 #elif (defined __CC_ARM)
+
212 #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section), zero_init)) Var
+
213 #else
+
214 #error "Section placement not supported for this compiler."
+
215 #endif
+
216#else
+
217 #define SEGGER_RTT_PUT_SECTION(Var, Section) Var
+
218#endif
+
219
+
220#if SEGGER_RTT_ALIGNMENT
+
221 #define SEGGER_RTT_CB_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_ALIGNMENT)
+
222#else
+
223 #define SEGGER_RTT_CB_ALIGN(Var) Var
+
224#endif
+
225
+
226#if SEGGER_RTT_BUFFER_ALIGNMENT
+
227 #define SEGGER_RTT_BUFFER_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_BUFFER_ALIGNMENT)
+
228#else
+
229 #define SEGGER_RTT_BUFFER_ALIGN(Var) Var
+
230#endif
+
231
+
232
+
233#if defined(SEGGER_RTT_SECTION)
+
234 #define SEGGER_RTT_PUT_CB_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_SECTION)
+
235#else
+
236 #define SEGGER_RTT_PUT_CB_SECTION(Var) Var
+
237#endif
+
238
+
239#if defined(SEGGER_RTT_BUFFER_SECTION)
+
240 #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_BUFFER_SECTION)
+
241#else
+
242 #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) Var
+
243#endif
+
244
+
245/*********************************************************************
+
246*
+
247* Static const data
+
248*
+
249**********************************************************************
+
250*/
+
251
+
252static const unsigned char _aTerminalId[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+
253
+
254/*********************************************************************
+
255*
+
256* Static data
+
257*
+
258**********************************************************************
+
259*/
+
260
+
261//
+
262// RTT Control Block and allocate buffers for channel 0
+
263//
+
264#if SEGGER_RTT_CPU_CACHE_LINE_SIZE
+
265 #if ((defined __GNUC__) || (defined __clang__))
+
266 SEGGER_RTT_CB _SEGGER_RTT __attribute__ ((aligned (SEGGER_RTT_CPU_CACHE_LINE_SIZE)));
+
267 static char _acUpBuffer [SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(BUFFER_SIZE_UP)] __attribute__ ((aligned (SEGGER_RTT_CPU_CACHE_LINE_SIZE)));
+
268 static char _acDownBuffer[SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(BUFFER_SIZE_DOWN)] __attribute__ ((aligned (SEGGER_RTT_CPU_CACHE_LINE_SIZE)));
+
269 #elif (defined __ICCARM__)
+
270 #pragma data_alignment=SEGGER_RTT_CPU_CACHE_LINE_SIZE
+
271 SEGGER_RTT_CB _SEGGER_RTT;
+
272 #pragma data_alignment=SEGGER_RTT_CPU_CACHE_LINE_SIZE
+
273 static char _acUpBuffer [SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(BUFFER_SIZE_UP)];
+
274 #pragma data_alignment=SEGGER_RTT_CPU_CACHE_LINE_SIZE
+
275 static char _acDownBuffer[SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(BUFFER_SIZE_DOWN)];
+
276 #else
+
277 #error "Don't know how to place _SEGGER_RTT, _acUpBuffer, _acDownBuffer cache-line aligned"
+
278 #endif
+
279#else
+
280 SEGGER_RTT_PUT_CB_SECTION(SEGGER_RTT_CB_ALIGN(SEGGER_RTT_CB _SEGGER_RTT));
+
281 SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acUpBuffer [BUFFER_SIZE_UP]));
+
282 SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acDownBuffer[BUFFER_SIZE_DOWN]));
+
283#endif
+
284
+
285static unsigned char _ActiveTerminal;
+
286
+
287/*********************************************************************
+
288*
+
289* Static functions
+
290*
+
291**********************************************************************
+
292*/
+
293
+
294/*********************************************************************
+
295*
+
296* _DoInit()
+
297*
+
298* Function description
+
299* Initializes the control block an buffers.
+
300*
+
301* Notes
+
302* (1) May only be called via INIT() to avoid overriding settings.
+
303* The only exception is SEGGER_RTT_Init(), to make an intentional override possible.
+
304*/
+
305 #define INIT() \
+
306 do { \
+
307 volatile SEGGER_RTT_CB* pRTTCBInit; \
+
308 pRTTCBInit = (volatile SEGGER_RTT_CB*)((uintptr_t)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); \
+
309 if (pRTTCBInit->acID[0] != 'S') { \
+
310 _DoInit(); \
+
311 } \
+
312 } while (0)
+
313
+
314static void _DoInit(void) {
+
315 volatile SEGGER_RTT_CB* p; // Volatile to make sure that compiler cannot change the order of accesses to the control block
+
316 static const char _aInitStr[] = "\0\0\0\0\0\0TTR REGGES"; // Init complete ID string to make sure that things also work if RTT is linked to a no-init memory area
+
317 unsigned i;
+
318 //
+
319 // Initialize control block
+
320 //
+
321 p = (volatile SEGGER_RTT_CB*)((uintptr_t)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access control block uncached so that nothing in the cache ever becomes dirty and all changes are visible in HW directly
+
322 memset((SEGGER_RTT_CB*)p, 0, sizeof(_SEGGER_RTT)); // Make sure that the RTT CB is always zero initialized.
+
323 p->MaxNumUpBuffers = SEGGER_RTT_MAX_NUM_UP_BUFFERS;
+
324 p->MaxNumDownBuffers = SEGGER_RTT_MAX_NUM_DOWN_BUFFERS;
+
325 //
+
326 // Initialize up buffer 0
+
327 //
+
328 p->aUp[0].sName = "Terminal";
+
329 p->aUp[0].pBuffer = _acUpBuffer;
+
330 p->aUp[0].SizeOfBuffer = BUFFER_SIZE_UP;
+
331 p->aUp[0].RdOff = 0u;
+
332 p->aUp[0].WrOff = 0u;
+
333 p->aUp[0].Flags = SEGGER_RTT_MODE_DEFAULT;
+
334 //
+
335 // Initialize down buffer 0
+
336 //
+
337 p->aDown[0].sName = "Terminal";
+
338 p->aDown[0].pBuffer = _acDownBuffer;
+
339 p->aDown[0].SizeOfBuffer = BUFFER_SIZE_DOWN;
+
340 p->aDown[0].RdOff = 0u;
+
341 p->aDown[0].WrOff = 0u;
+
342 p->aDown[0].Flags = SEGGER_RTT_MODE_DEFAULT;
+
343 //
+
344 // Finish initialization of the control block.
+
345 // Copy Id string backwards to make sure that "SEGGER RTT" is not found in initializer memory (usually flash),
+
346 // as this would cause J-Link to "find" the control block at a wrong address.
+
347 //
+
348 RTT__DMB(); // Force order of memory accesses for cores that may perform out-of-order memory accesses
+
349 for (i = 0; i < sizeof(_aInitStr) - 1; ++i) {
+
350 p->acID[i] = _aInitStr[sizeof(_aInitStr) - 2 - i]; // Skip terminating \0 at the end of the array
+
351 }
+
352 RTT__DMB(); // Force order of memory accesses for cores that may perform out-of-order memory accesses
+
353}
+
354
+
355/*********************************************************************
+
356*
+
357* _WriteBlocking()
+
358*
+
359* Function description
+
360* Stores a specified number of characters in SEGGER RTT ring buffer
+
361* and updates the associated write pointer which is periodically
+
362* read by the host.
+
363* The caller is responsible for managing the write chunk sizes as
+
364* _WriteBlocking() will block until all data has been posted successfully.
+
365*
+
366* Parameters
+
367* pRing Ring buffer to post to.
+
368* pBuffer Pointer to character array. Does not need to point to a \0 terminated string.
+
369* NumBytes Number of bytes to be stored in the SEGGER RTT control block.
+
370*
+
371* Return value
+
372* >= 0 - Number of bytes written into buffer.
+
373*/
+
374static unsigned _WriteBlocking(SEGGER_RTT_BUFFER_UP* pRing, const char* pBuffer, unsigned NumBytes) {
+
375 unsigned NumBytesToWrite;
+
376 unsigned NumBytesWritten;
+
377 unsigned RdOff;
+
378 unsigned WrOff;
+
379 volatile char* pDst;
+
380 //
+
381 // Write data to buffer and handle wrap-around if necessary
+
382 //
+
383 NumBytesWritten = 0u;
+
384 WrOff = pRing->WrOff;
+
385 do {
+
386 RdOff = pRing->RdOff; // May be changed by host (debug probe) in the meantime
+
387 if (RdOff > WrOff) {
+
388 NumBytesToWrite = RdOff - WrOff - 1u;
+
389 } else {
+
390 NumBytesToWrite = pRing->SizeOfBuffer - (WrOff - RdOff + 1u);
+
391 }
+
392 NumBytesToWrite = MIN(NumBytesToWrite, (pRing->SizeOfBuffer - WrOff)); // Number of bytes that can be written until buffer wrap-around
+
393 NumBytesToWrite = MIN(NumBytesToWrite, NumBytes);
+
394 pDst = (pRing->pBuffer + WrOff) + SEGGER_RTT_UNCACHED_OFF;
+
395#if SEGGER_RTT_MEMCPY_USE_BYTELOOP
+
396 NumBytesWritten += NumBytesToWrite;
+
397 NumBytes -= NumBytesToWrite;
+
398 WrOff += NumBytesToWrite;
+
399 while (NumBytesToWrite--) {
+
400 *pDst++ = *pBuffer++;
+
401 };
+
402#else
+
403 SEGGER_RTT_MEMCPY((void*)pDst, pBuffer, NumBytesToWrite);
+
404 NumBytesWritten += NumBytesToWrite;
+
405 pBuffer += NumBytesToWrite;
+
406 NumBytes -= NumBytesToWrite;
+
407 WrOff += NumBytesToWrite;
+
408#endif
+
409 if (WrOff == pRing->SizeOfBuffer) {
+
410 WrOff = 0u;
+
411 }
+
412 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
413 pRing->WrOff = WrOff;
+
414 } while (NumBytes);
+
415 return NumBytesWritten;
+
416}
+
417
+
418/*********************************************************************
+
419*
+
420* _WriteNoCheck()
+
421*
+
422* Function description
+
423* Stores a specified number of characters in SEGGER RTT ring buffer
+
424* and updates the associated write pointer which is periodically
+
425* read by the host.
+
426* It is callers responsibility to make sure data actually fits in buffer.
+
427*
+
428* Parameters
+
429* pRing Ring buffer to post to.
+
430* pBuffer Pointer to character array. Does not need to point to a \0 terminated string.
+
431* NumBytes Number of bytes to be stored in the SEGGER RTT control block.
+
432*
+
433* Notes
+
434* (1) If there might not be enough space in the "Up"-buffer, call _WriteBlocking
+
435*/
+
436static void _WriteNoCheck(SEGGER_RTT_BUFFER_UP* pRing, const char* pData, unsigned NumBytes) {
+
437 unsigned NumBytesAtOnce;
+
438 unsigned WrOff;
+
439 unsigned Rem;
+
440 volatile char* pDst;
+
441
+
442 WrOff = pRing->WrOff;
+
443 Rem = pRing->SizeOfBuffer - WrOff;
+
444 if (Rem > NumBytes) {
+
445 //
+
446 // All data fits before wrap around
+
447 //
+
448 pDst = (pRing->pBuffer + WrOff) + SEGGER_RTT_UNCACHED_OFF;
+
449#if SEGGER_RTT_MEMCPY_USE_BYTELOOP
+
450 WrOff += NumBytes;
+
451 while (NumBytes--) {
+
452 *pDst++ = *pData++;
+
453 };
+
454 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
455 pRing->WrOff = WrOff;
+
456#else
+
457 SEGGER_RTT_MEMCPY((void*)pDst, pData, NumBytes);
+
458 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
459 pRing->WrOff = WrOff + NumBytes;
+
460#endif
+
461 } else {
+
462 //
+
463 // We reach the end of the buffer, so need to wrap around
+
464 //
+
465#if SEGGER_RTT_MEMCPY_USE_BYTELOOP
+
466 pDst = (pRing->pBuffer + WrOff) + SEGGER_RTT_UNCACHED_OFF;
+
467 NumBytesAtOnce = Rem;
+
468 while (NumBytesAtOnce--) {
+
469 *pDst++ = *pData++;
+
470 };
+
471 pDst = pRing->pBuffer + SEGGER_RTT_UNCACHED_OFF;
+
472 NumBytesAtOnce = NumBytes - Rem;
+
473 while (NumBytesAtOnce--) {
+
474 *pDst++ = *pData++;
+
475 };
+
476 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
477 pRing->WrOff = NumBytes - Rem;
+
478#else
+
479 NumBytesAtOnce = Rem;
+
480 pDst = (pRing->pBuffer + WrOff) + SEGGER_RTT_UNCACHED_OFF;
+
481 SEGGER_RTT_MEMCPY((void*)pDst, pData, NumBytesAtOnce);
+
482 NumBytesAtOnce = NumBytes - Rem;
+
483 pDst = pRing->pBuffer + SEGGER_RTT_UNCACHED_OFF;
+
484 SEGGER_RTT_MEMCPY((void*)pDst, pData + Rem, NumBytesAtOnce);
+
485 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
486 pRing->WrOff = NumBytesAtOnce;
+
487#endif
+
488 }
+
489}
+
490
+
491/*********************************************************************
+
492*
+
493* _PostTerminalSwitch()
+
494*
+
495* Function description
+
496* Switch terminal to the given terminal ID. It is the caller's
+
497* responsibility to ensure the terminal ID is correct and there is
+
498* enough space in the buffer for this to complete successfully.
+
499*
+
500* Parameters
+
501* pRing Ring buffer to post to.
+
502* TerminalId Terminal ID to switch to.
+
503*/
+
504static void _PostTerminalSwitch(SEGGER_RTT_BUFFER_UP* pRing, unsigned char TerminalId) {
+
505 unsigned char ac[2];
+
506
+
507 ac[0] = 0xFFu;
+
508 ac[1] = _aTerminalId[TerminalId]; // Caller made already sure that TerminalId does not exceed our terminal limit
+
509 _WriteBlocking(pRing, (const char*)ac, 2u);
+
510}
+
511
+
512/*********************************************************************
+
513*
+
514* _GetAvailWriteSpace()
+
515*
+
516* Function description
+
517* Returns the number of bytes that can be written to the ring
+
518* buffer without blocking.
+
519*
+
520* Parameters
+
521* pRing Ring buffer to check.
+
522*
+
523* Return value
+
524* Number of bytes that are free in the buffer.
+
525*/
+
526static unsigned _GetAvailWriteSpace(SEGGER_RTT_BUFFER_UP* pRing) {
+
527 unsigned RdOff;
+
528 unsigned WrOff;
+
529 unsigned r;
+
530 //
+
531 // Avoid warnings regarding volatile access order. It's not a problem
+
532 // in this case, but dampen compiler enthusiasm.
+
533 //
+
534 RdOff = pRing->RdOff;
+
535 WrOff = pRing->WrOff;
+
536 if (RdOff <= WrOff) {
+
537 r = pRing->SizeOfBuffer - 1u - WrOff + RdOff;
+
538 } else {
+
539 r = RdOff - WrOff - 1u;
+
540 }
+
541 return r;
+
542}
+
543
+
544/*********************************************************************
+
545*
+
546* Public code
+
547*
+
548**********************************************************************
+
549*/
+
550
+
551/*********************************************************************
+
552*
+
553* SEGGER_RTT_ReadUpBufferNoLock()
+
554*
+
555* Function description
+
556* Reads characters from SEGGER real-time-terminal control block
+
557* which have been previously stored by the application.
+
558* Do not lock against interrupts and multiple access.
+
559* Used to do the same operation that J-Link does, to transfer
+
560* RTT data via other channels, such as TCP/IP or UART.
+
561*
+
562* Parameters
+
563* BufferIndex Index of Up-buffer to be used.
+
564* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-up-buffer to.
+
565* BufferSize Size of the target application buffer.
+
566*
+
567* Return value
+
568* Number of bytes that have been read.
+
569*
+
570* Additional information
+
571* This function must not be called when J-Link might also do RTT.
+
572*/
+
573unsigned SEGGER_RTT_ReadUpBufferNoLock(unsigned BufferIndex, void* pData, unsigned BufferSize) {
+
574 unsigned NumBytesRem;
+
575 unsigned NumBytesRead;
+
576 unsigned RdOff;
+
577 unsigned WrOff;
+
578 unsigned char* pBuffer;
+ +
580 volatile char* pSrc;
+
581
+
582 INIT();
+
583 pRing = (SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
584 pBuffer = (unsigned char*)pData;
+
585 RdOff = pRing->RdOff;
+
586 WrOff = pRing->WrOff;
+
587 NumBytesRead = 0u;
+
588 //
+
589 // Read from current read position to wrap-around of buffer, first
+
590 //
+
591 if (RdOff > WrOff) {
+
592 NumBytesRem = pRing->SizeOfBuffer - RdOff;
+
593 NumBytesRem = MIN(NumBytesRem, BufferSize);
+
594 pSrc = (pRing->pBuffer + RdOff) + SEGGER_RTT_UNCACHED_OFF;
+
595#if SEGGER_RTT_MEMCPY_USE_BYTELOOP
+
596 NumBytesRead += NumBytesRem;
+
597 BufferSize -= NumBytesRem;
+
598 RdOff += NumBytesRem;
+
599 while (NumBytesRem--) {
+
600 *pBuffer++ = *pSrc++;
+
601 };
+
602#else
+
603 SEGGER_RTT_MEMCPY(pBuffer, (void*)pSrc, NumBytesRem);
+
604 NumBytesRead += NumBytesRem;
+
605 pBuffer += NumBytesRem;
+
606 BufferSize -= NumBytesRem;
+
607 RdOff += NumBytesRem;
+
608#endif
+
609 //
+
610 // Handle wrap-around of buffer
+
611 //
+
612 if (RdOff == pRing->SizeOfBuffer) {
+
613 RdOff = 0u;
+
614 }
+
615 }
+
616 //
+
617 // Read remaining items of buffer
+
618 //
+
619 NumBytesRem = WrOff - RdOff;
+
620 NumBytesRem = MIN(NumBytesRem, BufferSize);
+
621 if (NumBytesRem > 0u) {
+
622 pSrc = (pRing->pBuffer + RdOff) + SEGGER_RTT_UNCACHED_OFF;
+
623#if SEGGER_RTT_MEMCPY_USE_BYTELOOP
+
624 NumBytesRead += NumBytesRem;
+
625 BufferSize -= NumBytesRem;
+
626 RdOff += NumBytesRem;
+
627 while (NumBytesRem--) {
+
628 *pBuffer++ = *pSrc++;
+
629 };
+
630#else
+
631 SEGGER_RTT_MEMCPY(pBuffer, (void*)pSrc, NumBytesRem);
+
632 NumBytesRead += NumBytesRem;
+
633 pBuffer += NumBytesRem;
+
634 BufferSize -= NumBytesRem;
+
635 RdOff += NumBytesRem;
+
636#endif
+
637 }
+
638 //
+
639 // Update read offset of buffer
+
640 //
+
641 if (NumBytesRead) {
+
642 pRing->RdOff = RdOff;
+
643 }
+
644 //
+
645 return NumBytesRead;
+
646}
+
647
+
648/*********************************************************************
+
649*
+
650* SEGGER_RTT_ReadNoLock()
+
651*
+
652* Function description
+
653* Reads characters from SEGGER real-time-terminal control block
+
654* which have been previously stored by the host.
+
655* Do not lock against interrupts and multiple access.
+
656*
+
657* Parameters
+
658* BufferIndex Index of Down-buffer to be used (e.g. 0 for "Terminal").
+
659* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-down-buffer to.
+
660* BufferSize Size of the target application buffer.
+
661*
+
662* Return value
+
663* Number of bytes that have been read.
+
664*/
+
665unsigned SEGGER_RTT_ReadNoLock(unsigned BufferIndex, void* pData, unsigned BufferSize) {
+
666 unsigned NumBytesRem;
+
667 unsigned NumBytesRead;
+
668 unsigned RdOff;
+
669 unsigned WrOff;
+
670 unsigned char* pBuffer;
+ +
672 volatile char* pSrc;
+
673 //
+
674 INIT();
+
675 pRing = (SEGGER_RTT_BUFFER_DOWN*)((uintptr_t)&_SEGGER_RTT.aDown[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
676 pBuffer = (unsigned char*)pData;
+
677 RdOff = pRing->RdOff;
+
678 WrOff = pRing->WrOff;
+
679 NumBytesRead = 0u;
+
680 //
+
681 // Read from current read position to wrap-around of buffer, first
+
682 //
+
683 if (RdOff > WrOff) {
+
684 NumBytesRem = pRing->SizeOfBuffer - RdOff;
+
685 NumBytesRem = MIN(NumBytesRem, BufferSize);
+
686 pSrc = (pRing->pBuffer + RdOff) + SEGGER_RTT_UNCACHED_OFF;
+
687#if SEGGER_RTT_MEMCPY_USE_BYTELOOP
+
688 NumBytesRead += NumBytesRem;
+
689 BufferSize -= NumBytesRem;
+
690 RdOff += NumBytesRem;
+
691 while (NumBytesRem--) {
+
692 *pBuffer++ = *pSrc++;
+
693 };
+
694#else
+
695 SEGGER_RTT_MEMCPY(pBuffer, (void*)pSrc, NumBytesRem);
+
696 NumBytesRead += NumBytesRem;
+
697 pBuffer += NumBytesRem;
+
698 BufferSize -= NumBytesRem;
+
699 RdOff += NumBytesRem;
+
700#endif
+
701 //
+
702 // Handle wrap-around of buffer
+
703 //
+
704 if (RdOff == pRing->SizeOfBuffer) {
+
705 RdOff = 0u;
+
706 }
+
707 }
+
708 //
+
709 // Read remaining items of buffer
+
710 //
+
711 NumBytesRem = WrOff - RdOff;
+
712 NumBytesRem = MIN(NumBytesRem, BufferSize);
+
713 if (NumBytesRem > 0u) {
+
714 pSrc = (pRing->pBuffer + RdOff) + SEGGER_RTT_UNCACHED_OFF;
+
715#if SEGGER_RTT_MEMCPY_USE_BYTELOOP
+
716 NumBytesRead += NumBytesRem;
+
717 BufferSize -= NumBytesRem;
+
718 RdOff += NumBytesRem;
+
719 while (NumBytesRem--) {
+
720 *pBuffer++ = *pSrc++;
+
721 };
+
722#else
+
723 SEGGER_RTT_MEMCPY(pBuffer, (void*)pSrc, NumBytesRem);
+
724 NumBytesRead += NumBytesRem;
+
725 pBuffer += NumBytesRem;
+
726 BufferSize -= NumBytesRem;
+
727 RdOff += NumBytesRem;
+
728#endif
+
729 }
+
730 if (NumBytesRead) {
+
731 pRing->RdOff = RdOff;
+
732 }
+
733 //
+
734 return NumBytesRead;
+
735}
+
736
+
737/*********************************************************************
+
738*
+
739* SEGGER_RTT_ReadUpBuffer
+
740*
+
741* Function description
+
742* Reads characters from SEGGER real-time-terminal control block
+
743* which have been previously stored by the application.
+
744* Used to do the same operation that J-Link does, to transfer
+
745* RTT data via other channels, such as TCP/IP or UART.
+
746*
+
747* Parameters
+
748* BufferIndex Index of Up-buffer to be used.
+
749* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-up-buffer to.
+
750* BufferSize Size of the target application buffer.
+
751*
+
752* Return value
+
753* Number of bytes that have been read.
+
754*
+
755* Additional information
+
756* This function must not be called when J-Link might also do RTT.
+
757* This function locks against all other RTT operations. I.e. during
+
758* the read operation, writing is also locked.
+
759* If only one consumer reads from the up buffer,
+
760* call sEGGER_RTT_ReadUpBufferNoLock() instead.
+
761*/
+
762unsigned SEGGER_RTT_ReadUpBuffer(unsigned BufferIndex, void* pBuffer, unsigned BufferSize) {
+
763 unsigned NumBytesRead;
+
764
+
765 SEGGER_RTT_LOCK();
+
766 //
+
767 // Call the non-locking read function
+
768 //
+
769 NumBytesRead = SEGGER_RTT_ReadUpBufferNoLock(BufferIndex, pBuffer, BufferSize);
+
770 //
+
771 // Finish up.
+
772 //
+
773 SEGGER_RTT_UNLOCK();
+
774 //
+
775 return NumBytesRead;
+
776}
+
777
+
778/*********************************************************************
+
779*
+
780* SEGGER_RTT_Read
+
781*
+
782* Function description
+
783* Reads characters from SEGGER real-time-terminal control block
+
784* which have been previously stored by the host.
+
785*
+
786* Parameters
+
787* BufferIndex Index of Down-buffer to be used (e.g. 0 for "Terminal").
+
788* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-down-buffer to.
+
789* BufferSize Size of the target application buffer.
+
790*
+
791* Return value
+
792* Number of bytes that have been read.
+
793*/
+
794unsigned SEGGER_RTT_Read(unsigned BufferIndex, void* pBuffer, unsigned BufferSize) {
+
795 unsigned NumBytesRead;
+
796
+
797 SEGGER_RTT_LOCK();
+
798 //
+
799 // Call the non-locking read function
+
800 //
+
801 NumBytesRead = SEGGER_RTT_ReadNoLock(BufferIndex, pBuffer, BufferSize);
+
802 //
+
803 // Finish up.
+
804 //
+
805 SEGGER_RTT_UNLOCK();
+
806 //
+
807 return NumBytesRead;
+
808}
+
809
+
810/*********************************************************************
+
811*
+
812* SEGGER_RTT_WriteWithOverwriteNoLock
+
813*
+
814* Function description
+
815* Stores a specified number of characters in SEGGER RTT
+
816* control block.
+
817* SEGGER_RTT_WriteWithOverwriteNoLock does not lock the application
+
818* and overwrites data if the data does not fit into the buffer.
+
819*
+
820* Parameters
+
821* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal").
+
822* pBuffer Pointer to character array. Does not need to point to a \0 terminated string.
+
823* NumBytes Number of bytes to be stored in the SEGGER RTT control block.
+
824*
+
825* Notes
+
826* (1) If there is not enough space in the "Up"-buffer, data is overwritten.
+
827* (2) For performance reasons this function does not call Init()
+
828* and may only be called after RTT has been initialized.
+
829* Either by calling SEGGER_RTT_Init() or calling another RTT API function first.
+
830* (3) Do not use SEGGER_RTT_WriteWithOverwriteNoLock if a J-Link
+
831* connection reads RTT data.
+
832*/
+
833void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) {
+
834 const char* pData;
+ +
836 unsigned Avail;
+
837 volatile char* pDst;
+
838 //
+
839 // Get "to-host" ring buffer and copy some elements into local variables.
+
840 //
+
841 pData = (const char *)pBuffer;
+
842 pRing = (SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
843 //
+
844 // Check if we will overwrite data and need to adjust the RdOff.
+
845 //
+
846 if (pRing->WrOff == pRing->RdOff) {
+
847 Avail = pRing->SizeOfBuffer - 1u;
+
848 } else if ( pRing->WrOff < pRing->RdOff) {
+
849 Avail = pRing->RdOff - pRing->WrOff - 1u;
+
850 } else {
+
851 Avail = pRing->RdOff - pRing->WrOff - 1u + pRing->SizeOfBuffer;
+
852 }
+
853 if (NumBytes > Avail) {
+
854 pRing->RdOff += (NumBytes - Avail);
+
855 while (pRing->RdOff >= pRing->SizeOfBuffer) {
+
856 pRing->RdOff -= pRing->SizeOfBuffer;
+
857 }
+
858 }
+
859 //
+
860 // Write all data, no need to check the RdOff, but possibly handle multiple wrap-arounds
+
861 //
+
862 Avail = pRing->SizeOfBuffer - pRing->WrOff;
+
863 do {
+
864 if (Avail > NumBytes) {
+
865 //
+
866 // Last round
+
867 //
+
868 pDst = (pRing->pBuffer + pRing->WrOff) + SEGGER_RTT_UNCACHED_OFF;
+
869#if SEGGER_RTT_MEMCPY_USE_BYTELOOP
+
870 Avail = NumBytes;
+
871 while (NumBytes--) {
+
872 *pDst++ = *pData++;
+
873 };
+
874 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
875 pRing->WrOff += Avail;
+
876#else
+
877 SEGGER_RTT_MEMCPY((void*)pDst, pData, NumBytes);
+
878 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
879 pRing->WrOff += NumBytes;
+
880#endif
+
881 break;
+
882 } else {
+
883 //
+
884 // Wrap-around necessary, write until wrap-around and reset WrOff
+
885 //
+
886 pDst = (pRing->pBuffer + pRing->WrOff) + SEGGER_RTT_UNCACHED_OFF;
+
887#if SEGGER_RTT_MEMCPY_USE_BYTELOOP
+
888 NumBytes -= Avail;
+
889 while (Avail--) {
+
890 *pDst++ = *pData++;
+
891 };
+
892 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
893 pRing->WrOff = 0;
+
894#else
+
895 SEGGER_RTT_MEMCPY((void*)pDst, pData, Avail);
+
896 pData += Avail;
+
897 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
898 pRing->WrOff = 0;
+
899 NumBytes -= Avail;
+
900#endif
+
901 Avail = (pRing->SizeOfBuffer - 1);
+
902 }
+
903 } while (NumBytes);
+
904}
+
905
+
906/*********************************************************************
+
907*
+
908* SEGGER_RTT_WriteSkipNoLock
+
909*
+
910* Function description
+
911* Stores a specified number of characters in SEGGER RTT
+
912* control block which is then read by the host.
+
913* SEGGER_RTT_WriteSkipNoLock does not lock the application and
+
914* skips all data, if the data does not fit into the buffer.
+
915*
+
916* Parameters
+
917* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal").
+
918* pBuffer Pointer to character array. Does not need to point to a \0 terminated string.
+
919* NumBytes Number of bytes to be stored in the SEGGER RTT control block.
+
920* MUST be > 0!!!
+
921* This is done for performance reasons, so no initial check has do be done.
+
922*
+
923* Return value
+
924* 1: Data has been copied
+
925* 0: No space, data has not been copied
+
926*
+
927* Notes
+
928* (1) If there is not enough space in the "Up"-buffer, all data is dropped.
+
929* (2) For performance reasons this function does not call Init()
+
930* and may only be called after RTT has been initialized.
+
931* Either by calling SEGGER_RTT_Init() or calling another RTT API function first.
+
932*/
+
933#if (RTT_USE_ASM == 0)
+
934unsigned SEGGER_RTT_WriteSkipNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) {
+
935 const char* pData;
+ +
937 unsigned Avail;
+
938 unsigned RdOff;
+
939 unsigned WrOff;
+
940 unsigned Rem;
+
941 volatile char* pDst;
+
942 //
+
943 // Cases:
+
944 // 1) RdOff <= WrOff => Space until wrap-around is sufficient
+
945 // 2) RdOff <= WrOff => Space after wrap-around needed (copy in 2 chunks)
+
946 // 3) RdOff < WrOff => No space in buf
+
947 // 4) RdOff > WrOff => Space is sufficient
+
948 // 5) RdOff > WrOff => No space in buf
+
949 //
+
950 // 1) is the most common case for large buffers and assuming that J-Link reads the data fast enough
+
951 //
+
952 pData = (const char *)pBuffer;
+
953 pRing = (SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
954 RdOff = pRing->RdOff;
+
955 WrOff = pRing->WrOff;
+
956 pDst = (pRing->pBuffer + WrOff) + SEGGER_RTT_UNCACHED_OFF;
+
957 if (RdOff <= WrOff) { // Case 1), 2) or 3)
+
958 Avail = pRing->SizeOfBuffer - WrOff - 1u; // Space until wrap-around (assume 1 byte not usable for case that RdOff == 0)
+
959 if (Avail >= NumBytes) { // Case 1)?
+
960 memcpy((void*)pDst, pData, NumBytes);
+
961 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
962 pRing->WrOff = WrOff + NumBytes;
+
963 return 1;
+
964 }
+
965 Avail += RdOff; // Space incl. wrap-around
+
966 if (Avail >= NumBytes) { // Case 2? => If not, we have case 3) (does not fit)
+
967 Rem = pRing->SizeOfBuffer - WrOff; // Space until end of buffer
+
968 memcpy((void*)pDst, pData, Rem); // Copy 1st chunk
+
969 NumBytes -= Rem;
+
970 //
+
971 // Special case: First check that assumed RdOff == 0 calculated that last element before wrap-around could not be used
+
972 // But 2nd check (considering space until wrap-around and until RdOff) revealed that RdOff is not 0, so we can use the last element
+
973 // In this case, we may use a copy straight until buffer end anyway without needing to copy 2 chunks
+
974 // Therefore, check if 2nd memcpy is necessary at all
+
975 //
+
976 if (NumBytes) {
+
977 pDst = pRing->pBuffer + SEGGER_RTT_UNCACHED_OFF;
+
978 memcpy((void*)pDst, pData + Rem, NumBytes);
+
979 }
+
980 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
981 pRing->WrOff = NumBytes;
+
982 return 1;
+
983 }
+
984 } else { // Potential case 4)
+
985 Avail = RdOff - WrOff - 1u;
+
986 if (Avail >= NumBytes) { // Case 4)? => If not, we have case 5) (does not fit)
+
987 memcpy((void*)pDst, pData, NumBytes);
+
988 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
989 pRing->WrOff = WrOff + NumBytes;
+
990 return 1;
+
991 }
+
992 }
+
993 return 0; // No space in buffer
+
994}
+
995#endif
+
996
+
997/*********************************************************************
+
998*
+
999* SEGGER_RTT_WriteDownBufferNoLock
+
1000*
+
1001* Function description
+
1002* Stores a specified number of characters in SEGGER RTT
+
1003* control block inside a <Down> buffer.
+
1004* SEGGER_RTT_WriteDownBufferNoLock does not lock the application.
+
1005* Used to do the same operation that J-Link does, to transfer
+
1006* RTT data from other channels, such as TCP/IP or UART.
+
1007*
+
1008* Parameters
+
1009* BufferIndex Index of "Down"-buffer to be used.
+
1010* pBuffer Pointer to character array. Does not need to point to a \0 terminated string.
+
1011* NumBytes Number of bytes to be stored in the SEGGER RTT control block.
+
1012*
+
1013* Return value
+
1014* Number of bytes which have been stored in the "Down"-buffer.
+
1015*
+
1016* Notes
+
1017* (1) Data is stored according to buffer flags.
+
1018* (2) For performance reasons this function does not call Init()
+
1019* and may only be called after RTT has been initialized.
+
1020* Either by calling SEGGER_RTT_Init() or calling another RTT API function first.
+
1021*
+
1022* Additional information
+
1023* This function must not be called when J-Link might also do RTT.
+
1024*/
+
1025unsigned SEGGER_RTT_WriteDownBufferNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) {
+
1026 unsigned Status;
+
1027 unsigned Avail;
+
1028 const char* pData;
+
1029 SEGGER_RTT_BUFFER_UP* pRing;
+
1030 //
+
1031 // Get "to-target" ring buffer.
+
1032 // It is save to cast that to a "to-host" buffer. Up and Down buffer differ in volatility of offsets that might be modified by J-Link.
+
1033 //
+
1034 pData = (const char *)pBuffer;
+
1035 pRing = (SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aDown[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1036 //
+
1037 // How we output depends upon the mode...
+
1038 //
+
1039 switch (pRing->Flags) {
+
1040 case SEGGER_RTT_MODE_NO_BLOCK_SKIP:
+
1041 //
+
1042 // If we are in skip mode and there is no space for the whole
+
1043 // of this output, don't bother.
+
1044 //
+
1045 Avail = _GetAvailWriteSpace(pRing);
+
1046 if (Avail < NumBytes) {
+
1047 Status = 0u;
+
1048 } else {
+
1049 Status = NumBytes;
+
1050 _WriteNoCheck(pRing, pData, NumBytes);
+
1051 }
+
1052 break;
+
1053 case SEGGER_RTT_MODE_NO_BLOCK_TRIM:
+
1054 //
+
1055 // If we are in trim mode, trim to what we can output without blocking.
+
1056 //
+
1057 Avail = _GetAvailWriteSpace(pRing);
+
1058 Status = Avail < NumBytes ? Avail : NumBytes;
+
1059 _WriteNoCheck(pRing, pData, Status);
+
1060 break;
+
1061 case SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL:
+
1062 //
+
1063 // If we are in blocking mode, output everything.
+
1064 //
+
1065 Status = _WriteBlocking(pRing, pData, NumBytes);
+
1066 break;
+
1067 default:
+
1068 Status = 0u;
+
1069 break;
+
1070 }
+
1071 //
+
1072 // Finish up.
+
1073 //
+
1074 return Status;
+
1075}
+
1076
+
1077/*********************************************************************
+
1078*
+
1079* SEGGER_RTT_WriteNoLock
+
1080*
+
1081* Function description
+
1082* Stores a specified number of characters in SEGGER RTT
+
1083* control block which is then read by the host.
+
1084* SEGGER_RTT_WriteNoLock does not lock the application.
+
1085*
+
1086* Parameters
+
1087* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal").
+
1088* pBuffer Pointer to character array. Does not need to point to a \0 terminated string.
+
1089* NumBytes Number of bytes to be stored in the SEGGER RTT control block.
+
1090*
+
1091* Return value
+
1092* Number of bytes which have been stored in the "Up"-buffer.
+
1093*
+
1094* Notes
+
1095* (1) Data is stored according to buffer flags.
+
1096* (2) For performance reasons this function does not call Init()
+
1097* and may only be called after RTT has been initialized.
+
1098* Either by calling SEGGER_RTT_Init() or calling another RTT API function first.
+
1099*/
+
1100unsigned SEGGER_RTT_WriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) {
+
1101 unsigned Status;
+
1102 unsigned Avail;
+
1103 const char* pData;
+
1104 SEGGER_RTT_BUFFER_UP* pRing;
+
1105 //
+
1106 // Get "to-host" ring buffer.
+
1107 //
+
1108 pData = (const char *)pBuffer;
+
1109 pRing = (SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1110 //
+
1111 // How we output depends upon the mode...
+
1112 //
+
1113 switch (pRing->Flags) {
+
1114 case SEGGER_RTT_MODE_NO_BLOCK_SKIP:
+
1115 //
+
1116 // If we are in skip mode and there is no space for the whole
+
1117 // of this output, don't bother.
+
1118 //
+
1119 Avail = _GetAvailWriteSpace(pRing);
+
1120 if (Avail < NumBytes) {
+
1121 Status = 0u;
+
1122 } else {
+
1123 Status = NumBytes;
+
1124 _WriteNoCheck(pRing, pData, NumBytes);
+
1125 }
+
1126 break;
+
1127 case SEGGER_RTT_MODE_NO_BLOCK_TRIM:
+
1128 //
+
1129 // If we are in trim mode, trim to what we can output without blocking.
+
1130 //
+
1131 Avail = _GetAvailWriteSpace(pRing);
+
1132 Status = Avail < NumBytes ? Avail : NumBytes;
+
1133 _WriteNoCheck(pRing, pData, Status);
+
1134 break;
+
1135 case SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL:
+
1136 //
+
1137 // If we are in blocking mode, output everything.
+
1138 //
+
1139 Status = _WriteBlocking(pRing, pData, NumBytes);
+
1140 break;
+
1141 default:
+
1142 Status = 0u;
+
1143 break;
+
1144 }
+
1145 //
+
1146 // Finish up.
+
1147 //
+
1148 return Status;
+
1149}
+
1150
+
1151/*********************************************************************
+
1152*
+
1153* SEGGER_RTT_WriteDownBuffer
+
1154*
+
1155* Function description
+
1156* Stores a specified number of characters in SEGGER RTT control block in a <Down> buffer.
+
1157*
+
1158* Parameters
+
1159* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal").
+
1160* pBuffer Pointer to character array. Does not need to point to a \0 terminated string.
+
1161* NumBytes Number of bytes to be stored in the SEGGER RTT control block.
+
1162*
+
1163* Return value
+
1164* Number of bytes which have been stored in the "Down"-buffer.
+
1165*
+
1166* Notes
+
1167* (1) Data is stored according to buffer flags.
+
1168*
+
1169* Additional information
+
1170* This function must not be called when J-Link might also do RTT.
+
1171* This function locks against all other RTT operations. I.e. during
+
1172* the write operation, writing from the application is also locked.
+
1173* If only one consumer writes to the down buffer,
+
1174* call SEGGER_RTT_WriteDownBufferNoLock() instead.
+
1175*/
+
1176unsigned SEGGER_RTT_WriteDownBuffer(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) {
+
1177 unsigned Status;
+
1178
+
1179 INIT();
+
1180 SEGGER_RTT_LOCK();
+
1181 Status = SEGGER_RTT_WriteDownBufferNoLock(BufferIndex, pBuffer, NumBytes); // Call the non-locking write function
+
1182 SEGGER_RTT_UNLOCK();
+
1183 return Status;
+
1184}
+
1185
+
1186/*********************************************************************
+
1187*
+
1188* SEGGER_RTT_Write
+
1189*
+
1190* Function description
+
1191* Stores a specified number of characters in SEGGER RTT
+
1192* control block which is then read by the host.
+
1193*
+
1194* Parameters
+
1195* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal").
+
1196* pBuffer Pointer to character array. Does not need to point to a \0 terminated string.
+
1197* NumBytes Number of bytes to be stored in the SEGGER RTT control block.
+
1198*
+
1199* Return value
+
1200* Number of bytes which have been stored in the "Up"-buffer.
+
1201*
+
1202* Notes
+
1203* (1) Data is stored according to buffer flags.
+
1204*/
+
1205unsigned SEGGER_RTT_Write(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) {
+
1206 unsigned Status;
+
1207
+
1208 INIT();
+
1209 SEGGER_RTT_LOCK();
+
1210 Status = SEGGER_RTT_WriteNoLock(BufferIndex, pBuffer, NumBytes); // Call the non-locking write function
+
1211 SEGGER_RTT_UNLOCK();
+
1212 return Status;
+
1213}
+
1214
+
1215/*********************************************************************
+
1216*
+
1217* SEGGER_RTT_WriteString
+
1218*
+
1219* Function description
+
1220* Stores string in SEGGER RTT control block.
+
1221* This data is read by the host.
+
1222*
+
1223* Parameters
+
1224* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal").
+
1225* s Pointer to string.
+
1226*
+
1227* Return value
+
1228* Number of bytes which have been stored in the "Up"-buffer.
+
1229*
+
1230* Notes
+
1231* (1) Data is stored according to buffer flags.
+
1232* (2) String passed to this function has to be \0 terminated
+
1233* (3) \0 termination character is *not* stored in RTT buffer
+
1234*/
+
1235unsigned SEGGER_RTT_WriteString(unsigned BufferIndex, const char* s) {
+
1236 unsigned Len;
+
1237
+
1238 Len = STRLEN(s);
+
1239 return SEGGER_RTT_Write(BufferIndex, s, Len);
+
1240}
+
1241
+
1242/*********************************************************************
+
1243*
+
1244* SEGGER_RTT_PutCharSkipNoLock
+
1245*
+
1246* Function description
+
1247* Stores a single character/byte in SEGGER RTT buffer.
+
1248* SEGGER_RTT_PutCharSkipNoLock does not lock the application and
+
1249* skips the byte, if it does not fit into the buffer.
+
1250*
+
1251* Parameters
+
1252* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal").
+
1253* c Byte to be stored.
+
1254*
+
1255* Return value
+
1256* Number of bytes which have been stored in the "Up"-buffer.
+
1257*
+
1258* Notes
+
1259* (1) If there is not enough space in the "Up"-buffer, the character is dropped.
+
1260* (2) For performance reasons this function does not call Init()
+
1261* and may only be called after RTT has been initialized.
+
1262* Either by calling SEGGER_RTT_Init() or calling another RTT API function first.
+
1263*/
+
1264
+
1265unsigned SEGGER_RTT_PutCharSkipNoLock(unsigned BufferIndex, char c) {
+
1266 SEGGER_RTT_BUFFER_UP* pRing;
+
1267 unsigned WrOff;
+
1268 unsigned Status;
+
1269 volatile char* pDst;
+
1270 //
+
1271 // Get "to-host" ring buffer.
+
1272 //
+
1273 pRing = (SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1274 //
+
1275 // Get write position and handle wrap-around if necessary
+
1276 //
+
1277 WrOff = pRing->WrOff + 1;
+
1278 if (WrOff == pRing->SizeOfBuffer) {
+
1279 WrOff = 0;
+
1280 }
+
1281 //
+
1282 // Output byte if free space is available
+
1283 //
+
1284 if (WrOff != pRing->RdOff) {
+
1285 pDst = (pRing->pBuffer + pRing->WrOff) + SEGGER_RTT_UNCACHED_OFF;
+
1286 *pDst = c;
+
1287 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
1288 pRing->WrOff = WrOff;
+
1289 Status = 1;
+
1290 } else {
+
1291 Status = 0;
+
1292 }
+
1293 //
+
1294 return Status;
+
1295}
+
1296
+
1297/*********************************************************************
+
1298*
+
1299* SEGGER_RTT_PutCharSkip
+
1300*
+
1301* Function description
+
1302* Stores a single character/byte in SEGGER RTT buffer.
+
1303*
+
1304* Parameters
+
1305* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal").
+
1306* c Byte to be stored.
+
1307*
+
1308* Return value
+
1309* Number of bytes which have been stored in the "Up"-buffer.
+
1310*
+
1311* Notes
+
1312* (1) If there is not enough space in the "Up"-buffer, the character is dropped.
+
1313*/
+
1314
+
1315unsigned SEGGER_RTT_PutCharSkip(unsigned BufferIndex, char c) {
+
1316 SEGGER_RTT_BUFFER_UP* pRing;
+
1317 unsigned WrOff;
+
1318 unsigned Status;
+
1319 volatile char* pDst;
+
1320 //
+
1321 // Prepare
+
1322 //
+
1323 INIT();
+
1324 SEGGER_RTT_LOCK();
+
1325 //
+
1326 // Get "to-host" ring buffer.
+
1327 //
+
1328 pRing = (SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1329 //
+
1330 // Get write position and handle wrap-around if necessary
+
1331 //
+
1332 WrOff = pRing->WrOff + 1;
+
1333 if (WrOff == pRing->SizeOfBuffer) {
+
1334 WrOff = 0;
+
1335 }
+
1336 //
+
1337 // Output byte if free space is available
+
1338 //
+
1339 if (WrOff != pRing->RdOff) {
+
1340 pDst = (pRing->pBuffer + pRing->WrOff) + SEGGER_RTT_UNCACHED_OFF;
+
1341 *pDst = c;
+
1342 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
1343 pRing->WrOff = WrOff;
+
1344 Status = 1;
+
1345 } else {
+
1346 Status = 0;
+
1347 }
+
1348 //
+
1349 // Finish up.
+
1350 //
+
1351 SEGGER_RTT_UNLOCK();
+
1352 //
+
1353 return Status;
+
1354}
+
1355
+
1356 /*********************************************************************
+
1357*
+
1358* SEGGER_RTT_PutChar
+
1359*
+
1360* Function description
+
1361* Stores a single character/byte in SEGGER RTT buffer.
+
1362*
+
1363* Parameters
+
1364* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal").
+
1365* c Byte to be stored.
+
1366*
+
1367* Return value
+
1368* Number of bytes which have been stored in the "Up"-buffer.
+
1369*
+
1370* Notes
+
1371* (1) Data is stored according to buffer flags.
+
1372*/
+
1373
+
1374unsigned SEGGER_RTT_PutChar(unsigned BufferIndex, char c) {
+
1375 SEGGER_RTT_BUFFER_UP* pRing;
+
1376 unsigned WrOff;
+
1377 unsigned Status;
+
1378 volatile char* pDst;
+
1379 //
+
1380 // Prepare
+
1381 //
+
1382 INIT();
+
1383 SEGGER_RTT_LOCK();
+
1384 //
+
1385 // Get "to-host" ring buffer.
+
1386 //
+
1387 pRing = (SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1388 //
+
1389 // Get write position and handle wrap-around if necessary
+
1390 //
+
1391 WrOff = pRing->WrOff + 1;
+
1392 if (WrOff == pRing->SizeOfBuffer) {
+
1393 WrOff = 0;
+
1394 }
+
1395 //
+
1396 // Wait for free space if mode is set to blocking
+
1397 //
+
1398 if (pRing->Flags == SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL) {
+
1399 while (WrOff == pRing->RdOff) {
+
1400 ;
+
1401 }
+
1402 }
+
1403 //
+
1404 // Output byte if free space is available
+
1405 //
+
1406 if (WrOff != pRing->RdOff) {
+
1407 pDst = (pRing->pBuffer + pRing->WrOff) + SEGGER_RTT_UNCACHED_OFF;
+
1408 *pDst = c;
+
1409 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
1410 pRing->WrOff = WrOff;
+
1411 Status = 1;
+
1412 } else {
+
1413 Status = 0;
+
1414 }
+
1415 //
+
1416 // Finish up.
+
1417 //
+
1418 SEGGER_RTT_UNLOCK();
+
1419 return Status;
+
1420}
+
1421
+
1422/*********************************************************************
+
1423*
+
1424* SEGGER_RTT_GetKey
+
1425*
+
1426* Function description
+
1427* Reads one character from the SEGGER RTT buffer.
+
1428* Host has previously stored data there.
+
1429*
+
1430* Return value
+
1431* < 0 - No character available (buffer empty).
+
1432* >= 0 - Character which has been read. (Possible values: 0 - 255)
+
1433*
+
1434* Notes
+
1435* (1) This function is only specified for accesses to RTT buffer 0.
+
1436*/
+
1437int SEGGER_RTT_GetKey(void) {
+
1438 char c;
+
1439 int r;
+
1440
+
1441 r = (int)SEGGER_RTT_Read(0u, &c, 1u);
+
1442 if (r == 1) {
+
1443 r = (int)(unsigned char)c;
+
1444 } else {
+
1445 r = -1;
+
1446 }
+
1447 return r;
+
1448}
+
1449
+
1450/*********************************************************************
+
1451*
+
1452* SEGGER_RTT_WaitKey
+
1453*
+
1454* Function description
+
1455* Waits until at least one character is avaible in the SEGGER RTT buffer.
+
1456* Once a character is available, it is read and this function returns.
+
1457*
+
1458* Return value
+
1459* >=0 - Character which has been read.
+
1460*
+
1461* Notes
+
1462* (1) This function is only specified for accesses to RTT buffer 0
+
1463* (2) This function is blocking if no character is present in RTT buffer
+
1464*/
+
1465int SEGGER_RTT_WaitKey(void) {
+
1466 int r;
+
1467
+
1468 do {
+
1469 r = SEGGER_RTT_GetKey();
+
1470 } while (r < 0);
+
1471 return r;
+
1472}
+
1473
+
1474/*********************************************************************
+
1475*
+
1476* SEGGER_RTT_HasKey
+
1477*
+
1478* Function description
+
1479* Checks if at least one character for reading is available in the SEGGER RTT buffer.
+
1480*
+
1481* Return value
+
1482* == 0 - No characters are available to read.
+
1483* == 1 - At least one character is available.
+
1484*
+
1485* Notes
+
1486* (1) This function is only specified for accesses to RTT buffer 0
+
1487*/
+
1488int SEGGER_RTT_HasKey(void) {
+ +
1490 unsigned RdOff;
+
1491 int r;
+
1492
+
1493 INIT();
+
1494 pRing = (SEGGER_RTT_BUFFER_DOWN*)((uintptr_t)&_SEGGER_RTT.aDown[0] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1495 RdOff = pRing->RdOff;
+
1496 if (RdOff != pRing->WrOff) {
+
1497 r = 1;
+
1498 } else {
+
1499 r = 0;
+
1500 }
+
1501 return r;
+
1502}
+
1503
+
1504/*********************************************************************
+
1505*
+
1506* SEGGER_RTT_HasData
+
1507*
+
1508* Function description
+
1509* Check if there is data from the host in the given buffer.
+
1510*
+
1511* Return value:
+
1512* ==0: No data
+
1513* !=0: Data in buffer
+
1514*
+
1515*/
+
1516unsigned SEGGER_RTT_HasData(unsigned BufferIndex) {
+ +
1518 unsigned v;
+
1519
+
1520 pRing = (SEGGER_RTT_BUFFER_DOWN*)((uintptr_t)&_SEGGER_RTT.aDown[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1521 v = pRing->WrOff;
+
1522 return v - pRing->RdOff;
+
1523}
+
1524
+
1525/*********************************************************************
+
1526*
+
1527* SEGGER_RTT_HasDataUp
+
1528*
+
1529* Function description
+
1530* Check if there is data remaining to be sent in the given buffer.
+
1531*
+
1532* Return value:
+
1533* ==0: No data
+
1534* !=0: Data in buffer
+
1535*
+
1536*/
+
1537unsigned SEGGER_RTT_HasDataUp(unsigned BufferIndex) {
+
1538 SEGGER_RTT_BUFFER_UP* pRing;
+
1539 unsigned v;
+
1540
+
1541 pRing = (SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1542 v = pRing->RdOff;
+
1543 return pRing->WrOff - v;
+
1544}
+
1545
+
1546/*********************************************************************
+
1547*
+
1548* SEGGER_RTT_AllocDownBuffer
+
1549*
+
1550* Function description
+
1551* Run-time configuration of the next down-buffer (H->T).
+
1552* The next buffer, which is not used yet is configured.
+
1553* This includes: Buffer address, size, name, flags, ...
+
1554*
+
1555* Parameters
+
1556* sName Pointer to a constant name string.
+
1557* pBuffer Pointer to a buffer to be used.
+
1558* BufferSize Size of the buffer.
+
1559* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message).
+
1560* Flags[31:24] are used for validity check and must be zero. Flags[23:2] are reserved for future use. Flags[1:0] = RTT operating mode.
+
1561*
+
1562* Return value
+
1563* >= 0 - O.K. Buffer Index
+
1564* < 0 - Error
+
1565*/
+
1566int SEGGER_RTT_AllocDownBuffer(const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) {
+
1567 int BufferIndex;
+
1568 volatile SEGGER_RTT_CB* pRTTCB;
+
1569
+
1570 INIT();
+
1571 SEGGER_RTT_LOCK();
+
1572 pRTTCB = (volatile SEGGER_RTT_CB*)((uintptr_t)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1573 BufferIndex = 0;
+
1574 do {
+
1575 if (pRTTCB->aDown[BufferIndex].pBuffer == NULL) {
+
1576 break;
+
1577 }
+
1578 BufferIndex++;
+
1579 } while (BufferIndex < pRTTCB->MaxNumDownBuffers);
+
1580 if (BufferIndex < pRTTCB->MaxNumDownBuffers) {
+
1581 pRTTCB->aDown[BufferIndex].sName = sName;
+
1582 pRTTCB->aDown[BufferIndex].pBuffer = (char*)pBuffer;
+
1583 pRTTCB->aDown[BufferIndex].SizeOfBuffer = BufferSize;
+
1584 pRTTCB->aDown[BufferIndex].RdOff = 0u;
+
1585 pRTTCB->aDown[BufferIndex].WrOff = 0u;
+
1586 pRTTCB->aDown[BufferIndex].Flags = Flags;
+
1587 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
1588 } else {
+
1589 BufferIndex = -1;
+
1590 }
+
1591 SEGGER_RTT_UNLOCK();
+
1592 return BufferIndex;
+
1593}
+
1594
+
1595/*********************************************************************
+
1596*
+
1597* SEGGER_RTT_AllocUpBuffer
+
1598*
+
1599* Function description
+
1600* Run-time configuration of the next up-buffer (T->H).
+
1601* The next buffer, which is not used yet is configured.
+
1602* This includes: Buffer address, size, name, flags, ...
+
1603*
+
1604* Parameters
+
1605* sName Pointer to a constant name string.
+
1606* pBuffer Pointer to a buffer to be used.
+
1607* BufferSize Size of the buffer.
+
1608* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message).
+
1609* Flags[31:24] are used for validity check and must be zero. Flags[23:2] are reserved for future use. Flags[1:0] = RTT operating mode.
+
1610*
+
1611* Return value
+
1612* >= 0 - O.K. Buffer Index
+
1613* < 0 - Error
+
1614*/
+
1615int SEGGER_RTT_AllocUpBuffer(const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) {
+
1616 int BufferIndex;
+
1617 volatile SEGGER_RTT_CB* pRTTCB;
+
1618
+
1619 INIT();
+
1620 SEGGER_RTT_LOCK();
+
1621 pRTTCB = (volatile SEGGER_RTT_CB*)((uintptr_t)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1622 BufferIndex = 0;
+
1623 do {
+
1624 if (pRTTCB->aUp[BufferIndex].pBuffer == NULL) {
+
1625 break;
+
1626 }
+
1627 BufferIndex++;
+
1628 } while (BufferIndex < pRTTCB->MaxNumUpBuffers);
+
1629 if (BufferIndex < pRTTCB->MaxNumUpBuffers) {
+
1630 pRTTCB->aUp[BufferIndex].sName = sName;
+
1631 pRTTCB->aUp[BufferIndex].pBuffer = (char*)pBuffer;
+
1632 pRTTCB->aUp[BufferIndex].SizeOfBuffer = BufferSize;
+
1633 pRTTCB->aUp[BufferIndex].RdOff = 0u;
+
1634 pRTTCB->aUp[BufferIndex].WrOff = 0u;
+
1635 pRTTCB->aUp[BufferIndex].Flags = Flags;
+
1636 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
1637 } else {
+
1638 BufferIndex = -1;
+
1639 }
+
1640 SEGGER_RTT_UNLOCK();
+
1641 return BufferIndex;
+
1642}
+
1643
+
1644/*********************************************************************
+
1645*
+
1646* SEGGER_RTT_ConfigUpBuffer
+
1647*
+
1648* Function description
+
1649* Run-time configuration of a specific up-buffer (T->H).
+
1650* Buffer to be configured is specified by index.
+
1651* This includes: Buffer address, size, name, flags, ...
+
1652*
+
1653* Parameters
+
1654* BufferIndex Index of the buffer to configure.
+
1655* sName Pointer to a constant name string.
+
1656* pBuffer Pointer to a buffer to be used.
+
1657* BufferSize Size of the buffer.
+
1658* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message).
+
1659* Flags[31:24] are used for validity check and must be zero. Flags[23:2] are reserved for future use. Flags[1:0] = RTT operating mode.
+
1660*
+
1661* Return value
+
1662* >= 0 - O.K.
+
1663* < 0 - Error
+
1664*
+
1665* Additional information
+
1666* Buffer 0 is configured on compile-time.
+
1667* May only be called once per buffer.
+
1668* Buffer name and flags can be reconfigured using the appropriate functions.
+
1669*/
+
1670int SEGGER_RTT_ConfigUpBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) {
+
1671 int r;
+
1672 volatile SEGGER_RTT_CB* pRTTCB;
+
1673 volatile SEGGER_RTT_BUFFER_UP* pUp;
+
1674
+
1675 INIT();
+
1676 pRTTCB = (volatile SEGGER_RTT_CB*)((uintptr_t)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1677 if (BufferIndex < SEGGER_RTT_MAX_NUM_UP_BUFFERS) {
+
1678 SEGGER_RTT_LOCK();
+
1679 pUp = &pRTTCB->aUp[BufferIndex];
+
1680 if (BufferIndex) {
+
1681 pUp->sName = sName;
+
1682 pUp->pBuffer = (char*)pBuffer;
+
1683 pUp->SizeOfBuffer = BufferSize;
+
1684 pUp->RdOff = 0u;
+
1685 pUp->WrOff = 0u;
+
1686 }
+
1687 pUp->Flags = Flags;
+
1688 SEGGER_RTT_UNLOCK();
+
1689 r = 0;
+
1690 } else {
+
1691 r = -1;
+
1692 }
+
1693 return r;
+
1694}
+
1695
+
1696/*********************************************************************
+
1697*
+
1698* SEGGER_RTT_ConfigDownBuffer
+
1699*
+
1700* Function description
+
1701* Run-time configuration of a specific down-buffer (H->T).
+
1702* Buffer to be configured is specified by index.
+
1703* This includes: Buffer address, size, name, flags, ...
+
1704*
+
1705* Parameters
+
1706* BufferIndex Index of the buffer to configure.
+
1707* sName Pointer to a constant name string.
+
1708* pBuffer Pointer to a buffer to be used.
+
1709* BufferSize Size of the buffer.
+
1710* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message).
+
1711* Flags[31:24] are used for validity check and must be zero. Flags[23:2] are reserved for future use. Flags[1:0] = RTT operating mode.
+
1712*
+
1713* Return value
+
1714* >= 0 O.K.
+
1715* < 0 Error
+
1716*
+
1717* Additional information
+
1718* Buffer 0 is configured on compile-time.
+
1719* May only be called once per buffer.
+
1720* Buffer name and flags can be reconfigured using the appropriate functions.
+
1721*/
+
1722int SEGGER_RTT_ConfigDownBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) {
+
1723 int r;
+
1724 volatile SEGGER_RTT_CB* pRTTCB;
+
1725 volatile SEGGER_RTT_BUFFER_DOWN* pDown;
+
1726
+
1727 INIT();
+
1728 pRTTCB = (volatile SEGGER_RTT_CB*)((uintptr_t)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1729 if (BufferIndex < SEGGER_RTT_MAX_NUM_DOWN_BUFFERS) {
+
1730 SEGGER_RTT_LOCK();
+
1731 pDown = &pRTTCB->aDown[BufferIndex];
+
1732 if (BufferIndex) {
+
1733 pDown->sName = sName;
+
1734 pDown->pBuffer = (char*)pBuffer;
+
1735 pDown->SizeOfBuffer = BufferSize;
+
1736 pDown->RdOff = 0u;
+
1737 pDown->WrOff = 0u;
+
1738 }
+
1739 pDown->Flags = Flags;
+
1740 RTT__DMB(); // Force data write to be complete before writing the <WrOff>, in case CPU is allowed to change the order of memory accesses
+
1741 SEGGER_RTT_UNLOCK();
+
1742 r = 0;
+
1743 } else {
+
1744 r = -1;
+
1745 }
+
1746 return r;
+
1747}
+
1748
+
1749/*********************************************************************
+
1750*
+
1751* SEGGER_RTT_SetNameUpBuffer
+
1752*
+
1753* Function description
+
1754* Run-time configuration of a specific up-buffer name (T->H).
+
1755* Buffer to be configured is specified by index.
+
1756*
+
1757* Parameters
+
1758* BufferIndex Index of the buffer to renamed.
+
1759* sName Pointer to a constant name string.
+
1760*
+
1761* Return value
+
1762* >= 0 O.K.
+
1763* < 0 Error
+
1764*/
+
1765int SEGGER_RTT_SetNameUpBuffer(unsigned BufferIndex, const char* sName) {
+
1766 int r;
+
1767 volatile SEGGER_RTT_CB* pRTTCB;
+
1768 volatile SEGGER_RTT_BUFFER_UP* pUp;
+
1769
+
1770 INIT();
+
1771 pRTTCB = (volatile SEGGER_RTT_CB*)((uintptr_t)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1772 if (BufferIndex < SEGGER_RTT_MAX_NUM_UP_BUFFERS) {
+
1773 SEGGER_RTT_LOCK();
+
1774 pUp = &pRTTCB->aUp[BufferIndex];
+
1775 pUp->sName = sName;
+
1776 SEGGER_RTT_UNLOCK();
+
1777 r = 0;
+
1778 } else {
+
1779 r = -1;
+
1780 }
+
1781 return r;
+
1782}
+
1783
+
1784/*********************************************************************
+
1785*
+
1786* SEGGER_RTT_SetNameDownBuffer
+
1787*
+
1788* Function description
+
1789* Run-time configuration of a specific Down-buffer name (T->H).
+
1790* Buffer to be configured is specified by index.
+
1791*
+
1792* Parameters
+
1793* BufferIndex Index of the buffer to renamed.
+
1794* sName Pointer to a constant name string.
+
1795*
+
1796* Return value
+
1797* >= 0 O.K.
+
1798* < 0 Error
+
1799*/
+
1800int SEGGER_RTT_SetNameDownBuffer(unsigned BufferIndex, const char* sName) {
+
1801 int r;
+
1802 volatile SEGGER_RTT_CB* pRTTCB;
+
1803 volatile SEGGER_RTT_BUFFER_DOWN* pDown;
+
1804
+
1805 INIT();
+
1806 pRTTCB = (volatile SEGGER_RTT_CB*)((uintptr_t)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1807 if (BufferIndex < SEGGER_RTT_MAX_NUM_DOWN_BUFFERS) {
+
1808 SEGGER_RTT_LOCK();
+
1809 pDown = &pRTTCB->aDown[BufferIndex];
+
1810 pDown->sName = sName;
+
1811 SEGGER_RTT_UNLOCK();
+
1812 r = 0;
+
1813 } else {
+
1814 r = -1;
+
1815 }
+
1816 return r;
+
1817}
+
1818
+
1819/*********************************************************************
+
1820*
+
1821* SEGGER_RTT_SetFlagsUpBuffer
+
1822*
+
1823* Function description
+
1824* Run-time configuration of specific up-buffer flags (T->H).
+
1825* Buffer to be configured is specified by index.
+
1826*
+
1827* Parameters
+
1828* BufferIndex Index of the buffer.
+
1829* Flags Flags to set for the buffer.
+
1830* Flags[31:24] are used for validity check and must be zero. Flags[23:2] are reserved for future use. Flags[1:0] = RTT operating mode.
+
1831*
+
1832* Return value
+
1833* >= 0 O.K.
+
1834* < 0 Error
+
1835*/
+
1836int SEGGER_RTT_SetFlagsUpBuffer(unsigned BufferIndex, unsigned Flags) {
+
1837 int r;
+
1838 volatile SEGGER_RTT_CB* pRTTCB;
+
1839 volatile SEGGER_RTT_BUFFER_UP* pUp;
+
1840
+
1841 INIT();
+
1842 pRTTCB = (volatile SEGGER_RTT_CB*)((uintptr_t)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1843 if (BufferIndex < SEGGER_RTT_MAX_NUM_UP_BUFFERS) {
+
1844 SEGGER_RTT_LOCK();
+
1845 pUp = &pRTTCB->aUp[BufferIndex];
+
1846 pUp->Flags = Flags;
+
1847 SEGGER_RTT_UNLOCK();
+
1848 r = 0;
+
1849 } else {
+
1850 r = -1;
+
1851 }
+
1852 return r;
+
1853}
+
1854
+
1855/*********************************************************************
+
1856*
+
1857* SEGGER_RTT_SetFlagsDownBuffer
+
1858*
+
1859* Function description
+
1860* Run-time configuration of specific Down-buffer flags (T->H).
+
1861* Buffer to be configured is specified by index.
+
1862*
+
1863* Parameters
+
1864* BufferIndex Index of the buffer to renamed.
+
1865* Flags Flags to set for the buffer.
+
1866* Flags[31:24] are used for validity check and must be zero. Flags[23:2] are reserved for future use. Flags[1:0] = RTT operating mode.
+
1867*
+
1868* Return value
+
1869* >= 0 O.K.
+
1870* < 0 Error
+
1871*/
+
1872int SEGGER_RTT_SetFlagsDownBuffer(unsigned BufferIndex, unsigned Flags) {
+
1873 int r;
+
1874 volatile SEGGER_RTT_CB* pRTTCB;
+
1875 volatile SEGGER_RTT_BUFFER_DOWN* pDown;
+
1876
+
1877 INIT();
+
1878 pRTTCB = (volatile SEGGER_RTT_CB*)((uintptr_t)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1879 if (BufferIndex < SEGGER_RTT_MAX_NUM_DOWN_BUFFERS) {
+
1880 SEGGER_RTT_LOCK();
+
1881 pDown = &pRTTCB->aDown[BufferIndex];
+
1882 pDown->Flags = Flags;
+
1883 SEGGER_RTT_UNLOCK();
+
1884 r = 0;
+
1885 } else {
+
1886 r = -1;
+
1887 }
+
1888 return r;
+
1889}
+
1890
+
1891/*********************************************************************
+
1892*
+
1893* SEGGER_RTT_Init
+
1894*
+
1895* Function description
+
1896* Initializes the RTT Control Block.
+
1897* Should be used in RAM targets, at start of the application.
+
1898*
+
1899*/
+
1900void SEGGER_RTT_Init (void) {
+
1901 _DoInit();
+
1902}
+
1903
+
1904/*********************************************************************
+
1905*
+
1906* SEGGER_RTT_SetTerminal
+
1907*
+
1908* Function description
+
1909* Sets the terminal to be used for output on channel 0.
+
1910*
+
1911* Parameters
+
1912* TerminalId Index of the terminal.
+
1913*
+
1914* Return value
+
1915* >= 0 O.K.
+
1916* < 0 Error (e.g. if RTT is configured for non-blocking mode and there was no space in the buffer to set the new terminal Id)
+
1917*
+
1918* Notes
+
1919* (1) Buffer 0 is always reserved for terminal I/O, so we can use index 0 here, fixed
+
1920*/
+
1921int SEGGER_RTT_SetTerminal (unsigned char TerminalId) {
+
1922 unsigned char ac[2];
+
1923 SEGGER_RTT_BUFFER_UP* pRing;
+
1924 unsigned Avail;
+
1925 int r;
+
1926
+
1927 INIT();
+
1928 r = 0;
+
1929 ac[0] = 0xFFu;
+
1930 if (TerminalId < sizeof(_aTerminalId)) { // We only support a certain number of channels
+
1931 ac[1] = _aTerminalId[TerminalId];
+
1932 pRing = (SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aUp[0] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1933 SEGGER_RTT_LOCK(); // Lock to make sure that no other task is writing into buffer, while we are and number of free bytes in buffer does not change downwards after checking and before writing
+
1934 if ((pRing->Flags & SEGGER_RTT_MODE_MASK) == SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL) {
+
1935 _ActiveTerminal = TerminalId;
+
1936 _WriteBlocking(pRing, (const char*)ac, 2u);
+
1937 } else { // Skipping mode or trim mode? => We cannot trim this command so handling is the same for both modes
+
1938 Avail = _GetAvailWriteSpace(pRing);
+
1939 if (Avail >= 2) {
+
1940 _ActiveTerminal = TerminalId; // Only change active terminal in case of success
+
1941 _WriteNoCheck(pRing, (const char*)ac, 2u);
+
1942 } else {
+
1943 r = -1;
+
1944 }
+
1945 }
+
1946 SEGGER_RTT_UNLOCK();
+
1947 } else {
+
1948 r = -1;
+
1949 }
+
1950 return r;
+
1951}
+
1952
+
1953/*********************************************************************
+
1954*
+
1955* SEGGER_RTT_TerminalOut
+
1956*
+
1957* Function description
+
1958* Writes a string to the given terminal
+
1959* without changing the terminal for channel 0.
+
1960*
+
1961* Parameters
+
1962* TerminalId Index of the terminal.
+
1963* s String to be printed on the terminal.
+
1964*
+
1965* Return value
+
1966* >= 0 - Number of bytes written.
+
1967* < 0 - Error.
+
1968*
+
1969*/
+
1970int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s) {
+
1971 int Status;
+
1972 unsigned FragLen;
+
1973 unsigned Avail;
+
1974 SEGGER_RTT_BUFFER_UP* pRing;
+
1975 //
+
1976 INIT();
+
1977 //
+
1978 // Validate terminal ID.
+
1979 //
+
1980 if (TerminalId < (char)sizeof(_aTerminalId)) { // We only support a certain number of channels
+
1981 //
+
1982 // Get "to-host" ring buffer.
+
1983 //
+
1984 pRing = (SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aUp[0] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
1985 //
+
1986 // Need to be able to change terminal, write data, change back.
+
1987 // Compute the fixed and variable sizes.
+
1988 //
+
1989 FragLen = STRLEN(s);
+
1990 //
+
1991 // How we output depends upon the mode...
+
1992 //
+
1993 SEGGER_RTT_LOCK();
+
1994 Avail = _GetAvailWriteSpace(pRing);
+
1995 switch (pRing->Flags & SEGGER_RTT_MODE_MASK) {
+
1996 case SEGGER_RTT_MODE_NO_BLOCK_SKIP:
+
1997 //
+
1998 // If we are in skip mode and there is no space for the whole
+
1999 // of this output, don't bother switching terminals at all.
+
2000 //
+
2001 if (Avail < (FragLen + 4u)) {
+
2002 Status = 0;
+
2003 } else {
+
2004 _PostTerminalSwitch(pRing, TerminalId);
+
2005 Status = (int)_WriteBlocking(pRing, s, FragLen);
+
2006 _PostTerminalSwitch(pRing, _ActiveTerminal);
+
2007 }
+
2008 break;
+
2009 case SEGGER_RTT_MODE_NO_BLOCK_TRIM:
+
2010 //
+
2011 // If we are in trim mode and there is not enough space for everything,
+
2012 // trim the output but always include the terminal switch. If no room
+
2013 // for terminal switch, skip that totally.
+
2014 //
+
2015 if (Avail < 4u) {
+
2016 Status = -1;
+
2017 } else {
+
2018 _PostTerminalSwitch(pRing, TerminalId);
+
2019 Status = (int)_WriteBlocking(pRing, s, (FragLen < (Avail - 4u)) ? FragLen : (Avail - 4u));
+
2020 _PostTerminalSwitch(pRing, _ActiveTerminal);
+
2021 }
+
2022 break;
+
2023 case SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL:
+
2024 //
+
2025 // If we are in blocking mode, output everything.
+
2026 //
+
2027 _PostTerminalSwitch(pRing, TerminalId);
+
2028 Status = (int)_WriteBlocking(pRing, s, FragLen);
+
2029 _PostTerminalSwitch(pRing, _ActiveTerminal);
+
2030 break;
+
2031 default:
+
2032 Status = -1;
+
2033 break;
+
2034 }
+
2035 //
+
2036 // Finish up.
+
2037 //
+
2038 SEGGER_RTT_UNLOCK();
+
2039 } else {
+
2040 Status = -1;
+
2041 }
+
2042 return Status;
+
2043}
+
2044
+
2045/*********************************************************************
+
2046*
+
2047* SEGGER_RTT_GetAvailWriteSpace
+
2048*
+
2049* Function description
+
2050* Returns the number of bytes available in the ring buffer.
+
2051*
+
2052* Parameters
+
2053* BufferIndex Index of the up buffer.
+
2054*
+
2055* Return value
+
2056* Number of bytes that are free in the selected up buffer.
+
2057*/
+
2058unsigned SEGGER_RTT_GetAvailWriteSpace (unsigned BufferIndex) {
+
2059 SEGGER_RTT_BUFFER_UP* pRing;
+
2060
+
2061 pRing = (SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
2062 return _GetAvailWriteSpace(pRing);
+
2063}
+
2064
+
2065
+
2066/*********************************************************************
+
2067*
+
2068* SEGGER_RTT_GetBytesInBuffer()
+
2069*
+
2070* Function description
+
2071* Returns the number of bytes currently used in the up buffer.
+
2072*
+
2073* Parameters
+
2074* BufferIndex Index of the up buffer.
+
2075*
+
2076* Return value
+
2077* Number of bytes that are used in the buffer.
+
2078*/
+
2079unsigned SEGGER_RTT_GetBytesInBuffer(unsigned BufferIndex) {
+
2080 unsigned RdOff;
+
2081 unsigned WrOff;
+
2082 unsigned r;
+
2083 volatile SEGGER_RTT_CB* pRTTCB;
+
2084 //
+
2085 // Avoid warnings regarding volatile access order. It's not a problem
+
2086 // in this case, but dampen compiler enthusiasm.
+
2087 //
+
2088 pRTTCB = (volatile SEGGER_RTT_CB*)((uintptr_t)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
2089 RdOff = pRTTCB->aUp[BufferIndex].RdOff;
+
2090 WrOff = pRTTCB->aUp[BufferIndex].WrOff;
+
2091 if (RdOff <= WrOff) {
+
2092 r = WrOff - RdOff;
+
2093 } else {
+
2094 r = pRTTCB->aUp[BufferIndex].SizeOfBuffer - (WrOff - RdOff);
+
2095 }
+
2096 return r;
+
2097}
+
2098
+
2099/*************************** End of file ****************************/
+ + + +
+
+
+ + + + diff --git a/Doc/html/_s_e_g_g_e_r___r_t_t_8h_source.html b/Doc/html/_s_e_g_g_e_r___r_t_t_8h_source.html new file mode 100644 index 0000000..45a1db4 --- /dev/null +++ b/Doc/html/_s_e_g_g_e_r___r_t_t_8h_source.html @@ -0,0 +1,636 @@ + + + + + + + +MyLibs: E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/RTT/SEGGER_RTT.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SEGGER_RTT.h
+
+
+
1/*********************************************************************
+
2* SEGGER Microcontroller GmbH *
+
3* The Embedded Experts *
+
4**********************************************************************
+
5* *
+
6* (c) 1995 - 2021 SEGGER Microcontroller GmbH *
+
7* *
+
8* www.segger.com Support: support@segger.com *
+
9* *
+
10**********************************************************************
+
11* *
+
12* SEGGER RTT * Real Time Transfer for embedded targets *
+
13* *
+
14**********************************************************************
+
15* *
+
16* All rights reserved. *
+
17* *
+
18* SEGGER strongly recommends to not make any changes *
+
19* to or modify the source code of this software in order to stay *
+
20* compatible with the RTT protocol and J-Link. *
+
21* *
+
22* Redistribution and use in source and binary forms, with or *
+
23* without modification, are permitted provided that the following *
+
24* condition is met: *
+
25* *
+
26* o Redistributions of source code must retain the above copyright *
+
27* notice, this condition and the following disclaimer. *
+
28* *
+
29* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
+
30* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
+
31* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
+
32* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
+
33* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
+
34* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
+
35* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
+
36* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
+
37* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
+
38* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
+
39* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
+
40* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
+
41* DAMAGE. *
+
42* *
+
43**********************************************************************
+
44* *
+
45* RTT version: 8.10g *
+
46* *
+
47**********************************************************************
+
48
+
49---------------------------END-OF-HEADER------------------------------
+
50File : SEGGER_RTT.h
+
51Purpose : Implementation of SEGGER real-time transfer which allows
+
52 real-time communication on targets which support debugger
+
53 memory accesses while the CPU is running.
+
54Revision: $Rev: 25842 $
+
55----------------------------------------------------------------------
+
56*/
+
57
+
58#ifndef SEGGER_RTT_H
+
59#define SEGGER_RTT_H
+
60
+
61#include "SEGGER_RTT_Conf.h"
+
62
+
63/*********************************************************************
+
64*
+
65* Defines, defaults
+
66*
+
67**********************************************************************
+
68*/
+
69
+
70#ifndef RTT_USE_ASM
+
71 //
+
72 // Some cores support out-of-order memory accesses (reordering of memory accesses in the core)
+
73 // For such cores, we need to define a memory barrier to guarantee the order of certain accesses to the RTT ring buffers.
+
74 // Needed for:
+
75 // Cortex-M7 (ARMv7-M)
+
76 // Cortex-M23 (ARM-v8M)
+
77 // Cortex-M33 (ARM-v8M)
+
78 // Cortex-A/R (ARM-v7A/R)
+
79 //
+
80 // We do not explicitly check for "Embedded Studio" as the compiler in use determines what we support.
+
81 // You can use an external toolchain like IAR inside ES. So there is no point in checking for "Embedded Studio"
+
82 //
+
83 #if (defined __CROSSWORKS_ARM) // Rowley Crossworks
+
84 #define _CC_HAS_RTT_ASM_SUPPORT 1
+
85 #if (defined __ARM_ARCH_7M__) // Cortex-M3
+
86 #define _CORE_HAS_RTT_ASM_SUPPORT 1
+
87 #elif (defined __ARM_ARCH_7EM__) // Cortex-M4/M7
+
88 #define _CORE_HAS_RTT_ASM_SUPPORT 1
+
89 #define _CORE_NEEDS_DMB 1
+
90 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
+
91 #elif (defined __ARM_ARCH_8M_BASE__) // Cortex-M23
+
92 #define _CORE_HAS_RTT_ASM_SUPPORT 0
+
93 #define _CORE_NEEDS_DMB 1
+
94 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
+
95 #elif (defined __ARM_ARCH_8M_MAIN__) // Cortex-M33
+
96 #define _CORE_HAS_RTT_ASM_SUPPORT 1
+
97 #define _CORE_NEEDS_DMB 1
+
98 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
+
99 #elif (defined(__ARM_ARCH_8_1M_MAIN__)) // Cortex-M85
+
100 #define _CORE_HAS_RTT_ASM_SUPPORT 1
+
101 #define _CORE_NEEDS_DMB 1
+
102 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
+
103 #else
+
104 #define _CORE_HAS_RTT_ASM_SUPPORT 0
+
105 #endif
+
106 #elif (defined __ARMCC_VERSION)
+
107 //
+
108 // ARM compiler
+
109 // ARM compiler V6.0 and later is clang based.
+
110 // Our ASM part is compatible to clang.
+
111 //
+
112 #if (__ARMCC_VERSION >= 6000000)
+
113 #define _CC_HAS_RTT_ASM_SUPPORT 1
+
114 #else
+
115 #define _CC_HAS_RTT_ASM_SUPPORT 0
+
116 #endif
+
117 #if (defined __ARM_ARCH_6M__) // Cortex-M0 / M1
+
118 #define _CORE_HAS_RTT_ASM_SUPPORT 0 // No ASM support for this architecture
+
119 #elif (defined __ARM_ARCH_7M__) // Cortex-M3
+
120 #define _CORE_HAS_RTT_ASM_SUPPORT 1
+
121 #elif (defined __ARM_ARCH_7EM__) // Cortex-M4/M7
+
122 #define _CORE_HAS_RTT_ASM_SUPPORT 1
+
123 #define _CORE_NEEDS_DMB 1
+
124 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
+
125 #elif (defined __ARM_ARCH_8M_BASE__) // Cortex-M23
+
126 #define _CORE_HAS_RTT_ASM_SUPPORT 0
+
127 #define _CORE_NEEDS_DMB 1
+
128 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
+
129 #elif (defined __ARM_ARCH_8M_MAIN__) // Cortex-M33
+
130 #define _CORE_HAS_RTT_ASM_SUPPORT 1
+
131 #define _CORE_NEEDS_DMB 1
+
132 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
+
133 #elif (defined __ARM_ARCH_8_1M_MAIN__) // Cortex-M85
+
134 #define _CORE_HAS_RTT_ASM_SUPPORT 1
+
135 #define _CORE_NEEDS_DMB 1
+
136 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
+
137 #elif ((defined __ARM_ARCH_7A__) || (defined __ARM_ARCH_7R__)) // Cortex-A/R 32-bit ARMv7-A/R
+
138 #define _CORE_NEEDS_DMB 1
+
139 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
+
140 #else
+
141 #define _CORE_HAS_RTT_ASM_SUPPORT 0
+
142 #endif
+
143 #elif ((defined __GNUC__) || (defined __clang__))
+
144 //
+
145 // GCC / Clang
+
146 //
+
147 #define _CC_HAS_RTT_ASM_SUPPORT 1
+
148 // ARM 7/9: __ARM_ARCH_5__ / __ARM_ARCH_5E__ / __ARM_ARCH_5T__ / __ARM_ARCH_5T__ / __ARM_ARCH_5TE__
+
149 #if (defined __ARM_ARCH_7M__) // Cortex-M3
+
150 #define _CORE_HAS_RTT_ASM_SUPPORT 1
+
151 #elif (defined __ARM_ARCH_7EM__) // Cortex-M4/M7
+
152 #define _CORE_HAS_RTT_ASM_SUPPORT 1
+
153 #define _CORE_NEEDS_DMB 1 // Only Cortex-M7 needs a DMB but we cannot distinguish M4 and M7 here...
+
154 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
+
155 #elif (defined __ARM_ARCH_8M_BASE__) // Cortex-M23
+
156 #define _CORE_HAS_RTT_ASM_SUPPORT 0
+
157 #define _CORE_NEEDS_DMB 1
+
158 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
+
159 #elif (defined __ARM_ARCH_8M_MAIN__) // Cortex-M33
+
160 #define _CORE_HAS_RTT_ASM_SUPPORT 1
+
161 #define _CORE_NEEDS_DMB 1
+
162 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
+
163 #elif (defined __ARM_ARCH_8_1M_MAIN__) // Cortex-M85
+
164 #define _CORE_HAS_RTT_ASM_SUPPORT 1
+
165 #define _CORE_NEEDS_DMB 1
+
166 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
+
167 #elif ((defined __ARM_ARCH_7A__) || (defined __ARM_ARCH_7R__)) // Cortex-A/R 32-bit ARMv7-A/R
+
168 #define _CORE_NEEDS_DMB 1
+
169 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
+
170 #else
+
171 #define _CORE_HAS_RTT_ASM_SUPPORT 0
+
172 #endif
+
173 #elif ((defined __IASMARM__) || (defined __ICCARM__))
+
174 //
+
175 // IAR assembler/compiler
+
176 //
+
177 #define _CC_HAS_RTT_ASM_SUPPORT 1
+
178 #if (__VER__ < 6300000)
+
179 #define VOLATILE
+
180 #else
+
181 #define VOLATILE volatile
+
182 #endif
+
183 #if (defined __ARM7M__) // Needed for old versions that do not know the define yet
+
184 #if (__CORE__ == __ARM7M__) // Cortex-M3
+
185 #define _CORE_HAS_RTT_ASM_SUPPORT 1
+
186 #endif
+
187 #endif
+
188 #if (defined __ARM7EM__)
+
189 #if (__CORE__ == __ARM7EM__) // Cortex-M4/M7
+
190 #define _CORE_HAS_RTT_ASM_SUPPORT 1
+
191 #define _CORE_NEEDS_DMB 1
+
192 #define RTT__DMB() asm VOLATILE ("DMB");
+
193 #endif
+
194 #endif
+
195 #if (defined __ARM8M_BASELINE__)
+
196 #if (__CORE__ == __ARM8M_BASELINE__) // Cortex-M23
+
197 #define _CORE_HAS_RTT_ASM_SUPPORT 0
+
198 #define _CORE_NEEDS_DMB 1
+
199 #define RTT__DMB() asm VOLATILE ("DMB");
+
200 #endif
+
201 #endif
+
202 #if (defined __ARM8M_MAINLINE__)
+
203 #if (__CORE__ == __ARM8M_MAINLINE__) // Cortex-M33
+
204 #define _CORE_HAS_RTT_ASM_SUPPORT 1
+
205 #define _CORE_NEEDS_DMB 1
+
206 #define RTT__DMB() asm VOLATILE ("DMB");
+
207 #endif
+
208 #endif
+
209 #if (defined __ARM8EM_MAINLINE__)
+
210 #if (__CORE__ == __ARM8EM_MAINLINE__) // Cortex-???
+
211 #define _CORE_HAS_RTT_ASM_SUPPORT 1
+
212 #define _CORE_NEEDS_DMB 1
+
213 #define RTT__DMB() asm VOLATILE ("DMB");
+
214 #endif
+
215 #endif
+
216 #if (defined __ARM7A__)
+
217 #if (__CORE__ == __ARM7A__) // Cortex-A 32-bit ARMv7-A
+
218 #define _CORE_NEEDS_DMB 1
+
219 #define RTT__DMB() asm VOLATILE ("DMB");
+
220 #endif
+
221 #endif
+
222 #if (defined __ARM7R__)
+
223 #if (__CORE__ == __ARM7R__) // Cortex-R 32-bit ARMv7-R
+
224 #define _CORE_NEEDS_DMB 1
+
225 #define RTT__DMB() asm VOLATILE ("DMB");
+
226 #endif
+
227 #endif
+
228// TBD: __ARM8A__ => Cortex-A 64-bit ARMv8-A
+
229// TBD: __ARM8R__ => Cortex-R 64-bit ARMv8-R
+
230 #else
+
231 //
+
232 // Other compilers
+
233 //
+
234 #define _CC_HAS_RTT_ASM_SUPPORT 0
+
235 #define _CORE_HAS_RTT_ASM_SUPPORT 0
+
236 #endif
+
237 //
+
238 // If IDE and core support the ASM version, enable ASM version by default
+
239 //
+
240 #ifndef _CORE_HAS_RTT_ASM_SUPPORT
+
241 #define _CORE_HAS_RTT_ASM_SUPPORT 0 // Default for unknown cores
+
242 #endif
+
243 #if (_CC_HAS_RTT_ASM_SUPPORT && _CORE_HAS_RTT_ASM_SUPPORT)
+
244 #define RTT_USE_ASM (1)
+
245 #else
+
246 #define RTT_USE_ASM (0)
+
247 #endif
+
248#endif
+
249
+
250#ifndef _CORE_NEEDS_DMB
+
251 #define _CORE_NEEDS_DMB 0
+
252#endif
+
253
+
254#ifndef RTT__DMB
+
255 #if _CORE_NEEDS_DMB
+
256 #error "Don't know how to place inline assembly for DMB"
+
257 #else
+
258 #define RTT__DMB()
+
259 #endif
+
260#endif
+
261
+
262#ifndef SEGGER_RTT_CPU_CACHE_LINE_SIZE
+
263 #define SEGGER_RTT_CPU_CACHE_LINE_SIZE (0) // On most target systems where RTT is used, we do not have a CPU cache, therefore 0 is a good default here
+
264#endif
+
265
+
266#ifndef SEGGER_RTT_UNCACHED_OFF
+
267 #if SEGGER_RTT_CPU_CACHE_LINE_SIZE
+
268 #error "SEGGER_RTT_UNCACHED_OFF must be defined when setting SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
+
269 #else
+
270 #define SEGGER_RTT_UNCACHED_OFF (0)
+
271 #endif
+
272#endif
+
273#if RTT_USE_ASM
+
274 #if SEGGER_RTT_CPU_CACHE_LINE_SIZE
+
275 #error "RTT_USE_ASM is not available if SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
+
276 #endif
+
277#endif
+
278
+
279#ifndef SEGGER_RTT_ASM // defined when SEGGER_RTT.h is included from assembly file
+
280#include <stdlib.h>
+
281#include <stdarg.h>
+
282#include <stdint.h>
+
283
+
284/*********************************************************************
+
285*
+
286* Defines, fixed
+
287*
+
288**********************************************************************
+
289*/
+
290
+
291//
+
292// Determine how much we must pad the control block to make it a multiple of a cache line in size
+
293// Assuming: U8 = 1B
+
294// U16 = 2B
+
295// U32 = 4B
+
296// U8/U16/U32* = 4B
+
297//
+
298#if SEGGER_RTT_CPU_CACHE_LINE_SIZE // Avoid division by zero in case we do not have any cache
+
299 #define SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(NumBytes) (((NumBytes + SEGGER_RTT_CPU_CACHE_LINE_SIZE - 1) / SEGGER_RTT_CPU_CACHE_LINE_SIZE) * SEGGER_RTT_CPU_CACHE_LINE_SIZE)
+
300#else
+
301 #define SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(NumBytes) (NumBytes)
+
302#endif
+
303#define SEGGER_RTT__CB_SIZE (16 + 4 + 4 + (SEGGER_RTT_MAX_NUM_UP_BUFFERS * 24) + (SEGGER_RTT_MAX_NUM_DOWN_BUFFERS * 24))
+
304#define SEGGER_RTT__CB_PADDING (SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(SEGGER_RTT__CB_SIZE) - SEGGER_RTT__CB_SIZE)
+
305
+
306/*********************************************************************
+
307*
+
308* Types
+
309*
+
310**********************************************************************
+
311*/
+
312
+
313//
+
314// Description for a circular buffer (also called "ring buffer")
+
315// which is used as up-buffer (T->H)
+
316//
+
+
317typedef struct {
+
318 const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4"
+
319 char* pBuffer; // Pointer to start of buffer
+
320 unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty.
+
321 unsigned WrOff; // Position of next item to be written by either target.
+
322 volatile unsigned RdOff; // Position of next item to be read by host. Must be volatile since it may be modified by host.
+
323 unsigned Flags; // Contains configuration flags. Flags[31:24] are used for validity check and must be zero. Flags[23:2] are reserved for future use. Flags[1:0] = RTT operating mode.
+ +
+
325
+
326//
+
327// Description for a circular buffer (also called "ring buffer")
+
328// which is used as down-buffer (H->T)
+
329//
+
+
330typedef struct {
+
331 const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4"
+
332 char* pBuffer; // Pointer to start of buffer
+
333 unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty.
+
334 volatile unsigned WrOff; // Position of next item to be written by host. Must be volatile since it may be modified by host.
+
335 unsigned RdOff; // Position of next item to be read by target (down-buffer).
+
336 unsigned Flags; // Contains configuration flags. Flags[31:24] are used for validity check and must be zero. Flags[23:2] are reserved for future use. Flags[1:0] = RTT operating mode.
+ +
+
338
+
339//
+
340// RTT control block which describes the number of buffers available
+
341// as well as the configuration for each buffer
+
342//
+
343//
+
+
344typedef struct {
+
345 char acID[16]; // Initialized to "SEGGER RTT"
+
346 int MaxNumUpBuffers; // Initialized to SEGGER_RTT_MAX_NUM_UP_BUFFERS (type. 2)
+
347 int MaxNumDownBuffers; // Initialized to SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (type. 2)
+
348 SEGGER_RTT_BUFFER_UP aUp[SEGGER_RTT_MAX_NUM_UP_BUFFERS]; // Up buffers, transferring information up from target via debug probe to host
+
349 SEGGER_RTT_BUFFER_DOWN aDown[SEGGER_RTT_MAX_NUM_DOWN_BUFFERS]; // Down buffers, transferring information down from host via debug probe to target
+
350#if SEGGER_RTT__CB_PADDING
+
351 unsigned char aDummy[SEGGER_RTT__CB_PADDING];
+
352#endif
+ +
+
354
+
355/*********************************************************************
+
356*
+
357* Global data
+
358*
+
359**********************************************************************
+
360*/
+
361extern SEGGER_RTT_CB _SEGGER_RTT;
+
362
+
363/*********************************************************************
+
364*
+
365* RTT API functions
+
366*
+
367**********************************************************************
+
368*/
+
369#ifdef __cplusplus
+
370 extern "C" {
+
371#endif
+
372int SEGGER_RTT_AllocDownBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags);
+
373int SEGGER_RTT_AllocUpBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags);
+
374int SEGGER_RTT_ConfigUpBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags);
+
375int SEGGER_RTT_ConfigDownBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags);
+
376int SEGGER_RTT_GetKey (void);
+
377unsigned SEGGER_RTT_HasData (unsigned BufferIndex);
+
378int SEGGER_RTT_HasKey (void);
+
379unsigned SEGGER_RTT_HasDataUp (unsigned BufferIndex);
+
380void SEGGER_RTT_Init (void);
+
381unsigned SEGGER_RTT_Read (unsigned BufferIndex, void* pBuffer, unsigned BufferSize);
+
382unsigned SEGGER_RTT_ReadNoLock (unsigned BufferIndex, void* pData, unsigned BufferSize);
+
383int SEGGER_RTT_SetNameDownBuffer (unsigned BufferIndex, const char* sName);
+
384int SEGGER_RTT_SetNameUpBuffer (unsigned BufferIndex, const char* sName);
+
385int SEGGER_RTT_SetFlagsDownBuffer (unsigned BufferIndex, unsigned Flags);
+
386int SEGGER_RTT_SetFlagsUpBuffer (unsigned BufferIndex, unsigned Flags);
+
387int SEGGER_RTT_WaitKey (void);
+
388unsigned SEGGER_RTT_Write (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
+
389unsigned SEGGER_RTT_WriteNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
+
390unsigned SEGGER_RTT_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
+
391unsigned SEGGER_RTT_ASM_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
+
392unsigned SEGGER_RTT_WriteString (unsigned BufferIndex, const char* s);
+
393void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
+
394unsigned SEGGER_RTT_PutChar (unsigned BufferIndex, char c);
+
395unsigned SEGGER_RTT_PutCharSkip (unsigned BufferIndex, char c);
+
396unsigned SEGGER_RTT_PutCharSkipNoLock (unsigned BufferIndex, char c);
+
397unsigned SEGGER_RTT_GetAvailWriteSpace (unsigned BufferIndex);
+
398unsigned SEGGER_RTT_GetBytesInBuffer (unsigned BufferIndex);
+
399//
+
400// Function macro for performance optimization
+
401//
+
402#define SEGGER_RTT_HASDATA(n) (((SEGGER_RTT_BUFFER_DOWN*)((uintptr_t)&_SEGGER_RTT.aDown[n] + SEGGER_RTT_UNCACHED_OFF))->WrOff - ((SEGGER_RTT_BUFFER_DOWN*)((uintptr_t)&_SEGGER_RTT.aDown[n] + SEGGER_RTT_UNCACHED_OFF))->RdOff)
+
403
+
404#if RTT_USE_ASM
+
405 #define SEGGER_RTT_WriteSkipNoLock SEGGER_RTT_ASM_WriteSkipNoLock
+
406#endif
+
407
+
408/*********************************************************************
+
409*
+
410* RTT transfer functions to send RTT data via other channels.
+
411*
+
412**********************************************************************
+
413*/
+
414unsigned SEGGER_RTT_ReadUpBuffer (unsigned BufferIndex, void* pBuffer, unsigned BufferSize);
+
415unsigned SEGGER_RTT_ReadUpBufferNoLock (unsigned BufferIndex, void* pData, unsigned BufferSize);
+
416unsigned SEGGER_RTT_WriteDownBuffer (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
+
417unsigned SEGGER_RTT_WriteDownBufferNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
+
418
+
419#define SEGGER_RTT_HASDATA_UP(n) (((SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aUp[n] + SEGGER_RTT_UNCACHED_OFF))->WrOff - ((SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aUp[n] + SEGGER_RTT_UNCACHED_OFF))->RdOff) // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
+
420
+
421/*********************************************************************
+
422*
+
423* RTT "Terminal" API functions
+
424*
+
425**********************************************************************
+
426*/
+
427int SEGGER_RTT_SetTerminal (unsigned char TerminalId);
+
428int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s);
+
429
+
430/*********************************************************************
+
431*
+
432* RTT printf functions (require SEGGER_RTT_printf.c)
+
433*
+
434**********************************************************************
+
435*/
+
436int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...);
+
437int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList);
+
438
+
439#ifdef __cplusplus
+
440 }
+
441#endif
+
442
+
443#endif // ifndef(SEGGER_RTT_ASM)
+
444
+
445//
+
446// For some environments, NULL may not be defined until certain headers are included
+
447//
+
448#ifndef NULL
+
449 #define NULL ((void*)0)
+
450#endif
+
451
+
452/*********************************************************************
+
453*
+
454* Defines
+
455*
+
456**********************************************************************
+
457*/
+
458
+
459//
+
460// Operating modes. Define behavior if buffer is full (not enough space for entire message)
+
461//
+
462#define SEGGER_RTT_MODE_NO_BLOCK_SKIP (0) // Skip. Do not block, output nothing. (Default)
+
463#define SEGGER_RTT_MODE_NO_BLOCK_TRIM (1) // Trim: Do not block, output as much as fits.
+
464#define SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL (2) // Block: Wait until there is space in the buffer.
+
465#define SEGGER_RTT_MODE_MASK (3)
+
466
+
467//
+
468// Control sequences, based on ANSI.
+
469// Can be used to control color, and clear the screen
+
470//
+
471#define RTT_CTRL_RESET "\x1B[0m" // Reset to default colors
+
472#define RTT_CTRL_CLEAR "\x1B[2J" // Clear screen, reposition cursor to top left
+
473
+
474#define RTT_CTRL_TEXT_BLACK "\x1B[2;30m"
+
475#define RTT_CTRL_TEXT_RED "\x1B[2;31m"
+
476#define RTT_CTRL_TEXT_GREEN "\x1B[2;32m"
+
477#define RTT_CTRL_TEXT_YELLOW "\x1B[2;33m"
+
478#define RTT_CTRL_TEXT_BLUE "\x1B[2;34m"
+
479#define RTT_CTRL_TEXT_MAGENTA "\x1B[2;35m"
+
480#define RTT_CTRL_TEXT_CYAN "\x1B[2;36m"
+
481#define RTT_CTRL_TEXT_WHITE "\x1B[2;37m"
+
482
+
483#define RTT_CTRL_TEXT_BRIGHT_BLACK "\x1B[1;30m"
+
484#define RTT_CTRL_TEXT_BRIGHT_RED "\x1B[1;31m"
+
485#define RTT_CTRL_TEXT_BRIGHT_GREEN "\x1B[1;32m"
+
486#define RTT_CTRL_TEXT_BRIGHT_YELLOW "\x1B[1;33m"
+
487#define RTT_CTRL_TEXT_BRIGHT_BLUE "\x1B[1;34m"
+
488#define RTT_CTRL_TEXT_BRIGHT_MAGENTA "\x1B[1;35m"
+
489#define RTT_CTRL_TEXT_BRIGHT_CYAN "\x1B[1;36m"
+
490#define RTT_CTRL_TEXT_BRIGHT_WHITE "\x1B[1;37m"
+
491
+
492#define RTT_CTRL_BG_BLACK "\x1B[24;40m"
+
493#define RTT_CTRL_BG_RED "\x1B[24;41m"
+
494#define RTT_CTRL_BG_GREEN "\x1B[24;42m"
+
495#define RTT_CTRL_BG_YELLOW "\x1B[24;43m"
+
496#define RTT_CTRL_BG_BLUE "\x1B[24;44m"
+
497#define RTT_CTRL_BG_MAGENTA "\x1B[24;45m"
+
498#define RTT_CTRL_BG_CYAN "\x1B[24;46m"
+
499#define RTT_CTRL_BG_WHITE "\x1B[24;47m"
+
500
+
501#define RTT_CTRL_BG_BRIGHT_BLACK "\x1B[4;40m"
+
502#define RTT_CTRL_BG_BRIGHT_RED "\x1B[4;41m"
+
503#define RTT_CTRL_BG_BRIGHT_GREEN "\x1B[4;42m"
+
504#define RTT_CTRL_BG_BRIGHT_YELLOW "\x1B[4;43m"
+
505#define RTT_CTRL_BG_BRIGHT_BLUE "\x1B[4;44m"
+
506#define RTT_CTRL_BG_BRIGHT_MAGENTA "\x1B[4;45m"
+
507#define RTT_CTRL_BG_BRIGHT_CYAN "\x1B[4;46m"
+
508#define RTT_CTRL_BG_BRIGHT_WHITE "\x1B[4;47m"
+
509
+
510
+
511#endif
+
512
+
513/*************************** End of file ****************************/
+ + + +
+
+
+ + + + diff --git a/Doc/html/_s_e_g_g_e_r___r_t_t___conf_8h_source.html b/Doc/html/_s_e_g_g_e_r___r_t_t___conf_8h_source.html new file mode 100644 index 0000000..98a785c --- /dev/null +++ b/Doc/html/_s_e_g_g_e_r___r_t_t___conf_8h_source.html @@ -0,0 +1,543 @@ + + + + + + + +MyLibs: E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/RTT/SEGGER_RTT_Conf.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SEGGER_RTT_Conf.h
+
+
+
1/*********************************************************************
+
2* SEGGER Microcontroller GmbH *
+
3* The Embedded Experts *
+
4**********************************************************************
+
5* *
+
6* (c) 1995 - 2021 SEGGER Microcontroller GmbH *
+
7* *
+
8* www.segger.com Support: support@segger.com *
+
9* *
+
10**********************************************************************
+
11* *
+
12* SEGGER RTT * Real Time Transfer for embedded targets *
+
13* *
+
14**********************************************************************
+
15* *
+
16* All rights reserved. *
+
17* *
+
18* SEGGER strongly recommends to not make any changes *
+
19* to or modify the source code of this software in order to stay *
+
20* compatible with the RTT protocol and J-Link. *
+
21* *
+
22* Redistribution and use in source and binary forms, with or *
+
23* without modification, are permitted provided that the following *
+
24* condition is met: *
+
25* *
+
26* o Redistributions of source code must retain the above copyright *
+
27* notice, this condition and the following disclaimer. *
+
28* *
+
29* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
+
30* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
+
31* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
+
32* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
+
33* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
+
34* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
+
35* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
+
36* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
+
37* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
+
38* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
+
39* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
+
40* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
+
41* DAMAGE. *
+
42* *
+
43**********************************************************************
+
44* *
+
45* RTT version: 8.10g *
+
46* *
+
47**********************************************************************
+
48
+
49---------------------------END-OF-HEADER------------------------------
+
50File : SEGGER_RTT_Conf.h
+
51Purpose : Implementation of SEGGER real-time transfer (RTT) which
+
52 allows real-time communication on targets which support
+
53 debugger memory accesses while the CPU is running.
+
54Revision: $Rev: 24316 $
+
55
+
56*/
+
57
+
58#ifndef SEGGER_RTT_CONF_H
+
59#define SEGGER_RTT_CONF_H
+
60
+
61#ifdef __IAR_SYSTEMS_ICC__
+
62 #include <intrinsics.h>
+
63#endif
+
64
+
65/*********************************************************************
+
66*
+
67* Defines, configurable
+
68*
+
69**********************************************************************
+
70*/
+
71
+
72//
+
73// Take in and set to correct values for Cortex-A systems with CPU cache
+
74//
+
75//#define SEGGER_RTT_CPU_CACHE_LINE_SIZE (32) // Largest cache line size (in bytes) in the current system
+
76//#define SEGGER_RTT_UNCACHED_OFF (0xFB000000) // Address alias where RTT CB and buffers can be accessed uncached
+
77//
+
78// Most common case:
+
79// Up-channel 0: RTT
+
80// Up-channel 1: SystemView
+
81//
+
82#ifndef SEGGER_RTT_MAX_NUM_UP_BUFFERS
+
83 #define SEGGER_RTT_MAX_NUM_UP_BUFFERS (3) // Max. number of up-buffers (T->H) available on this target (Default: 3)
+
84#endif
+
85//
+
86// Most common case:
+
87// Down-channel 0: RTT
+
88// Down-channel 1: SystemView
+
89//
+
90#ifndef SEGGER_RTT_MAX_NUM_DOWN_BUFFERS
+
91 #define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (3) // Max. number of down-buffers (H->T) available on this target (Default: 3)
+
92#endif
+
93
+
94#ifndef BUFFER_SIZE_UP
+
95 #define BUFFER_SIZE_UP (4096) // Size of the buffer for terminal output of target, up to host (Default: 1k)
+
96#endif
+
97
+
98#ifndef BUFFER_SIZE_DOWN
+
99 #define BUFFER_SIZE_DOWN (16) // Size of the buffer for terminal input to target from host (Usually keyboard input) (Default: 16)
+
100#endif
+
101
+
102#ifndef SEGGER_RTT_PRINTF_BUFFER_SIZE
+
103 #define SEGGER_RTT_PRINTF_BUFFER_SIZE (64u) // Size of buffer for RTT printf to bulk-send chars via RTT (Default: 64)
+
104#endif
+
105
+
106#ifndef SEGGER_RTT_MODE_DEFAULT
+
107 #define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_TRIM // Mode for pre-initialized terminal channel (buffer 0)
+
108#endif
+
109
+
110/*********************************************************************
+
111*
+
112* RTT memcpy configuration
+
113*
+
114* memcpy() is good for large amounts of data,
+
115* but the overhead is big for small amounts, which are usually stored via RTT.
+
116* With SEGGER_RTT_MEMCPY_USE_BYTELOOP a simple byte loop can be used instead.
+
117*
+
118* SEGGER_RTT_MEMCPY() can be used to replace standard memcpy() in RTT functions.
+
119* This is may be required with memory access restrictions,
+
120* such as on Cortex-A devices with MMU.
+
121*/
+
122#ifndef SEGGER_RTT_MEMCPY_USE_BYTELOOP
+
123 #define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 // 0: Use memcpy/SEGGER_RTT_MEMCPY, 1: Use a simple byte-loop
+
124#endif
+
125//
+
126// Example definition of SEGGER_RTT_MEMCPY to external memcpy with GCC toolchains and Cortex-A targets
+
127//
+
128//#if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__)) && (defined (__ARM_ARCH_7A__))
+
129// #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) SEGGER_memcpy((pDest), (pSrc), (NumBytes))
+
130//#endif
+
131
+
132//
+
133// Target is not allowed to perform other RTT operations while string still has not been stored completely.
+
134// Otherwise we would probably end up with a mixed string in the buffer.
+
135// If using RTT from within interrupts, multiple tasks or multi processors, define the SEGGER_RTT_LOCK() and SEGGER_RTT_UNLOCK() function here.
+
136//
+
137// SEGGER_RTT_MAX_INTERRUPT_PRIORITY can be used in the sample lock routines on Cortex-M3/4.
+
138// Make sure to mask all interrupts which can send RTT data, i.e. generate SystemView events, or cause task switches.
+
139// When high-priority interrupts must not be masked while sending RTT data, SEGGER_RTT_MAX_INTERRUPT_PRIORITY needs to be adjusted accordingly.
+
140// (Higher priority = lower priority number)
+
141// Default value for embOS: 128u
+
142// Default configuration in FreeRTOS: configMAX_SYSCALL_INTERRUPT_PRIORITY: ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
+
143// In case of doubt mask all interrupts: 1 << (8 - BASEPRI_PRIO_BITS) i.e. 1 << 5 when 3 bits are implemented in NVIC
+
144// or define SEGGER_RTT_LOCK() to completely disable interrupts.
+
145//
+
146#ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY
+
147 #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) // Interrupt priority to lock on SEGGER_RTT_LOCK on Cortex-M3/4 (Default: 0x20)
+
148#endif
+
149
+
150/*********************************************************************
+
151*
+
152* RTT lock configuration for SEGGER Embedded Studio,
+
153* Rowley CrossStudio and GCC
+
154*/
+
155#if ((defined(__SES_ARM) || defined(__SES_RISCV) || defined(__CROSSWORKS_ARM) || defined(__GNUC__) || defined(__clang__)) && !defined (__CC_ARM) && !defined(WIN32))
+
156 #if (defined(__ARM_ARCH_6M__) || defined(__ARM_ARCH_8M_BASE__))
+
157 #define SEGGER_RTT_LOCK() { \
+
158 unsigned int _SEGGER_RTT__LockState; \
+
159 __asm volatile ("mrs %0, primask \n\t" \
+
160 "movs r1, #1 \n\t" \
+
161 "msr primask, r1 \n\t" \
+
162 : "=r" (_SEGGER_RTT__LockState) \
+
163 : \
+
164 : "r1", "cc" \
+
165 );
+
166
+
167 #define SEGGER_RTT_UNLOCK() __asm volatile ("msr primask, %0 \n\t" \
+
168 : \
+
169 : "r" (_SEGGER_RTT__LockState) \
+
170 : \
+
171 ); \
+
172 }
+
173 #elif (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__) || defined(__ARM_ARCH_8_1M_MAIN__))
+
174 #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY
+
175 #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20)
+
176 #endif
+
177 #define SEGGER_RTT_LOCK() { \
+
178 unsigned int _SEGGER_RTT__LockState; \
+
179 __asm volatile ("mrs %0, basepri \n\t" \
+
180 "mov r1, %1 \n\t" \
+
181 "msr basepri, r1 \n\t" \
+
182 : "=r" (_SEGGER_RTT__LockState) \
+
183 : "i"(SEGGER_RTT_MAX_INTERRUPT_PRIORITY) \
+
184 : "r1", "cc" \
+
185 );
+
186
+
187 #define SEGGER_RTT_UNLOCK() __asm volatile ("msr basepri, %0 \n\t" \
+
188 : \
+
189 : "r" (_SEGGER_RTT__LockState) \
+
190 : \
+
191 ); \
+
192 }
+
193
+
194 #elif (defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__))
+
195 #define SEGGER_RTT_LOCK() { \
+
196 unsigned int _SEGGER_RTT__LockState; \
+
197 __asm volatile ("mrs r1, CPSR \n\t" \
+
198 "mov %0, r1 \n\t" \
+
199 "orr r1, r1, #0xC0 \n\t" \
+
200 "msr CPSR_c, r1 \n\t" \
+
201 : "=r" (_SEGGER_RTT__LockState) \
+
202 : \
+
203 : "r1", "cc" \
+
204 );
+
205
+
206 #define SEGGER_RTT_UNLOCK() __asm volatile ("mov r0, %0 \n\t" \
+
207 "mrs r1, CPSR \n\t" \
+
208 "bic r1, r1, #0xC0 \n\t" \
+
209 "and r0, r0, #0xC0 \n\t" \
+
210 "orr r1, r1, r0 \n\t" \
+
211 "msr CPSR_c, r1 \n\t" \
+
212 : \
+
213 : "r" (_SEGGER_RTT__LockState) \
+
214 : "r0", "r1", "cc" \
+
215 ); \
+
216 }
+
217 #elif defined(__riscv) || defined(__riscv_xlen)
+
218 #define SEGGER_RTT_LOCK() { \
+
219 unsigned int _SEGGER_RTT__LockState; \
+
220 __asm volatile ("csrr %0, mstatus \n\t" \
+
221 "csrci mstatus, 8 \n\t" \
+
222 "andi %0, %0, 8 \n\t" \
+
223 : "=r" (_SEGGER_RTT__LockState) \
+
224 : \
+
225 : \
+
226 );
+
227
+
228 #define SEGGER_RTT_UNLOCK() __asm volatile ("csrr a1, mstatus \n\t" \
+
229 "or %0, %0, a1 \n\t" \
+
230 "csrs mstatus, %0 \n\t" \
+
231 : \
+
232 : "r" (_SEGGER_RTT__LockState) \
+
233 : "a1" \
+
234 ); \
+
235 }
+
236 #else
+
237 #define SEGGER_RTT_LOCK()
+
238 #define SEGGER_RTT_UNLOCK()
+
239 #endif
+
240#endif
+
241
+
242/*********************************************************************
+
243*
+
244* RTT lock configuration for IAR EWARM
+
245*/
+
246#ifdef __ICCARM__
+
247 #if (defined (__ARM6M__) && (__CORE__ == __ARM6M__)) || \
+
248 (defined (__ARM8M_BASELINE__) && (__CORE__ == __ARM8M_BASELINE__))
+
249 #define SEGGER_RTT_LOCK() { \
+
250 unsigned int _SEGGER_RTT__LockState; \
+
251 _SEGGER_RTT__LockState = __get_PRIMASK(); \
+
252 __set_PRIMASK(1);
+
253
+
254 #define SEGGER_RTT_UNLOCK() __set_PRIMASK(_SEGGER_RTT__LockState); \
+
255 }
+
256 #elif (defined (__ARM7EM__) && (__CORE__ == __ARM7EM__)) || \
+
257 (defined (__ARM7M__) && (__CORE__ == __ARM7M__)) || \
+
258 (defined (__ARM8M_MAINLINE__) && (__CORE__ == __ARM8M_MAINLINE__)) || \
+
259 (defined (__ARM8M_MAINLINE__) && (__CORE__ == __ARM8M_MAINLINE__))
+
260 #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY
+
261 #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20)
+
262 #endif
+
263 #define SEGGER_RTT_LOCK() { \
+
264 unsigned int _SEGGER_RTT__LockState; \
+
265 _SEGGER_RTT__LockState = __get_BASEPRI(); \
+
266 __set_BASEPRI(SEGGER_RTT_MAX_INTERRUPT_PRIORITY);
+
267
+
268 #define SEGGER_RTT_UNLOCK() __set_BASEPRI(_SEGGER_RTT__LockState); \
+
269 }
+
270 #elif (defined (__ARM7A__) && (__CORE__ == __ARM7A__)) || \
+
271 (defined (__ARM7R__) && (__CORE__ == __ARM7R__))
+
272 #define SEGGER_RTT_LOCK() { \
+
273 unsigned int _SEGGER_RTT__LockState; \
+
274 __asm volatile ("mrs r1, CPSR \n\t" \
+
275 "mov %0, r1 \n\t" \
+
276 "orr r1, r1, #0xC0 \n\t" \
+
277 "msr CPSR_c, r1 \n\t" \
+
278 : "=r" (_SEGGER_RTT__LockState) \
+
279 : \
+
280 : "r1", "cc" \
+
281 );
+
282
+
283 #define SEGGER_RTT_UNLOCK() __asm volatile ("mov r0, %0 \n\t" \
+
284 "mrs r1, CPSR \n\t" \
+
285 "bic r1, r1, #0xC0 \n\t" \
+
286 "and r0, r0, #0xC0 \n\t" \
+
287 "orr r1, r1, r0 \n\t" \
+
288 "msr CPSR_c, r1 \n\t" \
+
289 : \
+
290 : "r" (_SEGGER_RTT__LockState) \
+
291 : "r0", "r1", "cc" \
+
292 ); \
+
293 }
+
294 #endif
+
295#endif
+
296
+
297/*********************************************************************
+
298*
+
299* RTT lock configuration for IAR RX
+
300*/
+
301#ifdef __ICCRX__
+
302 #define SEGGER_RTT_LOCK() { \
+
303 unsigned long _SEGGER_RTT__LockState; \
+
304 _SEGGER_RTT__LockState = __get_interrupt_state(); \
+
305 __disable_interrupt();
+
306
+
307 #define SEGGER_RTT_UNLOCK() __set_interrupt_state(_SEGGER_RTT__LockState); \
+
308 }
+
309#endif
+
310
+
311/*********************************************************************
+
312*
+
313* RTT lock configuration for IAR RL78
+
314*/
+
315#ifdef __ICCRL78__
+
316 #define SEGGER_RTT_LOCK() { \
+
317 __istate_t _SEGGER_RTT__LockState; \
+
318 _SEGGER_RTT__LockState = __get_interrupt_state(); \
+
319 __disable_interrupt();
+
320
+
321 #define SEGGER_RTT_UNLOCK() __set_interrupt_state(_SEGGER_RTT__LockState); \
+
322 }
+
323#endif
+
324
+
325/*********************************************************************
+
326*
+
327* RTT lock configuration for KEIL ARM
+
328*/
+
329#ifdef __CC_ARM
+
330 #if (defined __TARGET_ARCH_6S_M)
+
331 #define SEGGER_RTT_LOCK() { \
+
332 unsigned int _SEGGER_RTT__LockState; \
+
333 register unsigned char _SEGGER_RTT__PRIMASK __asm( "primask"); \
+
334 _SEGGER_RTT__LockState = _SEGGER_RTT__PRIMASK; \
+
335 _SEGGER_RTT__PRIMASK = 1u; \
+
336 __schedule_barrier();
+
337
+
338 #define SEGGER_RTT_UNLOCK() _SEGGER_RTT__PRIMASK = _SEGGER_RTT__LockState; \
+
339 __schedule_barrier(); \
+
340 }
+
341 #elif (defined(__TARGET_ARCH_7_M) || defined(__TARGET_ARCH_7E_M))
+
342 #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY
+
343 #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20)
+
344 #endif
+
345 #define SEGGER_RTT_LOCK() { \
+
346 unsigned int _SEGGER_RTT__LockState; \
+
347 register unsigned char BASEPRI __asm( "basepri"); \
+
348 _SEGGER_RTT__LockState = BASEPRI; \
+
349 BASEPRI = SEGGER_RTT_MAX_INTERRUPT_PRIORITY; \
+
350 __schedule_barrier();
+
351
+
352 #define SEGGER_RTT_UNLOCK() BASEPRI = _SEGGER_RTT__LockState; \
+
353 __schedule_barrier(); \
+
354 }
+
355 #endif
+
356#endif
+
357
+
358/*********************************************************************
+
359*
+
360* RTT lock configuration for TI ARM
+
361*/
+
362#ifdef __TI_ARM__
+
363 #if defined (__TI_ARM_V6M0__)
+
364 #define SEGGER_RTT_LOCK() { \
+
365 unsigned int _SEGGER_RTT__LockState; \
+
366 _SEGGER_RTT__LockState = __get_PRIMASK(); \
+
367 __set_PRIMASK(1);
+
368
+
369 #define SEGGER_RTT_UNLOCK() __set_PRIMASK(_SEGGER_RTT__LockState); \
+
370 }
+
371 #elif (defined (__TI_ARM_V7M3__) || defined (__TI_ARM_V7M4__))
+
372 #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY
+
373 #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20)
+
374 #endif
+
375 #define SEGGER_RTT_LOCK() { \
+
376 unsigned int _SEGGER_RTT__LockState; \
+
377 _SEGGER_RTT__LockState = _set_interrupt_priority(SEGGER_RTT_MAX_INTERRUPT_PRIORITY);
+
378
+
379 #define SEGGER_RTT_UNLOCK() _set_interrupt_priority(_SEGGER_RTT__LockState); \
+
380 }
+
381 #endif
+
382#endif
+
383
+
384/*********************************************************************
+
385*
+
386* RTT lock configuration for CCRX
+
387*/
+
388#ifdef __RX
+
389 #include <machine.h>
+
390 #define SEGGER_RTT_LOCK() { \
+
391 unsigned long _SEGGER_RTT__LockState; \
+
392 _SEGGER_RTT__LockState = get_psw() & 0x010000; \
+
393 clrpsw_i();
+
394
+
395 #define SEGGER_RTT_UNLOCK() set_psw(get_psw() | _SEGGER_RTT__LockState); \
+
396 }
+
397#endif
+
398
+
399/*********************************************************************
+
400*
+
401* RTT lock configuration for embOS Simulation on Windows
+
402* (Can also be used for generic RTT locking with embOS)
+
403*/
+
404#if defined(WIN32) || defined(SEGGER_RTT_LOCK_EMBOS)
+
405
+
406void OS_SIM_EnterCriticalSection(void);
+
407void OS_SIM_LeaveCriticalSection(void);
+
408
+
409#define SEGGER_RTT_LOCK() { \
+
410 OS_SIM_EnterCriticalSection();
+
411
+
412#define SEGGER_RTT_UNLOCK() OS_SIM_LeaveCriticalSection(); \
+
413 }
+
414#endif
+
415
+
416/*********************************************************************
+
417*
+
418* RTT lock configuration fallback
+
419*/
+
420#ifndef SEGGER_RTT_LOCK
+
421 #define SEGGER_RTT_LOCK() // Lock RTT (nestable) (i.e. disable interrupts)
+
422#endif
+
423
+
424#ifndef SEGGER_RTT_UNLOCK
+
425 #define SEGGER_RTT_UNLOCK() // Unlock RTT (nestable) (i.e. enable previous interrupt lock state)
+
426#endif
+
427
+
428#endif
+
429/*************************** End of file ****************************/
+
+
+
+ + + + diff --git a/Doc/html/_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source.html b/Doc/html/_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source.html new file mode 100644 index 0000000..e7b9f66 --- /dev/null +++ b/Doc/html/_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source.html @@ -0,0 +1,508 @@ + + + + + + + +MyLibs: E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/RTT/SEGGER_RTT_Syscalls_KEIL.c Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SEGGER_RTT_Syscalls_KEIL.c
+
+
+
1/*********************************************************************
+
2* SEGGER Microcontroller GmbH *
+
3* The Embedded Experts *
+
4**********************************************************************
+
5* *
+
6* (c) 1995 - 2021 SEGGER Microcontroller GmbH *
+
7* *
+
8* www.segger.com Support: support@segger.com *
+
9* *
+
10**********************************************************************
+
11* *
+
12* SEGGER RTT * Real Time Transfer for embedded targets *
+
13* *
+
14**********************************************************************
+
15* *
+
16* All rights reserved. *
+
17* *
+
18* SEGGER strongly recommends to not make any changes *
+
19* to or modify the source code of this software in order to stay *
+
20* compatible with the RTT protocol and J-Link. *
+
21* *
+
22* Redistribution and use in source and binary forms, with or *
+
23* without modification, are permitted provided that the following *
+
24* condition is met: *
+
25* *
+
26* o Redistributions of source code must retain the above copyright *
+
27* notice, this condition and the following disclaimer. *
+
28* *
+
29* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
+
30* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
+
31* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
+
32* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
+
33* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
+
34* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
+
35* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
+
36* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
+
37* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
+
38* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
+
39* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
+
40* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
+
41* DAMAGE. *
+
42* *
+
43**********************************************************************
+
44* *
+
45* RTT version: 7.54 *
+
46* *
+
47**********************************************************************
+
48
+
49---------------------------END-OF-HEADER------------------------------
+
50File : RTT_Syscalls_KEIL.c
+
51Purpose : Retargeting module for KEIL MDK-CM3.
+
52 Low-level functions for using printf() via RTT
+
53Revision: $Rev: 24316 $
+
54Notes : (1) https://wiki.segger.com/Keil_MDK-ARM#RTT_in_uVision
+
55----------------------------------------------------------------------
+
56*/
+
57#if (defined __CC_ARM) || (defined __ARMCC_VERSION)
+
58
+
59#include <stdio.h>
+
60#include <stdlib.h>
+
61#include <string.h>
+
62#include <rt_sys.h>
+
63#include <rt_misc.h>
+
64
+
65#include "SEGGER_RTT.h"
+
66/*********************************************************************
+
67*
+
68* #pragmas
+
69*
+
70**********************************************************************
+
71*/
+
72#if __ARMCC_VERSION < 6000000
+
73#pragma import(__use_no_semihosting)
+
74#endif
+
75
+
76#ifdef _MICROLIB
+
77 #pragma import(__use_full_stdio)
+
78#endif
+
79
+
80/*********************************************************************
+
81*
+
82* Defines non-configurable
+
83*
+
84**********************************************************************
+
85*/
+
86
+
87/* Standard IO device handles - arbitrary, but any real file system handles must be
+
88 less than 0x8000. */
+
89#define STDIN 0x8001 // Standard Input Stream
+
90#define STDOUT 0x8002 // Standard Output Stream
+
91#define STDERR 0x8003 // Standard Error Stream
+
92
+
93/*********************************************************************
+
94*
+
95* Public const
+
96*
+
97**********************************************************************
+
98*/
+
99#if __ARMCC_VERSION < 5000000
+
100//const char __stdin_name[] = "STDIN";
+
101const char __stdout_name[] = "STDOUT";
+
102const char __stderr_name[] = "STDERR";
+
103#endif
+
104
+
105/*********************************************************************
+
106*
+
107* Public code
+
108*
+
109**********************************************************************
+
110*/
+
111
+
112/*********************************************************************
+
113*
+
114* _ttywrch
+
115*
+
116* Function description:
+
117* Outputs a character to the console
+
118*
+
119* Parameters:
+
120* c - character to output
+
121*
+
122*/
+
123void _ttywrch(int c) {
+
124 fputc(c, stdout); // stdout
+
125 fflush(stdout);
+
126}
+
127
+
128/*********************************************************************
+
129*
+
130* _sys_open
+
131*
+
132* Function description:
+
133* Opens the device/file in order to do read/write operations
+
134*
+
135* Parameters:
+
136* sName - sName of the device/file to open
+
137* OpenMode - This parameter is currently ignored
+
138*
+
139* Return value:
+
140* != 0 - Handle to the object to open, otherwise
+
141* == 0 -"device" is not handled by this module
+
142*
+
143*/
+
144FILEHANDLE _sys_open(const char * sName, int OpenMode) {
+
145 (void)OpenMode;
+
146 // Register standard Input Output devices.
+
147 if (strcmp(sName, __stdout_name) == 0) {
+
148 return (STDOUT);
+
149 } else if (strcmp(sName, __stderr_name) == 0) {
+
150 return (STDERR);
+
151 } else
+
152 return (0); // Not implemented
+
153}
+
154
+
155/*********************************************************************
+
156*
+
157* _sys_close
+
158*
+
159* Function description:
+
160* Closes the handle to the open device/file
+
161*
+
162* Parameters:
+
163* hFile - Handle to a file opened via _sys_open
+
164*
+
165* Return value:
+
166* 0 - device/file closed
+
167*
+
168*/
+
169int _sys_close(FILEHANDLE hFile) {
+
170 (void)hFile;
+
171 return 0; // Not implemented
+
172}
+
173
+
174/*********************************************************************
+
175*
+
176* _sys_write
+
177*
+
178* Function description:
+
179* Writes the data to an open handle.
+
180* Currently this function only outputs data to the console
+
181*
+
182* Parameters:
+
183* hFile - Handle to a file opened via _sys_open
+
184* pBuffer - Pointer to the data that shall be written
+
185* NumBytes - Number of bytes to write
+
186* Mode - The Mode that shall be used
+
187*
+
188* Return value:
+
189* Number of bytes *not* written to the file/device
+
190*
+
191*/
+
192int _sys_write(FILEHANDLE hFile, const unsigned char * pBuffer, unsigned NumBytes, int Mode) {
+
193 int r = 0;
+
194
+
195 (void)Mode;
+
196 if (hFile == STDOUT) {
+
197 SEGGER_RTT_Write(0, (const char*)pBuffer, NumBytes);
+
198 return 0;
+
199 }
+
200 return r;
+
201}
+
202
+
203/*********************************************************************
+
204*
+
205* _sys_read
+
206*
+
207* Function description:
+
208* Reads data from an open handle.
+
209* Currently this modules does nothing.
+
210*
+
211* Parameters:
+
212* hFile - Handle to a file opened via _sys_open
+
213* pBuffer - Pointer to buffer to store the read data
+
214* NumBytes - Number of bytes to read
+
215* Mode - The Mode that shall be used
+
216*
+
217* Return value:
+
218* Number of bytes read from the file/device
+
219*
+
220*/
+
221int _sys_read(FILEHANDLE hFile, unsigned char * pBuffer, unsigned NumBytes, int Mode) {
+
222 (void)hFile;
+
223 (void)pBuffer;
+
224 (void)NumBytes;
+
225 (void)Mode;
+
226 return (0); // Not implemented
+
227}
+
228
+
229/*********************************************************************
+
230*
+
231* _sys_istty
+
232*
+
233* Function description:
+
234* This function shall return whether the opened file
+
235* is a console device or not.
+
236*
+
237* Parameters:
+
238* hFile - Handle to a file opened via _sys_open
+
239*
+
240* Return value:
+
241* 1 - Device is a console
+
242* 0 - Device is not a console
+
243*
+
244*/
+
245int _sys_istty(FILEHANDLE hFile) {
+
246 if (hFile > 0x8000) {
+
247 return (1);
+
248 }
+
249 return (0); // Not implemented
+
250}
+
251
+
252/*********************************************************************
+
253*
+
254* _sys_seek
+
255*
+
256* Function description:
+
257* Seeks via the file to a specific position
+
258*
+
259* Parameters:
+
260* hFile - Handle to a file opened via _sys_open
+
261* Pos -
+
262*
+
263* Return value:
+
264* int -
+
265*
+
266*/
+
267int _sys_seek(FILEHANDLE hFile, long Pos) {
+
268 (void)hFile;
+
269 (void)Pos;
+
270 return (0); // Not implemented
+
271}
+
272
+
273/*********************************************************************
+
274*
+
275* _sys_ensure
+
276*
+
277* Function description:
+
278*
+
279*
+
280* Parameters:
+
281* hFile - Handle to a file opened via _sys_open
+
282*
+
283* Return value:
+
284* int -
+
285*
+
286*/
+
287int _sys_ensure(FILEHANDLE hFile) {
+
288 (void)hFile;
+
289 return (-1); // Not implemented
+
290}
+
291
+
292/*********************************************************************
+
293*
+
294* _sys_flen
+
295*
+
296* Function description:
+
297* Returns the length of the opened file handle
+
298*
+
299* Parameters:
+
300* hFile - Handle to a file opened via _sys_open
+
301*
+
302* Return value:
+
303* Length of the file
+
304*
+
305*/
+
306long _sys_flen(FILEHANDLE hFile) {
+
307 (void)hFile;
+
308 return (0); // Not implemented
+
309}
+
310
+
311/*********************************************************************
+
312*
+
313* _sys_tmpnam
+
314*
+
315* Function description:
+
316* This function converts the file number fileno for a temporary
+
317* file to a unique filename, for example, tmp0001.
+
318*
+
319* Parameters:
+
320* pBuffer - Pointer to a buffer to store the name
+
321* FileNum - file number to convert
+
322* MaxLen - Size of the buffer
+
323*
+
324* Return value:
+
325* 1 - Error
+
326* 0 - Success
+
327*
+
328*/
+
329int _sys_tmpnam2(char * pBuffer, int FileNum, unsigned MaxLen) {
+
330 (void)pBuffer;
+
331 (void)FileNum;
+
332 (void)MaxLen;
+
333 return (1); // Not implemented
+
334}
+
335
+
336/*********************************************************************
+
337*
+
338* _sys_command_string
+
339*
+
340* Function description:
+
341* This function shall execute a system command.
+
342*
+
343* Parameters:
+
344* cmd - Pointer to the command string
+
345* len - Length of the string
+
346*
+
347* Return value:
+
348* == NULL - Command was not successfully executed
+
349* == sCmd - Command was passed successfully
+
350*
+
351*/
+
352char * _sys_command_string(char * cmd, int len) {
+
353 (void)len;
+
354 return cmd; // Not implemented
+
355}
+
356
+
357/*********************************************************************
+
358*
+
359* _sys_exit
+
360*
+
361* Function description:
+
362* This function is called when the application returns from main
+
363*
+
364* Parameters:
+
365* ReturnCode - Return code from the main function
+
366*
+
367*
+
368*/
+
369void _sys_exit(int ReturnCode) {
+
370 (void)ReturnCode;
+
371 while (1); // Not implemented
+
372}
+
373
+
374#if __ARMCC_VERSION >= 5000000
+
375/*********************************************************************
+
376*
+
377* stdout_putchar
+
378*
+
379* Function description:
+
380* Put a character to the stdout
+
381*
+
382* Parameters:
+
383* ch - Character to output
+
384*
+
385*
+
386*/
+
387int stdout_putchar(int ch) {
+
388 (void)ch;
+
389 return ch; // Not implemented
+
390}
+
391#endif
+
392
+
393#endif
+
394/*************************** End of file ****************************/
+
+
+
+ + + + diff --git a/Doc/html/_s_e_g_g_e_r___r_t_t__printf_8c_source.html b/Doc/html/_s_e_g_g_e_r___r_t_t__printf_8c_source.html new file mode 100644 index 0000000..edf16e6 --- /dev/null +++ b/Doc/html/_s_e_g_g_e_r___r_t_t__printf_8c_source.html @@ -0,0 +1,625 @@ + + + + + + + +MyLibs: E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/RTT/SEGGER_RTT_printf.c Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SEGGER_RTT_printf.c
+
+
+
1/*********************************************************************
+
2* SEGGER Microcontroller GmbH *
+
3* The Embedded Experts *
+
4**********************************************************************
+
5* *
+
6* (c) 1995 - 2021 SEGGER Microcontroller GmbH *
+
7* *
+
8* www.segger.com Support: support@segger.com *
+
9* *
+
10**********************************************************************
+
11* *
+
12* SEGGER RTT * Real Time Transfer for embedded targets *
+
13* *
+
14**********************************************************************
+
15* *
+
16* All rights reserved. *
+
17* *
+
18* SEGGER strongly recommends to not make any changes *
+
19* to or modify the source code of this software in order to stay *
+
20* compatible with the RTT protocol and J-Link. *
+
21* *
+
22* Redistribution and use in source and binary forms, with or *
+
23* without modification, are permitted provided that the following *
+
24* condition is met: *
+
25* *
+
26* o Redistributions of source code must retain the above copyright *
+
27* notice, this condition and the following disclaimer. *
+
28* *
+
29* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
+
30* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
+
31* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
+
32* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
+
33* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
+
34* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
+
35* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
+
36* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
+
37* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
+
38* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
+
39* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
+
40* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
+
41* DAMAGE. *
+
42* *
+
43**********************************************************************
+
44* *
+
45* RTT version: 8.10g *
+
46* *
+
47**********************************************************************
+
48
+
49---------------------------END-OF-HEADER------------------------------
+
50File : SEGGER_RTT_printf.c
+
51Purpose : Replacement for printf to write formatted data via RTT
+
52Revision: $Rev: 17697 $
+
53----------------------------------------------------------------------
+
54*/
+
55#include "SEGGER_RTT.h"
+
56#include "SEGGER_RTT_Conf.h"
+
57
+
58/*********************************************************************
+
59*
+
60* Defines, configurable
+
61*
+
62**********************************************************************
+
63*/
+
64
+
65#ifndef SEGGER_RTT_PRINTF_BUFFER_SIZE
+
66 #define SEGGER_RTT_PRINTF_BUFFER_SIZE (64)
+
67#endif
+
68
+
69#include <stdlib.h>
+
70#include <stdarg.h>
+
71
+
72
+
73#define FORMAT_FLAG_LEFT_JUSTIFY (1u << 0)
+
74#define FORMAT_FLAG_PAD_ZERO (1u << 1)
+
75#define FORMAT_FLAG_PRINT_SIGN (1u << 2)
+
76#define FORMAT_FLAG_ALTERNATE (1u << 3)
+
77
+
78/*********************************************************************
+
79*
+
80* Types
+
81*
+
82**********************************************************************
+
83*/
+
84
+
+
85typedef struct {
+
86 char* pBuffer;
+
87 unsigned BufferSize;
+
88 unsigned Cnt;
+
89
+
90 int ReturnValue;
+
91
+
92 unsigned RTTBufferIndex;
+ +
+
94
+
95/*********************************************************************
+
96*
+
97* Function prototypes
+
98*
+
99**********************************************************************
+
100*/
+
101
+
102/*********************************************************************
+
103*
+
104* Static code
+
105*
+
106**********************************************************************
+
107*/
+
108/*********************************************************************
+
109*
+
110* _StoreChar
+
111*/
+
112static void _StoreChar(SEGGER_RTT_PRINTF_DESC * p, char c) {
+
113 unsigned Cnt;
+
114
+
115 Cnt = p->Cnt;
+
116 if ((Cnt + 1u) <= p->BufferSize) {
+
117 *(p->pBuffer + Cnt) = c;
+
118 p->Cnt = Cnt + 1u;
+
119 p->ReturnValue++;
+
120 }
+
121 //
+
122 // Write part of string, when the buffer is full
+
123 //
+
124 if (p->Cnt == p->BufferSize) {
+
125 if (SEGGER_RTT_Write(p->RTTBufferIndex, p->pBuffer, p->Cnt) != p->Cnt) {
+
126 p->ReturnValue = -1;
+
127 } else {
+
128 p->Cnt = 0u;
+
129 }
+
130 }
+
131}
+
132
+
133/*********************************************************************
+
134*
+
135* _PrintUnsigned
+
136*/
+
137static void _PrintUnsigned(SEGGER_RTT_PRINTF_DESC * pBufferDesc, unsigned v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags) {
+
138 static const char _aV2C[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+
139 unsigned Div;
+
140 unsigned Digit;
+
141 unsigned Number;
+
142 unsigned Width;
+
143 char c;
+
144
+
145 Number = v;
+
146 Digit = 1u;
+
147 //
+
148 // Get actual field width
+
149 //
+
150 Width = 1u;
+
151 while (Number >= Base) {
+
152 Number = (Number / Base);
+
153 Width++;
+
154 }
+
155 if (NumDigits > Width) {
+
156 Width = NumDigits;
+
157 }
+
158 //
+
159 // Print leading chars if necessary
+
160 //
+
161 if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) {
+
162 if (FieldWidth != 0u) {
+
163 if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && (NumDigits == 0u)) {
+
164 c = '0';
+
165 } else {
+
166 c = ' ';
+
167 }
+
168 while ((FieldWidth != 0u) && (Width < FieldWidth)) {
+
169 FieldWidth--;
+
170 _StoreChar(pBufferDesc, c);
+
171 if (pBufferDesc->ReturnValue < 0) {
+
172 break;
+
173 }
+
174 }
+
175 }
+
176 }
+
177 if (pBufferDesc->ReturnValue >= 0) {
+
178 //
+
179 // Compute Digit.
+
180 // Loop until Digit has the value of the highest digit required.
+
181 // Example: If the output is 345 (Base 10), loop 2 times until Digit is 100.
+
182 //
+
183 while (1) {
+
184 if (NumDigits > 1u) { // User specified a min number of digits to print? => Make sure we loop at least that often, before checking anything else (> 1 check avoids problems with NumDigits being signed / unsigned)
+
185 NumDigits--;
+
186 } else {
+
187 Div = v / Digit;
+
188 if (Div < Base) { // Is our divider big enough to extract the highest digit from value? => Done
+
189 break;
+
190 }
+
191 }
+
192 Digit *= Base;
+
193 }
+
194 //
+
195 // Output digits
+
196 //
+
197 do {
+
198 Div = v / Digit;
+
199 v -= Div * Digit;
+
200 _StoreChar(pBufferDesc, _aV2C[Div]);
+
201 if (pBufferDesc->ReturnValue < 0) {
+
202 break;
+
203 }
+
204 Digit /= Base;
+
205 } while (Digit);
+
206 //
+
207 // Print trailing spaces if necessary
+
208 //
+
209 if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == FORMAT_FLAG_LEFT_JUSTIFY) {
+
210 if (FieldWidth != 0u) {
+
211 while ((FieldWidth != 0u) && (Width < FieldWidth)) {
+
212 FieldWidth--;
+
213 _StoreChar(pBufferDesc, ' ');
+
214 if (pBufferDesc->ReturnValue < 0) {
+
215 break;
+
216 }
+
217 }
+
218 }
+
219 }
+
220 }
+
221}
+
222
+
223/*********************************************************************
+
224*
+
225* _PrintInt
+
226*/
+
227static void _PrintInt(SEGGER_RTT_PRINTF_DESC * pBufferDesc, int v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags) {
+
228 unsigned Width;
+
229 int Number;
+
230
+
231 Number = (v < 0) ? -v : v;
+
232
+
233 //
+
234 // Get actual field width
+
235 //
+
236 Width = 1u;
+
237 while (Number >= (int)Base) {
+
238 Number = (Number / (int)Base);
+
239 Width++;
+
240 }
+
241 if (NumDigits > Width) {
+
242 Width = NumDigits;
+
243 }
+
244 if ((FieldWidth > 0u) && ((v < 0) || ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN))) {
+
245 FieldWidth--;
+
246 }
+
247
+
248 //
+
249 // Print leading spaces if necessary
+
250 //
+
251 if ((((FormatFlags & FORMAT_FLAG_PAD_ZERO) == 0u) || (NumDigits != 0u)) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u)) {
+
252 if (FieldWidth != 0u) {
+
253 while ((FieldWidth != 0u) && (Width < FieldWidth)) {
+
254 FieldWidth--;
+
255 _StoreChar(pBufferDesc, ' ');
+
256 if (pBufferDesc->ReturnValue < 0) {
+
257 break;
+
258 }
+
259 }
+
260 }
+
261 }
+
262 //
+
263 // Print sign if necessary
+
264 //
+
265 if (pBufferDesc->ReturnValue >= 0) {
+
266 if (v < 0) {
+
267 v = -v;
+
268 _StoreChar(pBufferDesc, '-');
+
269 } else if ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN) {
+
270 _StoreChar(pBufferDesc, '+');
+
271 } else {
+
272
+
273 }
+
274 if (pBufferDesc->ReturnValue >= 0) {
+
275 //
+
276 // Print leading zeros if necessary
+
277 //
+
278 if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) && (NumDigits == 0u)) {
+
279 if (FieldWidth != 0u) {
+
280 while ((FieldWidth != 0u) && (Width < FieldWidth)) {
+
281 FieldWidth--;
+
282 _StoreChar(pBufferDesc, '0');
+
283 if (pBufferDesc->ReturnValue < 0) {
+
284 break;
+
285 }
+
286 }
+
287 }
+
288 }
+
289 if (pBufferDesc->ReturnValue >= 0) {
+
290 //
+
291 // Print number without sign
+
292 //
+
293 _PrintUnsigned(pBufferDesc, (unsigned)v, Base, NumDigits, FieldWidth, FormatFlags);
+
294 }
+
295 }
+
296 }
+
297}
+
298
+
299/*********************************************************************
+
300*
+
301* Public code
+
302*
+
303**********************************************************************
+
304*/
+
305/*********************************************************************
+
306*
+
307* SEGGER_RTT_vprintf
+
308*
+
309* Function description
+
310* Stores a formatted string in SEGGER RTT control block.
+
311* This data is read by the host.
+
312*
+
313* Parameters
+
314* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal")
+
315* sFormat Pointer to format string
+
316* pParamList Pointer to the list of arguments for the format string
+
317*
+
318* Return values
+
319* >= 0: Number of bytes which have been stored in the "Up"-buffer.
+
320* < 0: Error
+
321*/
+
322int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList) {
+
323 char c;
+
324 SEGGER_RTT_PRINTF_DESC BufferDesc;
+
325 int v;
+
326 unsigned NumDigits;
+
327 unsigned FormatFlags;
+
328 unsigned FieldWidth;
+
329 char acBuffer[SEGGER_RTT_PRINTF_BUFFER_SIZE];
+
330
+
331 BufferDesc.pBuffer = acBuffer;
+
332 BufferDesc.BufferSize = SEGGER_RTT_PRINTF_BUFFER_SIZE;
+
333 BufferDesc.Cnt = 0u;
+
334 BufferDesc.RTTBufferIndex = BufferIndex;
+
335 BufferDesc.ReturnValue = 0;
+
336
+
337 do {
+
338 c = *sFormat;
+
339 sFormat++;
+
340 if (c == 0u) {
+
341 break;
+
342 }
+
343 if (c == '%') {
+
344 //
+
345 // Filter out flags
+
346 //
+
347 FormatFlags = 0u;
+
348 v = 1;
+
349 do {
+
350 c = *sFormat;
+
351 switch (c) {
+
352 case '-': FormatFlags |= FORMAT_FLAG_LEFT_JUSTIFY; sFormat++; break;
+
353 case '0': FormatFlags |= FORMAT_FLAG_PAD_ZERO; sFormat++; break;
+
354 case '+': FormatFlags |= FORMAT_FLAG_PRINT_SIGN; sFormat++; break;
+
355 case '#': FormatFlags |= FORMAT_FLAG_ALTERNATE; sFormat++; break;
+
356 default: v = 0; break;
+
357 }
+
358 } while (v);
+
359 //
+
360 // filter out field with
+
361 //
+
362 FieldWidth = 0u;
+
363 do {
+
364 c = *sFormat;
+
365 if ((c < '0') || (c > '9')) {
+
366 break;
+
367 }
+
368 sFormat++;
+
369 FieldWidth = (FieldWidth * 10u) + ((unsigned)c - '0');
+
370 } while (1);
+
371
+
372 //
+
373 // Filter out precision (number of digits to display)
+
374 //
+
375 NumDigits = 0u;
+
376 c = *sFormat;
+
377 if (c == '.') {
+
378 sFormat++;
+
379 do {
+
380 c = *sFormat;
+
381 if ((c < '0') || (c > '9')) {
+
382 break;
+
383 }
+
384 sFormat++;
+
385 NumDigits = NumDigits * 10u + ((unsigned)c - '0');
+
386 } while (1);
+
387 }
+
388 //
+
389 // Filter out length modifier
+
390 //
+
391 c = *sFormat;
+
392 do {
+
393 if ((c == 'l') || (c == 'h')) {
+
394 sFormat++;
+
395 c = *sFormat;
+
396 } else {
+
397 break;
+
398 }
+
399 } while (1);
+
400 //
+
401 // Handle specifiers
+
402 //
+
403 switch (c) {
+
404 case 'c': {
+
405 char c0;
+
406 v = va_arg(*pParamList, int);
+
407 c0 = (char)v;
+
408 _StoreChar(&BufferDesc, c0);
+
409 break;
+
410 }
+
411 case 'd':
+
412 v = va_arg(*pParamList, int);
+
413 _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags);
+
414 break;
+
415 case 'u':
+
416 v = va_arg(*pParamList, int);
+
417 _PrintUnsigned(&BufferDesc, (unsigned)v, 10u, NumDigits, FieldWidth, FormatFlags);
+
418 break;
+
419 case 'x':
+
420 case 'X':
+
421 v = va_arg(*pParamList, int);
+
422 _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, NumDigits, FieldWidth, FormatFlags);
+
423 break;
+
424 case 's':
+
425 {
+
426 const char * s = va_arg(*pParamList, const char *);
+
427 if (s == NULL) {
+
428 s = "(NULL)"; // Print (NULL) instead of crashing or breaking, as it is more informative to the user.
+
429 }
+
430 do {
+
431 c = *s;
+
432 s++;
+
433 if (c == '\0') {
+
434 break;
+
435 }
+
436 _StoreChar(&BufferDesc, c);
+
437 } while (BufferDesc.ReturnValue >= 0);
+
438 }
+
439 break;
+
440 case 'p':
+
441 v = va_arg(*pParamList, int);
+
442 _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, 8u, 8u, 0u);
+
443 break;
+
444 case '%':
+
445 _StoreChar(&BufferDesc, '%');
+
446 break;
+
447 default:
+
448 break;
+
449 }
+
450 sFormat++;
+
451 } else {
+
452 _StoreChar(&BufferDesc, c);
+
453 }
+
454 } while (BufferDesc.ReturnValue >= 0);
+
455
+
456 if (BufferDesc.ReturnValue > 0) {
+
457 //
+
458 // Write remaining data, if any
+
459 //
+
460 if (BufferDesc.Cnt != 0u) {
+
461 SEGGER_RTT_Write(BufferIndex, acBuffer, BufferDesc.Cnt);
+
462 }
+
463 BufferDesc.ReturnValue += (int)BufferDesc.Cnt;
+
464 }
+
465 return BufferDesc.ReturnValue;
+
466}
+
467
+
468/*********************************************************************
+
469*
+
470* SEGGER_RTT_printf
+
471*
+
472* Function description
+
473* Stores a formatted string in SEGGER RTT control block.
+
474* This data is read by the host.
+
475*
+
476* Parameters
+
477* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal")
+
478* sFormat Pointer to format string, followed by the arguments for conversion
+
479*
+
480* Return values
+
481* >= 0: Number of bytes which have been stored in the "Up"-buffer.
+
482* < 0: Error
+
483*
+
484* Notes
+
485* (1) Conversion specifications have following syntax:
+
486* %[flags][FieldWidth][.Precision]ConversionSpecifier
+
487* (2) Supported flags:
+
488* -: Left justify within the field width
+
489* +: Always print sign extension for signed conversions
+
490* 0: Pad with 0 instead of spaces. Ignored when using '-'-flag or precision
+
491* Supported conversion specifiers:
+
492* c: Print the argument as one char
+
493* d: Print the argument as a signed integer
+
494* u: Print the argument as an unsigned integer
+
495* x: Print the argument as an hexadecimal integer
+
496* s: Print the string pointed to by the argument
+
497* p: Print the argument as an 8-digit hexadecimal integer. (Argument shall be a pointer to void.)
+
498*/
+
499int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...) {
+
500 int r;
+
501 va_list ParamList;
+
502
+
503 va_start(ParamList, sFormat);
+
504 r = SEGGER_RTT_vprintf(BufferIndex, sFormat, &ParamList);
+
505 va_end(ParamList);
+
506 return r;
+
507}
+
508/*************************** End of file ****************************/
+ +
+
+
+ + + + diff --git a/Doc/html/annotated.html b/Doc/html/annotated.html index 180ffa8..c4e0c3d 100644 --- a/Doc/html/annotated.html +++ b/Doc/html/annotated.html @@ -106,18 +106,16 @@ $(function(){initNavTree('annotated.html','',''); });  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 + CHF_StackFrame_tКонтекст стек-фрейма процессора при HardFault + CRTT_FlashHeader_tСтруктура RTT, которая будет положена в Flash + CSEGGER_RTT_BUFFER_DOWN + CSEGGER_RTT_BUFFER_UP + CSEGGER_RTT_CB + CSEGGER_RTT_PRINTF_DESC + Cuint16_BitTypeDef + Cuint32_BitTypeDef + Cuint64_BitTypeDef + Cuint8_BitTypeDef diff --git a/Doc/html/annotated_dup.js b/Doc/html/annotated_dup.js index f3fc3cd..0ae31f8 100644 --- a/Doc/html/annotated_dup.js +++ b/Doc/html/annotated_dup.js @@ -4,14 +4,12 @@ var annotated_dup = [ "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" ], [ "RTT_FlashHeader_t", "struct_r_t_t___flash_header__t.html", "struct_r_t_t___flash_header__t" ], - [ "SPI_SettingsTypeDef", "struct_s_p_i___settings_type_def.html", "struct_s_p_i___settings_type_def" ], - [ "TIM_EncoderTypeDef", "struct_t_i_m___encoder_type_def.html", "struct_t_i_m___encoder_type_def" ], - [ "TIM_SettingsTypeDef", "struct_t_i_m___settings_type_def.html", "struct_t_i_m___settings_type_def" ], - [ "UART_SettingsTypeDef", "struct_u_a_r_t___settings_type_def.html", "struct_u_a_r_t___settings_type_def" ], + [ "SEGGER_RTT_BUFFER_DOWN", "struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n.html", null ], + [ "SEGGER_RTT_BUFFER_UP", "struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p.html", null ], + [ "SEGGER_RTT_CB", "struct_s_e_g_g_e_r___r_t_t___c_b.html", null ], + [ "SEGGER_RTT_PRINTF_DESC", "struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c.html", null ], [ "uint16_BitTypeDef", "unionuint16___bit_type_def.html", null ], [ "uint32_BitTypeDef", "unionuint32___bit_type_def.html", null ], [ "uint64_BitTypeDef", "unionuint64___bit_type_def.html", null ], diff --git a/Doc/html/bench__time_8h.html b/Doc/html/bench__time_8h.html index eef2024..db834ca 100644 --- a/Doc/html/bench__time_8h.html +++ b/Doc/html/bench__time_8h.html @@ -5,7 +5,7 @@ -MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/bench_time.h File Reference +MyLibs: E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/bench_time.h File Reference @@ -109,9 +109,9 @@ $(function(){initNavTree('bench__time_8h.html','',''); });
diff --git a/Doc/html/globals_func.html b/Doc/html/globals_func.html index 516e274..b04a565 100644 --- a/Doc/html/globals_func.html +++ b/Doc/html/globals_func.html @@ -97,9 +97,7 @@ $(function(){initNavTree('globals_func.html','',''); });
-
Here is a list of all documented functions with links to the documentation:
- -

- b -

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 index 74a3d1e..8a616a4 100644 --- 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 @@ -97,7 +97,7 @@ $(function(){initNavTree('group___b_e_n_c_h___t_i_m_e.html','',''); });
-
Time measurement
+
Time measurement
@@ -109,8 +109,8 @@ $(function(){initNavTree('group___b_e_n_c_h___t_i_m_e.html','',''); }); @@ -202,8 +202,8 @@ Variables
uint32_t avg_time = BenchTime_GetAverage(0);
uint32_t count = BenchTime_GetCount(0);
Заголовочный файл для измерения времени между событиями
-
static void BenchTime_Init(void)
Инициализация системы измерения времени
Definition bench_time.h:111
- +
static void BenchTime_Init(void)
Инициализация системы измерения времени
Definition bench_time.h:110
+

Function Documentation

◆ BenchTime_Init()

@@ -230,7 +230,7 @@ Variables

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

-

Definition at line 111 of file bench_time.h.

+

Definition at line 110 of file bench_time.h.

@@ -277,7 +277,7 @@ Variables
Returns
1 - успех, 0 - ошибка
-

Definition at line 131 of file bench_time.h.

+

Definition at line 130 of file bench_time.h.

@@ -318,7 +318,7 @@ Variables
Returns
Измеренное время в тиках, 0 - в случае ошибки
-

Definition at line 147 of file bench_time.h.

+

Definition at line 146 of file bench_time.h.

@@ -347,7 +347,7 @@ Variables

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

-

Definition at line 189 of file bench_time.h.

+

Definition at line 188 of file bench_time.h.

@@ -376,7 +376,7 @@ Variables

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

-

Definition at line 197 of file bench_time.h.

+

Definition at line 196 of file bench_time.h.

@@ -405,7 +405,7 @@ Variables

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

-

Definition at line 205 of file bench_time.h.

+

Definition at line 204 of file bench_time.h.

@@ -434,7 +434,7 @@ Variables

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

-

Definition at line 215 of file bench_time.h.

+

Definition at line 214 of file bench_time.h.

@@ -463,7 +463,7 @@ Variables

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

-

Definition at line 223 of file bench_time.h.

+

Definition at line 222 of file bench_time.h.

@@ -492,7 +492,7 @@ Variables

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

-

Definition at line 231 of file bench_time.h.

+

Definition at line 230 of file bench_time.h.

@@ -519,7 +519,7 @@ Variables

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

-

Definition at line 106 of file bench_time.h.

+

Definition at line 105 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 index b4ce582..4887185 100644 --- 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 @@ -14,7 +14,7 @@ var group___b_e_n_c_h___t_i_m_e = [ "stats", "struct_bench_time_channel__t.html#a22a3913e7925aa89cc12ec1d24a6c16c", null ] ] ], [ "BenchTime_t", "struct_bench_time__t.html", [ - [ "channels", "struct_bench_time__t.html#a9ae6d45c610be9d4b7628a614ccb06d6", null ] + [ "channels", "struct_bench_time__t.html#a51376c064bdcffba23cf65d0733e3d34", 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 ], 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 index 29fd6e1..feafbf7 100644 --- 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 @@ -1,4 +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 index a1ee85e..a4cef7c 100644 --- 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 @@ -1 +1 @@ -15b595630eeca30c57a018017bc540ba \ No newline at end of file +6705808550d728844cfae44f809a322b \ 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 index bca67f23e8f9b72f1a395e40803615e574fbb536..9b3f8b4aa5cf65d05f30b084495d34b9d97bdd6a 100644 GIT binary patch delta 1074 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 diff --git a/Doc/html/group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html b/Doc/html/group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html index 91e6dff..544eceb 100644 --- a/Doc/html/group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html +++ b/Doc/html/group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html @@ -97,7 +97,7 @@ $(function(){initNavTree('group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html','','
-
Bit access defines
+
Bit access defines
@@ -110,7 +110,7 @@ $(function(){initNavTree('group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html','','
- +
diff --git a/Doc/html/group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.map b/Doc/html/group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.map index b06dfee..1e8476e 100644 --- a/Doc/html/group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.map +++ b/Doc/html/group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.map @@ -1,4 +1,4 @@ - + diff --git a/Doc/html/group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.md5 b/Doc/html/group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.md5 index d0764fb..96b7e88 100644 --- a/Doc/html/group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.md5 +++ b/Doc/html/group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.md5 @@ -1 +1 @@ -56d577ae2ce4b45bacd111b61cb7554f \ No newline at end of file +b15e6059b024c1bd57db4f03c04931dd \ No newline at end of file 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 5591e12..49b5d8e 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 @@ -97,7 +97,7 @@ $(function(){initNavTree('group___d_e_l_a_y_s___d_e_f_i_n_e_s.html','',''); });
-
Delays defines
+
Delays defines
@@ -110,7 +110,7 @@ $(function(){initNavTree('group___d_e_l_a_y_s___d_e_f_i_n_e_s.html','',''); });
- +
@@ -159,7 +159,7 @@ Macros
Note
Использует задержку через local_time или osDelay в зависимости от FREERTOS_DELAY.
-

Definition at line 80 of file mylibs_defs.h.

+

Definition at line 95 of file mylibs_defs.h.

@@ -190,7 +190,7 @@ Macros

После вызова этого макроса переменная pvar содержит текущее количество миллисекунд с момента запуска системы (local_time).

Используется для реализации неблокирующих задержек.

-

Definition at line 98 of file mylibs_defs.h.

+

Definition at line 113 of file mylibs_defs.h.

@@ -232,9 +232,9 @@ Macros

Возвращает true, пока время задержки не истекло. Используется в проверках, когда нужно действовать, пока задержка выполняется. Пример:

while(msDelayWhileActive(1000, &tick)) {
// выполняем другие задачи, задержка не блокирует поток
}
-
#define msDelayWhileActive(_ms_, _pvar_)
Проверяет, активна ли задержка.
+
#define msDelayWhileActive(_ms_, _pvar_)
Проверяет, активна ли задержка.
-

Definition at line 115 of file mylibs_defs.h.

+

Definition at line 130 of file mylibs_defs.h.

@@ -276,9 +276,9 @@ Macros

Возвращает true, когда задержка уже завершена. Используется в проверках, когда нужно выполнить действие только после окончания задержки. Пример:

if(msDelayWaitDone(1000, &tick)) {
// выполняем действие после завершения задержки
}
-
#define msDelayWaitDone(_ms_, _pvar_)
Проверяет, завершилась ли задержка.
+
#define msDelayWaitDone(_ms_, _pvar_)
Проверяет, завершилась ли задержка.
-

Definition at line 132 of file mylibs_defs.h.

+

Definition at line 147 of file mylibs_defs.h.

diff --git a/Doc/html/group___d_e_l_a_y_s___d_e_f_i_n_e_s.map b/Doc/html/group___d_e_l_a_y_s___d_e_f_i_n_e_s.map index 8bd8a8e..ce5893a 100644 --- a/Doc/html/group___d_e_l_a_y_s___d_e_f_i_n_e_s.map +++ b/Doc/html/group___d_e_l_a_y_s___d_e_f_i_n_e_s.map @@ -1,4 +1,4 @@ - + diff --git a/Doc/html/group___d_e_l_a_y_s___d_e_f_i_n_e_s.md5 b/Doc/html/group___d_e_l_a_y_s___d_e_f_i_n_e_s.md5 index 286061b..eba3690 100644 --- a/Doc/html/group___d_e_l_a_y_s___d_e_f_i_n_e_s.md5 +++ b/Doc/html/group___d_e_l_a_y_s___d_e_f_i_n_e_s.md5 @@ -1 +1 @@ -c52cb47284eaa7377e976a0f04f0002e \ No newline at end of file +9bb1fbf15e0d245a5219c269dfcf886b \ No newline at end of file diff --git a/Doc/html/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html b/Doc/html/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html index 02199b4..e3bc252 100644 --- a/Doc/html/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html +++ b/Doc/html/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html @@ -97,7 +97,7 @@ $(function(){initNavTree('group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html
-
Error Handler defines
+
Error Handler defines
@@ -110,7 +110,7 @@ $(function(){initNavTree('group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html
- +
@@ -155,7 +155,7 @@ void 
  • Сконфигурировать mylibs_config.h:
    • Подключить заголовочный файл HAL библиотеки конкретного МК (напр. stm32f4xx_hal.h)
    • Подключить другие заголовочные файлы которые общие для всего проекта и должны быть видны
    • -
    • +
    • Подключить mylibs_include.h туда, где необходим доступ к библиотекам.
  • -
  • Подключить mylibs_include.h туда, где необходим доступ к библиотекам.
  • diff --git a/Doc/html/group___m_y_l_i_b_s___a_l_l.js b/Doc/html/group___m_y_l_i_b_s___a_l_l.js index 54a84ed..6cfffba 100644 --- a/Doc/html/group___m_y_l_i_b_s___a_l_l.js +++ b/Doc/html/group___m_y_l_i_b_s___a_l_l.js @@ -1,6 +1,6 @@ var group___m_y_l_i_b_s___a_l_l = [ [ "Configs", "group___m_y_l_i_b_s___c_o_n_f_i_g.html", "group___m_y_l_i_b_s___c_o_n_f_i_g" ], - [ "General Tools", "group___m_y_l_i_b_s___d_e_f_i_n_e_s.html", "group___m_y_l_i_b_s___d_e_f_i_n_e_s" ], - [ "Peripheral", "group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html", "group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l" ] + [ "General Tools", "group___m_y_l_i_b_s___t_o_o_l_s.html", "group___m_y_l_i_b_s___t_o_o_l_s" ], + [ "Debug Tools", "group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.html", "group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s" ] ]; \ No newline at end of file diff --git a/Doc/html/group___m_y_l_i_b_s___a_l_l.map b/Doc/html/group___m_y_l_i_b_s___a_l_l.map index 3343382..718cd58 100644 --- a/Doc/html/group___m_y_l_i_b_s___a_l_l.map +++ b/Doc/html/group___m_y_l_i_b_s___a_l_l.map @@ -1,6 +1,6 @@ - - + + diff --git a/Doc/html/group___m_y_l_i_b_s___a_l_l.md5 b/Doc/html/group___m_y_l_i_b_s___a_l_l.md5 index 4e0e91b..28b87e4 100644 --- a/Doc/html/group___m_y_l_i_b_s___a_l_l.md5 +++ b/Doc/html/group___m_y_l_i_b_s___a_l_l.md5 @@ -1 +1 @@ -52c11e57bdabafd5d7af3828f403f995 \ No newline at end of file +13c33a8645a936a94af7b6b5cac2a05a \ No newline at end of file diff --git a/Doc/html/group___m_y_l_i_b_s___a_l_l.png b/Doc/html/group___m_y_l_i_b_s___a_l_l.png index bbe49fcac04e572e97cb9e352f8624f94b314ec8..f2fe3174c74315aebcb4bc4cde8ce4a43485c85d 100644 GIT binary patch delta 2676 zcmZWrc{JPG8VzaE!JI~^HhPog{yo`vk z?DdGeWQP8Z{Dq~pu&Hby#QRswpJ?Ax0hZjcwzW0>st0v_@Zdo+NiBVc$`8JIK0KOg zY$7Qb2@+)%_4$4PJNVqZNKv6!+1hGpXnfHVEqpzp+2^aB;+N!EgO{47!0g+>Sd5f} zij(;sw(k!iV(fi6Bm(t0rr9s2mmuj!8RmRf_zFIX*UK0c^hdVkAYg=RvOnU*l z<%tdbnF^!*tBU(gr0oyntsC?eVjRsLM=gG7R`um<^oQkP9)EhS*G0}sdd>s=kxVO~ zQUHZ_t*W%dMZfyb%t~tq#iyQ1-BFwy8H9o3DQ|i8uDR6HHr5W^(z%(r*+ocf#oCBq z218M4)Kcx1DJ&>X*!wsEDQ|~N4E>d>Qtm2xRvAdpRF3@Pd;YG}J#VECZWQ9cl}T z?-;7RqBUF(v;R6LlmlWu!oM;GCEfU32TY$_T3XUhk6QQe^i)_`bx8nSZ|6+-!;6F} zh4)6%Nl--`oL&`kX%C?alXb3KA^Gj7utA(6d7l6g3Vp$Lw?f8N%cy{NAZlQX$h|$A z8fKae5Z;Ob1>d4OuHRa&77hDXV$lX!I4x?b>W4D&FkP%Pc&D{w?6)#G=BO87hcr{a zhi^L3iXRsy?4J)h{P?{6NEE&WLb%wHiC`(<_MLSfSi2idUJ4hZLqi+h{EkWd8clq) zCGx_C`*ic+PyKuL1PR@6$OYCaT@>pn8?kS2h^xmXzG8@zUeca83}#CrKR)~5eu9`| zT{Yuf_H06@e=$Igmk<`>4fImrtwv>9`Eg{cu}|KO-=A)pjh{O6%}PO92p!rKhp(69 zk=C8BXOt6H!k-xJzzJLRVw!fz&7b!PL@zX}qsu`63pEL0U-A_PkMrp)FPOkzb^pi=mCZ^v&rN|K#(M%{coIuLDlACT#54FWhd;ldW zktPlhv`>35iZAilvDcAS-n&4Fwpox^c8>0{cQ<>Um{!(hwkSzmd;U4wMDmW$o3v9y z=4geqv@{|SAnHH`@@vw;Lfe|?+ujgj$qtG2{_ttt1KO0u-rnALR%ho*%&Ji1opsH? zz(BWwj1*-L&(24PX$$R`l0Fod%N41ut+gO^Qsdrbo^?H$iakQ^w1-c<&%V5~y+uxE z1LprXh(C$i5H0>Ezhs~uXW5P`uB%wzDwD|_nCENVI_uikBhe9Q|?FCWrvc= zjU)~-L~d@es^bj|qYMSBDE?7g*B7#ky{0(#g)aoEDTE40bdslFBvpt&-OzSw1xn?hhu27P=~dg-lYeR6^0L5-5c z#oR4b_B_C3lho#xr`f|%%GEK6j}l!_V{F6uGvGeomCxV4dHVHilINp%>_#7g^&cay z%mmn7Lu+=neu$bILSr7xgd8pX&_we;nA-^(oUXe$#yqyXJ)o?WFqtXRYb>N~?eK3L z8$N?hJJwf7K0_-RuHKXg9MDa1%+bFI?LA}70FX*P0R^L~vkGn39sq4~8g!BH_HBvk zH;3F-l_zmju*U4`FEy{leaAQ#+X<9Us3`86j;XV&lirU7g^}~ZV_>7`(Qacian9iI zonPv)uO^jPp*acmTD@(@eZMA~ zXz!2ESim?6V{u`&%oiiB7VyK+zdQb~!|!RnyH=~y9Q?<(ZV9)u8_ZaS|MG!{$`P)u z701*DS^%y3w*e6x05aaU5n^*nP3^|=0tFh|pd{6%p4Gv!!;a<{hI=O=^wE2dvN)2> z=eTBPdSr==sQ&T?UgL(~eb1k%ivmJ#8y`JOFt@O94Mv#e+z}0jT2oh%ELXzDWto?W z--Zx_#3lC7d^BT5dM% zt8`mcsQ|S=}cIbC?U{ZldAvZ(^b$oXOqyo+e5Z z(}kONJ4kB!d0g*-U#uji8pPt?`TcbLnyXcCblK#PwZjVSHEQ;@1s&n delta 2648 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 Y{(YvQeMpV^XTAg3Sixb$3pZo`1?S){!vFvP diff --git a/Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.html b/Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.html new file mode 100644 index 0000000..3f565ee --- /dev/null +++ b/Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.html @@ -0,0 +1,151 @@ + + + + + + + +MyLibs: Debug Tools + + + + + + + + + + + + + + + + + +
    +
    +
    Error_Handler (vo

    Error_Handler который будет вызыватся в библиотеке

    -

    Definition at line 31 of file mylibs_defs.h.

    +

    Definition at line 46 of file mylibs_defs.h.

    @@ -177,7 +177,7 @@ void 
    Error_Handler (vo

    Проверить один указатель на NULL.

    -

    Definition at line 38 of file mylibs_defs.h.

    +

    Definition at line 53 of file mylibs_defs.h.

    @@ -203,7 +203,7 @@ void 
    Error_Handler (vo

    Проверить два указателя на NULL.

    -

    Definition at line 41 of file mylibs_defs.h.

    +

    Definition at line 56 of file mylibs_defs.h.

    @@ -234,7 +234,7 @@ void 
    Error_Handler (vo

    Проверить три указателя на NULL.

    -

    Definition at line 44 of file mylibs_defs.h.

    +

    Definition at line 59 of file mylibs_defs.h.

    @@ -270,7 +270,7 @@ void 
    Error_Handler (vo

    Проверить четыре указателя на NULL.

    -

    Definition at line 47 of file mylibs_defs.h.

    +

    Definition at line 62 of file mylibs_defs.h.

    @@ -311,7 +311,7 @@ void 
    Error_Handler (vo

    Проверить пять указателей на NULL.

    -

    Definition at line 50 of file mylibs_defs.h.

    +

    Definition at line 65 of file mylibs_defs.h.

    diff --git a/Doc/html/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.map b/Doc/html/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.map index bee5f9c..b4ecebf 100644 --- a/Doc/html/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.map +++ b/Doc/html/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.map @@ -1,4 +1,4 @@ - + diff --git a/Doc/html/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.md5 b/Doc/html/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.md5 index 2db04ea..b989b0c 100644 --- a/Doc/html/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.md5 +++ b/Doc/html/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.md5 @@ -1 +1 @@ -d5db8daac36cb4cc1a3fac830c6bfd88 \ No newline at end of file +48759eae8e94aea68fae58ca8d91b5d1 \ No newline at end of file diff --git a/Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.html b/Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.html index 77d711e..950fc52 100644 --- a/Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.html +++ b/Doc/html/group___g_e_n___o_p_t_i_m_i_z_e_r.html @@ -97,7 +97,7 @@ $(function(){initNavTree('group___g_e_n___o_p_t_i_m_i_z_e_r.html','',''); });
    -
    Genetic optimizer
    +
    Genetic optimizer
    @@ -109,8 +109,8 @@ $(function(){initNavTree('group___g_e_n___o_p_t_i_m_i_z_e_r.html','',''); }); @@ -186,12 +186,12 @@ Functions
    param_u8 = PARAM_UNSCALE(params[2], 10.0f, 100.0f);
    param_i16 = PARAM_UNSCALE(params[3], 500.0f, 5000.0f);
    Заголовочный файл для адаптивного подбора параметров
    -
    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)
    Один шаг эволюционного оптимизатора.
    -
    Структура эволюционного оптимизатора
    - +
    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

    ◆ PARAM_SCALE

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

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

    -

    Definition at line 73 of file gen_optimizer.h.

    +

    Definition at line 72 of file gen_optimizer.h.

    @@ -251,7 +251,7 @@ Functions

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

    -

    Definition at line 79 of file gen_optimizer.h.

    +

    Definition at line 78 of file gen_optimizer.h.

    @@ -269,7 +269,7 @@ Functions

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

    -

    Definition at line 89 of file gen_optimizer.h.

    +

    Definition at line 88 of file gen_optimizer.h.

    @@ -287,7 +287,7 @@ Functions

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

    -

    Definition at line 92 of file gen_optimizer.h.

    +

    Definition at line 91 of file gen_optimizer.h.

    @@ -305,7 +305,7 @@ Functions

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

    -

    Definition at line 95 of file gen_optimizer.h.

    +

    Definition at line 94 of file gen_optimizer.h.

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

    Definition at line 155 of file gen_optimizer.h.

    +

    Definition at line 154 of file gen_optimizer.h.

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

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

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

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

    Definition at line 225 of file gen_optimizer.h.

    +

    Definition at line 224 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 index f13bdd9..42d4587 100644 --- 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 @@ -9,9 +9,9 @@ var group___g_e_n___o_p_t_i_m_i_z_e_r = [ "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 ] + [ "loss", "struct_gen_optimizer__t.html#ae74a211c5ab6d58ffc147bb65e8fdafa", null ], + [ "candidates", "struct_gen_optimizer__t.html#af0161e7c0b6ab691b8b59d522808f947", null ], + [ "sorted_idx", "struct_gen_optimizer__t.html#a473a62c538392b7735d660f303377320", 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 ], diff --git a/Doc/html/group___g_e_n___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 index 5430a1c..7be6afa 100644 --- a/Doc/html/group___g_e_n___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 index 63165ab..4f41ea9 100644 --- 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 @@ -1 +1 @@ -ec124a446898cfdeeba090736e9d2802 \ No newline at end of file +117f38e130c123102c33539947be2ce0 \ 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 index 835cdf4ac13411a32a58c916d64f574da5106a0b..594f54a1bddcc13ea7701fbba21d66ab02518ebc 100644 GIT binary patch delta 1111 zcmV-d1gQJr2-^rDiBL{Q4GJ0x0000DNk~Le0003K0000b2nGNE0Ac+NypbUle-KGT zK~#90?cKj?BxM}O@%J;z6&^&0g=^hky>2C$EJRV%dO&g`3`5@`tZg(JvAetL zI}B;r+1VMFmzOK+0}ru?$N(vsh=>zPCL-d5l8J~op=2T=PAHj(h!akde~B?>sJ+KRmfuDfqJjc>l7=}v^UorS(+rIC(vkLDsX)2E6rDbEx$~s@tar7y! zHQWZ?2R;Gb=H~aD2jS_f5nx0Iv+EsDlzi5)mdJwvrS-San&u0T$N8L0k98z1zZ3> z0w0l-GlnF=3{GBeC9e!xEEknXdB>%X$*!wvFHh6hs@g9*uBeS{97X$9#ksCduWH#6 zqinfuIg&lbbzD_3*ExrUS4jTu;d9^)@Go#{zHK9WBDS(Un6l-ff1lIKi=IzWiBQ$v zy0KNYpLZNk_`DYC#?kaSHqom$=DK4UeJZVNp3BL}$!oxuz{{CUw{mvR^Jn8m9hpw2 zj7B5tnd z;A@g(5d%-#Xs|0qvo>|c6KweC-So9*)K*;1dM4QqQ(hvee<}rvwv~;Aq_^3QnUuv< zw|sF?=9G8}oXj5&f%kw$r~?7@6%)~rR=!6Q`2SbRqdPJ-uC@8 zd9yN$^V`0LO|5+L#^dolW6YyX?ILdKO=)2m636lV$z;-G?BRLf1Cp_lH|EP;%ACW) z!&qOAbfb%#fA4&me>u|eWHMR$rnQZ`nq>`jK)0qpNJ^hKNv4qh_8X3DvtCUN+i1DG z*d)LC4nVfs#wQcl>I5P^HPjNP%*K~FBGL~^CL-d5l8J~op=2T=PUxR-i8B`$7rFnO zNrvV6`Z{<0N-_z8;Cwcl9iN__wjPu$3xeR>cMP`TEjT{Dy1McmhIAwdg2&Z+iHL}Z dh=_=Y$p2qP>$(wJqjUfO002ovPDHLkV1jjmDIfp< delta 1117 zcmV-j1fu)f2;m4JiBL{Q4GJ0x0000DNk~Le0003R0000b2nGNE0G;S2c99_!e-=qZ zK~#90?cF_y9AzBG@$WOfablr&Z9o<)Ns1I#1#N?sVqt=!Ho3h?7XoSQw6nHy*eflJ z99RkVhNQXU8Z8vAx&s3TUU6`!fqhc!E;pH-muF_@nP+bI_kn?(*?IQ)@3Qls=VfLW zL_|bHL_|bHBs7!Vu(h>y#TauVe?%}+%v$?+XJ_X)bR10#hr?T;W03AdQFN3f$&>W9 zm$N$=V{RB@9(EU&IJyn|6gr3|^nF?_+N#Z>qaTCXJ=nxh*7z|in zUk@FIcy@Sr$m!|n-1aCyEF!XElxRf6J0%(s@lJ_GM7&d?5fSf{Xhg)je^wKXG3JG( zZ}MWw#@tr?J$e6c0G|WD0Ph5jrM5VZUsyuL5K`0nL&u#}cpXh$#u%)%mD~Cz9p7b$ z*THMR2f$~*N7HqH`@te=Adcg?Yq|2a`L4I?>&e=xzi-#UwbG&~IzX+peL1r)y9js> z_zrjq{0w}|MUuHxiV{kaeEfKoV>2dY`v)4;!>_^-=@l5&$TX3UCOJ# zx4_@PZ@^vPO(yrSz0zhyeUaD7$?ICp){DAbdF9e&vfHZa%TqVDs`|^y71fcAqiEl% zI2YAg*U3e;hlQd!F6e^Mmd@+n&{dYoRL zwU~;!9aZ%$8e3KUdF6n@_ch}hN8R^WhnGZ?J!`ujR80@Qbh*ng#?mCly}i9_z*oTa z%u}w(<iWg^Jx;O6>$f%b(&zV><|WZ&&)#WGyAE~A^=(`z zJ66>s(QIyR{(f+9fA9nFDewi8S)~7PABVZeq>I(Ljg5_k?mEw&VbhjnR;CL@t&=W3 zi%z>v&`ztROkOvo4_fLv{RMn8U9K{@75@%!1^6F$wWRE?)AF5LTU+z?+RHL4<6Bu5 zsEf~{mBHYm*`=xj%6IFgFG#6wNNVj9)YnqE*z_ z7L~8KT5HkdC7W!LY1)OTQ!c%48`JA$b-TvZM%Sst7Y9soC)TthRP-nPI?ZC2QY zykwI%K9Sz1&e%;^IoIj+vihp_O+WAZdZE18quJ{>{S51xI|_%x;Vom#!&Pfq_E{Xq zSZi;OMx#1oe;uy_A2PWz_$F|TKwYQp?QN?czPixGg@>U`fB0&5G#a`6!k%1u=fIEC z - - + +
    @@ -120,10 +120,10 @@ $(function(){initNavTree('group___m_y_l_i_b_s___a_l_l.html','',''); }); Topics - - - - + + + +
     Configs
     Конфигурации для библиотек MyLibs.
     General Tools
     Общие макросы и typedef'ы, используемые по всему проекту
     Peripheral
     Модули для управления периферией
     General Tools
     Общие макросы и typedef'ы, используемые по всему проекту
     Debug Tools
     Утилиты для тестирования программы

    Detailed Description

    Все используемые MyLibs библиотеки

    @@ -131,10 +131,9 @@ Topics
    + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + + +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Debug Tools
    +
    +
    + +

    Утилиты для тестирования программы +More...

    +
    Collaboration diagram for Debug Tools:
    +
    +
    + + + + + + + + + + + +

    +Topics

     Time measurement
     Библиотека для измерения времени/тиков между событиями
     Genetic optimizer
     Библиотека для эволюционного подбора параметров
     Trace defines
     Дефайны для работы с трассировкой
     Trackers defines
     Дефайны для работы с трекерами
    +

    Detailed Description

    +

    Утилиты для тестирования программы

    +
    +
    + +
    + + + + diff --git a/Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.js b/Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.js new file mode 100644 index 0000000..342b7d8 --- /dev/null +++ b/Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.js @@ -0,0 +1,7 @@ +var group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s = +[ + [ "Time measurement", "group___b_e_n_c_h___t_i_m_e.html", "group___b_e_n_c_h___t_i_m_e" ], + [ "Genetic optimizer", "group___g_e_n___o_p_t_i_m_i_z_e_r.html", "group___g_e_n___o_p_t_i_m_i_z_e_r" ], + [ "Trace defines", "group___t_r_a_c_e.html", "group___t_r_a_c_e" ], + [ "Trackers defines", "group___t_r_a_c_k_e_r_s.html", "group___t_r_a_c_k_e_r_s" ] +]; \ No newline at end of file diff --git a/Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.map b/Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.map new file mode 100644 index 0000000..e6aea37 --- /dev/null +++ b/Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.md5 b/Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.md5 new file mode 100644 index 0000000..cb91b74 --- /dev/null +++ b/Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.md5 @@ -0,0 +1 @@ +e10d808e73658cbf4719fc412f2e0b91 \ No newline at end of file diff --git a/Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.png b/Doc/html/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.png new file mode 100644 index 0000000000000000000000000000000000000000..7ecd95f2b2a1a28d07cad64faf8b7e2aeed81573 GIT binary patch literal 5702 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 literal 0 HcmV?d00001 diff --git a/Doc/html/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html b/Doc/html/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html index 1131a7c..17cc146 100644 --- a/Doc/html/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html +++ b/Doc/html/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html @@ -102,34 +102,17 @@ $(function(){initNavTree('group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html','','')

    Модули для управления периферией -More...

    +

    Collaboration diagram for Peripheral:
    - - - - - - - - - - -

    -Topics

     GPIO Tools
     Функции и макросы для удобной работы с GPIO.
     SPI Tools
     Функции и макросы для удобной работы с SPI.
     TIM Tools
     Функции и макросы для удобной работы с TIM.
     UART Tools
     Функции и макросы для удобной работы с UART.
    -

    Detailed Description

    Модули для управления периферией

    diff --git a/Doc/html/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.map b/Doc/html/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.map index 0321692..8380677 100644 --- a/Doc/html/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.map +++ b/Doc/html/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.map @@ -1,8 +1,4 @@ - - - - - - + + diff --git a/Doc/html/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.md5 b/Doc/html/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.md5 index 2e10e09..a0f8bc3 100644 --- a/Doc/html/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.md5 +++ b/Doc/html/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.md5 @@ -1 +1 @@ -1044283365b108883d0b7a448ff91792 \ No newline at end of file +01d6066aba098d16d320b5b455fdca4f \ No newline at end of file diff --git a/Doc/html/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.png b/Doc/html/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.png index f29ac65919ed0592ebdc32d3bff7a247ea3d53ab..07b5886b4eef601bc5cf142233a8dbee0b654117 100644 GIT binary patch delta 953 zcmV;q14jJRC%p$DiBL{Q4GJ0x0000DNk~Le0002Z0000b2nGNE0O6}`hLIr@e*m!13=)6|^U*!Gm}(;>D{XXzzL`=s{`gA1nw>_Z55tpTNVC)SHLe zc#DZ^O?Ec3yV>OTfe<=7v-5-QFY{-!0U?ACLI@#* zs4f*PSY2JcqLi91BbaezjQP@Pf3?1s9Y+?8Mq{b$7^+Nbz3=<}c5m64XeFi8yi#hT zxUec=8F*iI5Lw9oax_5@w1LImvc9D0@_j$|fU3arys|?WS-oCoZf>sZFe+zvcbCJ% z!@hD|LM%d5nk0=7mLzF}up~(%ge6HDAuLJK2w^F4%h`rf3S&&><5}AEe;&(v{+wM0 zo&wi^mnFxNTGAGK)>{ys=cQ_!w%#aQ_2DFGAo;>os_#n&PK;ra09*!^fEU2cPT5X* z;baqcVP(DGCh>lsv!t0~7l4O^qsl$N05hdVBy#0!O=FDd8&%>)pSU_%#I;jO4J>y! z>YW1~0PldGz+1wEnIZfjf68Zg9V4FS{eMNv8EKN%IMKu% zVf`}$+yz#E=fHU&Uj3!F zd94BWfhWKtP7)_+)Hwt;?ILz(c6K(G^A^1;mbSmR>6vTJZ*HcUcDbIK4U)r__ix}M z;kxD`;jY&fZUn?#^uz84^&TH}dN#x{;V7~RT;k*&&27?8 z-zvxV{ZkjD?Rux%Hf=kb{-Wp4BXRn!$VQ{Fq?Fpod-xsGyZC)P&%+qA+-x>&)&^Gz zN1zqp7jP$!*wR>ATQlSG5Lyv;{axxjgw}30o2Q=Kl<%J9f8!hQ8n{8Y?hzBD@ab81 zs#Jwh#*rUo2O!)kJZYvVSwuvYre=f4^h^j#k~BhClB5yBk|d1~mgL6*r@+C%LF|v- ziNTJKk7LXGl16L29|S>rXQy%x9Og!Ay+RvSgb+dqA%qa3 bI{pCwdu^~d4|9N-00000NkvXXu0mjf&Kb}U literal 5076 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 + + + + + + +MyLibs: General Tools + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    General Tools
    +
    +
    + +

    Общие макросы и typedef'ы, используемые по всему проекту +More...

    +
    Collaboration diagram for General Tools:
    +
    +
    + + + + + + + + + + + +

    +Topics

     Bit access defines
     Макросы и typedef'ы для работы с битами в unsigned типах.
     Error Handler defines
     Дефайны для обработки ошибок
     Delays defines
     Макросы и определения для работы с задержками в миллисекундах.
     Utils defines
     Общие вспомогательные макросы
    +

    Detailed Description

    +

    Общие макросы и typedef'ы, используемые по всему проекту

    +
    +
    + +
    + + + + diff --git a/Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.js b/Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.js new file mode 100644 index 0000000..b515dc7 --- /dev/null +++ b/Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.js @@ -0,0 +1,7 @@ +var group___m_y_l_i_b_s___t_o_o_l_s = +[ + [ "Bit access defines", "group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html", "group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s" ], + [ "Error Handler defines", "group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html", "group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s" ], + [ "Delays defines", "group___d_e_l_a_y_s___d_e_f_i_n_e_s.html", "group___d_e_l_a_y_s___d_e_f_i_n_e_s" ], + [ "Utils defines", "group___u_t_i_l_s___d_e_f_i_n_e_s.html", "group___u_t_i_l_s___d_e_f_i_n_e_s" ] +]; \ No newline at end of file diff --git a/Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.map b/Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.map new file mode 100644 index 0000000..6174e14 --- /dev/null +++ b/Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.md5 b/Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.md5 new file mode 100644 index 0000000..a4fbe2d --- /dev/null +++ b/Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.md5 @@ -0,0 +1 @@ +78998b4170ecf65af8583f6c3acb669a \ No newline at end of file diff --git a/Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.png b/Doc/html/group___m_y_l_i_b_s___t_o_o_l_s.png new file mode 100644 index 0000000000000000000000000000000000000000..40239c9aa4abc7494ab0523cbcbba8c2572f68f0 GIT binary patch literal 5702 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 WPy!~;f{}D#7y!{X1=Z-eJpCX4XCtEk literal 0 HcmV?d00001 diff --git a/Doc/html/group___t_r_a_c_e.html b/Doc/html/group___t_r_a_c_e.html index 6941ffc..b141d59 100644 --- a/Doc/html/group___t_r_a_c_e.html +++ b/Doc/html/group___t_r_a_c_e.html @@ -97,7 +97,7 @@ $(function(){initNavTree('group___t_r_a_c_e.html','',''); });
    -
    Trace defines
    +
    Trace defines
    @@ -109,12 +109,12 @@ $(function(){initNavTree('group___t_r_a_c_e.html','',''); }); diff --git a/Doc/html/group___t_r_a_c_e.map b/Doc/html/group___t_r_a_c_e.map index cf0579e..30c66b6 100644 --- a/Doc/html/group___t_r_a_c_e.map +++ b/Doc/html/group___t_r_a_c_e.map @@ -1,8 +1,8 @@ - - - - - - + + + + + + diff --git a/Doc/html/group___t_r_a_c_e.md5 b/Doc/html/group___t_r_a_c_e.md5 index 940cd9f..daf1d70 100644 --- a/Doc/html/group___t_r_a_c_e.md5 +++ b/Doc/html/group___t_r_a_c_e.md5 @@ -1 +1 @@ -231806d9df0ebec28cd371e85eb1e78c \ No newline at end of file +d398645521a6e65c12178c326d8a6a8c \ No newline at end of file diff --git a/Doc/html/group___t_r_a_c_e.png b/Doc/html/group___t_r_a_c_e.png index 3da1dc440ffbe6701c101d69164bc33cd54ef165..97192d207af845c4c92c8ba1d1183f2c96132ff1 100644 GIT binary patch literal 5958 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 diff --git a/Doc/html/group___t_r_a_c_e___g_p_i_o.html b/Doc/html/group___t_r_a_c_e___g_p_i_o.html index 647e041..9faf7d6 100644 --- a/Doc/html/group___t_r_a_c_e___g_p_i_o.html +++ b/Doc/html/group___t_r_a_c_e___g_p_i_o.html @@ -97,7 +97,7 @@ $(function(){initNavTree('group___t_r_a_c_e___g_p_i_o.html','',''); });
    -
    GPIO trace defines
    +
    GPIO trace defines
    @@ -162,7 +162,7 @@ Macros
  • GPIO_TRACE_ENABLE определён - устанавливает бит сброса через BSRR ((pin)<<16)
  • -

    Definition at line 155 of file trace.h.

    +

    Definition at line 154 of file trace.h.

    @@ -199,7 +199,7 @@ Macros
  • GPIO_TRACE_ENABLE определён - устанавливает бит установки через BSRR (pin)
  • -

    Definition at line 154 of file trace.h.

    +

    Definition at line 153 of file trace.h.

    diff --git a/Doc/html/group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html b/Doc/html/group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html index 5dbf3f2..c047f19 100644 --- a/Doc/html/group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html +++ b/Doc/html/group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html @@ -97,7 +97,7 @@ $(function(){initNavTree('group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html','',''); })
    -
    Hardfault trace defines
    +
    Hardfault trace defines
    @@ -129,7 +129,7 @@ Functions
    - +

    Variables

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

    Detailed Description

    @@ -172,9 +172,9 @@ Variables
    RTT_EraseFlash(); // erase rtt flash after message readed
    }
    }
    -
    __STATIC_FORCEINLINE int HF_CheckRecovered(int erase)
    Проверка и вывод последнего HardFault-трейса из Flash.
    Definition trace.h:499
    -
    __STATIC_FORCEINLINE void HF_HandleFault(void)
    Обработчик HardFault.
    Definition trace.h:540
    -
    __STATIC_FORCEINLINE int RTT_EraseFlash(void)
    Стирание сектора Flash с RTT-буфером
    Definition trace.h:388
    +
    __STATIC_FORCEINLINE int HF_CheckRecovered(int erase)
    Проверка и вывод последнего HardFault-трейса из Flash.
    Definition trace.h:498
    +
    __STATIC_FORCEINLINE void HF_HandleFault(void)
    Обработчик HardFault.
    Definition trace.h:539
    +
    __STATIC_FORCEINLINE int RTT_EraseFlash(void)
    Стирание сектора Flash с RTT-буфером
    Definition trace.h:387

    Function Documentation

    ◆ HF_CheckRecovered()

    @@ -200,7 +200,7 @@ Variables
    Note
    Вызов рекомендуется при инициализации приложения для анализа предыдущего сбоя.
    -

    Definition at line 499 of file trace.h.

    +

    Definition at line 498 of file trace.h.

    @@ -230,7 +230,7 @@ Variables
    Note
    Функция защищена, так как вызывается в контексте сбоя — минимизирует использование вызовов HAL.
    -

    Definition at line 540 of file trace.h.

    +

    Definition at line 539 of file trace.h.

    @@ -255,12 +255,12 @@ Variables
    -

    Definition at line 523 of file trace.h.

    +

    Definition at line 522 of file trace.h.

    - -

    ◆ stack_dump

    + +

    ◆ stack_dump

    @@ -269,7 +269,7 @@ Variables - +
    uint32_t stack_dump[32]uint32_t stack_dump[HF_STACK_DUMP_WORDS]
    @@ -279,7 +279,7 @@ Variables
    -

    Definition at line 524 of file trace.h.

    +

    Definition at line 523 of file trace.h.

    @@ -303,7 +303,7 @@ Variables
    -

    Definition at line 525 of file trace.h.

    +

    Definition at line 524 of file trace.h.

    diff --git a/Doc/html/group___t_r_a_c_e___r_t_t___f_l_a_s_h.html b/Doc/html/group___t_r_a_c_e___r_t_t___f_l_a_s_h.html index 20cd2c9..c30362d 100644 --- a/Doc/html/group___t_r_a_c_e___r_t_t___f_l_a_s_h.html +++ b/Doc/html/group___t_r_a_c_e___r_t_t___f_l_a_s_h.html @@ -97,7 +97,7 @@ $(function(){initNavTree('group___t_r_a_c_e___r_t_t___f_l_a_s_h.html','',''); })
    -
    Flash RTT Buffer
    +
    Flash RTT Buffer
    @@ -170,7 +170,7 @@ Functions

    Подготовка Flash к записи

    Сбрасывает ошибки Flash и ожидает готовности перед записью

    -

    Definition at line 203 of file trace.h.

    +

    Definition at line 202 of file trace.h.

    @@ -208,7 +208,7 @@ Functions
  • Если конкретный (младший байт != 0) — запись выполняется только с этим тегом, иначе ошибка.
  • -

    Definition at line 227 of file trace.h.

    +

    Definition at line 226 of file trace.h.

    @@ -257,7 +257,7 @@ Functions
  • Если конкретный (младший байт != 0) — прочитывается именно эта запись.
  • -

    Definition at line 324 of file trace.h.

    +

    Definition at line 323 of file trace.h.

    @@ -278,7 +278,7 @@ Functions

    Стирание сектора Flash с RTT-буфером

    -

    Definition at line 388 of file trace.h.

    +

    Definition at line 387 of file trace.h.

    diff --git a/Doc/html/group___t_r_a_c_e___r_t_t___f_l_a_s_h.js b/Doc/html/group___t_r_a_c_e___r_t_t___f_l_a_s_h.js index d616ea9..0ad3823 100644 --- a/Doc/html/group___t_r_a_c_e___r_t_t___f_l_a_s_h.js +++ b/Doc/html/group___t_r_a_c_e___r_t_t___f_l_a_s_h.js @@ -3,7 +3,7 @@ var group___t_r_a_c_e___r_t_t___f_l_a_s_h = [ "RTT_FlashHeader_t", "struct_r_t_t___flash_header__t.html", [ [ "tag", "struct_r_t_t___flash_header__t.html#a844ee5470a323a749856cbb7a682dc57", null ], [ "size", "struct_r_t_t___flash_header__t.html#afd1a5c51af6f97d170c2ccbbe3e34699", null ], - [ "data", "struct_r_t_t___flash_header__t.html#ae7276198385c8d6f6508f433d042d52a", null ] + [ "data", "struct_r_t_t___flash_header__t.html#a1100df39b0eccb835946f4c13de23b4e", null ] ] ], [ "RTT_FlashPrepare", "group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga21353cb4f5af666237739e62ce019cd6", null ], [ "RTT_SaveToFlash", "group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga79f222c8ab644de4d47f07528d1edd63", null ], 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 2aab441..07d20f0 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 @@ -97,7 +97,7 @@ $(function(){initNavTree('group___t_r_a_c_e___s_e_r_i_a_l.html','',''); });
    -
    Serial trace defines
    +
    Serial trace defines
    @@ -126,7 +126,7 @@ Macros

    В зависимости от настроек определяется дефайн my_printf() и log_printf() для работы с трассировкой:

    • SERIAL_TRACE_ENABLE - Если трассировка отключена, то все дефайны определяются как 'ничего' и на производительность кода не влияют
    • RTT_TRACE_ENABLE - для RTT это будет вызов функции SEGGER_RTT_printf()

      -

      Предварительно надо подключить библиотеку SEGGER RTT (SEGGER_RTT.h) и вызвать функцию SEGGER_RTT_Init()

      +

      Предварительно надо подключить библиотеку SEGGER RTT (SEGGER_RTT.h) и вызвать функцию SEGGER_RTT_Init()

    • SWO_TRACE_ENABLE для SWO это будет просто printf()

      Предварительно надо подключить библиотеку STDOUT и retarget под ITM:

      @@ -166,7 +166,7 @@ Macros
    • NO_TRACE - пустой макрос
    -

    Definition at line 80 of file trace.h.

    +

    Definition at line 79 of file trace.h.

    @@ -193,11 +193,7 @@ Macros
    -Value:
    my_printf("\n[%lu] [%s] " fmt, \
    -
    (unsigned long)local_time(), TAG, ##__VA_ARGS__)
    -
    #define local_time()
    Локальное время
    -
    #define my_printf(...)
    Универсальный макрос для вывода трассировки
    Definition trace.h:80
    -
    +

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

    Parameters
    @@ -216,7 +212,7 @@ Macros -

    Definition at line 109 of file trace.h.

    +

    Definition at line 106 of file trace.h.

    diff --git a/Doc/html/group___t_r_a_c_k_e_r_s.html b/Doc/html/group___t_r_a_c_k_e_r_s.html index 66db708..2478e0e 100644 --- a/Doc/html/group___t_r_a_c_k_e_r_s.html +++ b/Doc/html/group___t_r_a_c_k_e_r_s.html @@ -97,7 +97,7 @@ $(function(){initNavTree('group___t_r_a_c_k_e_r_s.html','',''); });
    -
    Trackers defines
    +
    Trackers defines
    @@ -109,8 +109,8 @@ $(function(){initNavTree('group___t_r_a_c_k_e_r_s.html','',''); });
    @@ -234,7 +234,7 @@ Macros

    Содержит счетчик для успешных событый (cnt_ok), счетчик для ошибок (cnt_err), счетчик для предупреждений (cnt_warn).

    Также есть возможность объявить пользовательские переменные в количестве <num_user_vars> штук.

    -

    Definition at line 70 of file trackers.h.

    +

    Definition at line 69 of file trackers.h.

    @@ -256,7 +256,7 @@ Macros

    Получить количетство пользовательских переменных

    -

    Definition at line 80 of file trackers.h.

    +

    Definition at line 79 of file trackers.h.

    @@ -279,11 +279,11 @@ Macros
    Value:
    ((_uservarnumb_) < num_of_usercnts((_cntstruct_).user))
    -
    #define num_of_usercnts(_user_)
    Получить количетство пользовательских переменных
    Definition trackers.h:80
    +
    #define num_of_usercnts(_user_)
    Получить количетство пользовательских переменных
    Definition trackers.h:79

    Проверка существует ли указанная пользовательская переменная

    -

    Definition at line 82 of file trackers.h.

    +

    Definition at line 81 of file trackers.h.

    @@ -306,11 +306,11 @@ Macros
    Value:
    if(assert_usertracker(_cntstruct_, _uservarnumb_))
    -
    #define assert_usertracker(_cntstruct_, _uservarnumb_)
    Проверка существует ли указанная пользовательская переменная
    Definition trackers.h:82
    +
    #define assert_usertracker(_cntstruct_, _uservarnumb_)
    Проверка существует ли указанная пользовательская переменная
    Definition trackers.h:81

    Условие для проверки существует ли указанная пользовательская переменная

    -

    Definition at line 84 of file trackers.h.

    +

    Definition at line 83 of file trackers.h.

    @@ -336,7 +336,7 @@ Macros

    Тернарный оператор для проверки существует ли указанная пользовательская переменная

    -

    Definition at line 86 of file trackers.h.

    +

    Definition at line 85 of file trackers.h.

    @@ -358,7 +358,7 @@ Macros

    Считать счетчик успешных событий

    -

    Definition at line 90 of file trackers.h.

    +

    Definition at line 89 of file trackers.h.

    @@ -380,7 +380,7 @@ Macros

    Считать счетчик ошибок

    -

    Definition at line 92 of file trackers.h.

    +

    Definition at line 91 of file trackers.h.

    @@ -402,7 +402,7 @@ Macros

    Считать счетчик предупреждений

    -

    Definition at line 94 of file trackers.h.

    +

    Definition at line 93 of file trackers.h.

    @@ -425,7 +425,7 @@ Macros
    Value:
    (_cntstruct_).user[tern_assert_usertracker(_cntstruct_, _uservarnumb_)]
    -
    #define tern_assert_usertracker(_cntstruct_, _uservarnumb_)
    Тернарный оператор для проверки существует ли указанная пользовательская переменная
    Definition trackers.h:86
    +
    #define tern_assert_usertracker(_cntstruct_, _uservarnumb_)
    Тернарный оператор для проверки существует ли указанная пользовательская переменная
    Definition trackers.h:85

    Считать пользовательскую переменную

    Note
    Здесь нет проверки - существует ли пользовательская переменная! Есть возможность выйти за границы структуры!!! Чтобы этого избежать можно использовать дефайн #ref assert_usertracker()
      if(assert_usertracker(struct, 0)) {
    @@ -433,7 +433,7 @@ Macros
       }
     
    -

    Definition at line 106 of file trackers.h.

    +

    Definition at line 105 of file trackers.h.

    @@ -455,7 +455,7 @@ Macros

    Инкрементирование счетчика успешных событий

    -

    Definition at line 111 of file trackers.h.

    +

    Definition at line 110 of file trackers.h.

    @@ -477,7 +477,7 @@ Macros

    Инкрементирование счетчика ошибок

    -

    Definition at line 113 of file trackers.h.

    +

    Definition at line 112 of file trackers.h.

    @@ -499,7 +499,7 @@ Macros

    Инкрементирование счетчика предупреждений

    -

    Definition at line 115 of file trackers.h.

    +

    Definition at line 114 of file trackers.h.

    @@ -522,11 +522,11 @@ Macros
    Value:
    if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_]++;
    -
    #define if_assert_usertracker(_cntstruct_, _uservarnumb_)
    Условие для проверки существует ли указанная пользовательская переменная
    Definition trackers.h:84
    +
    #define if_assert_usertracker(_cntstruct_, _uservarnumb_)
    Условие для проверки существует ли указанная пользовательская переменная
    Definition trackers.h:83

    Инкрементирование пользовательской переменной

    -

    Definition at line 117 of file trackers.h.

    +

    Definition at line 116 of file trackers.h.

    @@ -557,7 +557,7 @@ Macros

    Запись числа в пользовательскую переменную

    -

    Definition at line 119 of file trackers.h.

    +

    Definition at line 118 of file trackers.h.

    @@ -579,7 +579,7 @@ Macros

    Очистка всей структуры

    -

    Definition at line 122 of file trackers.h.

    +

    Definition at line 121 of file trackers.h.

    @@ -601,7 +601,7 @@ Macros

    Очистка счетчика успешных событий

    -

    Definition at line 124 of file trackers.h.

    +

    Definition at line 123 of file trackers.h.

    @@ -623,7 +623,7 @@ Macros

    Очистка счетчика ошибок

    -

    Definition at line 126 of file trackers.h.

    +

    Definition at line 125 of file trackers.h.

    @@ -645,7 +645,7 @@ Macros

    Очистка счетчика предупреждений

    -

    Definition at line 128 of file trackers.h.

    +

    Definition at line 127 of file trackers.h.

    @@ -671,7 +671,7 @@ Macros

    Очистка пользовательской переменной

    -

    Definition at line 130 of file trackers.h.

    +

    Definition at line 129 of file trackers.h.

    @@ -693,7 +693,7 @@ Macros

    Очистка всех пользовательских переменных

    -

    Definition at line 132 of file trackers.h.

    +

    Definition at line 131 of file trackers.h.

    diff --git a/Doc/html/group___t_r_a_c_k_e_r_s.map b/Doc/html/group___t_r_a_c_k_e_r_s.map index bf5f146..b9caafc 100644 --- a/Doc/html/group___t_r_a_c_k_e_r_s.map +++ b/Doc/html/group___t_r_a_c_k_e_r_s.map @@ -1,4 +1,4 @@ - - + + diff --git a/Doc/html/group___t_r_a_c_k_e_r_s.md5 b/Doc/html/group___t_r_a_c_k_e_r_s.md5 index d924fcc..ad44552 100644 --- a/Doc/html/group___t_r_a_c_k_e_r_s.md5 +++ b/Doc/html/group___t_r_a_c_k_e_r_s.md5 @@ -1 +1 @@ -a7565b03babdeb6094e59ffacae9c523 \ No newline at end of file +5e8d7e9fe8d7afc9f2f5dd4a2692dbb0 \ No newline at end of file diff --git a/Doc/html/group___t_r_a_c_k_e_r_s.png b/Doc/html/group___t_r_a_c_k_e_r_s.png index 64eb57527153829fff5deb0e1db9e71cf2f380f5..fa73363371a78335031859df0bd94753e0e4bbbc 100644 GIT binary patch delta 1099 zcmV-R1ho6!2+s&1iBL{Q4GJ0x0000DNk~Le0003F0000b2nGNE0JE(Jh*f}#dHZR`R8OF=|Li<^rtTr9E~w6?#N{s|77%0jr3 z*1tgUk|H313pOb<7GjhLkrZB;V=>vA$?UwH*)w})c7Gq(V&2Yqc9VJbIcH{fK}1AE zL_|bHWc*BV#qRFz3&xo35W%cFe{1cJ`}_O9g^r_($z-w<{rb90l8jg8P@ zh({+UC!C+3&#jLF#3CXir^F#5&XhPr#F-L@h&WT?5D{le93tYZ@^Y*Te`DtEBg0zj z+=lBhE^Sv?q|ZKMcJK`FKJWps3k?1SvbsypzHbAF<2d-O1uiknUYjII1`&G|FNp)@ zPr!kkRKU&Hh7{KVo&w$mJ_6nWp1fK=iV8A+G7S0TShnJ8G33|9TjD6P)~?D)IusGG z4eS7S$SRHhfG0u*CF^PFfA3Jnm`9Jg?ZtIX%d>TL!;-FXHO1_@pQG1+FM;2I?}1N& zXURTiw6aNKRrwyK7W_E+v=_2C{wIJ z>XzG9E5&1c$JG>bn>IRlm8`P(1b7Mfm+RrkQvYTlTXz~kSLp;(nb$-50x{mkT zB#o}^xW?mip2A04zT#Q>yO-xOelTWpI{9T+TU%Q{9UmWmO?HLk4)8KJtBod~0e?Do z>_HSoy??5=YpGp#e_Y!(XB9zyxvM@t&{)-`&$#oJo;Ze775L_9sPZ#ewQ-khe&ZI| zW!C3`ht$t&dt4lk+w5^T?KU8UR;`pvULRK?9_5A?& z0(cR41NaK~n{0USu#XPMz;y!DN4tG}?LptwM_+M!t2l}$e@6OlaRSn%j9+BmuI;o{ z*JfWsmASKQGMVfcW9|+4=94;Oy>}#zW308er_-s+T*1@8yTHf5o4_js8mjE=?OA=1 z&+57QBAtrDk#OQ}ABC>o+93tXOi9WZD6ou`a3H)4d5e`a}}f3vr@_gm~7eGCSJ?bsP4j3h};vn;z;UU#j! zlQHIoG3M_4Vu_{Oz?ZQ@^r63})ioN8_JLdFbyG!UBFnPify7Rlrm-W;Y;$vy_4W1G zF~p;jlM~L*&!^TW5weKL3R6)L5wBEKM8qo<6%p}DMMXrsQc)2RuNvP{f9}JWhwr7! z^W10iGc(3aWvXT_nD_?${z?`86+t}kz|vN^76-@e+~vptvZOk*zs z9|OMv-vS>{6ckwDf-)Hfl!r=bn*RT&+rMdBUAtY!xt_l%PusR?+jZxw+wS`NyX3az zbxx&Awb#A_kmx4FDMEM*cX!f zKpx|9e0=Qu`*!I&zhF~P`nKbm$LG9=kG6c}3DQ%kzABgX?f$zQ=Xr=Rv&r02dD+$0 z*4B>)2M2FcypwYWe|R4F6L{3JiI0GvoKNh*#>PhQPgnQtzPBA`+vcPvQC{vV#D_OmQ#~0gP)j|z_s;|ToT^CR2Udy5slt4Ltf1sG8eHM5L_#8MJZ~G_2 z373KEWUP;NLwz+x=w3^x+}?UBb%mu`Q2Gu7T#hU6+f?jaw4K{Fmyh93hwp(8DTX+& zQrx3*i{c)Ye~Hi|ou_g)zOGAe)5Wh&hPn(5X4$uIJGR=|3^n|jy5a_d!L~8x?jqk@ zbJe72N}lJpe}}`N%iP3c!0QzEt-JxeLZso(?(S}`FKJpm<1cC29}b6h-~1*^?+@Us z@#9H~cVa|>Q&G7ZevchMt`2=lSwy^2Q4tZZR8&O7D-{(H@k&KSM7+{J6O*|(J3FiW z$5XPrE-x=@*H0CdBuP$3qtX81;bHJlVlPRO)7TmMFv|0M|Kj2zb_@w1Ns@crdx?mM gh=_=Yh)9?J07-!@-wmT};{X5v07*qoM6N<$f($<-v;Y7A 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 bd87445..bcef1cb 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 @@ -97,7 +97,7 @@ $(function(){initNavTree('group___u_t_i_l_s___d_e_f_i_n_e_s.html','',''); });
    -
    Utils defines
    +
    Utils defines
    @@ -109,7 +109,7 @@ $(function(){initNavTree('group___u_t_i_l_s___d_e_f_i_n_e_s.html','',''); }); @@ -153,7 +153,7 @@ Macros

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

    -

    Definition at line 154 of file mylibs_defs.h.

    +

    Definition at line 169 of file mylibs_defs.h.

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

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

    -

    Definition at line 165 of file mylibs_defs.h.

    +

    Definition at line 180 of file mylibs_defs.h.

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

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

    -

    Definition at line 173 of file mylibs_defs.h.

    +

    Definition at line 188 of file mylibs_defs.h.

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

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

    -

    Definition at line 181 of file mylibs_defs.h.

    +

    Definition at line 196 of file mylibs_defs.h.

    diff --git a/Doc/html/group___u_t_i_l_s___d_e_f_i_n_e_s.map b/Doc/html/group___u_t_i_l_s___d_e_f_i_n_e_s.map index f130ade..f6979af 100644 --- a/Doc/html/group___u_t_i_l_s___d_e_f_i_n_e_s.map +++ b/Doc/html/group___u_t_i_l_s___d_e_f_i_n_e_s.map @@ -1,4 +1,4 @@ - + diff --git a/Doc/html/group___u_t_i_l_s___d_e_f_i_n_e_s.md5 b/Doc/html/group___u_t_i_l_s___d_e_f_i_n_e_s.md5 index ead6af3..26c4ecb 100644 --- a/Doc/html/group___u_t_i_l_s___d_e_f_i_n_e_s.md5 +++ b/Doc/html/group___u_t_i_l_s___d_e_f_i_n_e_s.md5 @@ -1 +1 @@ -e4f09128a7c7fea7dcaa8c425861feae \ No newline at end of file +2cc6db69719569eeaf3a77181ade09ce \ No newline at end of file diff --git a/Doc/html/index.html b/Doc/html/index.html index bdab5f7..be97eba 100644 --- a/Doc/html/index.html +++ b/Doc/html/index.html @@ -5,7 +5,7 @@ -MyLibs: MyLibs +MyLibs: Обзор ExtendedLibs @@ -97,101 +97,83 @@ $(function(){initNavTree('index.html','',''); });
    -
    MyLibs
    +
    Обзор ExtendedLibs
    -

    -Обзор

    -

    MyLibs - это набор библиотек для удобной работы с STM32.

    -

    -Актуальная версия -

    -

    -Основные возможности

    -

    -Общие утилиты (General Tools)

    +

    +

    ExtendedLibs - это набор библиотек для удобной работы с STM32. Данный субмодуль подключается напрямую из Git и содержит набор вспомогательных библиотек для работы МК, в частности STM32 и SEGGER RTT.

    +

    +Основные возможности

    +

    +Общие утилиты MyLibs (General Tools)

    -

    -Трассировка Trace defines

    +

    +Отладка* (Debug Tools)

    -

    -Модуль GPIO GPIO Tools

    -
      -
    • Инициализация портов и тактирования (General tools)
    • -
    • Управление светодиодами (включение/выключение, моргание, плавное затухание) (LED tools)
    • -
    • Работа с кнопками (чтение состояния, фильтрация дребезга) (Switch tools)
    • -
    -

    -Модуль таймеров TIM Tools

    -
      -
    • Базовая инициализация таймеров (General tools)
    • -
    • Формирование задержек (блокирующие и неблокирующие) (Delay tools)
    • -
    • Работа с энкодерами (чтение положения, обработка кнопок) (Encoder tools)
    • -
    • Настройка ШИМ и Output Compare (PWM/OC Channels tools)
    • -
    -

    -Модуль UART UART Tools

    -
      -
    • Базовая инициализация UART и его пинов одной функцией (UART_Base_Init)
    • -
    -

    -Модуль SPI SPI Tools

    -
      -
    • Базовая инициализация SPI и пинов одной функцией (SPI_Base_Init)
    • -
    -

    -Структура проекта

    -
    ProjectRoot/
    +

    *Модули отладки независимы от MyLibs и могут быть использованы отдельно

    +

    +Структура библиотеки

    +

    *Note: Файлы начинающиеся с __ и которых нет в этом дереве являются **внутренними/непротестированными/недокументированными***

    ProjectRoot/
    ├── MyLibs/ # Общие библиотеки, независимые от платформы (или почти)
    │ ├── inc/
    -
    │ │ ├── mylibs_include.h # Главный include файл
    -
    │ │ ├── mylibs_config.h # Конфигурация библиотек
    +
    │ │ ├── __mylibs_include.h # Главный include файл
    +
    │ │ ├── __mylibs_config.h # Конфигурация библиотек
    │ │ ├── mylibs_defs.h # Общие определения и макросы
    │ │ ├── bit_access.h # Битовый доступ к регистрам
    -
    │ │ ├── gen_optimizer.h # Оптимизатор (генетический алгоритм)
    +
    │ │ ├── gen_optimizer.h # Оптимизатор (генетический алгоритм)
    │ │ ├── trackers.h # Трекеры для отладки
    │ │ └── trace.h # Трассировка и логирование
    │ └── src/
    -
    ├──RTT # Библиотека RTT
    -
    │ ├── __SEGGER_RTT_Conf.h # Конфигурационный файл RTT
    -
    │ ├── SEGGER_RTT.c # Основной модуль RTT
    -
    │ ├── SEGGER_RTT.h # Основной заголовок RTT
    -
    │ ├── SEGGER_RTT_ASM_ARMv7M.S # Ассемблерная оптимизация для ARMv7M
    -
    │ └── SEGGER_RTT_printf.c # Реализация printf() через RTT
    -
    -
    └── STM32_General # Работа с периферией STM32
    -
    ├── inc/
    -
    │ ├── general_gpio.h # Работа с GPIO
    -
    │ ├── general_spi.h # Работа с SPI
    -
    │ ├── general_tim.h # Работа с таймерами
    -
    │ └── general_uart.h # Работа с UART
    -
    └── src/
    -
    ├── general_gpio.c # Реализация GPIO
    -
    ├── general_spi.c # Реализация SPI
    -
    ├── general_tim.c # Реализация TIM
    -
    └── general_uart.c # Реализация UART
    -

    -Использование

    -

    Инструкция по подключению:

    +
    └──RTT # Библиотека RTT
    +
    ├── __SEGGER_RTT_Conf.h # Конфигурационный файл RTT
    +
    ├── SEGGER_RTT.c # Основной модуль RTT
    +
    ├── SEGGER_RTT.h # Основной заголовок RTT
    +
    ├── SEGGER_RTT_ASM_ARMv7M.S # Ассемблерная оптимизация для ARMv7M
    +
    └── SEGGER_RTT_printf.c # Реализация printf() через RTT
    +

    +Инструкция по подключению

      -
    1. Настройте конфигурацию Configs в mylibs_config.h
    2. -
    3. Подключите главный заголовочный файл:
      #include "mylibs_include.h"
      -
      Заголочный файл для всех библиотек
      -
    4. -
    5. Используйте нужные модули в своем коде. Примеры использования приведены в соответствующей теме
    6. +
    7. Склонируйте субмодуль в ваш проект:
    -
    +
    git submodule add https://git.arktika.cyou/Razvalyaev/STM32_ExtendedLibs path/to/ExtendedLibs
    +
    git submodule update --init --recursive
    +
      +
    1. Скопируйте файлы конфигурации и главный include в отдельную папку в вашем проекте (вне субмодуля) и удалите __:
    2. +
    +
    ProjectRoot/
    +
    ├── Configs/
    +
    │ ├── mylibs_include.h
    +
    │ └── mylibs_config.h
    +
    │ └── SEGGER_RTT_Conf.h
    +
      +
    1. Настройте конфигурацию под ваш проект:
    2. +
    +
      +
    • mylibs_config.h — задайте нужные параметры библиотек.
    • +
    • mylibs_include.h — укажите пути к вашим заголовочным файлам и подключаемым модулям.
    • +
    • SEGGER_RTT_Conf.h — настройки RTT.
    • +
    +
      +
    1. Подключайте библиотеки в вашем коде через главный include файл:
    2. +
    +
    #include "mylibs_include.h"
    +
    Заголочный файл для всех библиотек
    +
      +
    1. Обновление библиотеки:
    2. +
    +

    После обновления субмодуля из Git, исходные файлы библиотеки будут обновлены, но ваши конфиги останутся в целевой папке и не перезапишутся:

    +
    git submodule update --remote
    +
    diff --git a/Doc/html/index.js b/Doc/html/index.js new file mode 100644 index 0000000..573dfcf --- /dev/null +++ b/Doc/html/index.js @@ -0,0 +1,6 @@ +var index = +[ + [ "Основные возможности", "index.html#основные-возможности", null ], + [ "Структура библиотеки", "index.html#структура-библиотеки", null ], + [ "Инструкция по подключению", "index.html#инструкция-по-подключению", null ] +]; \ No newline at end of file diff --git a/Doc/html/mainpage_8h_source.html b/Doc/html/mainpage_8h_source.html index 4945489..5ef7a1a 100644 --- a/Doc/html/mainpage_8h_source.html +++ b/Doc/html/mainpage_8h_source.html @@ -5,7 +5,7 @@ -MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/mainpage.h Source File +MyLibs: E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/mainpage.h Source File @@ -97,10 +97,10 @@ $(function(){initNavTree('mainpage_8h_source.html','',''); });
    -
    E:/.WORK/STM32/STM32_ExtendedLibs/mainpage.h
    +
    E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/mainpage.h
    -
    1/**
    +
    1/*
    2@mainpage
    3
    4
    @@ -113,7 +113,7 @@ $(function(){initNavTree('mainpage_8h_source.html','',''); });
    11
    12@subsection features Основные возможности
    13
    -
    14@subsubsection utils_module Общие утилиты (@ref MYLIBS_DEFINES)
    +
    14@subsubsection utils_module Общие утилиты (@ref MYLIBS_TOOLS)
    15- Макросы для задержек и утилит (@ref DELAYS_DEFINES и @ref UTILS_DEFINES)
    16- Трекеры для статистики и отладки (@ref TRACKERS и @ref TRACE)
    17- Эволюционный алгоритм для оптимизации параметров (@ref GEN_OPTIMIZER)
    @@ -148,52 +148,58 @@ $(function(){initNavTree('mainpage_8h_source.html','',''); });
    46ProjectRoot/
    47├── MyLibs/ # Общие библиотеки, независимые от платформы (или почти)
    48│ ├── inc/
    -
    49│ │ ├── mylibs_include.h # Главный include файл
    -
    50│ │ ├── mylibs_config.h # Конфигурация библиотек
    +
    49│ │ ├── __mylibs_include.h # Главный include файл
    +
    50│ │ ├── __mylibs_config.h # Конфигурация библиотек
    51│ │ ├── mylibs_defs.h # Общие определения и макросы
    52│ │ ├── bit_access.h # Битовый доступ к регистрам
    -
    53│ │ ├── gen_optimizer.h # Оптимизатор (генетический алгоритм)
    +
    53│ │ ├── gen_optimizer.h # Оптимизатор (генетический алгоритм)
    54│ │ ├── trackers.h # Трекеры для отладки
    55│ │ └── trace.h # Трассировка и логирование
    56│ └── src/
    57
    -
    58├──RTT # Библиотека RTT
    -
    59│ ├── __SEGGER_RTT_Conf.h # Конфигурационный файл RTT
    -
    60│ ├── SEGGER_RTT.c # Основной модуль RTT
    -
    61│ ├── SEGGER_RTT.h # Основной заголовок RTT
    -
    62│ ├── SEGGER_RTT_ASM_ARMv7M.S # Ассемблерная оптимизация для ARMv7M
    -
    63│ └── SEGGER_RTT_printf.c # Реализация printf() через RTT
    -
    64
    -
    65└── STM32_General # Работа с периферией STM32
    -
    66 ├── inc/
    -
    67 │ ├── general_gpio.h # Работа с GPIO
    -
    68 │ ├── general_spi.h # Работа с SPI
    -
    69 │ ├── general_tim.h # Работа с таймерами
    -
    70 │ └── general_uart.h # Работа с UART
    -
    71 └── src/
    -
    72 ├── general_gpio.c # Реализация GPIO
    -
    73 ├── general_spi.c # Реализация SPI
    -
    74 ├── general_tim.c # Реализация TIM
    -
    75 └── general_uart.c # Реализация UART
    -
    76@endcode
    -
    77
    -
    78
    +
    58└──RTT # Библиотека RTT
    +
    59 ├── __SEGGER_RTT_Conf.h # Конфигурационный файл RTT
    +
    60 ├── SEGGER_RTT.c # Основной модуль RTT
    +
    61 ├── SEGGER_RTT.h # Основной заголовок RTT
    +
    62 ├── SEGGER_RTT_ASM_ARMv7M.S # Ассемблерная оптимизация для ARMv7M
    +
    63 └── SEGGER_RTT_printf.c # Реализация printf() через RTT
    +
    64@endcode
    +
    65
    +
    66#### Модуль GPIO @ref MY_LIBS_GPIO
    +
    67- Инициализация портов и тактирования (@ref MYLIBS_GPIO_GENERAL)
    +
    68- Управление светодиодами (включение/выключение, моргание, плавное затухание) (@ref MYLIBS_GPIO_LEDS)
    +
    69- Работа с кнопками (чтение состояния, фильтрация дребезга) (@ref MYLIBS_GPIO_SWITCH)
    +
    70
    +
    71#### Модуль таймеров @ref MY_LIBS_TIM
    +
    72- Базовая инициализация таймеров (@ref MYLIBS_TIM_GENERAL)
    +
    73- Формирование задержек (блокирующие и неблокирующие) (@ref MYLIBS_TIM_DELAY)
    +
    74- Работа с энкодерами (чтение положения, обработка кнопок) (@ref MYLIBS_TIM_ENCODER)
    +
    75- Настройка ШИМ и Output Compare (@ref MYLIBS_TIM_OC)
    +
    76
    +
    77#### Модуль UART @ref MY_LIBS_UART
    +
    78- Базовая инициализация UART и его пинов одной функцией (@ref UART_Base_Init)
    79
    -
    80
    -
    81@subsection usage_basic Использование
    +
    80@subsubsection spi_module Модуль SPI @ref MY_LIBS_SPI
    +
    81- Базовая инициализация SPI и пинов одной функцией (@ref SPI_Base_Init)
    82
    -
    83Инструкция по подключению:
    +
    83
    84
    -
    851. Настройте конфигурацию @ref MYLIBS_CONFIG в @ref mylibs_config.h
    +
    85
    86
    -
    872. Подключите главный заголовочный файл:
    -
    88@code
    -
    89#include "mylibs_include.h"
    -
    90@endcode
    -
    91
    -
    923. Используйте нужные модули в своем коде. Примеры использования приведены в соответствующей теме
    -
    93
    -
    94*/
    +
    87@subsection usage_basic Использование
    +
    88
    +
    89Инструкция по подключению:
    +
    90
    +
    911. Настройте конфигурацию @ref MYLIBS_CONFIG в @ref mylibs_config.h
    +
    92
    +
    932. Подключите главный заголовочный файл:
    +
    94@code
    +
    95#include "mylibs_include.h"
    +
    96@endcode
    +
    97
    +
    983. Используйте нужные модули в своем коде. Примеры использования приведены в соответствующей теме
    +
    99
    +
    100*/
    diff --git a/Doc/html/menudata.js b/Doc/html/menudata.js index c4eb5d4..cc6c5bc 100644 --- a/Doc/html/menudata.js +++ b/Doc/html/menudata.js @@ -32,9 +32,7 @@ var menudata={children:[ {text:"All",url:"functions.html",children:[ {text:"c",url:"functions.html#index_c"}, {text:"d",url:"functions.html#index_d"}, -{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"}, @@ -46,9 +44,7 @@ var menudata={children:[ {text:"Variables",url:"functions_vars.html",children:[ {text:"c",url:"functions_vars.html#index_c"}, {text:"d",url:"functions_vars.html#index_d"}, -{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"}, @@ -62,33 +58,24 @@ 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_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:"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:"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:"Functions",url:"globals_func.html"}, {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:[ {text:"a",url:"globals_defs.html#index_a"}, {text:"b",url:"globals_defs.html#index_b"}, diff --git a/Doc/html/mylibs__config_8h.html b/Doc/html/mylibs__config_8h.html index 19f82bf..a6c4675 100644 --- a/Doc/html/mylibs__config_8h.html +++ b/Doc/html/mylibs__config_8h.html @@ -5,7 +5,7 @@ -MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/mylibs_config.h File Reference +MyLibs: E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/mylibs_config.h File Reference @@ -108,63 +108,38 @@ $(function(){initNavTree('mylibs__config_8h.html','',''); });
    This graph shows which files directly or indirectly include this file:
    diff --git a/Doc/html/mylibs__config_8h__dep__incl.map b/Doc/html/mylibs__config_8h__dep__incl.map index 8f1d357..1542c18 100644 --- a/Doc/html/mylibs__config_8h__dep__incl.map +++ b/Doc/html/mylibs__config_8h__dep__incl.map @@ -1,46 +1,21 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/Doc/html/mylibs__config_8h__dep__incl.md5 b/Doc/html/mylibs__config_8h__dep__incl.md5 index 8005ab1..6c166ca 100644 --- a/Doc/html/mylibs__config_8h__dep__incl.md5 +++ b/Doc/html/mylibs__config_8h__dep__incl.md5 @@ -1 +1 @@ -1c7c706656d0b5264849d45ac47d4507 \ No newline at end of file +9f6a6341f51dca56a013198eaece7a80 \ 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 a37417620d8cab258f3ae91137d8e2aa60cf306c..cda23b3114161e1c65ec2fe22e0ca7ddf8ed0597 100644 GIT binary patch literal 23867 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 G#Qy?MCJx^K literal 60111 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 RAOm{P%N=#FW`Fq4{{dm@ - - - + + + + diff --git a/Doc/html/mylibs__config_8h__incl.md5 b/Doc/html/mylibs__config_8h__incl.md5 index 64436a1..1f4d753 100644 --- a/Doc/html/mylibs__config_8h__incl.md5 +++ b/Doc/html/mylibs__config_8h__incl.md5 @@ -1 +1 @@ -3b483905491b70f9181b98bcf03c66f5 \ No newline at end of file +182ed3e6f3a3467bc43cf6c0e3bd6349 \ No newline at end of file diff --git a/Doc/html/mylibs__config_8h__incl.png b/Doc/html/mylibs__config_8h__incl.png index 725c7fbd00c4c593a06df32feac4ff4afca8da2e..ab0065007d370102dfd3ac359bb06022fb55d041 100644 GIT binary patch literal 2284 zcmb_eXHXN^8VyB=7z7n0h`_Q^L;qF(jJN3v$2E%cK;lCuZvRw0ARiq^wQ0ctl7~{KSlU) z@$d7r(8&B#4@r@5^M;$ww-BSUhm;i%R0TxJ^EBYjzMXv!JN4l4MP;>GnEs;+l=~je z#JQ9kMB)KTt=8khZc}Z%dbaJitn-ljNXXLmMM`i^^Y6wSW3M?=rZDs`;0w;Vy1Gu3 zNOPeH_lV|C?RKy$GoLRkveZcj_N!b2s%XcYCY_9D0h-#cpOcC0THrBXBP?Xv*zDWW z%fF5r5mOjC(wZQVr>*}bc7=oB*6rILdz_HSa_72w+s`#dEYgo>XikyC=ni(X3z?4Q z=vAQPS)q_wa!)AHF*rUeTBxLHYWV#%_tYaugR*Nw{4)sITP~4&6tgB_+T;(r;L-wv zRIG+}7({?+W32FJdiAtKS!Tnrc;dsD`~$flINR9-H+cF$Kmw_bj5C~g_500%gY&H& zI+O<%BsmKrFNo3%#uclxAr=FSH2>9a=>xEe&gDw)YE*d6bf~IRomDoK>C4J7H2uyj zHP-KG?bC-T0W%vZ=ufym$hf$79QnK9Ej@RD22$LYrV0b=v8btn=zPp3eI^K#F@}vW zSlk3Iy!7$)9TKhXMzo``WsgNg36TeXJhFBCi7nb2qzqpoILj2db&G#0N=n8R^ZP1$ z84QNKInn0$h{c0iDpgGL>vURLn#hUKwXTbWIv}V-+kYrzcOQGQf?kA{UFWBBf=r?? zn{fSieaog*4{}|QQZVRj(gg1=-6$uoeL&nI{cSl-uDh^2Nh7ZYsyt$E(5?5{M>(VE zN9S2`*-Z2Ly2s?%WOq;0*qF##J_q91Y@%_mplD+b6Pw(`8BgozPi0exukc(txkcA&}OstQ|a@59GsEd z##DhKdAP2E9-+|+&{IfA70&%JG*YYE)Cwj&@wC%ug6W#J;C?f?gmP)NSz{xTjUS;e zgpQU~^q?tZ-v0Pfr96R&o*~+yU%t*2-yFYpM_ho3h~z;gL>lfrYHMAq40|8a^ReFu zL|EeU&f6TxwEFA4&PhI+6F^4;sl()q!Idzt;f74iAali8DdOsS4-O_+!8MM}fr^yh zJA?6bI*FOPz4CN-`-ECgYcjv03{Dsr9a#FseQyhuCxqP=kfWzIF~fr#s^cwZD#~Se z=@5TSfMH=@F&a8Qm9e6I18vo_r%MnF1Sc3VtW|!Xe)dW-GL?qAn&A^b8% zlF7*a(AFY-T!v353>kA9eCv7mA75I0DlsuJ87F-?_$27X2X8+Ur8~6HCC>!Bn5CJK z@guo0yi)V4ol|pLwTkqdd~o6wCx%a4cvMm4(TYwlW{dxcaatOJF;5Z5>zYCS*D(HR zAOD|ft2sb?xu-YKcix|%s-|A$BOD?u>~GGk5?$F<1gKORE~t(fFBR0w6|*N?!NOsi z8CytTmW=S~s)jWX*uI^9IMt5JypB9__OfPR-jJ;XO0`mAzouHz$}S*veGu>tU`BEg z^yz@2W)pssU8kGV7QU!9f$XGb-N3@eyAAb{PB?BO+a?@OYQu0-yL)k3alxq04N?X;orpUpyLW8ISNnTX zE&Hy{2uF$r#k}=W&XR%Op{HnoETAW%NYc;607AA;qDU0KW4b|1qLnq}yB4+Ztvz68 zYfbiejC56?>EgrS*yqv7hu35Pq5(;lh$L5{ZNkENz(uaz7ds-?sa{(?T2ytjtFp0i zD_@#BJ%o#{G{(E*@r~6A^d#xRXHGUYHuKE#7hUc%!q_V>J}5vSkR{8cW2noAjOYb9R+oT5xhUa5kT zk*PkLKH1IRtG?RPfT3|A-a6fd>fH%d*LhrvI!w6YIy)ZrGpn&^k?GOETb>o7Sy#20 zAsieGzD-U}p06*y&_ABjy_YGfoc=MrR3e)XgZOycqPJD_(a!h4M)7iuVJP)Oe+%rC z8IhW2f&LF3C<+7uij7KKv~(E7ug}T=1Q?SwH&LPk1Cw@}^bh?B+{azxPbMjVRkF}t Q`vS1Kd<|M|e)r+O09!U^cmMzZ literal 2217 zcmb`Jc{~#iAIB$Wu1cgII{XwrsX22bBTdNh6J3tEmYmy?CNuk$(jmXOawNyx;C3P5?_diC?ELh6QrSxYK+4-5eBo+T&N9Osp?2-C#H^r7SK&H9 z{R(*g_W|t-ig7Q1*3TU-+60v+f4D9c@6)MkRcIvt$D=!YMTPMJzYa}YsO@IWb?-xDf5vGzLQ|A z8XC=T6y8N0xr-;t==w=+Dt#)BD)91l88yg!*&je69IRgy3!g{~J~GNS>TQF7VbIrk z;FV%X^Bfcn6dIn9>1w3B)ml#8pfax2)(WLP9Wms&jh429Mwd(@s)>os#--K!oag%a ze(25$N%MEB{JIV=cI1KTK!nVntq*i+=#5k9i~fVR89YoWJ9fSfvebyd8*eo(J~~&{ zCj5SgKXtElc8Nz8psI9JmyG9F96g`T44<%U8OA5PlNZSEa{qoU_q19fzXOSAE@eUl zfko{}`-}44DAk&+JcY}>mc4S{rwiypi~&vCKxTzGHwnTZBI5buz-T=4;7DoWZad*$ zLQ$cip=If=taYZ`KgJdoG#jZDSXkH;&*>zeb3&rq*g<%S+BS-v}w=nxuc?$f^56l{2vp)EDiOB+NYvWGmUGnQeaGnH!-@FJb; zwk3F9MkoWB`fcJFE%O7%2A8CBl-=g-_AqQALHJrQQ^LJ^(h$dB=F6@Seq&dg_L{`S zyszWlB6AI-<<1_|&6t{uwT2_L!eb|Gxkc@Zk0un4X2%vFWT2@7Ho@)+%H=@i637e) zvXD=VG4GF*Z&~JF#3r^<8Ir7qBro~pCx{%1^ZXhd>WEkwxs;Zs*!QGwwshK$m5`-* zG_#1-n|xT-JU%6i24mg1&*1K-4A)l3psO4bUh+2ir|E}%BC6O6 z74+>0j5<5agA$O9WD`E*hUX3-DzwD=u^dpK1wp)GITD3J-CMQjLw{{u!0_jIKR%Hm z>CE?eL^Z7|Sds3d_V9?VzT1ki=I0|zeBvT$)}vQ) z)9pqW)b7`LY`0=ePs_VY4$mgWVGOc3L$@1}@LsJ7MR~)c&BuJm-4x5XZtNaB3X~?vC);eLyPB3LZd-Vj7v$&f zLxc>5ViD8Pmn{yJ*s0TcWy1>Z$g6mSo>toitTO3<+kokK2%DzQ5vAkiplP;i(GBaU z7=_~FU5ELxBw^!*Os7pg==)MHk1`$Qwe?%0UhH8$AdPHR4fih22=;XrWm%7(IM98x zvm@ch)nKEoKtJJ)9Wv{JjKT}QeX|_xwPp#>Q|mQo&jZEp!%s#-EHC?!^*FJE!R^mf zaqUyZb$Z#e47-!@-L;auzH2diX9b>zPHl$o?0K8$mU3PeeO%eOQWWs*!sl~T@sNm>NP^+)7VWG(d2x?=aP{?$PCT_mvQrlUibWTs!7*y6 zt`v(CC5;l(5&-d>fREk&G*LIh7y#g->9JPD!ntbi5!q<5{(o}VY<7)y2{!>^D>bgw zd0ONC!0cPbUIz6 zv-ZXj%fHmLoO7N-BvADv5_b2}&;r!v#ZSd|)xP{Wl)nPq!{hPJSP}&3-)cNTjd-D+ z1rW?oKe=W`)EyWYXo*>`&+Jnga1>P$JvUW1eoJlyB-)lL(~c?;|i)Z)`%Vj!KgK$p?f~r zrG$#brlp1tY5}VJ3c_O-(hMO$A3IbEdna{ibbI4dN<>R#y&PJfmyUQgukpS#g*Z?? zeOnf0=i@Hm*w9_&wv)rGZ{Ej#{6sNX8wcUsT6xAuMXF9)l7 AKL7v# diff --git a/Doc/html/mylibs__config_8h_source.html b/Doc/html/mylibs__config_8h_source.html index 64d652b..00ce4e4 100644 --- a/Doc/html/mylibs__config_8h_source.html +++ b/Doc/html/mylibs__config_8h_source.html @@ -5,7 +5,7 @@ -MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/mylibs_config.h Source File +MyLibs: E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/mylibs_config.h Source File diff --git a/Doc/html/mylibs__defs_8h.html b/Doc/html/mylibs__defs_8h.html index 5709d6b..702dd58 100644 --- a/Doc/html/mylibs__defs_8h.html +++ b/Doc/html/mylibs__defs_8h.html @@ -5,7 +5,7 @@ -MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/mylibs_defs.h File Reference +MyLibs: E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/mylibs_defs.h File Reference @@ -108,63 +108,38 @@ $(function(){initNavTree('mylibs__defs_8h.html','',''); });

    This graph shows which files directly or indirectly include this file:
    diff --git a/Doc/html/mylibs__defs_8h__dep__incl.map b/Doc/html/mylibs__defs_8h__dep__incl.map index f952e29..bad0bfc 100644 --- a/Doc/html/mylibs__defs_8h__dep__incl.map +++ b/Doc/html/mylibs__defs_8h__dep__incl.map @@ -1,44 +1,19 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/Doc/html/mylibs__defs_8h__dep__incl.md5 b/Doc/html/mylibs__defs_8h__dep__incl.md5 index 27e2e55..153e76d 100644 --- a/Doc/html/mylibs__defs_8h__dep__incl.md5 +++ b/Doc/html/mylibs__defs_8h__dep__incl.md5 @@ -1 +1 @@ -9853b50743578d4b3267175adda5a3af \ No newline at end of file +92e1c89b3dbabc5f5dcd703628a3cd09 \ 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 02c276a87423f77c3f57ef8298b2dfb142ac9b56..1998e01e5e7feeda9ac910dbdce449060b34b17c 100644 GIT binary patch literal 21452 zcmafbby!s0_b(x!w9+l9boT%v-4aS8Fmw(vgtWYZN{n=aNC+Yz-7ts@4I7L_=NK01NAm6c!dX!(Dvf z8wGN)Z@>?HTP-zZtQ*Xqk8Pimu&^FtX(%fi1!Qk6galhaGj49Cpj;XQI_B`#;q&+U z_t=IbDmG&q=%b#l0Wm(yoB+h-`lCnv*a)d!dD z|9905eIk9Lto&u9+J0d8Uf14Q35uM%cy%DHGFArv{{8zi1p*sb%F2c3|Ja=Bi?)bu zNGZS9#v{FdKSAUZPW0Qil--I1Oh4{D$|i@>vf(vAH(%7d%{%};v$2UhC5K}D*ZWaL zn7eN;BM_C8^1oN%?@~DHe{P}D!wh?Sl?L!Y{&TZ>_n24}8{2~>`+-z@3%{$QDcJdZ z!e(I*UtW(IBFW>T=|`q>SjMsRWl;0Bqj{=Fj$04^T>F7EsXl@qBSa!0BO99m_4^Q% zOt23qHEYcmwrcpK&#`Uvy->z`wllX!b22mWhD|>(cPGX-m%M$e-resj3JQ+Q-IXA$ zY70J2+paR`tsmK^cEL!kse_TT^zOtS&E-Djor4go=1bPCu%lWDw8Jn&{_QA1kk)Kql8USUe^W16;Va*rm5WngW0vh2@{`ZwGF$iG9`*fe( zB0m%_&Z9+4oSWjr6GsMxFt5`$h)@E=(rrhX7H(=LZ0}d?2-1{ZJXYC^a$5j-bJxc@ z%FORSJD~(L-T;heO-hsQRwNl} z%mN#PqzYIzZy+Pd+W-DTq5D>bGU4@HGnCi7-YvhNKxwG}P)q+?%*eNwdbc4)qT7on z7qdFIm%%ox^VFE9R6#r% zoCrSP)o%&}cz{V9ernDisn=Wh8UqZlqISE+ChN_%eCG9ho2Z#)PrD?~PMbz5L@#ZB z5hOvN-uI?hK+pfuU}^+?)muL_nwzGiqkzIq=A@C`nd>mS;3g07S3)m&;Jxar&oH|Af-pgRR`>VG^7uGX zHIL=U!?wbpSKm{!-D2cDW86&5-{jFUUG8Bt4=AjZ6yq!E6AXG~vEJz^1tu5F<$EF` zQBPyO1gTS&`vQ6{JiRr!OrgaYy-x;%0p8A*B417LQcFr=-UE*wjXo>@6mV2c;%&Oc zFz1H%�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 literal 56859 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 - - - - - + + + + + + diff --git a/Doc/html/mylibs__defs_8h__incl.md5 b/Doc/html/mylibs__defs_8h__incl.md5 index 9bb77a8..35c2a13 100644 --- a/Doc/html/mylibs__defs_8h__incl.md5 +++ b/Doc/html/mylibs__defs_8h__incl.md5 @@ -1 +1 @@ -3a51314a907fe511867519c1d9e934bd \ No newline at end of file +22a4095654c32e9721a5fd17008a93fa \ No newline at end of file diff --git a/Doc/html/mylibs__defs_8h__incl.png b/Doc/html/mylibs__defs_8h__incl.png index bf20d2dfd41432fa2a009d2d13608653a8a31677..a691649295d0eb5bda54ef089652bf7ebdd2465f 100644 GIT binary patch literal 3155 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 BC9ePg literal 3085 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 B4s-wj diff --git a/Doc/html/mylibs__defs_8h_source.html b/Doc/html/mylibs__defs_8h_source.html index 570cc52..d99efaa 100644 --- a/Doc/html/mylibs__defs_8h_source.html +++ b/Doc/html/mylibs__defs_8h_source.html @@ -5,7 +5,7 @@ -MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/mylibs_defs.h Source File +MyLibs: E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/mylibs_defs.h Source File @@ -105,207 +105,222 @@ $(function(){initNavTree('mylibs__defs_8h_source.html','',''); });

    3* @file mylibs_defs.h
    4* @brief Заголочный файл для дефайнов библиотеки MyLibsGeneral.
    5**************************************************************************
    -
    6* @defgroup MYLIBS_DEFINES General Tools
    +
    6* @defgroup MYLIBS_TOOLS General Tools
    7* @ingroup MYLIBS_ALL
    8* @brief Общие макросы и typedef'ы, используемые по всему проекту
    9*
    -
    10*************************************************************************/
    -
    11#ifndef __MYLIBS_DEFINES_H_
    -
    12#define __MYLIBS_DEFINES_H_
    -
    13
    -
    14#include "mylibs_config.h"
    -
    15
    -
    16/***************************************************************************
    -
    17******************************ERROR_HANDLER********************************/
    -
    18/**
    -
    19 * @addtogroup ERROR_HANDLER_DEFINES Error Handler defines
    -
    20 * @ingroup MYLIBS_DEFINES
    -
    21 * @brief Дефайны для обработки ошибок
    -
    22 * @{
    -
    23 */
    -
    24
    -
    25/* extern Error_Handler from main.h */
    -
    26extern void Error_Handler(void);
    -
    27
    -
    28/**
    -
    29 * @brief Error_Handler который будет вызыватся в библиотеке
    -
    30 */
    -
    31#define MyLibs_Error_Handler(params) Error_Handler(params)
    -
    32/* If error handler not defined - set void */
    -
    33#ifndef MyLibs_Error_Handler
    -
    34#define MyLibs_Error_Handler(...)
    -
    35#endif // MyLibs_Error_Handler
    -
    36
    -
    37/** @brief Проверить один указатель на NULL */
    -
    38#define check_null_ptr_1(p1) (p1 == NULL)
    -
    39
    -
    40/** @brief Проверить два указателя на NULL */
    -
    41#define check_null_ptr_2(p1, p2) ((p1 == NULL) || (p1 != NULL && p2 == NULL))
    +
    10* @defgroup MYLIBS_DEBUG_TOOLS Debug Tools
    +
    11* @ingroup MYLIBS_ALL
    +
    12* @brief Утилиты для тестирования программы
    +
    13*
    +
    14* @addtogroup BENCH_TIME
    +
    15* @ingroup MYLIBS_DEBUG_TOOLS
    +
    16*
    +
    17* @addtogroup GEN_OPTIMIZER
    +
    18* @ingroup MYLIBS_DEBUG_TOOLS
    +
    19*
    +
    20* @addtogroup TRACE
    +
    21* @ingroup MYLIBS_DEBUG_TOOLS
    +
    22*
    +
    23* @addtogroup TRACKERS
    +
    24* @ingroup MYLIBS_DEBUG_TOOLS
    +
    25*************************************************************************/
    +
    26#ifndef __MYLIBS_TOOLS_H_
    +
    27#define __MYLIBS_TOOLS_H_
    +
    28
    +
    29#include "mylibs_config.h"
    +
    30
    +
    31/***************************************************************************
    +
    32******************************ERROR_HANDLER********************************/
    +
    33/**
    +
    34 * @addtogroup ERROR_HANDLER_DEFINES Error Handler defines
    +
    35 * @ingroup MYLIBS_TOOLS
    +
    36 * @brief Дефайны для обработки ошибок
    +
    37 * @{
    +
    38 */
    +
    39
    +
    40/* extern Error_Handler from main.h */
    +
    41extern void Error_Handler(void);
    42
    -
    43/** @brief Проверить три указателя на NULL */
    -
    44#define check_null_ptr_3(p1, p2, p3) ((p1 == NULL) || (p1 != NULL && ((p2 == NULL) || (p2 != NULL && p3 == NULL))))
    -
    45
    -
    46/** @brief Проверить четыре указателя на NULL */
    -
    47#define check_null_ptr_4(p1, p2, p3, p4) ((p1 == NULL) || (p1 != NULL && ((p2 == NULL) || (p2 != NULL && ((p3 == NULL) || (p3 != NULL && p4 == NULL))))))
    -
    48
    -
    49/** @brief Проверить пять указателей на NULL */
    -
    50#define check_null_ptr_5(p1, p2, p3, p4, p5) ((p1 == NULL) || (p1 != NULL && ((p2 == NULL) || (p2 != NULL && ((p3 == NULL) || (p3 != NULL && ((p4 == NULL) || (p4 != NULL && p5 == NULL))))))))
    +
    43/**
    +
    44 * @brief Error_Handler который будет вызыватся в библиотеке
    +
    45 */
    +
    46#define MyLibs_Error_Handler(params) Error_Handler(params)
    +
    47/* If error handler not defined - set void */
    +
    48#ifndef MyLibs_Error_Handler
    +
    49#define MyLibs_Error_Handler(...)
    +
    50#endif // MyLibs_Error_Handler
    51
    -
    52/** ERROR_HANDLER_DEFINES
    -
    53 * @}
    -
    54 */
    -
    55
    -
    56
    -
    57/***************************************************************************
    -
    58******************************DELAYS_DEFINES*******************************/
    -
    59/**
    -
    60 * @addtogroup DELAYS_DEFINES Delays defines
    -
    61 * @ingroup MYLIBS_DEFINES
    -
    62 * @brief Макросы и определения для работы с задержками в миллисекундах.
    -
    63 * @details
    -
    64 * Этот блок содержит макросы для реализации задержек с использованием HAL или FreeRTOS:
    -
    65 * - @ref msDelay — простая задержка заданной длительности;
    -
    66 * - @ref msDelayStart — сохранение текущего времени начала задержки;
    -
    67 * - @ref msDelayWhileActive — проверка, активна ли задержка;
    -
    68 * - @ref msDelayWaitDone — проверка, завершена ли задержка.
    -
    69 * Эти макросы удобны для реализации неблокирующих задержек.
    -
    70 * @{
    -
    71 */
    -
    72
    -
    73/**
    -
    74 * @def msDelay(_ms_)
    -
    75 * @brief Блокирующая задержка на указанное количество миллисекунд.
    -
    76 * @param _ms_ Время задержки в миллисекундах.
    -
    77 * @note Использует задержку через @ref local_time или osDelay в зависимости от @ref FREERTOS_DELAY.
    -
    78 */
    -
    79#ifdef FREERTOS_DELAY
    -
    80 #define msDelay(_ms_) osDelay(_ms_)
    -
    81#else
    -
    82 #define msDelay(_ms_) \
    -
    83 do { \
    -
    84 uint32_t _start_ = local_time(); \
    -
    85 while (local_time() - _start_ < (_ms_)) {} \
    -
    86 } while(0)
    -
    87#endif
    -
    88
    -
    89
    -
    90/**
    -
    91 * @brief Начать отсчет задержки.
    -
    92 * @param _pvar_ Указатель на переменную типа uint32_t для хранения времени старта.
    -
    93 * @details После вызова этого макроса переменная _pvar_ содержит текущее количество миллисекунд
    -
    94 * с момента запуска системы (@ref local_time).
    -
    95 *
    -
    96 * Используется для реализации неблокирующих задержек.
    -
    97 */
    -
    98#define msDelayStart(_pvar_) *(_pvar_) = local_time()
    -
    99
    -
    100/**
    -
    101 * @brief Проверяет, активна ли задержка.
    -
    102 * @param _ms_ Длительность задержки в миллисекундах.
    -
    103 * @param _pvar_ Указатель на переменную, в которой сохранено время начала (@ref msDelayStart).
    -
    104 * @retval 1 Задержка еще активна.
    -
    105 * @retval 0 Задержка завершена.
    -
    106 * @details
    -
    107 * Возвращает true, пока время задержки не истекло. Используется в проверках,
    -
    108 * когда нужно **действовать, пока задержка выполняется**. Пример:
    -
    109 * @code
    -
    110 * while(msDelayWhileActive(1000, &tick)) {
    -
    111 * // выполняем другие задачи, задержка не блокирует поток
    -
    112 * }
    -
    113 * @endcode
    -
    114 */
    -
    115#define msDelayWhileActive(_ms_, _pvar_) (local_time() - *(_pvar_) < _ms_)
    -
    116
    -
    117/**
    -
    118 * @brief Проверяет, завершилась ли задержка.
    -
    119 * @param _ms_ Длительность задержки в миллисекундах.
    -
    120 * @param _pvar_ Указатель на переменную, в которой сохранено время начала (msDelayStart).
    -
    121 * @retval 1 Задержка завершена.
    -
    122 * @retval 0 Задержка еще активна.
    -
    123 * @details
    -
    124 * Возвращает true, когда задержка уже завершена. Используется в проверках,
    -
    125 * когда нужно **выполнить действие только после окончания задержки**. Пример:
    -
    126 * @code
    -
    127 * if(msDelayWaitDone(1000, &tick)) {
    -
    128 * // выполняем действие после завершения задержки
    -
    129 * }
    -
    130 * @endcode
    -
    131 */
    -
    132#define msDelayWaitDone(_ms_, _pvar_) (local_time() - *(_pvar_) >= _ms_)
    -
    133
    -
    134/** DELAYS_DEFINES
    -
    135 * @}
    -
    136 */
    -
    137
    -
    138
    -
    139/***************************************************************************
    -
    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.
    -
    197 * @note @ref __HAL_LINKDMA.
    -
    198 */
    -
    199#define __USER_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__) \
    -
    200do{ \
    -
    201(__HANDLE__)->__PPP_DMA_FIELD__ = (__DMA_HANDLE__); \
    -
    202(__DMA_HANDLE__)->Parent = (__HANDLE__);} while(0U)
    -
    203
    -
    204
    -
    205/** @endcond */
    -
    206#endif //__MYLIBS_DEFINES_H_
    +
    52/** @brief Проверить один указатель на NULL */
    +
    53#define check_null_ptr_1(p1) (p1 == NULL)
    +
    54
    +
    55/** @brief Проверить два указателя на NULL */
    +
    56#define check_null_ptr_2(p1, p2) ((p1 == NULL) || (p1 != NULL && p2 == NULL))
    +
    57
    +
    58/** @brief Проверить три указателя на NULL */
    +
    59#define check_null_ptr_3(p1, p2, p3) ((p1 == NULL) || (p1 != NULL && ((p2 == NULL) || (p2 != NULL && p3 == NULL))))
    +
    60
    +
    61/** @brief Проверить четыре указателя на NULL */
    +
    62#define check_null_ptr_4(p1, p2, p3, p4) ((p1 == NULL) || (p1 != NULL && ((p2 == NULL) || (p2 != NULL && ((p3 == NULL) || (p3 != NULL && p4 == NULL))))))
    +
    63
    +
    64/** @brief Проверить пять указателей на NULL */
    +
    65#define check_null_ptr_5(p1, p2, p3, p4, p5) ((p1 == NULL) || (p1 != NULL && ((p2 == NULL) || (p2 != NULL && ((p3 == NULL) || (p3 != NULL && ((p4 == NULL) || (p4 != NULL && p5 == NULL))))))))
    +
    66
    +
    67/** ERROR_HANDLER_DEFINES
    +
    68 * @}
    +
    69 */
    +
    70
    +
    71
    +
    72/***************************************************************************
    +
    73******************************DELAYS_DEFINES*******************************/
    +
    74/**
    +
    75 * @addtogroup DELAYS_DEFINES Delays defines
    +
    76 * @ingroup MYLIBS_TOOLS
    +
    77 * @brief Макросы и определения для работы с задержками в миллисекундах.
    +
    78 * @details
    +
    79 * Этот блок содержит макросы для реализации задержек с использованием HAL или FreeRTOS:
    +
    80 * - @ref msDelay — простая задержка заданной длительности;
    +
    81 * - @ref msDelayStart — сохранение текущего времени начала задержки;
    +
    82 * - @ref msDelayWhileActive — проверка, активна ли задержка;
    +
    83 * - @ref msDelayWaitDone — проверка, завершена ли задержка.
    +
    84 * Эти макросы удобны для реализации неблокирующих задержек.
    +
    85 * @{
    +
    86 */
    +
    87
    +
    88/**
    +
    89 * @def msDelay(_ms_)
    +
    90 * @brief Блокирующая задержка на указанное количество миллисекунд.
    +
    91 * @param _ms_ Время задержки в миллисекундах.
    +
    92 * @note Использует задержку через @ref local_time или osDelay в зависимости от @ref FREERTOS_DELAY.
    +
    93 */
    +
    94#ifdef FREERTOS_DELAY
    +
    95 #define msDelay(_ms_) osDelay(_ms_)
    +
    96#else
    +
    97 #define msDelay(_ms_) \
    +
    98 do { \
    +
    99 uint32_t _start_ = local_time(); \
    +
    100 while (local_time() - _start_ < (_ms_)) {} \
    +
    101 } while(0)
    +
    102#endif
    +
    103
    +
    104
    +
    105/**
    +
    106 * @brief Начать отсчет задержки.
    +
    107 * @param _pvar_ Указатель на переменную типа uint32_t для хранения времени старта.
    +
    108 * @details После вызова этого макроса переменная _pvar_ содержит текущее количество миллисекунд
    +
    109 * с момента запуска системы (@ref local_time).
    +
    110 *
    +
    111 * Используется для реализации неблокирующих задержек.
    +
    112 */
    +
    113#define msDelayStart(_pvar_) *(_pvar_) = local_time()
    +
    114
    +
    115/**
    +
    116 * @brief Проверяет, активна ли задержка.
    +
    117 * @param _ms_ Длительность задержки в миллисекундах.
    +
    118 * @param _pvar_ Указатель на переменную, в которой сохранено время начала (@ref msDelayStart).
    +
    119 * @retval 1 Задержка еще активна.
    +
    120 * @retval 0 Задержка завершена.
    +
    121 * @details
    +
    122 * Возвращает true, пока время задержки не истекло. Используется в проверках,
    +
    123 * когда нужно **действовать, пока задержка выполняется**. Пример:
    +
    124 * @code
    +
    125 * while(msDelayWhileActive(1000, &tick)) {
    +
    126 * // выполняем другие задачи, задержка не блокирует поток
    +
    127 * }
    +
    128 * @endcode
    +
    129 */
    +
    130#define msDelayWhileActive(_ms_, _pvar_) (local_time() - *(_pvar_) < _ms_)
    +
    131
    +
    132/**
    +
    133 * @brief Проверяет, завершилась ли задержка.
    +
    134 * @param _ms_ Длительность задержки в миллисекундах.
    +
    135 * @param _pvar_ Указатель на переменную, в которой сохранено время начала (msDelayStart).
    +
    136 * @retval 1 Задержка завершена.
    +
    137 * @retval 0 Задержка еще активна.
    +
    138 * @details
    +
    139 * Возвращает true, когда задержка уже завершена. Используется в проверках,
    +
    140 * когда нужно **выполнить действие только после окончания задержки**. Пример:
    +
    141 * @code
    +
    142 * if(msDelayWaitDone(1000, &tick)) {
    +
    143 * // выполняем действие после завершения задержки
    +
    144 * }
    +
    145 * @endcode
    +
    146 */
    +
    147#define msDelayWaitDone(_ms_, _pvar_) (local_time() - *(_pvar_) >= _ms_)
    +
    148
    +
    149/** DELAYS_DEFINES
    +
    150 * @}
    +
    151 */
    +
    152
    +
    153
    +
    154/***************************************************************************
    +
    155*******************************UTIL_DEFINES********************************/
    +
    156/**
    +
    157 * @addtogroup UTILS_DEFINES Utils defines
    +
    158 * @ingroup MYLIBS_TOOLS
    +
    159 * @brief Общие вспомогательные макросы
    +
    160 * @{
    +
    161 */
    +
    162
    +
    163/**
    +
    164 * @brief Обнуление структуры.
    +
    165 * @param _struct_ Структура, которую нужно обнулить.
    +
    166 * @details Макрос использует memset для обнуления всей памяти структуры.
    +
    167 * Используется для быстрой и безопасной инициализации переменных структур до нуля.
    +
    168 */
    +
    169#define ClearStruct(_struct_) memset(&(_struct_), 0, sizeof(_struct_))
    +
    170
    +
    171/**
    +
    172 * @brief Деление с округлением вверх
    +
    173 * @param _val_ Делимое.
    +
    174 * @param _div_ Делитель.
    +
    175 * @return Результат деления, округленный вверх.
    +
    176 * @details Если результат деления без остатка: он возвращается как есть
    +
    177 Если с остатком - округляется вверх
    +
    178 */
    +
    179//#define Divide_Up(_val_, _div_) (((_val_)%(_div_))? (_val_)/(_div_)+1 : (_val_)/_div_) /* через тернарный оператор */
    +
    180#define Divide_Up(_val_, _div_) ((_val_ - 1) / _div_) + 1 /* через мат выражение */
    +
    181
    +
    182/**
    +
    183 * @brief Swap between Little Endian and Big Endian
    +
    184 * @param v Исходное 16-битное значение.
    +
    185 * @return Результат с поменяными местами старшим и младшим байтом.
    +
    186 * @details Переключения между двумя типами хранения слова: HI-LO байты и LO-HI байты.
    +
    187 */
    +
    188#define ByteSwap16(v) (((v&0xFF00) >> (8)) | ((v&0x00FF) << (8)))
    +
    189
    +
    190/**
    +
    191 * @brief Абсолютное значение числа
    +
    192 * @param x Число.
    +
    193 * @return Абсолютное значение числа x.
    +
    194 * @details Берет число по модулю. Хз как работает библиотечный abs в stdlib.h, мб это быстрее, но вряд ли конечно.
    +
    195 */
    +
    196#define ABS(x) ( ((x) > 0)? (x) : -(x))
    +
    197
    +
    198/** UTILS_DEFINES
    +
    199 * @}
    +
    200 */
    +
    201
    +
    202
    +
    203
    +
    204/**
    +
    205 * @cond LIBS_INTERNAL
    +
    206 */
    +
    207
    +
    208static int dummy; // переменная которой присваиваются значения, которые некуда присвоить
    +
    209
    +
    210/**
    +
    211 * @brief Аналог HAL макроса для привязки DMA к UART.
    +
    212 * @note @ref __HAL_LINKDMA.
    +
    213 */
    +
    214#define __USER_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__) \
    +
    215do{ \
    +
    216(__HANDLE__)->__PPP_DMA_FIELD__ = (__DMA_HANDLE__); \
    +
    217(__DMA_HANDLE__)->Parent = (__HANDLE__);} while(0U)
    +
    218
    +
    219
    +
    220/** @endcond */
    +
    221#endif //__MYLIBS_TOOLS_H_
    Конфигурации для библиотек MyLibs.
    diff --git a/Doc/html/mylibs__include_8h.html b/Doc/html/mylibs__include_8h.html index 726ac42..9142d71 100644 --- a/Doc/html/mylibs__include_8h.html +++ b/Doc/html/mylibs__include_8h.html @@ -5,7 +5,7 @@ -MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/mylibs_include.h File Reference +MyLibs: E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/mylibs_include.h File Reference @@ -110,48 +110,52 @@ $(function(){initNavTree('mylibs__include_8h.html','',''); }); #include "trace.h"
    #include "gen_optimizer.h"
    #include "__general_flash.h"
    -#include "general_gpio.h"
    +#include "general_gpio.h"
    Include dependency graph for mylibs_include.h:
    @@ -190,7 +194,7 @@ Macros
    -

    Definition at line 104 of file mylibs_include.h.

    +

    Definition at line 99 of file mylibs_include.h.

    @@ -219,7 +223,7 @@ Macros
    Value:
    0
    -

    Definition at line 105 of file mylibs_include.h.

    +

    Definition at line 100 of file mylibs_include.h.

    @@ -243,7 +247,7 @@ Macros
    Value:
    0
    -

    Definition at line 106 of file mylibs_include.h.

    +

    Definition at line 101 of file mylibs_include.h.

    @@ -263,7 +267,7 @@ Macros
    Value:
    0
    -

    Definition at line 107 of file mylibs_include.h.

    +

    Definition at line 102 of file mylibs_include.h.

    @@ -283,7 +287,7 @@ Macros
    Value:
    0
    -

    Definition at line 108 of file mylibs_include.h.

    +

    Definition at line 103 of file mylibs_include.h.

    @@ -303,7 +307,7 @@ Macros
    Value:
    0
    -

    Definition at line 109 of file mylibs_include.h.

    +

    Definition at line 104 of file mylibs_include.h.

    @@ -323,7 +327,7 @@ Macros
    Value:
    0
    -

    Definition at line 110 of file mylibs_include.h.

    +

    Definition at line 105 of file mylibs_include.h.

    @@ -343,7 +347,7 @@ Macros
    Value:
    0
    -

    Definition at line 111 of file mylibs_include.h.

    +

    Definition at line 106 of file mylibs_include.h.

    @@ -362,7 +366,7 @@ Macros
    -

    Definition at line 112 of file mylibs_include.h.

    +

    Definition at line 107 of file mylibs_include.h.

    diff --git a/Doc/html/mylibs__include_8h__incl.map b/Doc/html/mylibs__include_8h__incl.map index 950b7db..dbb1c14 100644 --- a/Doc/html/mylibs__include_8h__incl.map +++ b/Doc/html/mylibs__include_8h__incl.map @@ -1,37 +1,41 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Doc/html/mylibs__include_8h__incl.md5 b/Doc/html/mylibs__include_8h__incl.md5 index ed70154..332c87b 100644 --- a/Doc/html/mylibs__include_8h__incl.md5 +++ b/Doc/html/mylibs__include_8h__incl.md5 @@ -1 +1 @@ -8e966aa98e7249a56c45bc830a455c74 \ No newline at end of file +ff959ac540a497b795d9fc794e4a70fa \ No newline at end of file diff --git a/Doc/html/mylibs__include_8h__incl.png b/Doc/html/mylibs__include_8h__incl.png index 6caf9f16f062266d11436c89035efa9a1485d8e0..cc4941821629a98644319bf661d24e9f904a122b 100644 GIT binary patch literal 33678 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%0DMxq>sFs?$g1=;UmByg&~ zu4OL?d@e$@y{a+)%7gM;Pg7SZy5(*xdpk-c}H0ZvF9&a(JiC$JT{ z40YmSCnZ@*+0O2=$^DeK`^VHk)L_J?y8kkl&OZ<7v=~PQpA4Gwzw9tI` z%wLq&Vg-^Mz|e`{z^JeCoYQETB{h!pg^I6h4IaZTh@R`8xR?g_ye&dZk3D1>Vpk$QgC!X(m(a71ga$taHJ-M>lQnZvgx~I}+`Cf^Vxc1dJmgC{eM^gJ z#rrjXW1)99Xb*MFIzHM*2#G5{LY=~g_xcs*8iY3++A#~sHz(>UaRA@^h*uf zvHM>CIP{jG<*=1H;e$S!YCGwQ8V68D-37mXXKA&GR+)zUNvSZiK#teD!GKG!z!8ev%XW?6^P@wj9u<7Nh%AkJIHJ zbd(0lF?n>AvK@O~TeOUaeb^g#(H||VXZI0(uR`v0%}GZPmlS?0F+=XFiWXeUHpozZ z$nwtUAx2mCyR>xLIJ#t@t25Exx%=}U7XkpK82#+EyThsrOC{MZ&&b=c?6R*LnsL$d z1wVB~3)HAQONmuSP~2ujJ?@ElEdZVr`u$Crj*LfBkeV+i;+CYZ@K*)(UtDZmWCOUq z2~eyUkk-|er8j7YF=M~f7i$NF;XUzWL>Is5>q^smcg9e=*5z$TO9S&(M^TorCz2n=6o7gao^kAzM};;C0QcWoT%4T-~RfIs)5K} zNyy~qD}=C1F;OxW**(g^@3V=78me)`tv_)X%2hMkGqMbZ6TEN$-i9yn?5@H;i}5ho+MHKS`7dHiW#3>aJQN z`HHerd0F5V`pY+so!H;e!S0c0_J6wfejct{2kM~ei{z}A=<0-Bh*B>0LXCI3J}-Pq zY|4}A999sc^;S;UnM{ILgXN=O*W-Z{UR@y4+jw0y1~fJW`1V&#esK3$?Wv5KY6BrF_Bm5tHUp4=4 ze1KPzq>Nl=2)U+MT0QdAG!ZquLeCaGh$ZZMq;}Zt@lMDZ=jx7n{RaDGJRW%O1otv1On{wnZ!4U% zaEj2-9t@;E=#K!yf}fMpi*t385YA9hz0w30@ba0MVb~5Pq0Ut^dnZZ#;D_VZp(NO} z%bYEpKV$xl6heo39|^MLGnd$d-xl?Zs+rx#q+R`uRo6B=KvQA6*Z^$s;4gu(`6ZXX z51j&cu;@d>9&NlHLqmIdw`K7kI)S)@21aWHNZ?IuD%@7%oz*L-ET4ju^pCh&n`oJi zTDZg@J`Y|b#AvbZAl+X=t7+Dg=>fJm-aOtjc9Nd%ccd!=$tzcd$F--^_M_H5B6^Jn z8tkx}^4=3Jq7Ak%$+^QO7~3K87iTMA3F9Zs?-|dtm!oR!8MEH%n;$XE3tshLH z>FS6L*5Q;VFNdXb0%?aMpLqR&EXR|SJCBLsoMAQ_+6#w)`d|Mr&<BsxYYL4Y5peV$+yW1FzTbSqF#Ukc=*-lDC7uUu}kpVV#{u=6+4iPZ~ma zOR3$U6~L@hzef{FTsbON)u-JBxvesp@Al;DYj@2oxF znbU8N97|i@f0ks03u$fo1fMm5uX+1tHSW(A;vAO~I25?P|vakTFDHBU3=g-5dr_Ru11HeWAd1>jH z@jgHrBmhLLO-*icbXj6~9eP(T79K39SSnd$Nh$8@9*wO5T@Mf_ot3hA4}~$aZW2{C zT5R6w?;8LvAG0c#Urm~_95ZH5;-bx=*lDk`j-_0WA)=6iRQ|;G9=i-oT75<`@&(>q z1_W`0hx(%}9iWxVNg1-=J7{4q#H5We{Z0XRJ|h|{8bBX38YZ%3BM?y?e6_hQBOu4G zYs%)n)tnZf-Bt$2B(!k^3JG*U6}FWCgg=i`-S}XzuVp0PZVu7$82omVxQ$88&J0{U z!A?FPlSCXHz0Y5TvV22 z+7~XPF9O+-LBrFq#)Dj6?_(5F;c)lRd|4;tX{bbi^id4ZpL9CmS~O7v%963ZpZn~% z)0P8+ss2j79nJ3;)>#;h7Zd4niV^Y@Ds{h%TI+21!+^$ zCQqL<(4Bl@M@}Tcw=(gB-Ux^kM2J?ZTF@V{DRi5=@O!PC%#m#?dS zpa#R(sm5O@u_GQ94q)B^XNU2#hOZFluobI%<39Q=irgazNo=?%^-L?>4t%ZvDSPj!yjp5Tv&1@)w$N+!{2_=ggr~ zV_dS%N7xqy0fkPw@po|U3L6*D`d3Ca2(#lfWt@MMrJy!Yd%dGrFu;|GEBMBMeteD+ z9*<@9XWY#P>OaWZ$-d}n@un-^L(X``a^kfYT63gtM)`ZaW$Zc{XEn;0Oei!oS6nA_ zAVh_|#JPc!@&n#f3)#xc4t5==hw|Hj{@VPp-;Ns(!tb zqS@MWal&`1Ph8vAL(67$yErX^PX2Vq6LG3ajD+u}e|0WLE1P_1+zCLCWuXXsl3WbK z;(-SMW)v1N8vY&>m|37KjJT74vFx%5qTtyP5MRaGVjl+>Dm&SynW*p3;Lb!X9c2#5 zNdQ{>w&mH+%l%q5wS!808#$iK-92nttGALxPnM~7PFAcEDr7p>F1JZ@w z7RhX_4Dxr`Q(hOphl7{0J_^wG#P3jBl)iqkoC$b3K0n!YeiWf;~dEH!m|Ddmc0 zwPnRDVy;m(onZV0_I{y*9SR7QD+${3-2Rm2-8<9#4B2K-_d^S|UQmG(E-*h4Y+|<% z3+4(w=laqVZ*9ftm;szGvqTHA}QYAtnh$wNBBX*#?+vXkaL#$ok69Z)}$f4!dv z(22f`AGRUEX1H?%)j?KdiZpr5`th3JZ>E6S!!O!V;dIm+GjRCPnvGmOMy02QOk=Y3Aglm_Tg6GQ?t*bdOl5$lI)#U?5b2L&)a4vUvsdgaA1)`dgY8N?E9g*E0Ci0r3rwHdMXKgp5E2qk{uEONPKreq4h&=U zmd0vS|9g6q!Bh4UH(Gu5}S0U!Wj;y{oBVwWG>f=rzKrdfX3iUHzo57?kc!beV6v!9AVS@!IV<43p;SZpq9;zVzrZN4yzC|TM;-R{H z%6f+gWE$IBA+bS}+mE#~a*n}_da7|&<0h6CYr-Vn%Bq9)mWr!MaUuDUyb&YeH=K$p zbSZ&>>()5?KgkFo4!!~f6aKc^z30%spjz>fvzx(2jDn+NNVllCLDv=o$M%K6C5b+h z7sJ&Ck=B`sca?8J%d+XSY9C_KrFCUlHs1`pqT;t3d*#}!d@(Un>LDv#@{!`N+s~Qi83+~tDROm)0>KVU?agxKPZ#eF#hV8vu3uL$ z7pGP{Z&egkK3yaXc`zHXx6-AuAA%73ZU-cYIqZH2JexLzad;KFhDmD0X!)t(y<3J#|6<HkVrlvTXdB@%LlJ#;Z@DbTcYI7!l^_eCndV29k$Vajs z9*2QjL%VO%B6g~l``Q>i9XL4Y$JZ7--=hv;=Un9Q`)b$`U)KAm44wyo9* z1|`UzA(`uowajv21&=a<^MVm|iQOQAh4(ls%o(%>hK9qchC^2^RhJ0TIn?E(mURhG z_LVnZl~xb=4x$*q-0Yl5+RyDAFC-}6YfCBPJB25o;4tk}X&0;vVU!Oe&uMq_)oY~u zPjNWBQ7^?R$p$-GVPRW9tvd|bVraaWHB)<|5Ip5a|kahok+rOf+`%S z0Fq!#`^PdJ&s$|m1_rn=Af2-RcU!q{G4|~xCMBV_c5_(ex1Sgpk(Fc`KB4@r#2g?v z>(uO6(A-Zq;6awPr}IkH0FTx2oY(Mk=3We_?|S~jSM3?o4>6VA(~Y`<-P367 zYT_9Vmm-*}Ug+c5$i-3|L`gu4pb^%kf zJ#ioxq{IGGsnQ7k2JeDN`zM(}|2xGDEm`^ZL4l!|v7l;lz$DNKKp(KAACL-rNzW}f z(8&b)%l-N2m@(W_9(2~+R=DgdE<7o%*FSMN1$jjBr>$^I34w5Ga{FvzzBS|bt+1)B zZv0T3_v>*~+32j5NGe7O63GT6$y!Pbx>4QCK?@sAEpUn}-X9$_O zsCSt$>sKvX#bxtEU62^H{9#DdabbmU)3L-zmfq;)p0eFt#AT~3`|WS%eL#gWHovCL zH`T{F*#}PdRo{l6g0Wc!Y|-cDZ3S&u9|^UT6w{N#FKCs5`jzU-(WwAcL&Shz8YKcT z9AKIWPpA)BV|tz*Fo)P~^h+n50^8fHa!~<|&jJuc+L&H%2RgvE{`@dNEbE@uwNwNW z%ZV!$=sFH4c1ur=TYZcV~4rG?g$HqAi$74;0MDRrMyv1vw6k!~TdXdx+Z>%qmAfzkR3}+q<$n zvyJ@%Y;;@FR7xm=d2y`v+Y@2hDE5Rf4m_5dJ#(_d`TW?3g`->8Qcgv`*Z1gPu?pf- zD3OCre(>brcznxk`%Oop4GSQW@n}|8_t|Pwf^yDMQ^j2sNPAowG@pNItsO_WTr!&c zUdTN*_|=d>mm{B}qecuQMg{4oaknMn^YUe0#c>p*LTwf4 zpV;3gI(hsD5(v5#FO{jO#TXg>D*;k5?auXgL0jPsg9lsYj-3bHWu*3gnRuD33Y|L$ zb#$#BqGnO(_yi6@>a5P?Pe{%}2VZcwV>|JPUePVPJw)so!9dDXI~C|s2y=y&j4q=M@Prt4DL}@Rz@Fm zX9Iw* z8PnzEY3sxIX{o;YraOj@x;v7OOE&i6A80jY+J0b*?>ATz6BmacAcyM(5Fc9nPpft) zF?gaAb6f;cFZQOZ?RLy&Mo!9@TjKAXZVo5^!HU;~w~I?2BUPAMz4vlUICx-%rk`ql zocY8lX=Qo3`WnF!##Whsj<36)MVQ_Ye3YLseLYq_bp3l}<=%q_4@@=qpO3HqiEn#} zvG`g-w3LjD6xH2^0teO8aUKg|VPK5h`+wvWa>ip}Ldt~LNsQa!xv?O5>1!8Q`Qu`F zJ9;0n1;N9>;Dh=F&{jUIT|pI}DwO${DyC+V4nIB^j{mIri1WVTi~iWNVoD4Q3nR}0 zsl#;h{;aqb_WOpqkE8>(GTM5J>67EQRLnA&h%qoK4?Nif15eC+65|#Mt*d@js%QkB zFZr!b{vg5z16P?r7_FjP*qD{J7x|>uCgI$KivZkr(Q{2sR3+}|K&RzZ#!5yn#dV{f z)PgdHN4gCr2F8s^%`(Bv@J_$}F`7x0veViQ@SWYDX6jq<6DxsLH3}Y*Lje?EUa)Vf z$jd<@e?TxWf_<7NGkrG}T`uijv{gGFX3e+iw9VGF{mXW+#J&9eKY_P(D09Gg7@1T{ z9nRFgoGpD5!^q5hYzjK$jJdTrt_KEHG<^h&qHO&C<#jy!$@10J6|EU+JAI+uq2(nq z!)o%pPDca-qa$|>Dd+^hx(bYmi4op!o1TINl&n#;fL_iISs30j#QlB{s*V2NeDCAs zDudDK`#k0VJ$b8*&9a8GgJvCJmAZ??0jx;Qrb zx}+ie&mIPJCT`_!7r)L8wj|U_OzRG-&jgS-7#P1*9~=v2QrprTSIkB>y{L7b6gwj@ zDm!gcXMD^8OwjQ*VRUt3!|9gewEP`tZJc+eesA@2UR(?ep2+CAanYAbrZ+yAK7BCw zusNd2qumO1)vaMR?vE-@d;(_Xw=m_cW`cKi8E$iv?We)Q5`pZN-y>PUB5^md*OJom zLsm_;_Cz3Sj@qM7XJ|}x47VgIPEk*5U$4udM~6J2Cq%+)`{MHtkU$)w0w$g)k&=<= zsrp=ljRDEd%Rw_5M1?)Iz#TD?wH`1xx=fcf(dwvifXPWEh(_L_1Jl&}*pCx@uJIUs z)qlKx$6sP#VsfemHiLopJ9@-O^;9kH*smxoCgaKp%&RL%$}rEq_r3Gl*N)PDsX~NLi;sqeMx>^ysEdY%sfC7y?uv^I{Eua< zoCfd>`;~@@BHG>kS58||A{rVqnwp}#zIVpI-@QV)A|(w z=Pq>xyWyKFYmUcZe4_nB8OFN^s9S=K-Eg!0T1NVj_{h5~oEYI=YU}@xzc}7SA|3$m zpb}_5Us-8rc-n!0Qj4mhCjjiV3{5@?jXivB;(PbA`#qWMn}P5S>o zFCB~Btz)9bFV?dcQBDMud>d!g^Lyjti=-ERXTH8Bfl~FS4ebk4(-(ePgL|lktle=0 zY6<}-^XCaC{=j^0WvD=vC3?;a9LfJ%W{L7l4XXAYk{VlB1ZhOHPl^8_NmCE4n5DMXT&v!HV*VC#_LlmWw`m>*hzcajkHbxQ5?xgK+D1u;zU0)o}) zf2v*0{ZqvqnK79OSLFhQ;$Nir-~S-y+4dJs;B(0Wh`2^imZY;nI7N15V2a8lLu`~8 zz@u7>yhVD`$kmQ7bF<*7CnskiFhNELA|Vd*x*gvBgKV{R3qSSaKLrTg zoMFJ9LpUWM9o3Z6$p6^lisf?u|G$@?m#&XS_D-@9P@+?}0DjhmEB2aUn-{;o!tSMB zefV`9_`uILLhp`kP+=t{r9L@iBfY$I77l;~EYzj|+7ZqgoZ5d4D5K+_G9GU(yd7)% zYNFM6HgQsky77A(wOQ6;X)%w7Gxkd;0m(L&?AG=EfwautE_zubqENQv-xWC5I{N{J z&(_9Z=Eb=0h5a6O=XK|Yu>Eo6XCdoVDY#%us4oRQIc`DJ)Zbg*rtSSnKeJ`xOdgb% z6-|BhPL=+RMzQBWqQ$()@5testv~4m2zB?LQ0lA9vJ~^*Tep0tq(9ke;Py}5A20ty zIB)>9Z;B>rx^6kU$gZFU&!EA7KVr)!qPB_=HfEkR&Ap`U%&Qb4)%s2EnA+C}sEHv13$iK1GIjQlU`31??%*i_n+S^HYmbngRT>kcwy1CXK?qX+v!0RF;6y zx`7>Wmee@nAY#wEtKEYK@$)+3yTNVLPaV?`1?lnweY+m0sR{=d2ZxqsI2=BJG69ZY zVKkU1%(1S|hX{Z~gffWz41Z29rn+otXq6-~If`Gmn_8(MN75Bgc|J;1okJ(hAy znK-7?JH!n?0;7*>TOhbQ0zpqm2mWs%J7YnzJyoq*P70My8W$o6(*9a-XZ`k*MraK-tSORbD zUFE$u$wY(N)KZr~?S~b(Z)}X~rg3Q{e~m*bAcYMk5U11fOG|avPt@p31VqUTm7a=#sEJ#n z4h`L!6p}gw_^hN^wxDgBDWw;Yhi+M{fbbmi<+EABcE5SPc*M(Tk5s&#u;_T2(5P=5 zy8lAOn_+n+vL~cIaJr~Lf4H1G!H@FN79xXPbnCG*jL=K18tynlK*}4D$H#we1NTsS zp%t}_NY1~|$aSC76Em_B+0pg4|K~hb_xf2?jq5DX3^%4-Q|$y>ReYNZeID?OFsnK^ zsR_of+IBNHzIVfqvjH_WpW6I!=;!O?YigcXSzCV#L|Nxr;Qpfq!-?Q}5%GHZ=lDX; zlNms_1tf=fV5i^LWuzCC2&i3+H!KS+AEX~a1+jav&ACpufG+Tq*zflmgMHamQ>PYyw=)8gt(M4Xdl{s$ z4v2?|4~L&=r$o8;Z{%M8STh^oOP^wZHJa!`>|241X;P@@Ja}yIcztuGuXLTs&;0^_ z-Zbf;DMp35(v_dMg@THV80#ckj^KBm`e5OUI-?vQm4txqBY*zLkHPv4Jtk3YJIo@? zIE6$m4gZ#d^)0-yWoYcCNYL%|bEVY_x4*r@j(>zI2M^3RurbFQp{S|)#`^ksGYAAS zIlhw_qHfmP((N4*)d`cMu9CBj5yrIS2M!SO@l%}Fa;sLdsE((+j{?2GH2t#I*>I9U zB}%lH&0?O=hs>L-c<1Ci2QANgEj40=(@v#5{M4mru2WBBkR zS_28LL>=ie7fT)uUnUv_G$IPTVOR9pCFWXMu<45Da?6dSz%#9-i`3SwcJrq( z{lZ5IzU6=2A9Wjs@Z)#5CvAPv^%+LZw7Oe`?oRCf^;StM9esr8KwFaXt$nwV)dToV zzxoYymM(@7W74g2`1m(+1S46PBl|u!id#C@5<_RwS@)fiSV87!FfN|F)7_H8D8xy@ ztkN&IwW%c8gTh?RX%>1`?c#w!{1+I{F0;x5qaT|4#7Ot~Kw!c&oWqo*4oZLe5ieDk ziv>s7wRdu)0uY*S&PoG;i>ClC-lqEE;Z_JN-hC$h;dbzTFi+~_ML|DmW~{`|=&eiq z2X={`&xd3dX=_^|(|<0~{se=}Q=BvnHhHykHI>ufyMDoy^yi^02BKX*5bcb)eiw6M zrZ#sIE?M9{gPt4J*?ei;gF0>gwlKmd?O~8=&DUJmhZ|VC8=uKN@hiDhrg-NXw()6` zltH2mAy@x~OpE_3t7)r0F_1NJC3oIxrWF4RMj3?ysjQmXND#=GuI&p27`);OvEa$1 z8)LvvR?D=)Tc(D8V7E&Cd#L(L(?@#2c19b?F=^8%>IY zdu3FU@q2EmF@d>@HGQ`?1xHQ{4l&LLj60=^uM%}Rb?5&lV@L@A83QPD6H5m65FlN} zX57@$8oGVI12?^29zI>Dna})LRrv}>d8E^y%Ap4O`rEuLUK|cS2f9VS6GCsSJvyRr ze)h!)(<~LxcCyr+Pr)}6LgrBfLX+} za$UB`bT}~3IM)0YWNZR~v^fIF2WmyBPSfqiQrA4t6Q{k$but;K<^aLenJjmSNkTbjAUP^go4>Ae7)!gyxt>j) zBe8*hlN-TQR$N(^RE+oqo=qeTxL0m9Gv~Ls=v=c5DR8sTNbef!(7F~^awkw$zSYo2 z((=c&4z5pHz3&`VybH+McrwexCB@%8zIFImX6iev3y4NZKsB!Up{dx|Yi?|q9e)x0 z`dyeLLxf*x(O{oB;;B*ciG-BdPdDjs_AoF@xd;9G$#LY9N{1H>(;Cp9KNE%?z;tX4 z!GXri`nKxSS+nKO2^#j3c$n%NM4pVdC_i|A$-m?Yep$?$%-ISnDm%}Rh~=^qQAk%r&Cq#+lPOky|GpH?b!=%b{;$T-x2oaM3qI)V3dU?L z_`Sl#zx8`X*{JPxVe7inkKQ!1S3sE<4~C5@oCU0vxHD9-?jJo(rQ6Hot^f|8{qF#s zIxL!$X@#y*+DQ+sO7!es>muJ;dVwkb{)KBwiZbGEj_3@tbc5=Peg*+zT9lIF>cqRN zes#Cu*yW^%y?g*|!bcKUK&rE++wlV%;f4VW0(3DgnL?DKLuAfU|WI$ecn`L~M zoBD)U|KdjC{UdsTZtp*rdn9>%;cQQ)kH>NhJB^w5dxB{_gj!M1Kwq zC0P^EIYxH?Mk*rdC$BkzLXbdXc9!$xjzr8O=&|*I>FZGGD15BRhkPR+ zmZ<24mfiCnZ7GGDif}8+A4`0HrKcl&VI z?T~qCk8+IVwWk%{f`SqEZ*ouL>Lz{jlctF}6!&BC0isYEWocwh4$4%jree^_Co!%d zbWn*)#peaR^RyQ(G@Vl2P7u5p3DW%h8qqEY+POWI>1Hi`T-S0fZrYf>TUt8d^Ntip zIq4fXjd@^{g}xdZChM)d{6@uFV*AiWCa{;rx&i1?(jJRdnxE0=cJlLN6sXregc%v} zX!$`5U0xxq0_2n5R98I?-?--WVM>vJ;=M4$yu$1l$0*$@>>o5oOl4~_dOQM6KmDUr z^zjqp65Q;Of_RmD*w;*mk-oINL@TU<6Zt~IpgRd~NcWtDnM;d>?_Id;+E{TK34=&L zj~y}UO_*%BS4a_77Iqd!R_Vzgj`@^BjG7>j(DJqKV}Ro-%M$hyYk1k#bOG>-)!V`f&ztKjoU%|o)nPIaHwHa${arK6xA1!Q@7T)clAeHv`s+d{{AUvvNaaeD z+V?qShQDHFECUyvvz?hekU+Qlj&qo#{7U$hMd=u$MsqKn>IHu0BLP{QQ-x-6k)&BsNUK@24AdLnRu9F|p2pAryCSF8()ty`DdazBC)tL z6y8C(&!EE-)!;Y>;(jGx=x=^pc%N<@tY4M;EgA-6hMWa6s|So~)9z*QWP6+1Zt2V9 zv-W`EJd?PqQAKeNJiiT|=&_WO+fK@q0cmEGGFG_X3bXdr$}chzt`>?-?gxZEKoNueD)3uMlfpOr^{M2aZGg@ks}m_5lwKEeC*W72 zXkz}TMlOPuzrt$NmWVBIyuhjbMdk>~N}oaKGdC^@APsU0(R&*tVbgCp*zIcycQ&**@{h(r$(2ww8H+@KU`SQ^WMcVKt zW8^Q{`p`oUnYO3@HFJc@buGW|FrBe)V+ZGE(hnU=4QHS5{on|aLg&I>Q1%|`)?EQy zep)C>PaDSh^ezQ%1~KFj^o7jk6st4;yuno=#Czur%bpf+nRvi5bZ{Zo>I-jOgG%>n z8&|f#ANW5Hcfn-HyPo4-8s6GGtVYxmeZSA(1CFugyioEg<7JRaabMrfw3yDhB^c=S zL2)|EMoZLrxo@%dxd&>$E1yPpZe?t_J7`h@aMci6@_l!skjc}B{;a;?u*deDjRwz@ ztrd5;K6}-BV=e@G1nb;-s6&m_ZH2c!*2x|B^#oM>&8X%@G~y)R#I}w2A=MbmzOw@_ zCvqT%8tuN(e=gBv6z+l!(g~zw9EhjVN{(*@ZUN)r)~&8wR9O<9CJugZN7NXJPKv-6 zZd4m=lotp-DMEUmHuBqX$s&g<&k{OmlfYB+BWcG#`#6M_gmWSll8sqe+S3ZBso_W; z%x=>UU{!HfOs(>e8hsS9D1Xj7zymT^8-!wVg9u*a>2uR3IOO74F1RzSA5~+gnmVW# z44{0+Y|XXf-Iwr|woE$awg8=ap1SihZn-{k6(6l~JNqQmXmf?`0h}qGaM=c$&fc9G zEUja15P_X^`5tniQ8*l)Ox#A8DnlHJCWyiRUHN?W3@@vG^d?4)2naQ7OWQ~jDa|I+ z@LK&QhX~wM_HVNA@Pfx%lwZhGuIORrV$W~apl|xg=~Ddb6;!%ln!}Bu!*be!oDv-~ zNhTdqNT_s)HURB>ViCX)z{C$}2{CW`S{8erJ>?;vy z+%AK7`q3_N8F}L}V*ZsHUHl6N8PABv927uuB`f-fl+X$H19@s&nM0x;6MGm# zy2r@F`ng1_s*>E1@|hf?sPQ;mZ*4P}THlkm=D1iVDsr~pmx~=49=QtLr=}evMpCPe zJeIg2mQom9B>~tAnMsQfUK7+WQ$Qt-i|BARR-G1#0?r) zLx+5RbEDa8Cn zzCf`oNSUHrCRIGH*o zW=NYmQNFr6bDwsF6ib+AGAoV3XE2a!Z#!C%P^W%!+^u0QPSzxJ+fFV^Y3)k&os0Pg!pfucVbw?2kumMZ?q5NPs>C~*(C*c6V05zE~~_Hxo$z}#(w&(z+a+d8*58r3 zm8Q6MsQmsC{dR@36x_r~D|L%dot*N4aOa#}wnU)J^VI>39cj_U=3U-Bi4Hp^lP)+=A6)XrGqxsh*`<2WQRJs?~e&I(jQUYCtNzZ_M0mL z4dk0jlzOV%x2$;A#_l?aj>mowt-{Fq?{#REvF5R|i^SJ#8(?bviK0!^0^DI-30zCry3otOSK$dtqkz9C*R;1(;J7G-zEA&Y02oAh-quadslYCiwMm-t65A8|DV|ixZ#IQQsKvek-($!_O^VmL zO(KR71-lymDlQxLB?l*Dlm3gTj2#{Y-vS;(Nn)~hPOmQ&^Lr?gOk4kh2FD;u{b_st4$x_^z3_oVn%h$-Gp*k~+L0sfK_o zWjs_RBJD7J^J93HCiuP+iF%CgcP=3Y{|{Od1cOUzmyKR>&b+;9Hp}3WV5AE3IO896 z4yb)lNR}yz`qyKQoXFdKE=kQDdx(yOv<(CQsn_Ee1R!CbvR1V|2~Z)r1=yB{88KoMxVp6cQa z(c;)3&4XbQD>P}*!z$7R1cBxV4xU2o|0H>7kZMfIfFB^ZL;+?bjlfAIr-&^UE$7-*7enSLK~SIe`yN%y0w>TTapfp4|Kl&*-E-F zD=r>M3*`A%iaw6&dGdt)FcJZ^{V1m$#Mzz1FGJjj!XwoKO<3?GDYN)@!CW?#!5F-0 z;qLsdN!_7hW~qWbH)nvS;Gm5|3N-WH-CbxKuufcsT^&`lSc}{Pwvj@)wa|~Rt7x(P z`Sv~RQTjHx@y3=<%z^0YuH0DlIC+C`%e3b+PZ_@F-+lm~1mSK$6;(1W%_}UN4;tLZ zAwJ(;Dx3$}zs7)7@Fz#K!FUssp1qX|dz(aaI>WY`XE$HnmT6CJ4&%+87bwsjyg}qj%W6`VTmmUnTIodDu&ehJ~*)lU& zc9fVD!5jpY%G(O#H2vi=@eN{?%(Ym-ot*6p7#T_?!bGv@txlBGCKQrxd7lueyVyW> z+yI0vR0VpiSmL6m@E>eC&o}Ti38u7qrUBW0tRNzMjgy8Gv2*3@I;d7RIY%$15e!{fqL8uK{2c zbTh`>+UIV(iQCLpt^?0~E4UWPkZJ$WQeP1WViSG)vM1}l6vWfx5YkvyWag{V&F!MN zZ7NoL>J70LNCU!L07HyQI@_o=l)eh*H+DI?!L-okeVLISGx>xMT`%h8+jEN$&J}zO z2+%XPue_o}f2W_WXUOv~A09Z~@lpBay@Xk~JNBq(#53d9AMvqH_&^I~+zAm47k;WP ziWezb)Gi1kLUTv$U={u8`ugN=sX!x_*_dfqc}2**nn&AVwrLxiUVP<&ZiJX&%tYk3 zkbAn4jwW2aeDE>kM6Qj82pVW$oLaleZISDz5!SyYq?FX(nGifKt_denwEElyD33ZI zoIME)t8&-l4SI2`>E}qjAmNsVnK5%?Il;)Gq4>XCfc(X$xoX~|O`{6q4Fhy1R-i%* zFJiBYTZm{u8%uE?@8f7!oflF1eh_O|8r9fnTn(j>E-KXpGwIouA-z>XH?C!)Nr(TE zQ*wGqt4RF?4gv5@fJQo>~xAS$l*8>Hv6I1$>yHdql6g0Cr|2mLC9@Hl> zkhFlE=Ng{u4B`b!=ckpZC)0rB2bzsl9xOs%*un~&fJWi_NC=v%NreTYruu=M+?q^r z#07qn#MIa^{lG(qo9nJ&G-qB<;mZiFa5*fb5+Zj_C-C8Q#gw20Ftaez8!cWhu2TF) zR&W`DPfjJbl<`IPqN0!8t`0ViXM~tNA9}cz>-^Xw+T2B)e@TVADX5>$DU?6^LO{J%OAIlr&Z*<^^|lbV(ZOSoZ^JV_UZv8` z{;Qm1;E~}52zGd*XqrAkv`MT4A}&kkE*sZ>+xtI|qdNc#&~z?zmX(&1M0}Wv$D5WD zE*V!b>@Wx^Dlf|hfYHw!SygqRgVtWZl1}vzq_~^xT(Y{$b8yn;XOpNwy3wiDmIpkn zpg1G{kJoKQEdaJ-A62!Wp!W(xK7i~`S?X8G;1_ZGC*ka4pL%QD$L4ULT77+$O6eb$ zjy+`!(_TM+#|cB7#Ii{3@igu=ez7>CR2-x`k&NqsDyC(PpqJ`7$|bV8aqC%8jxIOL zf?s2&P=uFs*r)h!xTTB#f?uZZ0@sR;qD)Z_z6sIN$x<>Z`JDu-ngHkMbbN5FT=TuW|BTfCSlXr`N6})`W$F@X zzgf&n1^#fn6nQ8n^iih$Aw>i3oEa+BVcZbnj2Cu%#FYxVa@1~e(&If7_{y3ve02}T zeT<$)+b-WP(Mo?ycIfQz{{}t+5WW@jAdyt@RdiMAgQ;_@_m{@uf7v8__S`y~{=B#& ziOLi*V65a#rjq6x&yNf*k|LqYMYWoA3^5J4H=GiDc#}?^(oiB?tj8`PybP%?a4#{0 zuI2&h5Y0dPF2K3CI{_MKY(|YSHrwo%&;BGYrGoj0bboG%H_;d<`$6|F5~-XU${%1y%e=o&Gb#0LZkM)U4fhP#+FGAa_)Y zp7Mr#m?0gmo{C$=d%OkiB%1Yqh09QS{QzkT!tjtJIV_$iHv~<9@e?;Lj+!z5C?4BH z#?q&=y3>pRl;;jF>kR4P|DvE53+ZDsvwtyTFViG6J;{~4hjfPPoC22aC+SxLe<%CM z&0fl-5pEOKVU&>@NbDOmMHcN~8J$+|Cw&`uZo;F^P{msvovoA(IClK$Wtv#GZlO7| zxJ&cynwS)x<7+2dI7IWSR7g%B0kW?x&;+-#*!@Rf*+pn(1%1Xqgoh2=&=qdG^D}4` z?(2_=VlF^W>j`%l^r@C-C2=NG^0<;`WhvF4NFI14I4}r4Vw%95>`N}q2xWE*G9y(! zXCqw;TYyzRp5+B1A88@qQ;%z^D9_UXQmgclzHDH`;gEUORweH>quc36ax<5(5ml|l zuuR_q6Y+sVwuCULpEsfkKPbMgarh&W4cr=;In-zS| zl5wDMoqHRHzI`9Ky+Q`x-W-zcl@30vcDB_}64O2jLRWvp(w*&~u}Ub28dL(BwcqnU zQLrl0_5Evz+Ogl8#LfePo0{QJ(pnQ>F#9bdMjP87j~cHWXAAsBo5?x@w_{tv^5c8_ zoPiNfZGm4&j2zAR5s${=SuTz5@_2Yb1|`2+feM1nArk=9KFxbt|D4xDCfe|eG8uah zJfet|&|}!r_Waah>i}?B^(hj32DiU#$6gW`h&~<8&v^&;Lb80E6j%Xv#xL(p{lUjicCX#+~zv1Gy zzi))BSoT0WR7|5AA*+zDGHbf14_mPxKfP4BsPBIH9isx}zLJ-INENR!NK>7KDagA0 z{EqW&H&=yjXHrNUk9`C57C)0Dt_pwCx{5sa`J?U5MhEqLiC84EKKcu^ufdbUlUN~l z6lhj3TzJbtM%)VH?OOYet&la$Sl?uPL^O-owYw@#s?oEq@4&6NhkQy|*5xJsR@XS% z40olt%hSax_|~9LfOSH>Bpkvt@o!AnPXSb!kfefu%m=$17-CzlF|i+?xE|4+yf*aa zc}jReC+1(_`Jwy}4)cF@?}_KdO6f|+l1EcOTfGZ~G_y=SX|h8xCEdnpc6VOMr1npW zA{R?41kN7Np4fyHitU#2Fb^=XD(UlO@h}y%iq*!J+VOh_5JWhvM+Oc&&g1k1x?`FV z|1SW)Vj`SO5fnyj_B5*J0_a>Kj%B`X+bwfzKuE^sC6oMu$2U6aOU6AB(zazr4yFYA z?hd@{PvNHSLk~Ckz_)XaT)HL0v=g(^OBRnra&gk6IRgy1gEzZ_2pDiQY|XekX8WYaP6_S61H-UHa|BKi8Yg&=uJ%S#c4m8aUBH|&>g%2D_}A>Q(X6^DsXn(|qbkcTvVIeDL-B)K31Y&< z0P5`4o&Lb|fiwHt>x)6%YO_jJ`P^^MRfv}pV~zbPUh{~@9escQfM8ekM@^%%hUBh9 z62lqoa9j(K3ah}~?cmoEBa1@SNe5aw<3k^`3Fv5~Mm}qdGE10bx8h9CmZxGyTm%11 zHT(MytYg*9&*xkfSxs4hSD}q}w~S1!HQdwn>EBQ4GKT`R&yL0ED~a{!#UROT8x=*m z$ErFMi~{?hjX>QzI9#GgX7Dc(zDq`B=GyhN(&5a9&lTcT7n$KUp`%hzDUz6Tx34)U zTD(lZ5$RCvm5MBpE|3vv`)z8jTqOf}Ov*B-OaE7%ox`I+y?Sj0O&UH^w3_7H}3gB_f`` zEGgBsf1VbOJ5ukwGNs7mGF$g->;yi0B`LJ&J^xbX!iGaL?bG22wF|#d6?4Hd-l2=B zIuf|QAMZ45ZEY9YV9kXcJNdxi>1my)_;5%LK03Mcj4NN!FeKMvkG?Q)C{1{~c|EJ2 zTY{h*(vsq};A7v?(I@#OML26#C_w|n!Hne?jC;>AOuKCx?M>+158NwO4ED5)#%0#z z(VoIqxSYSWC;iEE^K67R5q(Xz7zeH$?hdK2$U1{F{`)=0oNl~oCf2H7Hb3$Gaa$t} znU?rNo@p=WAo;@^S%~)(lb$_jP2R@Z>7V3B=w6ylPpbTg7V+}P3H{DHeVzEqYHa;ubXBm>Pkxd zluOOtg1dhhRKhKDP+v{(fB~Hv=i)+(zh8Uk@(%~wJ*_p3RcX?MiZiWVzpoqc7w*#z zU&KW&yni($p2yONazJL&MPFS>H>) zvp$Z?rrX`GG3&n#|8cjc-ZT`rGFEK^1?U!-=)f@ubMtfJ&(qx>P63lyJD0P4Ew@fp zmGg2k1Y{7Ev#a%5$6Lma>qj<1vo`Hc8YK%OM*(-5KiVlrE>|FS7JETK@hFs7r2|9T z{Ii9T==Lmo0ctV_VOmkUp{Z=Y%eJeTYo%Foyg2_soi_~Wk%dkjCr>X5Xp_>c8 zN*WjauEZ1iPL8iEv!4f{qR*O%ZPG7F4<9kmL;0BfnLkexcxQEa&W`*SW%a5nf3&oFr_zj^ zz0(@`)-i*9na((J^s9acD=!y0X=pKjDO&YwPx@x=E{^q&E7U^ zp6B8za+$;7hlz5DP(%7^>a%r|cXGQLZGwq5|G==_7xj;4cU{sisw#+&McK2K9{)yu zH`S79m5urtzL(oRmAny-Dkh$PNCzC9*$HO98Bh4+kNTNLN*=K2e9AZX_biSEr7LNeB(gH;$-c^ zBW=_tJ!xH{mCjBc7Dns9=!X0z4I86FvNjve?DuPK{E9n}v!|b%Y_`|!{F-lPj_ZSv zm+!Qav*0_nHThn%sJ$M}Nqe8q2jP?BB7C0;=G!qUeISaZgm$t~XAL%W!PG7?NXb*ZG`5fGKudXrKj~aQ%lL36};oNzOL`t!i$ClFxxWU?6mSH)B?jBSmg=l zU-9oPaqVv#GP$h$S_ZzFQ)y0>qT?JsQ<@Xr8IFQ#8u z&!cmH$*`hL!61V(^$u+UtQEerMD8v7`K9rg7B5ufIox*h34+wSeoN!JT#&?O7zg^E zs9J<|@JT7%ZUVzuk3G#dL}7LE$)Yqi-ZcPs+_(D<@{_nFP~PI!p`!fe=1X0<=p|#m z`!vnf?N(H3_5PKYOZzT7o=5GAJNnwkj(f}twhC|?ipACD zHqPEpZjm-&B9@d@WCMd+zk}U>6dK&Z0rvLh&cXcw54vgKXUppcV?ADCK^CW)Eb%+g z^l$Ogrtwl&l85Kg&-#0VTC-zpPm3xMb)3=<3W#=Ma6aHWcK>6|l$^>(2OejStZ!FA zdpvpEiy#p8J0o*m!6!GoqY)^1QJJ!cEYH}ZnM4BP+Kp=cq%^)LXU-_ngrO@wEldQo z(GTKOSj%@mxT$nmb_Ex5Yl6fWsqtDv_YIQ(GGuvrmuRHTNrV-1zJ+r02t_X+PeM{4 z*J>gGokx);)3azHi{&m?94bEU#Am?Z+3)kyau-|CS@*dmQ`9VMTgzFJK9wE+c^kJis_S*ybL4eSdTdEH5YhI=vQotLV zT9<0 zrH`AGq^i72{gX;h4EYdITl;jDO%fS~&z>8w`7wm#z_7D`R!ynj+%ssvaAP5F^wTQ- z-v=C+lIRSb8vje2mzp%xFqbLzR(&{%ivn<5{)BZLc*dbJQKV~pXSR&9?QV^Djd(ir z%l4~f?!Hx%G@gfB4=`k-xN!Idk_~}*9pd|No;jvJl@U@gE!zPi*JiieZ+bs^VoB8i zH_@NRb1jx|CnEvbHHIC=Ao!AE+*1sD8l67{<`1?AJduL^Z!b1~0VDukfwh)SA~|an zbfiY1nmT+E9CmB~R(H5@H{wZIEQ!c@9JTQ?)M_c)15aI&OKb6o-i)5H*3&OkW7Z6| z^&@?^0DZQ;i|?L6fpv>k?ge>ykI-xArgIDe%5{3?|3pL$JCP zQ!HD8VZb=~)b<_Q3ecc;b|*f&=YKe{tmDpMkfS%&HMrZiXGdwJIL{xv#FFzN%{5P! z1;%1CA9~A-U{|F*ZJpJf$a?nc$H|NK0EUn|w}-Mk14!&?F}9u$)jNf&qgGfuqaA1S zCSLI~9hBg1dVmcSKmOsS;m^(`hKlKaj%R4R}V#Fnd>Xv-&sOm`&Iqlop5!|xy$ ztL_z~3FxwWTJ{h5^2cc+_LdL(_=WV%0UYLNzs!BJ7Jh7m6Br{RpDY1})zp3u75#78 z0!qX7e;`KkC-V1y%$c?(&vKUHBAy8hI);c!{)|UK8YdEhj=wV-$g6ag>S#OWvN!&& zKSgmBW#Yw&uutVZM*kz~d1Q*qt7A|yrc1Jxz9n+;xOs#*2p}bSgxFS8kaM8Imi~j? zF)^}1$YWrt_Lyey$#hS*Ue;iW5EwKjTk5W;1F~rHEA?LiGhA5i;@@P96wsz&TyyCv zPOg-EHvRjhC?UM)II3Q54mSf+iZsf#e?@O~4=|RBd-mG*T>UU(E_ONLD#l{N0;>*A zpSiLwoVBMYZF_>oNO$3VR33|f`nuP1=3)m5#?qrfuPe9(uw?0tD$f{-v5f&=+*t?Ixx?gFvjJ`vGVFrNI3>4a*T^ThRSP zhAD`48_L?RO*0nCx^qoQUDn+UWp{UhJ7{|oishmf@0t39%lj~SZqj8EP}tpr0$YHk zJ=;yzzjbKuyWXv;qUsyHu~IVjVavEW;XIHAcPsZPsl{zo3g>u{=G%1q$6E-Jz;Eh4 zkP^O^NVujxut_tk6IeKq8e)OD*dY2Xsyd~JTsK+nlPHNZ=M0bgk!vc`Z1~Z^*Z)Hw z=dwUo#@s`fPx75tsJf@qyQP~Z-;>i?bj;<%YNrJ8M&=Uc0wX5S~zYSXea z*EIU`xp!$1UeJrJ2k(7}_UlbLVo+zpm^Q2j$a~trBlCz7x%(L?j7zjU+wBsI7W%Y% zB&4eQ2Q;vG1ofpRJiKTkZLwHIC5(wc6KgjaL!cgW;@k`XxEi@`jl5cQEmhziePu_r zJmbST*==Ug5fXEl871BKaN?K;(X9@^^oFwHIA?08r4!PlpJU1B*gCD7smJXby@+c4 z90%9D!-(~z>plQT)@cJLe^mW1fVEtjB#(%aQXZ&z_ID=zbW*ppR__n3kI(I`R;&_H z#4+JTs}cYunVWBwBMgH<8v8v}7AUXs)m73Yp5;ptM!j?wm*CT^M@u$;+U)#_Pl~+{*eNM*N^`+5#9-n! z0|Vo5z$01m$Ph;uWy+gpmHvt8{|w-5fupk#aYxzmWy=3XvDvs3^^*jIW(xD zl>MI-nZ}&QjMVs!3O+DVu8SO7D?C(7;M9ZnCcNGDZ`D`7+f3Sg<|Ua}ELkbzO`hH~ z$_Auk0;Ee)2d7E+HB&x30V&Y1%DgNEXeIf(#%a5b?(^ry-n6ZMS|wy3c#_pAA|`0w{? zf1Nu25r!5hXt(TselEe^l3cx>|fgz~WlRrWf1lnhyOygUJ z`amC{`H@G9)2ncReV5cUkh4o+P^yTF#=mk{@g==x1_c+9FP}YB+Y-?L3Om6iFxVjS zdCxvBZw<7r>mDa=i!IY{GD((&KTq!f%7Tf-zrMKYWFe3cp?xhl7P}Xh!{=#rfE4I} z-vJaJvHd26YFTpHcf{A#Q-TQJ>Oi_E4G*2>|K$P*J_9&MG`7rEJf8c3&xEwXHMZ1O z1+=mivugUGegM)Oct6}&xm#Rl>r*j7c-;jB*nR$mQ4^e}ORngMUV=l8#m!jy;4@_Y zl>_3rw0sSWOR3rbH9tG$wAbJ@xj^X<1Wx(oE2l{1_yaPH_4_0Y;8=ZRp5oy`vK903 zZaa${UEBzhr4fm1eimm-L>wLbv=&8}y@O;oKTR~-LtVACFWRTQ9lLF9&M6UEcL(aIIdM;P+7#K6k`Yu|4d-zFJ`=t9T~Eh2Dn^aFfv+ ztNfzJ>VL@?GyM5XMY1jVhidR^Gt;l(PVEKC{SnmF%3XaKw#o`h>I3I52T?q|NxEoR z!i>eO={0aNjddal<4mz?gA?&YYSP|P%usjD@jWKX#qXPk`yoGklRYPU`F3j`s!V$H zNz$G}yQdVY-gqPlLUqr6Z0X~oFaqh>%_TkWR!dCZEp`)Ufx7S}7w=T`-n=E(rl%juWaa&3W^3?p6G?hU?kduy6mz)SmHNYJ2Ua$@02e=-1+RV& zBV!eN;LXw>PbLtL@wIV&#Io%OEILgE0ahykhUxVt9=cp#?jX%B9# zdeqEX{S^;Ymjh_Sw+}{<1Lc>?(_V6-RAGfNARzDNUWQ6yr7m` z!C_}Fao_K=4Qtk(yQ}Dy7nT-;^(~C9Z0#?tymeK4#59w|X~dG3gwQ_waaYxkCZ4|a zjSg^!^o;M8o^iFu4xq7i#4S~3Uo(|wql6|1x=Le>=lopa;?)gX7jd$Puir26raKCp z?HBlBs~V{;2xa&|Q+-~3@2OBzvEM&dWl4l!Epo9L+JrcK`#FiyifNgJ9BC2}BB?^g zEG=4V=Ib{=lX&$mf>@jxvviBjUeXWWv9&)K+0T#jykx(~NMKpV?7+K@T$Q7hdQ-Vo zYjkg5(s{mrk5yQ_-*Vh#NM5uM6@AA9w3WW#?IQ#83rp3dp>bia66}w!?X>&+0&;b9 z0`2>*+JbTndxEg>S{StY%aIwtScTP;y-JBMC6gG6ciVxpyRIc^^)__!`2{TOjQI30 z?8m;OQ?5~fv5d6FoZ|ja*FsbE{7KBZsy{*MvKoWS&eZnh^veY$r25&z;2?BH#7{Lp zaP|+eX4o>`W#j6y&QcE>FX>aN_l=c%vDtMkFgqFq!=6_NH7d@KP+&Lg>kowUFWB95 z|MK7WW5RL|t72FECa)4<{N4XgbKf1*)Yq*|6%YggrHH^!iGWfC=~a;usRA}2fYK!N z-n)Q;f+X}R(xf8@0YXVc!2kiNp%bLH5QsEs--+*?x%Zp<&3(T=?+i?4_9=Vqz1Moy zTF=_&ocaPZJ0m6l^%8hEuP`9#T+Gf>e3`IkA$vnVf60YqkLZQ&7fB@*N;g9%2!VpX z0D<6h;CQXwTf^F)dY_(+Lkf-$^AqO?TKW^^f5eJ0KAc|uSGc;n?1`s3fFr2X zMm)*6-Z$hDeL5;KkgFlA!8hR}B)ghety0SmN3<9uU0RpIW|j8k@>o)#p19a<&1^7% zc^wck5fHKu<=z&#(1DrretmTlN!9eXvc5K4dF6x zrFiq7>ha{GMBlpWk!kSXR6S7SJnvKoj$`fT$Vu8##KT{&M2V5m_(895l?YaRyVM~E z`tp3#pudxNPn2#!aBBC7!B&nlq1ZrDGC57lv;WWH_8(u|$GFq{U^`UwWW#{UY}md$ z+w9jD{(~RA*G4TS>f`;4$b|`d^HY*@I)rnhPrQ7 zx$V~*>XB7ipDeG1DqtQ&&PPBfXCI7Ni0*8W>YaX?b{Z=35S36irRQ$==6Ua}1;*-H zwca?BjM_y(l3MIfb`JWNTI2W3Rg%LpYV2zyn4x}RWn5f+p|Co-qZiMRPNe{tiCv8m z5`&JEcWqser*0I1x2yW!%*)t_`~18NtmyAK{hcj$=6F%LV(R-Wtm47g)T5;eACX_} zlMtLmcC$44Kzw1M)nX;06~Uv5;Hiwa6P{HFcnTVJWALprp=Alm{l)Gwv!up@iI0MVt}&IX-Zcv3Bi{c&Gxe1q z_5dgQqOf{M93v2~36zS_tSxq`dU_ML94uifEF1@yQ$~f%nU*3V@{dLEGEpHO3tvR~ zr4zo%wR7hdUMX?KXvCp|!b9Gr8`9C_xzZrNnZ1g7SF?JZ`eyW1uXWskH zx>=cspCmpqo?eov>tZqUY-R4 z{&fgtbSj9Rg;$(!RK{0$9sN22aE6cCs;}feXDfpctb$^XqKaC)-spkEFKaSvc2ewlS!#}s&hZuR*sbtsgpVz^oodOYcr#lO^Lz+5-3eT zmeU{ccwtnJh`klwO+1Vbv?*viX^RGhXAc*8epShinprfwRii#-sj(}JKeb1=i_ugg zL1|)Q#CUqkx;8oS>(U03Uxygcj0Gr}9Qn%~!Lk4tQTPGVtd4Zb5YhgXWyNGT$kZAj zA6Al`&0ImHMb+0YwSMl&Hy^L*hUZWyDa3O+LhSHLq)gJK&Qv>hkUB_iL{tP`!DGRf z=cJvpdj(m26Hl!U1X?bW2PJ{A<*xNIS)ToaY@rf8Ey|H8ri7y=8Mtl%YDq=cLUH;Z zNwHE==0;zTLWS?(v&dyi-S8u@YekN?uWCKv5gkr}U!M7Zgtj~lxP2;~`Gf2O9Ju9D zqk_&8dtPzEHyAIXG3!C|wZ6EqQoz%liP3E7`ClAkp2~A~r`d;D+$E}~j&q=^uaDRM z6WiwpY76Kfg0O=qBURbCcPR6Zp3w)uGXNS%{W5ED4bRsGmPiZDBd4o!qjj#7xwrES z;<}Vv>~Uus3q+5* zt6aC9d-GuSeHkCLPTjFm>nV@jNq%(~KXWevmmTD3F-yptSnbuVUB;nF^p=;1NE8Dq z_aXO+VEC`GX3`0%?dJui<#?So)j2pgujMH2rmqXpLev(xH^yqX`;jmO{(-IaQgj$r|N#U_He+;V6U_1Mft);L`Z zNf1x(**#k=*N>a?Di>o6V`{)>RL66Wp7r!F6tot9h` z*$?y#S=_R!si9v69XkRn@_P{xy&o=`eB0t@o(96G8Xyfqwf^q;194l8x4(k1RXUI*fgsEn2ZrmnD$5^d&3Q<-zhA5FP0 z{rbr?(~vLM=Vp>Y8bqZYOQJLM_5!NMWX3pED$5){0|8Myl>r8PDk1eF+~i!4jY+wa zQw&DyR}jg)ttHz+?;_}|JSEJDgRuiX404;!KH9vsb1M?}(2=)EVvYn_c3YY6wttoJ z{Yr6hmW7|Su$9(gq8{wnLwZZb%`EJ3LX$mu5{NB*$H0D4K7#j{@gg9~)#>BmN1hwUod#t?S?yu$QW5|TifK2tj`}5a9n%2UhiUZ0ySSh z&E3+LWT)aaamBnxYCJ$Da(@weB8;I`f~h?-101lE^uY@CK8bLssPiM(C})2|L@(69 zXV=>5Dy}<|qrjv+o9yGAJ+Lv>h-J~~hl3hGqf85#n zZtSs2r(qQjCWN)6YAF#T>>l*_$3v{*C;&@uUnNQs9(W5Dg(FzR6T@6OL!BPcjW#BC z>u*etd}q0&E$>bD+uLXR32Vi=YU2Ud2mWT;g zgA~J){&Kmo_5s#kYtl70)W8vHg8Ziyl<(iOT6}q5a_gxM0PJB}#NO>5YOU2@n9XMS zVP^npdiX?%0@iAL(=NAr(A#+{@5(2P%(SJH!7g8xYLy!;imMfk$1v(i3lAb03wk+6 zt6xuMHJ#bVmaZA$&P?b}i-_{7V;k&qX4D$vX~Z|-)PnwjG>zUhX(`y39!i_A;NW~z z&Tvc#O{B4(JH9JuK38kYOD?6#KQE4|8e4IwVb=5~@B&&o-0DV)n}$_zpe&N>z*9B) zdY*&xkF~Y~Yn5sqAj|r$p8rR>{bpRS;|bV<J>W7|r#xE`CILm3`T1POJQfL>b0Zj9Kgy`sdHdJz~t` z3vMk?8}VliZ?~uo?LG#v-s-@eYSy_H^Ky0TvRhtB+(6zZrl4n5TslvoyDZB`0s(69 z;{-$bplYeD92dU1ivF6`q77+asI#Zy{WexC>#XV6By~Bay9vu zm0^je9^gm?G}~I!1p^>;H}@rcNKxS@I|C5i{K1f|Viy*oGID*yZP)$uVQN#&9`I5z z5xm5DYvYHe)md1VHgV;r6`q#NVz>yGuAUReBpTx@^+Nl3O~q$hF&G~nazvm3#M4C( zC4Wa5ogAjCRLT^=GWc3ykMSmncz#)ALQ_oXX}+=uUPJu}kP6dAvTQzEI>EN(w*}Jf zNTmN_d2kN=6EU~Y_=Vvp%!X2Rn}~6|QIRvTp=LSqCQz+sp?y|cy77gE+c7~8(F(O8 ze0JvMr#XG~x#3IPjt-|G7vn!Z%G$}Ui=0Nqe(DJ-S zqRLe(hq~kN?I%4mfOovt)H7_T%N>!Ke>k*>SUq4YSj0@=m!2xZsi z6?p#qntD9i^mCVGF^jq{Kk#kAk0fkMnjzA>^@dd*@#aTG(|zXLvAFiwO@O_aLO5|& zcS~*kBM<8iX-$MaW9H%&b6*fLOgMvvq~ri5C*}??BOzMa0gg06loCarhTt~~iukNc z2U;GSv(WFa{gBb6);BQT8lH)4Q>=C~UqSD@2Af*uQ%h)H_X z2(wo3Y`jCre2lq$V!p#7Or)jgZt?8cIoQ{74b$@pk8`39wW(#eoUB;zVqr@#I2(_ES|ZpFy3lR@v-hj5kTS?q z2cg(RAnT&mjiA#x^+J3Y?$Mt)R;Et57|flbP}iAf`tH3q`^JL<=(U4=&zkY3=k}$Z z73~Igq3yx|`6Oh;)(-W17O%OR+lGwzv0%fK+Qq$DRhsgcWqDwc&Fz|hh`QmfUf9My zk-o;RM#8|+Jc1WR1o@;7#gZ5V+^=F7KobARbF2s+-hR0Hn9ic1O)hk>SMg8mP6fTH z{7A@Uif2uOkRMX(X#{khY_r_n>>iAE~`A1MRYAgr$6b_677|c1>vLBJKf)t9 zX6Y<7Jnx{T0iEsi#SJl&ll0%jOsbX}b1Q538!4^}zBh8%foN#%uZw)pLgD}XD`Pon z%$r*6T4UscC)MQufA>er*Bs!tAAL=c|t8 zeWEd5og$JqLpe;=i%-8eOjwQrK*>`r7q8xl`ez5L9u}9-{K_qoHvz&bxha!M&ek)e zUl@l|+5o1y$##6^m=}%w#B~0)UHp&$GDN;2Wj^VsrL+1A;{h}JAbu$!(S4?C?>Pa<#&4ydtW3`;_p~F`gWh;Oli2 z9j}wXBA?p*El`P}iigqUyVR3PbJjDJtdI&a)1;CI(ev86kOC*MerlkgrTvFtbW?ac z*Pgk`$Z7Y+;esgf`mJf_TvO4VPOS@h(`v~=S}<&5H%=`%jMbgZ^qw(D&UvzL-+?F6 zu=P$@`O_t;TTzl5g0O*CQs}WazBHGL*97I0==&tn#viz2(JH{^&lzkzIeK&!veF;p z!+aMga6bLreURr1?2$FyYCpyUM11*ly{Ifes@_gk@Yb+$cJ>n^VKUNe`!&$~_LAy5 zZk6dZt?U4s_FY{1PprIXq)naF-0Eja?T3yz&78NMm%X>RTwr0|-)dq*Qqte~9feY1 z@Pi*$7&*E$$5Q!S!t-@cK^iwgI2WSYgRd+y%U35rJM_iFEgc{#wm81~IJT9UDA7H2 z9Gmc-DZd}PZrVvp@Il;#XG;vxR1)3YD?z(Vy|-m82<7B-QCiGpy4j~aCnLW02y2o2 zkw+)4$y!x6>?9S@V&_sIH&Kt&1*yT6tJGE1%UB z-=wC=0ot7+_WOO53ceS4r*ODROuzQ;%#?AOkka}2wuP2< zkf6=_;H~0v#Fo7C_dQ`^LIu;3dMiY_K&p1`HtKE1PqvmdQKq1FBb7ggvTjkel0ggq5;{;x%#>G_g z3A2um%0yUk10kJ@vd!wmj4mY!*BrTQAF+IYC;Qctb1fxIw9G8uWJZ8yjqX*|_8MXsh3bkCfize2+BD5_Zs0EH@y!^sjLo z5s(seSKZY`{1hanLiVTiSq!7^<$I$j=|sD|4mKwdJh>n-rjhs37AI6?1&0757)_;} zI)^CeWuVy-R%b~W7!_<@E=5k5dYI8v10is`$S#pp`_Sy4hFNLFf!D9xCNmSqKf_Bd z;~f_l94TX|VzoV=o}-i8tGjqr(_UUD0_1oN$Wt=w*Su^C(|xhnaQ zXNCFT2q32i)RMQRfdXo-sf6ChwI#Ptp_}$tnQ^SjRpp8AL+3F=GwwHoa_KH)aXo_- zKEACChJG?^1Nm0)byH_p`;y+++6iyW(jN??BpoirkaB`o4KvLP&B`V&{BAF|f`P=I z#t4Bgq@mrUeU1jkep=b=-#vlhJDI9<{m)J7u4kI-z(A!bOop&4Yr_)Dl%OM1{)BTf zQJScRS3K0Nukk@eY;q~7?(-#vZ;zk|k4|of;{e_GR1mlo;<4e2q?E|;f#ZsR|B_<1e(te(-MZ@&1o z8YgHz6Bp9&+p5*>drfiSy+$!abzE`R*{PvtZQMbnUe1$e$i+`w#_ywV3+}sjuoHH{ zp)MmY%V79*e~3tf!Yo%V(1(vZMXAkI&mY&O0@o`O%|h2J5vpt7Dsy*1U~=(nFj8*x zBO5ESzUpn51(IN!SYoC+um?@+|6=D*hSU3ko!D1MJLxYTHIRCUa@=dU($s%Qc(1{{ znqDKnXDJAsPKS=$_Un(X$qlR*mzNF=2UR%Xa$JMpn>K>G-jP~YCj&!^IeYp)?<<4X z=vnXDs~)S=OwNDa;;BEuG(fi61k3ztUEZqn^*Zj$O`n#OwGO>?+s+V0>Fv?AWJHwk z9yv#A0I5H;-RgBGPHoSB5wpfgLBT{Me3n0{!p9o{i` zzcY{Pt(EM+{OVh^(ob^9BUMlORfQA-GMp;w#yj;yzra6aq!U{8cY{^BigF1#Il;h; z7iuDAD1a_;n69RWUB2R7FZ21WI^ZBI`T#%l$=%p39Xfid^su1H+u+iVrCQ6@>O6hy zyRps}GN%gzHaKOz^`-4G+1xoWZ0V)!^qze!)_0?w-P`!-Cxnt-9pdvCm#TS}&9pM# zWTz*J9w^%BAvg4kraRIlmLmAg>}m-j^M?1xk*|jHcCZrFGS_2 z8t0w=X=ZV^N@;Sw_PzeTc93A$@Hzy+dX(*)qcyDbY$a>8p;ID@uzk;T>vs0qwsYdp z3;DMCE88T+agRL0$8UOk68Evn4blNsxm}DA(|aH=Yyu_zXz;5|54=#*?)a(^cBcP6 zhemv2X7#fU`f{J*b>kb3r({V?%`RIo=|E)-zbHkWB@TXlflvW#?5`aHKd?1xfAUYE zB47_ddnq$B*EL7W=J^Dr#-&WB2}lfd%A<>SQ#>MQt2GUPKLnCV=5CXPxNH!A{NZxR zc+363*ScbY5U{>P!p)ymEEAyeTu(p!P>ts99j2-=qt|1Ng7^Oe1xg znmoGmwJ%2r>Do9KQ%ul+6*d4>$amBoO`oTIbYO)|q+Fr@abN(T{ZHfm-+x%+36k-B zp}}W+6T&m5Kxo=KkS+yzKS(*m@_}!aIX6o~ttuFHM-CVX^t~~sn=mbZ-bxb$a{K~8 zi&;e}RDRNhfn;I;?J2#h)!ZZ;Ij}m)$i=(5^zrd9u=ZEFh#>HVomKYvHc!uIl6K*@ z>^xV=_-*z$9R!Bb1BNSOgmUOM%Jz;1QK=4n1!mJY3Q(KUh&X{@)-i?E^XMP2B4;Q> z6VRiFfNvO92N=dEN=|A4c4d_ZJ6mUeU}H0D%^>jL6gP0$KqLv=+$GWX;i<5DsL})A zc3uwtu)=d9stMPuCl3~roXIJ9F&cXG<*ea zmrXv(a31Z@3A-Wf)#-gye< zQTkFM*;GU3%0CVh$dYZ4kAcslX;Ey};1_9sZ6(tbV9@{$AZ(DJNEY6w9!UXSvyEOb zS)>~OSCb~NG+!E953z0p+C4`;en^gtRe(i0Uwy#b(J^KD)yFI*P0ul=XW9jjlqYWkE<-k3C4FA zvt(Uf`1?1Gk^6+wYEQ!dFU$S+8XRvt+>5+3zE6VOSGL%4UbocQdIBr-^#Uv>-qOAS z`HDOK_4JzM>#e)6!st#w&i^o&!ARpteV1TADzjgx#lzE;`Px-+N(Rn z&^y?k6nX3?1GI= zB5?k%=YW=Qr|Xk}Y?ynaL8!Dq-!JT^-W{lV^ke2;{67}~HBS&Tgx%@0g^=tgUEIoW zG6f>mo3dSQv!haAn0-HhNOv<_YhI5t?EwkCeb#NAZ>H3idVBs2UHK2Y41pp10ERI9 ze4|VVZ0rT}UTX6$kGgF9C__id%=7AHBUs^*B;d23R-V5=x}DwIl?eiytpK8sXUqpU zLe^PczyyE=GNl772WS{UQwo6Ur|WT+J-mKX0|co%jDH`;)O`;swF6F_fZEzF{8Az` z&VNX_U>MuBqD~Qd{Ej&!>LRO}livmMtvDJZ=BDH&vw0@TDw3(R6+mwNPwf8p8UUP6 zj=;#5{Ws+QUwHNXzle7mD9UL81m}0Bva_mkNIGU0*g4_jbPJf)cRxo6RG?B5TcSM7 zOX{X(gs0E;m}XfRZm+RmJ)R^>OZo$a0hU6Pf$P^;|KN0Rl|svrQhy72&XdN^Q96y)OSHrHY1**D+Q28y}nF1LU+!X^PqJj{d%xa7OuEXRfxntYT% zUUo7P-}NOu^F+M)fs{TBo;(k%rxySig@R-5FOKD5>r~z9Y!<-2NHwS*1Q2GAJUS3} z@D*XYWSu@IKNX14dTb`kCa?}fs#+vC}U`*h_mijH}Zp0q0-=kU*z@Vw@h^ zhl}yFx3G$7uy1;8c&Jo9WFJu+pAUp)llv2ReyLwI`sV;Om5zriHT0XfvmNr@v;yrllqqm|GWZ$rP(*d)dzpoxlT7fv0GXW z3JRKp#9evm@1OqKe-~gOWE+qifL}uchzTr)DIIbXJg9tUr1gPsJs_(Jpl5ejxZeYc z8}|PLkXRzo9SL9}xGW1$i5|^wh=?Z$B(sd=?%8AV{r}saG5q9=GIGyFKK2t1_+lCb NSkvHs)jjLT{{t#zOnd+U diff --git a/Doc/html/mylibs__include_8h_source.html b/Doc/html/mylibs__include_8h_source.html index 5696b67..694c01e 100644 --- a/Doc/html/mylibs__include_8h_source.html +++ b/Doc/html/mylibs__include_8h_source.html @@ -5,7 +5,7 @@ -MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/mylibs_include.h Source File +MyLibs: E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/mylibs_include.h Source File @@ -116,140 +116,131 @@ $(function(){initNavTree('mylibs__include_8h_source.html','',''); });
    14- Сконфигурировать mylibs_config.h:
    15 - Подключить заголовочный файл HAL библиотеки конкретного МК (напр. stm32f4xx_hal.h)
    16 - Подключить другие заголовочные файлы которые общие для всего проекта и должны быть видны
    -
    17 -
    -
    18- Подключить mylibs_include.h туда, где необходим доступ к библиотекам.
    -
    19
    -
    20* @defgroup MYLIBS_PERIPHERAL Peripheral
    -
    21* @ingroup MYLIBS_ALL
    -
    22* @brief Модули для управления периферией
    -
    23*
    -
    24*************************************************************************/
    -
    25#ifndef __MYLIBS_INCLUDE_H_
    -
    26#define __MYLIBS_INCLUDE_H_
    -
    27
    -
    28#include "mylibs_defs.h"
    -
    29
    -
    30
    -
    31#ifdef ARM_MATH_CM4
    -
    32 #include "arm_math.h"
    -
    33#else
    -
    34 #include "math.h"
    +
    17 - Подключить mylibs_include.h туда, где необходим доступ к библиотекам.
    +
    18
    +
    19*************************************************************************/
    +
    20#ifndef __MYLIBS_INCLUDE_H_
    +
    21#define __MYLIBS_INCLUDE_H_
    +
    22
    +
    23#include "mylibs_defs.h"
    +
    24
    +
    25
    +
    26#ifdef ARM_MATH_CM4
    +
    27 #include "arm_math.h"
    +
    28#else
    +
    29 #include "math.h"
    +
    30#endif
    +
    31
    +
    32
    +
    33#ifdef INCLUDE_BIT_ACCESS_LIB
    +
    34#include "bit_access.h"
    35#endif
    36
    -
    37
    -
    38#ifdef INCLUDE_BIT_ACCESS_LIB
    -
    39#include "bit_access.h"
    -
    40#endif
    -
    41
    -
    42#ifdef INCLUDE_TRACKERS_LIB
    -
    43#include "trackers.h"
    -
    44#else
    -
    45 #define TrackerTypeDef(num_user_vars) void *
    -
    46 #define num_of_usercnts(_user_) 0
    -
    47 #define assert_tracecnt(_cntstruct_, _uservarnumb_) 0
    -
    48 #define if_assert_usertracker(_cntstruct_, _uservarnumb_) if(0)
    -
    49 #define tern_assert_usertracker(_cntstruct_, _uservarnumb_) 0
    -
    50 #define TrackerGet_Ok(_cntstruct_) dummy
    -
    51 #define TrackerGet_Err(_cntstruct_) dummy
    -
    52 #define TrackerGet_Warn(_cntstruct_) dummy
    -
    53 #define TrackerGet_User(_cntstruct_, _uservarnumb_) dummy
    -
    54 #define TrackerCnt_Ok(_cntstruct_)
    -
    55 #define TrackerCnt_Err(_cntstruct_)
    -
    56 #define TrackerCnt_Warn(_cntstruct_)
    -
    57 #define TrackerCnt_User(_cntstruct_, _uservarnumb_)
    -
    58 #define TrackerWrite_User(_cntstruct_, _uservarnumb_, _val_)
    -
    59 #define TrackerClear_All(_cntstruct_)
    -
    60 #define TrackerClear_Ok(_cntstruct_)
    -
    61 #define TrackerClear_Err(_cntstruct_)
    -
    62 #define TrackerClear_Warn(_cntstruct_)
    -
    63 #define TrackerClear_User(_cntstruct_)
    -
    64 #define TrackerClear_UserAll(_cntstruct_)
    -
    65#endif
    -
    66
    -
    67#ifdef INCLUDE_TRACE_LIB
    -
    68#include "trace.h"
    -
    69#else
    -
    70#define my_printf(...)
    -
    71#define log_printf(TAG, fmt, ...)
    -
    72#define TRACE_GPIO_SET(_gpio_,_pin_)
    -
    73#define TRACE_GPIO_RESET(_gpio_,_pin_)
    -
    74#define RTT_FlashPrepare(...)
    -
    75#define RTT_EraseFlash(...) 0
    -
    76#define RTT_SaveToFlash(...) 0
    -
    77#define RTT_ReadFromFlash(...) 0
    -
    78#define HF_CheckRecovered(...) 0
    -
    79#define HF_HandleFault(...)
    -
    80#endif
    -
    81
    -
    82#ifdef INCLUDE_GEN_OPTIMIZER
    -
    83#include "gen_optimizer.h"
    -
    84#else
    -
    85typedef struct {
    -
    86 uint16_t n_params;
    -
    87 uint16_t n_cand;
    -
    88 uint16_t n_best;
    -
    89 uint16_t iq_mutation;
    -
    90 int32_t loss[0];
    -
    91 int32_t candidates[0][0];
    - -
    93#define GenOptimizer_Init(opt, n_params, n_cand, n_best, iq_mutation, start_params)
    -
    94#define GenOptimizer_Step(opt, params, LossFunc)
    -
    95#define PARAM_SCALE_Q16(x, min_val, max_val) (x)
    -
    96#define PARAM_UNSCALE_Q16(q16_val, min_val, max_val) (q16_val)
    -
    97#endif
    -
    98
    -
    99
    -
    100
    -
    101#ifdef INCLUDE_BENCH_TEST
    -
    102#include "bench_time.h"
    -
    103#else //BENCH_TIME_ENABLE
    -
    104#define BenchTime_Init()
    -
    105#define BenchTime_Start(channel, ticks, tick_period) 0
    -
    106#define BenchTime_End(channel, ticks) 0
    -
    107#define BenchTime_GetMin(channel) 0
    -
    108#define BenchTime_GetMax(channel) 0
    -
    109#define BenchTime_GetAverage(channel) 0
    -
    110#define BenchTime_GetCount(channel) 0
    -
    111#define BenchTime_GetLast(channel) 0
    -
    112#define BenchTime_ResetStats(channel)
    -
    113#endif //BENCH_TIME_ENABLE
    -
    114
    -
    115#ifdef INCLUDE_GENERAL_PERIPH_LIBS
    -
    116
    -
    117#include "__general_flash.h"
    -
    118#include "general_gpio.h"
    -
    119#ifdef HAL_SPI_MODULE_ENABLED
    -
    120#include "general_spi.h"
    -
    121#endif
    -
    122#ifdef HAL_UART_MODULE_ENABLED
    -
    123#include "general_uart.h"
    -
    124#endif
    -
    125#ifdef HAL_TIM_MODULE_ENABLED
    -
    126#include "general_tim.h"
    -
    127#endif
    -
    128
    -
    129#endif //INCLUDE_GENERAL_PERIPH_LIBS
    -
    130
    +
    37#ifdef INCLUDE_TRACKERS_LIB
    +
    38#include "trackers.h"
    +
    39#else
    +
    40 #define TrackerTypeDef(num_user_vars) void *
    +
    41 #define num_of_usercnts(_user_) 0
    +
    42 #define assert_tracecnt(_cntstruct_, _uservarnumb_) 0
    +
    43 #define if_assert_usertracker(_cntstruct_, _uservarnumb_) if(0)
    +
    44 #define tern_assert_usertracker(_cntstruct_, _uservarnumb_) 0
    +
    45 #define TrackerGet_Ok(_cntstruct_) dummy
    +
    46 #define TrackerGet_Err(_cntstruct_) dummy
    +
    47 #define TrackerGet_Warn(_cntstruct_) dummy
    +
    48 #define TrackerGet_User(_cntstruct_, _uservarnumb_) dummy
    +
    49 #define TrackerCnt_Ok(_cntstruct_)
    +
    50 #define TrackerCnt_Err(_cntstruct_)
    +
    51 #define TrackerCnt_Warn(_cntstruct_)
    +
    52 #define TrackerCnt_User(_cntstruct_, _uservarnumb_)
    +
    53 #define TrackerWrite_User(_cntstruct_, _uservarnumb_, _val_)
    +
    54 #define TrackerClear_All(_cntstruct_)
    +
    55 #define TrackerClear_Ok(_cntstruct_)
    +
    56 #define TrackerClear_Err(_cntstruct_)
    +
    57 #define TrackerClear_Warn(_cntstruct_)
    +
    58 #define TrackerClear_User(_cntstruct_)
    +
    59 #define TrackerClear_UserAll(_cntstruct_)
    +
    60#endif
    +
    61
    +
    62#ifdef INCLUDE_TRACE_LIB
    +
    63#include "trace.h"
    +
    64#else
    +
    65#define my_printf(...)
    +
    66#define log_printf(TAG, fmt, ...)
    +
    67#define TRACE_GPIO_SET(_gpio_,_pin_)
    +
    68#define TRACE_GPIO_RESET(_gpio_,_pin_)
    +
    69#define RTT_FlashPrepare(...)
    +
    70#define RTT_EraseFlash(...) 0
    +
    71#define RTT_SaveToFlash(...) 0
    +
    72#define RTT_ReadFromFlash(...) 0
    +
    73#define HF_CheckRecovered(...) 0
    +
    74#define HF_HandleFault(...)
    +
    75#endif
    +
    76
    +
    77#ifdef INCLUDE_GEN_OPTIMIZER
    +
    78#include "gen_optimizer.h"
    +
    79#else
    +
    80typedef struct {
    +
    81 uint16_t n_params;
    +
    82 uint16_t n_cand;
    +
    83 uint16_t n_best;
    +
    84 uint16_t iq_mutation;
    +
    85 int32_t loss[0];
    +
    86 int32_t candidates[0][0];
    + +
    88#define GenOptimizer_Init(opt, n_params, n_cand, n_best, iq_mutation, start_params)
    +
    89#define GenOptimizer_Step(opt, params, LossFunc)
    +
    90#define PARAM_SCALE_Q16(x, min_val, max_val) (x)
    +
    91#define PARAM_UNSCALE_Q16(q16_val, min_val, max_val) (q16_val)
    +
    92#endif
    +
    93
    +
    94
    +
    95
    +
    96#ifdef INCLUDE_BENCH_TEST
    +
    97#include "bench_time.h"
    +
    98#else //BENCH_TIME_ENABLE
    +
    99#define BenchTime_Init()
    +
    100#define BenchTime_Start(channel, ticks, tick_period) 0
    +
    101#define BenchTime_End(channel, ticks) 0
    +
    102#define BenchTime_GetMin(channel) 0
    +
    103#define BenchTime_GetMax(channel) 0
    +
    104#define BenchTime_GetAverage(channel) 0
    +
    105#define BenchTime_GetCount(channel) 0
    +
    106#define BenchTime_GetLast(channel) 0
    +
    107#define BenchTime_ResetStats(channel)
    +
    108#endif //BENCH_TIME_ENABLE
    +
    109
    +
    110#ifdef INCLUDE_GENERAL_PERIPH_LIBS
    +
    111
    +
    112#include "__general_flash.h"
    +
    113#include "general_gpio.h"
    +
    114#ifdef HAL_SPI_MODULE_ENABLED
    +
    115#include "general_spi.h"
    +
    116#endif
    +
    117#ifdef HAL_UART_MODULE_ENABLED
    +
    118#include "general_uart.h"
    +
    119#endif
    +
    120#ifdef HAL_TIM_MODULE_ENABLED
    +
    121#include "general_tim.h"
    +
    122#endif
    +
    123
    +
    124#endif //INCLUDE_GENERAL_PERIPH_LIBS
    +
    125
    +
    126
    +
    127
    +
    128
    +
    129/////////////////////////---USER SETTINGS---/////////////////////////
    +
    130// user includes
    131
    -
    132
    -
    133
    -
    134/////////////////////////---USER SETTINGS---/////////////////////////
    -
    135// user includes
    -
    136
    -
    137// user settings
    -
    138/////////////////////////---USER SETTINGS---/////////////////////////
    -
    139
    -
    140
    -
    141#endif // __MYLIBS_INCLUDE_H_
    +
    132// user settings
    +
    133/////////////////////////---USER SETTINGS---/////////////////////////
    +
    134
    +
    135
    +
    136#endif // __MYLIBS_INCLUDE_H_
    Заголовочный файл для измерения времени между событиями
    Заголочный файл для дефайнов битового доступа.
    Заголовочный файл для адаптивного подбора параметров
    -
    Заголовочный файл для модуля инициализации портов и работы с ними.
    -
    Заголовочный файл для модуля инициализации SPI.
    -
    Заголовочный файл для модуля инициализации таймеров и работы с ними.
    -
    Заголовочный файл для модуля инициализации UART.
    Заголочный файл для дефайнов библиотеки MyLibsGeneral.
    -
    Структура эволюционного оптимизатора
    +
    Структура эволюционного оптимизатора
    Заголочный файл для работы с трассировкой.
    Заголочный файл для работы с трекерами Trackers defines.
    diff --git a/Doc/html/navtreedata.js b/Doc/html/navtreedata.js index bde56f6..c8b5d88 100644 --- a/Doc/html/navtreedata.js +++ b/Doc/html/navtreedata.js @@ -25,18 +25,7 @@ var NAVTREE = [ [ "MyLibs", "index.html", [ - [ "Обзор", "index.html#overview", [ - [ "Основные возможности", "index.html#features", [ - [ "Общие утилиты (General Tools)", "index.html#utils_module", null ], - [ "Трассировка Trace defines", "index.html#trace_module", null ], - [ "Модуль GPIO GPIO Tools", "index.html#gpio_module", null ], - [ "Модуль таймеров TIM Tools", "index.html#tim_module", null ], - [ "Модуль UART UART Tools", "index.html#uart_module", null ], - [ "Модуль SPI SPI Tools", "index.html#spi_module", null ] - ] ], - [ "Структура проекта", "index.html#structure", null ], - [ "Использование", "index.html#usage_basic", null ] - ] ], + [ "Обзор ExtendedLibs", "index.html", "index" ], [ "Topics", "topics.html", "topics" ], [ "Classes", "annotated.html", [ [ "Class List", "annotated.html", "annotated_dup" ], @@ -49,11 +38,9 @@ var NAVTREE = [ "Files", "files.html", [ [ "File List", "files.html", "files_dup" ], [ "File Members", "globals.html", [ - [ "All", "globals.html", "globals_dup" ], + [ "All", "globals.html", null ], [ "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,8 +49,7 @@ var NAVTREE = var NAVTREEINDEX = [ -"____general__flash_8c_source.html", -"group___u_a_r_t___i_n_i_t.html" +"_s_e_g_g_e_r___r_t_t_8c_source.html" ]; var SYNCONMSG = 'click to disable panel synchronization'; diff --git a/Doc/html/navtreeindex0.js b/Doc/html/navtreeindex0.js index 18c9dc7..a3450d8 100644 --- a/Doc/html/navtreeindex0.js +++ b/Doc/html/navtreeindex0.js @@ -1,16 +1,17 @@ var NAVTREEINDEX0 = { -"____general__flash_8c_source.html":[3,0,1,1,0], -"____general__flash_8h_source.html":[3,0,1,0,0], +"_s_e_g_g_e_r___r_t_t_8c_source.html":[3,0,1,0], +"_s_e_g_g_e_r___r_t_t_8h_source.html":[3,0,1,1], +"_s_e_g_g_e_r___r_t_t___conf_8h_source.html":[3,0,1,2], +"_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source.html":[3,0,1,4], +"_s_e_g_g_e_r___r_t_t__printf_8c_source.html":[3,0,1,3], "annotated.html":[2,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_7de012165f681bf20d3995ae88f6551e.html":[3,0,1], "dir_8eb68c124db7670c3cb56141b10519ea.html":[3,0,0,0], "dir_d4b2573a0c19afb61452cc3d00967af1.html":[3,0,0], "files.html":[3,0], @@ -18,97 +19,52 @@ var NAVTREEINDEX0 = "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], -"general__gpio_8h_source.html":[3,0,1,0,1], -"general__spi_8c.html":[3,0,1,1,2], -"general__spi_8c.html#ae80d21e5cab86571709a2619442733b5":[3,0,1,1,2,1], -"general__spi_8c_source.html":[3,0,1,1,2], -"general__spi_8h.html":[3,0,1,0,2], -"general__spi_8h_source.html":[3,0,1,0,2], -"general__tim_8c.html":[3,0,1,1,3], -"general__tim_8c_source.html":[3,0,1,1,3], -"general__tim_8h.html":[3,0,1,0,3], -"general__tim_8h_source.html":[3,0,1,0,3], -"general__uart_8c.html":[3,0,1,1,4], -"general__uart_8c.html#a3abae05bbde5f3b402bf18ca13dc6a0b":[3,0,1,1,4,1], -"general__uart_8c.html#ad82d0cbd19151675135fd75dad315d05":[3,0,1,1,4,2], -"general__uart_8c_source.html":[3,0,1,1,4], -"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.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_defs.html":[3,1,3], "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_e_n_c_h___t_i_m_e.html":[1,0,2,0], +"group___b_e_n_c_h___t_i_m_e.html#ga07e27d7b169c9fa1abd57281bb4e374e":[1,0,2,0,7], +"group___b_e_n_c_h___t_i_m_e.html#ga24e2450d5ea921074ec5d7a1e4d56ba8":[1,0,2,0,8], +"group___b_e_n_c_h___t_i_m_e.html#ga273d45255fe4403fc25648d60cca7705":[1,0,2,0,6], +"group___b_e_n_c_h___t_i_m_e.html#ga31a6b2b181b92bcb15f46758f5d57f35":[1,0,2,0,11], +"group___b_e_n_c_h___t_i_m_e.html#ga47a69851a2089140eac00cde18a12439":[1,0,2,0,5], +"group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d":[1,0,2,0,12], +"group___b_e_n_c_h___t_i_m_e.html#gabb7a665a9603ea2e4dbc4432e8cb6054":[1,0,2,0,3], +"group___b_e_n_c_h___t_i_m_e.html#gabd1301ca79a30c782970f89fd147df3a":[1,0,2,0,9], +"group___b_e_n_c_h___t_i_m_e.html#gac65338df38129964ce3e9d9cb2fcb349":[1,0,2,0,4], +"group___b_e_n_c_h___t_i_m_e.html#gacf3a738d6423d71b238058a63558a4ed":[1,0,2,0,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,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___d_e_l_a_y_s___d_e_f_i_n_e_s.html":[1,0,1,2], +"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga0b97e172659a59ee4fa56f851643ae85":[1,0,1,2,2], +"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga8a5051b1292d1019fe8dd3fc5521ab25":[1,0,1,2,1], +"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gabeb97579daeb622c6651ed03c4a27479":[1,0,1,2,0], +"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gaed082c07b9fc4d1894330d885b9b5518":[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":[1,0,1,1], +"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,1,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,1,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,1,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,1,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,1,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,1,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], -"group___g_p_i_o___i_n_i_t.html#ga80700bb63bd56ebabbb4728aa433fd29":[1,0,2,0,0,0,3], -"group___g_p_i_o___i_n_i_t.html#ga9c853b02c22f26023c34d1d404b6d653":[1,0,2,0,0,0,0], -"group___g_p_i_o___i_n_i_t.html#gacd8900c9ec0efde1da3253b718574067":[1,0,2,0,0,0,5], -"group___g_p_i_o___i_n_i_t.html#gaf2e697ac60e05813d45ea2c9c9e79c25":[1,0,2,0,0,0,2], +"group___g_e_n___o_p_t_i_m_i_z_e_r.html":[1,0,2,1], +"group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga2db1df46b4082ad9280ef4344fdf4e8a":[1,0,2,1,6], +"group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga38607e23d9234524bc7de5869b15b8eb":[1,0,2,1,5], +"group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga3db7bdf57549722427e1e72dcaa87068":[1,0,2,1,3], +"group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga48dca8f0a0c9b96d02236ef76ac827fd":[1,0,2,1,4], +"group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga83abbcabaff9111c03ae2475ee72ea3e":[1,0,2,1,1], +"group___g_e_n___o_p_t_i_m_i_z_e_r.html#gaa1d5510fe5f0bd989473f3ebe324bde3":[1,0,2,1,2], +"group___g_e_n___o_p_t_i_m_i_z_e_r.html#gaa9a4c4f43f7beb926c85bd4817ebd628":[1,0,2,1,7], "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], @@ -117,87 +73,11 @@ var NAVTREEINDEX0 = "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#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], -"group___m_y___l_i_b_s___s_p_i.html":[1,0,2,1], -"group___m_y___l_i_b_s___s_p_i.html#ga0e177e3c57a8fcdc73b5602e72ec66ba":[1,0,2,1,2], -"group___m_y___l_i_b_s___s_p_i.html#ga333dd251bc878931086d48aa932b1a5f":[1,0,2,1,3], -"group___m_y___l_i_b_s___s_p_i.html#gab9f13318daf02bc5b5f302ae392dccac":[1,0,2,1,4], -"group___m_y___l_i_b_s___s_p_i.html#gac279cc3eaa35541edfe330a1844a85e4":[1,0,2,1,5], -"group___m_y___l_i_b_s___t_i_m.html":[1,0,2,2], -"group___m_y___l_i_b_s___u_a_r_t.html":[1,0,2,3], -"group___m_y___l_i_b_s___u_a_r_t.html#ga2a22e46ecb9e04b2ce197a0e9c09044a":[1,0,2,3,3], -"group___m_y___l_i_b_s___u_a_r_t.html#ga93ed6ceef4e3b5e7885786125cce93bc":[1,0,2,3,5], -"group___m_y___l_i_b_s___u_a_r_t.html#gab9313fd2f9fc6873ca6bfbc5b96edbbb":[1,0,2,3,4], -"group___m_y___l_i_b_s___u_a_r_t.html#gab9f07396b778505c934143e89953e154":[1,0,2,3,2], "group___m_y_l_i_b_s___a_l_l.html":[1,0], "group___m_y_l_i_b_s___c_o_n_f_i_g.html":[1,0,0], -"group___m_y_l_i_b_s___d_e_f_i_n_e_s.html":[1,0,1], -"group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html":[1,0,2,0,0], -"group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6":[1,0,2,0,0,1], -"group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html":[1,0,2,0,2], -"group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c":[1,0,2,0,2,3], -"group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a":[1,0,2,0,2,7], -"group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1":[1,0,2,0,2,1], -"group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357":[1,0,2,0,2,4], -"group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084":[1,0,2,0,2,2], -"group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2":[1,0,2,0,2,8], -"group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2":[1,0,2,0,2,5], -"group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9":[1,0,2,0,2,6], -"group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb":[1,0,2,0,2,1,2], -"group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae":[1,0,2,0,2,1,0], -"group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b":[1,0,2,0,2,1,3], -"group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea":[1,0,2,0,2,1,1], -"group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html":[1,0,2,0,1], -"group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#ga960b24335b2026abcad126ab8c422d70":[1,0,2,0,1,2], -"group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7":[1,0,2,0,1,1], -"group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html":[1,0,2], -"group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html":[1,0,2,2,1], -"group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html#ga108637af414bff3373059273b815ce9b":[1,0,2,2,1,2], -"group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html#ga4c0dfde4e15f677600605348b4e97834":[1,0,2,2,1,0], -"group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html#ga88c552a133cb6e3015453cccab74c07e":[1,0,2,2,1,1], -"group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html":[1,0,2,2,3], -"group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html#ga117b795017e9e3a357ddefe323412761":[1,0,2,2,3,3], -"group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html#ga8d16c3b7e7c6decc54c5c3d1a8bf0fbc":[1,0,2,2,3,1], -"group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r.html#gac3bc6525f88c275e47eb864e6d567501":[1,0,2,2,3,2], -"group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html":[1,0,2,2,0], -"group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ga7044214f24a9868ba7e1650b55e639ec":[1,0,2,2,0,4], -"group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ga879e3f1c919c02990736730275367115":[1,0,2,2,0,6], -"group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#gaa0a51c870325217ac099881f09dd0800":[1,0,2,2,0,3], -"group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#gaad47337be7ba2f6c0777c40d7278c931":[1,0,2,2,0,5], -"group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#gaeb611874216a4661fb83366b99b9e787":[1,0,2,2,0,2], -"group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a060b01e890891fd17c8f95b55a94139f":[1,0,2,2,0,3,2], -"group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a096ef0ab67788487f69d8877c6d89b30":[1,0,2,2,0,3,3], -"group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a18527a2d781eb4365aecd9a3184fc1da":[1,0,2,2,0,3,6], -"group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a63df3123d0ddc592b189ed1594456ea2":[1,0,2,2,0,3,1], -"group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a6a66c5ed1d966c9e30f0219b664d2b25":[1,0,2,2,0,3,4], -"group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800a7421a08abd119e71aa99eea5ab5d6daa":[1,0,2,2,0,3,5], -"group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaa0a51c870325217ac099881f09dd0800ae838122c0e83bc57ad31b546bf2f00e5":[1,0,2,2,0,3,0], -"group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaeb611874216a4661fb83366b99b9e787a89ecf1ef6d45ead2efcb7dd30396114c":[1,0,2,2,0,2,1], -"group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l.html#ggaeb611874216a4661fb83366b99b9e787ab0869828a4dfd62eaa44868ca27835f8":[1,0,2,2,0,2,0], -"group___m_y_l_i_b_s___t_i_m___o_c.html":[1,0,2,2,2], -"group___m_y_l_i_b_s___t_i_m___o_c.html#gadb2f465d89f609e035867e980c3a29c6":[1,0,2,2,2,0], -"group___m_y_l_i_b_s___t_i_m___o_c.html#gae2608ca8023e9a0713af0b4fbfbc1889":[1,0,2,2,2,1], -"group___s_p_i___i_n_i_t.html":[1,0,2,1,0], -"group___s_p_i___i_n_i_t.html#ga2fe0c8aeb2c61679f32836fef479eedf":[1,0,2,1,0,1], -"group___s_p_i___i_n_i_t.html#ga53687cddb8e39e76a79b8ffaa152fb2b":[1,0,2,1,0,2], -"group___s_p_i___i_n_i_t.html#ga5fdd6e5934a8005ef05b80f6d95883dc":[1,0,2,1,0,3], -"group___s_p_i___i_n_i_t.html#ga8ad4712bf4add56892d057778e826e0c":[1,0,2,1,0,0], -"group___t_i_m___i_n_i_t.html":[1,0,2,2,0,0], -"group___t_i_m___i_n_i_t.html#ga1493b39c9214501180b81b4c892f9be0":[1,0,2,2,0,0,3], -"group___t_i_m___i_n_i_t.html#ga176c97f06ebcf14e06e5c5bdbfac44c2":[1,0,2,2,0,0,10], -"group___t_i_m___i_n_i_t.html#ga252f4fba93fc265110e83760e0590af3":[1,0,2,2,0,0,4], -"group___t_i_m___i_n_i_t.html#ga28ba33d7c6bf22821dafa5bcee4854be":[1,0,2,2,0,0,7], -"group___t_i_m___i_n_i_t.html#ga4e2b0e6cdf9eed74581b575c3fd9516b":[1,0,2,2,0,0,11], -"group___t_i_m___i_n_i_t.html#ga54a98c21365e0bc45b81555d2b101f2b":[1,0,2,2,0,0,0], -"group___t_i_m___i_n_i_t.html#ga5b5685a43273b6e37242a4aba3ee0617":[1,0,2,2,0,0,2], -"group___t_i_m___i_n_i_t.html#ga72535a44955b43cbcd56e25039ab32eb":[1,0,2,2,0,0,1], -"group___t_i_m___i_n_i_t.html#ga7cdc54cc8cbbb6e9f60001f1e3e6ec67":[1,0,2,2,0,0,6], -"group___t_i_m___i_n_i_t.html#ga8fe31b98160627d19038222910be3f46":[1,0,2,2,0,0,5], -"group___t_i_m___i_n_i_t.html#ga98c0691052d1da2c4053dd3586ff7ce9":[1,0,2,2,0,0,9], -"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,6], +"group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.html":[1,0,2], +"group___m_y_l_i_b_s___t_o_o_l_s.html":[1,0,1], +"group___t_r_a_c_e.html":[1,0,2,2], "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], @@ -215,39 +95,108 @@ 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,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] +"group___t_r_a_c_e___g_p_i_o.html":[1,0,2,2,1], +"group___t_r_a_c_e___g_p_i_o.html#ga02a6a7b273766121db8ad4a1371373eb":[1,0,2,2,1,1], +"group___t_r_a_c_e___g_p_i_o.html#ga69741d88c991112e99fe7a62e025108a":[1,0,2,2,1,0], +"group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html":[1,0,2,2,3], +"group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#ga03f8b6f3b537ee1c8e91065c60db504f":[1,0,2,2,3,1], +"group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#gadd8e10e7ec3b0204f7f92062ecd452f7":[1,0,2,2,3,2], +"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html":[1,0,2,2,2], +"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga21353cb4f5af666237739e62ce019cd6":[1,0,2,2,2,1], +"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga734b2ebbf0c77699b739013878cfd146":[1,0,2,2,2,3], +"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga79f222c8ab644de4d47f07528d1edd63":[1,0,2,2,2,2], +"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga8d8c6850e32b42871faefce3352012d1":[1,0,2,2,2,4], +"group___t_r_a_c_e___s_e_r_i_a_l.html":[1,0,2,2,0], +"group___t_r_a_c_e___s_e_r_i_a_l.html#ga730fb7b8d0bbb348dca73c15bd0e0b26":[1,0,2,2,0,1], +"group___t_r_a_c_e___s_e_r_i_a_l.html#gae9b9b8a611e291a2f2aa5abf99f3ebaa":[1,0,2,2,0,0], +"group___t_r_a_c_k_e_r_s.html":[1,0,2,3], +"group___t_r_a_c_k_e_r_s.html#ga063dab1067005e1600ea32531fdf3f8d":[1,0,2,3,18], +"group___t_r_a_c_k_e_r_s.html#ga1b7549afc4a1760b54a9b93b0f6d105e":[1,0,2,3,12], +"group___t_r_a_c_k_e_r_s.html#ga23de0006aa08984cfeddb6aa5e512fa1":[1,0,2,3,9], +"group___t_r_a_c_k_e_r_s.html#ga365a8c60bd13b75154feda649dd21ead":[1,0,2,3,17], +"group___t_r_a_c_k_e_r_s.html#ga39b6ffbc561f8caac276415e1ad32c30":[1,0,2,3,4], +"group___t_r_a_c_k_e_r_s.html#ga47ac59a406ee74d4cd9fe0fbaf63a758":[1,0,2,3,7], +"group___t_r_a_c_k_e_r_s.html#ga49af29ab3927cad105c1d2b018a767e9":[1,0,2,3,10], +"group___t_r_a_c_k_e_r_s.html#ga4b08632669043dfdbd219dda03502bdb":[1,0,2,3,8], +"group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4":[1,0,2,3,0], +"group___t_r_a_c_k_e_r_s.html#ga5dd8bac8c7ab5832019d55d7a68371b9":[1,0,2,3,15], +"group___t_r_a_c_k_e_r_s.html#ga704f7b9f8c65c9bcec48ce7cb77a2d3b":[1,0,2,3,14], +"group___t_r_a_c_k_e_r_s.html#ga72be24629fedb8bf70e830373d151fbc":[1,0,2,3,1], +"group___t_r_a_c_k_e_r_s.html#ga8017fb05a56a1b667244f1f786fa9c57":[1,0,2,3,11], +"group___t_r_a_c_k_e_r_s.html#ga9dc91e6b798a081f95f2ccef2c288e5e":[1,0,2,3,6], +"group___t_r_a_c_k_e_r_s.html#gaaec7ec19977bb26fa1919dfe920b82d5":[1,0,2,3,19], +"group___t_r_a_c_k_e_r_s.html#gab880911066605602a966641682090169":[1,0,2,3,5], +"group___t_r_a_c_k_e_r_s.html#gad2f4062a9ac8c2ab062a364f640ebc51":[1,0,2,3,13], +"group___t_r_a_c_k_e_r_s.html#gad91d8ca89074270fc040c0449e57cf07":[1,0,2,3,3], +"group___t_r_a_c_k_e_r_s.html#gadd7fd2c6e3a4800f1d5ddab35fd4b43e":[1,0,2,3,2], +"group___t_r_a_c_k_e_r_s.html#gae860b6947c6e317e14d40bd7b4b8eb74":[1,0,2,3,16], +"group___u_t_i_l_s___d_e_f_i_n_e_s.html":[1,0,1,3], +"group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga0f22e895ac7781c3d1b68fee182c4291":[1,0,1,3,2], +"group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga996f7be338ccb40d1a2a5abc1ad61759":[1,0,1,3,3], +"group___u_t_i_l_s___d_e_f_i_n_e_s.html#gabf45f2b60eedf80cf9d1dbe4302a741e":[1,0,1,3,1], +"group___u_t_i_l_s___d_e_f_i_n_e_s.html#gaf5e598848326d48e86167e5099a029be":[1,0,1,3,0], +"index.html":[], +"index.html":[0], +"index.html#инструкция-по-подключению":[0,2], +"index.html#основные-возможности":[0,0], +"index.html#структура-библиотеки":[0,1], +"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,2,0,2], +"struct_bench_time__t.html#a51376c064bdcffba23cf65d0733e3d34":[1,0,2,0,2,0], +"struct_bench_time_channel__t.html":[1,0,2,0,1], +"struct_bench_time_channel__t.html#a095d93e0228641f58b8661e263bc1bcd":[1,0,2,0,1,1], +"struct_bench_time_channel__t.html#a0f80bb194231df7921712d20bac603c9":[1,0,2,0,1,2], +"struct_bench_time_channel__t.html#a22a3913e7925aa89cc12ec1d24a6c16c":[1,0,2,0,1,3], +"struct_bench_time_channel__t.html#a8140fe9e3d323404651f0cfeeae53928":[1,0,2,0,1,0], +"struct_bench_time_stats__t.html":[1,0,2,0,0], +"struct_bench_time_stats__t.html#a21499b0b19d1ed27f8cea069f674e8ec":[1,0,2,0,0,2], +"struct_bench_time_stats__t.html#a2c739e1db6b26ceac5db3f2c44c177a0":[1,0,2,0,0,4], +"struct_bench_time_stats__t.html#a39b71a5d48c4a51a553a26a9fb961ac8":[1,0,2,0,0,0], +"struct_bench_time_stats__t.html#a3da36eb65b03ba995b5905b4650ea93c":[1,0,2,0,0,1], +"struct_bench_time_stats__t.html#a5e95ef31dd0daf973894ef2f034d1f71":[1,0,2,0,0,3], +"struct_gen_optimizer__t.html":[1,0,2,1,0], +"struct_gen_optimizer__t.html#a04a72c1a13e17581e84eaaf3d245bbfc":[1,0,2,1,0,5], +"struct_gen_optimizer__t.html#a473a62c538392b7735d660f303377320":[1,0,2,1,0,10], +"struct_gen_optimizer__t.html#a8201f1eede36a2c04ec7b4caac7465c9":[1,0,2,1,0,3], +"struct_gen_optimizer__t.html#a8f226c85e9bb034cb811aa0366bb191c":[1,0,2,1,0,6], +"struct_gen_optimizer__t.html#a9e20d2f6f39a5147e6dbac46baca73a9":[1,0,2,1,0,2], +"struct_gen_optimizer__t.html#abe0aacea949fbe93e5d4c002e37d7192":[1,0,2,1,0,0], +"struct_gen_optimizer__t.html#acfeb93ef4823e09473ddba52fae9a6b1":[1,0,2,1,0,7], +"struct_gen_optimizer__t.html#ad4dc0e53b3ca6bf2a642dfe7a1d1f26c":[1,0,2,1,0,4], +"struct_gen_optimizer__t.html#ae74a211c5ab6d58ffc147bb65e8fdafa":[1,0,2,1,0,8], +"struct_gen_optimizer__t.html#af0161e7c0b6ab691b8b59d522808f947":[1,0,2,1,0,9], +"struct_gen_optimizer__t.html#afe598a90024a8aa628dd16f3a2b38eb5":[1,0,2,1,0,1], +"struct_h_f___stack_frame__t.html":[1,0,2,2,3,0], +"struct_h_f___stack_frame__t.html#a16563896004751c90e41c81ae4570732":[1,0,2,2,3,0,6], +"struct_h_f___stack_frame__t.html#a286104d19185714940645a9df814ddea":[1,0,2,2,3,0,1], +"struct_h_f___stack_frame__t.html#a4146ed28926b5f234132b7112119a413":[1,0,2,2,3,0,0], +"struct_h_f___stack_frame__t.html#a453c7af42b6928a693af422e17c981d3":[1,0,2,2,3,0,3], +"struct_h_f___stack_frame__t.html#a5a52e5006dabcf68c0fa4cfb0e03335b":[1,0,2,2,3,0,2], +"struct_h_f___stack_frame__t.html#a6e51904297f7725e96d5b5fb291ef577":[1,0,2,2,3,0,5], +"struct_h_f___stack_frame__t.html#a819ee3bc518c460ece1b7c4079f8f80b":[1,0,2,2,3,0,4], +"struct_h_f___stack_frame__t.html#ae47cb051ee3c94471bfd4fe7e49c55f9":[1,0,2,2,3,0,7], +"struct_r_t_t___flash_header__t.html":[1,0,2,2,2,0], +"struct_r_t_t___flash_header__t.html#a1100df39b0eccb835946f4c13de23b4e":[1,0,2,2,2,0,2], +"struct_r_t_t___flash_header__t.html#a844ee5470a323a749856cbb7a682dc57":[1,0,2,2,2,0,0], +"struct_r_t_t___flash_header__t.html#afd1a5c51af6f97d170c2ccbbe3e34699":[1,0,2,2,2,0,1], +"struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n.html":[2,0,6], +"struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p.html":[2,0,7], +"struct_s_e_g_g_e_r___r_t_t___c_b.html":[2,0,8], +"struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c.html":[2,0,9], +"topics.html":[1], +"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], +"unionuint8___bit_type_def.html":[1,0,1,0,0] }; diff --git a/Doc/html/search/all_10.js b/Doc/html/search/all_10.js index 4476016..843fd86 100644 --- a/Doc/html/search/all_10.js +++ b/Doc/html/search/all_10.js @@ -3,59 +3,32 @@ 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']]], ['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']]] + ['time_20measurement_3',['Time measurement',['../group___b_e_n_c_h___t_i_m_e.html',1,'']]], + ['tools_4',['Tools',['../group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.html',1,'Debug Tools'],['../group___m_y_l_i_b_s___t_o_o_l_s.html',1,'General Tools']]], + ['total_5fticks_5',['total_ticks',['../struct_bench_time_stats__t.html#a21499b0b19d1ed27f8cea069f674e8ec',1,'BenchTimeStats_t']]], + ['trace_20configs_6',['Trace configs',['../group___t_r_a_c_e___c_o_n_f_i_g.html',1,'']]], + ['trace_20defines_7',['Trace defines',['../group___t_r_a_c_e.html',1,'']]], + ['trace_20defines_8',['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_9',['trace.h',['../trace_8h.html',1,'']]], + ['trace_5fgpio_5freset_10',['TRACE_GPIO_RESET',['../group___t_r_a_c_e___g_p_i_o.html#ga69741d88c991112e99fe7a62e025108a',1,'trace.h']]], + ['trace_5fgpio_5fset_11',['TRACE_GPIO_SET',['../group___t_r_a_c_e___g_p_i_o.html#ga02a6a7b273766121db8ad4a1371373eb',1,'trace.h']]], + ['trackerclear_5fall_12',['TrackerClear_All',['../group___t_r_a_c_k_e_r_s.html#ga704f7b9f8c65c9bcec48ce7cb77a2d3b',1,'trackers.h']]], + ['trackerclear_5ferr_13',['TrackerClear_Err',['../group___t_r_a_c_k_e_r_s.html#gae860b6947c6e317e14d40bd7b4b8eb74',1,'trackers.h']]], + ['trackerclear_5fok_14',['TrackerClear_Ok',['../group___t_r_a_c_k_e_r_s.html#ga5dd8bac8c7ab5832019d55d7a68371b9',1,'trackers.h']]], + ['trackerclear_5fuser_15',['TrackerClear_User',['../group___t_r_a_c_k_e_r_s.html#ga063dab1067005e1600ea32531fdf3f8d',1,'trackers.h']]], + ['trackerclear_5fuserall_16',['TrackerClear_UserAll',['../group___t_r_a_c_k_e_r_s.html#gaaec7ec19977bb26fa1919dfe920b82d5',1,'trackers.h']]], + ['trackerclear_5fwarn_17',['TrackerClear_Warn',['../group___t_r_a_c_k_e_r_s.html#ga365a8c60bd13b75154feda649dd21ead',1,'trackers.h']]], + ['trackercnt_5ferr_18',['TrackerCnt_Err',['../group___t_r_a_c_k_e_r_s.html#ga49af29ab3927cad105c1d2b018a767e9',1,'trackers.h']]], + ['trackercnt_5fok_19',['TrackerCnt_Ok',['../group___t_r_a_c_k_e_r_s.html#ga23de0006aa08984cfeddb6aa5e512fa1',1,'trackers.h']]], + ['trackercnt_5fuser_20',['TrackerCnt_User',['../group___t_r_a_c_k_e_r_s.html#ga1b7549afc4a1760b54a9b93b0f6d105e',1,'trackers.h']]], + ['trackercnt_5fwarn_21',['TrackerCnt_Warn',['../group___t_r_a_c_k_e_r_s.html#ga8017fb05a56a1b667244f1f786fa9c57',1,'trackers.h']]], + ['trackerget_5ferr_22',['TrackerGet_Err',['../group___t_r_a_c_k_e_r_s.html#ga9dc91e6b798a081f95f2ccef2c288e5e',1,'trackers.h']]], + ['trackerget_5fok_23',['TrackerGet_Ok',['../group___t_r_a_c_k_e_r_s.html#gab880911066605602a966641682090169',1,'trackers.h']]], + ['trackerget_5fuser_24',['TrackerGet_User',['../group___t_r_a_c_k_e_r_s.html#ga4b08632669043dfdbd219dda03502bdb',1,'trackers.h']]], + ['trackerget_5fwarn_25',['TrackerGet_Warn',['../group___t_r_a_c_k_e_r_s.html#ga47ac59a406ee74d4cd9fe0fbaf63a758',1,'trackers.h']]], + ['trackers_20defines_26',['Trackers defines',['../group___t_r_a_c_k_e_r_s.html',1,'']]], + ['trackers_2eh_27',['trackers.h',['../trackers_8h.html',1,'']]], + ['trackers_5fenable_28',['TRACKERS_ENABLE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#gac9eaedc31ab023ce7d6403999216e496',1,'mylibs_config.h']]], + ['trackertypedef_29',['TrackerTypeDef',['../group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4',1,'trackers.h']]], + ['trackerwrite_5fuser_30',['TrackerWrite_User',['../group___t_r_a_c_k_e_r_s.html#gad2f4062a9ac8c2ab062a364f640ebc51',1,'trackers.h']]] ]; diff --git a/Doc/html/search/all_11.js b/Doc/html/search/all_11.js index e6fd0be..6a9372d 100644 --- a/Doc/html/search/all_11.js +++ b/Doc/html/search/all_11.js @@ -1,44 +1,12 @@ var searchData= [ - ['uart_20my_5flibs_5fuart_0',['Модуль 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,'']]], - ['uart_20tools_1',['UART Tools',['../group___m_y___l_i_b_s___u_a_r_t.html',1,'']]], - ['uart_5fbase_5finit_2',['UART_Base_Init',['../group___m_y___l_i_b_s___u_a_r_t.html#gab9f07396b778505c934143e89953e154',1,'UART_Base_Init(UART_SettingsTypeDef *suart): general_uart.c'],['../group___m_y___l_i_b_s___u_a_r_t.html#gab9f07396b778505c934143e89953e154',1,'UART_Base_Init(UART_SettingsTypeDef *suart): general_uart.c']]], - ['uart_5fcheck_5finit_5fstruct_3',['UART_Check_Init_Struct',['../group___m_y___l_i_b_s___u_a_r_t.html#ga2a22e46ecb9e04b2ce197a0e9c09044a',1,'UART_Check_Init_Struct(UART_SettingsTypeDef *suart): general_uart.c'],['../group___m_y___l_i_b_s___u_a_r_t.html#ga2a22e46ecb9e04b2ce197a0e9c09044a',1,'UART_Check_Init_Struct(UART_SettingsTypeDef *suart): general_uart.c']]], - ['uart_5fdma_5finit_4',['UART_DMA_Init',['../general__uart_8c.html#ad82d0cbd19151675135fd75dad315d05',1,'general_uart.c']]], - ['uart_5fgpio_5finit_5',['UART_GPIO_Init',['../general__uart_8c.html#a3abae05bbde5f3b402bf18ca13dc6a0b',1,'general_uart.c']]], - ['uart_5fmspdeinit_6',['UART_MspDeInit',['../group___m_y___l_i_b_s___u_a_r_t.html#ga93ed6ceef4e3b5e7885786125cce93bc',1,'UART_MspDeInit(UART_HandleTypeDef *huart): general_uart.c'],['../group___m_y___l_i_b_s___u_a_r_t.html#ga93ed6ceef4e3b5e7885786125cce93bc',1,'UART_MspDeInit(UART_HandleTypeDef *huart): general_uart.c']]], - ['uart_5fmspinit_7',['UART_MspInit',['../group___m_y___l_i_b_s___u_a_r_t.html#gab9313fd2f9fc6873ca6bfbc5b96edbbb',1,'UART_MspInit(UART_HandleTypeDef *huart): general_uart.c'],['../group___m_y___l_i_b_s___u_a_r_t.html#gab9313fd2f9fc6873ca6bfbc5b96edbbb',1,'UART_MspInit(UART_HandleTypeDef *huart): general_uart.c']]], - ['uart_5fsettingstypedef_8',['UART_SettingsTypeDef',['../struct_u_a_r_t___settings_type_def.html',1,'']]], - ['uint16_5fbit_9',['uint16_bit',['../group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga6a122b536ad99ae611c8cf01437af086',1,'bit_access.h']]], - ['uint16_5fbittypedef_10',['uint16_BitTypeDef',['../unionuint16___bit_type_def.html',1,'']]], - ['uint32_5fbit_11',['uint32_bit',['../group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#gafaa2080168b1b6f7281e8bfabab022d1',1,'bit_access.h']]], - ['uint32_5fbittypedef_12',['uint32_BitTypeDef',['../unionuint32___bit_type_def.html',1,'']]], - ['uint64_5fbit_13',['uint64_bit',['../group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga47eb69ce9330a1c73fe8031240f02f0a',1,'bit_access.h']]], - ['uint64_5fbittypedef_14',['uint64_BitTypeDef',['../unionuint64___bit_type_def.html',1,'']]], - ['uint8_5fbit_15',['uint8_bit',['../group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga57dc3bb3472a66fc92312f89d42d2396',1,'bit_access.h']]], - ['uint8_5fbittypedef_16',['uint8_BitTypeDef',['../unionuint8___bit_type_def.html',1,'']]], - ['use_5fspi1_17',['USE_SPI1',['../group___s_p_i___i_n_i_t.html#ga2fe0c8aeb2c61679f32836fef479eedf',1,'general_spi.h']]], - ['use_5fspi2_18',['USE_SPI2',['../group___s_p_i___i_n_i_t.html#ga53687cddb8e39e76a79b8ffaa152fb2b',1,'general_spi.h']]], - ['use_5fspi3_19',['USE_SPI3',['../group___s_p_i___i_n_i_t.html#ga5fdd6e5934a8005ef05b80f6d95883dc',1,'general_spi.h']]], - ['use_5ftim1_20',['USE_TIM1',['../group___t_i_m___i_n_i_t.html#ga54a98c21365e0bc45b81555d2b101f2b',1,'general_tim.h']]], - ['use_5ftim10_21',['USE_TIM10',['../group___t_i_m___i_n_i_t.html#ga98c0691052d1da2c4053dd3586ff7ce9',1,'general_tim.h']]], - ['use_5ftim11_22',['USE_TIM11',['../group___t_i_m___i_n_i_t.html#ga176c97f06ebcf14e06e5c5bdbfac44c2',1,'general_tim.h']]], - ['use_5ftim12_23',['USE_TIM12',['../group___t_i_m___i_n_i_t.html#ga4e2b0e6cdf9eed74581b575c3fd9516b',1,'general_tim.h']]], - ['use_5ftim13_24',['USE_TIM13',['../group___t_i_m___i_n_i_t.html#gaf48ef87650517652ddec039a189507ac',1,'general_tim.h']]], - ['use_5ftim14_25',['USE_TIM14',['../group___t_i_m___i_n_i_t.html#ga9ae40be31d5271abe3e49f896d916d5c',1,'general_tim.h']]], - ['use_5ftim2_26',['USE_TIM2',['../group___t_i_m___i_n_i_t.html#ga72535a44955b43cbcd56e25039ab32eb',1,'general_tim.h']]], - ['use_5ftim3_27',['USE_TIM3',['../group___t_i_m___i_n_i_t.html#ga5b5685a43273b6e37242a4aba3ee0617',1,'general_tim.h']]], - ['use_5ftim4_28',['USE_TIM4',['../group___t_i_m___i_n_i_t.html#ga1493b39c9214501180b81b4c892f9be0',1,'general_tim.h']]], - ['use_5ftim5_29',['USE_TIM5',['../group___t_i_m___i_n_i_t.html#ga252f4fba93fc265110e83760e0590af3',1,'general_tim.h']]], - ['use_5ftim6_30',['USE_TIM6',['../group___t_i_m___i_n_i_t.html#ga8fe31b98160627d19038222910be3f46',1,'general_tim.h']]], - ['use_5ftim7_31',['USE_TIM7',['../group___t_i_m___i_n_i_t.html#ga7cdc54cc8cbbb6e9f60001f1e3e6ec67',1,'general_tim.h']]], - ['use_5ftim8_32',['USE_TIM8',['../group___t_i_m___i_n_i_t.html#ga28ba33d7c6bf22821dafa5bcee4854be',1,'general_tim.h']]], - ['use_5ftim9_33',['USE_TIM9',['../group___t_i_m___i_n_i_t.html#gaac627c0e98c9594cc41b1b46eb39e44a',1,'general_tim.h']]], - ['use_5fuart4_34',['USE_UART4',['../group___u_a_r_t___i_n_i_t.html#ga779530e93e7aa1f25eb13045ec42b8e7',1,'general_uart.h']]], - ['use_5fuart5_35',['USE_UART5',['../group___u_a_r_t___i_n_i_t.html#ga592c6bf4a6496d6806ba0838cdfa2340',1,'general_uart.h']]], - ['use_5fusart1_36',['USE_USART1',['../group___u_a_r_t___i_n_i_t.html#gace54f148bb1d72f13bf397d096d38d1b',1,'general_uart.h']]], - ['use_5fusart2_37',['USE_USART2',['../group___u_a_r_t___i_n_i_t.html#gaacb3968508217a0d8b3f64aa0c8aa07d',1,'general_uart.h']]], - ['use_5fusart3_38',['USE_USART3',['../group___u_a_r_t___i_n_i_t.html#ga6dadd967b428aade24008ec060009976',1,'general_uart.h']]], - ['use_5fusart6_39',['USE_USART6',['../group___u_a_r_t___i_n_i_t.html#gafaeb8bdd4aa7fb1987505530daa90868',1,'general_uart.h']]], - ['utils_20defines_40',['Utils defines',['../group___u_t_i_l_s___d_e_f_i_n_e_s.html',1,'']]] + ['uint16_5fbit_0',['uint16_bit',['../group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga6a122b536ad99ae611c8cf01437af086',1,'bit_access.h']]], + ['uint16_5fbittypedef_1',['uint16_BitTypeDef',['../unionuint16___bit_type_def.html',1,'']]], + ['uint32_5fbit_2',['uint32_bit',['../group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#gafaa2080168b1b6f7281e8bfabab022d1',1,'bit_access.h']]], + ['uint32_5fbittypedef_3',['uint32_BitTypeDef',['../unionuint32___bit_type_def.html',1,'']]], + ['uint64_5fbit_4',['uint64_bit',['../group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga47eb69ce9330a1c73fe8031240f02f0a',1,'bit_access.h']]], + ['uint64_5fbittypedef_5',['uint64_BitTypeDef',['../unionuint64___bit_type_def.html',1,'']]], + ['uint8_5fbit_6',['uint8_bit',['../group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga57dc3bb3472a66fc92312f89d42d2396',1,'bit_access.h']]], + ['uint8_5fbittypedef_7',['uint8_BitTypeDef',['../unionuint8___bit_type_def.html',1,'']]], + ['utils_20defines_8',['Utils defines',['../group___u_t_i_l_s___d_e_f_i_n_e_s.html',1,'']]] ]; diff --git a/Doc/html/search/all_12.js b/Doc/html/search/all_12.js index 205b15e..1668022 100644 --- a/Doc/html/search/all_12.js +++ b/Doc/html/search/all_12.js @@ -1,4 +1,4 @@ var searchData= [ - ['возможности_0',['Основные возможности',['../index.html#features',1,'']]] + ['библиотеки_0',['Структура библиотеки',['../index.html#структура-библиотеки',1,'']]] ]; diff --git a/Doc/html/search/all_13.js b/Doc/html/search/all_13.js index 4f064c9..81090ed 100644 --- a/Doc/html/search/all_13.js +++ b/Doc/html/search/all_13.js @@ -1,4 +1,4 @@ var searchData= [ - ['использование_0',['Использование',['../index.html#usage_basic',1,'']]] + ['возможности_0',['Основные возможности',['../index.html#основные-возможности',1,'']]] ]; diff --git a/Doc/html/search/all_14.js b/Doc/html/search/all_14.js index 09baad2..a171128 100644 --- a/Doc/html/search/all_14.js +++ b/Doc/html/search/all_14.js @@ -1,7 +1,4 @@ var searchData= [ - ['модуль_20таймеров_20my_5flibs_5ftim_0',['Модуль таймеров <a class="el" href="group___m_y___l_i_b_s___t_i_m.html">TIM Tools</a>',['../index.html#tim_module',1,'']]], - ['модуль_20gpio_20my_5flibs_5fgpio_1',['Модуль 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,'']]], - ['модуль_20spi_20my_5flibs_5fspi_2',['Модуль SPI <a class="el" href="group___m_y___l_i_b_s___s_p_i.html">SPI Tools</a>',['../index.html#spi_module',1,'']]], - ['модуль_20uart_20my_5flibs_5fuart_3',['Модуль 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,'']]] + ['инструкция_20по_20подключению_0',['Инструкция по подключению',['../index.html#инструкция-по-подключению',1,'']]] ]; diff --git a/Doc/html/search/all_15.js b/Doc/html/search/all_15.js index ca20af9..a10fe64 100644 --- a/Doc/html/search/all_15.js +++ b/Doc/html/search/all_15.js @@ -1,6 +1,7 @@ var searchData= [ - ['обзор_0',['Обзор',['../index.html#overview',1,'']]], - ['общие_20утилиты_20mylibs_5fdefines_1',['Общие утилиты (<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,'']]], - ['основные_20возможности_2',['Основные возможности',['../index.html#features',1,'']]] + ['обзор_20extendedlibs_0',['Обзор <span class="tt">ExtendedLibs</span>',['../index.html',1,'']]], + ['общие_20утилиты_20mylibs_20mylibs_5ftools_1',['Общие утилиты MyLibs (<a class="el" href="group___m_y_l_i_b_s___t_o_o_l_s.html">General Tools</a>)',['../index.html#общие-утилиты-mylibs-ref-mylibs_tools',1,'']]], + ['основные_20возможности_2',['Основные возможности',['../index.html#основные-возможности',1,'']]], + ['отладка_20mylibs_5fdebug_5ftools_3',['Отладка* (<a class="el" href="group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.html">Debug Tools</a>)',['../index.html#отладка-ref-mylibs_debug_tools',1,'']]] ]; diff --git a/Doc/html/search/all_16.js b/Doc/html/search/all_16.js index 82a23b2..7a11d01 100644 --- a/Doc/html/search/all_16.js +++ b/Doc/html/search/all_16.js @@ -1,4 +1,5 @@ var searchData= [ - ['проекта_0',['Структура проекта',['../index.html#structure',1,'']]] + ['подключению_0',['Инструкция по подключению',['../index.html#инструкция-по-подключению',1,'']]], + ['по_20подключению_1',['Инструкция по подключению',['../index.html#инструкция-по-подключению',1,'']]] ]; diff --git a/Doc/html/search/all_17.js b/Doc/html/search/all_17.js index dd4f424..ad45139 100644 --- a/Doc/html/search/all_17.js +++ b/Doc/html/search/all_17.js @@ -1,4 +1,4 @@ var searchData= [ - ['структура_20проекта_0',['Структура проекта',['../index.html#structure',1,'']]] + ['структура_20библиотеки_0',['Структура библиотеки',['../index.html#структура-библиотеки',1,'']]] ]; diff --git a/Doc/html/search/all_18.js b/Doc/html/search/all_18.js index 25680da..5d6e822 100644 --- a/Doc/html/search/all_18.js +++ b/Doc/html/search/all_18.js @@ -1,5 +1,4 @@ var searchData= [ - ['трассировка_20trace_0',['Трассировка <a class="el" href="group___t_r_a_c_e.html">Trace defines</a>',['../index.html#trace_module',1,'']]], - ['таймеров_20my_5flibs_5ftim_1',['Модуль таймеров <a class="el" href="group___m_y___l_i_b_s___t_i_m.html">TIM Tools</a>',['../index.html#tim_module',1,'']]] + ['утилиты_20mylibs_20mylibs_5ftools_0',['Общие утилиты MyLibs (<a class="el" href="group___m_y_l_i_b_s___t_o_o_l_s.html">General Tools</a>)',['../index.html#общие-утилиты-mylibs-ref-mylibs_tools',1,'']]] ]; diff --git a/Doc/html/search/all_19.js b/Doc/html/search/all_19.js index f69cabe..6ac25da 100644 --- a/Doc/html/search/all_19.js +++ b/Doc/html/search/all_19.js @@ -1,4 +1,4 @@ var searchData= [ - ['утилиты_20mylibs_5fdefines_0',['Общие утилиты (<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,'']]] + ['утилиты_20mylibs_5ftools_0',['Общие утилиты (<a class="el" href="group___m_y_l_i_b_s___t_o_o_l_s.html">General Tools</a>)',['../index.html#общие-утилиты-ref-mylibs_tools',1,'']]] ]; diff --git a/Doc/html/search/all_1a.js b/Doc/html/search/all_1a.js new file mode 100644 index 0000000..e816649 --- /dev/null +++ b/Doc/html/search/all_1a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['утилиты_20mylibs_5fdefines_0',['Общие утилиты (<a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Tools</a>)',['../index.html#общие-утилиты-ref-MYLIBS_TOOLS',1,'']]] +]; diff --git a/Doc/html/search/all_1b.js b/Doc/html/search/all_1b.js new file mode 100644 index 0000000..e816649 --- /dev/null +++ b/Doc/html/search/all_1b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['утилиты_20mylibs_5fdefines_0',['Общие утилиты (<a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Tools</a>)',['../index.html#общие-утилиты-ref-MYLIBS_TOOLS',1,'']]] +]; diff --git a/Doc/html/search/all_2.js b/Doc/html/search/all_2.js index 28874f5..6d7a2c1 100644 --- a/Doc/html/search/all_2.js +++ b/Doc/html/search/all_2.js @@ -1,19 +1,15 @@ var searchData= [ ['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']]] + ['candidates_1',['candidates',['../struct_gen_optimizer__t.html#af0161e7c0b6ab691b8b59d522808f947',1,'GenOptimizer_t']]], + ['channels_2',['channels',['../struct_bench_time__t.html#a51376c064bdcffba23cf65d0733e3d34',1,'BenchTime_t']]], + ['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']]], + ['configs_9',['Configs',['../group___m_y_l_i_b_s___c_o_n_f_i_g.html',1,'']]], + ['configs_10',['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_11',['count',['../struct_bench_time_stats__t.html#a5e95ef31dd0daf973894ef2f034d1f71',1,'BenchTimeStats_t']]] ]; diff --git a/Doc/html/search/all_3.js b/Doc/html/search/all_3.js index 98ee53c..0a5bea9 100644 --- a/Doc/html/search/all_3.js +++ b/Doc/html/search/all_3.js @@ -1,10 +1,8 @@ var searchData= [ - ['data_0',['data',['../struct_r_t_t___flash_header__t.html#ae7276198385c8d6f6508f433d042d52a',1,'RTT_FlashHeader_t']]], - ['defines_1',['defines',['../group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html',1,'Bit access defines'],['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html',1,'Delays defines'],['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html',1,'Error Handler 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___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'],['../group___t_r_a_c_e___s_e_r_i_a_l.html',1,'Serial trace defines'],['../group___t_r_a_c_e.html',1,'Trace defines'],['../group___t_r_a_c_k_e_r_s.html',1,'Trackers defines'],['../group___u_t_i_l_s___d_e_f_i_n_e_s.html',1,'Utils defines']]], - ['delay_20tools_2',['Delay tools',['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html',1,'']]], + ['data_0',['data',['../struct_r_t_t___flash_header__t.html#a1100df39b0eccb835946f4c13de23b4e',1,'RTT_FlashHeader_t']]], + ['debug_20tools_1',['Debug Tools',['../group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.html',1,'']]], + ['defines_2',['defines',['../group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html',1,'Bit access defines'],['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html',1,'Delays defines'],['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html',1,'Error Handler 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'],['../group___t_r_a_c_e.html',1,'Trace defines'],['../group___t_r_a_c_k_e_r_s.html',1,'Trackers defines'],['../group___u_t_i_l_s___d_e_f_i_n_e_s.html',1,'Utils defines']]], ['delays_20defines_3',['Delays defines',['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html',1,'']]], - ['divide_5fup_4',['Divide_Up',['../group___u_t_i_l_s___d_e_f_i_n_e_s.html#gabf45f2b60eedf80cf9d1dbe4302a741e',1,'mylibs_defs.h']]], - ['dma_5fchannel_5fx_5',['DMA_CHANNEL_X',['../struct_s_p_i___settings_type_def.html#aa0edaa145076d2383b3e0095d156d474',1,'SPI_SettingsTypeDef::DMA_CHANNEL_X'],['../struct_u_a_r_t___settings_type_def.html#a15ce92b03f7f189bfbe1ab88a5f94d19',1,'UART_SettingsTypeDef::DMA_CHANNEL_X']]], - ['dmachannel_6',['DMAChannel',['../struct_s_p_i___settings_type_def.html#a3cfd9469b0617a68bbd2a161ba06bb95',1,'SPI_SettingsTypeDef::DMAChannel'],['../struct_u_a_r_t___settings_type_def.html#a1ecc9ac6a1d2747ade56770cbab6a613',1,'UART_SettingsTypeDef::DMAChannel']]] + ['divide_5fup_4',['Divide_Up',['../group___u_t_i_l_s___d_e_f_i_n_e_s.html#gabf45f2b60eedf80cf9d1dbe4302a741e',1,'mylibs_defs.h']]] ]; diff --git a/Doc/html/search/all_4.js b/Doc/html/search/all_4.js index 7efe25f..96461c2 100644 --- a/Doc/html/search/all_4.js +++ b/Doc/html/search/all_4.js @@ -1,8 +1,6 @@ var searchData= [ ['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,'']]] + ['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,'']]], + ['extendedlibs_2',['Обзор <span class="tt">ExtendedLibs</span>',['../index.html',1,'']]] ]; diff --git a/Doc/html/search/all_6.js b/Doc/html/search/all_6.js index 81020f3..682a83c 100644 --- a/Doc/html/search/all_6.js +++ b/Doc/html/search/all_6.js @@ -8,42 +8,12 @@ var searchData= ['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']]] + ['general_20tools_8',['General Tools',['../group___m_y_l_i_b_s___t_o_o_l_s.html',1,'']]], + ['genetic_20configs_9',['Genetic configs',['../group___g_e_n___c_o_n_f_i_g.html',1,'']]], + ['genetic_20optimizer_10',['Genetic optimizer',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html',1,'']]], + ['genoptimizer_5finit_11',['GenOptimizer_Init',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html#ga2db1df46b4082ad9280ef4344fdf4e8a',1,'gen_optimizer.h']]], + ['genoptimizer_5fstep_12',['GenOptimizer_Step',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html#gaa9a4c4f43f7beb926c85bd4817ebd628',1,'gen_optimizer.h']]], + ['genoptimizer_5ft_13',['GenOptimizer_t',['../struct_gen_optimizer__t.html',1,'']]], + ['gpio_20trace_20defines_14',['GPIO trace defines',['../group___t_r_a_c_e___g_p_i_o.html',1,'']]], + ['gpio_5ftrace_5fenable_15',['GPIO_TRACE_ENABLE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#ga4222e0e400ad81737cefcabeb03fd23b',1,'mylibs_config.h']]] ]; diff --git a/Doc/html/search/all_7.js b/Doc/html/search/all_7.js index 3fb8b1e..6f2e467 100644 --- a/Doc/html/search/all_7.js +++ b/Doc/html/search/all_7.js @@ -1,20 +1,15 @@ var searchData= [ - ['hal_5fspi_5fmodule_5fenabled_0',['HAL_SPI_MODULE_ENABLED',['../group___s_p_i___i_n_i_t.html#ga8ad4712bf4add56892d057778e826e0c',1,'general_spi.h']]], - ['hal_5fuart_5fmodule_5fenabled_1',['HAL_UART_MODULE_ENABLED',['../group___u_a_r_t___i_n_i_t.html#ga167269406e73327b95c3bb7b9cfe6d89',1,'general_uart.h']]], - ['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']]], - ['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']]] + ['handler_20defines_0',['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_1',['Hardfault trace defines',['../group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html',1,'']]], + ['hardfault_5fserial_5ftrace_2',['HARDFAULT_SERIAL_TRACE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#ga47f454f804b4dbc26cae079e8d8641e6',1,'mylibs_config.h']]], + ['hbt_3',['hbt',['../group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d',1,'bench_time.h']]], + ['hf_5fcheckrecovered_4',['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_5',['HF_FLASH_ADDR',['../group___t_r_a_c_e___c_o_n_f_i_g.html#ga0c602733a4a359bf8c095d71cd4d0f63',1,'mylibs_config.h']]], + ['hf_5fhandlefault_6',['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_7',['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_8',['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_9',['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_10',['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_11',['HF_StackFrame_t',['../struct_h_f___stack_frame__t.html',1,'']]] ]; diff --git a/Doc/html/search/all_8.js b/Doc/html/search/all_8.js index 61586fa..9900c53 100644 --- a/Doc/html/search/all_8.js +++ b/Doc/html/search/all_8.js @@ -6,6 +6,5 @@ var searchData= ['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']]], - ['is_5frunning_7',['is_running',['../struct_bench_time_channel__t.html#a0f80bb194231df7921712d20bac603c9',1,'BenchTimeChannel_t']]] + ['is_5frunning_6',['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 959bc31..da778c8 100644 --- a/Doc/html/search/all_9.js +++ b/Doc/html/search/all_9.js @@ -1,23 +1,11 @@ var searchData= [ ['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']]] + ['libraries_20configs_1',['Libraries configs',['../group___l_i_b_s___c_o_n_f_i_g.html',1,'']]], + ['libs_2',['My Libs',['../group___m_y_l_i_b_s___a_l_l.html',1,'']]], + ['local_5ftime_3',['local_time',['../group___l_i_b_s___c_o_n_f_i_g.html#ga9c853b02c22f26023c34d1d404b6d653',1,'mylibs_config.h']]], + ['log_5flevel_4',['LOG_LEVEL',['../group___t_r_a_c_e___c_o_n_f_i_g.html#ga0b87e0d3bf5853bcbb0b66a7c48fdc05',1,'mylibs_config.h']]], + ['log_5fprintf_5',['log_printf',['../group___t_r_a_c_e___s_e_r_i_a_l.html#ga730fb7b8d0bbb348dca73c15bd0e0b26',1,'trace.h']]], + ['loss_6',['loss',['../struct_gen_optimizer__t.html#ae74a211c5ab6d58ffc147bb65e8fdafa',1,'GenOptimizer_t']]], + ['lr_7',['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 e17cff4..b58ce5b 100644 --- a/Doc/html/search/all_a.js +++ b/Doc/html/search/all_a.js @@ -3,27 +3,18 @@ var searchData= ['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,'']]] + ['msdelay_3',['msDelay',['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gabeb97579daeb622c6651ed03c4a27479',1,'mylibs_defs.h']]], + ['msdelaystart_4',['msDelayStart',['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga8a5051b1292d1019fe8dd3fc5521ab25',1,'mylibs_defs.h']]], + ['msdelaywaitdone_5',['msDelayWaitDone',['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gaed082c07b9fc4d1894330d885b9b5518',1,'mylibs_defs.h']]], + ['msdelaywhileactive_6',['msDelayWhileActive',['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga0b97e172659a59ee4fa56f851643ae85',1,'mylibs_defs.h']]], + ['mutation_5famp_7',['mutation_amp',['../struct_gen_optimizer__t.html#ad4dc0e53b3ca6bf2a642dfe7a1d1f26c',1,'GenOptimizer_t']]], + ['my_20libs_8',['My Libs',['../group___m_y_l_i_b_s___a_l_l.html',1,'']]], + ['my_5fprintf_9',['my_printf',['../group___t_r_a_c_e___s_e_r_i_a_l.html#gae9b9b8a611e291a2f2aa5abf99f3ebaa',1,'trace.h']]], + ['mylibs_20mylibs_5ftools_10',['Общие утилиты MyLibs (<a class="el" href="group___m_y_l_i_b_s___t_o_o_l_s.html">General Tools</a>)',['../index.html#общие-утилиты-mylibs-ref-mylibs_tools',1,'']]], + ['mylibs_5fconfig_2eh_11',['mylibs_config.h',['../mylibs__config_8h.html',1,'']]], + ['mylibs_5fdebug_5ftools_12',['Отладка* (<a class="el" href="group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.html">Debug Tools</a>)',['../index.html#отладка-ref-mylibs_debug_tools',1,'']]], + ['mylibs_5fdefs_2eh_13',['mylibs_defs.h',['../mylibs__defs_8h.html',1,'']]], + ['mylibs_5ferror_5fhandler_14',['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_15',['mylibs_include.h',['../mylibs__include_8h.html',1,'']]], + ['mylibs_5ftools_16',['Общие утилиты MyLibs (<a class="el" href="group___m_y_l_i_b_s___t_o_o_l_s.html">General Tools</a>)',['../index.html#общие-утилиты-mylibs-ref-mylibs_tools',1,'']]] ]; diff --git a/Doc/html/search/all_c.js b/Doc/html/search/all_c.js index 9094ace..8bb1ce3 100644 --- a/Doc/html/search/all_c.js +++ b/Doc/html/search/all_c.js @@ -1,5 +1,4 @@ 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',['Genetic optimizer',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html',1,'']]] + ['optimizer_0',['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 77e15f2..cd91d1c 100644 --- a/Doc/html/search/all_d.js +++ b/Doc/html/search/all_d.js @@ -3,7 +3,5 @@ var searchData= ['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']]], - ['pwm_20oc_20channels_20tools_5',['PWM/OC Channels tools',['../group___m_y_l_i_b_s___t_i_m___o_c.html',1,'']]] + ['psr_3',['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 037ff30..05dad63 100644 --- a/Doc/html/search/all_f.js +++ b/Doc/html/search/all_f.js @@ -1,39 +1,15 @@ 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']]], - ['serial_20trace_20defines_3',['Serial trace defines',['../group___t_r_a_c_e___s_e_r_i_a_l.html',1,'']]], - ['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_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']]], - ['spi_5fcheck_5finit_5fstruct_11',['SPI_Check_Init_Struct',['../group___m_y___l_i_b_s___s_p_i.html#ga333dd251bc878931086d48aa932b1a5f',1,'SPI_Check_Init_Struct(SPI_SettingsTypeDef *sspi): general_spi.c'],['../group___m_y___l_i_b_s___s_p_i.html#ga333dd251bc878931086d48aa932b1a5f',1,'SPI_Check_Init_Struct(SPI_SettingsTypeDef *sspi): general_spi.c']]], - ['spi_5fgpio_5finit_12',['SPI_GPIO_Init',['../general__spi_8c.html#ae80d21e5cab86571709a2619442733b5',1,'general_spi.c']]], - ['spi_5fmspdeinit_13',['SPI_MspDeInit',['../group___m_y___l_i_b_s___s_p_i.html#gac279cc3eaa35541edfe330a1844a85e4',1,'SPI_MspDeInit(SPI_HandleTypeDef *hspi): general_spi.c'],['../group___m_y___l_i_b_s___s_p_i.html#gac279cc3eaa35541edfe330a1844a85e4',1,'SPI_MspDeInit(SPI_HandleTypeDef *hspi): general_spi.c']]], - ['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_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']]] + ['segger_5frtt_5fbuffer_5fdown_0',['SEGGER_RTT_BUFFER_DOWN',['../struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n.html',1,'']]], + ['segger_5frtt_5fbuffer_5fup_1',['SEGGER_RTT_BUFFER_UP',['../struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p.html',1,'']]], + ['segger_5frtt_5fcb_2',['SEGGER_RTT_CB',['../struct_s_e_g_g_e_r___r_t_t___c_b.html',1,'']]], + ['segger_5frtt_5fprintf_5fdesc_3',['SEGGER_RTT_PRINTF_DESC',['../struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c.html',1,'']]], + ['serial_20trace_20defines_4',['Serial trace defines',['../group___t_r_a_c_e___s_e_r_i_a_l.html',1,'']]], + ['serial_5ftrace_5fenable_5',['SERIAL_TRACE_ENABLE',['../group___t_r_a_c_e___c_o_n_f_i_g.html#ga76936505ca200d2e61226b7ba68f27c6',1,'mylibs_config.h']]], + ['size_6',['size',['../struct_r_t_t___flash_header__t.html#afd1a5c51af6f97d170c2ccbbe3e34699',1,'RTT_FlashHeader_t']]], + ['sorted_5fidx_7',['sorted_idx',['../struct_gen_optimizer__t.html#a473a62c538392b7735d660f303377320',1,'GenOptimizer_t']]], + ['stability_8',['stability',['../struct_gen_optimizer__t.html#abe0aacea949fbe93e5d4c002e37d7192',1,'GenOptimizer_t']]], + ['start_5ftick_9',['start_tick',['../struct_bench_time_channel__t.html#a8140fe9e3d323404651f0cfeeae53928',1,'BenchTimeChannel_t']]], + ['stats_10',['stats',['../struct_bench_time_channel__t.html#a22a3913e7925aa89cc12ec1d24a6c16c',1,'BenchTimeChannel_t']]], + ['swo_5ftrace_5fenable_11',['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_1.js b/Doc/html/search/classes_1.js index 0c5d0d7..77ed5c2 100644 --- a/Doc/html/search/classes_1.js +++ b/Doc/html/search/classes_1.js @@ -1,6 +1,4 @@ var searchData= [ - ['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,'']]] + ['genoptimizer_5ft_0',['GenOptimizer_t',['../struct_gen_optimizer__t.html',1,'']]] ]; diff --git a/Doc/html/search/classes_4.js b/Doc/html/search/classes_4.js index bf0ca51..5bd6ad3 100644 --- a/Doc/html/search/classes_4.js +++ b/Doc/html/search/classes_4.js @@ -1,4 +1,7 @@ var searchData= [ - ['spi_5fsettingstypedef_0',['SPI_SettingsTypeDef',['../struct_s_p_i___settings_type_def.html',1,'']]] + ['segger_5frtt_5fbuffer_5fdown_0',['SEGGER_RTT_BUFFER_DOWN',['../struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n.html',1,'']]], + ['segger_5frtt_5fbuffer_5fup_1',['SEGGER_RTT_BUFFER_UP',['../struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p.html',1,'']]], + ['segger_5frtt_5fcb_2',['SEGGER_RTT_CB',['../struct_s_e_g_g_e_r___r_t_t___c_b.html',1,'']]], + ['segger_5frtt_5fprintf_5fdesc_3',['SEGGER_RTT_PRINTF_DESC',['../struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c.html',1,'']]] ]; diff --git a/Doc/html/search/classes_5.js b/Doc/html/search/classes_5.js index 91c6e88..0f87d60 100644 --- a/Doc/html/search/classes_5.js +++ b/Doc/html/search/classes_5.js @@ -1,5 +1,7 @@ var searchData= [ - ['tim_5fencodertypedef_0',['TIM_EncoderTypeDef',['../struct_t_i_m___encoder_type_def.html',1,'']]], - ['tim_5fsettingstypedef_1',['TIM_SettingsTypeDef',['../struct_t_i_m___settings_type_def.html',1,'']]] + ['uint16_5fbittypedef_0',['uint16_BitTypeDef',['../unionuint16___bit_type_def.html',1,'']]], + ['uint32_5fbittypedef_1',['uint32_BitTypeDef',['../unionuint32___bit_type_def.html',1,'']]], + ['uint64_5fbittypedef_2',['uint64_BitTypeDef',['../unionuint64___bit_type_def.html',1,'']]], + ['uint8_5fbittypedef_3',['uint8_BitTypeDef',['../unionuint8___bit_type_def.html',1,'']]] ]; diff --git a/Doc/html/search/files_1.js b/Doc/html/search/files_1.js index 7a27173..27350a3 100644 --- a/Doc/html/search/files_1.js +++ b/Doc/html/search/files_1.js @@ -1,12 +1,4 @@ var searchData= [ - ['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,'']]] + ['gen_5foptimizer_2eh_0',['gen_optimizer.h',['../gen__optimizer_8h.html',1,'']]] ]; diff --git a/Doc/html/search/functions_1.js b/Doc/html/search/functions_1.js index 3e028e5..1d2569f 100644 --- a/Doc/html/search/functions_1.js +++ b/Doc/html/search/functions_1.js @@ -1,15 +1,5 @@ var searchData= [ ['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']]] + ['genoptimizer_5fstep_1',['GenOptimizer_Step',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html#gaa9a4c4f43f7beb926c85bd4817ebd628',1,'gen_optimizer.h']]] ]; diff --git a/Doc/html/search/groups_2.js b/Doc/html/search/groups_2.js index 1f5d168..f26a5fb 100644 --- a/Doc/html/search/groups_2.js +++ b/Doc/html/search/groups_2.js @@ -1,6 +1,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___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']]] + ['configs_0',['Configs',['../group___m_y_l_i_b_s___c_o_n_f_i_g.html',1,'']]], + ['configs_1',['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_3.js b/Doc/html/search/groups_3.js index 6a7d179..09f7618 100644 --- a/Doc/html/search/groups_3.js +++ b/Doc/html/search/groups_3.js @@ -1,6 +1,6 @@ var searchData= [ - ['defines_0',['defines',['../group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html',1,'Bit access defines'],['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html',1,'Delays defines'],['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html',1,'Error Handler 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___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'],['../group___t_r_a_c_e___s_e_r_i_a_l.html',1,'Serial trace defines'],['../group___t_r_a_c_e.html',1,'Trace defines'],['../group___t_r_a_c_k_e_r_s.html',1,'Trackers defines'],['../group___u_t_i_l_s___d_e_f_i_n_e_s.html',1,'Utils defines']]], - ['delay_20tools_1',['Delay tools',['../group___m_y_l_i_b_s___t_i_m___d_e_l_a_y.html',1,'']]], + ['debug_20tools_0',['Debug Tools',['../group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.html',1,'']]], + ['defines_1',['defines',['../group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html',1,'Bit access defines'],['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html',1,'Delays defines'],['../group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html',1,'Error Handler 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'],['../group___t_r_a_c_e.html',1,'Trace defines'],['../group___t_r_a_c_k_e_r_s.html',1,'Trackers defines'],['../group___u_t_i_l_s___d_e_f_i_n_e_s.html',1,'Utils defines']]], ['delays_20defines_2',['Delays defines',['../group___d_e_l_a_y_s___d_e_f_i_n_e_s.html',1,'']]] ]; diff --git a/Doc/html/search/groups_4.js b/Doc/html/search/groups_4.js index d2fc234..02c58e6 100644 --- a/Doc/html/search/groups_4.js +++ b/Doc/html/search/groups_4.js @@ -1,5 +1,4 @@ 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,'']]] + ['error_20handler_20defines_0',['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 451771a..8371fc8 100644 --- a/Doc/html/search/groups_6.js +++ b/Doc/html/search/groups_6.js @@ -1,9 +1,7 @@ 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']]], - ['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,'']]] + ['general_20tools_0',['General Tools',['../group___m_y_l_i_b_s___t_o_o_l_s.html',1,'']]], + ['genetic_20configs_1',['Genetic configs',['../group___g_e_n___c_o_n_f_i_g.html',1,'']]], + ['genetic_20optimizer_2',['Genetic optimizer',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html',1,'']]], + ['gpio_20trace_20defines_3',['GPIO trace defines',['../group___t_r_a_c_e___g_p_i_o.html',1,'']]] ]; diff --git a/Doc/html/search/groups_8.js b/Doc/html/search/groups_8.js index 8230248..7e3f7d8 100644 --- a/Doc/html/search/groups_8.js +++ b/Doc/html/search/groups_8.js @@ -1,4 +1,5 @@ var searchData= [ - ['init_20defines_0',['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']]] + ['libraries_20configs_0',['Libraries configs',['../group___l_i_b_s___c_o_n_f_i_g.html',1,'']]], + ['libs_1',['My Libs',['../group___m_y_l_i_b_s___a_l_l.html',1,'']]] ]; diff --git a/Doc/html/search/groups_9.js b/Doc/html/search/groups_9.js index 2fc3244..b997f53 100644 --- a/Doc/html/search/groups_9.js +++ b/Doc/html/search/groups_9.js @@ -1,6 +1,5 @@ var searchData= [ - ['led_20tools_0',['LED tools',['../group___m_y_l_i_b_s___g_p_i_o___l_e_d_s.html',1,'']]], - ['libraries_20configs_1',['Libraries configs',['../group___l_i_b_s___c_o_n_f_i_g.html',1,'']]], - ['libs_2',['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_a.js b/Doc/html/search/groups_a.js index b997f53..8bb1ce3 100644 --- a/Doc/html/search/groups_a.js +++ b/Doc/html/search/groups_a.js @@ -1,5 +1,4 @@ var searchData= [ - ['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,'']]] + ['optimizer_0',['Genetic optimizer',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html',1,'']]] ]; diff --git a/Doc/html/search/groups_b.js b/Doc/html/search/groups_b.js index 9094ace..1e14eaa 100644 --- a/Doc/html/search/groups_b.js +++ b/Doc/html/search/groups_b.js @@ -1,5 +1,4 @@ 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',['Genetic optimizer',['../group___g_e_n___o_p_t_i_m_i_z_e_r.html',1,'']]] + ['rtt_20buffer_0',['Flash RTT Buffer',['../group___t_r_a_c_e___r_t_t___f_l_a_s_h.html',1,'']]] ]; diff --git a/Doc/html/search/groups_c.js b/Doc/html/search/groups_c.js index f960938..c4ee97e 100644 --- a/Doc/html/search/groups_c.js +++ b/Doc/html/search/groups_c.js @@ -1,5 +1,4 @@ var searchData= [ - ['peripheral_0',['Peripheral',['../group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html',1,'']]], - ['pwm_20oc_20channels_20tools_1',['PWM/OC Channels tools',['../group___m_y_l_i_b_s___t_i_m___o_c.html',1,'']]] + ['serial_20trace_20defines_0',['Serial trace defines',['../group___t_r_a_c_e___s_e_r_i_a_l.html',1,'']]] ]; diff --git a/Doc/html/search/groups_d.js b/Doc/html/search/groups_d.js index 1e14eaa..6f8270a 100644 --- a/Doc/html/search/groups_d.js +++ b/Doc/html/search/groups_d.js @@ -1,4 +1,9 @@ var searchData= [ - ['rtt_20buffer_0',['Flash RTT Buffer',['../group___t_r_a_c_e___r_t_t___f_l_a_s_h.html',1,'']]] + ['time_20measurement_0',['Time measurement',['../group___b_e_n_c_h___t_i_m_e.html',1,'']]], + ['tools_1',['Tools',['../group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.html',1,'Debug Tools'],['../group___m_y_l_i_b_s___t_o_o_l_s.html',1,'General Tools']]], + ['trace_20configs_2',['Trace configs',['../group___t_r_a_c_e___c_o_n_f_i_g.html',1,'']]], + ['trace_20defines_3',['Trace defines',['../group___t_r_a_c_e.html',1,'']]], + ['trace_20defines_4',['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_5',['Trackers defines',['../group___t_r_a_c_k_e_r_s.html',1,'']]] ]; diff --git a/Doc/html/search/groups_e.js b/Doc/html/search/groups_e.js index 4b963a4..a12cb46 100644 --- a/Doc/html/search/groups_e.js +++ b/Doc/html/search/groups_e.js @@ -1,6 +1,4 @@ var searchData= [ - ['serial_20trace_20defines_0',['Serial trace defines',['../group___t_r_a_c_e___s_e_r_i_a_l.html',1,'']]], - ['spi_20tools_1',['SPI Tools',['../group___m_y___l_i_b_s___s_p_i.html',1,'']]], - ['switch_20tools_2',['Switch tools',['../group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h.html',1,'']]] + ['utils_20defines_0',['Utils defines',['../group___u_t_i_l_s___d_e_f_i_n_e_s.html',1,'']]] ]; diff --git a/Doc/html/search/groups_f.js b/Doc/html/search/groups_f.js index dcdcef1..a12cb46 100644 --- a/Doc/html/search/groups_f.js +++ b/Doc/html/search/groups_f.js @@ -1,11 +1,4 @@ var searchData= [ - ['tim_20tools_0',['TIM Tools',['../group___m_y___l_i_b_s___t_i_m.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,'']]] + ['utils_20defines_0',['Utils defines',['../group___u_t_i_l_s___d_e_f_i_n_e_s.html',1,'']]] ]; diff --git a/Doc/html/search/pages_0.js b/Doc/html/search/pages_0.js index 04631a1..999ec81 100644 --- a/Doc/html/search/pages_0.js +++ b/Doc/html/search/pages_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['gpio_20my_5flibs_5fgpio_0',['Модуль 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,'']]] + ['extendedlibs_0',['Обзор <span class="tt">ExtendedLibs</span>',['../index.html',1,'']]] ]; diff --git a/Doc/html/search/pages_1.js b/Doc/html/search/pages_1.js index c38a7d1..aa8489c 100644 --- a/Doc/html/search/pages_1.js +++ b/Doc/html/search/pages_1.js @@ -1,9 +1,6 @@ var searchData= [ - ['my_5flibs_5fgpio_0',['Модуль 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_1',['Модуль 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_2',['Модуль таймеров <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_3',['Модуль 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,'']]], - ['mylibs_4',['MyLibs',['../index.html',1,'']]], - ['mylibs_5fdefines_5',['Общие утилиты (<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_20mylibs_5ftools_0',['Общие утилиты MyLibs (<a class="el" href="group___m_y_l_i_b_s___t_o_o_l_s.html">General Tools</a>)',['../index.html#общие-утилиты-mylibs-ref-mylibs_tools',1,'']]], + ['mylibs_5fdebug_5ftools_1',['Отладка* (<a class="el" href="group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.html">Debug Tools</a>)',['../index.html#отладка-ref-mylibs_debug_tools',1,'']]], + ['mylibs_5ftools_2',['Общие утилиты MyLibs (<a class="el" href="group___m_y_l_i_b_s___t_o_o_l_s.html">General Tools</a>)',['../index.html#общие-утилиты-mylibs-ref-mylibs_tools',1,'']]] ]; diff --git a/Doc/html/search/pages_2.js b/Doc/html/search/pages_2.js index 6fc01ef..1668022 100644 --- a/Doc/html/search/pages_2.js +++ b/Doc/html/search/pages_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['spi_20my_5flibs_5fspi_0',['Модуль SPI <a class="el" href="group___m_y___l_i_b_s___s_p_i.html">SPI Tools</a>',['../index.html#spi_module',1,'']]] + ['библиотеки_0',['Структура библиотеки',['../index.html#структура-библиотеки',1,'']]] ]; diff --git a/Doc/html/search/pages_3.js b/Doc/html/search/pages_3.js index 8cbc609..81090ed 100644 --- a/Doc/html/search/pages_3.js +++ b/Doc/html/search/pages_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['trace_0',['Трассировка <a class="el" href="group___t_r_a_c_e.html">Trace defines</a>',['../index.html#trace_module',1,'']]] + ['возможности_0',['Основные возможности',['../index.html#основные-возможности',1,'']]] ]; diff --git a/Doc/html/search/pages_4.js b/Doc/html/search/pages_4.js index ba35ec5..a171128 100644 --- a/Doc/html/search/pages_4.js +++ b/Doc/html/search/pages_4.js @@ -1,4 +1,4 @@ var searchData= [ - ['uart_20my_5flibs_5fuart_0',['Модуль 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,'']]] + ['инструкция_20по_20подключению_0',['Инструкция по подключению',['../index.html#инструкция-по-подключению',1,'']]] ]; diff --git a/Doc/html/search/pages_5.js b/Doc/html/search/pages_5.js index 205b15e..a10fe64 100644 --- a/Doc/html/search/pages_5.js +++ b/Doc/html/search/pages_5.js @@ -1,4 +1,7 @@ var searchData= [ - ['возможности_0',['Основные возможности',['../index.html#features',1,'']]] + ['обзор_20extendedlibs_0',['Обзор <span class="tt">ExtendedLibs</span>',['../index.html',1,'']]], + ['общие_20утилиты_20mylibs_20mylibs_5ftools_1',['Общие утилиты MyLibs (<a class="el" href="group___m_y_l_i_b_s___t_o_o_l_s.html">General Tools</a>)',['../index.html#общие-утилиты-mylibs-ref-mylibs_tools',1,'']]], + ['основные_20возможности_2',['Основные возможности',['../index.html#основные-возможности',1,'']]], + ['отладка_20mylibs_5fdebug_5ftools_3',['Отладка* (<a class="el" href="group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.html">Debug Tools</a>)',['../index.html#отладка-ref-mylibs_debug_tools',1,'']]] ]; diff --git a/Doc/html/search/pages_6.js b/Doc/html/search/pages_6.js index 4f064c9..7a11d01 100644 --- a/Doc/html/search/pages_6.js +++ b/Doc/html/search/pages_6.js @@ -1,4 +1,5 @@ var searchData= [ - ['использование_0',['Использование',['../index.html#usage_basic',1,'']]] + ['подключению_0',['Инструкция по подключению',['../index.html#инструкция-по-подключению',1,'']]], + ['по_20подключению_1',['Инструкция по подключению',['../index.html#инструкция-по-подключению',1,'']]] ]; diff --git a/Doc/html/search/pages_7.js b/Doc/html/search/pages_7.js index 09baad2..ad45139 100644 --- a/Doc/html/search/pages_7.js +++ b/Doc/html/search/pages_7.js @@ -1,7 +1,4 @@ var searchData= [ - ['модуль_20таймеров_20my_5flibs_5ftim_0',['Модуль таймеров <a class="el" href="group___m_y___l_i_b_s___t_i_m.html">TIM Tools</a>',['../index.html#tim_module',1,'']]], - ['модуль_20gpio_20my_5flibs_5fgpio_1',['Модуль 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,'']]], - ['модуль_20spi_20my_5flibs_5fspi_2',['Модуль SPI <a class="el" href="group___m_y___l_i_b_s___s_p_i.html">SPI Tools</a>',['../index.html#spi_module',1,'']]], - ['модуль_20uart_20my_5flibs_5fuart_3',['Модуль 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,'']]] + ['структура_20библиотеки_0',['Структура библиотеки',['../index.html#структура-библиотеки',1,'']]] ]; diff --git a/Doc/html/search/pages_8.js b/Doc/html/search/pages_8.js index ca20af9..5d6e822 100644 --- a/Doc/html/search/pages_8.js +++ b/Doc/html/search/pages_8.js @@ -1,6 +1,4 @@ var searchData= [ - ['обзор_0',['Обзор',['../index.html#overview',1,'']]], - ['общие_20утилиты_20mylibs_5fdefines_1',['Общие утилиты (<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,'']]], - ['основные_20возможности_2',['Основные возможности',['../index.html#features',1,'']]] + ['утилиты_20mylibs_20mylibs_5ftools_0',['Общие утилиты MyLibs (<a class="el" href="group___m_y_l_i_b_s___t_o_o_l_s.html">General Tools</a>)',['../index.html#общие-утилиты-mylibs-ref-mylibs_tools',1,'']]] ]; diff --git a/Doc/html/search/pages_9.js b/Doc/html/search/pages_9.js index 82a23b2..3431df9 100644 --- a/Doc/html/search/pages_9.js +++ b/Doc/html/search/pages_9.js @@ -1,4 +1,4 @@ var searchData= [ - ['проекта_0',['Структура проекта',['../index.html#structure',1,'']]] + ['трассировка_20trace_0',['Трассировка <a class="el" href="group___t_r_a_c_e.html">Trace defines</a>',['../index.html#трассировка-ref-trace',1,'']]] ]; diff --git a/Doc/html/search/pages_a.js b/Doc/html/search/pages_a.js index dd4f424..6ac25da 100644 --- a/Doc/html/search/pages_a.js +++ b/Doc/html/search/pages_a.js @@ -1,4 +1,4 @@ var searchData= [ - ['структура_20проекта_0',['Структура проекта',['../index.html#structure',1,'']]] + ['утилиты_20mylibs_5ftools_0',['Общие утилиты (<a class="el" href="group___m_y_l_i_b_s___t_o_o_l_s.html">General Tools</a>)',['../index.html#общие-утилиты-ref-mylibs_tools',1,'']]] ]; diff --git a/Doc/html/search/pages_b.js b/Doc/html/search/pages_b.js index 25680da..e816649 100644 --- a/Doc/html/search/pages_b.js +++ b/Doc/html/search/pages_b.js @@ -1,5 +1,4 @@ var searchData= [ - ['трассировка_20trace_0',['Трассировка <a class="el" href="group___t_r_a_c_e.html">Trace defines</a>',['../index.html#trace_module',1,'']]], - ['таймеров_20my_5flibs_5ftim_1',['Модуль таймеров <a class="el" href="group___m_y___l_i_b_s___t_i_m.html">TIM Tools</a>',['../index.html#tim_module',1,'']]] + ['утилиты_20mylibs_5fdefines_0',['Общие утилиты (<a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Tools</a>)',['../index.html#общие-утилиты-ref-MYLIBS_TOOLS',1,'']]] ]; diff --git a/Doc/html/search/pages_c.js b/Doc/html/search/pages_c.js index f69cabe..ad45139 100644 --- a/Doc/html/search/pages_c.js +++ b/Doc/html/search/pages_c.js @@ -1,4 +1,4 @@ var searchData= [ - ['утилиты_20mylibs_5fdefines_0',['Общие утилиты (<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,'']]] + ['структура_20библиотеки_0',['Структура библиотеки',['../index.html#структура-библиотеки',1,'']]] ]; diff --git a/Doc/html/search/pages_d.js b/Doc/html/search/pages_d.js new file mode 100644 index 0000000..de6980d --- /dev/null +++ b/Doc/html/search/pages_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['таймеров_20my_5flibs_5ftim_0',['Модуль таймеров MY_LIBS_TIM',['../index.html#tim_module',1,'']]] +]; diff --git a/Doc/html/search/pages_e.js b/Doc/html/search/pages_e.js new file mode 100644 index 0000000..e816649 --- /dev/null +++ b/Doc/html/search/pages_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['утилиты_20mylibs_5fdefines_0',['Общие утилиты (<a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Tools</a>)',['../index.html#общие-утилиты-ref-MYLIBS_TOOLS',1,'']]] +]; diff --git a/Doc/html/search/pages_f.js b/Doc/html/search/pages_f.js new file mode 100644 index 0000000..e816649 --- /dev/null +++ b/Doc/html/search/pages_f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['утилиты_20mylibs_5fdefines_0',['Общие утилиты (<a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Tools</a>)',['../index.html#общие-утилиты-ref-MYLIBS_TOOLS',1,'']]] +]; diff --git a/Doc/html/search/searchdata.js b/Doc/html/search/searchdata.js index 457d6e9..0b91f07 100644 --- a/Doc/html/search/searchdata.js +++ b/Doc/html/search/searchdata.js @@ -1,14 +1,12 @@ var indexSectionsWithContent = { - 0: "abcdefghilmnoprstuвимопсту", - 1: "bghrstu", + 0: "abcdefghilmnoprstuбвиопсу", + 1: "bghrsu", 2: "bgmt", - 3: "bghrstu", - 4: "cdeghilmnprst", - 5: "gt", - 6: "lt", - 7: "abcdefghilmoprstu", - 8: "gmstuвимопсту" + 3: "bghr", + 4: "cdghilmnprst", + 5: "abcdefghlmorstu", + 6: "emбвиопсу" }; var indexSectionNames = @@ -18,10 +16,8 @@ var indexSectionNames = 2: "files", 3: "functions", 4: "variables", - 5: "enums", - 6: "enumvalues", - 7: "groups", - 8: "pages" + 5: "groups", + 6: "pages" }; var indexSectionLabels = @@ -31,9 +27,7 @@ var indexSectionLabels = 2: "Files", 3: "Functions", 4: "Variables", - 5: "Enumerations", - 6: "Enumerator", - 7: "Modules", - 8: "Pages" + 5: "Modules", + 6: "Pages" }; diff --git a/Doc/html/search/variables_0.js b/Doc/html/search/variables_0.js index d01d6ca..7e3a1d8 100644 --- a/Doc/html/search/variables_0.js +++ b/Doc/html/search/variables_0.js @@ -1,10 +1,7 @@ var searchData= [ ['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']]] + ['candidates_1',['candidates',['../struct_gen_optimizer__t.html#af0161e7c0b6ab691b8b59d522808f947',1,'GenOptimizer_t']]], + ['channels_2',['channels',['../struct_bench_time__t.html#a51376c064bdcffba23cf65d0733e3d34',1,'BenchTime_t']]], + ['count_3',['count',['../struct_bench_time_stats__t.html#a5e95ef31dd0daf973894ef2f034d1f71',1,'BenchTimeStats_t']]] ]; diff --git a/Doc/html/search/variables_1.js b/Doc/html/search/variables_1.js index 3bb10dc..d1fd3e4 100644 --- a/Doc/html/search/variables_1.js +++ b/Doc/html/search/variables_1.js @@ -1,6 +1,4 @@ var searchData= [ - ['data_0',['data',['../struct_r_t_t___flash_header__t.html#ae7276198385c8d6f6508f433d042d52a',1,'RTT_FlashHeader_t']]], - ['dma_5fchannel_5fx_1',['DMA_CHANNEL_X',['../struct_s_p_i___settings_type_def.html#aa0edaa145076d2383b3e0095d156d474',1,'SPI_SettingsTypeDef::DMA_CHANNEL_X'],['../struct_u_a_r_t___settings_type_def.html#a15ce92b03f7f189bfbe1ab88a5f94d19',1,'UART_SettingsTypeDef::DMA_CHANNEL_X']]], - ['dmachannel_2',['DMAChannel',['../struct_s_p_i___settings_type_def.html#a3cfd9469b0617a68bbd2a161ba06bb95',1,'SPI_SettingsTypeDef::DMAChannel'],['../struct_u_a_r_t___settings_type_def.html#a1ecc9ac6a1d2747ade56770cbab6a613',1,'UART_SettingsTypeDef::DMAChannel']]] + ['data_0',['data',['../struct_r_t_t___flash_header__t.html#a1100df39b0eccb835946f4c13de23b4e',1,'RTT_FlashHeader_t']]] ]; diff --git a/Doc/html/search/variables_2.js b/Doc/html/search/variables_2.js index 677b54d..8d3723a 100644 --- a/Doc/html/search/variables_2.js +++ b/Doc/html/search/variables_2.js @@ -1,5 +1,5 @@ var searchData= [ - ['encoder_5fdiff_0',['Encoder_Diff',['../struct_t_i_m___encoder_type_def.html#a6f769f027b760a4b496e2b2b77bf54a3',1,'TIM_EncoderTypeDef']]], - ['encoder_5fshdw_1',['Encoder_Shdw',['../struct_t_i_m___encoder_type_def.html#a0dacce3dde7df3122583869d96a372a2',1,'TIM_EncoderTypeDef']]] + ['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']]] ]; diff --git a/Doc/html/search/variables_3.js b/Doc/html/search/variables_3.js index aff98e3..3e0328d 100644 --- a/Doc/html/search/variables_3.js +++ b/Doc/html/search/variables_3.js @@ -1,11 +1,4 @@ var searchData= [ - ['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']]], - ['gpio_5fpin_5fti2_5',['GPIO_PIN_TI2',['../struct_t_i_m___encoder_type_def.html#a67ad037b92162546763fc9c425b5e3c5',1,'TIM_EncoderTypeDef']]], - ['gpio_5fpin_5ftx_6',['GPIO_PIN_TX',['../struct_u_a_r_t___settings_type_def.html#a5f1babfcfb436cd77f5614253c0a5bef',1,'UART_SettingsTypeDef']]], - ['gpiox_7',['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']]] + ['hbt_0',['hbt',['../group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d',1,'bench_time.h']]] ]; diff --git a/Doc/html/search/variables_4.js b/Doc/html/search/variables_4.js index 182e697..3cfd1f9 100644 --- a/Doc/html/search/variables_4.js +++ b/Doc/html/search/variables_4.js @@ -1,7 +1,4 @@ var searchData= [ - ['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']]] + ['is_5frunning_0',['is_running',['../struct_bench_time_channel__t.html#a0f80bb194231df7921712d20bac603c9',1,'BenchTimeChannel_t']]] ]; diff --git a/Doc/html/search/variables_5.js b/Doc/html/search/variables_5.js index 3cfd1f9..4238443 100644 --- a/Doc/html/search/variables_5.js +++ b/Doc/html/search/variables_5.js @@ -1,4 +1,6 @@ var searchData= [ - ['is_5frunning_0',['is_running',['../struct_bench_time_channel__t.html#a0f80bb194231df7921712d20bac603c9',1,'BenchTimeChannel_t']]] + ['last_5fticks_0',['last_ticks',['../struct_bench_time_stats__t.html#a2c739e1db6b26ceac5db3f2c44c177a0',1,'BenchTimeStats_t']]], + ['loss_1',['loss',['../struct_gen_optimizer__t.html#ae74a211c5ab6d58ffc147bb65e8fdafa',1,'GenOptimizer_t']]], + ['lr_2',['lr',['../struct_h_f___stack_frame__t.html#a6e51904297f7725e96d5b5fb291ef577',1,'HF_StackFrame_t']]] ]; diff --git a/Doc/html/search/variables_6.js b/Doc/html/search/variables_6.js index c8e17d1..a383dcc 100644 --- a/Doc/html/search/variables_6.js +++ b/Doc/html/search/variables_6.js @@ -1,10 +1,6 @@ var searchData= [ - ['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']]] + ['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']]], + ['mutation_5famp_2',['mutation_amp',['../struct_gen_optimizer__t.html#ad4dc0e53b3ca6bf2a642dfe7a1d1f26c',1,'GenOptimizer_t']]] ]; diff --git a/Doc/html/search/variables_7.js b/Doc/html/search/variables_7.js index eac5a24..88c43fd 100644 --- a/Doc/html/search/variables_7.js +++ b/Doc/html/search/variables_7.js @@ -1,12 +1,6 @@ var searchData= [ - ['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']]] + ['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_8.js b/Doc/html/search/variables_8.js index 88c43fd..7d04971 100644 --- a/Doc/html/search/variables_8.js +++ b/Doc/html/search/variables_8.js @@ -1,6 +1,5 @@ var searchData= [ - ['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']]] + ['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_9.js b/Doc/html/search/variables_9.js index 7d04971..29cfada 100644 --- a/Doc/html/search/variables_9.js +++ b/Doc/html/search/variables_9.js @@ -1,5 +1,8 @@ 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']]] + ['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_a.js b/Doc/html/search/variables_a.js index 29cfada..599b505 100644 --- a/Doc/html/search/variables_a.js +++ b/Doc/html/search/variables_a.js @@ -1,8 +1,8 @@ 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']]] + ['size_0',['size',['../struct_r_t_t___flash_header__t.html#afd1a5c51af6f97d170c2ccbbe3e34699',1,'RTT_FlashHeader_t']]], + ['sorted_5fidx_1',['sorted_idx',['../struct_gen_optimizer__t.html#a473a62c538392b7735d660f303377320',1,'GenOptimizer_t']]], + ['stability_2',['stability',['../struct_gen_optimizer__t.html#abe0aacea949fbe93e5d4c002e37d7192',1,'GenOptimizer_t']]], + ['start_5ftick_3',['start_tick',['../struct_bench_time_channel__t.html#a8140fe9e3d323404651f0cfeeae53928',1,'BenchTimeChannel_t']]], + ['stats_4',['stats',['../struct_bench_time_channel__t.html#a22a3913e7925aa89cc12ec1d24a6c16c',1,'BenchTimeChannel_t']]] ]; diff --git a/Doc/html/search/variables_b.js b/Doc/html/search/variables_b.js index 928694e..f83ad97 100644 --- a/Doc/html/search/variables_b.js +++ b/Doc/html/search/variables_b.js @@ -1,25 +1,6 @@ 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_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']]] + ['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 index 434af22..e01d476 100644 --- a/Doc/html/struct_bench_time__t-members.html +++ b/Doc/html/struct_bench_time__t-members.html @@ -103,7 +103,7 @@ $(function(){initNavTree('struct_bench_time__t.html','',''); });

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

    - +
    channelsBenchTime_t
    channelsBenchTime_t
    diff --git a/Doc/html/struct_bench_time__t.html b/Doc/html/struct_bench_time__t.html index 440831d..2023713 100644 --- a/Doc/html/struct_bench_time__t.html +++ b/Doc/html/struct_bench_time__t.html @@ -97,7 +97,7 @@ $(function(){initNavTree('struct_bench_time__t.html','','struct_bench_time__t-me
    -
    BenchTime_t Struct Reference
    +
    BenchTime_t Struct Reference
    @@ -121,34 +121,34 @@ $(function(){initNavTree('struct_bench_time__t.html','','struct_bench_time__t-me - - + +

    Public Attributes

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

    Detailed Description

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

    -

    Definition at line 102 of file bench_time.h.

    +

    Definition at line 101 of file bench_time.h.

    Member Data Documentation

    - -

    ◆ channels

    + +

    ◆ channels

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

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

    -

    Definition at line 103 of file bench_time.h.

    +

    Definition at line 102 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
    • +
    • E:/.WORK/STM32/STM_Libs/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 index 7f4e613..4b8eff3 100644 --- a/Doc/html/struct_bench_time__t.js +++ b/Doc/html/struct_bench_time__t.js @@ -1,4 +1,4 @@ var struct_bench_time__t = [ - [ "channels", "struct_bench_time__t.html#a9ae6d45c610be9d4b7628a614ccb06d6", null ] + [ "channels", "struct_bench_time__t.html#a51376c064bdcffba23cf65d0733e3d34", null ] ]; \ No newline at end of file diff --git a/Doc/html/struct_bench_time_channel__t.html b/Doc/html/struct_bench_time_channel__t.html index 09d2745..a35b493 100644 --- a/Doc/html/struct_bench_time_channel__t.html +++ b/Doc/html/struct_bench_time_channel__t.html @@ -97,7 +97,7 @@ $(function(){initNavTree('struct_bench_time_channel__t.html','','struct_bench_ti
    -
    BenchTimeChannel_t Struct Reference
    +
    BenchTimeChannel_t Struct Reference
    @@ -131,7 +131,7 @@ Public Attributes

    Detailed Description

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

    -

    Definition at line 92 of file bench_time.h.

    +

    Definition at line 91 of file bench_time.h.

    Member Data Documentation

    ◆ start_tick

    @@ -147,7 +147,7 @@ Public Attributes

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

    -

    Definition at line 93 of file bench_time.h.

    +

    Definition at line 92 of file bench_time.h.

    @@ -165,7 +165,7 @@ Public Attributes

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

    -

    Definition at line 94 of file bench_time.h.

    +

    Definition at line 93 of file bench_time.h.

    @@ -183,7 +183,7 @@ Public Attributes

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

    -

    Definition at line 95 of file bench_time.h.

    +

    Definition at line 94 of file bench_time.h.

    @@ -201,12 +201,12 @@ Public Attributes

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

    -

    Definition at line 96 of file bench_time.h.

    +

    Definition at line 95 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
    • +
    • E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/bench_time.h
    diff --git a/Doc/html/struct_bench_time_stats__t.html b/Doc/html/struct_bench_time_stats__t.html index 7df43c4..a8e288b 100644 --- a/Doc/html/struct_bench_time_stats__t.html +++ b/Doc/html/struct_bench_time_stats__t.html @@ -97,7 +97,7 @@ $(function(){initNavTree('struct_bench_time_stats__t.html','','struct_bench_time
    -
    BenchTimeStats_t Struct Reference
    +
    BenchTimeStats_t Struct Reference
    @@ -122,7 +122,7 @@ Public Attributes

    Detailed Description

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

    -

    Definition at line 81 of file bench_time.h.

    +

    Definition at line 80 of file bench_time.h.

    Member Data Documentation

    ◆ min_ticks

    @@ -138,7 +138,7 @@ Public Attributes

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

    -

    Definition at line 82 of file bench_time.h.

    +

    Definition at line 81 of file bench_time.h.

    @@ -156,7 +156,7 @@ Public Attributes

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

    -

    Definition at line 83 of file bench_time.h.

    +

    Definition at line 82 of file bench_time.h.

    @@ -174,7 +174,7 @@ Public Attributes

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

    -

    Definition at line 84 of file bench_time.h.

    +

    Definition at line 83 of file bench_time.h.

    @@ -192,7 +192,7 @@ Public Attributes

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

    -

    Definition at line 85 of file bench_time.h.

    +

    Definition at line 84 of file bench_time.h.

    @@ -210,12 +210,12 @@ Public Attributes

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

    -

    Definition at line 86 of file bench_time.h.

    +

    Definition at line 85 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
    • +
    • E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/bench_time.h
    diff --git a/Doc/html/struct_gen_optimizer__t-members.html b/Doc/html/struct_gen_optimizer__t-members.html index df5e548..c935cda 100644 --- a/Doc/html/struct_gen_optimizer__t-members.html +++ b/Doc/html/struct_gen_optimizer__t-members.html @@ -104,15 +104,15 @@ $(function(){initNavTree('struct_gen_optimizer__t.html','',''); });

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

    - + - + - +
    cand_indexGenOptimizer_t
    candidatesGenOptimizer_t
    candidatesGenOptimizer_t
    gen_indexGenOptimizer_t
    gen_mutGenOptimizer_t
    lossGenOptimizer_t
    lossGenOptimizer_t
    mutation_ampGenOptimizer_t
    n_bestGenOptimizer_t
    n_candGenOptimizer_t
    n_paramsGenOptimizer_t
    sorted_idxGenOptimizer_t
    sorted_idxGenOptimizer_t
    stabilityGenOptimizer_t
    diff --git a/Doc/html/struct_gen_optimizer__t.html b/Doc/html/struct_gen_optimizer__t.html index 2ef2f85..0d472e2 100644 --- a/Doc/html/struct_gen_optimizer__t.html +++ b/Doc/html/struct_gen_optimizer__t.html @@ -97,7 +97,7 @@ $(function(){initNavTree('struct_gen_optimizer__t.html','','struct_gen_optimizer
    -
    GenOptimizer_t Struct Reference
    +
    GenOptimizer_t Struct Reference
    @@ -124,17 +124,17 @@ Public Attributes  Индекс популяции
    float gen_mut  Амплитуда мутации у текущей популяции
    -float loss [100] - Loss для каждого кандидата
    -float candidates [100][20] - Параметры кандидатов
    -uint16_t sorted_idx [100] - Индексы отсортированных кандидатов
    +float loss [GEN_MAX_CANDIDATES] + Loss для каждого кандидата
    +float candidates [GEN_MAX_CANDIDATES][GEN_MAX_PARAMS] + Параметры кандидатов
    +uint16_t sorted_idx [GEN_MAX_CANDIDATES] + Индексы отсортированных кандидатов

    Detailed Description

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

    -

    Definition at line 102 of file gen_optimizer.h.

    +

    Definition at line 101 of file gen_optimizer.h.

    Member Data Documentation

    ◆ stability

    @@ -150,7 +150,7 @@ Public Attributes

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

    -

    Definition at line 103 of file gen_optimizer.h.

    +

    Definition at line 102 of file gen_optimizer.h.

    @@ -168,7 +168,7 @@ Public Attributes

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

    -

    Definition at line 105 of file gen_optimizer.h.

    +

    Definition at line 104 of file gen_optimizer.h.

    @@ -186,7 +186,7 @@ Public Attributes

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

    -

    Definition at line 106 of file gen_optimizer.h.

    +

    Definition at line 105 of file gen_optimizer.h.

    @@ -204,7 +204,7 @@ Public Attributes

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

    -

    Definition at line 107 of file gen_optimizer.h.

    +

    Definition at line 106 of file gen_optimizer.h.

    @@ -222,7 +222,7 @@ Public Attributes

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

    -

    Definition at line 108 of file gen_optimizer.h.

    +

    Definition at line 107 of file gen_optimizer.h.

    @@ -240,7 +240,7 @@ Public Attributes

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

    -

    Definition at line 110 of file gen_optimizer.h.

    +

    Definition at line 109 of file gen_optimizer.h.

    @@ -258,7 +258,7 @@ Public Attributes

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

    -

    Definition at line 111 of file gen_optimizer.h.

    +

    Definition at line 110 of file gen_optimizer.h.

    @@ -276,66 +276,66 @@ Public Attributes

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

    -

    Definition at line 114 of file gen_optimizer.h.

    +

    Definition at line 113 of file gen_optimizer.h.

    - -

    ◆ loss

    + +

    ◆ loss

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

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

    -

    Definition at line 116 of file gen_optimizer.h.

    +

    Definition at line 115 of file gen_optimizer.h.

    - -

    ◆ candidates

    + +

    ◆ candidates

    - +
    float GenOptimizer_t::candidates[100][20]float GenOptimizer_t::candidates[GEN_MAX_CANDIDATES][GEN_MAX_PARAMS]

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

    -

    Definition at line 117 of file gen_optimizer.h.

    +

    Definition at line 116 of file gen_optimizer.h.

    - -

    ◆ sorted_idx

    + +

    ◆ sorted_idx

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

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

    -

    Definition at line 118 of file gen_optimizer.h.

    +

    Definition at line 117 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 index 1a11730..a7369c4 100644 --- a/Doc/html/struct_gen_optimizer__t.js +++ b/Doc/html/struct_gen_optimizer__t.js @@ -8,7 +8,7 @@ var struct_gen_optimizer__t = [ "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 ] + [ "loss", "struct_gen_optimizer__t.html#ae74a211c5ab6d58ffc147bb65e8fdafa", null ], + [ "candidates", "struct_gen_optimizer__t.html#af0161e7c0b6ab691b8b59d522808f947", null ], + [ "sorted_idx", "struct_gen_optimizer__t.html#a473a62c538392b7735d660f303377320", null ] ]; \ No newline at end of file diff --git a/Doc/html/struct_h_f___stack_frame__t.html b/Doc/html/struct_h_f___stack_frame__t.html index b22e526..5b52ce3 100644 --- a/Doc/html/struct_h_f___stack_frame__t.html +++ b/Doc/html/struct_h_f___stack_frame__t.html @@ -97,7 +97,7 @@ $(function(){initNavTree('struct_h_f___stack_frame__t.html','','struct_h_f___sta
    -
    HF_StackFrame_t Struct Reference
    +
    HF_StackFrame_t Struct Reference
    @@ -129,7 +129,7 @@ Public Attributes

    Контекст стек-фрейма процессора при HardFault.

    Сохраняет регистры R0-R3, R12, LR, PC, PSR для последующего анализа.

    -

    Definition at line 476 of file trace.h.

    +

    Definition at line 475 of file trace.h.

    Member Data Documentation

    ◆ r0

    @@ -145,7 +145,7 @@ Public Attributes

    Регистр R0.

    -

    Definition at line 477 of file trace.h.

    +

    Definition at line 476 of file trace.h.

    @@ -163,7 +163,7 @@ Public Attributes

    Регистр R1.

    -

    Definition at line 478 of file trace.h.

    +

    Definition at line 477 of file trace.h.

    @@ -181,7 +181,7 @@ Public Attributes

    Регистр R2.

    -

    Definition at line 479 of file trace.h.

    +

    Definition at line 478 of file trace.h.

    @@ -199,7 +199,7 @@ Public Attributes

    Регистр R3.

    -

    Definition at line 480 of file trace.h.

    +

    Definition at line 479 of file trace.h.

    @@ -217,7 +217,7 @@ Public Attributes

    Регистр R12.

    -

    Definition at line 481 of file trace.h.

    +

    Definition at line 480 of file trace.h.

    @@ -235,7 +235,7 @@ Public Attributes

    Link Register.

    -

    Definition at line 482 of file trace.h.

    +

    Definition at line 481 of file trace.h.

    @@ -253,7 +253,7 @@ Public Attributes

    Program Counter.

    -

    Definition at line 483 of file trace.h.

    +

    Definition at line 482 of file trace.h.

    @@ -271,12 +271,12 @@ Public Attributes

    Program Status Register.

    -

    Definition at line 484 of file trace.h.

    +

    Definition at line 483 of file trace.h.


    The documentation for this struct was generated from the following file:
      -
    • E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/trace.h
    • +
    • E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/trace.h
    diff --git a/Doc/html/struct_r_t_t___flash_header__t-members.html b/Doc/html/struct_r_t_t___flash_header__t-members.html index f48c46e..fdc7a2b 100644 --- a/Doc/html/struct_r_t_t___flash_header__t-members.html +++ b/Doc/html/struct_r_t_t___flash_header__t-members.html @@ -103,7 +103,7 @@ $(function(){initNavTree('struct_r_t_t___flash_header__t.html','',''); });

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

    - +
    dataRTT_FlashHeader_t
    dataRTT_FlashHeader_t
    sizeRTT_FlashHeader_t
    tagRTT_FlashHeader_t
    diff --git a/Doc/html/struct_r_t_t___flash_header__t.html b/Doc/html/struct_r_t_t___flash_header__t.html index 2933e44..a9e6552 100644 --- a/Doc/html/struct_r_t_t___flash_header__t.html +++ b/Doc/html/struct_r_t_t___flash_header__t.html @@ -97,7 +97,7 @@ $(function(){initNavTree('struct_r_t_t___flash_header__t.html','','struct_r_t_t_
    -
    RTT_FlashHeader_t Struct Reference
    +
    RTT_FlashHeader_t Struct Reference
    @@ -112,13 +112,13 @@ Public Attributes  Уникальный идентификатор буфера
    uint32_t size  Размер данных
    -char data [1024] - Буфер RTT.
    +char data [RTT_FLASH_BUFFER_SIZE] + Буфер RTT.

    Detailed Description

    Структура RTT, которая будет положена в Flash.

    -

    Definition at line 193 of file trace.h.

    +

    Definition at line 192 of file trace.h.

    Member Data Documentation

    ◆ tag

    @@ -134,7 +134,7 @@ Public Attributes

    Уникальный идентификатор буфера

    -

    Definition at line 194 of file trace.h.

    +

    Definition at line 193 of file trace.h.

    @@ -152,30 +152,30 @@ Public Attributes

    Размер данных

    -

    Definition at line 195 of file trace.h.

    +

    Definition at line 194 of file trace.h.

    - -

    ◆ data

    + +

    ◆ data

    - +
    char RTT_FlashHeader_t::data[1024]char RTT_FlashHeader_t::data[RTT_FLASH_BUFFER_SIZE]

    Буфер RTT.

    -

    Definition at line 196 of file trace.h.

    +

    Definition at line 195 of file trace.h.


    The documentation for this struct was generated from the following file:
      -
    • E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/trace.h
    • +
    • E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/trace.h
    diff --git a/Doc/html/struct_r_t_t___flash_header__t.js b/Doc/html/struct_r_t_t___flash_header__t.js index dc8e11b..b76051e 100644 --- a/Doc/html/struct_r_t_t___flash_header__t.js +++ b/Doc/html/struct_r_t_t___flash_header__t.js @@ -2,5 +2,5 @@ var struct_r_t_t___flash_header__t = [ [ "tag", "struct_r_t_t___flash_header__t.html#a844ee5470a323a749856cbb7a682dc57", null ], [ "size", "struct_r_t_t___flash_header__t.html#afd1a5c51af6f97d170c2ccbbe3e34699", null ], - [ "data", "struct_r_t_t___flash_header__t.html#ae7276198385c8d6f6508f433d042d52a", null ] + [ "data", "struct_r_t_t___flash_header__t.html#a1100df39b0eccb835946f4c13de23b4e", null ] ]; \ No newline at end of file diff --git a/Doc/html/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n-members.html b/Doc/html/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n-members.html new file mode 100644 index 0000000..22103ce --- /dev/null +++ b/Doc/html/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n-members.html @@ -0,0 +1,122 @@ + + + + + + + +MyLibs: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    SEGGER_RTT_BUFFER_DOWN Member List
    +
    +
    + +

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

    + + + + + + + +
    Flags (defined in SEGGER_RTT_BUFFER_DOWN)SEGGER_RTT_BUFFER_DOWN
    pBuffer (defined in SEGGER_RTT_BUFFER_DOWN)SEGGER_RTT_BUFFER_DOWN
    RdOff (defined in SEGGER_RTT_BUFFER_DOWN)SEGGER_RTT_BUFFER_DOWN
    SizeOfBuffer (defined in SEGGER_RTT_BUFFER_DOWN)SEGGER_RTT_BUFFER_DOWN
    sName (defined in SEGGER_RTT_BUFFER_DOWN)SEGGER_RTT_BUFFER_DOWN
    WrOff (defined in SEGGER_RTT_BUFFER_DOWN)SEGGER_RTT_BUFFER_DOWN
    +
    +
    + + + + diff --git a/Doc/html/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n.html b/Doc/html/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n.html new file mode 100644 index 0000000..0faab77 --- /dev/null +++ b/Doc/html/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n.html @@ -0,0 +1,234 @@ + + + + + + + +MyLibs: SEGGER_RTT_BUFFER_DOWN Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    SEGGER_RTT_BUFFER_DOWN Struct Reference
    +
    +
    + + + + + + + + +

    +Public Attributes

    const char * sName
    char * pBuffer
    unsigned SizeOfBuffer
    volatile unsigned WrOff
    unsigned RdOff
    unsigned Flags
    +

    Detailed Description

    +
    +

    Definition at line 330 of file SEGGER_RTT.h.

    +

    Member Data Documentation

    + +

    ◆ sName

    + +
    +
    + + + + +
    const char* SEGGER_RTT_BUFFER_DOWN::sName
    +
    + +

    Definition at line 331 of file SEGGER_RTT.h.

    + +
    +
    + +

    ◆ pBuffer

    + +
    +
    + + + + +
    char* SEGGER_RTT_BUFFER_DOWN::pBuffer
    +
    + +

    Definition at line 332 of file SEGGER_RTT.h.

    + +
    +
    + +

    ◆ SizeOfBuffer

    + +
    +
    + + + + +
    unsigned SEGGER_RTT_BUFFER_DOWN::SizeOfBuffer
    +
    + +

    Definition at line 333 of file SEGGER_RTT.h.

    + +
    +
    + +

    ◆ WrOff

    + +
    +
    + + + + +
    volatile unsigned SEGGER_RTT_BUFFER_DOWN::WrOff
    +
    + +

    Definition at line 334 of file SEGGER_RTT.h.

    + +
    +
    + +

    ◆ RdOff

    + +
    +
    + + + + +
    unsigned SEGGER_RTT_BUFFER_DOWN::RdOff
    +
    + +

    Definition at line 335 of file SEGGER_RTT.h.

    + +
    +
    + +

    ◆ Flags

    + +
    +
    + + + + +
    unsigned SEGGER_RTT_BUFFER_DOWN::Flags
    +
    + +

    Definition at line 336 of file SEGGER_RTT.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/RTT/SEGGER_RTT.h
    • +
    +
    +
    + +
    + + + + diff --git a/Doc/html/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p-members.html b/Doc/html/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p-members.html new file mode 100644 index 0000000..78beae4 --- /dev/null +++ b/Doc/html/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p-members.html @@ -0,0 +1,122 @@ + + + + + + + +MyLibs: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    SEGGER_RTT_BUFFER_UP Member List
    +
    +
    + +

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

    + + + + + + + +
    Flags (defined in SEGGER_RTT_BUFFER_UP)SEGGER_RTT_BUFFER_UP
    pBuffer (defined in SEGGER_RTT_BUFFER_UP)SEGGER_RTT_BUFFER_UP
    RdOff (defined in SEGGER_RTT_BUFFER_UP)SEGGER_RTT_BUFFER_UP
    SizeOfBuffer (defined in SEGGER_RTT_BUFFER_UP)SEGGER_RTT_BUFFER_UP
    sName (defined in SEGGER_RTT_BUFFER_UP)SEGGER_RTT_BUFFER_UP
    WrOff (defined in SEGGER_RTT_BUFFER_UP)SEGGER_RTT_BUFFER_UP
    +
    +
    + + + + diff --git a/Doc/html/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p.html b/Doc/html/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p.html new file mode 100644 index 0000000..061b8b7 --- /dev/null +++ b/Doc/html/struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p.html @@ -0,0 +1,234 @@ + + + + + + + +MyLibs: SEGGER_RTT_BUFFER_UP Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    SEGGER_RTT_BUFFER_UP Struct Reference
    +
    +
    + + + + + + + + +

    +Public Attributes

    const char * sName
    char * pBuffer
    unsigned SizeOfBuffer
    unsigned WrOff
    volatile unsigned RdOff
    unsigned Flags
    +

    Detailed Description

    +
    +

    Definition at line 317 of file SEGGER_RTT.h.

    +

    Member Data Documentation

    + +

    ◆ sName

    + +
    +
    + + + + +
    const char* SEGGER_RTT_BUFFER_UP::sName
    +
    + +

    Definition at line 318 of file SEGGER_RTT.h.

    + +
    +
    + +

    ◆ pBuffer

    + +
    +
    + + + + +
    char* SEGGER_RTT_BUFFER_UP::pBuffer
    +
    + +

    Definition at line 319 of file SEGGER_RTT.h.

    + +
    +
    + +

    ◆ SizeOfBuffer

    + +
    +
    + + + + +
    unsigned SEGGER_RTT_BUFFER_UP::SizeOfBuffer
    +
    + +

    Definition at line 320 of file SEGGER_RTT.h.

    + +
    +
    + +

    ◆ WrOff

    + +
    +
    + + + + +
    unsigned SEGGER_RTT_BUFFER_UP::WrOff
    +
    + +

    Definition at line 321 of file SEGGER_RTT.h.

    + +
    +
    + +

    ◆ RdOff

    + +
    +
    + + + + +
    volatile unsigned SEGGER_RTT_BUFFER_UP::RdOff
    +
    + +

    Definition at line 322 of file SEGGER_RTT.h.

    + +
    +
    + +

    ◆ Flags

    + +
    +
    + + + + +
    unsigned SEGGER_RTT_BUFFER_UP::Flags
    +
    + +

    Definition at line 323 of file SEGGER_RTT.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/RTT/SEGGER_RTT.h
    • +
    +
    +
    + +
    + + + + diff --git a/Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b-members.html b/Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b-members.html new file mode 100644 index 0000000..f5f7eb1 --- /dev/null +++ b/Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b-members.html @@ -0,0 +1,121 @@ + + + + + + + +MyLibs: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    SEGGER_RTT_CB Member List
    +
    +
    + +

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

    + + + + + + +
    acID (defined in SEGGER_RTT_CB)SEGGER_RTT_CB
    aDown (defined in SEGGER_RTT_CB)SEGGER_RTT_CB
    aUp (defined in SEGGER_RTT_CB)SEGGER_RTT_CB
    MaxNumDownBuffers (defined in SEGGER_RTT_CB)SEGGER_RTT_CB
    MaxNumUpBuffers (defined in SEGGER_RTT_CB)SEGGER_RTT_CB
    +
    +
    + + + + diff --git a/Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b.html b/Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b.html new file mode 100644 index 0000000..c25d51e --- /dev/null +++ b/Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b.html @@ -0,0 +1,230 @@ + + + + + + + +MyLibs: SEGGER_RTT_CB Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    SEGGER_RTT_CB Struct Reference
    +
    +
    +
    Collaboration diagram for SEGGER_RTT_CB:
    +
    +
    + + + + + + + + +

    +Public Attributes

    char acID [16]
    int MaxNumUpBuffers
    int MaxNumDownBuffers
    SEGGER_RTT_BUFFER_UP aUp [SEGGER_RTT_MAX_NUM_UP_BUFFERS]
    SEGGER_RTT_BUFFER_DOWN aDown [SEGGER_RTT_MAX_NUM_DOWN_BUFFERS]
    +

    Detailed Description

    +
    +

    Definition at line 344 of file SEGGER_RTT.h.

    +

    Member Data Documentation

    + +

    ◆ acID

    + +
    +
    + + + + +
    char SEGGER_RTT_CB::acID[16]
    +
    + +

    Definition at line 345 of file SEGGER_RTT.h.

    + +
    +
    + +

    ◆ MaxNumUpBuffers

    + +
    +
    + + + + +
    int SEGGER_RTT_CB::MaxNumUpBuffers
    +
    + +

    Definition at line 346 of file SEGGER_RTT.h.

    + +
    +
    + +

    ◆ MaxNumDownBuffers

    + +
    +
    + + + + +
    int SEGGER_RTT_CB::MaxNumDownBuffers
    +
    + +

    Definition at line 347 of file SEGGER_RTT.h.

    + +
    +
    + +

    ◆ aUp

    + +
    +
    + + + + +
    SEGGER_RTT_BUFFER_UP SEGGER_RTT_CB::aUp[SEGGER_RTT_MAX_NUM_UP_BUFFERS]
    +
    + +

    Definition at line 348 of file SEGGER_RTT.h.

    + +
    +
    + +

    ◆ aDown

    + +
    +
    + + + + +
    SEGGER_RTT_BUFFER_DOWN SEGGER_RTT_CB::aDown[SEGGER_RTT_MAX_NUM_DOWN_BUFFERS]
    +
    + +

    Definition at line 349 of file SEGGER_RTT.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/RTT/SEGGER_RTT.h
    • +
    +
    +
    + +
    + + + + diff --git a/Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b__coll__graph.map b/Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b__coll__graph.map new file mode 100644 index 0000000..a1fb81e --- /dev/null +++ b/Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b__coll__graph.md5 b/Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b__coll__graph.md5 new file mode 100644 index 0000000..ec95669 --- /dev/null +++ b/Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b__coll__graph.md5 @@ -0,0 +1 @@ +43312c82f221aa648f652e4f17453ff0 \ No newline at end of file diff --git a/Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b__coll__graph.png b/Doc/html/struct_s_e_g_g_e_r___r_t_t___c_b__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0163977f691d9a04d53fe6223ab086c56956a207 GIT binary patch literal 4216 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 + + + + + + +MyLibs: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    SEGGER_RTT_PRINTF_DESC Member List
    +
    +
    + +

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

    + + + + + + +
    BufferSize (defined in SEGGER_RTT_PRINTF_DESC)SEGGER_RTT_PRINTF_DESC
    Cnt (defined in SEGGER_RTT_PRINTF_DESC)SEGGER_RTT_PRINTF_DESC
    pBuffer (defined in SEGGER_RTT_PRINTF_DESC)SEGGER_RTT_PRINTF_DESC
    ReturnValue (defined in SEGGER_RTT_PRINTF_DESC)SEGGER_RTT_PRINTF_DESC
    RTTBufferIndex (defined in SEGGER_RTT_PRINTF_DESC)SEGGER_RTT_PRINTF_DESC
    +
    +
    + + + + diff --git a/Doc/html/struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c.html b/Doc/html/struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c.html new file mode 100644 index 0000000..d2aecab --- /dev/null +++ b/Doc/html/struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c.html @@ -0,0 +1,217 @@ + + + + + + + +MyLibs: SEGGER_RTT_PRINTF_DESC Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MyLibs 1.0 +
    +
    Расширенные библиотеки для STM32
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    SEGGER_RTT_PRINTF_DESC Struct Reference
    +
    +
    + + + + + + + +

    +Public Attributes

    char * pBuffer
    unsigned BufferSize
    unsigned Cnt
    int ReturnValue
    unsigned RTTBufferIndex
    +

    Detailed Description

    +
    +

    Definition at line 85 of file SEGGER_RTT_printf.c.

    +

    Member Data Documentation

    + +

    ◆ pBuffer

    + +
    +
    + + + + +
    char* SEGGER_RTT_PRINTF_DESC::pBuffer
    +
    + +

    Definition at line 86 of file SEGGER_RTT_printf.c.

    + +
    +
    + +

    ◆ BufferSize

    + +
    +
    + + + + +
    unsigned SEGGER_RTT_PRINTF_DESC::BufferSize
    +
    + +

    Definition at line 87 of file SEGGER_RTT_printf.c.

    + +
    +
    + +

    ◆ Cnt

    + +
    +
    + + + + +
    unsigned SEGGER_RTT_PRINTF_DESC::Cnt
    +
    + +

    Definition at line 88 of file SEGGER_RTT_printf.c.

    + +
    +
    + +

    ◆ ReturnValue

    + +
    +
    + + + + +
    int SEGGER_RTT_PRINTF_DESC::ReturnValue
    +
    + +

    Definition at line 90 of file SEGGER_RTT_printf.c.

    + +
    +
    + +

    ◆ RTTBufferIndex

    + +
    +
    + + + + +
    unsigned SEGGER_RTT_PRINTF_DESC::RTTBufferIndex
    +
    + +

    Definition at line 92 of file SEGGER_RTT_printf.c.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + +
    + + + + diff --git a/Doc/html/topics.html b/Doc/html/topics.html index 121e67f..729c040 100644 --- a/Doc/html/topics.html +++ b/Doc/html/topics.html @@ -101,41 +101,26 @@ $(function(){initNavTree('topics.html','',''); });
    Here is a list of all topics with brief descriptions:
    -
    [detail level 12345]
    +
    [detail level 1234]
    - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + +
     My LibsВсе используемые MyLibs библиотеки
     ConfigsКонфигурации для библиотек MyLibs
     Trace configsКонфигурация трекеров и трассировки
     Genetic configsКонфигурация генетического алгоритма обучения
     Libraries configsПодключение различных модулей библиотеки
     General ToolsОбщие макросы и typedef'ы, используемые по всему проекту
     General ToolsОбщие макросы и typedef'ы, используемые по всему проекту
     Bit access definesМакросы и typedef'ы для работы с битами в unsigned типах
     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
     Error Handler definesДефайны для обработки ошибок
     Delays definesМакросы и определения для работы с задержками в миллисекундах
     Utils definesОбщие вспомогательные макросы
     Debug ToolsУтилиты для тестирования программы
     Time measurementБиблиотека для измерения времени/тиков между событиями
     Genetic optimizerБиблиотека для эволюционного подбора параметров
     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Дефайны для работы с трекерами
    diff --git a/Doc/html/trace_8h.html b/Doc/html/trace_8h.html index 7ef9cc8..d9c3886 100644 --- a/Doc/html/trace_8h.html +++ b/Doc/html/trace_8h.html @@ -5,7 +5,7 @@ -MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/trace.h File Reference +MyLibs: E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/trace.h File Reference @@ -110,30 +110,38 @@ $(function(){initNavTree('trace_8h.html','',''); });
    This graph shows which files directly or indirectly include this file:
    @@ -175,7 +183,7 @@ Functions

    Variables

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

    Detailed Description

    diff --git a/Doc/html/trace_8h__dep__incl.map b/Doc/html/trace_8h__dep__incl.map index 6b80f95..5bf638e 100644 --- a/Doc/html/trace_8h__dep__incl.map +++ b/Doc/html/trace_8h__dep__incl.map @@ -1,5 +1,5 @@ - - - - + + + + diff --git a/Doc/html/trace_8h__dep__incl.md5 b/Doc/html/trace_8h__dep__incl.md5 index 6f819df..cd77249 100644 --- a/Doc/html/trace_8h__dep__incl.md5 +++ b/Doc/html/trace_8h__dep__incl.md5 @@ -1 +1 @@ -c5d3b4cfb2b711fb3b29507669fb1db5 \ No newline at end of file +6b76e360001b45ced830ddfaeaff5d15 \ No newline at end of file diff --git a/Doc/html/trace_8h__dep__incl.png b/Doc/html/trace_8h__dep__incl.png index ae61f351c5f60ecc7f039f8519a2db36ecd56f85..8017c231ae74bc706eba9c807968d6e2d3a7f926 100644 GIT binary patch literal 2894 zcmbW3dpHwpAIEi4L_PLYBB?Zz9HL0ls3w-v97;BaCuhweW9Bdw2E|djEQ_`?~MnANT#o=l=bE_xJv$LhUT&WtC;6 zq@?5_R$xa-?3c{CUDA@3$iF5h3DREHmSCyPU*mauS(cR4?rjk8CFiJu1$O5XRZFGU zi~eKD##?S#JWAW%T6}3&!2DUeBsI-UH6YMR4w9*fX>0tf*XL{7w#bD^ zMM_PqhRbPl8IExWn$weRmd7MCEli=QigjP% zGyF}st3u*ZFdx_aYBYc0CTIm}AegkU2Pj-rVou(;)A!&ejGJ{I#0pFex~5G)2C>HH zDsZiEs4bf2T+Dhr55JnWgvs!Seyx3{`DL}s-0)VF3%O0xRmAa7YUtns#yKCTfq*?!F2a?VG&3yo zPEyo~pjyTUcz`Yh{8j@pdeqlcmo#;w5~!n&LRaAvsi#=4Uv-OBh)tg=XN+&G;<`{p z_bOyo0zKe`4E-|ssW@qVG5dEy^qFS9VeWGLu5Juq{wz03N&&nOGP+jiFjU^KW?>7^ ztu&jfj*n=O+5y?BiMIocyu3aVSu-2RXM*z4=@%NOlt1pH!E8_TXD_IG%ju*awi}U$ zCHZBQFwc$Sox@sSM|1*=AY3;d<{1|nfE*0HQ^@!{tm8JPO3!_u(kq&Bq%Zdo`}e9K zGH=Jfn?$;o?xxZ=Z^ni+$H9kvtY5H?B3i-}5FOU3$nYWGK*N*V0EilG@r}D&vHNo- z)$W)TcDo}Z^d_Q$HB;Ff-d{`>;37xJHl|B?-HHH0VDuoT`>TN+O~$qJ6iHU6--fh& z2t#X9XEat5kyq%Xo&#rag@yJ=yq?ySK4E*xA3O?tBt-g8FCO;(%w0VS{6Ej`C`9VP z$m^f03#?yvLpj^ym|&ix*jP!=I~$1sE4)Y9wO zZw%|aZ|;!>(W)0^xG7nR*FIf95+k&YFJYZ$qOuh&z{w8rP?G}%&s}S~s)QN-LY09Z zYD*<4Q|a&$CE`ky(R*g|myTWnUyWX3h-MD?9)EiP;`l_7m~~u1;oD5W zylO-{RFzGVUH{5noXWc*HV1UGmdxw-x&|k9;m(D&L+L}hzVaGBztTeQzN+DjEh*8u>7155XhXj zGBE60RpBgE4cSvi5eoa!$etw2r@#mDYG!9^=D{(n7@te%s^^5Ziyp?xGquC63DwCQ zZ}B>xfl8nqIH-Er+VOpF5~h>y3pF~l*06-Z-K|Rjo(!0uA%DpDi>!DtwAWrG;b?8&cjbsBSEbqg-)0PzW`$Wpy=UzE5oQUL3j?Z} zR#^OeyJ5WVZ{j$;rBVL$+y>M{)zlol`)>*=Ddn$jwgQ-6`iBNc#P$E)>OQ`CT|DF$ z?t3tqfZOHAi(7lkc{f(HiQJ^-CuApdGB!Kg?{)|inmao;`QPdrmeZ4OwT`3MB3*Y% zww^&j>*k@SdhY8l`nrdo&KJO2Li$h3owMjF0>bl$G@_yAwl*SD@BaaO8nkuw1B$yj zvSOSu*RdRo!-=&Cy$#MC*43q)ybSWs*a{4bLJSUC@wLG!S=~b&HGi5 z$0Wyr#f(UpT0VeQrou96j;T}^F!wElTLI217!gJ{UQ!{Nd89B?x*P@L<7 z7_yzEPCI(#wpPH?FO&wbbx4G1qn4VJ-Ld z|EuzkWZCgZS)nr%2117xrvepZ@`2ZrvKLz$k?;y^V|D?Xq)`+y zA)Qg7m%X4NSIBUH@k!SN2ehrNznIv+`FMZrY;7s%&VYbE9EOoxEN~l|@Fpfe)MZpu zms62`MFOo4vrEi7sUADvV_Ms8$X+BSo{vnE`}jhee0 zoV$u5J^9G%{8$Kg>YznWN?u~r{Uq08d_WYv>$9?D8u?`L zO66ykj=4h{)iA-oj*lFDND5^%McrHke!gd_?GgtS3ciMH`I|fJN&Mm0(66);O0vXC t+>Qu5b35_o-7g#H&217pYHql(`!Mi}MR{Mq+%J0yv9JTzT>j(UzX810yQcsE literal 2676 zcmchZc{CgN7RRHebV_Vxcy`7zVFszK+9o<}G?W1wN@HBBq&CW&U^2iIdA#%y?f8^-t+zIcg{WE`}zIS9qr-3lkz74 z007X+66SQ&+mBB338ABkM5@#sH6b4xI1F(3ImASSK~_8%G$G)EWYY@ zpa4z8z13VUA1lpK{X)Ye-AZB_m?JT2EmB+yd-FE;xo5ZM?S&pO%bvayma0j>m{P8~ zI(!+JE1>pUT(RDMN)tc{``l(F%6Y}83LVLwJmB&Iq1u}y`ZyHc&}8mP zd_P>X?M}Cic3W8H{Nk^Oolv?cMLt!1>PKIQBUF&1!z0*2w+gkYLXtkVEYvT^*B<;l zlUnbcxu!lLyEb$A-uBHsbU{Hk)1O<#uxea)yhnf(u!5v~#a{DlPqn0&#WO?HUF68p z!mZ(t!Qo+3zoUxU)};@&>St1e!27wFnvIzjQq!#LBr4N67CS^yxkgl|%!_X-jhm)a ztXsv34h+pHs40+g60^-rWpbn1yW?Xb!@O#f8LW3ys_6!%cU;O$%SDE~-~X(J-qdiu z#awI*YTbw>Io>whh)fkSiF}8zo)R)%Jcv7?)l0YiHdMui9yxn{l47r|0f#?&iksq* zJF>E}vizJ3eWNI)rdx#YGz=mhjx61k#~&qC-UmEv4tAPfa|Xd zO}tzM+}|QBr4gqwAY-<)niWb#+;l4pi-utfnSLZ@9_E}pyG-#+oMR*heI$48c zYdy$jq4_TcJZv#@dv33>CV~;0FPxVSQs0FZpf*{!P-{FL)dY{o@;p&p4reop+5R$v z1?k9)x#x+-ovWcf$?}&zG;{>_a!-rEej_Qv1X_|tQ+ zlClzQ<>^q7ma1x#O2$J4xu);>9za%1Go}=&>DS2ZZcM&g1Db#aD=%e$IxKB79zS#9%Z}>*l&4lfe>}+R9$ZfkQ*I5GvYk0iQOLE?!w5e8Vw2U=CAiDI zaNgjYgy4`^AAl?f?&e+){fG2Aa9SO$w$Y3RxifGlgO)h|(V-)%d5S zUAA+WoKOdzw-(vt2=BdF3fW6Z3)QUDrHhX|MymYqY+^$5cq8{Xt;6oH>UEZV)#}9X zqfv8?PVVs`k3xUT5ivz}r^MhqWi@S6&Iml5*7}R5L-{mKnfBD`8iE!G9pLx z4w!&hh2U=ZSLs`s$reV$7OlrET-ic^y^r+_J|uX;vDQE%y{ihT$$XgP_eqH?!=Gdz z4aUHG0j`oEc{RbXmP-#v2QHV5zUe3!5PM#n+40d6$6k-+pSGjBjD%FJ`Z+}v8sQ*y zByq)R@+0%|n0q2J$A&zLvtqY8zaBXhuH1hGsf5-w!KF_4-u@@v{<4>!Y4<;n+rR5} zH845jXYh~4CB9B7$z~hO9ri(b5A|+Zo8yuX4+FJQyyHU9Xx>5~s|QmZp_r{(t!y4K z4>R){ZQE9#SOg3kPTF%i@+95_8%~V3f!duX3ZE`@P9TXZtGpL)AnI+ z)dY597Ng`$aM*RruEXJfa7~~>Cy91z?RWyGt)Iax8a~5sJa^6=(WvYw~OtS_9o(Y5F9F zT#U_fZFMVTX(m2V&DlguH5fVi7`i{-=4S7@Hk+l(S+^eJbz>(3oM zQag-jVgh~uH(W-11<}^{b|HV)O{LYNalLRAnkjJGhCjHD?b|Wo?VNhQpA`R_> - - - - - - - + + + + + + + + - + + + + + + + + + diff --git a/Doc/html/trace_8h__incl.md5 b/Doc/html/trace_8h__incl.md5 index ce424ed..c116812 100644 --- a/Doc/html/trace_8h__incl.md5 +++ b/Doc/html/trace_8h__incl.md5 @@ -1 +1 @@ -ed068a6046f61f40acf42f3d1c63e4f1 \ No newline at end of file +0e0a424cbe02e9be0d7b667e464aa4f3 \ No newline at end of file diff --git a/Doc/html/trace_8h__incl.png b/Doc/html/trace_8h__incl.png index 99f913e3de866b053ceec25beb3bfc9c37ae65fe..fd81320bea56ed48e30eab3bc737a44b885e7af0 100644 GIT binary patch literal 12483 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 -MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/trace.h Source File +MyLibs: E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/trace.h Source File @@ -106,609 +106,606 @@ $(function(){initNavTree('trace_8h_source.html','',''); });
    4* @brief Заголочный файл для работы с трассировкой.
    5**************************************************************************
    6* @addtogroup TRACE Trace defines
    -
    7* @ingroup MYLIBS_DEFINES
    -
    8* @brief Дефайны для работы с трассировкой
    -
    9*************************************************************************/
    -
    10#ifndef __TRACE_H_
    -
    11#define __TRACE_H_
    -
    12#include "mylibs_defs.h"
    -
    13
    -
    14#include <string.h>
    -
    15/**
    -
    16 * @addtogroup TRACE_SERIAL Serial trace defines
    -
    17 * @ingroup TRACE
    -
    18 * @brief Дефайны для работы с serial трассировкой (SWO, RTT)
    -
    19 * @details В зависимости от настроек определяется дефайн @ref my_printf() и @ref log_printf() для работы с трассировкой:
    -
    20 - @ref SERIAL_TRACE_ENABLE - Если трассировка отключена, то все дефайны определяются как 'ничего'
    -
    21 и на производительность кода не влияют
    -
    22
    -
    23 - @ref RTT_TRACE_ENABLE - для RTT это будет вызов функции SEGGER_RTT_printf()
    -
    24
    -
    25 Предварительно надо подключить библиотеку SEGGER RTT (SEGGER_RTT.h) и вызвать функцию SEGGER_RTT_Init()
    -
    26
    -
    27 - @ref SWO_TRACE_ENABLE для SWO это будет просто printf()
    -
    28
    -
    29 Предварительно надо подключить библиотеку STDOUT и retarget под ITM:
    -
    30
    -
    31 @verbatim
    -
    32 Manage Run-Time Environment -> Compiler -> I/O -> STDOUT -> ITM
    -
    33 @endverbatim
    -
    34
    -
    35 Для SWO также надо включить трассировку:
    -
    36
    -
    37 @verbatim
    -
    38 Options For Target -> Debug -> Debugger Settings
    -
    39 @endverbatim
    -
    40
    -
    41 В вкладке Debug:
    -
    42 - Port = SW
    -
    43 В вкладке Trace:
    -
    44 - Указать Core Clock
    -
    45 - Выставить Trace Port = SWO
    -
    46 - ITM - выбрать нужный порт (для Keil нулевой порт)
    -
    47
    -
    48
    -
    49 * @{
    -
    50 *
    -
    51 * @def my_printf(...)
    -
    52 * @brief Универсальный макрос для вывода трассировки
    -
    53 * @details Варианты реализации:
    -
    54 * - RTT_TRACE_ENABLE `SEGGER_RTT_printf(0, ...)`
    -
    55 * - SWO_TRACE_ENABLE - `printf(...)`
    -
    56 * - NO_TRACE - пустой макрос
    -
    57 *
    -
    58 * @def log_printf(TAG, fmt, ...)
    -
    59 * @brief Макрос логирования с поддержкой уровней @ref LOG_LEVEL
    -
    60 * @param TAG Тэг лога
    -
    61 * @param fmt, ... Форматируемая строка
    -
    62 * @details Варианты реализации:
    -
    63 * - @ref LOG_LEVEL == 0 - логирование отключено (макрос пустой)
    -
    64 * - @ref LOG_LEVEL == 1 - выводится время @ref local_time и TAG
    -
    65 * @code
    -
    66 [123] [ADC] Measure Done
    -
    67 [456] [ADC] Measure Err
    -
    68 * @endcode
    -
    69 * - @ref LOG_LEVEL >= 2 - выводится время, TAG, имя файла и номер строки
    -
    70 * @code
    -
    71 [123] [ADC] (../Core/Src/adc.c:75) Measure Done
    -
    72 [456] [ADC] (../Core/Src/adc.c:80) Measure Err
    -
    73 * @endcode
    -
    74 */
    -
    75#ifdef SERIAL_TRACE_ENABLE
    -
    76
    -
    77 #if defined(RTT_TRACE_ENABLE)
    -
    78 #undef SWO_TRACE_ENABLE
    -
    79 #include "SEGGER_RTT.h"
    -
    80 #define my_printf(...) SEGGER_RTT_printf(0, __VA_ARGS__)
    -
    81 #elif defined(SWO_TRACE_ENABLE)
    -
    82 #undef RTT_TRACE_ENABLE
    -
    83 #define my_printf(...) printf(__VA_ARGS__)
    -
    84 #else // NO_TRACE
    -
    85 #define my_printf(...)
    -
    86 #warning No trace is selected. Serial debug wont work.
    -
    87 #endif // RTT_TRACE_ENABLE/SWO_TRACE_ENABLE/NO_TRACE
    -
    88#else //SERIAL_TRACE_ENABLE
    -
    89
    -
    90 #define my_printf(...)
    -
    91 #undef RTT_TRACE_ENABLE
    -
    92 #undef SWO_TRACE_ENABLE
    -
    93
    -
    94#endif //SERIAL_TRACE_ENABLE
    +
    7* @brief Дефайны для работы с трассировкой
    +
    8*************************************************************************/
    +
    9#ifndef __TRACE_H_
    +
    10#define __TRACE_H_
    +
    11#include "mylibs_defs.h"
    +
    12
    +
    13#include <string.h>
    +
    14/**
    +
    15 * @addtogroup TRACE_SERIAL Serial trace defines
    +
    16 * @ingroup TRACE
    +
    17 * @brief Дефайны для работы с serial трассировкой (SWO, RTT)
    +
    18 * @details В зависимости от настроек определяется дефайн @ref my_printf() и @ref log_printf() для работы с трассировкой:
    +
    19 - @ref SERIAL_TRACE_ENABLE - Если трассировка отключена, то все дефайны определяются как 'ничего'
    +
    20 и на производительность кода не влияют
    +
    21
    +
    22 - @ref RTT_TRACE_ENABLE - для RTT это будет вызов функции SEGGER_RTT_printf()
    +
    23
    +
    24 Предварительно надо подключить библиотеку SEGGER RTT (SEGGER_RTT.h) и вызвать функцию SEGGER_RTT_Init()
    +
    25
    +
    26 - @ref SWO_TRACE_ENABLE для SWO это будет просто printf()
    +
    27
    +
    28 Предварительно надо подключить библиотеку STDOUT и retarget под ITM:
    +
    29
    +
    30 @verbatim
    +
    31 Manage Run-Time Environment -> Compiler -> I/O -> STDOUT -> ITM
    +
    32 @endverbatim
    +
    33
    +
    34 Для SWO также надо включить трассировку:
    +
    35
    +
    36 @verbatim
    +
    37 Options For Target -> Debug -> Debugger Settings
    +
    38 @endverbatim
    +
    39
    +
    40 В вкладке Debug:
    +
    41 - Port = SW
    +
    42 В вкладке Trace:
    +
    43 - Указать Core Clock
    +
    44 - Выставить Trace Port = SWO
    +
    45 - ITM - выбрать нужный порт (для Keil нулевой порт)
    +
    46
    +
    47
    +
    48 * @{
    +
    49 *
    +
    50 * @def my_printf(...)
    +
    51 * @brief Универсальный макрос для вывода трассировки
    +
    52 * @details Варианты реализации:
    +
    53 * - RTT_TRACE_ENABLE `SEGGER_RTT_printf(0, ...)`
    +
    54 * - SWO_TRACE_ENABLE - `printf(...)`
    +
    55 * - NO_TRACE - пустой макрос
    +
    56 *
    +
    57 * @def log_printf(TAG, fmt, ...)
    +
    58 * @brief Макрос логирования с поддержкой уровней @ref LOG_LEVEL
    +
    59 * @param TAG Тэг лога
    +
    60 * @param fmt, ... Форматируемая строка
    +
    61 * @details Варианты реализации:
    +
    62 * - @ref LOG_LEVEL == 0 - логирование отключено (макрос пустой)
    +
    63 * - @ref LOG_LEVEL == 1 - выводится время @ref local_time и TAG
    +
    64 * @code
    +
    65 [123] [ADC] Measure Done
    +
    66 [456] [ADC] Measure Err
    +
    67 * @endcode
    +
    68 * - @ref LOG_LEVEL >= 2 - выводится время, TAG, имя файла и номер строки
    +
    69 * @code
    +
    70 [123] [ADC] (../Core/Src/adc.c:75) Measure Done
    +
    71 [456] [ADC] (../Core/Src/adc.c:80) Measure Err
    +
    72 * @endcode
    +
    73 */
    +
    74#ifdef SERIAL_TRACE_ENABLE
    +
    75
    +
    76 #if defined(RTT_TRACE_ENABLE)
    +
    77 #undef SWO_TRACE_ENABLE
    +
    78 #include "SEGGER_RTT.h"
    +
    79 #define my_printf(...) SEGGER_RTT_printf(0, __VA_ARGS__)
    +
    80 #elif defined(SWO_TRACE_ENABLE)
    +
    81 #undef RTT_TRACE_ENABLE
    +
    82 #define my_printf(...) printf(__VA_ARGS__)
    +
    83 #else // NO_TRACE
    +
    84 #define my_printf(...)
    +
    85 #warning No trace is selected. Serial debug wont work.
    +
    86 #endif // RTT_TRACE_ENABLE/SWO_TRACE_ENABLE/NO_TRACE
    +
    87#else //SERIAL_TRACE_ENABLE
    +
    88
    +
    89 #define my_printf(...)
    +
    90 #undef RTT_TRACE_ENABLE
    +
    91 #undef SWO_TRACE_ENABLE
    +
    92
    +
    93#endif //SERIAL_TRACE_ENABLE
    +
    94
    95
    -
    96
    -
    97#ifndef local_time
    -
    98#define local_time() HAL_GetTick() ///< Локальное время
    -
    99#endif
    -
    100#ifndef LOG_LEVEL
    -
    101#define LOG_LEVEL 1 ///< @brief Уровень логирования (по умолчанию == 1)
    -
    102#endif
    +
    96#ifndef local_time
    +
    97#define local_time() HAL_GetTick() ///< Локальное время
    +
    98#endif
    +
    99#ifndef LOG_LEVEL
    +
    100#define LOG_LEVEL 1 ///< @brief Уровень логирования (по умолчанию == 1)
    +
    101#endif
    +
    102
    103
    -
    104
    -
    105#if LOG_LEVEL == 0 // лог отключен
    -
    106 #define \
    -
    107log_printf(TAG, fmt, ...)
    -
    108#elif LOG_LEVEL == 1 // только тэг
    -
    -
    109 #define log_printf(TAG, fmt, ...) \
    -
    110my_printf("\n[%lu] [%s] " fmt, \
    -
    111(unsigned long)local_time(), TAG, ##__VA_ARGS__)
    -
    -
    112#elif LOG_LEVEL >= 2 // всё
    -
    113 #define log_printf(TAG, fmt, ...) \
    -
    114my_printf("\n[%lu] [%s] (%s:%d) " fmt, \
    -
    115(unsigned long)local_time(), TAG, __FILE__, __LINE__, ##__VA_ARGS__)
    -
    116#endif
    -
    117
    -
    118/** TRACE_SERIAL
    -
    119 * @}
    -
    120 */
    -
    121
    -
    122/**
    -
    123 * @addtogroup TRACE_GPIO GPIO trace defines
    -
    124 * @ingroup TRACE
    -
    125 * @brief Дефайны для работы с GPIO трассировкой
    -
    126 * @details Определяется дефайны для работы с GPIO трассировкой:
    -
    127 - TRACE_GPIO_RESET() - для сброса ножки GPIO (через BSRR)
    -
    128 - TRACE_GPIO_SET() - для выставления ножки GPIO (через BSRR)
    -
    129
    -
    130 - Если трассировка @ref GPIO_TRACE_ENABLE отключена, то все дефайны определяются как 'ничего'
    -
    131 и на производительность кода не влияют
    -
    132 * @{
    -
    133 *
    -
    134 * @def TRACE_GPIO_RESET(_gpio_, _pin_)
    -
    135 * @brief Сбросить указанную ножку GPIO
    -
    136 * @param _gpio_ Указатель на структуру GPIO (напр. GPIOA)
    -
    137 * @param _pin_ Номер ножки (напр. GPIO_PIN_0)
    -
    138 * @details Варианты реализации:
    -
    139 * - GPIO_TRACE_ENABLE не определён - макрос пустой
    -
    140 * - GPIO_TRACE_ENABLE определён - устанавливает бит сброса через BSRR ((_pin_)<<16)
    -
    141 *
    -
    142 * @def TRACE_GPIO_SET(_gpio_, _pin_)
    -
    143 * @brief Установить указанную ножку GPIO
    -
    144 * @param _gpio_ Указатель на структуру GPIO (например GPIOA)
    -
    145 * @param _pin_ Номер ножки (напр. GPIO_PIN_0)
    -
    146 * @details Варианты реализации:
    -
    147 * - GPIO_TRACE_ENABLE не определён - макрос пустой
    -
    148 * - GPIO_TRACE_ENABLE определён - устанавливает бит установки через BSRR (_pin_)
    -
    149 */
    -
    150#ifndef GPIO_TRACE_ENABLE
    -
    151 #define TRACE_GPIO_SET(_gpio_,_pin_)
    -
    152 #define TRACE_GPIO_RESET(_gpio_,_pin_)
    -
    153#else
    -
    154 #define TRACE_GPIO_SET(_gpio_,_pin_) (_gpio_)->BSRR = (((_pin_)))
    -
    155 #define TRACE_GPIO_RESET(_gpio_,_pin_) (_gpio_)->BSRR = ((_pin_)<<16)
    -
    156#endif //GPIO_TRACE_ENABLE
    -
    157
    -
    158
    -
    159/** TRACE_GPIO
    -
    160 * @}
    -
    161 */
    +
    104#if LOG_LEVEL == 0 // лог отключен
    +
    105 #define \
    +
    106log_printf(TAG, fmt, ...)
    +
    107#elif LOG_LEVEL == 1 // только тэг
    +
    108 #define log_printf(TAG, fmt, ...) \
    +
    109my_printf("\n[%lu] [%s] " fmt, \
    +
    110(unsigned long)local_time(), TAG, ##__VA_ARGS__)
    +
    111#elif LOG_LEVEL >= 2 // всё
    +
    112 #define log_printf(TAG, fmt, ...) \
    +
    113my_printf("\n[%lu] [%s] (%s:%d) " fmt, \
    +
    114(unsigned long)local_time(), TAG, __FILE__, __LINE__, ##__VA_ARGS__)
    +
    115#endif
    +
    116
    +
    117/** TRACE_SERIAL
    +
    118 * @}
    +
    119 */
    +
    120
    +
    121/**
    +
    122 * @addtogroup TRACE_GPIO GPIO trace defines
    +
    123 * @ingroup TRACE
    +
    124 * @brief Дефайны для работы с GPIO трассировкой
    +
    125 * @details Определяется дефайны для работы с GPIO трассировкой:
    +
    126 - TRACE_GPIO_RESET() - для сброса ножки GPIO (через BSRR)
    +
    127 - TRACE_GPIO_SET() - для выставления ножки GPIO (через BSRR)
    +
    128
    +
    129 - Если трассировка @ref GPIO_TRACE_ENABLE отключена, то все дефайны определяются как 'ничего'
    +
    130 и на производительность кода не влияют
    +
    131 * @{
    +
    132 *
    +
    133 * @def TRACE_GPIO_RESET(_gpio_, _pin_)
    +
    134 * @brief Сбросить указанную ножку GPIO
    +
    135 * @param _gpio_ Указатель на структуру GPIO (напр. GPIOA)
    +
    136 * @param _pin_ Номер ножки (напр. GPIO_PIN_0)
    +
    137 * @details Варианты реализации:
    +
    138 * - GPIO_TRACE_ENABLE не определён - макрос пустой
    +
    139 * - GPIO_TRACE_ENABLE определён - устанавливает бит сброса через BSRR ((_pin_)<<16)
    +
    140 *
    +
    141 * @def TRACE_GPIO_SET(_gpio_, _pin_)
    +
    142 * @brief Установить указанную ножку GPIO
    +
    143 * @param _gpio_ Указатель на структуру GPIO (например GPIOA)
    +
    144 * @param _pin_ Номер ножки (напр. GPIO_PIN_0)
    +
    145 * @details Варианты реализации:
    +
    146 * - GPIO_TRACE_ENABLE не определён - макрос пустой
    +
    147 * - GPIO_TRACE_ENABLE определён - устанавливает бит установки через BSRR (_pin_)
    +
    148 */
    +
    149#ifndef GPIO_TRACE_ENABLE
    +
    150 #define TRACE_GPIO_SET(_gpio_,_pin_)
    +
    151 #define TRACE_GPIO_RESET(_gpio_,_pin_)
    +
    152#else
    +
    153 #define TRACE_GPIO_SET(_gpio_,_pin_) (_gpio_)->BSRR = (((_pin_)))
    +
    154 #define TRACE_GPIO_RESET(_gpio_,_pin_) (_gpio_)->BSRR = ((_pin_)<<16)
    +
    155#endif //GPIO_TRACE_ENABLE
    +
    156
    +
    157
    +
    158/** TRACE_GPIO
    +
    159 * @}
    +
    160 */
    +
    161
    162
    163
    -
    164
    -
    165#if defined(HAL_MODULE_ENABLED) && defined(RTT_TRACE_ENABLE)
    -
    166
    -
    167/**
    -
    168 * @addtogroup TRACE_RTT_FLASH Flash RTT Buffer
    -
    169 * @ingroup TRACE
    -
    170 * @brief Макросы и функции для сохранения/чтения RTT буфера в Flash
    -
    171 * @details Модуль позволяет сохранять данные RTT буфера во Flash и читать их обратно по тегам.
    -
    172 * Теги работают следующим образом:
    -
    173 * - Базовый тег (младший байт = 0): модуль сам выбирает первый свободный слот во Flash;
    -
    174 * новые записи получают автоинкрементированный младший байт тега (от 0x00 до 0xFF).
    -
    175 * - Конкретный тег (младший байт != 0): запись или чтение происходит строго с указанным тегом;
    -
    176 * если слот с таким тегом уже занят, запись не выполняется.
    -
    177 * - Автоинкремент позволяет хранить несколько последовательных записей в пределах одного базового тега,
    -
    178 * без необходимости вручную отслеживать адреса Flash или позиции буферов.
    -
    179 *
    -
    180 * Параметры:
    -
    181 * - @ref RTT_FLASH_BUFFER_SIZE - Размер буфера RTT в Flash
    -
    182 * - @ref RTT_FLASH_SECTOR - Сектор FLASH куда положится RTT буфер
    -
    183 * - @ref RTT_FLASH_SECTOR_START - Начало сектора RTT_FLASH_SECTOR
    -
    184 * - @ref RTT_FLASH_SECTOR_END - Конец сектора RTT_FLASH_SECTOR
    -
    185 *
    -
    186 * @{
    -
    187 */
    -
    188
    -
    189
    -
    190/**
    -
    191 * @brief Структура RTT, которая будет положена в Flash
    -
    192 */
    -
    -
    193typedef struct {
    -
    194 uint32_t tag; ///< Уникальный идентификатор буфера
    -
    195 uint32_t size; ///< Размер данных
    -
    196 char data[RTT_FLASH_BUFFER_SIZE]; ///< Буфер RTT
    - +
    164#if defined(HAL_MODULE_ENABLED) && defined(RTT_TRACE_ENABLE)
    +
    165
    +
    166/**
    +
    167 * @addtogroup TRACE_RTT_FLASH Flash RTT Buffer
    +
    168 * @ingroup TRACE
    +
    169 * @brief Макросы и функции для сохранения/чтения RTT буфера в Flash
    +
    170 * @details Модуль позволяет сохранять данные RTT буфера во Flash и читать их обратно по тегам.
    +
    171 * Теги работают следующим образом:
    +
    172 * - Базовый тег (младший байт = 0): модуль сам выбирает первый свободный слот во Flash;
    +
    173 * новые записи получают автоинкрементированный младший байт тега (от 0x00 до 0xFF).
    +
    174 * - Конкретный тег (младший байт != 0): запись или чтение происходит строго с указанным тегом;
    +
    175 * если слот с таким тегом уже занят, запись не выполняется.
    +
    176 * - Автоинкремент позволяет хранить несколько последовательных записей в пределах одного базового тега,
    +
    177 * без необходимости вручную отслеживать адреса Flash или позиции буферов.
    +
    178 *
    +
    179 * Параметры:
    +
    180 * - @ref RTT_FLASH_BUFFER_SIZE - Размер буфера RTT в Flash
    +
    181 * - @ref RTT_FLASH_SECTOR - Сектор FLASH куда положится RTT буфер
    +
    182 * - @ref RTT_FLASH_SECTOR_START - Начало сектора RTT_FLASH_SECTOR
    +
    183 * - @ref RTT_FLASH_SECTOR_END - Конец сектора RTT_FLASH_SECTOR
    +
    184 *
    +
    185 * @{
    +
    186 */
    +
    187
    +
    188
    +
    189/**
    +
    190 * @brief Структура RTT, которая будет положена в Flash
    +
    191 */
    +
    +
    192typedef struct {
    +
    193 uint32_t tag; ///< Уникальный идентификатор буфера
    +
    194 uint32_t size; ///< Размер данных
    +
    195 char data[RTT_FLASH_BUFFER_SIZE]; ///< Буфер RTT
    +
    -
    198
    -
    199/**
    -
    200 * @brief Подготовка Flash к записи
    -
    201 * @details Сбрасывает ошибки Flash и ожидает готовности перед записью
    -
    202 */
    -
    -
    203__STATIC_FORCEINLINE void RTT_FlashPrepare(void)
    -
    204{
    -
    205 HAL_FLASH_Unlock();
    -
    206 __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PGSERR | FLASH_FLAG_WRPERR | FLASH_FLAG_OPERR);
    -
    207 while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) {
    -
    208 __NOP();
    -
    209 }
    -
    210}
    +
    197
    +
    198/**
    +
    199 * @brief Подготовка Flash к записи
    +
    200 * @details Сбрасывает ошибки Flash и ожидает готовности перед записью
    +
    201 */
    +
    +
    202__STATIC_FORCEINLINE void RTT_FlashPrepare(void)
    +
    203{
    +
    204 HAL_FLASH_Unlock();
    +
    205 __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PGSERR | FLASH_FLAG_WRPERR | FLASH_FLAG_OPERR);
    +
    206 while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) {
    +
    207 __NOP();
    +
    208 }
    +
    209}
    -
    211
    -
    212/**
    -
    213 * @brief Сохраняет последние символы RTT-буфера в Flash по тегу
    -
    214 * @param tag Базовый или конкретный идентификатор буфера.
    -
    215 * @param tail_size Количество последних символов RTT для копирования
    -
    216 * @param buf_num Указатель на переменную в которую запишется номер буфера для конкретного тега
    -
    217 * @return >=0 — номер буфера (тег) для записи, <0 — ошибка (нет места, тег уже занят, ошибка записи в флеш)
    -
    218 *
    -
    219 * @details Автоматически копирует последние tail_size символов из RTT-буфера
    -
    220 * и записывает их во Flash.
    -
    221 * Тег может быть базовым или конкретным:
    -
    222 * - Если базовый (младший байт == 0) — будет выбран первый свободный слот с автоинкрементом.
    -
    223 * Автоинкремент формируется в пределах от 0x1 до 0xFF
    -
    224 * - Если конкретный (младший байт != 0) — запись выполняется только с этим тегом, иначе ошибка.
    -
    225 *
    -
    226 */
    -
    -
    227__STATIC_FORCEINLINE int RTT_SaveToFlash(uint32_t tag, uint32_t tail_size)
    -
    228{
    -
    229 if (tag == 0xFFFFFFFF)
    -
    230 return -1; // Неверный тег
    -
    231
    -
    232 SEGGER_RTT_BUFFER_UP *up = &_SEGGER_RTT.aUp[0];
    -
    233 unsigned buf_size = up->SizeOfBuffer;
    -
    234 unsigned wr = up->WrOff;
    -
    235
    -
    236 // Ограничиваем по размеру буфера RTT и RTT_FLASH_BUFFER_SIZE
    -
    237 unsigned n = (tail_size > buf_size) ? buf_size : tail_size;
    -
    238 if (n > RTT_FLASH_BUFFER_SIZE)
    - -
    240
    -
    241 uint32_t addr = RTT_FLASH_SECTOR_START;
    -
    242 RTT_FlashHeader_t *flash_hdr = NULL;
    -
    243 uint32_t base_tag = tag & 0xFFFFFF00;
    -
    244 uint32_t next_tag = (tag & 0xFF) == 0 ? tag + 1 : tag;
    -
    245
    -
    246 // Ищем первый свободный слот, параллельно автоинкрементируем тег
    -
    247 while ((addr + sizeof(RTT_FlashHeader_t)) <= RTT_FLASH_SECTOR_END)
    -
    248 {
    -
    249 flash_hdr = (RTT_FlashHeader_t *)addr;
    -
    250
    -
    251 if (flash_hdr->tag == 0xFFFFFFFF)
    -
    252 break; // Нашли свободное место
    -
    253
    -
    254
    -
    255 if((flash_hdr->tag & 0xFFFFFF00) == base_tag) // выбраный тег
    -
    256 {
    -
    257 if ((tag & 0xFF) == 0) // если он базовый - ищем последний
    -
    258 next_tag = flash_hdr->tag + 1; // автоинкремент
    -
    259 else
    -
    260 if(flash_hdr->tag == tag) // если он конкретный и уже существует - то ошибка
    -
    261 return -1; // конкретный тег уже занят
    -
    262 }
    -
    263
    -
    264
    -
    265 if(next_tag - tag > 0xFF)
    -
    266 return -1; // автоинкремент слишком большой
    -
    267
    -
    268 addr += sizeof(RTT_FlashHeader_t);
    -
    269 }
    -
    270
    -
    271 if ((addr + sizeof(RTT_FlashHeader_t)) > RTT_FLASH_SECTOR_END)
    -
    272 return -1; // Нет свободного места
    -
    273
    -
    274 // Копируем последние n символов из RTT
    -
    275 char temp[RTT_FLASH_BUFFER_SIZE];
    -
    276 unsigned valid_count = 0;
    -
    277
    -
    278 for (unsigned i = 0; i < n; i++)
    -
    279 {
    -
    280 unsigned idx = (wr + buf_size - n + i) % buf_size;
    -
    281 char c = up->pBuffer[idx];
    -
    282 if (c != 0)
    -
    283 temp[valid_count++] = c;
    -
    284 }
    -
    285
    - -
    287
    -
    288 // Формируем структуру в RAM
    -
    289 RTT_FlashHeader_t flash_data;
    -
    290 flash_data.tag = next_tag;
    -
    291 flash_data.size = valid_count;
    -
    292 memcpy(flash_data.data, temp, valid_count);
    -
    293
    -
    294 // Записываем структуру во Flash (по 4 байта)
    -
    295 const uint32_t *p = (const uint32_t *)&flash_data;
    -
    296 for (unsigned i = 0; i < sizeof(RTT_FlashHeader_t) / 4; i++)
    -
    297 {
    -
    298 if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr + i * 4, p[i]) != HAL_OK)
    -
    299 return -1;
    -
    300 }
    -
    301
    -
    302 HAL_FLASH_Lock();
    -
    303 __DSB();
    -
    304 __ISB();
    -
    305
    -
    306
    -
    307 return (int)(next_tag&0xFF);
    -
    308}
    +
    210
    +
    211/**
    +
    212 * @brief Сохраняет последние символы RTT-буфера в Flash по тегу
    +
    213 * @param tag Базовый или конкретный идентификатор буфера.
    +
    214 * @param tail_size Количество последних символов RTT для копирования
    +
    215 * @param buf_num Указатель на переменную в которую запишется номер буфера для конкретного тега
    +
    216 * @return >=0 — номер буфера (тег) для записи, <0 — ошибка (нет места, тег уже занят, ошибка записи в флеш)
    +
    217 *
    +
    218 * @details Автоматически копирует последние tail_size символов из RTT-буфера
    +
    219 * и записывает их во Flash.
    +
    220 * Тег может быть базовым или конкретным:
    +
    221 * - Если базовый (младший байт == 0) — будет выбран первый свободный слот с автоинкрементом.
    +
    222 * Автоинкремент формируется в пределах от 0x1 до 0xFF
    +
    223 * - Если конкретный (младший байт != 0) — запись выполняется только с этим тегом, иначе ошибка.
    +
    224 *
    +
    225 */
    +
    +
    226__STATIC_FORCEINLINE int RTT_SaveToFlash(uint32_t tag, uint32_t tail_size)
    +
    227{
    +
    228 if (tag == 0xFFFFFFFF)
    +
    229 return -1; // Неверный тег
    +
    230
    +
    231 SEGGER_RTT_BUFFER_UP *up = &_SEGGER_RTT.aUp[0];
    +
    232 unsigned buf_size = up->SizeOfBuffer;
    +
    233 unsigned wr = up->WrOff;
    +
    234
    +
    235 // Ограничиваем по размеру буфера RTT и RTT_FLASH_BUFFER_SIZE
    +
    236 unsigned n = (tail_size > buf_size) ? buf_size : tail_size;
    +
    237 if (n > RTT_FLASH_BUFFER_SIZE)
    + +
    239
    +
    240 uint32_t addr = RTT_FLASH_SECTOR_START;
    +
    241 RTT_FlashHeader_t *flash_hdr = NULL;
    +
    242 uint32_t base_tag = tag & 0xFFFFFF00;
    +
    243 uint32_t next_tag = (tag & 0xFF) == 0 ? tag + 1 : tag;
    +
    244
    +
    245 // Ищем первый свободный слот, параллельно автоинкрементируем тег
    +
    246 while ((addr + sizeof(RTT_FlashHeader_t)) <= RTT_FLASH_SECTOR_END)
    +
    247 {
    +
    248 flash_hdr = (RTT_FlashHeader_t *)addr;
    +
    249
    +
    250 if (flash_hdr->tag == 0xFFFFFFFF)
    +
    251 break; // Нашли свободное место
    +
    252
    +
    253
    +
    254 if((flash_hdr->tag & 0xFFFFFF00) == base_tag) // выбраный тег
    +
    255 {
    +
    256 if ((tag & 0xFF) == 0) // если он базовый - ищем последний
    +
    257 next_tag = flash_hdr->tag + 1; // автоинкремент
    +
    258 else
    +
    259 if(flash_hdr->tag == tag) // если он конкретный и уже существует - то ошибка
    +
    260 return -1; // конкретный тег уже занят
    +
    261 }
    +
    262
    +
    263
    +
    264 if(next_tag - tag > 0xFF)
    +
    265 return -1; // автоинкремент слишком большой
    +
    266
    +
    267 addr += sizeof(RTT_FlashHeader_t);
    +
    268 }
    +
    269
    +
    270 if ((addr + sizeof(RTT_FlashHeader_t)) > RTT_FLASH_SECTOR_END)
    +
    271 return -1; // Нет свободного места
    +
    272
    +
    273 // Копируем последние n символов из RTT
    +
    274 char temp[RTT_FLASH_BUFFER_SIZE];
    +
    275 unsigned valid_count = 0;
    +
    276
    +
    277 for (unsigned i = 0; i < n; i++)
    +
    278 {
    +
    279 unsigned idx = (wr + buf_size - n + i) % buf_size;
    +
    280 char c = up->pBuffer[idx];
    +
    281 if (c != 0)
    +
    282 temp[valid_count++] = c;
    +
    283 }
    +
    284
    + +
    286
    +
    287 // Формируем структуру в RAM
    +
    288 RTT_FlashHeader_t flash_data;
    +
    289 flash_data.tag = next_tag;
    +
    290 flash_data.size = valid_count;
    +
    291 memcpy(flash_data.data, temp, valid_count);
    +
    292
    +
    293 // Записываем структуру во Flash (по 4 байта)
    +
    294 const uint32_t *p = (const uint32_t *)&flash_data;
    +
    295 for (unsigned i = 0; i < sizeof(RTT_FlashHeader_t) / 4; i++)
    +
    296 {
    +
    297 if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr + i * 4, p[i]) != HAL_OK)
    +
    298 return -1;
    +
    299 }
    +
    300
    +
    301 HAL_FLASH_Lock();
    +
    302 __DSB();
    +
    303 __ISB();
    +
    304
    +
    305
    +
    306 return (int)(next_tag&0xFF);
    +
    307}
    -
    309
    -
    310
    -
    311/**
    -
    312 * @brief Читает последние символы RTT-буфера из Flash по тегу
    -
    313 * @param tag Базовый или конкретный идентификатор буфера.
    -
    314 * @param Buffer Буфер назначения для копирования данных
    -
    315 * @param tail_size Количество последних символов, которые нужно прочитать
    -
    316 * @param read_size Количество считанных символов
    -
    317 * @return >=0 — номер буфера (тег) для записи, <0 — ошибка (тег не найден или структура повреждена)
    -
    318 *
    -
    319 * @details Копирует последние tail_size символов из найденной записи Flash в Buffer.
    -
    320 * Тег может быть базовым или конкретным:
    -
    321 * - Если базовый (младший байт == 0) — будет прочитана последняя запись из группы.
    -
    322 * - Если конкретный (младший байт != 0) — прочитывается именно эта запись.
    -
    323 */
    -
    -
    324__STATIC_FORCEINLINE int RTT_ReadFromFlash(uint32_t tag, char *Buffer, uint32_t tail_size, uint32_t *read_size)
    -
    325{
    -
    326 if (!Buffer || tail_size == 0)
    -
    327 return -1; // Неверные параметры
    -
    328
    -
    329 if (tag == 0xFFFFFFFF)
    -
    330 return -1; // Недопустимый тег
    -
    331
    -
    332 uint32_t addr = RTT_FLASH_SECTOR_START;
    -
    333 RTT_FlashHeader_t *flash_hdr = NULL;
    -
    334 RTT_FlashHeader_t *target_hdr = NULL;
    -
    335 uint32_t base_tag = tag & 0xFFFFFF00;
    -
    336
    -
    337 // Поиск записи по тегу
    -
    338 while ((addr + sizeof(RTT_FlashHeader_t)) <= RTT_FLASH_SECTOR_END)
    -
    339 {
    -
    340 flash_hdr = (RTT_FlashHeader_t *)addr;
    -
    341
    -
    342 if (flash_hdr->tag == 0xFFFFFFFF)
    -
    343 break; // Достигнут конец записанных структур
    -
    344
    -
    345 // выбраный тег
    -
    346 if((flash_hdr->tag & 0xFFFFFF00) == base_tag)
    -
    347 {
    -
    348 if ((tag & 0xFF) == 0) // если он базовый - ищем последний
    -
    349 target_hdr = flash_hdr; // сохраняем последний в группе
    -
    350 else
    -
    351 if(flash_hdr->tag == tag) // если он конкретный и найден - берем его
    -
    352 {
    -
    353 target_hdr = flash_hdr;
    -
    354 break; // конкретный тег найден
    -
    355 }
    -
    356 }
    -
    357
    -
    358 addr += sizeof(RTT_FlashHeader_t);
    -
    359 }
    -
    360
    -
    361 if (!target_hdr) return -1; // Тег не найден
    -
    362
    -
    363 // Проверка корректности размера
    -
    364 if (target_hdr->size > RTT_FLASH_BUFFER_SIZE)
    -
    365 return -1; // Повреждённая запись
    -
    366
    -
    367 // Определяем количество читаемых символов
    -
    368 uint32_t n = (tail_size > target_hdr->size) ? target_hdr->size : tail_size;
    -
    369 // Начальная позиция для чтения последних tail_size символов
    -
    370 uint32_t start = target_hdr->size - n;
    -
    371 // Копируем данные из Flash в RAM
    -
    372 memcpy(Buffer, &target_hdr->data[start], n);
    -
    373
    -
    374 if(read_size != NULL)
    -
    375 {
    -
    376 *read_size = n;
    -
    377 }
    -
    378
    -
    379 __DSB();
    -
    380 __ISB();
    -
    381
    -
    382 return (int)(target_hdr->tag & 0xFF);
    -
    383}
    +
    308
    +
    309
    +
    310/**
    +
    311 * @brief Читает последние символы RTT-буфера из Flash по тегу
    +
    312 * @param tag Базовый или конкретный идентификатор буфера.
    +
    313 * @param Buffer Буфер назначения для копирования данных
    +
    314 * @param tail_size Количество последних символов, которые нужно прочитать
    +
    315 * @param read_size Количество считанных символов
    +
    316 * @return >=0 — номер буфера (тег) для записи, <0 — ошибка (тег не найден или структура повреждена)
    +
    317 *
    +
    318 * @details Копирует последние tail_size символов из найденной записи Flash в Buffer.
    +
    319 * Тег может быть базовым или конкретным:
    +
    320 * - Если базовый (младший байт == 0) — будет прочитана последняя запись из группы.
    +
    321 * - Если конкретный (младший байт != 0) — прочитывается именно эта запись.
    +
    322 */
    +
    +
    323__STATIC_FORCEINLINE int RTT_ReadFromFlash(uint32_t tag, char *Buffer, uint32_t tail_size, uint32_t *read_size)
    +
    324{
    +
    325 if (!Buffer || tail_size == 0)
    +
    326 return -1; // Неверные параметры
    +
    327
    +
    328 if (tag == 0xFFFFFFFF)
    +
    329 return -1; // Недопустимый тег
    +
    330
    +
    331 uint32_t addr = RTT_FLASH_SECTOR_START;
    +
    332 RTT_FlashHeader_t *flash_hdr = NULL;
    +
    333 RTT_FlashHeader_t *target_hdr = NULL;
    +
    334 uint32_t base_tag = tag & 0xFFFFFF00;
    +
    335
    +
    336 // Поиск записи по тегу
    +
    337 while ((addr + sizeof(RTT_FlashHeader_t)) <= RTT_FLASH_SECTOR_END)
    +
    338 {
    +
    339 flash_hdr = (RTT_FlashHeader_t *)addr;
    +
    340
    +
    341 if (flash_hdr->tag == 0xFFFFFFFF)
    +
    342 break; // Достигнут конец записанных структур
    +
    343
    +
    344 // выбраный тег
    +
    345 if((flash_hdr->tag & 0xFFFFFF00) == base_tag)
    +
    346 {
    +
    347 if ((tag & 0xFF) == 0) // если он базовый - ищем последний
    +
    348 target_hdr = flash_hdr; // сохраняем последний в группе
    +
    349 else
    +
    350 if(flash_hdr->tag == tag) // если он конкретный и найден - берем его
    +
    351 {
    +
    352 target_hdr = flash_hdr;
    +
    353 break; // конкретный тег найден
    +
    354 }
    +
    355 }
    +
    356
    +
    357 addr += sizeof(RTT_FlashHeader_t);
    +
    358 }
    +
    359
    +
    360 if (!target_hdr) return -1; // Тег не найден
    +
    361
    +
    362 // Проверка корректности размера
    +
    363 if (target_hdr->size > RTT_FLASH_BUFFER_SIZE)
    +
    364 return -1; // Повреждённая запись
    +
    365
    +
    366 // Определяем количество читаемых символов
    +
    367 uint32_t n = (tail_size > target_hdr->size) ? target_hdr->size : tail_size;
    +
    368 // Начальная позиция для чтения последних tail_size символов
    +
    369 uint32_t start = target_hdr->size - n;
    +
    370 // Копируем данные из Flash в RAM
    +
    371 memcpy(Buffer, &target_hdr->data[start], n);
    +
    372
    +
    373 if(read_size != NULL)
    +
    374 {
    +
    375 *read_size = n;
    +
    376 }
    +
    377
    +
    378 __DSB();
    +
    379 __ISB();
    +
    380
    +
    381 return (int)(target_hdr->tag & 0xFF);
    +
    382}
    -
    384
    -
    385/**
    -
    386 * @brief Стирание сектора Flash с RTT-буфером
    -
    387 */
    -
    -
    388__STATIC_FORCEINLINE int RTT_EraseFlash(void)
    -
    389{
    -
    390 FLASH_EraseInitTypeDef eraseInit;
    -
    391 uint32_t pageError = 0;
    -
    392
    - -
    394
    -
    395 eraseInit.TypeErase = FLASH_TYPEERASE_SECTORS;
    -
    396 eraseInit.Sector = RTT_FLASH_SECTOR;
    -
    397 eraseInit.NbSectors = 1;
    -
    398
    -
    399 if (HAL_FLASHEx_Erase(&eraseInit, &pageError) != HAL_OK)
    -
    400 {
    -
    401 return -1;
    -
    402 }
    -
    403 return 0;
    -
    404 HAL_FLASH_Lock();
    -
    405}
    +
    383
    +
    384/**
    +
    385 * @brief Стирание сектора Flash с RTT-буфером
    +
    386 */
    +
    +
    387__STATIC_FORCEINLINE int RTT_EraseFlash(void)
    +
    388{
    +
    389 FLASH_EraseInitTypeDef eraseInit;
    +
    390 uint32_t pageError = 0;
    +
    391
    + +
    393
    +
    394 eraseInit.TypeErase = FLASH_TYPEERASE_SECTORS;
    +
    395 eraseInit.Sector = RTT_FLASH_SECTOR;
    +
    396 eraseInit.NbSectors = 1;
    +
    397
    +
    398 if (HAL_FLASHEx_Erase(&eraseInit, &pageError) != HAL_OK)
    +
    399 {
    +
    400 return -1;
    +
    401 }
    +
    402 return 0;
    +
    403 HAL_FLASH_Lock();
    +
    404}
    -
    406
    -
    407/** TRACE_RTT_FLASH
    -
    408 * @}
    -
    409 */
    -
    410
    -
    411#else // HAL_MODULE_ENABLED && RTT_TRACE_ENABLE
    -
    412#define RTT_FlashPrepare(...)
    -
    413#define RTT_EraseFlash(...) 0
    -
    414#define RTT_SaveToFlash(...) 0
    -
    415#define RTT_ReadFromFlash(...) 0
    -
    416#endif // HAL_MODULE_ENABLED && RTT_TRACE_ENABLE
    +
    405
    +
    406/** TRACE_RTT_FLASH
    +
    407 * @}
    +
    408 */
    +
    409
    +
    410#else // HAL_MODULE_ENABLED && RTT_TRACE_ENABLE
    +
    411#define RTT_FlashPrepare(...)
    +
    412#define RTT_EraseFlash(...) 0
    +
    413#define RTT_SaveToFlash(...) 0
    +
    414#define RTT_ReadFromFlash(...) 0
    +
    415#endif // HAL_MODULE_ENABLED && RTT_TRACE_ENABLE
    +
    416
    417
    418
    -
    419
    -
    420
    -
    421/**
    -
    422 * @addtogroup TRACE_HARDFAULT Hardfault trace defines
    -
    423 * @ingroup TRACE
    -
    424 * @brief Модуль трассировки HardFault с возможностью сохранения RTT буфера во Flash
    -
    425 * @details
    -
    426 * Этот модуль позволяет сохранять контекст процессора и последние символы RTT буфера при возникновении HardFault.
    -
    427 *
    -
    428 * Механизм работы:
    -
    429 * - При срабатывании HardFault вызывается HF_HandleFault(), который:
    -
    430 * 1. Получает указатель на стек, где произошёл HardFault (MSP или PSP).
    -
    431 * 2. Выводит значения регистров R0-R3, R12, LR, PC, PSR и системных регистров SCB.
    -
    432 * 3. Формирует строку с регистрами и копирует последние символы RTT буфера.
    -
    433 * 4. Сохраняет данные во Flash с базовым тегом HF_RTT_TAG_BASE.
    -
    434 * - Для восстановления последнего HardFault используется HF_CheckRecovered(), который:
    -
    435 * 1. Читает запись во Flash по базовому тегу.
    -
    436 * 2. Выводит сохранённый RTT буфер и контекст регистров.
    -
    437 * 3. Опционально стирает Flash после восстановления.
    -
    438 *
    -
    439 * Параметры:
    -
    440 * - @ref HARDFAULT_SERIAL_TRACE - Включить обработку и serial трассировку Hardfault
    -
    441 * Если отключена то вставляются заглушки, никак не влияющие на параметры и остальную программу
    -
    442 * - @ref HF_RTT_TAG_BASE - Базовый тег RTT Flash для HardFault
    -
    443 * - @ref HF_RTT_TAIL_SIZE - Размер буфера RTT, который сохранится при Hardfault
    -
    444 * - @ref HF_STACK_DUMP_WORDS - Сколько слов стека будет проанализировано во время Hardfault
    -
    445 * - @ref HF_FLASH_ADDR - Адрес FLASH куда положится RTT буфер
    -
    446 * - @ref HF_RAM_END - Конец RAM памяти (чтобы во время анализа стека не выйти за пределы)
    -
    447 *
    -
    448 @code
    -
    449 void Hardfault()
    -
    450 {
    -
    451 HF_HandleFault();
    -
    452 NVIC_SystemReset();
    -
    453 }
    -
    454
    -
    455 int main()
    -
    456 {
    -
    457 if(HF_CheckRecovered(0))
    -
    458 {
    -
    459 //set hardfault error
    -
    460 RTT_EraseFlash(); // erase rtt flash after message readed
    -
    461 }
    -
    462 }
    -
    463 @endcode
    -
    464 * @{
    -
    465 */
    -
    466#if defined(HAL_MODULE_ENABLED) && defined(HARDFAULT_SERIAL_TRACE)
    -
    467
    -
    468#ifndef HF_RTT_TAIL_SIZE
    -
    469#define HF_RTT_TAIL_SIZE RTT_FLASH_BUFFER_SIZE ///< Размер буфера RTT, который сохранится при Hardfault
    -
    470#endif
    -
    471
    -
    472/**
    -
    473 * @brief Контекст стек-фрейма процессора при HardFault
    -
    474 * @details Сохраняет регистры R0-R3, R12, LR, PC, PSR для последующего анализа.
    -
    475 */
    -
    -
    476typedef struct {
    -
    477 uint32_t r0; ///< Регистр R0
    -
    478 uint32_t r1; ///< Регистр R1
    -
    479 uint32_t r2; ///< Регистр R2
    -
    480 uint32_t r3; ///< Регистр R3
    -
    481 uint32_t r12; ///< Регистр R12
    -
    482 uint32_t lr; ///< Link Register
    -
    483 uint32_t pc; ///< Program Counter
    -
    484 uint32_t psr; ///< Program Status Register
    - +
    419
    +
    420/**
    +
    421 * @addtogroup TRACE_HARDFAULT Hardfault trace defines
    +
    422 * @ingroup TRACE
    +
    423 * @brief Модуль трассировки HardFault с возможностью сохранения RTT буфера во Flash
    +
    424 * @details
    +
    425 * Этот модуль позволяет сохранять контекст процессора и последние символы RTT буфера при возникновении HardFault.
    +
    426 *
    +
    427 * Механизм работы:
    +
    428 * - При срабатывании HardFault вызывается HF_HandleFault(), который:
    +
    429 * 1. Получает указатель на стек, где произошёл HardFault (MSP или PSP).
    +
    430 * 2. Выводит значения регистров R0-R3, R12, LR, PC, PSR и системных регистров SCB.
    +
    431 * 3. Формирует строку с регистрами и копирует последние символы RTT буфера.
    +
    432 * 4. Сохраняет данные во Flash с базовым тегом HF_RTT_TAG_BASE.
    +
    433 * - Для восстановления последнего HardFault используется HF_CheckRecovered(), который:
    +
    434 * 1. Читает запись во Flash по базовому тегу.
    +
    435 * 2. Выводит сохранённый RTT буфер и контекст регистров.
    +
    436 * 3. Опционально стирает Flash после восстановления.
    +
    437 *
    +
    438 * Параметры:
    +
    439 * - @ref HARDFAULT_SERIAL_TRACE - Включить обработку и serial трассировку Hardfault
    +
    440 * Если отключена то вставляются заглушки, никак не влияющие на параметры и остальную программу
    +
    441 * - @ref HF_RTT_TAG_BASE - Базовый тег RTT Flash для HardFault
    +
    442 * - @ref HF_RTT_TAIL_SIZE - Размер буфера RTT, который сохранится при Hardfault
    +
    443 * - @ref HF_STACK_DUMP_WORDS - Сколько слов стека будет проанализировано во время Hardfault
    +
    444 * - @ref HF_FLASH_ADDR - Адрес FLASH куда положится RTT буфер
    +
    445 * - @ref HF_RAM_END - Конец RAM памяти (чтобы во время анализа стека не выйти за пределы)
    +
    446 *
    +
    447 @code
    +
    448 void Hardfault()
    +
    449 {
    +
    450 HF_HandleFault();
    +
    451 NVIC_SystemReset();
    +
    452 }
    +
    453
    +
    454 int main()
    +
    455 {
    +
    456 if(HF_CheckRecovered(0))
    +
    457 {
    +
    458 //set hardfault error
    +
    459 RTT_EraseFlash(); // erase rtt flash after message readed
    +
    460 }
    +
    461 }
    +
    462 @endcode
    +
    463 * @{
    +
    464 */
    +
    465#if defined(HAL_MODULE_ENABLED) && defined(HARDFAULT_SERIAL_TRACE)
    +
    466
    +
    467#ifndef HF_RTT_TAIL_SIZE
    +
    468#define HF_RTT_TAIL_SIZE RTT_FLASH_BUFFER_SIZE ///< Размер буфера RTT, который сохранится при Hardfault
    +
    469#endif
    +
    470
    +
    471/**
    +
    472 * @brief Контекст стек-фрейма процессора при HardFault
    +
    473 * @details Сохраняет регистры R0-R3, R12, LR, PC, PSR для последующего анализа.
    +
    474 */
    +
    +
    475typedef struct {
    +
    476 uint32_t r0; ///< Регистр R0
    +
    477 uint32_t r1; ///< Регистр R1
    +
    478 uint32_t r2; ///< Регистр R2
    +
    479 uint32_t r3; ///< Регистр R3
    +
    480 uint32_t r12; ///< Регистр R12
    +
    481 uint32_t lr; ///< Link Register
    +
    482 uint32_t pc; ///< Program Counter
    +
    483 uint32_t psr; ///< Program Status Register
    +
    -
    486
    -
    487/**
    -
    488 * @brief Проверка и вывод последнего HardFault-трейса из Flash
    -
    489 * @details
    -
    490 * Функция ищет последнюю запись HardFault по базовому тегу HF_RTT_TAG_BASE
    -
    491 * и выводит её содержимое в консоль. После успешного вывода Flash можно опционально очистить.
    -
    492 *
    -
    493 * @return int
    -
    494 * - 1 — данные HardFault найдены и выведены
    -
    495 * - 0 — данные отсутствуют или тег не найден
    -
    496 *
    -
    497 * @note Вызов рекомендуется при инициализации приложения для анализа предыдущего сбоя.
    -
    498 */
    -
    -
    499__STATIC_FORCEINLINE int HF_CheckRecovered(int erase)
    -
    500{
    -
    501 char buffer[RTT_FLASH_BUFFER_SIZE];
    -
    502 uint32_t read_size = 0;
    -
    503 int n_hardfault = RTT_ReadFromFlash(HF_RTT_TAG_BASE, buffer, HF_RTT_TAIL_SIZE, &read_size);
    -
    504 if (n_hardfault > 0)
    -
    505 {
    -
    506 my_printf("\n--- Recovered HardFault RTT buffer #%u ---\n", n_hardfault);
    -
    507 for (int i = 0; i < read_size; i++)
    -
    508 {
    -
    509 char c = buffer[i];
    -
    510 if (c == 0 || c == (char)0xFF) break;
    -
    511 my_printf("%c", c);
    -
    512 }
    -
    513
    -
    514 if(erase)
    - -
    516 my_printf("\n--------- HardFault Dump End ---------\n");
    -
    517 return 1;
    -
    518 }
    -
    519 return 0;
    -
    520}
    +
    485
    +
    486/**
    +
    487 * @brief Проверка и вывод последнего HardFault-трейса из Flash
    +
    488 * @details
    +
    489 * Функция ищет последнюю запись HardFault по базовому тегу HF_RTT_TAG_BASE
    +
    490 * и выводит её содержимое в консоль. После успешного вывода Flash можно опционально очистить.
    +
    491 *
    +
    492 * @return int
    +
    493 * - 1 — данные HardFault найдены и выведены
    +
    494 * - 0 — данные отсутствуют или тег не найден
    +
    495 *
    +
    496 * @note Вызов рекомендуется при инициализации приложения для анализа предыдущего сбоя.
    +
    497 */
    +
    +
    498__STATIC_FORCEINLINE int HF_CheckRecovered(int erase)
    +
    499{
    +
    500 char buffer[RTT_FLASH_BUFFER_SIZE];
    +
    501 uint32_t read_size = 0;
    +
    502 int n_hardfault = RTT_ReadFromFlash(HF_RTT_TAG_BASE, buffer, HF_RTT_TAIL_SIZE, &read_size);
    +
    503 if (n_hardfault > 0)
    +
    504 {
    +
    505 my_printf("\n--- Recovered HardFault RTT buffer #%u ---\n", n_hardfault);
    +
    506 for (int i = 0; i < read_size; i++)
    +
    507 {
    +
    508 char c = buffer[i];
    +
    509 if (c == 0 || c == (char)0xFF) break;
    +
    510 my_printf("%c", c);
    +
    511 }
    +
    512
    +
    513 if(erase)
    + +
    515 my_printf("\n--------- HardFault Dump End ---------\n");
    +
    516 return 1;
    +
    517 }
    +
    518 return 0;
    +
    519}
    +
    520
    521
    -
    522
    -
    523static HF_StackFrame_t *stack_frame;
    -
    524static uint32_t stack_dump[HF_STACK_DUMP_WORDS];
    -
    525static void *ret_adr[10] = {0};
    -
    526/**
    -
    527 * @brief Обработчик HardFault
    -
    528 * @details
    -
    529 * Вызывается из прерывания HardFault или в любом месте где понятно что ошибка критическая.
    -
    530 * Последовательно выполняет:
    -
    531 * 1. Определяет активный стек (MSP или PSP) на момент сбоя.
    -
    532 * 2. Сохраняет значения регистров R0-R3, R12, LR, PC, PSR.
    -
    533 * 3. Выводит системные регистры CFSR, HFSR, DFSR, AFSR, MMFAR, BFAR.
    -
    534 * 4. Формирует stack trace с 3 уровнями возврата.
    -
    535 * 5. Копирует последние символы RTT буфера.
    -
    536 * 6. Сохраняет все данные во Flash через RTT_SaveToFlash с базовым тегом HF_RTT_TAG_BASE.
    -
    537 *
    -
    538 * @note Функция защищена, так как вызывается в контексте сбоя — минимизирует использование вызовов HAL.
    -
    539 */
    -
    -
    540__STATIC_FORCEINLINE void HF_HandleFault(void)
    -
    541{
    -
    542 // Получаем указатель на стек, где произошёл HardFault
    -
    543 __ASM volatile(
    -
    544 "TST lr, #4 \n"
    -
    545 "ITE EQ \n"
    -
    546 "MRSEQ %[ptr], MSP\n"
    -
    547 "MRSNE %[ptr], PSP\n"
    -
    548 : [ptr] "=r"(stack_frame)
    -
    549 );
    -
    550
    -
    551 my_printf("\n===== HardFault occurred! =====\n");
    -
    552 my_printf("R0 = 0x%08X\n", stack_frame->r0);
    -
    553 my_printf("R1 = 0x%08X\n", stack_frame->r1);
    -
    554 my_printf("R2 = 0x%08X\n", stack_frame->r2);
    -
    555 my_printf("R3 = 0x%08X\n", stack_frame->r3);
    -
    556 my_printf("R12 = 0x%08X\n", stack_frame->r12);
    -
    557 my_printf("LR = 0x%08X\n", stack_frame->lr);
    -
    558 my_printf("PC = 0x%08X\n", stack_frame->pc);
    -
    559 my_printf("PSR = 0x%08X\n", stack_frame->psr);
    -
    560
    -
    561 my_printf("CFSR = 0x%08X\n", SCB->CFSR);
    -
    562 my_printf("HFSR = 0x%08X\n", SCB->HFSR);
    -
    563 my_printf("DFSR = 0x%08X\n", SCB->DFSR);
    -
    564 my_printf("AFSR = 0x%08X\n", SCB->AFSR);
    -
    565 my_printf("MMFAR = 0x%08X\n", SCB->MMFAR);
    -
    566 my_printf("BFAR = 0x%08X\n", SCB->BFAR);
    -
    567
    -
    568 // --- Stack trace ---
    -
    569 my_printf("--- Stack trace ---\n");
    -
    570 ret_adr[0] = __builtin_return_address(0);
    -
    571 ret_adr[1] = __builtin_return_address(1);
    -
    572 ret_adr[2] = __builtin_return_address(2);
    -
    573
    -
    574 for (int i = 0; i < 3; i++) // развернуть n уровней
    -
    575 {
    -
    576 if(ret_adr[i])
    -
    577 my_printf(" #%d: 0x%08lX\r\n", i, ret_adr[i]); // -1 для Thumb
    -
    578 }
    - -
    580}
    +
    522static HF_StackFrame_t *stack_frame;
    +
    523static uint32_t stack_dump[HF_STACK_DUMP_WORDS];
    +
    524static void *ret_adr[10] = {0};
    +
    525/**
    +
    526 * @brief Обработчик HardFault
    +
    527 * @details
    +
    528 * Вызывается из прерывания HardFault или в любом месте где понятно что ошибка критическая.
    +
    529 * Последовательно выполняет:
    +
    530 * 1. Определяет активный стек (MSP или PSP) на момент сбоя.
    +
    531 * 2. Сохраняет значения регистров R0-R3, R12, LR, PC, PSR.
    +
    532 * 3. Выводит системные регистры CFSR, HFSR, DFSR, AFSR, MMFAR, BFAR.
    +
    533 * 4. Формирует stack trace с 3 уровнями возврата.
    +
    534 * 5. Копирует последние символы RTT буфера.
    +
    535 * 6. Сохраняет все данные во Flash через RTT_SaveToFlash с базовым тегом HF_RTT_TAG_BASE.
    +
    536 *
    +
    537 * @note Функция защищена, так как вызывается в контексте сбоя — минимизирует использование вызовов HAL.
    +
    538 */
    +
    +
    539__STATIC_FORCEINLINE void HF_HandleFault(void)
    +
    540{
    +
    541 // Получаем указатель на стек, где произошёл HardFault
    +
    542 __ASM volatile(
    +
    543 "TST lr, #4 \n"
    +
    544 "ITE EQ \n"
    +
    545 "MRSEQ %[ptr], MSP\n"
    +
    546 "MRSNE %[ptr], PSP\n"
    +
    547 : [ptr] "=r"(stack_frame)
    +
    548 );
    +
    549
    +
    550 my_printf("\n===== HardFault occurred! =====\n");
    +
    551 my_printf("R0 = 0x%08X\n", stack_frame->r0);
    +
    552 my_printf("R1 = 0x%08X\n", stack_frame->r1);
    +
    553 my_printf("R2 = 0x%08X\n", stack_frame->r2);
    +
    554 my_printf("R3 = 0x%08X\n", stack_frame->r3);
    +
    555 my_printf("R12 = 0x%08X\n", stack_frame->r12);
    +
    556 my_printf("LR = 0x%08X\n", stack_frame->lr);
    +
    557 my_printf("PC = 0x%08X\n", stack_frame->pc);
    +
    558 my_printf("PSR = 0x%08X\n", stack_frame->psr);
    +
    559
    +
    560 my_printf("CFSR = 0x%08X\n", SCB->CFSR);
    +
    561 my_printf("HFSR = 0x%08X\n", SCB->HFSR);
    +
    562 my_printf("DFSR = 0x%08X\n", SCB->DFSR);
    +
    563 my_printf("AFSR = 0x%08X\n", SCB->AFSR);
    +
    564 my_printf("MMFAR = 0x%08X\n", SCB->MMFAR);
    +
    565 my_printf("BFAR = 0x%08X\n", SCB->BFAR);
    +
    566
    +
    567 // --- Stack trace ---
    +
    568 my_printf("--- Stack trace ---\n");
    +
    569 ret_adr[0] = __builtin_return_address(0);
    +
    570 ret_adr[1] = __builtin_return_address(1);
    +
    571 ret_adr[2] = __builtin_return_address(2);
    +
    572
    +
    573 for (int i = 0; i < 3; i++) // развернуть n уровней
    +
    574 {
    +
    575 if(ret_adr[i])
    +
    576 my_printf(" #%d: 0x%08lX\r\n", i, ret_adr[i]); // -1 для Thumb
    +
    577 }
    + +
    579}
    -
    581#else // HAL_MODULE_ENABLED && HARDFAULT_SERIAL_TRACE
    -
    582#define HF_CheckRecovered(...) 0
    -
    583#define HF_HandleFault(...)
    -
    584#endif // HAL_MODULE_ENABLED && HARDFAULT_SERIAL_TRACE
    -
    585/** TRACE_HARDFAULT
    -
    586 * @}
    -
    587 */
    +
    580#else // HAL_MODULE_ENABLED && HARDFAULT_SERIAL_TRACE
    +
    581#define HF_CheckRecovered(...) 0
    +
    582#define HF_HandleFault(...)
    +
    583#endif // HAL_MODULE_ENABLED && HARDFAULT_SERIAL_TRACE
    +
    584/** TRACE_HARDFAULT
    +
    585 * @}
    +
    586 */
    +
    587
    588
    589
    -
    590
    -
    591#endif //__TRACE_H_
    +
    590#endif //__TRACE_H_
    #define RTT_FLASH_SECTOR
    Сектор FLASH куда положится RTT буфер
    #define RTT_FLASH_BUFFER_SIZE
    Размер буфера RTT в Flash.
    #define RTT_FLASH_SECTOR_START
    Начало сектора RTT_FLASH_SECTOR.
    @@ -716,27 +713,28 @@ $(function(){initNavTree('trace_8h_source.html','',''); });
    #define HF_RTT_TAG_BASE
    базовый тег для HardFault
    #define HF_RTT_TAIL_SIZE
    Размер буфера RTT, который сохранится при Hardfault.
    #define RTT_FLASH_SECTOR_END
    Конец сектора RTT_FLASH_SECTOR.
    -
    __STATIC_FORCEINLINE int HF_CheckRecovered(int erase)
    Проверка и вывод последнего HardFault-трейса из Flash.
    Definition trace.h:499
    -
    __STATIC_FORCEINLINE void HF_HandleFault(void)
    Обработчик HardFault.
    Definition trace.h:540
    -
    __STATIC_FORCEINLINE void RTT_FlashPrepare(void)
    Подготовка Flash к записи
    Definition trace.h:203
    -
    __STATIC_FORCEINLINE int RTT_ReadFromFlash(uint32_t tag, char *Buffer, uint32_t tail_size, uint32_t *read_size)
    Читает последние символы RTT-буфера из Flash по тегу
    Definition trace.h:324
    -
    __STATIC_FORCEINLINE int RTT_SaveToFlash(uint32_t tag, uint32_t tail_size)
    Сохраняет последние символы RTT-буфера в Flash по тегу
    Definition trace.h:227
    -
    __STATIC_FORCEINLINE int RTT_EraseFlash(void)
    Стирание сектора Flash с RTT-буфером
    Definition trace.h:388
    -
    #define my_printf(...)
    Универсальный макрос для вывода трассировки
    Definition trace.h:80
    +
    __STATIC_FORCEINLINE int HF_CheckRecovered(int erase)
    Проверка и вывод последнего HardFault-трейса из Flash.
    Definition trace.h:498
    +
    __STATIC_FORCEINLINE void HF_HandleFault(void)
    Обработчик HardFault.
    Definition trace.h:539
    +
    __STATIC_FORCEINLINE void RTT_FlashPrepare(void)
    Подготовка Flash к записи
    Definition trace.h:202
    +
    __STATIC_FORCEINLINE int RTT_ReadFromFlash(uint32_t tag, char *Buffer, uint32_t tail_size, uint32_t *read_size)
    Читает последние символы RTT-буфера из Flash по тегу
    Definition trace.h:323
    +
    __STATIC_FORCEINLINE int RTT_SaveToFlash(uint32_t tag, uint32_t tail_size)
    Сохраняет последние символы RTT-буфера в Flash по тегу
    Definition trace.h:226
    +
    __STATIC_FORCEINLINE int RTT_EraseFlash(void)
    Стирание сектора Flash с RTT-буфером
    Definition trace.h:387
    +
    #define my_printf(...)
    Универсальный макрос для вывода трассировки
    Definition trace.h:79
    Заголочный файл для дефайнов библиотеки MyLibsGeneral.
    -
    Контекст стек-фрейма процессора при HardFault.
    Definition trace.h:476
    -
    uint32_t pc
    Program Counter.
    Definition trace.h:483
    -
    uint32_t r1
    Регистр R1.
    Definition trace.h:478
    -
    uint32_t r0
    Регистр R0.
    Definition trace.h:477
    -
    uint32_t r3
    Регистр R3.
    Definition trace.h:480
    -
    uint32_t r2
    Регистр R2.
    Definition trace.h:479
    -
    uint32_t lr
    Link Register.
    Definition trace.h:482
    -
    uint32_t r12
    Регистр R12.
    Definition trace.h:481
    -
    uint32_t psr
    Program Status Register.
    Definition trace.h:484
    -
    Структура RTT, которая будет положена в Flash.
    Definition trace.h:193
    -
    uint32_t tag
    Уникальный идентификатор буфера
    Definition trace.h:194
    -
    char data[1024]
    Буфер RTT.
    Definition trace.h:196
    -
    uint32_t size
    Размер данных
    Definition trace.h:195
    +
    Контекст стек-фрейма процессора при HardFault.
    Definition trace.h:475
    +
    uint32_t pc
    Program Counter.
    Definition trace.h:482
    +
    uint32_t r1
    Регистр R1.
    Definition trace.h:477
    +
    uint32_t r0
    Регистр R0.
    Definition trace.h:476
    +
    uint32_t r3
    Регистр R3.
    Definition trace.h:479
    +
    uint32_t r2
    Регистр R2.
    Definition trace.h:478
    +
    uint32_t lr
    Link Register.
    Definition trace.h:481
    +
    uint32_t r12
    Регистр R12.
    Definition trace.h:480
    +
    uint32_t psr
    Program Status Register.
    Definition trace.h:483
    +
    Структура RTT, которая будет положена в Flash.
    Definition trace.h:192
    +
    char data[RTT_FLASH_BUFFER_SIZE]
    Буфер RTT.
    Definition trace.h:195
    +
    uint32_t tag
    Уникальный идентификатор буфера
    Definition trace.h:193
    +
    uint32_t size
    Размер данных
    Definition trace.h:194
    +
    diff --git a/Doc/html/trackers_8h.html b/Doc/html/trackers_8h.html index 2807e35..6aee3a3 100644 --- a/Doc/html/trackers_8h.html +++ b/Doc/html/trackers_8h.html @@ -5,7 +5,7 @@ -MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/trackers.h File Reference +MyLibs: E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/trackers.h File Reference @@ -108,26 +108,26 @@ $(function(){initNavTree('trackers_8h.html','',''); });
    This graph shows which files directly or indirectly include this file:
    diff --git a/Doc/html/trackers_8h__dep__incl.map b/Doc/html/trackers_8h__dep__incl.map index 053a362..8df98fc 100644 --- a/Doc/html/trackers_8h__dep__incl.map +++ b/Doc/html/trackers_8h__dep__incl.map @@ -1,5 +1,5 @@ - - - - + + + + diff --git a/Doc/html/trackers_8h__dep__incl.md5 b/Doc/html/trackers_8h__dep__incl.md5 index 050b8f3..7e40c44 100644 --- a/Doc/html/trackers_8h__dep__incl.md5 +++ b/Doc/html/trackers_8h__dep__incl.md5 @@ -1 +1 @@ -99028f5c43001eb4e51e7c688fd1c620 \ No newline at end of file +61cd16676b826f413137a9a26a664c28 \ No newline at end of file diff --git a/Doc/html/trackers_8h__dep__incl.png b/Doc/html/trackers_8h__dep__incl.png index 0282cbb01829c8b0c0e4ac173ce8e7868b8ada62..6f62567bde371438ef8297362f14cbbb0e30b900 100644 GIT binary patch literal 2928 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 - - - - - - - + + + + + + + + diff --git a/Doc/html/trackers_8h__incl.md5 b/Doc/html/trackers_8h__incl.md5 index a4f7cc8..9252d0a 100644 --- a/Doc/html/trackers_8h__incl.md5 +++ b/Doc/html/trackers_8h__incl.md5 @@ -1 +1 @@ -cf1d551546e4ada7a970f07bfd50ffed \ No newline at end of file +346bb684e46833c3fe21db239cd7ea79 \ No newline at end of file diff --git a/Doc/html/trackers_8h__incl.png b/Doc/html/trackers_8h__incl.png index c8659762903117aabc93900a67e81dd84e16f46f..8b7e96716de60a6dee488aa51f253350d8fd767a 100644 GIT binary patch literal 3964 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 literal 3894 zcmcgvXH=8f+6{w9F$fCMlp>6xs34$#AfOCo73~Tetu8CzV8V!CZ zL0));qq}W}emwd70e&qc^LJb7+RY|emSXcEs*zphVJ+K{K&|s%g&>RNq%|>_JN^A; z_ucYk(9~oLyFHpB?FyMy=L$>QPQ=<^F{_CrJ4pB%$u(;_Vw^M_;)7Fb!l{}bEtr$V#%vsIFO zM8C<}3PD2OPuxk$zS5-Jz%0AnRi3Laaj2K4 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 -MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/trackers.h Source File +MyLibs: E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/trackers.h Source File @@ -106,165 +106,164 @@ $(function(){initNavTree('trackers_8h_source.html','',''); });
    4* @brief Заголочный файл для работы с трекерами @ref TRACKERS.
    5**************************************************************************
    6* @addtogroup TRACKERS Trackers defines
    -
    7* @ingroup MYLIBS_DEFINES
    -
    8* @brief Дефайны для работы с трекерами
    -
    9* @details
    -
    10Есть дефайн для объявления структуры трекера: TrackerTypeDef(num_user_vars).
    -
    11Структура состоит из следующих элементов:
    -
    12- cnt_ok
    -
    13- cnt_err
    -
    14- cnt_warn
    -
    15- user[num_user_vars]
    -
    16Также есть ряд функций (дефайнов) для обращения к элементам этой структуры.
    -
    17
    -
    18Параметры для конфигурации:
    -
    19- @ref TRACKERS_ENABLE - Включить трекеры
    -
    20 Если трекеры @ref TRACKERS_ENABLE отключены, то все дефайны определяются как ничего
    -
    21 и на производительность кода не влияют
    -
    22
    -
    23@par Пример:
    -
    24
    -
    25Определяем typedef трекера измерений Measure_TrackerTypeDef
    -
    26
    -
    27@verbatim
    -
    28 typedef TrackerTypeDef(MEASURE_USER_VARS_NUMB) Measure_TrackerTypeDef;
    -
    29@endverbatim
    -
    30
    -
    31И через @ref Measure_TrackerTypeDef структура подключается в другие структуры
    -
    32
    -
    33Для работы с структурой можно использовать функции:
    -
    34- Для получения значения:
    -
    35 - TrackerGet_Ok()
    -
    36 - TrackerGet_Err()
    -
    37 - TrackerGet_Warn()
    -
    38 - TrackerGet_User(n)
    -
    39
    -
    40- Для записи значения:
    -
    41 - TrackerCnt_Ok()
    -
    42 - TrackerCnt_Err()
    -
    43 - TrackerCnt_Warn()
    -
    44 - TrackerCnt_User()
    -
    45 - TrackerWrite_User(n)
    -
    46
    -
    47- Для очищения значения:
    -
    48 - TrackerClear_All()
    -
    49 - TrackerClear_Ok()
    -
    50 - TrackerClear_Err()
    -
    51 - TrackerClear_Warn()
    -
    52 - TrackerClear_User(n)
    -
    53 - TrackerClear_UserAll()
    -
    54* @{
    -
    55*************************************************************************/
    -
    56#ifndef __TRACKERS_H_
    -
    57#define __TRACKERS_H_
    -
    58#include "mylibs_defs.h"
    -
    59
    -
    60#ifdef TRACKERS_ENABLE
    -
    61 /**
    -
    62 * @brief Структура для счетчиков отладки
    -
    63 * @param num_user_vars - количество пользовательских переменных
    -
    64 * @details Содержит счетчик для успешных событый (cnt_ok),
    -
    65 * счетчик для ошибок (cnt_err), счетчик для предупреждений (cnt_warn).
    -
    66 *
    -
    67 * Также есть возможность объявить пользовательские переменные в
    -
    68 * количестве <num_user_vars> штук.
    -
    69 */
    -
    -
    70 #define TrackerTypeDef(num_user_vars) \
    -
    71 struct \
    -
    72 { \
    -
    73 uint32_t cnt_ok; \
    -
    74 uint32_t cnt_err; \
    -
    75 uint32_t cnt_warn; \
    -
    76 uint32_t user[num_user_vars]; \
    -
    77 }
    +
    7* @brief Дефайны для работы с трекерами
    +
    8* @details
    +
    9Есть дефайн для объявления структуры трекера: TrackerTypeDef(num_user_vars).
    +
    10Структура состоит из следующих элементов:
    +
    11- cnt_ok
    +
    12- cnt_err
    +
    13- cnt_warn
    +
    14- user[num_user_vars]
    +
    15Также есть ряд функций (дефайнов) для обращения к элементам этой структуры.
    +
    16
    +
    17Параметры для конфигурации:
    +
    18- @ref TRACKERS_ENABLE - Включить трекеры
    +
    19 Если трекеры @ref TRACKERS_ENABLE отключены, то все дефайны определяются как ничего
    +
    20 и на производительность кода не влияют
    +
    21
    +
    22@par Пример:
    +
    23
    +
    24Определяем typedef трекера измерений Measure_TrackerTypeDef
    +
    25
    +
    26@verbatim
    +
    27 typedef TrackerTypeDef(MEASURE_USER_VARS_NUMB) Measure_TrackerTypeDef;
    +
    28@endverbatim
    +
    29
    +
    30И через @ref Measure_TrackerTypeDef структура подключается в другие структуры
    +
    31
    +
    32Для работы с структурой можно использовать функции:
    +
    33- Для получения значения:
    +
    34 - TrackerGet_Ok()
    +
    35 - TrackerGet_Err()
    +
    36 - TrackerGet_Warn()
    +
    37 - TrackerGet_User(n)
    +
    38
    +
    39- Для записи значения:
    +
    40 - TrackerCnt_Ok()
    +
    41 - TrackerCnt_Err()
    +
    42 - TrackerCnt_Warn()
    +
    43 - TrackerCnt_User()
    +
    44 - TrackerWrite_User(n)
    +
    45
    +
    46- Для очищения значения:
    +
    47 - TrackerClear_All()
    +
    48 - TrackerClear_Ok()
    +
    49 - TrackerClear_Err()
    +
    50 - TrackerClear_Warn()
    +
    51 - TrackerClear_User(n)
    +
    52 - TrackerClear_UserAll()
    +
    53* @{
    +
    54*************************************************************************/
    +
    55#ifndef __TRACKERS_H_
    +
    56#define __TRACKERS_H_
    +
    57#include "mylibs_defs.h"
    +
    58
    +
    59#ifdef TRACKERS_ENABLE
    +
    60 /**
    +
    61 * @brief Структура для счетчиков отладки
    +
    62 * @param num_user_vars - количество пользовательских переменных
    +
    63 * @details Содержит счетчик для успешных событый (cnt_ok),
    +
    64 * счетчик для ошибок (cnt_err), счетчик для предупреждений (cnt_warn).
    +
    65 *
    +
    66 * Также есть возможность объявить пользовательские переменные в
    +
    67 * количестве <num_user_vars> штук.
    +
    68 */
    +
    +
    69 #define TrackerTypeDef(num_user_vars) \
    +
    70 struct \
    +
    71 { \
    +
    72 uint32_t cnt_ok; \
    +
    73 uint32_t cnt_err; \
    +
    74 uint32_t cnt_warn; \
    +
    75 uint32_t user[num_user_vars]; \
    +
    76 }
    -
    78
    -
    79 /** @brief Получить количетство пользовательских переменных */
    -
    80 #define num_of_usercnts(_user_) (sizeof(_user_) / sizeof(uint32_t))
    -
    81 /** @brief Проверка существует ли указанная пользовательская переменная */
    -
    82 #define assert_usertracker(_cntstruct_, _uservarnumb_) ((_uservarnumb_) < num_of_usercnts((_cntstruct_).user))
    -
    83 /** @brief Условие для проверки существует ли указанная пользовательская переменная */
    -
    84 #define if_assert_usertracker(_cntstruct_, _uservarnumb_) if(assert_usertracker(_cntstruct_, _uservarnumb_))
    -
    85 /** @brief Тернарный оператор для проверки существует ли указанная пользовательская переменная */
    -
    86 #define tern_assert_usertracker(_cntstruct_, _uservarnumb_) (assert_usertracker(_cntstruct_, _uservarnumb_)) ? _uservarnumb_ : 0
    -
    87
    -
    88
    -
    89 /** @brief Считать счетчик успешных событий */
    -
    90 #define TrackerGet_Ok(_cntstruct_) (_cntstruct_).cnt_ok
    -
    91 /** @brief Считать счетчик ошибок */
    -
    92 #define TrackerGet_Err(_cntstruct_) (_cntstruct_).cnt_err
    -
    93 /** @brief Считать счетчик предупреждений */
    -
    94 #define TrackerGet_Warn(_cntstruct_) (_cntstruct_).cnt_warn
    -
    95 /**
    -
    96 * @brief Считать пользовательскую переменную
    -
    97 * @note Здесь нет проверки - существует ли пользовательская переменная!
    -
    98 * Есть возможность выйти за границы структуры!!!
    -
    99 * Чтобы этого избежать можно использовать дефайн #ref assert_usertracker()
    -
    100 @verbatim
    -
    101 if(assert_usertracker(struct, 0)) {
    -
    102 TrackerGet_User(struct, 0)
    -
    103 }
    -
    104 @endverbatim
    -
    105 */
    -
    106 #define TrackerGet_User(_cntstruct_, _uservarnumb_) (_cntstruct_).user[tern_assert_usertracker(_cntstruct_, _uservarnumb_)]
    +
    77
    +
    78 /** @brief Получить количетство пользовательских переменных */
    +
    79 #define num_of_usercnts(_user_) (sizeof(_user_) / sizeof(uint32_t))
    +
    80 /** @brief Проверка существует ли указанная пользовательская переменная */
    +
    81 #define assert_usertracker(_cntstruct_, _uservarnumb_) ((_uservarnumb_) < num_of_usercnts((_cntstruct_).user))
    +
    82 /** @brief Условие для проверки существует ли указанная пользовательская переменная */
    +
    83 #define if_assert_usertracker(_cntstruct_, _uservarnumb_) if(assert_usertracker(_cntstruct_, _uservarnumb_))
    +
    84 /** @brief Тернарный оператор для проверки существует ли указанная пользовательская переменная */
    +
    85 #define tern_assert_usertracker(_cntstruct_, _uservarnumb_) (assert_usertracker(_cntstruct_, _uservarnumb_)) ? _uservarnumb_ : 0
    +
    86
    +
    87
    +
    88 /** @brief Считать счетчик успешных событий */
    +
    89 #define TrackerGet_Ok(_cntstruct_) (_cntstruct_).cnt_ok
    +
    90 /** @brief Считать счетчик ошибок */
    +
    91 #define TrackerGet_Err(_cntstruct_) (_cntstruct_).cnt_err
    +
    92 /** @brief Считать счетчик предупреждений */
    +
    93 #define TrackerGet_Warn(_cntstruct_) (_cntstruct_).cnt_warn
    +
    94 /**
    +
    95 * @brief Считать пользовательскую переменную
    +
    96 * @note Здесь нет проверки - существует ли пользовательская переменная!
    +
    97 * Есть возможность выйти за границы структуры!!!
    +
    98 * Чтобы этого избежать можно использовать дефайн #ref assert_usertracker()
    +
    99 @verbatim
    +
    100 if(assert_usertracker(struct, 0)) {
    +
    101 TrackerGet_User(struct, 0)
    +
    102 }
    +
    103 @endverbatim
    +
    104 */
    +
    105 #define TrackerGet_User(_cntstruct_, _uservarnumb_) (_cntstruct_).user[tern_assert_usertracker(_cntstruct_, _uservarnumb_)]
    +
    106
    107
    -
    108
    -
    109
    -
    110 /** @brief Инкрементирование счетчика успешных событий */
    -
    111 #define TrackerCnt_Ok(_cntstruct_) (_cntstruct_).cnt_ok++
    -
    112 /** @brief Инкрементирование счетчика ошибок */
    -
    113 #define TrackerCnt_Err(_cntstruct_) (_cntstruct_).cnt_err++
    -
    114 /** @brief Инкрементирование счетчика предупреждений */
    -
    115 #define TrackerCnt_Warn(_cntstruct_) (_cntstruct_).cnt_warn++
    -
    116 /** @brief Инкрементирование пользовательской переменной */
    -
    117 #define TrackerCnt_User(_cntstruct_, _uservarnumb_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_]++;
    -
    118 /** @brief Запись числа в пользовательскую переменную */
    -
    119 #define TrackerWrite_User(_cntstruct_, _uservarnumb_, _val_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_] = (_val_)
    -
    120
    -
    121 /** @brief Очистка всей структуры */
    -
    122 #define TrackerClear_All(_cntstruct_) memset(&(_cntstruct_), 0, sizeof(_cntstruct_))
    -
    123 /** @brief Очистка счетчика успешных событий */
    -
    124 #define TrackerClear_Ok(_cntstruct_) (_cntstruct_).cnt_ok = 0
    -
    125 /** @brief Очистка счетчика ошибок */
    -
    126 #define TrackerClear_Err(_cntstruct_) (_cntstruct_).cnt_err = 0
    -
    127 /** @brief Очистка счетчика предупреждений */
    -
    128 #define TrackerClear_Warn(_cntstruct_) (_cntstruct_).cnt_warn = 0
    -
    129 /** @brief Очистка пользовательской переменной */
    -
    130 #define TrackerClear_User(_cntstruct_, _uservarnumb_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_] = 0;
    -
    131 /** @brief Очистка всех пользовательских переменных */
    -
    132 #define TrackerClear_UserAll(_cntstruct_) memset(&(_cntstruct_).user, 0, sizeof((_cntstruct_).user))
    -
    133
    -
    134#else //TRACKERS_ENABLE
    -
    135
    -
    136 #define TrackerTypeDef(num_user_vars) void *
    -
    137
    -
    138 #define num_of_usercnts(_user_) 0
    -
    139 #define assert_tracecnt(_cntstruct_, _uservarnumb_) 0
    -
    140 #define if_assert_usertracker(_cntstruct_, _uservarnumb_) if(0)
    -
    141 #define tern_assert_usertracker(_cntstruct_, _uservarnumb_) 0
    -
    142
    -
    143 #define TrackerGet_Ok(_cntstruct_) dummy
    -
    144 #define TrackerGet_Err(_cntstruct_) dummy
    -
    145 #define TrackerGet_Warn(_cntstruct_) dummy
    -
    146 #define TrackerGet_User(_cntstruct_, _uservarnumb_) dummy
    -
    147
    -
    148 #define TrackerCnt_Ok(_cntstruct_)
    -
    149 #define TrackerCnt_Err(_cntstruct_)
    -
    150 #define TrackerCnt_Warn(_cntstruct_)
    -
    151 #define TrackerCnt_User(_cntstruct_, _uservarnumb_)
    -
    152 #define TrackerWrite_User(_cntstruct_, _uservarnumb_, _val_)
    -
    153
    -
    154 #define TrackerClear_All(_cntstruct_)
    -
    155 #define TrackerClear_Ok(_cntstruct_)
    -
    156 #define TrackerClear_Err(_cntstruct_)
    -
    157 #define TrackerClear_Warn(_cntstruct_)
    -
    158 #define TrackerClear_User(_cntstruct_)
    -
    159 #define TrackerClear_UserAll(_cntstruct_)
    -
    160
    -
    161#endif //TRACKERS_ENABLE
    -
    162
    -
    163#endif //__TRACKERS_H_
    +
    108
    +
    109 /** @brief Инкрементирование счетчика успешных событий */
    +
    110 #define TrackerCnt_Ok(_cntstruct_) (_cntstruct_).cnt_ok++
    +
    111 /** @brief Инкрементирование счетчика ошибок */
    +
    112 #define TrackerCnt_Err(_cntstruct_) (_cntstruct_).cnt_err++
    +
    113 /** @brief Инкрементирование счетчика предупреждений */
    +
    114 #define TrackerCnt_Warn(_cntstruct_) (_cntstruct_).cnt_warn++
    +
    115 /** @brief Инкрементирование пользовательской переменной */
    +
    116 #define TrackerCnt_User(_cntstruct_, _uservarnumb_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_]++;
    +
    117 /** @brief Запись числа в пользовательскую переменную */
    +
    118 #define TrackerWrite_User(_cntstruct_, _uservarnumb_, _val_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_] = (_val_)
    +
    119
    +
    120 /** @brief Очистка всей структуры */
    +
    121 #define TrackerClear_All(_cntstruct_) memset(&(_cntstruct_), 0, sizeof(_cntstruct_))
    +
    122 /** @brief Очистка счетчика успешных событий */
    +
    123 #define TrackerClear_Ok(_cntstruct_) (_cntstruct_).cnt_ok = 0
    +
    124 /** @brief Очистка счетчика ошибок */
    +
    125 #define TrackerClear_Err(_cntstruct_) (_cntstruct_).cnt_err = 0
    +
    126 /** @brief Очистка счетчика предупреждений */
    +
    127 #define TrackerClear_Warn(_cntstruct_) (_cntstruct_).cnt_warn = 0
    +
    128 /** @brief Очистка пользовательской переменной */
    +
    129 #define TrackerClear_User(_cntstruct_, _uservarnumb_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_] = 0;
    +
    130 /** @brief Очистка всех пользовательских переменных */
    +
    131 #define TrackerClear_UserAll(_cntstruct_) memset(&(_cntstruct_).user, 0, sizeof((_cntstruct_).user))
    +
    132
    +
    133#else //TRACKERS_ENABLE
    +
    134
    +
    135 #define TrackerTypeDef(num_user_vars) void *
    +
    136
    +
    137 #define num_of_usercnts(_user_) 0
    +
    138 #define assert_tracecnt(_cntstruct_, _uservarnumb_) 0
    +
    139 #define if_assert_usertracker(_cntstruct_, _uservarnumb_) if(0)
    +
    140 #define tern_assert_usertracker(_cntstruct_, _uservarnumb_) 0
    +
    141
    +
    142 #define TrackerGet_Ok(_cntstruct_) dummy
    +
    143 #define TrackerGet_Err(_cntstruct_) dummy
    +
    144 #define TrackerGet_Warn(_cntstruct_) dummy
    +
    145 #define TrackerGet_User(_cntstruct_, _uservarnumb_) dummy
    +
    146
    +
    147 #define TrackerCnt_Ok(_cntstruct_)
    +
    148 #define TrackerCnt_Err(_cntstruct_)
    +
    149 #define TrackerCnt_Warn(_cntstruct_)
    +
    150 #define TrackerCnt_User(_cntstruct_, _uservarnumb_)
    +
    151 #define TrackerWrite_User(_cntstruct_, _uservarnumb_, _val_)
    +
    152
    +
    153 #define TrackerClear_All(_cntstruct_)
    +
    154 #define TrackerClear_Ok(_cntstruct_)
    +
    155 #define TrackerClear_Err(_cntstruct_)
    +
    156 #define TrackerClear_Warn(_cntstruct_)
    +
    157 #define TrackerClear_User(_cntstruct_)
    +
    158 #define TrackerClear_UserAll(_cntstruct_)
    +
    159
    +
    160#endif //TRACKERS_ENABLE
    +
    161
    +
    162#endif //__TRACKERS_H_
    Заголочный файл для дефайнов библиотеки MyLibsGeneral.
    diff --git a/Doc/html/unionuint16___bit_type_def.html b/Doc/html/unionuint16___bit_type_def.html index 28981df..eb400a5 100644 --- a/Doc/html/unionuint16___bit_type_def.html +++ b/Doc/html/unionuint16___bit_type_def.html @@ -97,32 +97,32 @@ $(function(){initNavTree('unionuint16___bit_type_def.html','','unionuint16___bit
    -
    uint16_BitTypeDef Union Reference
    +
    uint16_BitTypeDef Union Reference
    - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + +

    Public Attributes

    uint16_t all
    +
    struct { 
       unsigned   bit0:1 
       unsigned   bit1:1 
       unsigned   bit2:1 
       unsigned   bit3:1 
       unsigned   bit4:1 
       unsigned   bit5:1 
       unsigned   bit6:1 
       unsigned   bit7:1 
       unsigned   bit8:1 
       unsigned   bit9:1 
       unsigned   bit10:1 
       unsigned   bit11:1 
       unsigned   bit12:1 
       unsigned   bit13:1 
       unsigned   bit14:1 
       unsigned   bit15:1 
    bit
       unsigned   bit0:1 
       unsigned   bit1:1 
       unsigned   bit2:1 
       unsigned   bit3:1 
       unsigned   bit4:1 
       unsigned   bit5:1 
       unsigned   bit6:1 
       unsigned   bit7:1 
       unsigned   bit8:1 
       unsigned   bit9:1 
       unsigned   bit10:1 
       unsigned   bit11:1 
       unsigned   bit12:1 
       unsigned   bit13:1 
       unsigned   bit14:1 
       unsigned   bit15:1 
    bit

    Detailed Description

    @@ -401,7 +401,7 @@ struct { 

    The documentation for this union was generated from the following file:
      -
    • E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/bit_access.h
    • +
    • E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/bit_access.h
    diff --git a/Doc/html/unionuint32___bit_type_def.html b/Doc/html/unionuint32___bit_type_def.html index 5ef1c45..367db3f 100644 --- a/Doc/html/unionuint32___bit_type_def.html +++ b/Doc/html/unionuint32___bit_type_def.html @@ -97,48 +97,48 @@ $(function(){initNavTree('unionuint32___bit_type_def.html','','unionuint32___bit
    -
    uint32_BitTypeDef Union Reference
    +
    uint32_BitTypeDef Union Reference
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Attributes

    uint32_t all
    +
    struct { 
       unsigned   bit0:1 
       unsigned   bit1:1 
       unsigned   bit2:1 
       unsigned   bit3:1 
       unsigned   bit4:1 
       unsigned   bit5:1 
       unsigned   bit6:1 
       unsigned   bit7:1 
       unsigned   bit8:1 
       unsigned   bit9:1 
       unsigned   bit10:1 
       unsigned   bit11:1 
       unsigned   bit12:1 
       unsigned   bit13:1 
       unsigned   bit14:1 
       unsigned   bit15:1 
       unsigned   bit16:1 
       unsigned   bit17:1 
       unsigned   bit18:1 
       unsigned   bit19:1 
       unsigned   bit20:1 
       unsigned   bit21:1 
       unsigned   bit22:1 
       unsigned   bit23:1 
       unsigned   bit24:1 
       unsigned   bit25:1 
       unsigned   bit26:1 
       unsigned   bit27:1 
       unsigned   bit28:1 
       unsigned   bit29:1 
       unsigned   bit30:1 
       unsigned   bit31:1 
    bit
       unsigned   bit0:1 
       unsigned   bit1:1 
       unsigned   bit2:1 
       unsigned   bit3:1 
       unsigned   bit4:1 
       unsigned   bit5:1 
       unsigned   bit6:1 
       unsigned   bit7:1 
       unsigned   bit8:1 
       unsigned   bit9:1 
       unsigned   bit10:1 
       unsigned   bit11:1 
       unsigned   bit12:1 
       unsigned   bit13:1 
       unsigned   bit14:1 
       unsigned   bit15:1 
       unsigned   bit16:1 
       unsigned   bit17:1 
       unsigned   bit18:1 
       unsigned   bit19:1 
       unsigned   bit20:1 
       unsigned   bit21:1 
       unsigned   bit22:1 
       unsigned   bit23:1 
       unsigned   bit24:1 
       unsigned   bit25:1 
       unsigned   bit26:1 
       unsigned   bit27:1 
       unsigned   bit28:1 
       unsigned   bit29:1 
       unsigned   bit30:1 
       unsigned   bit31:1 
    bit

    Detailed Description

    @@ -673,7 +673,7 @@ struct { 

    The documentation for this union was generated from the following file:
      -
    • E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/bit_access.h
    • +
    • E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/bit_access.h
    diff --git a/Doc/html/unionuint64___bit_type_def.html b/Doc/html/unionuint64___bit_type_def.html index 00f2bb5..105713a 100644 --- a/Doc/html/unionuint64___bit_type_def.html +++ b/Doc/html/unionuint64___bit_type_def.html @@ -97,80 +97,80 @@ $(function(){initNavTree('unionuint64___bit_type_def.html','','unionuint64___bit
    -
    uint64_BitTypeDef Union Reference
    +
    uint64_BitTypeDef Union Reference
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Attributes

    uint64_t all
    +
    struct { 
       unsigned   bit0:1 
       unsigned   bit1:1 
       unsigned   bit2:1 
       unsigned   bit3:1 
       unsigned   bit4:1 
       unsigned   bit5:1 
       unsigned   bit6:1 
       unsigned   bit7:1 
       unsigned   bit8:1 
       unsigned   bit9:1 
       unsigned   bit10:1 
       unsigned   bit11:1 
       unsigned   bit12:1 
       unsigned   bit13:1 
       unsigned   bit14:1 
       unsigned   bit15:1 
       unsigned   bit16:1 
       unsigned   bit17:1 
       unsigned   bit18:1 
       unsigned   bit19:1 
       unsigned   bit20:1 
       unsigned   bit21:1 
       unsigned   bit22:1 
       unsigned   bit23:1 
       unsigned   bit24:1 
       unsigned   bit25:1 
       unsigned   bit26:1 
       unsigned   bit27:1 
       unsigned   bit28:1 
       unsigned   bit29:1 
       unsigned   bit30:1 
       unsigned   bit31:1 
       unsigned   bit32:1 
       unsigned   bit33:1 
       unsigned   bit34:1 
       unsigned   bit35:1 
       unsigned   bit36:1 
       unsigned   bit37:1 
       unsigned   bit38:1 
       unsigned   bit39:1 
       unsigned   bit40:1 
       unsigned   bit41:1 
       unsigned   bit42:1 
       unsigned   bit43:1 
       unsigned   bit44:1 
       unsigned   bit45:1 
       unsigned   bit46:1 
       unsigned   bit47:1 
       unsigned   bit48:1 
       unsigned   bit49:1 
       unsigned   bit50:1 
       unsigned   bit51:1 
       unsigned   bit52:1 
       unsigned   bit53:1 
       unsigned   bit54:1 
       unsigned   bit55:1 
       unsigned   bit56:1 
       unsigned   bit57:1 
       unsigned   bit58:1 
       unsigned   bit59:1 
       unsigned   bit60:1 
       unsigned   bit61:1 
       unsigned   bit62:1 
       unsigned   bit63:1 
    bit
       unsigned   bit0:1 
       unsigned   bit1:1 
       unsigned   bit2:1 
       unsigned   bit3:1 
       unsigned   bit4:1 
       unsigned   bit5:1 
       unsigned   bit6:1 
       unsigned   bit7:1 
       unsigned   bit8:1 
       unsigned   bit9:1 
       unsigned   bit10:1 
       unsigned   bit11:1 
       unsigned   bit12:1 
       unsigned   bit13:1 
       unsigned   bit14:1 
       unsigned   bit15:1 
       unsigned   bit16:1 
       unsigned   bit17:1 
       unsigned   bit18:1 
       unsigned   bit19:1 
       unsigned   bit20:1 
       unsigned   bit21:1 
       unsigned   bit22:1 
       unsigned   bit23:1 
       unsigned   bit24:1 
       unsigned   bit25:1 
       unsigned   bit26:1 
       unsigned   bit27:1 
       unsigned   bit28:1 
       unsigned   bit29:1 
       unsigned   bit30:1 
       unsigned   bit31:1 
       unsigned   bit32:1 
       unsigned   bit33:1 
       unsigned   bit34:1 
       unsigned   bit35:1 
       unsigned   bit36:1 
       unsigned   bit37:1 
       unsigned   bit38:1 
       unsigned   bit39:1 
       unsigned   bit40:1 
       unsigned   bit41:1 
       unsigned   bit42:1 
       unsigned   bit43:1 
       unsigned   bit44:1 
       unsigned   bit45:1 
       unsigned   bit46:1 
       unsigned   bit47:1 
       unsigned   bit48:1 
       unsigned   bit49:1 
       unsigned   bit50:1 
       unsigned   bit51:1 
       unsigned   bit52:1 
       unsigned   bit53:1 
       unsigned   bit54:1 
       unsigned   bit55:1 
       unsigned   bit56:1 
       unsigned   bit57:1 
       unsigned   bit58:1 
       unsigned   bit59:1 
       unsigned   bit60:1 
       unsigned   bit61:1 
       unsigned   bit62:1 
       unsigned   bit63:1 
    bit

    Detailed Description

    @@ -1217,7 +1217,7 @@ struct { 

    The documentation for this union was generated from the following file:
      -
    • E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/bit_access.h
    • +
    • E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/bit_access.h
    diff --git a/Doc/html/unionuint8___bit_type_def.html b/Doc/html/unionuint8___bit_type_def.html index 09f0845..d7a1bfd 100644 --- a/Doc/html/unionuint8___bit_type_def.html +++ b/Doc/html/unionuint8___bit_type_def.html @@ -97,24 +97,24 @@ $(function(){initNavTree('unionuint8___bit_type_def.html','','unionuint8___bit_t
    -
    uint8_BitTypeDef Union Reference
    +
    uint8_BitTypeDef Union Reference
    - - - - - - - - - - + + + + + + + + +

    Public Attributes

    uint8_t all
    +
    struct { 
       unsigned   bit0:1 
       unsigned   bit1:1 
       unsigned   bit2:1 
       unsigned   bit3:1 
       unsigned   bit4:1 
       unsigned   bit5:1 
       unsigned   bit6:1 
       unsigned   bit7:1 
    bit
       unsigned   bit0:1 
       unsigned   bit1:1 
       unsigned   bit2:1 
       unsigned   bit3:1 
       unsigned   bit4:1 
       unsigned   bit5:1 
       unsigned   bit6:1 
       unsigned   bit7:1 
    bit

    Detailed Description

    @@ -265,7 +265,7 @@ struct { 

    The documentation for this union was generated from the following file:
      -
    • E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/bit_access.h
    • +
    • E:/.WORK/STM32/STM_Libs/STM32_ExtendedLibs/MyLibs/Inc/bit_access.h
    diff --git a/Doc/latex/_s_e_g_g_e_r___r_t_t_8c_source.tex b/Doc/latex/_s_e_g_g_e_r___r_t_t_8c_source.tex new file mode 100644 index 0000000..ad88561 --- /dev/null +++ b/Doc/latex/_s_e_g_g_e_r___r_t_t_8c_source.tex @@ -0,0 +1,2105 @@ +\doxysection{SEGGER\+\_\+\+RTT.\+c} +\hypertarget{_s_e_g_g_e_r___r_t_t_8c_source}{}\label{_s_e_g_g_e_r___r_t_t_8c_source}\index{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/RTT/SEGGER\_RTT.c@{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/RTT/SEGGER\_RTT.c}} + +\begin{DoxyCode}{0} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00001}00001\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00002}00002\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SEGGER\ Microcontroller\ GmbH\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00003}00003\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ The\ Embedded\ Experts\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00004}00004\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00005}00005\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00006}00006\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ (c)\ 1995\ -\/\ 2021\ SEGGER\ Microcontroller\ GmbH\ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00007}00007\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00008}00008\ \textcolor{comment}{*\ \ \ \ \ \ \ www.segger.com\ \ \ \ \ Support:\ support@segger.com\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00009}00009\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00010}00010\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00011}00011\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00012}00012\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\ RTT\ *\ Real\ Time\ Transfer\ for\ embedded\ targets\ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00013}00013\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00014}00014\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00015}00015\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00016}00016\ \textcolor{comment}{*\ All\ rights\ reserved.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00017}00017\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00018}00018\ \textcolor{comment}{*\ SEGGER\ strongly\ recommends\ to\ not\ make\ any\ changes\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00019}00019\ \textcolor{comment}{*\ to\ or\ modify\ the\ source\ code\ of\ this\ software\ in\ order\ to\ stay\ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00020}00020\ \textcolor{comment}{*\ compatible\ with\ the\ RTT\ protocol\ and\ J-\/Link.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00021}00021\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00022}00022\ \textcolor{comment}{*\ Redistribution\ and\ use\ in\ source\ and\ binary\ forms,\ with\ or\ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00023}00023\ \textcolor{comment}{*\ without\ modification,\ are\ permitted\ provided\ that\ the\ following\ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00024}00024\ \textcolor{comment}{*\ condition\ is\ met:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00025}00025\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00026}00026\ \textcolor{comment}{*\ o\ Redistributions\ of\ source\ code\ must\ retain\ the\ above\ copyright\ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00027}00027\ \textcolor{comment}{*\ \ \ notice,\ this\ condition\ and\ the\ following\ disclaimer.\ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00028}00028\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00029}00029\ \textcolor{comment}{*\ THIS\ SOFTWARE\ IS\ PROVIDED\ BY\ THE\ COPYRIGHT\ HOLDERS\ AND\ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00030}00030\ \textcolor{comment}{*\ CONTRIBUTORS\ "{}AS\ IS"{}\ AND\ ANY\ EXPRESS\ OR\ IMPLIED\ WARRANTIES,\ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00031}00031\ \textcolor{comment}{*\ INCLUDING,\ BUT\ NOT\ LIMITED\ TO,\ THE\ IMPLIED\ WARRANTIES\ OF\ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00032}00032\ \textcolor{comment}{*\ MERCHANTABILITY\ AND\ FITNESS\ FOR\ A\ PARTICULAR\ PURPOSE\ ARE\ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00033}00033\ \textcolor{comment}{*\ DISCLAIMED.\ IN\ NO\ EVENT\ SHALL\ SEGGER\ Microcontroller\ BE\ LIABLE\ FOR\ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00034}00034\ \textcolor{comment}{*\ ANY\ DIRECT,\ INDIRECT,\ INCIDENTAL,\ SPECIAL,\ EXEMPLARY,\ OR\ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00035}00035\ \textcolor{comment}{*\ CONSEQUENTIAL\ DAMAGES\ (INCLUDING,\ BUT\ NOT\ LIMITED\ TO,\ PROCUREMENT\ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00036}00036\ \textcolor{comment}{*\ OF\ SUBSTITUTE\ GOODS\ OR\ SERVICES;\ LOSS\ OF\ USE,\ DATA,\ OR\ PROFITS;\ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00037}00037\ \textcolor{comment}{*\ OR\ BUSINESS\ INTERRUPTION)\ HOWEVER\ CAUSED\ AND\ ON\ ANY\ THEORY\ OF\ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00038}00038\ \textcolor{comment}{*\ LIABILITY,\ WHETHER\ IN\ CONTRACT,\ STRICT\ LIABILITY,\ OR\ TORT\ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00039}00039\ \textcolor{comment}{*\ (INCLUDING\ NEGLIGENCE\ OR\ OTHERWISE)\ ARISING\ IN\ ANY\ WAY\ OUT\ OF\ THE\ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00040}00040\ \textcolor{comment}{*\ USE\ OF\ THIS\ SOFTWARE,\ EVEN\ IF\ ADVISED\ OF\ THE\ POSSIBILITY\ OF\ SUCH\ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00041}00041\ \textcolor{comment}{*\ DAMAGE.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00042}00042\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00043}00043\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00044}00044\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00045}00045\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ version:\ 8.10g\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00046}00046\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00047}00047\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00048}00048\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00049}00049\ \textcolor{comment}{-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/END-\/OF-\/HEADER-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00050}00050\ \textcolor{comment}{File\ \ \ \ :\ SEGGER\_RTT.c}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00051}00051\ \textcolor{comment}{Purpose\ :\ Implementation\ of\ SEGGER\ real-\/time\ transfer\ (RTT)\ which}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00052}00052\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ allows\ real-\/time\ communication\ on\ targets\ which\ support}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00053}00053\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ debugger\ memory\ accesses\ while\ the\ CPU\ is\ running.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00054}00054\ \textcolor{comment}{Revision:\ \$Rev:\ 29668\ \$}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00055}00055\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00056}00056\ \textcolor{comment}{Additional\ information:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00057}00057\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ Type\ "{}int"{}\ is\ assumed\ to\ be\ 32-\/bits\ in\ size}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00058}00058\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ H-\/>T\ \ \ \ Host\ to\ target\ communication}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00059}00059\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ T-\/>H\ \ \ \ Target\ to\ host\ communication}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00060}00060\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00061}00061\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ RTT\ channel\ 0\ is\ always\ present\ and\ reserved\ for\ Terminal\ usage.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00062}00062\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ Name\ is\ fixed\ to\ "{}Terminal"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00063}00063\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00064}00064\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ Effective\ buffer\ size:\ SizeOfBuffer\ -\/\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00065}00065\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00066}00066\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ WrOff\ ==\ RdOff:\ \ \ \ \ \ \ Buffer\ is\ empty}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00067}00067\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ WrOff\ ==\ (RdOff\ -\/\ 1):\ Buffer\ is\ full}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00068}00068\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ WrOff\ >\ \ RdOff:\ \ \ \ \ \ \ Free\ space\ includes\ wrap-\/around}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00069}00069\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ WrOff\ <\ \ RdOff:\ \ \ \ \ \ \ Used\ space\ includes\ wrap-\/around}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00070}00070\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ (WrOff\ ==\ (SizeOfBuffer\ -\/\ 1))\ \&\&\ (RdOff\ ==\ 0):}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00071}00071\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Buffer\ full\ and\ wrap-\/around\ after\ next\ byte}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00072}00072\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00073}00073\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00074}00074\ \textcolor{comment}{-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00075}00075\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00076}00076\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00077}00077\ \textcolor{preprocessor}{\#include\ "{}SEGGER\_RTT.h"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00078}00078\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00079}00079\ \textcolor{preprocessor}{\#include\ }\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ for\ memcpy}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00080}00080\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00081}00081\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00082}00082\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00083}00083\ \textcolor{comment}{*\ \ \ \ \ \ \ Configuration,\ default\ values}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00084}00084\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00085}00085\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00086}00086\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00087}00087\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00088}00088\ \textcolor{preprocessor}{\#if\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00089}00089\ \textcolor{preprocessor}{\ \ \#ifdef\ SEGGER\_RTT\_CB\_ALIGN}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00090}00090\ \textcolor{preprocessor}{\ \ \ \ \#error\ "{}Custom\ SEGGER\_RTT\_CB\_ALIGN()\ is\ not\ supported\ for\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE\ !=\ 0"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00091}00091\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00092}00092\ \textcolor{preprocessor}{\ \ \#ifdef\ SEGGER\_RTT\_BUFFER\_ALIGN}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00093}00093\ \textcolor{preprocessor}{\ \ \ \ \#error\ "{}Custom\ SEGGER\_RTT\_BUFFER\_ALIGN()\ is\ not\ supported\ for\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE\ !=\ 0"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00094}00094\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00095}00095\ \textcolor{preprocessor}{\ \ \#ifdef\ SEGGER\_RTT\_PUT\_CB\_SECTION}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00096}00096\ \textcolor{preprocessor}{\ \ \ \ \#error\ "{}Custom\ SEGGER\_RTT\_PUT\_CB\_SECTION()\ is\ not\ supported\ for\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE\ !=\ 0"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00097}00097\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00098}00098\ \textcolor{preprocessor}{\ \ \#ifdef\ SEGGER\_RTT\_PUT\_BUFFER\_SECTION}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00099}00099\ \textcolor{preprocessor}{\ \ \ \ \#error\ "{}Custom\ SEGGER\_RTT\_PUT\_BUFFER\_SECTION()\ is\ not\ supported\ for\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE\ !=\ 0"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00100}00100\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00101}00101\ \textcolor{preprocessor}{\ \ \#ifdef\ SEGGER\_RTT\_BUFFER\_ALIGNMENT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00102}00102\ \textcolor{preprocessor}{\ \ \ \ \#error\ "{}Custom\ SEGGER\_RTT\_BUFFER\_ALIGNMENT\ is\ not\ supported\ for\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE\ !=\ 0"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00103}00103\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00104}00104\ \textcolor{preprocessor}{\ \ \#ifdef\ SEGGER\_RTT\_ALIGNMENT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00105}00105\ \textcolor{preprocessor}{\ \ \ \ \#error\ "{}Custom\ SEGGER\_RTT\_ALIGNMENT\ is\ not\ supported\ for\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE\ !=\ 0"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00106}00106\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00107}00107\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00108}00108\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00109}00109\ \textcolor{preprocessor}{\#ifndef\ \ \ BUFFER\_SIZE\_UP}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00110}00110\ \textcolor{preprocessor}{\ \ \#define\ BUFFER\_SIZE\_UP\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 1024\ \ }\textcolor{comment}{//\ Size\ of\ the\ buffer\ for\ terminal\ output\ of\ target,\ up\ to\ host}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00111}00111\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00112}00112\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00113}00113\ \textcolor{preprocessor}{\#ifndef\ \ \ BUFFER\_SIZE\_DOWN}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00114}00114\ \textcolor{preprocessor}{\ \ \#define\ BUFFER\_SIZE\_DOWN\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 16\ \ \ \ }\textcolor{comment}{//\ Size\ of\ the\ buffer\ for\ terminal\ input\ to\ target\ from\ host\ (Usually\ keyboard\ input)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00115}00115\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00116}00116\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00117}00117\ \textcolor{preprocessor}{\#ifndef\ \ \ SEGGER\_RTT\_MAX\_NUM\_UP\_BUFFERS}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00118}00118\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_MAX\_NUM\_UP\_BUFFERS\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 2\ \ \ \ }\textcolor{comment}{//\ Number\ of\ up-\/buffers\ (T-\/>H)\ available\ on\ this\ target}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00119}00119\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00120}00120\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00121}00121\ \textcolor{preprocessor}{\#ifndef\ \ \ SEGGER\_RTT\_MAX\_NUM\_DOWN\_BUFFERS}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00122}00122\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_MAX\_NUM\_DOWN\_BUFFERS\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 2\ \ \ \ }\textcolor{comment}{//\ Number\ of\ down-\/buffers\ (H-\/>T)\ available\ on\ this\ target}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00123}00123\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00124}00124\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00125}00125\ \textcolor{preprocessor}{\#ifndef\ SEGGER\_RTT\_BUFFER\_SECTION}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00126}00126\ \textcolor{preprocessor}{\ \ \#if\ defined(SEGGER\_RTT\_SECTION)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00127}00127\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_BUFFER\_SECTION\ SEGGER\_RTT\_SECTION}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00128}00128\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00129}00129\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00130}00130\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00131}00131\ \textcolor{preprocessor}{\#ifndef\ \ \ SEGGER\_RTT\_ALIGNMENT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00132}00132\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_ALIGNMENT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00133}00133\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00134}00134\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00135}00135\ \textcolor{preprocessor}{\#ifndef\ \ \ SEGGER\_RTT\_BUFFER\_ALIGNMENT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00136}00136\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_BUFFER\_ALIGNMENT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00137}00137\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00138}00138\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00139}00139\ \textcolor{preprocessor}{\#ifndef\ \ \ SEGGER\_RTT\_MODE\_DEFAULT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00140}00140\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_MODE\_DEFAULT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SEGGER\_RTT\_MODE\_NO\_BLOCK\_SKIP}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00141}00141\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00142}00142\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00143}00143\ \textcolor{preprocessor}{\#ifndef\ \ \ SEGGER\_RTT\_LOCK}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00144}00144\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_LOCK()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00145}00145\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00146}00146\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00147}00147\ \textcolor{preprocessor}{\#ifndef\ \ \ SEGGER\_RTT\_UNLOCK}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00148}00148\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_UNLOCK()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00149}00149\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00150}00150\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00151}00151\ \textcolor{preprocessor}{\#ifndef\ \ \ STRLEN}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00152}00152\ \textcolor{preprocessor}{\ \ \#define\ STRLEN(a)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ strlen((a))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00153}00153\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00154}00154\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00155}00155\ \textcolor{preprocessor}{\#ifndef\ \ \ STRCPY}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00156}00156\ \textcolor{preprocessor}{\ \ \#define\ STRCPY(pDest,\ pSrc)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ strcpy((pDest),\ (pSrc))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00157}00157\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00158}00158\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00159}00159\ \textcolor{preprocessor}{\#ifndef\ \ \ SEGGER\_RTT\_MEMCPY\_USE\_BYTELOOP}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00160}00160\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_MEMCPY\_USE\_BYTELOOP\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00161}00161\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00162}00162\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00163}00163\ \textcolor{preprocessor}{\#ifndef\ \ \ SEGGER\_RTT\_MEMCPY}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00164}00164\ \textcolor{preprocessor}{\ \ \#ifdef\ \ MEMCPY}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00165}00165\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_MEMCPY(pDest,\ pSrc,\ NumBytes)\ \ \ \ \ \ MEMCPY((pDest),\ (pSrc),\ (NumBytes))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00166}00166\ \textcolor{preprocessor}{\ \ \#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00167}00167\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_MEMCPY(pDest,\ pSrc,\ NumBytes)\ \ \ \ \ \ memcpy((pDest),\ (pSrc),\ (NumBytes))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00168}00168\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00169}00169\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00170}00170\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00171}00171\ \textcolor{preprocessor}{\#ifndef\ \ \ MIN}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00172}00172\ \textcolor{preprocessor}{\ \ \#define\ MIN(a,\ b)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (((a)\ <\ (b))\ ?\ (a)\ :\ (b))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00173}00173\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00174}00174\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00175}00175\ \textcolor{preprocessor}{\#ifndef\ \ \ MAX}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00176}00176\ \textcolor{preprocessor}{\ \ \#define\ MAX(a,\ b)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (((a)\ >\ (b))\ ?\ (a)\ :\ (b))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00177}00177\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00178}00178\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00179}00179\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00180}00180\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00181}00181\ \textcolor{comment}{*\ \ \ \ \ \ \ Defines,\ fixed}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00182}00182\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00183}00183\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00184}00184\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00185}00185\ \textcolor{preprocessor}{\#if\ (defined\ \_\_ICCARM\_\_)\ ||\ (defined\ \_\_ICCRX\_\_)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00186}00186\ \textcolor{preprocessor}{\ \ \#define\ RTT\_PRAGMA(P)\ \_Pragma(\#P)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00187}00187\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00188}00188\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00189}00189\ \textcolor{preprocessor}{\#if\ SEGGER\_RTT\_ALIGNMENT\ ||\ SEGGER\_RTT\_BUFFER\_ALIGNMENT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00190}00190\ \textcolor{preprocessor}{\ \ \#if\ ((defined\ \_\_GNUC\_\_)\ ||\ (defined\ \_\_clang\_\_))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00191}00191\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_ALIGN(Var,\ Alignment)\ Var\ \_\_attribute\_\_\ ((aligned\ (Alignment)))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00192}00192\ \textcolor{preprocessor}{\ \ \#elif\ (defined\ \_\_ICCARM\_\_)\ ||\ (defined\ \_\_ICCRX\_\_)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00193}00193\ \textcolor{preprocessor}{\ \ \ \ \#define\ PRAGMA(A)\ \_Pragma(\#A)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00194}00194\ \textcolor{preprocessor}{\#define\ SEGGER\_RTT\_ALIGN(Var,\ Alignment)\ RTT\_PRAGMA(data\_alignment=Alignment)\ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00195}00195\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Var}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00196}00196\ \textcolor{preprocessor}{\ \ \#elif\ (defined\ \_\_CC\_ARM)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00197}00197\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_ALIGN(Var,\ Alignment)\ Var\ \_\_attribute\_\_\ ((aligned\ (Alignment)))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00198}00198\ \textcolor{preprocessor}{\ \ \#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00199}00199\ \textcolor{preprocessor}{\ \ \ \ \#error\ "{}Alignment\ not\ supported\ for\ this\ compiler."{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00200}00200\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00201}00201\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00202}00202\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_ALIGN(Var,\ Alignment)\ Var}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00203}00203\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00204}00204\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00205}00205\ \textcolor{preprocessor}{\#if\ defined(SEGGER\_RTT\_SECTION)\ ||\ defined\ (SEGGER\_RTT\_BUFFER\_SECTION)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00206}00206\ \textcolor{preprocessor}{\ \ \#if\ ((defined\ \_\_GNUC\_\_)\ ||\ (defined\ \_\_clang\_\_))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00207}00207\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_PUT\_SECTION(Var,\ Section)\ \_\_attribute\_\_\ ((section\ (Section)))\ Var}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00208}00208\ \textcolor{preprocessor}{\ \ \#elif\ (defined\ \_\_ICCARM\_\_)\ ||\ (defined\ \_\_ICCRX\_\_)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00209}00209\ \textcolor{preprocessor}{\#define\ SEGGER\_RTT\_PUT\_SECTION(Var,\ Section)\ RTT\_PRAGMA(location=Section)\ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00210}00210\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Var}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00211}00211\ \textcolor{preprocessor}{\ \ \#elif\ (defined\ \_\_CC\_ARM)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00212}00212\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_PUT\_SECTION(Var,\ Section)\ \_\_attribute\_\_\ ((section\ (Section),\ zero\_init))\ \ Var}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00213}00213\ \textcolor{preprocessor}{\ \ \#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00214}00214\ \textcolor{preprocessor}{\ \ \ \ \#error\ "{}Section\ placement\ not\ supported\ for\ this\ compiler."{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00215}00215\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00216}00216\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00217}00217\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_PUT\_SECTION(Var,\ Section)\ Var}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00218}00218\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00219}00219\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00220}00220\ \textcolor{preprocessor}{\#if\ SEGGER\_RTT\_ALIGNMENT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00221}00221\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_CB\_ALIGN(Var)\ \ SEGGER\_RTT\_ALIGN(Var,\ SEGGER\_RTT\_ALIGNMENT)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00222}00222\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00223}00223\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_CB\_ALIGN(Var)\ \ Var}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00224}00224\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00225}00225\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00226}00226\ \textcolor{preprocessor}{\#if\ SEGGER\_RTT\_BUFFER\_ALIGNMENT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00227}00227\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_BUFFER\_ALIGN(Var)\ \ SEGGER\_RTT\_ALIGN(Var,\ SEGGER\_RTT\_BUFFER\_ALIGNMENT)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00228}00228\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00229}00229\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_BUFFER\_ALIGN(Var)\ \ Var}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00230}00230\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00231}00231\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00232}00232\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00233}00233\ \textcolor{preprocessor}{\#if\ defined(SEGGER\_RTT\_SECTION)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00234}00234\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_PUT\_CB\_SECTION(Var)\ SEGGER\_RTT\_PUT\_SECTION(Var,\ SEGGER\_RTT\_SECTION)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00235}00235\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00236}00236\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_PUT\_CB\_SECTION(Var)\ Var}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00237}00237\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00238}00238\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00239}00239\ \textcolor{preprocessor}{\#if\ defined(SEGGER\_RTT\_BUFFER\_SECTION)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00240}00240\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_PUT\_BUFFER\_SECTION(Var)\ SEGGER\_RTT\_PUT\_SECTION(Var,\ SEGGER\_RTT\_BUFFER\_SECTION)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00241}00241\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00242}00242\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_PUT\_BUFFER\_SECTION(Var)\ Var}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00243}00243\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00244}00244\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00245}00245\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00246}00246\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00247}00247\ \textcolor{comment}{*\ \ \ \ \ \ \ Static\ const\ data}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00248}00248\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00249}00249\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00250}00250\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00251}00251\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00252}00252\ \textcolor{keyword}{static}\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char}\ \_aTerminalId[16]\ =\ \{\ \textcolor{charliteral}{'0'},\ \textcolor{charliteral}{'1'},\ \textcolor{charliteral}{'2'},\ \textcolor{charliteral}{'3'},\ \textcolor{charliteral}{'4'},\ \textcolor{charliteral}{'5'},\ \textcolor{charliteral}{'6'},\ \textcolor{charliteral}{'7'},\ \textcolor{charliteral}{'8'},\ \textcolor{charliteral}{'9'},\ \textcolor{charliteral}{'A'},\ \textcolor{charliteral}{'B'},\ \textcolor{charliteral}{'C'},\ \textcolor{charliteral}{'D'},\ \textcolor{charliteral}{'E'},\ \textcolor{charliteral}{'F'}\ \};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00253}00253\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00254}00254\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00255}00255\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00256}00256\ \textcolor{comment}{*\ \ \ \ \ \ \ Static\ data}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00257}00257\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00258}00258\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00259}00259\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00260}00260\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00261}00261\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00262}00262\ \textcolor{comment}{//\ RTT\ Control\ Block\ and\ allocate\ buffers\ for\ channel\ 0}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00263}00263\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00264}00264\ \textcolor{preprocessor}{\#if\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00265}00265\ \textcolor{preprocessor}{\ \ \#if\ ((defined\ \_\_GNUC\_\_)\ ||\ (defined\ \_\_clang\_\_))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00266}00266\ \ \ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}\ \_SEGGER\_RTT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_\_attribute\_\_\ ((aligned\ (SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE)));} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00267}00267\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keywordtype}{char}\ \ \ \_acUpBuffer\ \ [SEGGER\_RTT\_\_ROUND\_UP\_2\_CACHE\_LINE\_SIZE(BUFFER\_SIZE\_UP)]\ \ \ \_\_attribute\_\_\ ((aligned\ (SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE)));} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00268}00268\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keywordtype}{char}\ \ \ \_acDownBuffer[SEGGER\_RTT\_\_ROUND\_UP\_2\_CACHE\_LINE\_SIZE(BUFFER\_SIZE\_DOWN)]\ \_\_attribute\_\_\ ((aligned\ (SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE)));} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00269}00269\ \textcolor{preprocessor}{\ \ \#elif\ (defined\ \_\_ICCARM\_\_)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00270}00270\ \textcolor{preprocessor}{\ \ \ \ \#pragma\ data\_alignment=SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00271}00271\ \ \ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}\ \_SEGGER\_RTT;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00272}00272\ \textcolor{preprocessor}{\ \ \ \ \#pragma\ data\_alignment=SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00273}00273\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keywordtype}{char}\ \ \ \_acUpBuffer\ \ [SEGGER\_RTT\_\_ROUND\_UP\_2\_CACHE\_LINE\_SIZE(BUFFER\_SIZE\_UP)];} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00274}00274\ \textcolor{preprocessor}{\ \ \ \ \#pragma\ data\_alignment=SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00275}00275\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keywordtype}{char}\ \ \ \_acDownBuffer[SEGGER\_RTT\_\_ROUND\_UP\_2\_CACHE\_LINE\_SIZE(BUFFER\_SIZE\_DOWN)];} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00276}00276\ \textcolor{preprocessor}{\ \ \#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00277}00277\ \textcolor{preprocessor}{\ \ \ \ \#error\ "{}Don't\ know\ how\ to\ place\ \_SEGGER\_RTT,\ \_acUpBuffer,\ \_acDownBuffer\ cache-\/line\ aligned"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00278}00278\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00279}00279\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00280}00280\ \ \ SEGGER\_RTT\_PUT\_CB\_SECTION(SEGGER\_RTT\_CB\_ALIGN(\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}\ \_SEGGER\_RTT));} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00281}00281\ \ \ SEGGER\_RTT\_PUT\_BUFFER\_SECTION(SEGGER\_RTT\_BUFFER\_ALIGN(\textcolor{keyword}{static}\ \textcolor{keywordtype}{char}\ \_acUpBuffer\ \ [BUFFER\_SIZE\_UP]));} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00282}00282\ \ \ SEGGER\_RTT\_PUT\_BUFFER\_SECTION(SEGGER\_RTT\_BUFFER\_ALIGN(\textcolor{keyword}{static}\ \textcolor{keywordtype}{char}\ \_acDownBuffer[BUFFER\_SIZE\_DOWN]));} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00283}00283\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00284}00284\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00285}00285\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char}\ \_ActiveTerminal;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00286}00286\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00287}00287\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00288}00288\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00289}00289\ \textcolor{comment}{*\ \ \ \ \ \ \ Static\ functions}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00290}00290\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00291}00291\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00292}00292\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00293}00293\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00294}00294\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00295}00295\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00296}00296\ \textcolor{comment}{*\ \ \ \ \ \ \ \_DoInit()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00297}00297\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00298}00298\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00299}00299\ \textcolor{comment}{*\ \ \ \ Initializes\ the\ control\ block\ an\ buffers.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00300}00300\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00301}00301\ \textcolor{comment}{*\ \ Notes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00302}00302\ \textcolor{comment}{*\ \ \ \ (1)\ May\ only\ be\ called\ via\ INIT()\ to\ avoid\ overriding\ settings.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00303}00303\ \textcolor{comment}{*\ \ \ \ \ \ \ \ The\ only\ exception\ is\ SEGGER\_RTT\_Init(),\ to\ make\ an\ intentional\ override\ possible.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00304}00304\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00305}00305\ \textcolor{preprocessor}{\ \ \#define\ INIT()\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00306}00306\ \textcolor{preprocessor}{\ \ \ \ do\ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00307}00307\ \textcolor{preprocessor}{\ \ \ \ \ \ volatile\ SEGGER\_RTT\_CB*\ pRTTCBInit;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00308}00308\ \textcolor{preprocessor}{\ \ \ \ \ \ pRTTCBInit\ =\ (volatile\ SEGGER\_RTT\_CB*)((uintptr\_t)\&\_SEGGER\_RTT\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00309}00309\ \textcolor{preprocessor}{\ \ \ \ \ \ if\ (pRTTCBInit-\/>acID[0]\ !=\ 'S')\ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00310}00310\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \_DoInit();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00311}00311\ \textcolor{preprocessor}{\ \ \ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00312}00312\ \textcolor{preprocessor}{\ \ \ \ \}\ while\ (0)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00313}00313\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00314}00314\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{void}\ \_DoInit(\textcolor{keywordtype}{void})\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00315}00315\ \ \ \textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*\ p;\ \ \ \textcolor{comment}{//\ Volatile\ to\ make\ sure\ that\ compiler\ cannot\ change\ the\ order\ of\ accesses\ to\ the\ control\ block}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00316}00316\ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ \_aInitStr[]\ =\ \textcolor{stringliteral}{"{}\(\backslash\)0\(\backslash\)0\(\backslash\)0\(\backslash\)0\(\backslash\)0\(\backslash\)0TTR\ REGGES"{}};\ \ \textcolor{comment}{//\ Init\ complete\ ID\ string\ to\ make\ sure\ that\ things\ also\ work\ if\ RTT\ is\ linked\ to\ a\ no-\/init\ memory\ area}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00317}00317\ \ \ \textcolor{keywordtype}{unsigned}\ i;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00318}00318\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00319}00319\ \ \ \textcolor{comment}{//\ Initialize\ control\ block}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00320}00320\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00321}00321\ \ \ p\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\ (\textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*)((uintptr\_t)\&\_SEGGER\_RTT\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ control\ block\ uncached\ so\ that\ nothing\ in\ the\ cache\ ever\ becomes\ dirty\ and\ all\ changes\ are\ visible\ in\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00322}00322\ \ \ memset((\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*)p,\ 0,\ \textcolor{keyword}{sizeof}(\_SEGGER\_RTT));\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Make\ sure\ that\ the\ RTT\ CB\ is\ always\ zero\ initialized.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00323}00323\ \ \ p-\/>MaxNumUpBuffers\ \ \ \ =\ SEGGER\_RTT\_MAX\_NUM\_UP\_BUFFERS;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00324}00324\ \ \ p-\/>MaxNumDownBuffers\ \ =\ SEGGER\_RTT\_MAX\_NUM\_DOWN\_BUFFERS;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00325}00325\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00326}00326\ \ \ \textcolor{comment}{//\ Initialize\ up\ buffer\ 0}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00327}00327\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00328}00328\ \ \ p-\/>aUp[0].sName\ \ \ \ \ \ \ \ \ =\ \textcolor{stringliteral}{"{}Terminal"{}};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00329}00329\ \ \ p-\/>aUp[0].pBuffer\ \ \ \ \ \ \ =\ \_acUpBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00330}00330\ \ \ p-\/>aUp[0].SizeOfBuffer\ \ =\ BUFFER\_SIZE\_UP;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00331}00331\ \ \ p-\/>aUp[0].RdOff\ \ \ \ \ \ \ \ \ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00332}00332\ \ \ p-\/>aUp[0].WrOff\ \ \ \ \ \ \ \ \ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00333}00333\ \ \ p-\/>aUp[0].Flags\ \ \ \ \ \ \ \ \ =\ SEGGER\_RTT\_MODE\_DEFAULT;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00334}00334\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00335}00335\ \ \ \textcolor{comment}{//\ Initialize\ down\ buffer\ 0}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00336}00336\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00337}00337\ \ \ p-\/>aDown[0].sName\ \ \ \ \ \ \ \ \ =\ \textcolor{stringliteral}{"{}Terminal"{}};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00338}00338\ \ \ p-\/>aDown[0].pBuffer\ \ \ \ \ \ \ =\ \_acDownBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00339}00339\ \ \ p-\/>aDown[0].SizeOfBuffer\ \ =\ BUFFER\_SIZE\_DOWN;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00340}00340\ \ \ p-\/>aDown[0].RdOff\ \ \ \ \ \ \ \ \ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00341}00341\ \ \ p-\/>aDown[0].WrOff\ \ \ \ \ \ \ \ \ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00342}00342\ \ \ p-\/>aDown[0].Flags\ \ \ \ \ \ \ \ \ =\ SEGGER\_RTT\_MODE\_DEFAULT;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00343}00343\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00344}00344\ \ \ \textcolor{comment}{//\ Finish\ initialization\ of\ the\ control\ block.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00345}00345\ \ \ \textcolor{comment}{//\ Copy\ Id\ string\ backwards\ to\ make\ sure\ that\ "{}SEGGER\ RTT"{}\ is\ not\ found\ in\ initializer\ memory\ (usually\ flash),}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00346}00346\ \ \ \textcolor{comment}{//\ as\ this\ would\ cause\ J-\/Link\ to\ "{}find"{}\ the\ control\ block\ at\ a\ wrong\ address.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00347}00347\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00348}00348\ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ order\ of\ memory\ accesses\ for\ cores\ that\ may\ perform\ out-\/of-\/order\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00349}00349\ \ \ \textcolor{keywordflow}{for}\ (i\ =\ 0;\ i\ <\ \textcolor{keyword}{sizeof}(\_aInitStr)\ -\/\ 1;\ ++i)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00350}00350\ \ \ \ \ p-\/>acID[i]\ =\ \_aInitStr[\textcolor{keyword}{sizeof}(\_aInitStr)\ -\/\ 2\ -\/\ i];\ \ \textcolor{comment}{//\ Skip\ terminating\ \(\backslash\)0\ at\ the\ end\ of\ the\ array}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00351}00351\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00352}00352\ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ order\ of\ memory\ accesses\ for\ cores\ that\ may\ perform\ out-\/of-\/order\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00353}00353\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00354}00354\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00355}00355\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00356}00356\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00357}00357\ \textcolor{comment}{*\ \ \ \ \ \ \ \_WriteBlocking()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00358}00358\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00359}00359\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00360}00360\ \textcolor{comment}{*\ \ \ \ Stores\ a\ specified\ number\ of\ characters\ in\ SEGGER\ RTT\ ring\ buffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00361}00361\ \textcolor{comment}{*\ \ \ \ and\ updates\ the\ associated\ write\ pointer\ which\ is\ periodically}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00362}00362\ \textcolor{comment}{*\ \ \ \ read\ by\ the\ host.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00363}00363\ \textcolor{comment}{*\ \ \ \ The\ caller\ is\ responsible\ for\ managing\ the\ write\ chunk\ sizes\ as}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00364}00364\ \textcolor{comment}{*\ \ \ \ \_WriteBlocking()\ will\ block\ until\ all\ data\ has\ been\ posted\ successfully.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00365}00365\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00366}00366\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00367}00367\ \textcolor{comment}{*\ \ \ \ pRing\ \ \ \ \ \ \ \ Ring\ buffer\ to\ post\ to.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00368}00368\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ \ \ \ \ Pointer\ to\ character\ array.\ Does\ not\ need\ to\ point\ to\ a\ \(\backslash\)0\ terminated\ string.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00369}00369\ \textcolor{comment}{*\ \ \ \ NumBytes\ \ \ \ \ Number\ of\ bytes\ to\ be\ stored\ in\ the\ SEGGER\ RTT\ control\ block.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00370}00370\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00371}00371\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00372}00372\ \textcolor{comment}{*\ \ \ \ >=\ 0\ -\/\ Number\ of\ bytes\ written\ into\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00373}00373\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00374}00374\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{unsigned}\ \_WriteBlocking(\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ pRing,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ NumBytes)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00375}00375\ \ \ \textcolor{keywordtype}{unsigned}\ NumBytesToWrite;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00376}00376\ \ \ \textcolor{keywordtype}{unsigned}\ NumBytesWritten;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00377}00377\ \ \ \textcolor{keywordtype}{unsigned}\ RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00378}00378\ \ \ \textcolor{keywordtype}{unsigned}\ WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00379}00379\ \ \ \textcolor{keyword}{volatile}\ \textcolor{keywordtype}{char}*\ pDst;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00380}00380\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00381}00381\ \ \ \textcolor{comment}{//\ Write\ data\ to\ buffer\ and\ handle\ wrap-\/around\ if\ necessary}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00382}00382\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00383}00383\ \ \ NumBytesWritten\ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00384}00384\ \ \ WrOff\ =\ pRing-\/>WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00385}00385\ \ \ \textcolor{keywordflow}{do}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00386}00386\ \ \ \ \ RdOff\ =\ pRing-\/>RdOff;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ May\ be\ changed\ by\ host\ (debug\ probe)\ in\ the\ meantime}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00387}00387\ \ \ \ \ \textcolor{keywordflow}{if}\ (RdOff\ >\ WrOff)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00388}00388\ \ \ \ \ \ \ NumBytesToWrite\ =\ RdOff\ -\/\ WrOff\ -\/\ 1u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00389}00389\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00390}00390\ \ \ \ \ \ \ NumBytesToWrite\ =\ pRing-\/>SizeOfBuffer\ -\/\ (WrOff\ -\/\ RdOff\ +\ 1u);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00391}00391\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00392}00392\ \ \ \ \ NumBytesToWrite\ =\ MIN(NumBytesToWrite,\ (pRing-\/>SizeOfBuffer\ -\/\ WrOff));\ \ \ \ \ \ \textcolor{comment}{//\ Number\ of\ bytes\ that\ can\ be\ written\ until\ buffer\ wrap-\/around}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00393}00393\ \ \ \ \ NumBytesToWrite\ =\ MIN(NumBytesToWrite,\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00394}00394\ \ \ \ \ pDst\ =\ (pRing-\/>pBuffer\ +\ WrOff)\ +\ SEGGER\_RTT\_UNCACHED\_OFF;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00395}00395\ \textcolor{preprocessor}{\#if\ SEGGER\_RTT\_MEMCPY\_USE\_BYTELOOP}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00396}00396\ \ \ \ \ NumBytesWritten\ +=\ NumBytesToWrite;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00397}00397\ \ \ \ \ NumBytes\ \ \ \ \ \ \ \ -\/=\ NumBytesToWrite;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00398}00398\ \ \ \ \ WrOff\ \ \ \ \ \ \ \ \ \ \ +=\ NumBytesToWrite;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00399}00399\ \ \ \ \ \textcolor{keywordflow}{while}\ (NumBytesToWrite-\/-\/)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00400}00400\ \ \ \ \ \ \ *pDst++\ =\ *pBuffer++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00401}00401\ \ \ \ \ \};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00402}00402\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00403}00403\ \ \ \ \ SEGGER\_RTT\_MEMCPY((\textcolor{keywordtype}{void}*)pDst,\ pBuffer,\ NumBytesToWrite);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00404}00404\ \ \ \ \ NumBytesWritten\ +=\ NumBytesToWrite;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00405}00405\ \ \ \ \ pBuffer\ \ \ \ \ \ \ \ \ +=\ NumBytesToWrite;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00406}00406\ \ \ \ \ NumBytes\ \ \ \ \ \ \ \ -\/=\ NumBytesToWrite;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00407}00407\ \ \ \ \ WrOff\ \ \ \ \ \ \ \ \ \ \ +=\ NumBytesToWrite;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00408}00408\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00409}00409\ \ \ \ \ \textcolor{keywordflow}{if}\ (WrOff\ ==\ pRing-\/>SizeOfBuffer)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00410}00410\ \ \ \ \ \ \ WrOff\ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00411}00411\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00412}00412\ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00413}00413\ \ \ \ \ pRing-\/>WrOff\ =\ WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00414}00414\ \ \ \}\ \textcolor{keywordflow}{while}\ (NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00415}00415\ \ \ \textcolor{keywordflow}{return}\ NumBytesWritten;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00416}00416\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00417}00417\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00418}00418\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00419}00419\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00420}00420\ \textcolor{comment}{*\ \ \ \ \ \ \ \_WriteNoCheck()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00421}00421\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00422}00422\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00423}00423\ \textcolor{comment}{*\ \ \ \ Stores\ a\ specified\ number\ of\ characters\ in\ SEGGER\ RTT\ ring\ buffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00424}00424\ \textcolor{comment}{*\ \ \ \ and\ updates\ the\ associated\ write\ pointer\ which\ is\ periodically}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00425}00425\ \textcolor{comment}{*\ \ \ \ read\ by\ the\ host.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00426}00426\ \textcolor{comment}{*\ \ \ \ It\ is\ callers\ responsibility\ to\ make\ sure\ data\ actually\ fits\ in\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00427}00427\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00428}00428\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00429}00429\ \textcolor{comment}{*\ \ \ \ pRing\ \ \ \ \ \ \ \ Ring\ buffer\ to\ post\ to.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00430}00430\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ \ \ \ \ Pointer\ to\ character\ array.\ Does\ not\ need\ to\ point\ to\ a\ \(\backslash\)0\ terminated\ string.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00431}00431\ \textcolor{comment}{*\ \ \ \ NumBytes\ \ \ \ \ Number\ of\ bytes\ to\ be\ stored\ in\ the\ SEGGER\ RTT\ control\ block.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00432}00432\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00433}00433\ \textcolor{comment}{*\ \ Notes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00434}00434\ \textcolor{comment}{*\ \ \ \ (1)\ If\ there\ might\ not\ be\ enough\ space\ in\ the\ "{}Up"{}-\/buffer,\ call\ \_WriteBlocking}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00435}00435\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00436}00436\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{void}\ \_WriteNoCheck(\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ pRing,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ pData,\ \textcolor{keywordtype}{unsigned}\ NumBytes)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00437}00437\ \ \ \textcolor{keywordtype}{unsigned}\ NumBytesAtOnce;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00438}00438\ \ \ \textcolor{keywordtype}{unsigned}\ WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00439}00439\ \ \ \textcolor{keywordtype}{unsigned}\ Rem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00440}00440\ \ \ \textcolor{keyword}{volatile}\ \textcolor{keywordtype}{char}*\ pDst;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00441}00441\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00442}00442\ \ \ WrOff\ =\ pRing-\/>WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00443}00443\ \ \ Rem\ =\ pRing-\/>SizeOfBuffer\ -\/\ WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00444}00444\ \ \ \textcolor{keywordflow}{if}\ (Rem\ >\ NumBytes)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00445}00445\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00446}00446\ \ \ \ \ \textcolor{comment}{//\ All\ data\ fits\ before\ wrap\ around}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00447}00447\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00448}00448\ \ \ \ \ pDst\ =\ (pRing-\/>pBuffer\ +\ WrOff)\ +\ SEGGER\_RTT\_UNCACHED\_OFF;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00449}00449\ \textcolor{preprocessor}{\#if\ SEGGER\_RTT\_MEMCPY\_USE\_BYTELOOP}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00450}00450\ \ \ \ \ WrOff\ +=\ NumBytes;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00451}00451\ \ \ \ \ \textcolor{keywordflow}{while}\ (NumBytes-\/-\/)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00452}00452\ \ \ \ \ \ \ *pDst++\ =\ *pData++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00453}00453\ \ \ \ \ \};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00454}00454\ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00455}00455\ \ \ \ \ pRing-\/>WrOff\ =\ WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00456}00456\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00457}00457\ \ \ \ \ SEGGER\_RTT\_MEMCPY((\textcolor{keywordtype}{void}*)pDst,\ pData,\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00458}00458\ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00459}00459\ \ \ \ \ pRing-\/>WrOff\ =\ WrOff\ +\ NumBytes;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00460}00460\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00461}00461\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00462}00462\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00463}00463\ \ \ \ \ \textcolor{comment}{//\ We\ reach\ the\ end\ of\ the\ buffer,\ so\ need\ to\ wrap\ around}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00464}00464\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00465}00465\ \textcolor{preprocessor}{\#if\ SEGGER\_RTT\_MEMCPY\_USE\_BYTELOOP}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00466}00466\ \ \ \ \ pDst\ =\ (pRing-\/>pBuffer\ +\ WrOff)\ +\ SEGGER\_RTT\_UNCACHED\_OFF;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00467}00467\ \ \ \ \ NumBytesAtOnce\ =\ Rem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00468}00468\ \ \ \ \ \textcolor{keywordflow}{while}\ (NumBytesAtOnce-\/-\/)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00469}00469\ \ \ \ \ \ \ *pDst++\ =\ *pData++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00470}00470\ \ \ \ \ \};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00471}00471\ \ \ \ \ pDst\ =\ pRing-\/>pBuffer\ +\ SEGGER\_RTT\_UNCACHED\_OFF;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00472}00472\ \ \ \ \ NumBytesAtOnce\ =\ NumBytes\ -\/\ Rem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00473}00473\ \ \ \ \ \textcolor{keywordflow}{while}\ (NumBytesAtOnce-\/-\/)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00474}00474\ \ \ \ \ \ \ *pDst++\ =\ *pData++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00475}00475\ \ \ \ \ \};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00476}00476\ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00477}00477\ \ \ \ \ pRing-\/>WrOff\ =\ NumBytes\ -\/\ Rem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00478}00478\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00479}00479\ \ \ \ \ NumBytesAtOnce\ =\ Rem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00480}00480\ \ \ \ \ pDst\ =\ (pRing-\/>pBuffer\ +\ WrOff)\ +\ SEGGER\_RTT\_UNCACHED\_OFF;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00481}00481\ \ \ \ \ SEGGER\_RTT\_MEMCPY((\textcolor{keywordtype}{void}*)pDst,\ pData,\ NumBytesAtOnce);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00482}00482\ \ \ \ \ NumBytesAtOnce\ =\ NumBytes\ -\/\ Rem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00483}00483\ \ \ \ \ pDst\ =\ pRing-\/>pBuffer\ +\ SEGGER\_RTT\_UNCACHED\_OFF;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00484}00484\ \ \ \ \ SEGGER\_RTT\_MEMCPY((\textcolor{keywordtype}{void}*)pDst,\ pData\ +\ Rem,\ NumBytesAtOnce);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00485}00485\ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00486}00486\ \ \ \ \ pRing-\/>WrOff\ =\ NumBytesAtOnce;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00487}00487\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00488}00488\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00489}00489\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00490}00490\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00491}00491\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00492}00492\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00493}00493\ \textcolor{comment}{*\ \ \ \ \ \ \ \_PostTerminalSwitch()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00494}00494\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00495}00495\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00496}00496\ \textcolor{comment}{*\ \ \ \ Switch\ terminal\ to\ the\ given\ terminal\ ID.\ \ It\ is\ the\ caller's}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00497}00497\ \textcolor{comment}{*\ \ \ \ responsibility\ to\ ensure\ the\ terminal\ ID\ is\ correct\ and\ there\ is}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00498}00498\ \textcolor{comment}{*\ \ \ \ enough\ space\ in\ the\ buffer\ for\ this\ to\ complete\ successfully.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00499}00499\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00500}00500\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00501}00501\ \textcolor{comment}{*\ \ \ \ pRing\ \ \ \ \ \ \ \ Ring\ buffer\ to\ post\ to.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00502}00502\ \textcolor{comment}{*\ \ \ \ TerminalId\ \ \ Terminal\ ID\ to\ switch\ to.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00503}00503\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00504}00504\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{void}\ \_PostTerminalSwitch(\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ pRing,\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char}\ TerminalId)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00505}00505\ \ \ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char}\ ac[2];} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00506}00506\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00507}00507\ \ \ ac[0]\ =\ 0xFFu;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00508}00508\ \ \ ac[1]\ =\ \_aTerminalId[TerminalId];\ \ \textcolor{comment}{//\ Caller\ made\ already\ sure\ that\ TerminalId\ does\ not\ exceed\ our\ terminal\ limit}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00509}00509\ \ \ \_WriteBlocking(pRing,\ (\textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*)ac,\ 2u);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00510}00510\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00511}00511\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00512}00512\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00513}00513\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00514}00514\ \textcolor{comment}{*\ \ \ \ \ \ \ \_GetAvailWriteSpace()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00515}00515\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00516}00516\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00517}00517\ \textcolor{comment}{*\ \ \ \ Returns\ the\ number\ of\ bytes\ that\ can\ be\ written\ to\ the\ ring}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00518}00518\ \textcolor{comment}{*\ \ \ \ buffer\ without\ blocking.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00519}00519\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00520}00520\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00521}00521\ \textcolor{comment}{*\ \ \ \ pRing\ \ \ \ \ \ \ \ Ring\ buffer\ to\ check.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00522}00522\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00523}00523\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00524}00524\ \textcolor{comment}{*\ \ \ \ Number\ of\ bytes\ that\ are\ free\ in\ the\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00525}00525\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00526}00526\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{unsigned}\ \_GetAvailWriteSpace(\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ pRing)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00527}00527\ \ \ \textcolor{keywordtype}{unsigned}\ RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00528}00528\ \ \ \textcolor{keywordtype}{unsigned}\ WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00529}00529\ \ \ \textcolor{keywordtype}{unsigned}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00530}00530\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00531}00531\ \ \ \textcolor{comment}{//\ Avoid\ warnings\ regarding\ volatile\ access\ order.\ \ It's\ not\ a\ problem}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00532}00532\ \ \ \textcolor{comment}{//\ in\ this\ case,\ but\ dampen\ compiler\ enthusiasm.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00533}00533\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00534}00534\ \ \ RdOff\ =\ pRing-\/>RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00535}00535\ \ \ WrOff\ =\ pRing-\/>WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00536}00536\ \ \ \textcolor{keywordflow}{if}\ (RdOff\ <=\ WrOff)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00537}00537\ \ \ \ \ r\ =\ pRing-\/>SizeOfBuffer\ -\/\ 1u\ -\/\ WrOff\ +\ RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00538}00538\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00539}00539\ \ \ \ \ r\ =\ RdOff\ -\/\ WrOff\ -\/\ 1u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00540}00540\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00541}00541\ \ \ \textcolor{keywordflow}{return}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00542}00542\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00543}00543\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00544}00544\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00545}00545\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00546}00546\ \textcolor{comment}{*\ \ \ \ \ \ \ Public\ code}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00547}00547\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00548}00548\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00549}00549\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00550}00550\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00551}00551\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00552}00552\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00553}00553\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_ReadUpBufferNoLock()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00554}00554\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00555}00555\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00556}00556\ \textcolor{comment}{*\ \ \ \ Reads\ characters\ from\ SEGGER\ real-\/time-\/terminal\ control\ block}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00557}00557\ \textcolor{comment}{*\ \ \ \ which\ have\ been\ previously\ stored\ by\ the\ application.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00558}00558\ \textcolor{comment}{*\ \ \ \ Do\ not\ lock\ against\ interrupts\ and\ multiple\ access.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00559}00559\ \textcolor{comment}{*\ \ \ \ Used\ to\ do\ the\ same\ operation\ that\ J-\/Link\ does,\ to\ transfer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00560}00560\ \textcolor{comment}{*\ \ \ \ RTT\ data\ via\ other\ channels,\ such\ as\ TCP/IP\ or\ UART.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00561}00561\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00562}00562\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00563}00563\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ Up-\/buffer\ to\ be\ used.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00564}00564\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ \ \ \ \ Pointer\ to\ buffer\ provided\ by\ target\ application,\ to\ copy\ characters\ from\ RTT-\/up-\/buffer\ to.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00565}00565\ \textcolor{comment}{*\ \ \ \ BufferSize\ \ \ Size\ of\ the\ target\ application\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00566}00566\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00567}00567\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00568}00568\ \textcolor{comment}{*\ \ \ \ Number\ of\ bytes\ that\ have\ been\ read.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00569}00569\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00570}00570\ \textcolor{comment}{*\ \ Additional\ information}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00571}00571\ \textcolor{comment}{*\ \ \ \ This\ function\ must\ not\ be\ called\ when\ J-\/Link\ might\ also\ do\ RTT.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00572}00572\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00573}00573\ \textcolor{keywordtype}{unsigned}\ SEGGER\_RTT\_ReadUpBufferNoLock(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keywordtype}{void}*\ pData,\ \textcolor{keywordtype}{unsigned}\ BufferSize)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00574}00574\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00575}00575\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ NumBytesRead;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00576}00576\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00577}00577\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00578}00578\ \ \ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char}*\ \ \ \ \ \ \ \ \ \ pBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00579}00579\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ \ \ pRing;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00580}00580\ \ \ \textcolor{keyword}{volatile}\ \textcolor{keywordtype}{char}*\ \ \ \ \ \ \ \ \ \ pSrc;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00581}00581\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00582}00582\ \ \ INIT();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00583}00583\ \ \ pRing\ =\ (\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*)((uintptr\_t)\&\_SEGGER\_RTT.aUp[BufferIndex]\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00584}00584\ \ \ pBuffer\ =\ (\textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char}*)pData;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00585}00585\ \ \ RdOff\ =\ pRing-\/>RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00586}00586\ \ \ WrOff\ =\ pRing-\/>WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00587}00587\ \ \ NumBytesRead\ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00588}00588\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00589}00589\ \ \ \textcolor{comment}{//\ Read\ from\ current\ read\ position\ to\ wrap-\/around\ of\ buffer,\ first}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00590}00590\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00591}00591\ \ \ \textcolor{keywordflow}{if}\ (RdOff\ >\ WrOff)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00592}00592\ \ \ \ \ NumBytesRem\ =\ pRing-\/>SizeOfBuffer\ -\/\ RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00593}00593\ \ \ \ \ NumBytesRem\ =\ MIN(NumBytesRem,\ BufferSize);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00594}00594\ \ \ \ \ pSrc\ =\ (pRing-\/>pBuffer\ +\ RdOff)\ +\ SEGGER\_RTT\_UNCACHED\_OFF;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00595}00595\ \textcolor{preprocessor}{\#if\ SEGGER\_RTT\_MEMCPY\_USE\_BYTELOOP}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00596}00596\ \ \ \ \ NumBytesRead\ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00597}00597\ \ \ \ \ BufferSize\ \ \ -\/=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00598}00598\ \ \ \ \ RdOff\ \ \ \ \ \ \ \ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00599}00599\ \ \ \ \ \textcolor{keywordflow}{while}\ (NumBytesRem-\/-\/)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00600}00600\ \ \ \ \ \ \ *pBuffer++\ =\ *pSrc++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00601}00601\ \ \ \ \ \};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00602}00602\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00603}00603\ \ \ \ \ SEGGER\_RTT\_MEMCPY(pBuffer,\ (\textcolor{keywordtype}{void}*)pSrc,\ NumBytesRem);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00604}00604\ \ \ \ \ NumBytesRead\ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00605}00605\ \ \ \ \ pBuffer\ \ \ \ \ \ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00606}00606\ \ \ \ \ BufferSize\ \ \ -\/=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00607}00607\ \ \ \ \ RdOff\ \ \ \ \ \ \ \ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00608}00608\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00609}00609\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00610}00610\ \ \ \ \ \textcolor{comment}{//\ Handle\ wrap-\/around\ of\ buffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00611}00611\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00612}00612\ \ \ \ \ \textcolor{keywordflow}{if}\ (RdOff\ ==\ pRing-\/>SizeOfBuffer)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00613}00613\ \ \ \ \ \ \ RdOff\ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00614}00614\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00615}00615\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00616}00616\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00617}00617\ \ \ \textcolor{comment}{//\ Read\ remaining\ items\ of\ buffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00618}00618\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00619}00619\ \ \ NumBytesRem\ =\ WrOff\ -\/\ RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00620}00620\ \ \ NumBytesRem\ =\ MIN(NumBytesRem,\ BufferSize);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00621}00621\ \ \ \textcolor{keywordflow}{if}\ (NumBytesRem\ >\ 0u)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00622}00622\ \ \ \ \ pSrc\ =\ (pRing-\/>pBuffer\ +\ RdOff)\ +\ SEGGER\_RTT\_UNCACHED\_OFF;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00623}00623\ \textcolor{preprocessor}{\#if\ SEGGER\_RTT\_MEMCPY\_USE\_BYTELOOP}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00624}00624\ \ \ \ \ NumBytesRead\ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00625}00625\ \ \ \ \ BufferSize\ \ \ -\/=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00626}00626\ \ \ \ \ RdOff\ \ \ \ \ \ \ \ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00627}00627\ \ \ \ \ \textcolor{keywordflow}{while}\ (NumBytesRem-\/-\/)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00628}00628\ \ \ \ \ \ \ *pBuffer++\ =\ *pSrc++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00629}00629\ \ \ \ \ \};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00630}00630\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00631}00631\ \ \ \ \ SEGGER\_RTT\_MEMCPY(pBuffer,\ (\textcolor{keywordtype}{void}*)pSrc,\ NumBytesRem);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00632}00632\ \ \ \ \ NumBytesRead\ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00633}00633\ \ \ \ \ pBuffer\ \ \ \ \ \ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00634}00634\ \ \ \ \ BufferSize\ \ \ -\/=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00635}00635\ \ \ \ \ RdOff\ \ \ \ \ \ \ \ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00636}00636\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00637}00637\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00638}00638\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00639}00639\ \ \ \textcolor{comment}{//\ Update\ read\ offset\ of\ buffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00640}00640\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00641}00641\ \ \ \textcolor{keywordflow}{if}\ (NumBytesRead)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00642}00642\ \ \ \ \ pRing-\/>RdOff\ =\ RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00643}00643\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00644}00644\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00645}00645\ \ \ \textcolor{keywordflow}{return}\ NumBytesRead;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00646}00646\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00647}00647\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00648}00648\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00649}00649\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00650}00650\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_ReadNoLock()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00651}00651\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00652}00652\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00653}00653\ \textcolor{comment}{*\ \ \ \ Reads\ characters\ from\ SEGGER\ real-\/time-\/terminal\ control\ block}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00654}00654\ \textcolor{comment}{*\ \ \ \ which\ have\ been\ previously\ stored\ by\ the\ host.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00655}00655\ \textcolor{comment}{*\ \ \ \ Do\ not\ lock\ against\ interrupts\ and\ multiple\ access.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00656}00656\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00657}00657\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00658}00658\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ Down-\/buffer\ to\ be\ used\ (e.g.\ 0\ for\ "{}Terminal"{}).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00659}00659\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ \ \ \ \ Pointer\ to\ buffer\ provided\ by\ target\ application,\ to\ copy\ characters\ from\ RTT-\/down-\/buffer\ to.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00660}00660\ \textcolor{comment}{*\ \ \ \ BufferSize\ \ \ Size\ of\ the\ target\ application\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00661}00661\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00662}00662\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00663}00663\ \textcolor{comment}{*\ \ \ \ Number\ of\ bytes\ that\ have\ been\ read.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00664}00664\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00665}00665\ \textcolor{keywordtype}{unsigned}\ SEGGER\_RTT\_ReadNoLock(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keywordtype}{void}*\ pData,\ \textcolor{keywordtype}{unsigned}\ BufferSize)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00666}00666\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00667}00667\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ NumBytesRead;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00668}00668\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00669}00669\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00670}00670\ \ \ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char}*\ \ \ \ \ \ \ \ \ \ pBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00671}00671\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n}{SEGGER\_RTT\_BUFFER\_DOWN}}*\ pRing;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00672}00672\ \ \ \textcolor{keyword}{volatile}\ \textcolor{keywordtype}{char}*\ \ \ \ \ \ \ \ \ \ pSrc;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00673}00673\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00674}00674\ \ \ INIT();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00675}00675\ \ \ pRing\ =\ (\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n}{SEGGER\_RTT\_BUFFER\_DOWN}}*)((uintptr\_t)\&\_SEGGER\_RTT.aDown[BufferIndex]\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00676}00676\ \ \ pBuffer\ =\ (\textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char}*)pData;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00677}00677\ \ \ RdOff\ =\ pRing-\/>RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00678}00678\ \ \ WrOff\ =\ pRing-\/>WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00679}00679\ \ \ NumBytesRead\ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00680}00680\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00681}00681\ \ \ \textcolor{comment}{//\ Read\ from\ current\ read\ position\ to\ wrap-\/around\ of\ buffer,\ first}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00682}00682\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00683}00683\ \ \ \textcolor{keywordflow}{if}\ (RdOff\ >\ WrOff)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00684}00684\ \ \ \ \ NumBytesRem\ =\ pRing-\/>SizeOfBuffer\ -\/\ RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00685}00685\ \ \ \ \ NumBytesRem\ =\ MIN(NumBytesRem,\ BufferSize);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00686}00686\ \ \ \ \ pSrc\ =\ (pRing-\/>pBuffer\ +\ RdOff)\ +\ SEGGER\_RTT\_UNCACHED\_OFF;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00687}00687\ \textcolor{preprocessor}{\#if\ SEGGER\_RTT\_MEMCPY\_USE\_BYTELOOP}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00688}00688\ \ \ \ \ NumBytesRead\ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00689}00689\ \ \ \ \ BufferSize\ \ \ -\/=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00690}00690\ \ \ \ \ RdOff\ \ \ \ \ \ \ \ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00691}00691\ \ \ \ \ \textcolor{keywordflow}{while}\ (NumBytesRem-\/-\/)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00692}00692\ \ \ \ \ \ \ *pBuffer++\ =\ *pSrc++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00693}00693\ \ \ \ \ \};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00694}00694\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00695}00695\ \ \ \ \ SEGGER\_RTT\_MEMCPY(pBuffer,\ (\textcolor{keywordtype}{void}*)pSrc,\ NumBytesRem);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00696}00696\ \ \ \ \ NumBytesRead\ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00697}00697\ \ \ \ \ pBuffer\ \ \ \ \ \ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00698}00698\ \ \ \ \ BufferSize\ \ \ -\/=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00699}00699\ \ \ \ \ RdOff\ \ \ \ \ \ \ \ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00700}00700\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00701}00701\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00702}00702\ \ \ \ \ \textcolor{comment}{//\ Handle\ wrap-\/around\ of\ buffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00703}00703\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00704}00704\ \ \ \ \ \textcolor{keywordflow}{if}\ (RdOff\ ==\ pRing-\/>SizeOfBuffer)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00705}00705\ \ \ \ \ \ \ RdOff\ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00706}00706\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00707}00707\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00708}00708\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00709}00709\ \ \ \textcolor{comment}{//\ Read\ remaining\ items\ of\ buffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00710}00710\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00711}00711\ \ \ NumBytesRem\ =\ WrOff\ -\/\ RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00712}00712\ \ \ NumBytesRem\ =\ MIN(NumBytesRem,\ BufferSize);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00713}00713\ \ \ \textcolor{keywordflow}{if}\ (NumBytesRem\ >\ 0u)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00714}00714\ \ \ \ \ pSrc\ =\ (pRing-\/>pBuffer\ +\ RdOff)\ +\ SEGGER\_RTT\_UNCACHED\_OFF;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00715}00715\ \textcolor{preprocessor}{\#if\ SEGGER\_RTT\_MEMCPY\_USE\_BYTELOOP}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00716}00716\ \ \ \ \ NumBytesRead\ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00717}00717\ \ \ \ \ BufferSize\ \ \ -\/=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00718}00718\ \ \ \ \ RdOff\ \ \ \ \ \ \ \ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00719}00719\ \ \ \ \ \textcolor{keywordflow}{while}\ (NumBytesRem-\/-\/)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00720}00720\ \ \ \ \ \ \ *pBuffer++\ =\ *pSrc++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00721}00721\ \ \ \ \ \};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00722}00722\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00723}00723\ \ \ \ \ SEGGER\_RTT\_MEMCPY(pBuffer,\ (\textcolor{keywordtype}{void}*)pSrc,\ NumBytesRem);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00724}00724\ \ \ \ \ NumBytesRead\ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00725}00725\ \ \ \ \ pBuffer\ \ \ \ \ \ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00726}00726\ \ \ \ \ BufferSize\ \ \ -\/=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00727}00727\ \ \ \ \ RdOff\ \ \ \ \ \ \ \ +=\ NumBytesRem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00728}00728\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00729}00729\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00730}00730\ \ \ \textcolor{keywordflow}{if}\ (NumBytesRead)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00731}00731\ \ \ \ \ pRing-\/>RdOff\ =\ RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00732}00732\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00733}00733\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00734}00734\ \ \ \textcolor{keywordflow}{return}\ NumBytesRead;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00735}00735\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00736}00736\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00737}00737\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00738}00738\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00739}00739\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_ReadUpBuffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00740}00740\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00741}00741\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00742}00742\ \textcolor{comment}{*\ \ \ \ Reads\ characters\ from\ SEGGER\ real-\/time-\/terminal\ control\ block}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00743}00743\ \textcolor{comment}{*\ \ \ \ which\ have\ been\ previously\ stored\ by\ the\ application.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00744}00744\ \textcolor{comment}{*\ \ \ \ Used\ to\ do\ the\ same\ operation\ that\ J-\/Link\ does,\ to\ transfer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00745}00745\ \textcolor{comment}{*\ \ \ \ RTT\ data\ via\ other\ channels,\ such\ as\ TCP/IP\ or\ UART.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00746}00746\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00747}00747\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00748}00748\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ Up-\/buffer\ to\ be\ used.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00749}00749\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ \ \ \ \ Pointer\ to\ buffer\ provided\ by\ target\ application,\ to\ copy\ characters\ from\ RTT-\/up-\/buffer\ to.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00750}00750\ \textcolor{comment}{*\ \ \ \ BufferSize\ \ \ Size\ of\ the\ target\ application\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00751}00751\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00752}00752\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00753}00753\ \textcolor{comment}{*\ \ \ \ Number\ of\ bytes\ that\ have\ been\ read.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00754}00754\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00755}00755\ \textcolor{comment}{*\ \ Additional\ information}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00756}00756\ \textcolor{comment}{*\ \ \ \ This\ function\ must\ not\ be\ called\ when\ J-\/Link\ might\ also\ do\ RTT.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00757}00757\ \textcolor{comment}{*\ \ \ \ This\ function\ locks\ against\ all\ other\ RTT\ operations.\ I.e.\ during}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00758}00758\ \textcolor{comment}{*\ \ \ \ the\ read\ operation,\ writing\ is\ also\ locked.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00759}00759\ \textcolor{comment}{*\ \ \ \ If\ only\ one\ consumer\ reads\ from\ the\ up\ buffer,}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00760}00760\ \textcolor{comment}{*\ \ \ \ call\ sEGGER\_RTT\_ReadUpBufferNoLock()\ instead.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00761}00761\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00762}00762\ \textcolor{keywordtype}{unsigned}\ SEGGER\_RTT\_ReadUpBuffer(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ BufferSize)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00763}00763\ \ \ \textcolor{keywordtype}{unsigned}\ NumBytesRead;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00764}00764\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00765}00765\ \ \ SEGGER\_RTT\_LOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00766}00766\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00767}00767\ \ \ \textcolor{comment}{//\ Call\ the\ non-\/locking\ read\ function}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00768}00768\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00769}00769\ \ \ NumBytesRead\ =\ SEGGER\_RTT\_ReadUpBufferNoLock(BufferIndex,\ pBuffer,\ BufferSize);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00770}00770\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00771}00771\ \ \ \textcolor{comment}{//\ Finish\ up.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00772}00772\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00773}00773\ \ \ SEGGER\_RTT\_UNLOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00774}00774\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00775}00775\ \ \ \textcolor{keywordflow}{return}\ NumBytesRead;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00776}00776\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00777}00777\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00778}00778\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00779}00779\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00780}00780\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_Read}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00781}00781\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00782}00782\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00783}00783\ \textcolor{comment}{*\ \ \ \ Reads\ characters\ from\ SEGGER\ real-\/time-\/terminal\ control\ block}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00784}00784\ \textcolor{comment}{*\ \ \ \ which\ have\ been\ previously\ stored\ by\ the\ host.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00785}00785\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00786}00786\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00787}00787\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ Down-\/buffer\ to\ be\ used\ (e.g.\ 0\ for\ "{}Terminal"{}).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00788}00788\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ \ \ \ \ Pointer\ to\ buffer\ provided\ by\ target\ application,\ to\ copy\ characters\ from\ RTT-\/down-\/buffer\ to.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00789}00789\ \textcolor{comment}{*\ \ \ \ BufferSize\ \ \ Size\ of\ the\ target\ application\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00790}00790\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00791}00791\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00792}00792\ \textcolor{comment}{*\ \ \ \ Number\ of\ bytes\ that\ have\ been\ read.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00793}00793\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00794}00794\ \textcolor{keywordtype}{unsigned}\ SEGGER\_RTT\_Read(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ BufferSize)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00795}00795\ \ \ \textcolor{keywordtype}{unsigned}\ NumBytesRead;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00796}00796\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00797}00797\ \ \ SEGGER\_RTT\_LOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00798}00798\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00799}00799\ \ \ \textcolor{comment}{//\ Call\ the\ non-\/locking\ read\ function}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00800}00800\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00801}00801\ \ \ NumBytesRead\ =\ SEGGER\_RTT\_ReadNoLock(BufferIndex,\ pBuffer,\ BufferSize);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00802}00802\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00803}00803\ \ \ \textcolor{comment}{//\ Finish\ up.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00804}00804\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00805}00805\ \ \ SEGGER\_RTT\_UNLOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00806}00806\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00807}00807\ \ \ \textcolor{keywordflow}{return}\ NumBytesRead;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00808}00808\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00809}00809\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00810}00810\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00811}00811\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00812}00812\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_WriteWithOverwriteNoLock}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00813}00813\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00814}00814\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00815}00815\ \textcolor{comment}{*\ \ \ \ Stores\ a\ specified\ number\ of\ characters\ in\ SEGGER\ RTT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00816}00816\ \textcolor{comment}{*\ \ \ \ control\ block.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00817}00817\ \textcolor{comment}{*\ \ \ \ SEGGER\_RTT\_WriteWithOverwriteNoLock\ does\ not\ lock\ the\ application}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00818}00818\ \textcolor{comment}{*\ \ \ \ and\ overwrites\ data\ if\ the\ data\ does\ not\ fit\ into\ the\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00819}00819\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00820}00820\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00821}00821\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ "{}Up"{}-\/buffer\ to\ be\ used\ (e.g.\ 0\ for\ "{}Terminal"{}).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00822}00822\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ \ \ \ \ Pointer\ to\ character\ array.\ Does\ not\ need\ to\ point\ to\ a\ \(\backslash\)0\ terminated\ string.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00823}00823\ \textcolor{comment}{*\ \ \ \ NumBytes\ \ \ \ \ Number\ of\ bytes\ to\ be\ stored\ in\ the\ SEGGER\ RTT\ control\ block.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00824}00824\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00825}00825\ \textcolor{comment}{*\ \ Notes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00826}00826\ \textcolor{comment}{*\ \ \ \ (1)\ If\ there\ is\ not\ enough\ space\ in\ the\ "{}Up"{}-\/buffer,\ data\ is\ overwritten.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00827}00827\ \textcolor{comment}{*\ \ \ \ (2)\ For\ performance\ reasons\ this\ function\ does\ not\ call\ Init()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00828}00828\ \textcolor{comment}{*\ \ \ \ \ \ \ \ and\ may\ only\ be\ called\ after\ RTT\ has\ been\ initialized.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00829}00829\ \textcolor{comment}{*\ \ \ \ \ \ \ \ Either\ by\ calling\ SEGGER\_RTT\_Init()\ or\ calling\ another\ RTT\ API\ function\ first.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00830}00830\ \textcolor{comment}{*\ \ \ \ (3)\ Do\ not\ use\ SEGGER\_RTT\_WriteWithOverwriteNoLock\ if\ a\ J-\/Link}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00831}00831\ \textcolor{comment}{*\ \ \ \ \ \ \ \ connection\ reads\ RTT\ data.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00832}00832\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00833}00833\ \textcolor{keywordtype}{void}\ SEGGER\_RTT\_WriteWithOverwriteNoLock(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ NumBytes)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00834}00834\ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ \ \ \ \ \ \ \ \ \ \ pData;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00835}00835\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ pRing;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00836}00836\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ Avail;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00837}00837\ \ \ \textcolor{keyword}{volatile}\ \textcolor{keywordtype}{char}*\ \ \ \ \ \ \ \ pDst;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00838}00838\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00839}00839\ \ \ \textcolor{comment}{//\ Get\ "{}to-\/host"{}\ ring\ buffer\ and\ copy\ some\ elements\ into\ local\ variables.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00840}00840\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00841}00841\ \ \ pData\ =\ (\textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ *)pBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00842}00842\ \ \ pRing\ =\ (\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*)((uintptr\_t)\&\_SEGGER\_RTT.aUp[BufferIndex]\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00843}00843\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00844}00844\ \ \ \textcolor{comment}{//\ Check\ if\ we\ will\ overwrite\ data\ and\ need\ to\ adjust\ the\ RdOff.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00845}00845\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00846}00846\ \ \ \textcolor{keywordflow}{if}\ (pRing-\/>WrOff\ ==\ pRing-\/>RdOff)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00847}00847\ \ \ \ \ Avail\ =\ pRing-\/>SizeOfBuffer\ -\/\ 1u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00848}00848\ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (\ pRing-\/>WrOff\ <\ pRing-\/>RdOff)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00849}00849\ \ \ \ \ Avail\ =\ pRing-\/>RdOff\ -\/\ pRing-\/>WrOff\ -\/\ 1u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00850}00850\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00851}00851\ \ \ \ \ Avail\ =\ pRing-\/>RdOff\ -\/\ pRing-\/>WrOff\ -\/\ 1u\ +\ pRing-\/>SizeOfBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00852}00852\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00853}00853\ \ \ \textcolor{keywordflow}{if}\ (NumBytes\ >\ Avail)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00854}00854\ \ \ \ \ pRing-\/>RdOff\ +=\ (NumBytes\ -\/\ Avail);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00855}00855\ \ \ \ \ \textcolor{keywordflow}{while}\ (pRing-\/>RdOff\ >=\ pRing-\/>SizeOfBuffer)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00856}00856\ \ \ \ \ \ \ pRing-\/>RdOff\ -\/=\ pRing-\/>SizeOfBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00857}00857\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00858}00858\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00859}00859\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00860}00860\ \ \ \textcolor{comment}{//\ Write\ all\ data,\ no\ need\ to\ check\ the\ RdOff,\ but\ possibly\ handle\ multiple\ wrap-\/arounds}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00861}00861\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00862}00862\ \ \ Avail\ =\ pRing-\/>SizeOfBuffer\ -\/\ pRing-\/>WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00863}00863\ \ \ \textcolor{keywordflow}{do}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00864}00864\ \ \ \ \ \textcolor{keywordflow}{if}\ (Avail\ >\ NumBytes)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00865}00865\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00866}00866\ \ \ \ \ \ \ \textcolor{comment}{//\ Last\ round}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00867}00867\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00868}00868\ \ \ \ \ \ \ pDst\ =\ (pRing-\/>pBuffer\ +\ pRing-\/>WrOff)\ +\ SEGGER\_RTT\_UNCACHED\_OFF;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00869}00869\ \textcolor{preprocessor}{\#if\ SEGGER\_RTT\_MEMCPY\_USE\_BYTELOOP}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00870}00870\ \ \ \ \ \ \ Avail\ =\ NumBytes;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00871}00871\ \ \ \ \ \ \ \textcolor{keywordflow}{while}\ (NumBytes-\/-\/)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00872}00872\ \ \ \ \ \ \ \ \ *pDst++\ =\ *pData++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00873}00873\ \ \ \ \ \ \ \};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00874}00874\ \ \ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00875}00875\ \ \ \ \ \ \ pRing-\/>WrOff\ +=\ Avail;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00876}00876\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00877}00877\ \ \ \ \ \ \ SEGGER\_RTT\_MEMCPY((\textcolor{keywordtype}{void}*)pDst,\ pData,\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00878}00878\ \ \ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00879}00879\ \ \ \ \ \ \ pRing-\/>WrOff\ +=\ NumBytes;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00880}00880\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00881}00881\ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00882}00882\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00883}00883\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00884}00884\ \ \ \ \ \ \ \textcolor{comment}{//\ \ Wrap-\/around\ necessary,\ write\ until\ wrap-\/around\ and\ reset\ WrOff}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00885}00885\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00886}00886\ \ \ \ \ \ \ pDst\ =\ (pRing-\/>pBuffer\ +\ pRing-\/>WrOff)\ +\ SEGGER\_RTT\_UNCACHED\_OFF;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00887}00887\ \textcolor{preprocessor}{\#if\ SEGGER\_RTT\_MEMCPY\_USE\_BYTELOOP}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00888}00888\ \ \ \ \ \ \ NumBytes\ -\/=\ Avail;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00889}00889\ \ \ \ \ \ \ \textcolor{keywordflow}{while}\ (Avail-\/-\/)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00890}00890\ \ \ \ \ \ \ \ \ *pDst++\ =\ *pData++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00891}00891\ \ \ \ \ \ \ \};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00892}00892\ \ \ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00893}00893\ \ \ \ \ \ \ pRing-\/>WrOff\ =\ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00894}00894\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00895}00895\ \ \ \ \ \ \ SEGGER\_RTT\_MEMCPY((\textcolor{keywordtype}{void}*)pDst,\ pData,\ Avail);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00896}00896\ \ \ \ \ \ \ pData\ +=\ Avail;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00897}00897\ \ \ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00898}00898\ \ \ \ \ \ \ pRing-\/>WrOff\ =\ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00899}00899\ \ \ \ \ \ \ NumBytes\ -\/=\ Avail;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00900}00900\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00901}00901\ \ \ \ \ \ \ Avail\ =\ (pRing-\/>SizeOfBuffer\ -\/\ 1);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00902}00902\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00903}00903\ \ \ \}\ \textcolor{keywordflow}{while}\ (NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00904}00904\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00905}00905\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00906}00906\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00907}00907\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00908}00908\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_WriteSkipNoLock}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00909}00909\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00910}00910\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00911}00911\ \textcolor{comment}{*\ \ \ \ Stores\ a\ specified\ number\ of\ characters\ in\ SEGGER\ RTT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00912}00912\ \textcolor{comment}{*\ \ \ \ control\ block\ which\ is\ then\ read\ by\ the\ host.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00913}00913\ \textcolor{comment}{*\ \ \ \ SEGGER\_RTT\_WriteSkipNoLock\ does\ not\ lock\ the\ application\ and}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00914}00914\ \textcolor{comment}{*\ \ \ \ skips\ all\ data,\ if\ the\ data\ does\ not\ fit\ into\ the\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00915}00915\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00916}00916\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00917}00917\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ "{}Up"{}-\/buffer\ to\ be\ used\ (e.g.\ 0\ for\ "{}Terminal"{}).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00918}00918\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ \ \ \ \ Pointer\ to\ character\ array.\ Does\ not\ need\ to\ point\ to\ a\ \(\backslash\)0\ terminated\ string.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00919}00919\ \textcolor{comment}{*\ \ \ \ NumBytes\ \ \ \ \ Number\ of\ bytes\ to\ be\ stored\ in\ the\ SEGGER\ RTT\ control\ block.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00920}00920\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ MUST\ be\ >\ 0!!!}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00921}00921\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ This\ is\ done\ for\ performance\ reasons,\ so\ no\ initial\ check\ has\ do\ be\ done.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00922}00922\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00923}00923\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00924}00924\ \textcolor{comment}{*\ \ \ \ 1:\ Data\ has\ been\ copied}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00925}00925\ \textcolor{comment}{*\ \ \ \ 0:\ No\ space,\ data\ has\ not\ been\ copied}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00926}00926\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00927}00927\ \textcolor{comment}{*\ \ Notes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00928}00928\ \textcolor{comment}{*\ \ \ \ (1)\ If\ there\ is\ not\ enough\ space\ in\ the\ "{}Up"{}-\/buffer,\ all\ data\ is\ dropped.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00929}00929\ \textcolor{comment}{*\ \ \ \ (2)\ For\ performance\ reasons\ this\ function\ does\ not\ call\ Init()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00930}00930\ \textcolor{comment}{*\ \ \ \ \ \ \ \ and\ may\ only\ be\ called\ after\ RTT\ has\ been\ initialized.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00931}00931\ \textcolor{comment}{*\ \ \ \ \ \ \ \ Either\ by\ calling\ SEGGER\_RTT\_Init()\ or\ calling\ another\ RTT\ API\ function\ first.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00932}00932\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00933}00933\ \textcolor{preprocessor}{\#if\ (RTT\_USE\_ASM\ ==\ 0)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00934}00934\ \textcolor{keywordtype}{unsigned}\ SEGGER\_RTT\_WriteSkipNoLock(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ NumBytes)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00935}00935\ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ \ \ \ \ \ \ \ \ \ \ pData;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00936}00936\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ pRing;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00937}00937\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ Avail;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00938}00938\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00939}00939\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00940}00940\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ Rem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00941}00941\ \ \ \textcolor{keyword}{volatile}\ \textcolor{keywordtype}{char}*\ \ \ \ \ \ \ \ pDst;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00942}00942\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00943}00943\ \ \ \textcolor{comment}{//\ Cases:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00944}00944\ \ \ \textcolor{comment}{//\ \ \ 1)\ RdOff\ <=\ WrOff\ =>\ Space\ until\ wrap-\/around\ is\ sufficient}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00945}00945\ \ \ \textcolor{comment}{//\ \ \ 2)\ RdOff\ <=\ WrOff\ =>\ Space\ after\ wrap-\/around\ needed\ (copy\ in\ 2\ chunks)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00946}00946\ \ \ \textcolor{comment}{//\ \ \ 3)\ RdOff\ <\ \ WrOff\ =>\ No\ space\ in\ buf}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00947}00947\ \ \ \textcolor{comment}{//\ \ \ 4)\ RdOff\ >\ \ WrOff\ =>\ Space\ is\ sufficient}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00948}00948\ \ \ \textcolor{comment}{//\ \ \ 5)\ RdOff\ >\ \ WrOff\ =>\ No\ space\ in\ buf}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00949}00949\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00950}00950\ \ \ \textcolor{comment}{//\ 1)\ is\ the\ most\ common\ case\ for\ large\ buffers\ and\ assuming\ that\ J-\/Link\ reads\ the\ data\ fast\ enough}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00951}00951\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00952}00952\ \ \ pData\ =\ (\textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ *)pBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00953}00953\ \ \ pRing\ =\ (\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*)((uintptr\_t)\&\_SEGGER\_RTT.aUp[BufferIndex]\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00954}00954\ \ \ RdOff\ =\ pRing-\/>RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00955}00955\ \ \ WrOff\ =\ pRing-\/>WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00956}00956\ \ \ pDst\ =\ (pRing-\/>pBuffer\ +\ WrOff)\ +\ SEGGER\_RTT\_UNCACHED\_OFF;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00957}00957\ \ \ \textcolor{keywordflow}{if}\ (RdOff\ <=\ WrOff)\ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Case\ 1),\ 2)\ or\ 3)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00958}00958\ \ \ \ \ Avail\ =\ pRing-\/>SizeOfBuffer\ -\/\ WrOff\ -\/\ 1u;\ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Space\ until\ wrap-\/around\ (assume\ 1\ byte\ not\ usable\ for\ case\ that\ RdOff\ ==\ 0)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00959}00959\ \ \ \ \ \textcolor{keywordflow}{if}\ (Avail\ >=\ NumBytes)\ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Case\ 1)?}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00960}00960\ \ \ \ \ \ \ memcpy((\textcolor{keywordtype}{void}*)pDst,\ pData,\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00961}00961\ \ \ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00962}00962\ \ \ \ \ \ \ pRing-\/>WrOff\ =\ WrOff\ +\ NumBytes;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00963}00963\ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ 1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00964}00964\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00965}00965\ \ \ \ \ Avail\ +=\ RdOff;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Space\ incl.\ wrap-\/around}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00966}00966\ \ \ \ \ \textcolor{keywordflow}{if}\ (Avail\ >=\ NumBytes)\ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Case\ 2?\ =>\ If\ not,\ we\ have\ case\ 3)\ (does\ not\ fit)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00967}00967\ \ \ \ \ \ \ Rem\ =\ pRing-\/>SizeOfBuffer\ -\/\ WrOff;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Space\ until\ end\ of\ buffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00968}00968\ \ \ \ \ \ \ memcpy((\textcolor{keywordtype}{void}*)pDst,\ pData,\ Rem);\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Copy\ 1st\ chunk}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00969}00969\ \ \ \ \ \ \ NumBytes\ -\/=\ Rem;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00970}00970\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00971}00971\ \ \ \ \ \ \ \textcolor{comment}{//\ Special\ case:\ First\ check\ that\ assumed\ RdOff\ ==\ 0\ calculated\ that\ last\ element\ before\ wrap-\/around\ could\ not\ be\ used}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00972}00972\ \ \ \ \ \ \ \textcolor{comment}{//\ But\ 2nd\ check\ (considering\ space\ until\ wrap-\/around\ and\ until\ RdOff)\ revealed\ that\ RdOff\ is\ not\ 0,\ so\ we\ can\ use\ the\ last\ element}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00973}00973\ \ \ \ \ \ \ \textcolor{comment}{//\ In\ this\ case,\ we\ may\ use\ a\ copy\ straight\ until\ buffer\ end\ anyway\ without\ needing\ to\ copy\ 2\ chunks}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00974}00974\ \ \ \ \ \ \ \textcolor{comment}{//\ Therefore,\ check\ if\ 2nd\ memcpy\ is\ necessary\ at\ all}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00975}00975\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00976}00976\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (NumBytes)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00977}00977\ \ \ \ \ \ \ \ \ pDst\ =\ pRing-\/>pBuffer\ +\ SEGGER\_RTT\_UNCACHED\_OFF;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00978}00978\ \ \ \ \ \ \ \ \ memcpy((\textcolor{keywordtype}{void}*)pDst,\ pData\ +\ Rem,\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00979}00979\ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00980}00980\ \ \ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00981}00981\ \ \ \ \ \ \ pRing-\/>WrOff\ =\ NumBytes;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00982}00982\ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ 1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00983}00983\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00984}00984\ \ \ \}\ \textcolor{keywordflow}{else}\ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Potential\ case\ 4)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00985}00985\ \ \ \ \ Avail\ =\ RdOff\ -\/\ WrOff\ -\/\ 1u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00986}00986\ \ \ \ \ \textcolor{keywordflow}{if}\ (Avail\ >=\ NumBytes)\ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Case\ 4)?\ =>\ If\ not,\ we\ have\ case\ 5)\ (does\ not\ fit)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00987}00987\ \ \ \ \ \ \ memcpy((\textcolor{keywordtype}{void}*)pDst,\ pData,\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00988}00988\ \ \ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00989}00989\ \ \ \ \ \ \ pRing-\/>WrOff\ =\ WrOff\ +\ NumBytes;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00990}00990\ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ 1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00991}00991\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00992}00992\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00993}00993\ \ \ \textcolor{keywordflow}{return}\ 0;\ \ \ \ \ \textcolor{comment}{//\ No\ space\ in\ buffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00994}00994\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00995}00995\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00996}00996\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00997}00997\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00998}00998\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l00999}00999\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_WriteDownBufferNoLock}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01000}01000\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01001}01001\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01002}01002\ \textcolor{comment}{*\ \ \ \ Stores\ a\ specified\ number\ of\ characters\ in\ SEGGER\ RTT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01003}01003\ \textcolor{comment}{*\ \ \ \ control\ block\ inside\ a\ \ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01004}01004\ \textcolor{comment}{*\ \ \ \ SEGGER\_RTT\_WriteDownBufferNoLock\ does\ not\ lock\ the\ application.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01005}01005\ \textcolor{comment}{*\ \ \ \ Used\ to\ do\ the\ same\ operation\ that\ J-\/Link\ does,\ to\ transfer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01006}01006\ \textcolor{comment}{*\ \ \ \ RTT\ data\ from\ other\ channels,\ such\ as\ TCP/IP\ or\ UART.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01007}01007\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01008}01008\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01009}01009\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ "{}Down"{}-\/buffer\ to\ be\ used.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01010}01010\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ \ \ \ \ Pointer\ to\ character\ array.\ Does\ not\ need\ to\ point\ to\ a\ \(\backslash\)0\ terminated\ string.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01011}01011\ \textcolor{comment}{*\ \ \ \ NumBytes\ \ \ \ \ Number\ of\ bytes\ to\ be\ stored\ in\ the\ SEGGER\ RTT\ control\ block.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01012}01012\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01013}01013\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01014}01014\ \textcolor{comment}{*\ \ \ \ Number\ of\ bytes\ which\ have\ been\ stored\ in\ the\ "{}Down"{}-\/buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01015}01015\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01016}01016\ \textcolor{comment}{*\ \ Notes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01017}01017\ \textcolor{comment}{*\ \ \ \ (1)\ Data\ is\ stored\ according\ to\ buffer\ flags.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01018}01018\ \textcolor{comment}{*\ \ \ \ (2)\ For\ performance\ reasons\ this\ function\ does\ not\ call\ Init()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01019}01019\ \textcolor{comment}{*\ \ \ \ \ \ \ \ and\ may\ only\ be\ called\ after\ RTT\ has\ been\ initialized.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01020}01020\ \textcolor{comment}{*\ \ \ \ \ \ \ \ Either\ by\ calling\ SEGGER\_RTT\_Init()\ or\ calling\ another\ RTT\ API\ function\ first.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01021}01021\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01022}01022\ \textcolor{comment}{*\ \ Additional\ information}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01023}01023\ \textcolor{comment}{*\ \ \ \ This\ function\ must\ not\ be\ called\ when\ J-\/Link\ might\ also\ do\ RTT.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01024}01024\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01025}01025\ \textcolor{keywordtype}{unsigned}\ SEGGER\_RTT\_WriteDownBufferNoLock(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ NumBytes)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01026}01026\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Status;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01027}01027\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Avail;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01028}01028\ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ \ \ \ \ \ \ \ \ \ \ \ \ pData;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01029}01029\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ \ \ pRing;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01030}01030\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01031}01031\ \ \ \textcolor{comment}{//\ Get\ "{}to-\/target"{}\ ring\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01032}01032\ \ \ \textcolor{comment}{//\ It\ is\ save\ to\ cast\ that\ to\ a\ "{}to-\/host"{}\ buffer.\ Up\ and\ Down\ buffer\ differ\ in\ volatility\ of\ offsets\ that\ might\ be\ modified\ by\ J-\/Link.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01033}01033\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01034}01034\ \ \ pData\ =\ (\textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ *)pBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01035}01035\ \ \ pRing\ =\ (\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*)((uintptr\_t)\&\_SEGGER\_RTT.aDown[BufferIndex]\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01036}01036\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01037}01037\ \ \ \textcolor{comment}{//\ How\ we\ output\ depends\ upon\ the\ mode...}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01038}01038\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01039}01039\ \ \ \textcolor{keywordflow}{switch}\ (pRing-\/>Flags)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01040}01040\ \ \ \textcolor{keywordflow}{case}\ SEGGER\_RTT\_MODE\_NO\_BLOCK\_SKIP:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01041}01041\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01042}01042\ \ \ \ \ \textcolor{comment}{//\ If\ we\ are\ in\ skip\ mode\ and\ there\ is\ no\ space\ for\ the\ whole}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01043}01043\ \ \ \ \ \textcolor{comment}{//\ of\ this\ output,\ don't\ bother.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01044}01044\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01045}01045\ \ \ \ \ Avail\ =\ \_GetAvailWriteSpace(pRing);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01046}01046\ \ \ \ \ \textcolor{keywordflow}{if}\ (Avail\ <\ NumBytes)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01047}01047\ \ \ \ \ \ \ Status\ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01048}01048\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01049}01049\ \ \ \ \ \ \ Status\ =\ NumBytes;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01050}01050\ \ \ \ \ \ \ \_WriteNoCheck(pRing,\ pData,\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01051}01051\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01052}01052\ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01053}01053\ \ \ \textcolor{keywordflow}{case}\ SEGGER\_RTT\_MODE\_NO\_BLOCK\_TRIM:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01054}01054\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01055}01055\ \ \ \ \ \textcolor{comment}{//\ If\ we\ are\ in\ trim\ mode,\ trim\ to\ what\ we\ can\ output\ without\ blocking.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01056}01056\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01057}01057\ \ \ \ \ Avail\ =\ \_GetAvailWriteSpace(pRing);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01058}01058\ \ \ \ \ Status\ =\ Avail\ <\ NumBytes\ ?\ Avail\ :\ NumBytes;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01059}01059\ \ \ \ \ \_WriteNoCheck(pRing,\ pData,\ Status);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01060}01060\ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01061}01061\ \ \ \textcolor{keywordflow}{case}\ SEGGER\_RTT\_MODE\_BLOCK\_IF\_FIFO\_FULL:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01062}01062\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01063}01063\ \ \ \ \ \textcolor{comment}{//\ If\ we\ are\ in\ blocking\ mode,\ output\ everything.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01064}01064\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01065}01065\ \ \ \ \ Status\ =\ \_WriteBlocking(pRing,\ pData,\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01066}01066\ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01067}01067\ \ \ \textcolor{keywordflow}{default}:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01068}01068\ \ \ \ \ Status\ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01069}01069\ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01070}01070\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01071}01071\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01072}01072\ \ \ \textcolor{comment}{//\ Finish\ up.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01073}01073\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01074}01074\ \ \ \textcolor{keywordflow}{return}\ Status;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01075}01075\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01076}01076\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01077}01077\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01078}01078\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01079}01079\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_WriteNoLock}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01080}01080\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01081}01081\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01082}01082\ \textcolor{comment}{*\ \ \ \ Stores\ a\ specified\ number\ of\ characters\ in\ SEGGER\ RTT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01083}01083\ \textcolor{comment}{*\ \ \ \ control\ block\ which\ is\ then\ read\ by\ the\ host.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01084}01084\ \textcolor{comment}{*\ \ \ \ SEGGER\_RTT\_WriteNoLock\ does\ not\ lock\ the\ application.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01085}01085\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01086}01086\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01087}01087\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ "{}Up"{}-\/buffer\ to\ be\ used\ (e.g.\ 0\ for\ "{}Terminal"{}).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01088}01088\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ \ \ \ \ Pointer\ to\ character\ array.\ Does\ not\ need\ to\ point\ to\ a\ \(\backslash\)0\ terminated\ string.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01089}01089\ \textcolor{comment}{*\ \ \ \ NumBytes\ \ \ \ \ Number\ of\ bytes\ to\ be\ stored\ in\ the\ SEGGER\ RTT\ control\ block.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01090}01090\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01091}01091\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01092}01092\ \textcolor{comment}{*\ \ \ \ Number\ of\ bytes\ which\ have\ been\ stored\ in\ the\ "{}Up"{}-\/buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01093}01093\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01094}01094\ \textcolor{comment}{*\ \ Notes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01095}01095\ \textcolor{comment}{*\ \ \ \ (1)\ Data\ is\ stored\ according\ to\ buffer\ flags.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01096}01096\ \textcolor{comment}{*\ \ \ \ (2)\ For\ performance\ reasons\ this\ function\ does\ not\ call\ Init()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01097}01097\ \textcolor{comment}{*\ \ \ \ \ \ \ \ and\ may\ only\ be\ called\ after\ RTT\ has\ been\ initialized.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01098}01098\ \textcolor{comment}{*\ \ \ \ \ \ \ \ Either\ by\ calling\ SEGGER\_RTT\_Init()\ or\ calling\ another\ RTT\ API\ function\ first.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01099}01099\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01100}01100\ \textcolor{keywordtype}{unsigned}\ SEGGER\_RTT\_WriteNoLock(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ NumBytes)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01101}01101\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ Status;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01102}01102\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ Avail;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01103}01103\ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ \ \ \ \ \ \ \ \ \ \ pData;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01104}01104\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ pRing;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01105}01105\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01106}01106\ \ \ \textcolor{comment}{//\ Get\ "{}to-\/host"{}\ ring\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01107}01107\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01108}01108\ \ \ pData\ =\ (\textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ *)pBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01109}01109\ \ \ pRing\ =\ (\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*)((uintptr\_t)\&\_SEGGER\_RTT.aUp[BufferIndex]\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01110}01110\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01111}01111\ \ \ \textcolor{comment}{//\ How\ we\ output\ depends\ upon\ the\ mode...}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01112}01112\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01113}01113\ \ \ \textcolor{keywordflow}{switch}\ (pRing-\/>Flags)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01114}01114\ \ \ \textcolor{keywordflow}{case}\ SEGGER\_RTT\_MODE\_NO\_BLOCK\_SKIP:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01115}01115\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01116}01116\ \ \ \ \ \textcolor{comment}{//\ If\ we\ are\ in\ skip\ mode\ and\ there\ is\ no\ space\ for\ the\ whole}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01117}01117\ \ \ \ \ \textcolor{comment}{//\ of\ this\ output,\ don't\ bother.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01118}01118\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01119}01119\ \ \ \ \ Avail\ =\ \_GetAvailWriteSpace(pRing);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01120}01120\ \ \ \ \ \textcolor{keywordflow}{if}\ (Avail\ <\ NumBytes)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01121}01121\ \ \ \ \ \ \ Status\ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01122}01122\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01123}01123\ \ \ \ \ \ \ Status\ =\ NumBytes;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01124}01124\ \ \ \ \ \ \ \_WriteNoCheck(pRing,\ pData,\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01125}01125\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01126}01126\ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01127}01127\ \ \ \textcolor{keywordflow}{case}\ SEGGER\_RTT\_MODE\_NO\_BLOCK\_TRIM:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01128}01128\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01129}01129\ \ \ \ \ \textcolor{comment}{//\ If\ we\ are\ in\ trim\ mode,\ trim\ to\ what\ we\ can\ output\ without\ blocking.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01130}01130\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01131}01131\ \ \ \ \ Avail\ =\ \_GetAvailWriteSpace(pRing);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01132}01132\ \ \ \ \ Status\ =\ Avail\ <\ NumBytes\ ?\ Avail\ :\ NumBytes;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01133}01133\ \ \ \ \ \_WriteNoCheck(pRing,\ pData,\ Status);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01134}01134\ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01135}01135\ \ \ \textcolor{keywordflow}{case}\ SEGGER\_RTT\_MODE\_BLOCK\_IF\_FIFO\_FULL:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01136}01136\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01137}01137\ \ \ \ \ \textcolor{comment}{//\ If\ we\ are\ in\ blocking\ mode,\ output\ everything.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01138}01138\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01139}01139\ \ \ \ \ Status\ =\ \_WriteBlocking(pRing,\ pData,\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01140}01140\ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01141}01141\ \ \ \textcolor{keywordflow}{default}:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01142}01142\ \ \ \ \ Status\ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01143}01143\ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01144}01144\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01145}01145\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01146}01146\ \ \ \textcolor{comment}{//\ Finish\ up.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01147}01147\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01148}01148\ \ \ \textcolor{keywordflow}{return}\ Status;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01149}01149\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01150}01150\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01151}01151\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01152}01152\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01153}01153\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_WriteDownBuffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01154}01154\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01155}01155\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01156}01156\ \textcolor{comment}{*\ \ \ \ Stores\ a\ specified\ number\ of\ characters\ in\ SEGGER\ RTT\ control\ block\ in\ a\ \ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01157}01157\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01158}01158\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01159}01159\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ "{}Up"{}-\/buffer\ to\ be\ used\ (e.g.\ 0\ for\ "{}Terminal"{}).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01160}01160\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ \ \ \ \ Pointer\ to\ character\ array.\ Does\ not\ need\ to\ point\ to\ a\ \(\backslash\)0\ terminated\ string.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01161}01161\ \textcolor{comment}{*\ \ \ \ NumBytes\ \ \ \ \ Number\ of\ bytes\ to\ be\ stored\ in\ the\ SEGGER\ RTT\ control\ block.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01162}01162\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01163}01163\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01164}01164\ \textcolor{comment}{*\ \ \ \ Number\ of\ bytes\ which\ have\ been\ stored\ in\ the\ "{}Down"{}-\/buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01165}01165\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01166}01166\ \textcolor{comment}{*\ \ Notes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01167}01167\ \textcolor{comment}{*\ \ \ \ (1)\ Data\ is\ stored\ according\ to\ buffer\ flags.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01168}01168\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01169}01169\ \textcolor{comment}{*\ \ Additional\ information}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01170}01170\ \textcolor{comment}{*\ \ \ \ This\ function\ must\ not\ be\ called\ when\ J-\/Link\ might\ also\ do\ RTT.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01171}01171\ \textcolor{comment}{*\ \ \ \ This\ function\ locks\ against\ all\ other\ RTT\ operations.\ I.e.\ during}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01172}01172\ \textcolor{comment}{*\ \ \ \ the\ write\ operation,\ writing\ from\ the\ application\ is\ also\ locked.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01173}01173\ \textcolor{comment}{*\ \ \ \ If\ only\ one\ consumer\ writes\ to\ the\ down\ buffer,}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01174}01174\ \textcolor{comment}{*\ \ \ \ call\ SEGGER\_RTT\_WriteDownBufferNoLock()\ instead.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01175}01175\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01176}01176\ \textcolor{keywordtype}{unsigned}\ SEGGER\_RTT\_WriteDownBuffer(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ NumBytes)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01177}01177\ \ \ \textcolor{keywordtype}{unsigned}\ Status;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01178}01178\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01179}01179\ \ \ INIT();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01180}01180\ \ \ SEGGER\_RTT\_LOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01181}01181\ \ \ Status\ =\ SEGGER\_RTT\_WriteDownBufferNoLock(BufferIndex,\ pBuffer,\ NumBytes);\ \ \textcolor{comment}{//\ Call\ the\ non-\/locking\ write\ function}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01182}01182\ \ \ SEGGER\_RTT\_UNLOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01183}01183\ \ \ \textcolor{keywordflow}{return}\ Status;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01184}01184\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01185}01185\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01186}01186\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01187}01187\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01188}01188\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_Write}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01189}01189\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01190}01190\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01191}01191\ \textcolor{comment}{*\ \ \ \ Stores\ a\ specified\ number\ of\ characters\ in\ SEGGER\ RTT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01192}01192\ \textcolor{comment}{*\ \ \ \ control\ block\ which\ is\ then\ read\ by\ the\ host.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01193}01193\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01194}01194\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01195}01195\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ "{}Up"{}-\/buffer\ to\ be\ used\ (e.g.\ 0\ for\ "{}Terminal"{}).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01196}01196\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ \ \ \ \ Pointer\ to\ character\ array.\ Does\ not\ need\ to\ point\ to\ a\ \(\backslash\)0\ terminated\ string.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01197}01197\ \textcolor{comment}{*\ \ \ \ NumBytes\ \ \ \ \ Number\ of\ bytes\ to\ be\ stored\ in\ the\ SEGGER\ RTT\ control\ block.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01198}01198\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01199}01199\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01200}01200\ \textcolor{comment}{*\ \ \ \ Number\ of\ bytes\ which\ have\ been\ stored\ in\ the\ "{}Up"{}-\/buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01201}01201\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01202}01202\ \textcolor{comment}{*\ \ Notes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01203}01203\ \textcolor{comment}{*\ \ \ \ (1)\ Data\ is\ stored\ according\ to\ buffer\ flags.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01204}01204\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01205}01205\ \textcolor{keywordtype}{unsigned}\ SEGGER\_RTT\_Write(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ NumBytes)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01206}01206\ \ \ \textcolor{keywordtype}{unsigned}\ Status;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01207}01207\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01208}01208\ \ \ INIT();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01209}01209\ \ \ SEGGER\_RTT\_LOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01210}01210\ \ \ Status\ =\ SEGGER\_RTT\_WriteNoLock(BufferIndex,\ pBuffer,\ NumBytes);\ \ \textcolor{comment}{//\ Call\ the\ non-\/locking\ write\ function}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01211}01211\ \ \ SEGGER\_RTT\_UNLOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01212}01212\ \ \ \textcolor{keywordflow}{return}\ Status;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01213}01213\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01214}01214\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01215}01215\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01216}01216\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01217}01217\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_WriteString}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01218}01218\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01219}01219\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01220}01220\ \textcolor{comment}{*\ \ \ \ Stores\ string\ in\ SEGGER\ RTT\ control\ block.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01221}01221\ \textcolor{comment}{*\ \ \ \ This\ data\ is\ read\ by\ the\ host.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01222}01222\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01223}01223\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01224}01224\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ "{}Up"{}-\/buffer\ to\ be\ used\ (e.g.\ 0\ for\ "{}Terminal"{}).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01225}01225\ \textcolor{comment}{*\ \ \ \ s\ \ \ \ \ \ \ \ \ \ \ \ Pointer\ to\ string.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01226}01226\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01227}01227\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01228}01228\ \textcolor{comment}{*\ \ \ \ Number\ of\ bytes\ which\ have\ been\ stored\ in\ the\ "{}Up"{}-\/buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01229}01229\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01230}01230\ \textcolor{comment}{*\ \ Notes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01231}01231\ \textcolor{comment}{*\ \ \ \ (1)\ Data\ is\ stored\ according\ to\ buffer\ flags.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01232}01232\ \textcolor{comment}{*\ \ \ \ (2)\ String\ passed\ to\ this\ function\ has\ to\ be\ \(\backslash\)0\ terminated}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01233}01233\ \textcolor{comment}{*\ \ \ \ (3)\ \(\backslash\)0\ termination\ character\ is\ *not*\ stored\ in\ RTT\ buffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01234}01234\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01235}01235\ \textcolor{keywordtype}{unsigned}\ SEGGER\_RTT\_WriteString(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ s)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01236}01236\ \ \ \textcolor{keywordtype}{unsigned}\ Len;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01237}01237\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01238}01238\ \ \ Len\ =\ STRLEN(s);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01239}01239\ \ \ \textcolor{keywordflow}{return}\ SEGGER\_RTT\_Write(BufferIndex,\ s,\ Len);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01240}01240\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01241}01241\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01242}01242\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01243}01243\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01244}01244\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_PutCharSkipNoLock}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01245}01245\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01246}01246\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01247}01247\ \textcolor{comment}{*\ \ \ \ Stores\ a\ single\ character/byte\ in\ SEGGER\ RTT\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01248}01248\ \textcolor{comment}{*\ \ \ \ SEGGER\_RTT\_PutCharSkipNoLock\ does\ not\ lock\ the\ application\ and}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01249}01249\ \textcolor{comment}{*\ \ \ \ skips\ the\ byte,\ if\ it\ does\ not\ fit\ into\ the\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01250}01250\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01251}01251\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01252}01252\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ "{}Up"{}-\/buffer\ to\ be\ used\ (e.g.\ 0\ for\ "{}Terminal"{}).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01253}01253\ \textcolor{comment}{*\ \ \ \ c\ \ \ \ \ \ \ \ \ \ \ \ Byte\ to\ be\ stored.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01254}01254\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01255}01255\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01256}01256\ \textcolor{comment}{*\ \ \ \ Number\ of\ bytes\ which\ have\ been\ stored\ in\ the\ "{}Up"{}-\/buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01257}01257\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01258}01258\ \textcolor{comment}{*\ \ Notes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01259}01259\ \textcolor{comment}{*\ \ \ \ (1)\ If\ there\ is\ not\ enough\ space\ in\ the\ "{}Up"{}-\/buffer,\ the\ character\ is\ dropped.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01260}01260\ \textcolor{comment}{*\ \ \ \ (2)\ For\ performance\ reasons\ this\ function\ does\ not\ call\ Init()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01261}01261\ \textcolor{comment}{*\ \ \ \ \ \ \ \ and\ may\ only\ be\ called\ after\ RTT\ has\ been\ initialized.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01262}01262\ \textcolor{comment}{*\ \ \ \ \ \ \ \ Either\ by\ calling\ SEGGER\_RTT\_Init()\ or\ calling\ another\ RTT\ API\ function\ first.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01263}01263\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01264}01264\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01265}01265\ \textcolor{keywordtype}{unsigned}\ SEGGER\_RTT\_PutCharSkipNoLock(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keywordtype}{char}\ c)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01266}01266\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ pRing;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01267}01267\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01268}01268\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ Status;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01269}01269\ \ \ \textcolor{keyword}{volatile}\ \textcolor{keywordtype}{char}*\ \ \ \ \ \ \ \ pDst;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01270}01270\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01271}01271\ \ \ \textcolor{comment}{//\ Get\ "{}to-\/host"{}\ ring\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01272}01272\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01273}01273\ \ \ pRing\ =\ (\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*)((uintptr\_t)\&\_SEGGER\_RTT.aUp[BufferIndex]\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01274}01274\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01275}01275\ \ \ \textcolor{comment}{//\ Get\ write\ position\ and\ handle\ wrap-\/around\ if\ necessary}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01276}01276\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01277}01277\ \ \ WrOff\ =\ pRing-\/>WrOff\ +\ 1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01278}01278\ \ \ \textcolor{keywordflow}{if}\ (WrOff\ ==\ pRing-\/>SizeOfBuffer)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01279}01279\ \ \ \ \ WrOff\ =\ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01280}01280\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01281}01281\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01282}01282\ \ \ \textcolor{comment}{//\ Output\ byte\ if\ free\ space\ is\ available}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01283}01283\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01284}01284\ \ \ \textcolor{keywordflow}{if}\ (WrOff\ !=\ pRing-\/>RdOff)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01285}01285\ \ \ \ \ pDst\ =\ (pRing-\/>pBuffer\ +\ pRing-\/>WrOff)\ +\ SEGGER\_RTT\_UNCACHED\_OFF;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01286}01286\ \ \ \ \ *pDst\ =\ c;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01287}01287\ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01288}01288\ \ \ \ \ pRing-\/>WrOff\ =\ WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01289}01289\ \ \ \ \ Status\ =\ 1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01290}01290\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01291}01291\ \ \ \ \ Status\ =\ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01292}01292\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01293}01293\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01294}01294\ \ \ \textcolor{keywordflow}{return}\ Status;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01295}01295\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01296}01296\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01297}01297\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01298}01298\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01299}01299\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_PutCharSkip}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01300}01300\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01301}01301\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01302}01302\ \textcolor{comment}{*\ \ \ \ Stores\ a\ single\ character/byte\ in\ SEGGER\ RTT\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01303}01303\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01304}01304\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01305}01305\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ "{}Up"{}-\/buffer\ to\ be\ used\ (e.g.\ 0\ for\ "{}Terminal"{}).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01306}01306\ \textcolor{comment}{*\ \ \ \ c\ \ \ \ \ \ \ \ \ \ \ \ Byte\ to\ be\ stored.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01307}01307\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01308}01308\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01309}01309\ \textcolor{comment}{*\ \ \ \ Number\ of\ bytes\ which\ have\ been\ stored\ in\ the\ "{}Up"{}-\/buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01310}01310\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01311}01311\ \textcolor{comment}{*\ \ Notes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01312}01312\ \textcolor{comment}{*\ \ \ \ (1)\ If\ there\ is\ not\ enough\ space\ in\ the\ "{}Up"{}-\/buffer,\ the\ character\ is\ dropped.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01313}01313\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01314}01314\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01315}01315\ \textcolor{keywordtype}{unsigned}\ SEGGER\_RTT\_PutCharSkip(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keywordtype}{char}\ c)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01316}01316\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ pRing;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01317}01317\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01318}01318\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ Status;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01319}01319\ \ \ \textcolor{keyword}{volatile}\ \textcolor{keywordtype}{char}*\ \ \ \ \ \ \ \ pDst;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01320}01320\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01321}01321\ \ \ \textcolor{comment}{//\ Prepare}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01322}01322\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01323}01323\ \ \ INIT();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01324}01324\ \ \ SEGGER\_RTT\_LOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01325}01325\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01326}01326\ \ \ \textcolor{comment}{//\ Get\ "{}to-\/host"{}\ ring\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01327}01327\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01328}01328\ \ \ pRing\ =\ (\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*)((uintptr\_t)\&\_SEGGER\_RTT.aUp[BufferIndex]\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01329}01329\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01330}01330\ \ \ \textcolor{comment}{//\ Get\ write\ position\ and\ handle\ wrap-\/around\ if\ necessary}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01331}01331\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01332}01332\ \ \ WrOff\ =\ pRing-\/>WrOff\ +\ 1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01333}01333\ \ \ \textcolor{keywordflow}{if}\ (WrOff\ ==\ pRing-\/>SizeOfBuffer)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01334}01334\ \ \ \ \ WrOff\ =\ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01335}01335\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01336}01336\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01337}01337\ \ \ \textcolor{comment}{//\ Output\ byte\ if\ free\ space\ is\ available}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01338}01338\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01339}01339\ \ \ \textcolor{keywordflow}{if}\ (WrOff\ !=\ pRing-\/>RdOff)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01340}01340\ \ \ \ \ pDst\ \ =\ (pRing-\/>pBuffer\ +\ pRing-\/>WrOff)\ +\ SEGGER\_RTT\_UNCACHED\_OFF;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01341}01341\ \ \ \ \ *pDst\ =\ c;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01342}01342\ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01343}01343\ \ \ \ \ pRing-\/>WrOff\ =\ WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01344}01344\ \ \ \ \ Status\ =\ 1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01345}01345\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01346}01346\ \ \ \ \ Status\ =\ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01347}01347\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01348}01348\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01349}01349\ \ \ \textcolor{comment}{//\ Finish\ up.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01350}01350\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01351}01351\ \ \ SEGGER\_RTT\_UNLOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01352}01352\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01353}01353\ \ \ \textcolor{keywordflow}{return}\ Status;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01354}01354\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01355}01355\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01356}01356\ \textcolor{comment}{\ /*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01357}01357\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01358}01358\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_PutChar}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01359}01359\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01360}01360\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01361}01361\ \textcolor{comment}{*\ \ \ \ Stores\ a\ single\ character/byte\ in\ SEGGER\ RTT\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01362}01362\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01363}01363\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01364}01364\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ "{}Up"{}-\/buffer\ to\ be\ used\ (e.g.\ 0\ for\ "{}Terminal"{}).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01365}01365\ \textcolor{comment}{*\ \ \ \ c\ \ \ \ \ \ \ \ \ \ \ \ Byte\ to\ be\ stored.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01366}01366\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01367}01367\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01368}01368\ \textcolor{comment}{*\ \ \ \ Number\ of\ bytes\ which\ have\ been\ stored\ in\ the\ "{}Up"{}-\/buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01369}01369\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01370}01370\ \textcolor{comment}{*\ \ Notes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01371}01371\ \textcolor{comment}{*\ \ \ \ (1)\ Data\ is\ stored\ according\ to\ buffer\ flags.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01372}01372\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01373}01373\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01374}01374\ \textcolor{keywordtype}{unsigned}\ SEGGER\_RTT\_PutChar(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keywordtype}{char}\ c)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01375}01375\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ pRing;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01376}01376\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01377}01377\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ Status;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01378}01378\ \ \ \textcolor{keyword}{volatile}\ \textcolor{keywordtype}{char}*\ \ \ \ \ \ \ \ pDst;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01379}01379\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01380}01380\ \ \ \textcolor{comment}{//\ Prepare}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01381}01381\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01382}01382\ \ \ INIT();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01383}01383\ \ \ SEGGER\_RTT\_LOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01384}01384\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01385}01385\ \ \ \textcolor{comment}{//\ Get\ "{}to-\/host"{}\ ring\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01386}01386\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01387}01387\ \ \ pRing\ =\ (\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*)((uintptr\_t)\&\_SEGGER\_RTT.aUp[BufferIndex]\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01388}01388\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01389}01389\ \ \ \textcolor{comment}{//\ Get\ write\ position\ and\ handle\ wrap-\/around\ if\ necessary}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01390}01390\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01391}01391\ \ \ WrOff\ =\ pRing-\/>WrOff\ +\ 1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01392}01392\ \ \ \textcolor{keywordflow}{if}\ (WrOff\ ==\ pRing-\/>SizeOfBuffer)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01393}01393\ \ \ \ \ WrOff\ =\ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01394}01394\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01395}01395\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01396}01396\ \ \ \textcolor{comment}{//\ Wait\ for\ free\ space\ if\ mode\ is\ set\ to\ blocking}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01397}01397\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01398}01398\ \ \ \textcolor{keywordflow}{if}\ (pRing-\/>Flags\ ==\ SEGGER\_RTT\_MODE\_BLOCK\_IF\_FIFO\_FULL)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01399}01399\ \ \ \ \ \textcolor{keywordflow}{while}\ (WrOff\ ==\ pRing-\/>RdOff)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01400}01400\ \ \ \ \ \ \ ;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01401}01401\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01402}01402\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01403}01403\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01404}01404\ \ \ \textcolor{comment}{//\ Output\ byte\ if\ free\ space\ is\ available}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01405}01405\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01406}01406\ \ \ \textcolor{keywordflow}{if}\ (WrOff\ !=\ pRing-\/>RdOff)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01407}01407\ \ \ \ \ pDst\ \ =\ (pRing-\/>pBuffer\ +\ pRing-\/>WrOff)\ +\ SEGGER\_RTT\_UNCACHED\_OFF;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01408}01408\ \ \ \ \ *pDst\ =\ c;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01409}01409\ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01410}01410\ \ \ \ \ pRing-\/>WrOff\ =\ WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01411}01411\ \ \ \ \ Status\ =\ 1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01412}01412\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01413}01413\ \ \ \ \ Status\ =\ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01414}01414\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01415}01415\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01416}01416\ \ \ \textcolor{comment}{//\ Finish\ up.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01417}01417\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01418}01418\ \ \ SEGGER\_RTT\_UNLOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01419}01419\ \ \ \textcolor{keywordflow}{return}\ Status;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01420}01420\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01421}01421\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01422}01422\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01423}01423\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01424}01424\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_GetKey}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01425}01425\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01426}01426\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01427}01427\ \textcolor{comment}{*\ \ \ \ Reads\ one\ character\ from\ the\ SEGGER\ RTT\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01428}01428\ \textcolor{comment}{*\ \ \ \ Host\ has\ previously\ stored\ data\ there.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01429}01429\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01430}01430\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01431}01431\ \textcolor{comment}{*\ \ \ \ <\ \ 0\ -\/\ \ \ No\ character\ available\ (buffer\ empty).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01432}01432\ \textcolor{comment}{*\ \ \ \ >=\ 0\ -\/\ \ \ Character\ which\ has\ been\ read.\ (Possible\ values:\ 0\ -\/\ 255)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01433}01433\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01434}01434\ \textcolor{comment}{*\ \ Notes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01435}01435\ \textcolor{comment}{*\ \ \ \ (1)\ This\ function\ is\ only\ specified\ for\ accesses\ to\ RTT\ buffer\ 0.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01436}01436\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01437}01437\ \textcolor{keywordtype}{int}\ SEGGER\_RTT\_GetKey(\textcolor{keywordtype}{void})\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01438}01438\ \ \ \textcolor{keywordtype}{char}\ c;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01439}01439\ \ \ \textcolor{keywordtype}{int}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01440}01440\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01441}01441\ \ \ r\ =\ (int)SEGGER\_RTT\_Read(0u,\ \&c,\ 1u);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01442}01442\ \ \ \textcolor{keywordflow}{if}\ (r\ ==\ 1)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01443}01443\ \ \ \ \ r\ =\ (int)(\textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char})c;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01444}01444\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01445}01445\ \ \ \ \ r\ =\ -\/1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01446}01446\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01447}01447\ \ \ \textcolor{keywordflow}{return}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01448}01448\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01449}01449\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01450}01450\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01451}01451\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01452}01452\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_WaitKey}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01453}01453\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01454}01454\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01455}01455\ \textcolor{comment}{*\ \ \ \ Waits\ until\ at\ least\ one\ character\ is\ avaible\ in\ the\ SEGGER\ RTT\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01456}01456\ \textcolor{comment}{*\ \ \ \ Once\ a\ character\ is\ available,\ it\ is\ read\ and\ this\ function\ returns.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01457}01457\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01458}01458\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01459}01459\ \textcolor{comment}{*\ \ \ \ >=0\ -\/\ \ \ Character\ which\ has\ been\ read.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01460}01460\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01461}01461\ \textcolor{comment}{*\ \ Notes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01462}01462\ \textcolor{comment}{*\ \ \ \ (1)\ This\ function\ is\ only\ specified\ for\ accesses\ to\ RTT\ buffer\ 0}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01463}01463\ \textcolor{comment}{*\ \ \ \ (2)\ This\ function\ is\ blocking\ if\ no\ character\ is\ present\ in\ RTT\ buffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01464}01464\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01465}01465\ \textcolor{keywordtype}{int}\ SEGGER\_RTT\_WaitKey(\textcolor{keywordtype}{void})\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01466}01466\ \ \ \textcolor{keywordtype}{int}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01467}01467\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01468}01468\ \ \ \textcolor{keywordflow}{do}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01469}01469\ \ \ \ \ r\ =\ SEGGER\_RTT\_GetKey();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01470}01470\ \ \ \}\ \textcolor{keywordflow}{while}\ (r\ <\ 0);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01471}01471\ \ \ \textcolor{keywordflow}{return}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01472}01472\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01473}01473\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01474}01474\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01475}01475\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01476}01476\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_HasKey}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01477}01477\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01478}01478\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01479}01479\ \textcolor{comment}{*\ \ \ \ Checks\ if\ at\ least\ one\ character\ for\ reading\ is\ available\ in\ the\ SEGGER\ RTT\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01480}01480\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01481}01481\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01482}01482\ \textcolor{comment}{*\ \ \ \ ==\ 0\ -\/\ \ \ \ \ No\ characters\ are\ available\ to\ read.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01483}01483\ \textcolor{comment}{*\ \ \ \ ==\ 1\ -\/\ \ \ \ \ At\ least\ one\ character\ is\ available.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01484}01484\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01485}01485\ \textcolor{comment}{*\ \ Notes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01486}01486\ \textcolor{comment}{*\ \ \ \ (1)\ This\ function\ is\ only\ specified\ for\ accesses\ to\ RTT\ buffer\ 0}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01487}01487\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01488}01488\ \textcolor{keywordtype}{int}\ SEGGER\_RTT\_HasKey(\textcolor{keywordtype}{void})\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01489}01489\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n}{SEGGER\_RTT\_BUFFER\_DOWN}}*\ pRing;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01490}01490\ \ \ \textcolor{keywordtype}{unsigned}\ RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01491}01491\ \ \ \textcolor{keywordtype}{int}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01492}01492\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01493}01493\ \ \ INIT();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01494}01494\ \ \ pRing\ =\ (\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n}{SEGGER\_RTT\_BUFFER\_DOWN}}*)((uintptr\_t)\&\_SEGGER\_RTT.aDown[0]\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01495}01495\ \ \ RdOff\ =\ pRing-\/>RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01496}01496\ \ \ \textcolor{keywordflow}{if}\ (RdOff\ !=\ pRing-\/>WrOff)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01497}01497\ \ \ \ \ r\ =\ 1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01498}01498\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01499}01499\ \ \ \ \ r\ =\ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01500}01500\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01501}01501\ \ \ \textcolor{keywordflow}{return}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01502}01502\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01503}01503\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01504}01504\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01505}01505\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01506}01506\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_HasData}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01507}01507\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01508}01508\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01509}01509\ \textcolor{comment}{*\ \ \ \ Check\ if\ there\ is\ data\ from\ the\ host\ in\ the\ given\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01510}01510\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01511}01511\ \textcolor{comment}{*\ \ Return\ value:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01512}01512\ \textcolor{comment}{*\ \ ==0:\ \ No\ data}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01513}01513\ \textcolor{comment}{*\ \ !=0:\ \ Data\ in\ buffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01514}01514\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01515}01515\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01516}01516\ \textcolor{keywordtype}{unsigned}\ SEGGER\_RTT\_HasData(\textcolor{keywordtype}{unsigned}\ BufferIndex)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01517}01517\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n}{SEGGER\_RTT\_BUFFER\_DOWN}}*\ pRing;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01518}01518\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ v;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01519}01519\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01520}01520\ \ \ pRing\ =\ (\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n}{SEGGER\_RTT\_BUFFER\_DOWN}}*)((uintptr\_t)\&\_SEGGER\_RTT.aDown[BufferIndex]\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01521}01521\ \ \ v\ =\ pRing-\/>WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01522}01522\ \ \ \textcolor{keywordflow}{return}\ v\ -\/\ pRing-\/>RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01523}01523\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01524}01524\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01525}01525\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01526}01526\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01527}01527\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_HasDataUp}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01528}01528\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01529}01529\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01530}01530\ \textcolor{comment}{*\ \ \ \ Check\ if\ there\ is\ data\ remaining\ to\ be\ sent\ in\ the\ given\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01531}01531\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01532}01532\ \textcolor{comment}{*\ \ Return\ value:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01533}01533\ \textcolor{comment}{*\ \ ==0:\ \ No\ data}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01534}01534\ \textcolor{comment}{*\ \ !=0:\ \ Data\ in\ buffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01535}01535\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01536}01536\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01537}01537\ \textcolor{keywordtype}{unsigned}\ SEGGER\_RTT\_HasDataUp(\textcolor{keywordtype}{unsigned}\ BufferIndex)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01538}01538\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ pRing;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01539}01539\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ v;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01540}01540\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01541}01541\ \ \ pRing\ =\ (\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*)((uintptr\_t)\&\_SEGGER\_RTT.aUp[BufferIndex]\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01542}01542\ \ \ v\ =\ pRing-\/>RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01543}01543\ \ \ \textcolor{keywordflow}{return}\ pRing-\/>WrOff\ -\/\ v;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01544}01544\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01545}01545\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01546}01546\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01547}01547\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01548}01548\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_AllocDownBuffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01549}01549\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01550}01550\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01551}01551\ \textcolor{comment}{*\ \ \ \ Run-\/time\ configuration\ of\ the\ next\ down-\/buffer\ (H-\/>T).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01552}01552\ \textcolor{comment}{*\ \ \ \ The\ next\ buffer,\ which\ is\ not\ used\ yet\ is\ configured.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01553}01553\ \textcolor{comment}{*\ \ \ \ This\ includes:\ Buffer\ address,\ size,\ name,\ flags,\ ...}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01554}01554\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01555}01555\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01556}01556\ \textcolor{comment}{*\ \ \ \ sName\ \ \ \ \ \ \ \ Pointer\ to\ a\ constant\ name\ string.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01557}01557\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ \ \ \ \ Pointer\ to\ a\ buffer\ to\ be\ used.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01558}01558\ \textcolor{comment}{*\ \ \ \ BufferSize\ \ \ Size\ of\ the\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01559}01559\ \textcolor{comment}{*\ \ \ \ Flags\ \ \ \ \ \ \ \ Operating\ modes.\ Define\ behavior\ if\ buffer\ is\ full\ (not\ enough\ space\ for\ entire\ message).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01560}01560\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Flags[31:24]\ are\ used\ for\ validity\ check\ and\ must\ be\ zero.\ Flags[23:2]\ are\ reserved\ for\ future\ use.\ Flags[1:0]\ =\ RTT\ operating\ mode.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01561}01561\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01562}01562\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01563}01563\ \textcolor{comment}{*\ \ \ \ >=\ 0\ -\/\ O.K.\ Buffer\ Index}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01564}01564\ \textcolor{comment}{*\ \ \ \ \ <\ 0\ -\/\ Error}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01565}01565\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01566}01566\ \textcolor{keywordtype}{int}\ SEGGER\_RTT\_AllocDownBuffer(\textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ sName,\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ BufferSize,\ \textcolor{keywordtype}{unsigned}\ Flags)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01567}01567\ \ \ \textcolor{keywordtype}{int}\ BufferIndex;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01568}01568\ \ \ \textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*\ pRTTCB;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01569}01569\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01570}01570\ \ \ INIT();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01571}01571\ \ \ SEGGER\_RTT\_LOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01572}01572\ \ \ pRTTCB\ =\ (\textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*)((uintptr\_t)\&\_SEGGER\_RTT\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ RTTCB\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01573}01573\ \ \ BufferIndex\ =\ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01574}01574\ \ \ \textcolor{keywordflow}{do}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01575}01575\ \ \ \ \ \textcolor{keywordflow}{if}\ (pRTTCB-\/>aDown[BufferIndex].pBuffer\ ==\ NULL)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01576}01576\ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01577}01577\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01578}01578\ \ \ \ \ BufferIndex++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01579}01579\ \ \ \}\ \textcolor{keywordflow}{while}\ (BufferIndex\ <\ pRTTCB-\/>MaxNumDownBuffers);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01580}01580\ \ \ \textcolor{keywordflow}{if}\ (BufferIndex\ <\ pRTTCB-\/>MaxNumDownBuffers)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01581}01581\ \ \ \ \ pRTTCB-\/>aDown[BufferIndex].sName\ \ \ \ \ \ \ \ =\ sName;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01582}01582\ \ \ \ \ pRTTCB-\/>aDown[BufferIndex].pBuffer\ \ \ \ \ \ =\ (\textcolor{keywordtype}{char}*)pBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01583}01583\ \ \ \ \ pRTTCB-\/>aDown[BufferIndex].SizeOfBuffer\ =\ BufferSize;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01584}01584\ \ \ \ \ pRTTCB-\/>aDown[BufferIndex].RdOff\ \ \ \ \ \ \ \ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01585}01585\ \ \ \ \ pRTTCB-\/>aDown[BufferIndex].WrOff\ \ \ \ \ \ \ \ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01586}01586\ \ \ \ \ pRTTCB-\/>aDown[BufferIndex].Flags\ \ \ \ \ \ \ \ =\ Flags;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01587}01587\ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01588}01588\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01589}01589\ \ \ \ \ BufferIndex\ =\ -\/1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01590}01590\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01591}01591\ \ \ SEGGER\_RTT\_UNLOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01592}01592\ \ \ \textcolor{keywordflow}{return}\ BufferIndex;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01593}01593\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01594}01594\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01595}01595\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01596}01596\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01597}01597\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_AllocUpBuffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01598}01598\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01599}01599\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01600}01600\ \textcolor{comment}{*\ \ \ \ Run-\/time\ configuration\ of\ the\ next\ up-\/buffer\ (T-\/>H).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01601}01601\ \textcolor{comment}{*\ \ \ \ The\ next\ buffer,\ which\ is\ not\ used\ yet\ is\ configured.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01602}01602\ \textcolor{comment}{*\ \ \ \ This\ includes:\ Buffer\ address,\ size,\ name,\ flags,\ ...}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01603}01603\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01604}01604\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01605}01605\ \textcolor{comment}{*\ \ \ \ sName\ \ \ \ \ \ \ \ Pointer\ to\ a\ constant\ name\ string.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01606}01606\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ \ \ \ \ Pointer\ to\ a\ buffer\ to\ be\ used.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01607}01607\ \textcolor{comment}{*\ \ \ \ BufferSize\ \ \ Size\ of\ the\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01608}01608\ \textcolor{comment}{*\ \ \ \ Flags\ \ \ \ \ \ \ \ Operating\ modes.\ Define\ behavior\ if\ buffer\ is\ full\ (not\ enough\ space\ for\ entire\ message).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01609}01609\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Flags[31:24]\ are\ used\ for\ validity\ check\ and\ must\ be\ zero.\ Flags[23:2]\ are\ reserved\ for\ future\ use.\ Flags[1:0]\ =\ RTT\ operating\ mode.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01610}01610\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01611}01611\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01612}01612\ \textcolor{comment}{*\ \ \ \ >=\ 0\ -\/\ O.K.\ Buffer\ Index}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01613}01613\ \textcolor{comment}{*\ \ \ \ \ <\ 0\ -\/\ Error}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01614}01614\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01615}01615\ \textcolor{keywordtype}{int}\ SEGGER\_RTT\_AllocUpBuffer(\textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ sName,\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ BufferSize,\ \textcolor{keywordtype}{unsigned}\ Flags)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01616}01616\ \ \ \textcolor{keywordtype}{int}\ BufferIndex;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01617}01617\ \ \ \textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*\ pRTTCB;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01618}01618\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01619}01619\ \ \ INIT();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01620}01620\ \ \ SEGGER\_RTT\_LOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01621}01621\ \ \ pRTTCB\ =\ (\textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*)((uintptr\_t)\&\_SEGGER\_RTT\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ RTTCB\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01622}01622\ \ \ BufferIndex\ =\ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01623}01623\ \ \ \textcolor{keywordflow}{do}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01624}01624\ \ \ \ \ \textcolor{keywordflow}{if}\ (pRTTCB-\/>aUp[BufferIndex].pBuffer\ ==\ NULL)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01625}01625\ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01626}01626\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01627}01627\ \ \ \ \ BufferIndex++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01628}01628\ \ \ \}\ \textcolor{keywordflow}{while}\ (BufferIndex\ <\ pRTTCB-\/>MaxNumUpBuffers);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01629}01629\ \ \ \textcolor{keywordflow}{if}\ (BufferIndex\ <\ pRTTCB-\/>MaxNumUpBuffers)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01630}01630\ \ \ \ \ pRTTCB-\/>aUp[BufferIndex].sName\ \ \ \ \ \ \ \ =\ sName;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01631}01631\ \ \ \ \ pRTTCB-\/>aUp[BufferIndex].pBuffer\ \ \ \ \ \ =\ (\textcolor{keywordtype}{char}*)pBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01632}01632\ \ \ \ \ pRTTCB-\/>aUp[BufferIndex].SizeOfBuffer\ =\ BufferSize;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01633}01633\ \ \ \ \ pRTTCB-\/>aUp[BufferIndex].RdOff\ \ \ \ \ \ \ \ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01634}01634\ \ \ \ \ pRTTCB-\/>aUp[BufferIndex].WrOff\ \ \ \ \ \ \ \ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01635}01635\ \ \ \ \ pRTTCB-\/>aUp[BufferIndex].Flags\ \ \ \ \ \ \ \ =\ Flags;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01636}01636\ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01637}01637\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01638}01638\ \ \ \ \ BufferIndex\ =\ -\/1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01639}01639\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01640}01640\ \ \ SEGGER\_RTT\_UNLOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01641}01641\ \ \ \textcolor{keywordflow}{return}\ BufferIndex;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01642}01642\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01643}01643\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01644}01644\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01645}01645\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01646}01646\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_ConfigUpBuffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01647}01647\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01648}01648\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01649}01649\ \textcolor{comment}{*\ \ \ \ Run-\/time\ configuration\ of\ a\ specific\ up-\/buffer\ (T-\/>H).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01650}01650\ \textcolor{comment}{*\ \ \ \ Buffer\ to\ be\ configured\ is\ specified\ by\ index.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01651}01651\ \textcolor{comment}{*\ \ \ \ This\ includes:\ Buffer\ address,\ size,\ name,\ flags,\ ...}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01652}01652\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01653}01653\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01654}01654\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ the\ buffer\ to\ configure.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01655}01655\ \textcolor{comment}{*\ \ \ \ sName\ \ \ \ \ \ \ \ Pointer\ to\ a\ constant\ name\ string.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01656}01656\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ \ \ \ \ Pointer\ to\ a\ buffer\ to\ be\ used.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01657}01657\ \textcolor{comment}{*\ \ \ \ BufferSize\ \ \ Size\ of\ the\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01658}01658\ \textcolor{comment}{*\ \ \ \ Flags\ \ \ \ \ \ \ \ Operating\ modes.\ Define\ behavior\ if\ buffer\ is\ full\ (not\ enough\ space\ for\ entire\ message).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01659}01659\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Flags[31:24]\ are\ used\ for\ validity\ check\ and\ must\ be\ zero.\ Flags[23:2]\ are\ reserved\ for\ future\ use.\ Flags[1:0]\ =\ RTT\ operating\ mode.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01660}01660\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01661}01661\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01662}01662\ \textcolor{comment}{*\ \ \ \ >=\ 0\ -\/\ O.K.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01663}01663\ \textcolor{comment}{*\ \ \ \ \ <\ 0\ -\/\ Error}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01664}01664\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01665}01665\ \textcolor{comment}{*\ \ Additional\ information}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01666}01666\ \textcolor{comment}{*\ \ \ \ Buffer\ 0\ is\ configured\ on\ compile-\/time.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01667}01667\ \textcolor{comment}{*\ \ \ \ May\ only\ be\ called\ once\ per\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01668}01668\ \textcolor{comment}{*\ \ \ \ Buffer\ name\ and\ flags\ can\ be\ reconfigured\ using\ the\ appropriate\ functions.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01669}01669\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01670}01670\ \textcolor{keywordtype}{int}\ SEGGER\_RTT\_ConfigUpBuffer(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ sName,\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ BufferSize,\ \textcolor{keywordtype}{unsigned}\ Flags)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01671}01671\ \ \ \textcolor{keywordtype}{int}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01672}01672\ \ \ \textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*\ pRTTCB;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01673}01673\ \ \ \textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ pUp;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01674}01674\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01675}01675\ \ \ INIT();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01676}01676\ \ \ pRTTCB\ =\ (\textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*)((uintptr\_t)\&\_SEGGER\_RTT\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ RTTCB\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01677}01677\ \ \ \textcolor{keywordflow}{if}\ (BufferIndex\ <\ SEGGER\_RTT\_MAX\_NUM\_UP\_BUFFERS)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01678}01678\ \ \ \ \ SEGGER\_RTT\_LOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01679}01679\ \ \ \ \ pUp\ =\ \&pRTTCB-\/>aUp[BufferIndex];} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01680}01680\ \ \ \ \ \textcolor{keywordflow}{if}\ (BufferIndex)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01681}01681\ \ \ \ \ \ \ pUp-\/>sName\ \ \ \ \ \ \ \ =\ sName;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01682}01682\ \ \ \ \ \ \ pUp-\/>pBuffer\ \ \ \ \ \ =\ (\textcolor{keywordtype}{char}*)pBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01683}01683\ \ \ \ \ \ \ pUp-\/>SizeOfBuffer\ =\ BufferSize;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01684}01684\ \ \ \ \ \ \ pUp-\/>RdOff\ \ \ \ \ \ \ \ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01685}01685\ \ \ \ \ \ \ pUp-\/>WrOff\ \ \ \ \ \ \ \ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01686}01686\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01687}01687\ \ \ \ \ pUp-\/>Flags\ \ \ \ \ \ \ \ \ \ =\ Flags;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01688}01688\ \ \ \ \ SEGGER\_RTT\_UNLOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01689}01689\ \ \ \ \ r\ =\ \ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01690}01690\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01691}01691\ \ \ \ \ r\ =\ -\/1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01692}01692\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01693}01693\ \ \ \textcolor{keywordflow}{return}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01694}01694\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01695}01695\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01696}01696\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01697}01697\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01698}01698\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_ConfigDownBuffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01699}01699\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01700}01700\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01701}01701\ \textcolor{comment}{*\ \ \ \ Run-\/time\ configuration\ of\ a\ specific\ down-\/buffer\ (H-\/>T).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01702}01702\ \textcolor{comment}{*\ \ \ \ Buffer\ to\ be\ configured\ is\ specified\ by\ index.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01703}01703\ \textcolor{comment}{*\ \ \ \ This\ includes:\ Buffer\ address,\ size,\ name,\ flags,\ ...}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01704}01704\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01705}01705\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01706}01706\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ the\ buffer\ to\ configure.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01707}01707\ \textcolor{comment}{*\ \ \ \ sName\ \ \ \ \ \ \ \ Pointer\ to\ a\ constant\ name\ string.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01708}01708\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ \ \ \ \ Pointer\ to\ a\ buffer\ to\ be\ used.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01709}01709\ \textcolor{comment}{*\ \ \ \ BufferSize\ \ \ Size\ of\ the\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01710}01710\ \textcolor{comment}{*\ \ \ \ Flags\ \ \ \ \ \ \ \ Operating\ modes.\ Define\ behavior\ if\ buffer\ is\ full\ (not\ enough\ space\ for\ entire\ message).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01711}01711\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Flags[31:24]\ are\ used\ for\ validity\ check\ and\ must\ be\ zero.\ Flags[23:2]\ are\ reserved\ for\ future\ use.\ Flags[1:0]\ =\ RTT\ operating\ mode.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01712}01712\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01713}01713\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01714}01714\ \textcolor{comment}{*\ \ \ \ >=\ 0\ \ O.K.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01715}01715\ \textcolor{comment}{*\ \ \ \ \ <\ 0\ \ Error}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01716}01716\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01717}01717\ \textcolor{comment}{*\ \ Additional\ information}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01718}01718\ \textcolor{comment}{*\ \ \ \ Buffer\ 0\ is\ configured\ on\ compile-\/time.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01719}01719\ \textcolor{comment}{*\ \ \ \ May\ only\ be\ called\ once\ per\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01720}01720\ \textcolor{comment}{*\ \ \ \ Buffer\ name\ and\ flags\ can\ be\ reconfigured\ using\ the\ appropriate\ functions.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01721}01721\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01722}01722\ \textcolor{keywordtype}{int}\ SEGGER\_RTT\_ConfigDownBuffer(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ sName,\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ BufferSize,\ \textcolor{keywordtype}{unsigned}\ Flags)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01723}01723\ \ \ \textcolor{keywordtype}{int}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01724}01724\ \ \ \textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*\ pRTTCB;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01725}01725\ \ \ \textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n}{SEGGER\_RTT\_BUFFER\_DOWN}}*\ pDown;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01726}01726\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01727}01727\ \ \ INIT();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01728}01728\ \ \ pRTTCB\ =\ (\textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*)((uintptr\_t)\&\_SEGGER\_RTT\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ RTTCB\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01729}01729\ \ \ \textcolor{keywordflow}{if}\ (BufferIndex\ <\ SEGGER\_RTT\_MAX\_NUM\_DOWN\_BUFFERS)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01730}01730\ \ \ \ \ SEGGER\_RTT\_LOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01731}01731\ \ \ \ \ pDown\ =\ \&pRTTCB-\/>aDown[BufferIndex];} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01732}01732\ \ \ \ \ \textcolor{keywordflow}{if}\ (BufferIndex)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01733}01733\ \ \ \ \ \ \ pDown-\/>sName\ \ \ \ \ \ \ \ =\ sName;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01734}01734\ \ \ \ \ \ \ pDown-\/>pBuffer\ \ \ \ \ \ =\ (\textcolor{keywordtype}{char}*)pBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01735}01735\ \ \ \ \ \ \ pDown-\/>SizeOfBuffer\ =\ BufferSize;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01736}01736\ \ \ \ \ \ \ pDown-\/>RdOff\ \ \ \ \ \ \ \ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01737}01737\ \ \ \ \ \ \ pDown-\/>WrOff\ \ \ \ \ \ \ \ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01738}01738\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01739}01739\ \ \ \ \ pDown-\/>Flags\ \ \ \ \ \ \ \ \ \ =\ Flags;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01740}01740\ \ \ \ \ RTT\_\_DMB();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Force\ data\ write\ to\ be\ complete\ before\ writing\ the\ ,\ in\ case\ CPU\ is\ allowed\ to\ change\ the\ order\ of\ memory\ accesses}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01741}01741\ \ \ \ \ SEGGER\_RTT\_UNLOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01742}01742\ \ \ \ \ r\ =\ \ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01743}01743\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01744}01744\ \ \ \ \ r\ =\ -\/1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01745}01745\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01746}01746\ \ \ \textcolor{keywordflow}{return}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01747}01747\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01748}01748\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01749}01749\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01750}01750\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01751}01751\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_SetNameUpBuffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01752}01752\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01753}01753\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01754}01754\ \textcolor{comment}{*\ \ \ \ Run-\/time\ configuration\ of\ a\ specific\ up-\/buffer\ name\ (T-\/>H).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01755}01755\ \textcolor{comment}{*\ \ \ \ Buffer\ to\ be\ configured\ is\ specified\ by\ index.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01756}01756\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01757}01757\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01758}01758\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ the\ buffer\ to\ renamed.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01759}01759\ \textcolor{comment}{*\ \ \ \ sName\ \ \ \ \ \ \ \ Pointer\ to\ a\ constant\ name\ string.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01760}01760\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01761}01761\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01762}01762\ \textcolor{comment}{*\ \ \ \ >=\ 0\ \ O.K.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01763}01763\ \textcolor{comment}{*\ \ \ \ \ <\ 0\ \ Error}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01764}01764\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01765}01765\ \textcolor{keywordtype}{int}\ SEGGER\_RTT\_SetNameUpBuffer(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ sName)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01766}01766\ \ \ \textcolor{keywordtype}{int}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01767}01767\ \ \ \textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*\ pRTTCB;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01768}01768\ \ \ \textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ pUp;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01769}01769\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01770}01770\ \ \ INIT();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01771}01771\ \ \ pRTTCB\ =\ (\textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*)((uintptr\_t)\&\_SEGGER\_RTT\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ RTTCB\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01772}01772\ \ \ \textcolor{keywordflow}{if}\ (BufferIndex\ <\ SEGGER\_RTT\_MAX\_NUM\_UP\_BUFFERS)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01773}01773\ \ \ \ \ SEGGER\_RTT\_LOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01774}01774\ \ \ \ \ pUp\ =\ \&pRTTCB-\/>aUp[BufferIndex];} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01775}01775\ \ \ \ \ pUp-\/>sName\ =\ sName;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01776}01776\ \ \ \ \ SEGGER\_RTT\_UNLOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01777}01777\ \ \ \ \ r\ =\ \ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01778}01778\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01779}01779\ \ \ \ \ r\ =\ -\/1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01780}01780\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01781}01781\ \ \ \textcolor{keywordflow}{return}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01782}01782\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01783}01783\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01784}01784\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01785}01785\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01786}01786\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_SetNameDownBuffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01787}01787\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01788}01788\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01789}01789\ \textcolor{comment}{*\ \ \ \ Run-\/time\ configuration\ of\ a\ specific\ Down-\/buffer\ name\ (T-\/>H).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01790}01790\ \textcolor{comment}{*\ \ \ \ Buffer\ to\ be\ configured\ is\ specified\ by\ index.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01791}01791\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01792}01792\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01793}01793\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ the\ buffer\ to\ renamed.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01794}01794\ \textcolor{comment}{*\ \ \ \ sName\ \ \ \ \ \ \ \ Pointer\ to\ a\ constant\ name\ string.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01795}01795\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01796}01796\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01797}01797\ \textcolor{comment}{*\ \ \ \ >=\ 0\ \ O.K.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01798}01798\ \textcolor{comment}{*\ \ \ \ \ <\ 0\ \ Error}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01799}01799\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01800}01800\ \textcolor{keywordtype}{int}\ SEGGER\_RTT\_SetNameDownBuffer(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ sName)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01801}01801\ \ \ \textcolor{keywordtype}{int}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01802}01802\ \ \ \textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*\ pRTTCB;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01803}01803\ \ \ \textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n}{SEGGER\_RTT\_BUFFER\_DOWN}}*\ pDown;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01804}01804\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01805}01805\ \ \ INIT();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01806}01806\ \ \ pRTTCB\ =\ (\textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*)((uintptr\_t)\&\_SEGGER\_RTT\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ RTTCB\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01807}01807\ \ \ \textcolor{keywordflow}{if}\ (BufferIndex\ <\ SEGGER\_RTT\_MAX\_NUM\_DOWN\_BUFFERS)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01808}01808\ \ \ \ \ SEGGER\_RTT\_LOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01809}01809\ \ \ \ \ pDown\ =\ \&pRTTCB-\/>aDown[BufferIndex];} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01810}01810\ \ \ \ \ pDown-\/>sName\ =\ sName;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01811}01811\ \ \ \ \ SEGGER\_RTT\_UNLOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01812}01812\ \ \ \ \ r\ =\ \ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01813}01813\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01814}01814\ \ \ \ \ r\ =\ -\/1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01815}01815\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01816}01816\ \ \ \textcolor{keywordflow}{return}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01817}01817\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01818}01818\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01819}01819\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01820}01820\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01821}01821\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_SetFlagsUpBuffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01822}01822\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01823}01823\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01824}01824\ \textcolor{comment}{*\ \ \ \ Run-\/time\ configuration\ of\ specific\ up-\/buffer\ flags\ (T-\/>H).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01825}01825\ \textcolor{comment}{*\ \ \ \ Buffer\ to\ be\ configured\ is\ specified\ by\ index.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01826}01826\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01827}01827\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01828}01828\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ the\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01829}01829\ \textcolor{comment}{*\ \ \ \ Flags\ \ \ \ \ \ \ \ Flags\ to\ set\ for\ the\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01830}01830\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Flags[31:24]\ are\ used\ for\ validity\ check\ and\ must\ be\ zero.\ Flags[23:2]\ are\ reserved\ for\ future\ use.\ Flags[1:0]\ =\ RTT\ operating\ mode.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01831}01831\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01832}01832\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01833}01833\ \textcolor{comment}{*\ \ \ \ >=\ 0\ \ O.K.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01834}01834\ \textcolor{comment}{*\ \ \ \ \ <\ 0\ \ Error}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01835}01835\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01836}01836\ \textcolor{keywordtype}{int}\ SEGGER\_RTT\_SetFlagsUpBuffer(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keywordtype}{unsigned}\ Flags)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01837}01837\ \ \ \textcolor{keywordtype}{int}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01838}01838\ \ \ \textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*\ pRTTCB;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01839}01839\ \ \ \textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ pUp;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01840}01840\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01841}01841\ \ \ INIT();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01842}01842\ \ \ pRTTCB\ =\ (\textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*)((uintptr\_t)\&\_SEGGER\_RTT\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ RTTCB\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01843}01843\ \ \ \textcolor{keywordflow}{if}\ (BufferIndex\ <\ SEGGER\_RTT\_MAX\_NUM\_UP\_BUFFERS)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01844}01844\ \ \ \ \ SEGGER\_RTT\_LOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01845}01845\ \ \ \ \ pUp\ =\ \&pRTTCB-\/>aUp[BufferIndex];} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01846}01846\ \ \ \ \ pUp-\/>Flags\ =\ Flags;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01847}01847\ \ \ \ \ SEGGER\_RTT\_UNLOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01848}01848\ \ \ \ \ r\ =\ \ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01849}01849\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01850}01850\ \ \ \ \ r\ =\ -\/1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01851}01851\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01852}01852\ \ \ \textcolor{keywordflow}{return}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01853}01853\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01854}01854\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01855}01855\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01856}01856\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01857}01857\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_SetFlagsDownBuffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01858}01858\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01859}01859\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01860}01860\ \textcolor{comment}{*\ \ \ \ Run-\/time\ configuration\ of\ specific\ Down-\/buffer\ flags\ (T-\/>H).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01861}01861\ \textcolor{comment}{*\ \ \ \ Buffer\ to\ be\ configured\ is\ specified\ by\ index.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01862}01862\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01863}01863\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01864}01864\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ the\ buffer\ to\ renamed.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01865}01865\ \textcolor{comment}{*\ \ \ \ Flags\ \ \ \ \ \ \ \ Flags\ to\ set\ for\ the\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01866}01866\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Flags[31:24]\ are\ used\ for\ validity\ check\ and\ must\ be\ zero.\ Flags[23:2]\ are\ reserved\ for\ future\ use.\ Flags[1:0]\ =\ RTT\ operating\ mode.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01867}01867\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01868}01868\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01869}01869\ \textcolor{comment}{*\ \ \ \ >=\ 0\ \ O.K.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01870}01870\ \textcolor{comment}{*\ \ \ \ \ <\ 0\ \ Error}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01871}01871\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01872}01872\ \textcolor{keywordtype}{int}\ SEGGER\_RTT\_SetFlagsDownBuffer(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keywordtype}{unsigned}\ Flags)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01873}01873\ \ \ \textcolor{keywordtype}{int}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01874}01874\ \ \ \textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*\ pRTTCB;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01875}01875\ \ \ \textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n}{SEGGER\_RTT\_BUFFER\_DOWN}}*\ pDown;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01876}01876\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01877}01877\ \ \ INIT();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01878}01878\ \ \ pRTTCB\ =\ (\textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*)((uintptr\_t)\&\_SEGGER\_RTT\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ RTTCB\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01879}01879\ \ \ \textcolor{keywordflow}{if}\ (BufferIndex\ <\ SEGGER\_RTT\_MAX\_NUM\_DOWN\_BUFFERS)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01880}01880\ \ \ \ \ SEGGER\_RTT\_LOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01881}01881\ \ \ \ \ pDown\ =\ \&pRTTCB-\/>aDown[BufferIndex];} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01882}01882\ \ \ \ \ pDown-\/>Flags\ =\ Flags;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01883}01883\ \ \ \ \ SEGGER\_RTT\_UNLOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01884}01884\ \ \ \ \ r\ =\ \ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01885}01885\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01886}01886\ \ \ \ \ r\ =\ -\/1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01887}01887\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01888}01888\ \ \ \textcolor{keywordflow}{return}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01889}01889\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01890}01890\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01891}01891\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01892}01892\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01893}01893\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_Init}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01894}01894\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01895}01895\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01896}01896\ \textcolor{comment}{*\ \ \ \ Initializes\ the\ RTT\ Control\ Block.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01897}01897\ \textcolor{comment}{*\ \ \ \ Should\ be\ used\ in\ RAM\ targets,\ at\ start\ of\ the\ application.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01898}01898\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01899}01899\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01900}01900\ \textcolor{keywordtype}{void}\ SEGGER\_RTT\_Init\ (\textcolor{keywordtype}{void})\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01901}01901\ \ \ \_DoInit();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01902}01902\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01903}01903\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01904}01904\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01905}01905\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01906}01906\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_SetTerminal}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01907}01907\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01908}01908\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01909}01909\ \textcolor{comment}{*\ \ \ \ Sets\ the\ terminal\ to\ be\ used\ for\ output\ on\ channel\ 0.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01910}01910\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01911}01911\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01912}01912\ \textcolor{comment}{*\ \ \ \ TerminalId\ \ Index\ of\ the\ terminal.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01913}01913\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01914}01914\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01915}01915\ \textcolor{comment}{*\ \ \ \ >=\ 0\ \ O.K.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01916}01916\ \textcolor{comment}{*\ \ \ \ \ <\ 0\ \ Error\ (e.g.\ if\ RTT\ is\ configured\ for\ non-\/blocking\ mode\ and\ there\ was\ no\ space\ in\ the\ buffer\ to\ set\ the\ new\ terminal\ Id)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01917}01917\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01918}01918\ \textcolor{comment}{*\ \ Notes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01919}01919\ \textcolor{comment}{*\ \ \ \ (1)\ Buffer\ 0\ is\ always\ reserved\ for\ terminal\ I/O,\ so\ we\ can\ use\ index\ 0\ here,\ fixed}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01920}01920\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01921}01921\ \textcolor{keywordtype}{int}\ SEGGER\_RTT\_SetTerminal\ (\textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char}\ TerminalId)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01922}01922\ \ \ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char}\ \ \ \ \ \ \ \ \ ac[2];} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01923}01923\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ pRing;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01924}01924\ \ \ \textcolor{keywordtype}{unsigned}\ Avail;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01925}01925\ \ \ \textcolor{keywordtype}{int}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01926}01926\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01927}01927\ \ \ INIT();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01928}01928\ \ \ r\ =\ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01929}01929\ \ \ ac[0]\ =\ 0xFFu;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01930}01930\ \ \ \textcolor{keywordflow}{if}\ (TerminalId\ <\ \textcolor{keyword}{sizeof}(\_aTerminalId))\ \{\ \textcolor{comment}{//\ We\ only\ support\ a\ certain\ number\ of\ channels}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01931}01931\ \ \ \ \ ac[1]\ =\ \_aTerminalId[TerminalId];} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01932}01932\ \ \ \ \ pRing\ =\ (\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*)((uintptr\_t)\&\_SEGGER\_RTT.aUp[0]\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01933}01933\ \ \ \ \ SEGGER\_RTT\_LOCK();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Lock\ to\ make\ sure\ that\ no\ other\ task\ is\ writing\ into\ buffer,\ while\ we\ are\ and\ number\ of\ free\ bytes\ in\ buffer\ does\ not\ change\ downwards\ after\ checking\ and\ before\ writing}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01934}01934\ \ \ \ \ \textcolor{keywordflow}{if}\ ((pRing-\/>Flags\ \&\ SEGGER\_RTT\_MODE\_MASK)\ ==\ SEGGER\_RTT\_MODE\_BLOCK\_IF\_FIFO\_FULL)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01935}01935\ \ \ \ \ \ \ \_ActiveTerminal\ =\ TerminalId;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01936}01936\ \ \ \ \ \ \ \_WriteBlocking(pRing,\ (\textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*)ac,\ 2u);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01937}01937\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Skipping\ mode\ or\ trim\ mode?\ =>\ We\ cannot\ trim\ this\ command\ so\ handling\ is\ the\ same\ for\ both\ modes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01938}01938\ \ \ \ \ \ \ Avail\ =\ \_GetAvailWriteSpace(pRing);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01939}01939\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (Avail\ >=\ 2)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01940}01940\ \ \ \ \ \ \ \ \ \_ActiveTerminal\ =\ TerminalId;\ \ \ \ \textcolor{comment}{//\ Only\ change\ active\ terminal\ in\ case\ of\ success}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01941}01941\ \ \ \ \ \ \ \ \ \_WriteNoCheck(pRing,\ (\textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*)ac,\ 2u);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01942}01942\ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01943}01943\ \ \ \ \ \ \ \ \ r\ =\ -\/1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01944}01944\ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01945}01945\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01946}01946\ \ \ \ \ SEGGER\_RTT\_UNLOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01947}01947\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01948}01948\ \ \ \ \ r\ =\ -\/1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01949}01949\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01950}01950\ \ \ \textcolor{keywordflow}{return}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01951}01951\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01952}01952\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01953}01953\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01954}01954\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01955}01955\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_TerminalOut}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01956}01956\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01957}01957\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01958}01958\ \textcolor{comment}{*\ \ \ \ Writes\ a\ string\ to\ the\ given\ terminal}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01959}01959\ \textcolor{comment}{*\ \ \ \ \ without\ changing\ the\ terminal\ for\ channel\ 0.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01960}01960\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01961}01961\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01962}01962\ \textcolor{comment}{*\ \ \ \ TerminalId\ \ \ Index\ of\ the\ terminal.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01963}01963\ \textcolor{comment}{*\ \ \ \ s\ \ \ \ \ \ \ \ \ \ \ \ String\ to\ be\ printed\ on\ the\ terminal.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01964}01964\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01965}01965\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01966}01966\ \textcolor{comment}{*\ \ \ \ >=\ 0\ -\/\ Number\ of\ bytes\ written.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01967}01967\ \textcolor{comment}{*\ \ \ \ \ <\ 0\ -\/\ Error.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01968}01968\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01969}01969\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01970}01970\ \textcolor{keywordtype}{int}\ SEGGER\_RTT\_TerminalOut\ (\textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char}\ TerminalId,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ s)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01971}01971\ \ \ \textcolor{keywordtype}{int}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Status;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01972}01972\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ FragLen;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01973}01973\ \ \ \textcolor{keywordtype}{unsigned}\ \ \ \ \ \ \ \ \ \ \ \ \ \ Avail;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01974}01974\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ pRing;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01975}01975\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01976}01976\ \ \ INIT();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01977}01977\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01978}01978\ \ \ \textcolor{comment}{//\ Validate\ terminal\ ID.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01979}01979\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01980}01980\ \ \ \textcolor{keywordflow}{if}\ (TerminalId\ <\ (\textcolor{keywordtype}{char})\textcolor{keyword}{sizeof}(\_aTerminalId))\ \{\ \textcolor{comment}{//\ We\ only\ support\ a\ certain\ number\ of\ channels}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01981}01981\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01982}01982\ \ \ \ \ \textcolor{comment}{//\ Get\ "{}to-\/host"{}\ ring\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01983}01983\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01984}01984\ \ \ \ \ pRing\ =\ (\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*)((uintptr\_t)\&\_SEGGER\_RTT.aUp[0]\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01985}01985\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01986}01986\ \ \ \ \ \textcolor{comment}{//\ Need\ to\ be\ able\ to\ change\ terminal,\ write\ data,\ change\ back.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01987}01987\ \ \ \ \ \textcolor{comment}{//\ Compute\ the\ fixed\ and\ variable\ sizes.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01988}01988\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01989}01989\ \ \ \ \ FragLen\ =\ STRLEN(s);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01990}01990\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01991}01991\ \ \ \ \ \textcolor{comment}{//\ How\ we\ output\ depends\ upon\ the\ mode...}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01992}01992\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01993}01993\ \ \ \ \ SEGGER\_RTT\_LOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01994}01994\ \ \ \ \ Avail\ =\ \_GetAvailWriteSpace(pRing);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01995}01995\ \ \ \ \ \textcolor{keywordflow}{switch}\ (pRing-\/>Flags\ \&\ SEGGER\_RTT\_MODE\_MASK)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01996}01996\ \ \ \ \ \textcolor{keywordflow}{case}\ SEGGER\_RTT\_MODE\_NO\_BLOCK\_SKIP:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01997}01997\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01998}01998\ \ \ \ \ \ \ \textcolor{comment}{//\ If\ we\ are\ in\ skip\ mode\ and\ there\ is\ no\ space\ for\ the\ whole}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l01999}01999\ \ \ \ \ \ \ \textcolor{comment}{//\ of\ this\ output,\ don't\ bother\ switching\ terminals\ at\ all.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02000}02000\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02001}02001\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (Avail\ <\ (FragLen\ +\ 4u))\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02002}02002\ \ \ \ \ \ \ \ \ Status\ =\ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02003}02003\ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02004}02004\ \ \ \ \ \ \ \ \ \_PostTerminalSwitch(pRing,\ TerminalId);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02005}02005\ \ \ \ \ \ \ \ \ Status\ =\ (int)\_WriteBlocking(pRing,\ s,\ FragLen);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02006}02006\ \ \ \ \ \ \ \ \ \_PostTerminalSwitch(pRing,\ \_ActiveTerminal);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02007}02007\ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02008}02008\ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02009}02009\ \ \ \ \ \textcolor{keywordflow}{case}\ SEGGER\_RTT\_MODE\_NO\_BLOCK\_TRIM:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02010}02010\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02011}02011\ \ \ \ \ \ \ \textcolor{comment}{//\ If\ we\ are\ in\ trim\ mode\ and\ there\ is\ not\ enough\ space\ for\ everything,}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02012}02012\ \ \ \ \ \ \ \textcolor{comment}{//\ trim\ the\ output\ but\ always\ include\ the\ terminal\ switch.\ \ If\ no\ room}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02013}02013\ \ \ \ \ \ \ \textcolor{comment}{//\ for\ terminal\ switch,\ skip\ that\ totally.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02014}02014\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02015}02015\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (Avail\ <\ 4u)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02016}02016\ \ \ \ \ \ \ \ \ Status\ =\ -\/1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02017}02017\ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02018}02018\ \ \ \ \ \ \ \ \ \_PostTerminalSwitch(pRing,\ TerminalId);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02019}02019\ \ \ \ \ \ \ \ \ Status\ =\ (int)\_WriteBlocking(pRing,\ s,\ (FragLen\ <\ (Avail\ -\/\ 4u))\ ?\ FragLen\ :\ (Avail\ -\/\ 4u));} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02020}02020\ \ \ \ \ \ \ \ \ \_PostTerminalSwitch(pRing,\ \_ActiveTerminal);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02021}02021\ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02022}02022\ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02023}02023\ \ \ \ \ \textcolor{keywordflow}{case}\ SEGGER\_RTT\_MODE\_BLOCK\_IF\_FIFO\_FULL:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02024}02024\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02025}02025\ \ \ \ \ \ \ \textcolor{comment}{//\ If\ we\ are\ in\ blocking\ mode,\ output\ everything.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02026}02026\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02027}02027\ \ \ \ \ \ \ \_PostTerminalSwitch(pRing,\ TerminalId);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02028}02028\ \ \ \ \ \ \ Status\ =\ (int)\_WriteBlocking(pRing,\ s,\ FragLen);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02029}02029\ \ \ \ \ \ \ \_PostTerminalSwitch(pRing,\ \_ActiveTerminal);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02030}02030\ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02031}02031\ \ \ \ \ \textcolor{keywordflow}{default}:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02032}02032\ \ \ \ \ \ \ Status\ =\ -\/1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02033}02033\ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02034}02034\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02035}02035\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02036}02036\ \ \ \ \ \textcolor{comment}{//\ Finish\ up.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02037}02037\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02038}02038\ \ \ \ \ SEGGER\_RTT\_UNLOCK();} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02039}02039\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02040}02040\ \ \ \ \ Status\ =\ -\/1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02041}02041\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02042}02042\ \ \ \textcolor{keywordflow}{return}\ Status;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02043}02043\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02044}02044\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02045}02045\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02046}02046\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02047}02047\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_GetAvailWriteSpace}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02048}02048\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02049}02049\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02050}02050\ \textcolor{comment}{*\ \ \ \ Returns\ the\ number\ of\ bytes\ available\ in\ the\ ring\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02051}02051\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02052}02052\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02053}02053\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ the\ up\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02054}02054\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02055}02055\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02056}02056\ \textcolor{comment}{*\ \ \ \ Number\ of\ bytes\ that\ are\ free\ in\ the\ selected\ up\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02057}02057\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02058}02058\ \textcolor{keywordtype}{unsigned}\ SEGGER\_RTT\_GetAvailWriteSpace\ (\textcolor{keywordtype}{unsigned}\ BufferIndex)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02059}02059\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*\ pRing;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02060}02060\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02061}02061\ \ \ pRing\ =\ (\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}*)((uintptr\_t)\&\_SEGGER\_RTT.aUp[BufferIndex]\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02062}02062\ \ \ \textcolor{keywordflow}{return}\ \_GetAvailWriteSpace(pRing);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02063}02063\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02064}02064\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02065}02065\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02066}02066\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02067}02067\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02068}02068\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_GetBytesInBuffer()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02069}02069\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02070}02070\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02071}02071\ \textcolor{comment}{*\ \ \ \ Returns\ the\ number\ of\ bytes\ currently\ used\ in\ the\ up\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02072}02072\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02073}02073\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02074}02074\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ the\ up\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02075}02075\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02076}02076\ \textcolor{comment}{*\ \ Return\ value}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02077}02077\ \textcolor{comment}{*\ \ \ \ Number\ of\ bytes\ that\ are\ used\ in\ the\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02078}02078\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02079}02079\ \textcolor{keywordtype}{unsigned}\ SEGGER\_RTT\_GetBytesInBuffer(\textcolor{keywordtype}{unsigned}\ BufferIndex)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02080}02080\ \ \ \textcolor{keywordtype}{unsigned}\ RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02081}02081\ \ \ \textcolor{keywordtype}{unsigned}\ WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02082}02082\ \ \ \textcolor{keywordtype}{unsigned}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02083}02083\ \ \ \textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*\ pRTTCB;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02084}02084\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02085}02085\ \ \ \textcolor{comment}{//\ Avoid\ warnings\ regarding\ volatile\ access\ order.\ \ It's\ not\ a\ problem}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02086}02086\ \ \ \textcolor{comment}{//\ in\ this\ case,\ but\ dampen\ compiler\ enthusiasm.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02087}02087\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02088}02088\ \ \ pRTTCB\ =\ (\textcolor{keyword}{volatile}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}*)((uintptr\_t)\&\_SEGGER\_RTT\ +\ SEGGER\_RTT\_UNCACHED\_OFF);\ \ \textcolor{comment}{//\ Access\ RTTCB\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02089}02089\ \ \ RdOff\ =\ pRTTCB-\/>aUp[BufferIndex].RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02090}02090\ \ \ WrOff\ =\ pRTTCB-\/>aUp[BufferIndex].WrOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02091}02091\ \ \ \textcolor{keywordflow}{if}\ (RdOff\ <=\ WrOff)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02092}02092\ \ \ \ \ r\ =\ WrOff\ -\/\ RdOff;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02093}02093\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02094}02094\ \ \ \ \ r\ =\ pRTTCB-\/>aUp[BufferIndex].SizeOfBuffer\ -\/\ (WrOff\ -\/\ RdOff);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02095}02095\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02096}02096\ \ \ \textcolor{keywordflow}{return}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02097}02097\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02098}02098\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8c_source_l02099}02099\ \textcolor{comment}{/***************************\ End\ of\ file\ ****************************/}} + +\end{DoxyCode} diff --git a/Doc/latex/_s_e_g_g_e_r___r_t_t_8h_source.tex b/Doc/latex/_s_e_g_g_e_r___r_t_t_8h_source.tex new file mode 100644 index 0000000..220f07c --- /dev/null +++ b/Doc/latex/_s_e_g_g_e_r___r_t_t_8h_source.tex @@ -0,0 +1,519 @@ +\doxysection{SEGGER\+\_\+\+RTT.\+h} +\hypertarget{_s_e_g_g_e_r___r_t_t_8h_source}{}\label{_s_e_g_g_e_r___r_t_t_8h_source}\index{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/RTT/SEGGER\_RTT.h@{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/RTT/SEGGER\_RTT.h}} + +\begin{DoxyCode}{0} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00001}00001\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00002}00002\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SEGGER\ Microcontroller\ GmbH\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00003}00003\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ The\ Embedded\ Experts\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00004}00004\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00005}00005\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00006}00006\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ (c)\ 1995\ -\/\ 2021\ SEGGER\ Microcontroller\ GmbH\ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00007}00007\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00008}00008\ \textcolor{comment}{*\ \ \ \ \ \ \ www.segger.com\ \ \ \ \ Support:\ support@segger.com\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00009}00009\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00010}00010\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00011}00011\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00012}00012\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\ RTT\ *\ Real\ Time\ Transfer\ for\ embedded\ targets\ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00013}00013\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00014}00014\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00015}00015\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00016}00016\ \textcolor{comment}{*\ All\ rights\ reserved.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00017}00017\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00018}00018\ \textcolor{comment}{*\ SEGGER\ strongly\ recommends\ to\ not\ make\ any\ changes\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00019}00019\ \textcolor{comment}{*\ to\ or\ modify\ the\ source\ code\ of\ this\ software\ in\ order\ to\ stay\ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00020}00020\ \textcolor{comment}{*\ compatible\ with\ the\ RTT\ protocol\ and\ J-\/Link.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00021}00021\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00022}00022\ \textcolor{comment}{*\ Redistribution\ and\ use\ in\ source\ and\ binary\ forms,\ with\ or\ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00023}00023\ \textcolor{comment}{*\ without\ modification,\ are\ permitted\ provided\ that\ the\ following\ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00024}00024\ \textcolor{comment}{*\ condition\ is\ met:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00025}00025\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00026}00026\ \textcolor{comment}{*\ o\ Redistributions\ of\ source\ code\ must\ retain\ the\ above\ copyright\ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00027}00027\ \textcolor{comment}{*\ \ \ notice,\ this\ condition\ and\ the\ following\ disclaimer.\ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00028}00028\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00029}00029\ \textcolor{comment}{*\ THIS\ SOFTWARE\ IS\ PROVIDED\ BY\ THE\ COPYRIGHT\ HOLDERS\ AND\ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00030}00030\ \textcolor{comment}{*\ CONTRIBUTORS\ "{}AS\ IS"{}\ AND\ ANY\ EXPRESS\ OR\ IMPLIED\ WARRANTIES,\ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00031}00031\ \textcolor{comment}{*\ INCLUDING,\ BUT\ NOT\ LIMITED\ TO,\ THE\ IMPLIED\ WARRANTIES\ OF\ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00032}00032\ \textcolor{comment}{*\ MERCHANTABILITY\ AND\ FITNESS\ FOR\ A\ PARTICULAR\ PURPOSE\ ARE\ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00033}00033\ \textcolor{comment}{*\ DISCLAIMED.\ IN\ NO\ EVENT\ SHALL\ SEGGER\ Microcontroller\ BE\ LIABLE\ FOR\ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00034}00034\ \textcolor{comment}{*\ ANY\ DIRECT,\ INDIRECT,\ INCIDENTAL,\ SPECIAL,\ EXEMPLARY,\ OR\ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00035}00035\ \textcolor{comment}{*\ CONSEQUENTIAL\ DAMAGES\ (INCLUDING,\ BUT\ NOT\ LIMITED\ TO,\ PROCUREMENT\ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00036}00036\ \textcolor{comment}{*\ OF\ SUBSTITUTE\ GOODS\ OR\ SERVICES;\ LOSS\ OF\ USE,\ DATA,\ OR\ PROFITS;\ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00037}00037\ \textcolor{comment}{*\ OR\ BUSINESS\ INTERRUPTION)\ HOWEVER\ CAUSED\ AND\ ON\ ANY\ THEORY\ OF\ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00038}00038\ \textcolor{comment}{*\ LIABILITY,\ WHETHER\ IN\ CONTRACT,\ STRICT\ LIABILITY,\ OR\ TORT\ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00039}00039\ \textcolor{comment}{*\ (INCLUDING\ NEGLIGENCE\ OR\ OTHERWISE)\ ARISING\ IN\ ANY\ WAY\ OUT\ OF\ THE\ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00040}00040\ \textcolor{comment}{*\ USE\ OF\ THIS\ SOFTWARE,\ EVEN\ IF\ ADVISED\ OF\ THE\ POSSIBILITY\ OF\ SUCH\ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00041}00041\ \textcolor{comment}{*\ DAMAGE.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00042}00042\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00043}00043\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00044}00044\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00045}00045\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ version:\ 8.10g\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00046}00046\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00047}00047\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00048}00048\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00049}00049\ \textcolor{comment}{-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/END-\/OF-\/HEADER-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00050}00050\ \textcolor{comment}{File\ \ \ \ :\ SEGGER\_RTT.h}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00051}00051\ \textcolor{comment}{Purpose\ :\ Implementation\ of\ SEGGER\ real-\/time\ transfer\ which\ allows}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00052}00052\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ real-\/time\ communication\ on\ targets\ which\ support\ debugger}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00053}00053\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ memory\ accesses\ while\ the\ CPU\ is\ running.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00054}00054\ \textcolor{comment}{Revision:\ \$Rev:\ 25842\ \$}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00055}00055\ \textcolor{comment}{-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00056}00056\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00057}00057\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00058}00058\ \textcolor{preprocessor}{\#ifndef\ SEGGER\_RTT\_H}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00059}00059\ \textcolor{preprocessor}{\#define\ SEGGER\_RTT\_H}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00060}00060\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00061}00061\ \textcolor{preprocessor}{\#include\ "{}SEGGER\_RTT\_Conf.h"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00062}00062\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00063}00063\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00064}00064\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00065}00065\ \textcolor{comment}{*\ \ \ \ \ \ \ Defines,\ defaults}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00066}00066\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00067}00067\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00068}00068\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00069}00069\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00070}00070\ \textcolor{preprocessor}{\#ifndef\ RTT\_USE\_ASM}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00071}00071\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00072}00072\ \ \ \textcolor{comment}{//\ Some\ cores\ support\ out-\/of-\/order\ memory\ accesses\ (reordering\ of\ memory\ accesses\ in\ the\ core)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00073}00073\ \ \ \textcolor{comment}{//\ For\ such\ cores,\ we\ need\ to\ define\ a\ memory\ barrier\ to\ guarantee\ the\ order\ of\ certain\ accesses\ to\ the\ RTT\ ring\ buffers.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00074}00074\ \ \ \textcolor{comment}{//\ Needed\ for:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00075}00075\ \ \ \textcolor{comment}{//\ \ \ Cortex-\/M7\ (ARMv7-\/M)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00076}00076\ \ \ \textcolor{comment}{//\ \ \ Cortex-\/M23\ (ARM-\/v8M)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00077}00077\ \ \ \textcolor{comment}{//\ \ \ Cortex-\/M33\ (ARM-\/v8M)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00078}00078\ \ \ \textcolor{comment}{//\ \ \ Cortex-\/A/R\ (ARM-\/v7A/R)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00079}00079\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00080}00080\ \ \ \textcolor{comment}{//\ We\ do\ not\ explicitly\ check\ for\ "{}Embedded\ Studio"{}\ as\ the\ compiler\ in\ use\ determines\ what\ we\ support.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00081}00081\ \ \ \textcolor{comment}{//\ You\ can\ use\ an\ external\ toolchain\ like\ IAR\ inside\ ES.\ So\ there\ is\ no\ point\ in\ checking\ for\ "{}Embedded\ Studio"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00082}00082\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00083}00083\ \textcolor{preprocessor}{\ \ \#if\ (defined\ \_\_CROSSWORKS\_ARM)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Rowley\ Crossworks}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00084}00084\ \textcolor{preprocessor}{\ \ \ \ \#define\ \_CC\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00085}00085\ \textcolor{preprocessor}{\ \ \ \ \#if\ (defined\ \_\_ARM\_ARCH\_7M\_\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M3}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00086}00086\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00087}00087\ \textcolor{preprocessor}{\ \ \ \ \#elif\ (defined\ \_\_ARM\_ARCH\_7EM\_\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M4/M7}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00088}00088\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00089}00089\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ \ \ \ \ \ \ \ \ \ \ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00090}00090\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ RTT\_\_DMB()\ \_\_asm\ volatile\ ("{}dmb\(\backslash\)n"{}\ :\ :\ :);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00091}00091\ \textcolor{preprocessor}{\ \ \ \ \#elif\ (defined\ \_\_ARM\_ARCH\_8M\_BASE\_\_)\ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M23}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00092}00092\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 0}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00093}00093\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ \ \ \ \ \ \ \ \ \ \ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00094}00094\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ RTT\_\_DMB()\ \_\_asm\ volatile\ ("{}dmb\(\backslash\)n"{}\ :\ :\ :);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00095}00095\ \textcolor{preprocessor}{\ \ \ \ \#elif\ (defined\ \_\_ARM\_ARCH\_8M\_MAIN\_\_)\ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M33}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00096}00096\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00097}00097\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ \ \ \ \ \ \ \ \ \ \ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00098}00098\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ RTT\_\_DMB()\ \_\_asm\ volatile\ ("{}dmb\(\backslash\)n"{}\ :\ :\ :);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00099}00099\ \textcolor{preprocessor}{\ \ \ \ \#elif\ (defined(\_\_ARM\_ARCH\_8\_1M\_MAIN\_\_))\ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M85}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00100}00100\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00101}00101\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ \ \ \ \ \ \ \ \ \ \ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00102}00102\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ RTT\_\_DMB()\ \_\_asm\ volatile\ ("{}dmb\(\backslash\)n"{}\ :\ :\ :);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00103}00103\ \textcolor{preprocessor}{\ \ \ \ \#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00104}00104\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 0}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00105}00105\ \textcolor{preprocessor}{\ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00106}00106\ \textcolor{preprocessor}{\ \ \#elif\ (defined\ \_\_ARMCC\_VERSION)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00107}00107\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00108}00108\ \ \ \ \ \textcolor{comment}{//\ ARM\ compiler}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00109}00109\ \ \ \ \ \textcolor{comment}{//\ ARM\ compiler\ V6.0\ and\ later\ is\ clang\ based.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00110}00110\ \ \ \ \ \textcolor{comment}{//\ Our\ ASM\ part\ is\ compatible\ to\ clang.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00111}00111\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00112}00112\ \textcolor{preprocessor}{\ \ \ \ \#if\ (\_\_ARMCC\_VERSION\ >=\ 6000000)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00113}00113\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CC\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00114}00114\ \textcolor{preprocessor}{\ \ \ \ \#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00115}00115\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CC\_HAS\_RTT\_ASM\_SUPPORT\ 0}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00116}00116\ \textcolor{preprocessor}{\ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00117}00117\ \textcolor{preprocessor}{\ \ \ \ \#if\ (defined\ \_\_ARM\_ARCH\_6M\_\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M0\ /\ M1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00118}00118\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 0\ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ No\ ASM\ support\ for\ this\ architecture}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00119}00119\ \textcolor{preprocessor}{\ \ \ \ \#elif\ (defined\ \_\_ARM\_ARCH\_7M\_\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M3}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00120}00120\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00121}00121\ \textcolor{preprocessor}{\ \ \ \ \#elif\ (defined\ \_\_ARM\_ARCH\_7EM\_\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M4/M7}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00122}00122\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00123}00123\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ \ \ \ \ \ \ \ \ \ \ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00124}00124\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ RTT\_\_DMB()\ \_\_asm\ volatile\ ("{}dmb\(\backslash\)n"{}\ :\ :\ :);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00125}00125\ \textcolor{preprocessor}{\ \ \ \ \#elif\ (defined\ \_\_ARM\_ARCH\_8M\_BASE\_\_)\ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M23}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00126}00126\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 0}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00127}00127\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ \ \ \ \ \ \ \ \ \ \ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00128}00128\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ RTT\_\_DMB()\ \_\_asm\ volatile\ ("{}dmb\(\backslash\)n"{}\ :\ :\ :);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00129}00129\ \textcolor{preprocessor}{\ \ \ \ \#elif\ (defined\ \_\_ARM\_ARCH\_8M\_MAIN\_\_)\ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M33}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00130}00130\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00131}00131\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ \ \ \ \ \ \ \ \ \ \ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00132}00132\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ RTT\_\_DMB()\ \_\_asm\ volatile\ ("{}dmb\(\backslash\)n"{}\ :\ :\ :);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00133}00133\ \textcolor{preprocessor}{\ \ \ \ \#elif\ (defined\ \_\_ARM\_ARCH\_8\_1M\_MAIN\_\_)\ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M85}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00134}00134\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00135}00135\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ \ \ \ \ \ \ \ \ \ \ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00136}00136\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ RTT\_\_DMB()\ \_\_asm\ volatile\ ("{}dmb\(\backslash\)n"{}\ :\ :\ :);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00137}00137\ \textcolor{preprocessor}{\ \ \ \ \#elif\ ((defined\ \_\_ARM\_ARCH\_7A\_\_)\ ||\ (defined\ \_\_ARM\_ARCH\_7R\_\_))\ \ }\textcolor{comment}{//\ Cortex-\/A/R\ 32-\/bit\ ARMv7-\/A/R}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00138}00138\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ \ \ \ \ \ \ \ \ \ \ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00139}00139\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ RTT\_\_DMB()\ \_\_asm\ volatile\ ("{}dmb\(\backslash\)n"{}\ :\ :\ :);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00140}00140\ \textcolor{preprocessor}{\ \ \ \ \#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00141}00141\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 0}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00142}00142\ \textcolor{preprocessor}{\ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00143}00143\ \textcolor{preprocessor}{\ \ \#elif\ ((defined\ \_\_GNUC\_\_)\ ||\ (defined\ \_\_clang\_\_))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00144}00144\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00145}00145\ \ \ \ \ \textcolor{comment}{//\ GCC\ /\ Clang}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00146}00146\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00147}00147\ \textcolor{preprocessor}{\ \ \ \ \#define\ \_CC\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00148}00148\ \ \ \ \ \textcolor{comment}{//\ ARM\ 7/9:\ \_\_ARM\_ARCH\_5\_\_\ /\ \_\_ARM\_ARCH\_5E\_\_\ /\ \_\_ARM\_ARCH\_5T\_\_\ /\ \_\_ARM\_ARCH\_5T\_\_\ /\ \_\_ARM\_ARCH\_5TE\_\_}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00149}00149\ \textcolor{preprocessor}{\ \ \ \ \#if\ (defined\ \_\_ARM\_ARCH\_7M\_\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M3}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00150}00150\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00151}00151\ \textcolor{preprocessor}{\ \ \ \ \#elif\ (defined\ \_\_ARM\_ARCH\_7EM\_\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M4/M7}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00152}00152\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00153}00153\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ \ \ \ \ \ \ \ \ \ \ 1\ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Only\ Cortex-\/M7\ needs\ a\ DMB\ but\ we\ cannot\ distinguish\ M4\ and\ M7\ here...}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00154}00154\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ RTT\_\_DMB()\ \_\_asm\ volatile\ ("{}dmb\(\backslash\)n"{}\ :\ :\ :);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00155}00155\ \textcolor{preprocessor}{\ \ \ \ \#elif\ (defined\ \_\_ARM\_ARCH\_8M\_BASE\_\_)\ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M23}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00156}00156\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 0}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00157}00157\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ \ \ \ \ \ \ \ \ \ \ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00158}00158\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ RTT\_\_DMB()\ \_\_asm\ volatile\ ("{}dmb\(\backslash\)n"{}\ :\ :\ :);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00159}00159\ \textcolor{preprocessor}{\ \ \ \ \#elif\ (defined\ \_\_ARM\_ARCH\_8M\_MAIN\_\_)\ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M33}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00160}00160\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00161}00161\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ \ \ \ \ \ \ \ \ \ \ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00162}00162\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ RTT\_\_DMB()\ \_\_asm\ volatile\ ("{}dmb\(\backslash\)n"{}\ :\ :\ :);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00163}00163\ \textcolor{preprocessor}{\ \ \ \ \#elif\ (defined\ \_\_ARM\_ARCH\_8\_1M\_MAIN\_\_)\ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M85}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00164}00164\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00165}00165\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ \ \ \ \ \ \ \ \ \ \ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00166}00166\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ RTT\_\_DMB()\ \_\_asm\ volatile\ ("{}dmb\(\backslash\)n"{}\ :\ :\ :);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00167}00167\ \textcolor{preprocessor}{\ \ \ \ \#elif\ ((defined\ \_\_ARM\_ARCH\_7A\_\_)\ ||\ (defined\ \_\_ARM\_ARCH\_7R\_\_))\ \ }\textcolor{comment}{//\ Cortex-\/A/R\ 32-\/bit\ ARMv7-\/A/R}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00168}00168\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ \ \ \ \ \ \ \ \ \ \ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00169}00169\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ RTT\_\_DMB()\ \_\_asm\ volatile\ ("{}dmb\(\backslash\)n"{}\ :\ :\ :);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00170}00170\ \textcolor{preprocessor}{\ \ \ \ \#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00171}00171\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 0}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00172}00172\ \textcolor{preprocessor}{\ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00173}00173\ \textcolor{preprocessor}{\ \ \#elif\ ((defined\ \_\_IASMARM\_\_)\ ||\ (defined\ \_\_ICCARM\_\_))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00174}00174\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00175}00175\ \ \ \ \ \textcolor{comment}{//\ IAR\ assembler/compiler}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00176}00176\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00177}00177\ \textcolor{preprocessor}{\ \ \ \ \#define\ \_CC\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00178}00178\ \textcolor{preprocessor}{\ \ \ \ \#if\ (\_\_VER\_\_\ <\ 6300000)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00179}00179\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ VOLATILE}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00180}00180\ \textcolor{preprocessor}{\ \ \ \ \#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00181}00181\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ VOLATILE\ volatile}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00182}00182\ \textcolor{preprocessor}{\ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00183}00183\ \textcolor{preprocessor}{\ \ \ \ \#if\ (defined\ \_\_ARM7M\_\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Needed\ for\ old\ versions\ that\ do\ not\ know\ the\ define\ yet}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00184}00184\ \textcolor{preprocessor}{\ \ \ \ \ \ \#if\ (\_\_CORE\_\_\ ==\ \_\_ARM7M\_\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M3}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00185}00185\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00186}00186\ \textcolor{preprocessor}{\ \ \ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00187}00187\ \textcolor{preprocessor}{\ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00188}00188\ \textcolor{preprocessor}{\ \ \ \ \#if\ (defined\ \_\_ARM7EM\_\_)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00189}00189\ \textcolor{preprocessor}{\ \ \ \ \ \ \#if\ (\_\_CORE\_\_\ ==\ \_\_ARM7EM\_\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M4/M7}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00190}00190\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00191}00191\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00192}00192\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \#define\ RTT\_\_DMB()\ asm\ VOLATILE\ ("{}DMB"{});}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00193}00193\ \textcolor{preprocessor}{\ \ \ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00194}00194\ \textcolor{preprocessor}{\ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00195}00195\ \textcolor{preprocessor}{\ \ \ \ \#if\ (defined\ \_\_ARM8M\_BASELINE\_\_)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00196}00196\ \textcolor{preprocessor}{\ \ \ \ \ \ \#if\ (\_\_CORE\_\_\ ==\ \_\_ARM8M\_BASELINE\_\_)\ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M23}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00197}00197\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 0}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00198}00198\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00199}00199\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \#define\ RTT\_\_DMB()\ asm\ VOLATILE\ ("{}DMB"{});}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00200}00200\ \textcolor{preprocessor}{\ \ \ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00201}00201\ \textcolor{preprocessor}{\ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00202}00202\ \textcolor{preprocessor}{\ \ \ \ \#if\ (defined\ \_\_ARM8M\_MAINLINE\_\_)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00203}00203\ \textcolor{preprocessor}{\ \ \ \ \ \ \#if\ (\_\_CORE\_\_\ ==\ \_\_ARM8M\_MAINLINE\_\_)\ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/M33}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00204}00204\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00205}00205\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00206}00206\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \#define\ RTT\_\_DMB()\ asm\ VOLATILE\ ("{}DMB"{});}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00207}00207\ \textcolor{preprocessor}{\ \ \ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00208}00208\ \textcolor{preprocessor}{\ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00209}00209\ \textcolor{preprocessor}{\ \ \ \ \#if\ (defined\ \_\_ARM8EM\_MAINLINE\_\_)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00210}00210\ \textcolor{preprocessor}{\ \ \ \ \ \ \#if\ (\_\_CORE\_\_\ ==\ \_\_ARM8EM\_MAINLINE\_\_)\ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/???}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00211}00211\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00212}00212\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00213}00213\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \#define\ RTT\_\_DMB()\ asm\ VOLATILE\ ("{}DMB"{});}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00214}00214\ \textcolor{preprocessor}{\ \ \ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00215}00215\ \textcolor{preprocessor}{\ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00216}00216\ \textcolor{preprocessor}{\ \ \ \ \#if\ (defined\ \_\_ARM7A\_\_)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00217}00217\ \textcolor{preprocessor}{\ \ \ \ \ \ \#if\ (\_\_CORE\_\_\ ==\ \_\_ARM7A\_\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/A\ 32-\/bit\ ARMv7-\/A}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00218}00218\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00219}00219\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \#define\ RTT\_\_DMB()\ asm\ VOLATILE\ ("{}DMB"{});}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00220}00220\ \textcolor{preprocessor}{\ \ \ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00221}00221\ \textcolor{preprocessor}{\ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00222}00222\ \textcolor{preprocessor}{\ \ \ \ \#if\ (defined\ \_\_ARM7R\_\_)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00223}00223\ \textcolor{preprocessor}{\ \ \ \ \ \ \#if\ (\_\_CORE\_\_\ ==\ \_\_ARM7R\_\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Cortex-\/R\ 32-\/bit\ ARMv7-\/R}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00224}00224\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \#define\ \_CORE\_NEEDS\_DMB\ 1}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00225}00225\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \#define\ RTT\_\_DMB()\ asm\ VOLATILE\ ("{}DMB"{});}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00226}00226\ \textcolor{preprocessor}{\ \ \ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00227}00227\ \textcolor{preprocessor}{\ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00228}00228\ \textcolor{comment}{//\ TBD:\ \_\_ARM8A\_\_\ =>\ Cortex-\/A\ 64-\/bit\ ARMv8-\/A}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00229}00229\ \textcolor{comment}{//\ TBD:\ \_\_ARM8R\_\_\ =>\ Cortex-\/R\ 64-\/bit\ ARMv8-\/R}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00230}00230\ \textcolor{preprocessor}{\ \ \#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00231}00231\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00232}00232\ \ \ \ \ \textcolor{comment}{//\ Other\ compilers}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00233}00233\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00234}00234\ \textcolor{preprocessor}{\ \ \ \ \#define\ \_CC\_HAS\_RTT\_ASM\_SUPPORT\ \ \ 0}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00235}00235\ \textcolor{preprocessor}{\ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 0}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00236}00236\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00237}00237\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00238}00238\ \ \ \textcolor{comment}{//\ If\ IDE\ and\ core\ support\ the\ ASM\ version,\ enable\ ASM\ version\ by\ default}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00239}00239\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00240}00240\ \textcolor{preprocessor}{\ \ \#ifndef\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00241}00241\ \textcolor{preprocessor}{\ \ \ \ \#define\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT\ 0\ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Default\ for\ unknown\ cores}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00242}00242\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00243}00243\ \textcolor{preprocessor}{\ \ \#if\ (\_CC\_HAS\_RTT\_ASM\_SUPPORT\ \&\&\ \_CORE\_HAS\_RTT\_ASM\_SUPPORT)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00244}00244\ \textcolor{preprocessor}{\ \ \ \ \#define\ RTT\_USE\_ASM\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (1)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00245}00245\ \textcolor{preprocessor}{\ \ \#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00246}00246\ \textcolor{preprocessor}{\ \ \ \ \#define\ RTT\_USE\_ASM\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (0)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00247}00247\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00248}00248\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00249}00249\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00250}00250\ \textcolor{preprocessor}{\#ifndef\ \_CORE\_NEEDS\_DMB}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00251}00251\ \textcolor{preprocessor}{\ \ \#define\ \_CORE\_NEEDS\_DMB\ 0}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00252}00252\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00253}00253\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00254}00254\ \textcolor{preprocessor}{\#ifndef\ RTT\_\_DMB}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00255}00255\ \textcolor{preprocessor}{\ \ \#if\ \_CORE\_NEEDS\_DMB}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00256}00256\ \textcolor{preprocessor}{\ \ \ \ \#error\ "{}Don't\ know\ how\ to\ place\ inline\ assembly\ for\ DMB"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00257}00257\ \textcolor{preprocessor}{\ \ \#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00258}00258\ \textcolor{preprocessor}{\ \ \ \ \#define\ RTT\_\_DMB()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00259}00259\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00260}00260\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00261}00261\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00262}00262\ \textcolor{preprocessor}{\#ifndef\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00263}00263\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE\ (0)\ \ \ }\textcolor{comment}{//\ On\ most\ target\ systems\ where\ RTT\ is\ used,\ we\ do\ not\ have\ a\ CPU\ cache,\ therefore\ 0\ is\ a\ good\ default\ here}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00264}00264\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00265}00265\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00266}00266\ \textcolor{preprocessor}{\#ifndef\ SEGGER\_RTT\_UNCACHED\_OFF}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00267}00267\ \textcolor{preprocessor}{\ \ \#if\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00268}00268\ \textcolor{preprocessor}{\ \ \ \ \#error\ "{}SEGGER\_RTT\_UNCACHED\_OFF\ must\ be\ defined\ when\ setting\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE\ !=\ 0"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00269}00269\ \textcolor{preprocessor}{\ \ \#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00270}00270\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_UNCACHED\_OFF\ (0)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00271}00271\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00272}00272\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00273}00273\ \textcolor{preprocessor}{\#if\ RTT\_USE\_ASM}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00274}00274\ \textcolor{preprocessor}{\ \ \#if\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00275}00275\ \textcolor{preprocessor}{\ \ \ \ \#error\ "{}RTT\_USE\_ASM\ is\ not\ available\ if\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE\ !=\ 0"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00276}00276\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00277}00277\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00278}00278\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00279}00279\ \textcolor{preprocessor}{\#ifndef\ SEGGER\_RTT\_ASM\ \ }\textcolor{comment}{//\ defined\ when\ SEGGER\_RTT.h\ is\ included\ from\ assembly\ file}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00280}00280\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00281}00281\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00282}00282\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00283}00283\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00284}00284\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00285}00285\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00286}00286\ \textcolor{comment}{*\ \ \ \ \ \ \ Defines,\ fixed}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00287}00287\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00288}00288\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00289}00289\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00290}00290\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00291}00291\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00292}00292\ \textcolor{comment}{//\ Determine\ how\ much\ we\ must\ pad\ the\ control\ block\ to\ make\ it\ a\ multiple\ of\ a\ cache\ line\ in\ size}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00293}00293\ \textcolor{comment}{//\ Assuming:\ U8\ =\ 1B}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00294}00294\ \textcolor{comment}{//\ \ \ \ \ \ \ \ \ \ \ U16\ =\ 2B}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00295}00295\ \textcolor{comment}{//\ \ \ \ \ \ \ \ \ \ \ U32\ =\ 4B}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00296}00296\ \textcolor{comment}{//\ \ \ \ \ \ \ \ \ \ \ U8/U16/U32*\ =\ 4B}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00297}00297\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00298}00298\ \textcolor{preprocessor}{\#if\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE\ \ \ \ }\textcolor{comment}{//\ Avoid\ division\ by\ zero\ in\ case\ we\ do\ not\ have\ any\ cache}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00299}00299\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_\_ROUND\_UP\_2\_CACHE\_LINE\_SIZE(NumBytes)\ (((NumBytes\ +\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE\ -\/\ 1)\ /\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE)\ *\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00300}00300\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00301}00301\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_\_ROUND\_UP\_2\_CACHE\_LINE\_SIZE(NumBytes)\ (NumBytes)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00302}00302\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00303}00303\ \textcolor{preprocessor}{\#define\ SEGGER\_RTT\_\_CB\_SIZE\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (16\ +\ 4\ +\ 4\ +\ (SEGGER\_RTT\_MAX\_NUM\_UP\_BUFFERS\ *\ 24)\ +\ (SEGGER\_RTT\_MAX\_NUM\_DOWN\_BUFFERS\ *\ 24))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00304}00304\ \textcolor{preprocessor}{\#define\ SEGGER\_RTT\_\_CB\_PADDING\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (SEGGER\_RTT\_\_ROUND\_UP\_2\_CACHE\_LINE\_SIZE(SEGGER\_RTT\_\_CB\_SIZE)\ -\/\ SEGGER\_RTT\_\_CB\_SIZE)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00305}00305\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00306}00306\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00307}00307\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00308}00308\ \textcolor{comment}{*\ \ \ \ \ \ \ Types}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00309}00309\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00310}00310\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00311}00311\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00312}00312\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00313}00313\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00314}00314\ \textcolor{comment}{//\ Description\ for\ a\ circular\ buffer\ (also\ called\ "{}ring\ buffer"{})}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00315}00315\ \textcolor{comment}{//\ which\ is\ used\ as\ up-\/buffer\ (T-\/>H)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00316}00316\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00317}\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{00317}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00318}00318\ \ \ \textcolor{keyword}{const}\ \ \ \ \ \textcolor{keywordtype}{char}*\ \ \ \ sName;\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Optional\ name.\ Standard\ names\ so\ far\ are:\ "{}Terminal"{},\ "{}SysView"{},\ "{}J-\/Scope\_t4i4"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00319}00319\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{char}*\ \ \ \ pBuffer;\ \ \ \ \ \ \ \textcolor{comment}{//\ Pointer\ to\ start\ of\ buffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00320}00320\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{unsigned}\ SizeOfBuffer;\ \ \textcolor{comment}{//\ Buffer\ size\ in\ bytes.\ Note\ that\ one\ byte\ is\ lost,\ as\ this\ implementation\ does\ not\ fill\ up\ the\ buffer\ in\ order\ to\ avoid\ the\ problem\ of\ being\ unable\ to\ distinguish\ between\ full\ and\ empty.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00321}00321\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{unsigned}\ WrOff;\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Position\ of\ next\ item\ to\ be\ written\ by\ either\ target.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00322}00322\ \ \ \textcolor{keyword}{volatile}\ \ \textcolor{keywordtype}{unsigned}\ RdOff;\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Position\ of\ next\ item\ to\ be\ read\ by\ host.\ Must\ be\ volatile\ since\ it\ may\ be\ modified\ by\ host.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00323}00323\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{unsigned}\ Flags;\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Contains\ configuration\ flags.\ Flags[31:24]\ are\ used\ for\ validity\ check\ and\ must\ be\ zero.\ Flags[23:2]\ are\ reserved\ for\ future\ use.\ Flags[1:0]\ =\ RTT\ operating\ mode.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00324}00324\ \}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00325}00325\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00326}00326\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00327}00327\ \textcolor{comment}{//\ Description\ for\ a\ circular\ buffer\ (also\ called\ "{}ring\ buffer"{})}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00328}00328\ \textcolor{comment}{//\ which\ is\ used\ as\ down-\/buffer\ (H-\/>T)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00329}00329\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00330}\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n}{00330}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00331}00331\ \ \ \textcolor{keyword}{const}\ \ \ \ \ \textcolor{keywordtype}{char}*\ \ \ \ sName;\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Optional\ name.\ Standard\ names\ so\ far\ are:\ "{}Terminal"{},\ "{}SysView"{},\ "{}J-\/Scope\_t4i4"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00332}00332\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{char}*\ \ \ \ pBuffer;\ \ \ \ \ \ \ \textcolor{comment}{//\ Pointer\ to\ start\ of\ buffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00333}00333\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{unsigned}\ SizeOfBuffer;\ \ \textcolor{comment}{//\ Buffer\ size\ in\ bytes.\ Note\ that\ one\ byte\ is\ lost,\ as\ this\ implementation\ does\ not\ fill\ up\ the\ buffer\ in\ order\ to\ avoid\ the\ problem\ of\ being\ unable\ to\ distinguish\ between\ full\ and\ empty.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00334}00334\ \ \ \textcolor{keyword}{volatile}\ \ \textcolor{keywordtype}{unsigned}\ WrOff;\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Position\ of\ next\ item\ to\ be\ written\ by\ host.\ Must\ be\ volatile\ since\ it\ may\ be\ modified\ by\ host.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00335}00335\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{unsigned}\ RdOff;\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Position\ of\ next\ item\ to\ be\ read\ by\ target\ (down-\/buffer).}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00336}00336\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{unsigned}\ Flags;\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Contains\ configuration\ flags.\ Flags[31:24]\ are\ used\ for\ validity\ check\ and\ must\ be\ zero.\ Flags[23:2]\ are\ reserved\ for\ future\ use.\ Flags[1:0]\ =\ RTT\ operating\ mode.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00337}00337\ \}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n}{SEGGER\_RTT\_BUFFER\_DOWN}};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00338}00338\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00339}00339\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00340}00340\ \textcolor{comment}{//\ RTT\ control\ block\ which\ describes\ the\ number\ of\ buffers\ available}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00341}00341\ \textcolor{comment}{//\ as\ well\ as\ the\ configuration\ for\ each\ buffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00342}00342\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00343}00343\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00344}\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{00344}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00345}00345\ \ \ \textcolor{keywordtype}{char}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ acID[16];\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Initialized\ to\ "{}SEGGER\ RTT"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00346}00346\ \ \ \textcolor{keywordtype}{int}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ MaxNumUpBuffers;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Initialized\ to\ SEGGER\_RTT\_MAX\_NUM\_UP\_BUFFERS\ (type.\ 2)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00347}00347\ \ \ \textcolor{keywordtype}{int}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ MaxNumDownBuffers;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Initialized\ to\ SEGGER\_RTT\_MAX\_NUM\_DOWN\_BUFFERS\ (type.\ 2)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00348}00348\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\_RTT\_BUFFER\_UP}}\ \ \ \ aUp[SEGGER\_RTT\_MAX\_NUM\_UP\_BUFFERS];\ \ \ \ \ \ \ \textcolor{comment}{//\ Up\ buffers,\ transferring\ information\ up\ from\ target\ via\ debug\ probe\ to\ host}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00349}00349\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n}{SEGGER\_RTT\_BUFFER\_DOWN}}\ \ aDown[SEGGER\_RTT\_MAX\_NUM\_DOWN\_BUFFERS];\ \ \ \textcolor{comment}{//\ Down\ buffers,\ transferring\ information\ down\ from\ host\ via\ debug\ probe\ to\ target}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00350}00350\ \textcolor{preprocessor}{\#if\ SEGGER\_RTT\_\_CB\_PADDING}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00351}00351\ \ \ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char}\ \ \ \ \ \ \ \ \ \ \ aDummy[SEGGER\_RTT\_\_CB\_PADDING];} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00352}00352\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00353}00353\ \}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00354}00354\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00355}00355\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00356}00356\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00357}00357\ \textcolor{comment}{*\ \ \ \ \ \ \ Global\ data}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00358}00358\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00359}00359\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00360}00360\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00361}00361\ \textcolor{keyword}{extern}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\_RTT\_CB}}\ \_SEGGER\_RTT;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00362}00362\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00363}00363\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00364}00364\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00365}00365\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ API\ functions}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00366}00366\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00367}00367\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00368}00368\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00369}00369\ \textcolor{preprocessor}{\#ifdef\ \_\_cplusplus}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00370}00370\ \ \ \textcolor{keyword}{extern}\ \textcolor{stringliteral}{"{}C"{}}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00371}00371\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00372}00372\ \textcolor{keywordtype}{int}\ \ \ \ \ \ \ \ \ \ SEGGER\_RTT\_AllocDownBuffer\ \ \ \ \ \ \ \ \ (\textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ sName,\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ BufferSize,\ \textcolor{keywordtype}{unsigned}\ Flags);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00373}00373\ \textcolor{keywordtype}{int}\ \ \ \ \ \ \ \ \ \ SEGGER\_RTT\_AllocUpBuffer\ \ \ \ \ \ \ \ \ \ \ (\textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ sName,\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ BufferSize,\ \textcolor{keywordtype}{unsigned}\ Flags);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00374}00374\ \textcolor{keywordtype}{int}\ \ \ \ \ \ \ \ \ \ SEGGER\_RTT\_ConfigUpBuffer\ \ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ sName,\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ BufferSize,\ \textcolor{keywordtype}{unsigned}\ Flags);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00375}00375\ \textcolor{keywordtype}{int}\ \ \ \ \ \ \ \ \ \ SEGGER\_RTT\_ConfigDownBuffer\ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ sName,\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ BufferSize,\ \textcolor{keywordtype}{unsigned}\ Flags);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00376}00376\ \textcolor{keywordtype}{int}\ \ \ \ \ \ \ \ \ \ SEGGER\_RTT\_GetKey\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{void});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00377}00377\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_HasData\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00378}00378\ \textcolor{keywordtype}{int}\ \ \ \ \ \ \ \ \ \ SEGGER\_RTT\_HasKey\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{void});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00379}00379\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_HasDataUp\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00380}00380\ \textcolor{keywordtype}{void}\ \ \ \ \ \ \ \ \ SEGGER\_RTT\_Init\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{void});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00381}00381\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_Read\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \ \ \ \ \ \ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ BufferSize);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00382}00382\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_ReadNoLock\ \ \ \ \ \ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \ \ \ \ \ \ \textcolor{keywordtype}{void}*\ pData,\ \ \ \textcolor{keywordtype}{unsigned}\ BufferSize);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00383}00383\ \textcolor{keywordtype}{int}\ \ \ \ \ \ \ \ \ \ SEGGER\_RTT\_SetNameDownBuffer\ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ sName);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00384}00384\ \textcolor{keywordtype}{int}\ \ \ \ \ \ \ \ \ \ SEGGER\_RTT\_SetNameUpBuffer\ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ sName);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00385}00385\ \textcolor{keywordtype}{int}\ \ \ \ \ \ \ \ \ \ SEGGER\_RTT\_SetFlagsDownBuffer\ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keywordtype}{unsigned}\ Flags);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00386}00386\ \textcolor{keywordtype}{int}\ \ \ \ \ \ \ \ \ \ SEGGER\_RTT\_SetFlagsUpBuffer\ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keywordtype}{unsigned}\ Flags);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00387}00387\ \textcolor{keywordtype}{int}\ \ \ \ \ \ \ \ \ \ SEGGER\_RTT\_WaitKey\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{void});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00388}00388\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_Write\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00389}00389\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_WriteNoLock\ \ \ \ \ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00390}00390\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_WriteSkipNoLock\ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00391}00391\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_ASM\_WriteSkipNoLock\ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00392}00392\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_WriteString\ \ \ \ \ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ s);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00393}00393\ \textcolor{keywordtype}{void}\ \ \ \ \ \ \ \ \ SEGGER\_RTT\_WriteWithOverwriteNoLock(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00394}00394\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_PutChar\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keywordtype}{char}\ c);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00395}00395\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_PutCharSkip\ \ \ \ \ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keywordtype}{char}\ c);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00396}00396\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_PutCharSkipNoLock\ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keywordtype}{char}\ c);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00397}00397\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_GetAvailWriteSpace\ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00398}00398\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_GetBytesInBuffer\ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00399}00399\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00400}00400\ \textcolor{comment}{//\ Function\ macro\ for\ performance\ optimization}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00401}00401\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00402}00402\ \textcolor{preprocessor}{\#define\ \ \ \ \ \ SEGGER\_RTT\_HASDATA(n)\ \ \ \ \ \ \ (((SEGGER\_RTT\_BUFFER\_DOWN*)((uintptr\_t)\&\_SEGGER\_RTT.aDown[n]\ +\ SEGGER\_RTT\_UNCACHED\_OFF))-\/>WrOff\ -\/\ ((SEGGER\_RTT\_BUFFER\_DOWN*)((uintptr\_t)\&\_SEGGER\_RTT.aDown[n]\ +\ SEGGER\_RTT\_UNCACHED\_OFF))-\/>RdOff)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00403}00403\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00404}00404\ \textcolor{preprocessor}{\#if\ RTT\_USE\_ASM}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00405}00405\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_WriteSkipNoLock\ \ SEGGER\_RTT\_ASM\_WriteSkipNoLock}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00406}00406\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00407}00407\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00408}00408\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00409}00409\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00410}00410\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ transfer\ functions\ to\ send\ RTT\ data\ via\ other\ channels.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00411}00411\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00412}00412\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00413}00413\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00414}00414\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_ReadUpBuffer\ \ \ \ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ BufferSize);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00415}00415\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_ReadUpBufferNoLock\ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keywordtype}{void}*\ pData,\ \textcolor{keywordtype}{unsigned}\ BufferSize);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00416}00416\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_WriteDownBuffer\ \ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00417}00417\ \textcolor{keywordtype}{unsigned}\ \ \ \ \ SEGGER\_RTT\_WriteDownBufferNoLock\ \ \ (\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}*\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00418}00418\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00419}00419\ \textcolor{preprocessor}{\#define\ \ \ \ \ \ SEGGER\_RTT\_HASDATA\_UP(n)\ \ \ \ (((SEGGER\_RTT\_BUFFER\_UP*)((uintptr\_t)\&\_SEGGER\_RTT.aUp[n]\ +\ SEGGER\_RTT\_UNCACHED\_OFF))-\/>WrOff\ -\/\ ((SEGGER\_RTT\_BUFFER\_UP*)((uintptr\_t)\&\_SEGGER\_RTT.aUp[n]\ +\ SEGGER\_RTT\_UNCACHED\_OFF))-\/>RdOff)\ \ \ }\textcolor{comment}{//\ Access\ uncached\ to\ make\ sure\ we\ see\ changes\ made\ by\ the\ J-\/Link\ side\ and\ all\ of\ our\ changes\ go\ into\ HW\ directly}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00420}00420\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00421}00421\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00422}00422\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00423}00423\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ "{}Terminal"{}\ API\ functions}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00424}00424\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00425}00425\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00426}00426\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00427}00427\ \textcolor{keywordtype}{int}\ \ \ \ \ SEGGER\_RTT\_SetTerminal\ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char}\ TerminalId);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00428}00428\ \textcolor{keywordtype}{int}\ \ \ \ \ SEGGER\_RTT\_TerminalOut\ \ \ \ \ \ \ \ (\textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char}\ TerminalId,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ s);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00429}00429\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00430}00430\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00431}00431\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00432}00432\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ printf\ functions\ (require\ SEGGER\_RTT\_printf.c)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00433}00433\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00434}00434\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00435}00435\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00436}00436\ \textcolor{keywordtype}{int}\ SEGGER\_RTT\_printf(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ *\ sFormat,\ ...);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00437}00437\ \textcolor{keywordtype}{int}\ SEGGER\_RTT\_vprintf(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ *\ sFormat,\ va\_list\ *\ pParamList);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00438}00438\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00439}00439\ \textcolor{preprocessor}{\#ifdef\ \_\_cplusplus}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00440}00440\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00441}00441\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00442}00442\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00443}00443\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ ifndef(SEGGER\_RTT\_ASM)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00444}00444\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00445}00445\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00446}00446\ \textcolor{comment}{//\ For\ some\ environments,\ NULL\ may\ not\ be\ defined\ until\ certain\ headers\ are\ included}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00447}00447\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00448}00448\ \textcolor{preprocessor}{\#ifndef\ NULL}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00449}00449\ \textcolor{preprocessor}{\ \ \#define\ NULL\ \ ((void*)0)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00450}00450\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00451}00451\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00452}00452\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00453}00453\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00454}00454\ \textcolor{comment}{*\ \ \ \ \ \ \ Defines}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00455}00455\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00456}00456\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00457}00457\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00458}00458\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00459}00459\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00460}00460\ \textcolor{comment}{//\ Operating\ modes.\ Define\ behavior\ if\ buffer\ is\ full\ (not\ enough\ space\ for\ entire\ message)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00461}00461\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00462}00462\ \textcolor{preprocessor}{\#define\ SEGGER\_RTT\_MODE\_NO\_BLOCK\_SKIP\ \ \ \ \ \ \ \ \ (0)\ \ \ \ \ }\textcolor{comment}{//\ Skip.\ Do\ not\ block,\ output\ nothing.\ (Default)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00463}00463\ \textcolor{preprocessor}{\#define\ SEGGER\_RTT\_MODE\_NO\_BLOCK\_TRIM\ \ \ \ \ \ \ \ \ (1)\ \ \ \ \ }\textcolor{comment}{//\ Trim:\ Do\ not\ block,\ output\ as\ much\ as\ fits.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00464}00464\ \textcolor{preprocessor}{\#define\ SEGGER\_RTT\_MODE\_BLOCK\_IF\_FIFO\_FULL\ \ \ \ (2)\ \ \ \ \ }\textcolor{comment}{//\ Block:\ Wait\ until\ there\ is\ space\ in\ the\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00465}00465\ \textcolor{preprocessor}{\#define\ SEGGER\_RTT\_MODE\_MASK\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (3)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00466}00466\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00467}00467\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00468}00468\ \textcolor{comment}{//\ Control\ sequences,\ based\ on\ ANSI.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00469}00469\ \textcolor{comment}{//\ Can\ be\ used\ to\ control\ color,\ and\ clear\ the\ screen}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00470}00470\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00471}00471\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_RESET\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[0m"{}\ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Reset\ to\ default\ colors}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00472}00472\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_CLEAR\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[2J"{}\ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Clear\ screen,\ reposition\ cursor\ to\ top\ left}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00473}00473\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00474}00474\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_TEXT\_BLACK\ \ \ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[2;30m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00475}00475\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_TEXT\_RED\ \ \ \ \ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[2;31m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00476}00476\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_TEXT\_GREEN\ \ \ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[2;32m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00477}00477\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_TEXT\_YELLOW\ \ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[2;33m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00478}00478\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_TEXT\_BLUE\ \ \ \ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[2;34m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00479}00479\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_TEXT\_MAGENTA\ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[2;35m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00480}00480\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_TEXT\_CYAN\ \ \ \ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[2;36m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00481}00481\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_TEXT\_WHITE\ \ \ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[2;37m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00482}00482\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00483}00483\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_TEXT\_BRIGHT\_BLACK\ \ \ \ "{}\(\backslash\)x1B[1;30m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00484}00484\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_TEXT\_BRIGHT\_RED\ \ \ \ \ \ "{}\(\backslash\)x1B[1;31m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00485}00485\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_TEXT\_BRIGHT\_GREEN\ \ \ \ "{}\(\backslash\)x1B[1;32m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00486}00486\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_TEXT\_BRIGHT\_YELLOW\ \ \ "{}\(\backslash\)x1B[1;33m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00487}00487\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_TEXT\_BRIGHT\_BLUE\ \ \ \ \ "{}\(\backslash\)x1B[1;34m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00488}00488\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_TEXT\_BRIGHT\_MAGENTA\ \ "{}\(\backslash\)x1B[1;35m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00489}00489\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_TEXT\_BRIGHT\_CYAN\ \ \ \ \ "{}\(\backslash\)x1B[1;36m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00490}00490\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_TEXT\_BRIGHT\_WHITE\ \ \ \ "{}\(\backslash\)x1B[1;37m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00491}00491\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00492}00492\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_BG\_BLACK\ \ \ \ \ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[24;40m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00493}00493\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_BG\_RED\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[24;41m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00494}00494\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_BG\_GREEN\ \ \ \ \ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[24;42m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00495}00495\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_BG\_YELLOW\ \ \ \ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[24;43m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00496}00496\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_BG\_BLUE\ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[24;44m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00497}00497\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_BG\_MAGENTA\ \ \ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[24;45m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00498}00498\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_BG\_CYAN\ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[24;46m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00499}00499\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_BG\_WHITE\ \ \ \ \ \ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[24;47m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00500}00500\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00501}00501\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_BG\_BRIGHT\_BLACK\ \ \ \ \ \ "{}\(\backslash\)x1B[4;40m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00502}00502\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_BG\_BRIGHT\_RED\ \ \ \ \ \ \ \ "{}\(\backslash\)x1B[4;41m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00503}00503\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_BG\_BRIGHT\_GREEN\ \ \ \ \ \ "{}\(\backslash\)x1B[4;42m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00504}00504\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_BG\_BRIGHT\_YELLOW\ \ \ \ \ "{}\(\backslash\)x1B[4;43m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00505}00505\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_BG\_BRIGHT\_BLUE\ \ \ \ \ \ \ "{}\(\backslash\)x1B[4;44m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00506}00506\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_BG\_BRIGHT\_MAGENTA\ \ \ \ "{}\(\backslash\)x1B[4;45m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00507}00507\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_BG\_BRIGHT\_CYAN\ \ \ \ \ \ \ "{}\(\backslash\)x1B[4;46m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00508}00508\ \textcolor{preprocessor}{\#define\ RTT\_CTRL\_BG\_BRIGHT\_WHITE\ \ \ \ \ \ "{}\(\backslash\)x1B[4;47m"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00509}00509\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00510}00510\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00511}00511\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00512}00512\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t_8h_source_l00513}00513\ \textcolor{comment}{/***************************\ End\ of\ file\ ****************************/}} + +\end{DoxyCode} diff --git a/Doc/latex/_s_e_g_g_e_r___r_t_t___conf_8h_source.tex b/Doc/latex/_s_e_g_g_e_r___r_t_t___conf_8h_source.tex new file mode 100644 index 0000000..e85fd0a --- /dev/null +++ b/Doc/latex/_s_e_g_g_e_r___r_t_t___conf_8h_source.tex @@ -0,0 +1,435 @@ +\doxysection{SEGGER\+\_\+\+RTT\+\_\+\+Conf.\+h} +\hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source}{}\label{_s_e_g_g_e_r___r_t_t___conf_8h_source}\index{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/RTT/SEGGER\_RTT\_Conf.h@{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/RTT/SEGGER\_RTT\_Conf.h}} + +\begin{DoxyCode}{0} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00001}00001\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00002}00002\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SEGGER\ Microcontroller\ GmbH\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00003}00003\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ The\ Embedded\ Experts\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00004}00004\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00005}00005\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00006}00006\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ (c)\ 1995\ -\/\ 2021\ SEGGER\ Microcontroller\ GmbH\ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00007}00007\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00008}00008\ \textcolor{comment}{*\ \ \ \ \ \ \ www.segger.com\ \ \ \ \ Support:\ support@segger.com\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00009}00009\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00010}00010\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00011}00011\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00012}00012\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\ RTT\ *\ Real\ Time\ Transfer\ for\ embedded\ targets\ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00013}00013\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00014}00014\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00015}00015\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00016}00016\ \textcolor{comment}{*\ All\ rights\ reserved.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00017}00017\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00018}00018\ \textcolor{comment}{*\ SEGGER\ strongly\ recommends\ to\ not\ make\ any\ changes\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00019}00019\ \textcolor{comment}{*\ to\ or\ modify\ the\ source\ code\ of\ this\ software\ in\ order\ to\ stay\ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00020}00020\ \textcolor{comment}{*\ compatible\ with\ the\ RTT\ protocol\ and\ J-\/Link.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00021}00021\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00022}00022\ \textcolor{comment}{*\ Redistribution\ and\ use\ in\ source\ and\ binary\ forms,\ with\ or\ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00023}00023\ \textcolor{comment}{*\ without\ modification,\ are\ permitted\ provided\ that\ the\ following\ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00024}00024\ \textcolor{comment}{*\ condition\ is\ met:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00025}00025\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00026}00026\ \textcolor{comment}{*\ o\ Redistributions\ of\ source\ code\ must\ retain\ the\ above\ copyright\ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00027}00027\ \textcolor{comment}{*\ \ \ notice,\ this\ condition\ and\ the\ following\ disclaimer.\ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00028}00028\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00029}00029\ \textcolor{comment}{*\ THIS\ SOFTWARE\ IS\ PROVIDED\ BY\ THE\ COPYRIGHT\ HOLDERS\ AND\ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00030}00030\ \textcolor{comment}{*\ CONTRIBUTORS\ "{}AS\ IS"{}\ AND\ ANY\ EXPRESS\ OR\ IMPLIED\ WARRANTIES,\ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00031}00031\ \textcolor{comment}{*\ INCLUDING,\ BUT\ NOT\ LIMITED\ TO,\ THE\ IMPLIED\ WARRANTIES\ OF\ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00032}00032\ \textcolor{comment}{*\ MERCHANTABILITY\ AND\ FITNESS\ FOR\ A\ PARTICULAR\ PURPOSE\ ARE\ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00033}00033\ \textcolor{comment}{*\ DISCLAIMED.\ IN\ NO\ EVENT\ SHALL\ SEGGER\ Microcontroller\ BE\ LIABLE\ FOR\ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00034}00034\ \textcolor{comment}{*\ ANY\ DIRECT,\ INDIRECT,\ INCIDENTAL,\ SPECIAL,\ EXEMPLARY,\ OR\ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00035}00035\ \textcolor{comment}{*\ CONSEQUENTIAL\ DAMAGES\ (INCLUDING,\ BUT\ NOT\ LIMITED\ TO,\ PROCUREMENT\ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00036}00036\ \textcolor{comment}{*\ OF\ SUBSTITUTE\ GOODS\ OR\ SERVICES;\ LOSS\ OF\ USE,\ DATA,\ OR\ PROFITS;\ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00037}00037\ \textcolor{comment}{*\ OR\ BUSINESS\ INTERRUPTION)\ HOWEVER\ CAUSED\ AND\ ON\ ANY\ THEORY\ OF\ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00038}00038\ \textcolor{comment}{*\ LIABILITY,\ WHETHER\ IN\ CONTRACT,\ STRICT\ LIABILITY,\ OR\ TORT\ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00039}00039\ \textcolor{comment}{*\ (INCLUDING\ NEGLIGENCE\ OR\ OTHERWISE)\ ARISING\ IN\ ANY\ WAY\ OUT\ OF\ THE\ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00040}00040\ \textcolor{comment}{*\ USE\ OF\ THIS\ SOFTWARE,\ EVEN\ IF\ ADVISED\ OF\ THE\ POSSIBILITY\ OF\ SUCH\ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00041}00041\ \textcolor{comment}{*\ DAMAGE.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00042}00042\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00043}00043\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00044}00044\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00045}00045\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ version:\ 8.10g\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00046}00046\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00047}00047\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00048}00048\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00049}00049\ \textcolor{comment}{-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/END-\/OF-\/HEADER-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00050}00050\ \textcolor{comment}{File\ \ \ \ :\ SEGGER\_RTT\_Conf.h}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00051}00051\ \textcolor{comment}{Purpose\ :\ Implementation\ of\ SEGGER\ real-\/time\ transfer\ (RTT)\ which}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00052}00052\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ allows\ real-\/time\ communication\ on\ targets\ which\ support}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00053}00053\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ debugger\ memory\ accesses\ while\ the\ CPU\ is\ running.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00054}00054\ \textcolor{comment}{Revision:\ \$Rev:\ 24316\ \$}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00055}00055\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00056}00056\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00057}00057\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00058}00058\ \textcolor{preprocessor}{\#ifndef\ SEGGER\_RTT\_CONF\_H}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00059}00059\ \textcolor{preprocessor}{\#define\ SEGGER\_RTT\_CONF\_H}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00060}00060\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00061}00061\ \textcolor{preprocessor}{\#ifdef\ \_\_IAR\_SYSTEMS\_ICC\_\_}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00062}00062\ \textcolor{preprocessor}{\ \ \#include\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00063}00063\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00064}00064\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00065}00065\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00066}00066\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00067}00067\ \textcolor{comment}{*\ \ \ \ \ \ \ Defines,\ configurable}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00068}00068\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00069}00069\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00070}00070\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00071}00071\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00072}00072\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00073}00073\ \textcolor{comment}{//\ Take\ in\ and\ set\ to\ correct\ values\ for\ Cortex-\/A\ systems\ with\ CPU\ cache}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00074}00074\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00075}00075\ \textcolor{comment}{//\#define\ SEGGER\_RTT\_CPU\_CACHE\_LINE\_SIZE\ \ \ \ \ \ \ \ \ \ \ \ (32)\ \ \ \ \ \ \ \ \ \ //\ Largest\ cache\ line\ size\ (in\ bytes)\ in\ the\ current\ system}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00076}00076\ \textcolor{comment}{//\#define\ SEGGER\_RTT\_UNCACHED\_OFF\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (0xFB000000)\ \ //\ Address\ alias\ where\ RTT\ CB\ and\ buffers\ can\ be\ accessed\ uncached}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00077}00077\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00078}00078\ \textcolor{comment}{//\ Most\ common\ case:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00079}00079\ \textcolor{comment}{//\ Up-\/channel\ 0:\ RTT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00080}00080\ \textcolor{comment}{//\ Up-\/channel\ 1:\ SystemView}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00081}00081\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00082}00082\ \textcolor{preprocessor}{\#ifndef\ \ \ SEGGER\_RTT\_MAX\_NUM\_UP\_BUFFERS}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00083}00083\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_MAX\_NUM\_UP\_BUFFERS\ \ \ \ \ \ \ \ \ \ \ \ \ (3)\ \ \ \ \ }\textcolor{comment}{//\ Max.\ number\ of\ up-\/buffers\ (T-\/>H)\ available\ on\ this\ target\ \ \ \ (Default:\ 3)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00084}00084\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00085}00085\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00086}00086\ \textcolor{comment}{//\ Most\ common\ case:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00087}00087\ \textcolor{comment}{//\ Down-\/channel\ 0:\ RTT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00088}00088\ \textcolor{comment}{//\ Down-\/channel\ 1:\ SystemView}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00089}00089\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00090}00090\ \textcolor{preprocessor}{\#ifndef\ \ \ SEGGER\_RTT\_MAX\_NUM\_DOWN\_BUFFERS}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00091}00091\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_MAX\_NUM\_DOWN\_BUFFERS\ \ \ \ \ \ \ \ \ \ \ (3)\ \ \ \ \ }\textcolor{comment}{//\ Max.\ number\ of\ down-\/buffers\ (H-\/>T)\ available\ on\ this\ target\ \ (Default:\ 3)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00092}00092\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00093}00093\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00094}00094\ \textcolor{preprocessor}{\#ifndef\ \ \ BUFFER\_SIZE\_UP}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00095}00095\ \textcolor{preprocessor}{\ \ \#define\ BUFFER\_SIZE\_UP\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (4096)\ \ }\textcolor{comment}{//\ Size\ of\ the\ buffer\ for\ terminal\ output\ of\ target,\ up\ to\ host\ (Default:\ 1k)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00096}00096\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00097}00097\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00098}00098\ \textcolor{preprocessor}{\#ifndef\ \ \ BUFFER\_SIZE\_DOWN}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00099}00099\ \textcolor{preprocessor}{\ \ \#define\ BUFFER\_SIZE\_DOWN\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (16)\ \ \ \ }\textcolor{comment}{//\ Size\ of\ the\ buffer\ for\ terminal\ input\ to\ target\ from\ host\ (Usually\ keyboard\ input)\ (Default:\ 16)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00100}00100\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00101}00101\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00102}00102\ \textcolor{preprocessor}{\#ifndef\ \ \ SEGGER\_RTT\_PRINTF\_BUFFER\_SIZE}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00103}00103\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_PRINTF\_BUFFER\_SIZE\ \ \ \ \ \ \ \ \ \ \ \ \ (64u)\ \ \ \ }\textcolor{comment}{//\ Size\ of\ buffer\ for\ RTT\ printf\ to\ bulk-\/send\ chars\ via\ RTT\ \ \ \ \ (Default:\ 64)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00104}00104\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00105}00105\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00106}00106\ \textcolor{preprocessor}{\#ifndef\ \ \ SEGGER\_RTT\_MODE\_DEFAULT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00107}00107\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_MODE\_DEFAULT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SEGGER\_RTT\_MODE\_NO\_BLOCK\_TRIM\ }\textcolor{comment}{//\ Mode\ for\ pre-\/initialized\ terminal\ channel\ (buffer\ 0)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00108}00108\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00109}00109\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00110}00110\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00111}00111\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00112}00112\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ memcpy\ configuration}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00113}00113\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00114}00114\ \textcolor{comment}{*\ \ \ \ \ \ \ memcpy()\ is\ good\ for\ large\ amounts\ of\ data,}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00115}00115\ \textcolor{comment}{*\ \ \ \ \ \ \ but\ the\ overhead\ is\ big\ for\ small\ amounts,\ which\ are\ usually\ stored\ via\ RTT.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00116}00116\ \textcolor{comment}{*\ \ \ \ \ \ \ With\ SEGGER\_RTT\_MEMCPY\_USE\_BYTELOOP\ a\ simple\ byte\ loop\ can\ be\ used\ instead.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00117}00117\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00118}00118\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_MEMCPY()\ can\ be\ used\ to\ replace\ standard\ memcpy()\ in\ RTT\ functions.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00119}00119\ \textcolor{comment}{*\ \ \ \ \ \ \ This\ is\ may\ be\ required\ with\ memory\ access\ restrictions,}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00120}00120\ \textcolor{comment}{*\ \ \ \ \ \ \ such\ as\ on\ Cortex-\/A\ devices\ with\ MMU.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00121}00121\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00122}00122\ \textcolor{preprocessor}{\#ifndef\ \ \ SEGGER\_RTT\_MEMCPY\_USE\_BYTELOOP}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00123}00123\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_MEMCPY\_USE\_BYTELOOP\ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\ }\textcolor{comment}{//\ 0:\ Use\ memcpy/SEGGER\_RTT\_MEMCPY,\ 1:\ Use\ a\ simple\ byte-\/loop}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00124}00124\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00125}00125\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00126}00126\ \textcolor{comment}{//\ Example\ definition\ of\ SEGGER\_RTT\_MEMCPY\ to\ external\ memcpy\ with\ GCC\ toolchains\ and\ Cortex-\/A\ targets}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00127}00127\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00128}00128\ \textcolor{comment}{//\#if\ ((defined\ \_\_SES\_ARM)\ ||\ (defined\ \_\_CROSSWORKS\_ARM)\ ||\ (defined\ \_\_GNUC\_\_))\ \&\&\ (defined\ (\_\_ARM\_ARCH\_7A\_\_))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00129}00129\ \textcolor{comment}{//\ \ \#define\ SEGGER\_RTT\_MEMCPY(pDest,\ pSrc,\ NumBytes)\ \ \ \ \ \ SEGGER\_memcpy((pDest),\ (pSrc),\ (NumBytes))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00130}00130\ \textcolor{comment}{//\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00131}00131\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00132}00132\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00133}00133\ \textcolor{comment}{//\ Target\ is\ not\ allowed\ to\ perform\ other\ RTT\ operations\ while\ string\ still\ has\ not\ been\ stored\ completely.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00134}00134\ \textcolor{comment}{//\ Otherwise\ we\ would\ probably\ end\ up\ with\ a\ mixed\ string\ in\ the\ buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00135}00135\ \textcolor{comment}{//\ If\ using\ \ RTT\ from\ within\ interrupts,\ multiple\ tasks\ or\ multi\ processors,\ define\ the\ SEGGER\_RTT\_LOCK()\ and\ SEGGER\_RTT\_UNLOCK()\ function\ here.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00136}00136\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00137}00137\ \textcolor{comment}{//\ SEGGER\_RTT\_MAX\_INTERRUPT\_PRIORITY\ can\ be\ used\ in\ the\ sample\ lock\ routines\ on\ Cortex-\/M3/4.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00138}00138\ \textcolor{comment}{//\ Make\ sure\ to\ mask\ all\ interrupts\ which\ can\ send\ RTT\ data,\ i.e.\ generate\ SystemView\ events,\ or\ cause\ task\ switches.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00139}00139\ \textcolor{comment}{//\ When\ high-\/priority\ interrupts\ must\ not\ be\ masked\ while\ sending\ RTT\ data,\ SEGGER\_RTT\_MAX\_INTERRUPT\_PRIORITY\ needs\ to\ be\ adjusted\ accordingly.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00140}00140\ \textcolor{comment}{//\ (Higher\ priority\ =\ lower\ priority\ number)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00141}00141\ \textcolor{comment}{//\ Default\ value\ for\ embOS:\ 128u}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00142}00142\ \textcolor{comment}{//\ Default\ configuration\ in\ FreeRTOS:\ configMAX\_SYSCALL\_INTERRUPT\_PRIORITY:\ (\ configLIBRARY\_MAX\_SYSCALL\_INTERRUPT\_PRIORITY\ <<\ (8\ -\/\ configPRIO\_BITS)\ )}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00143}00143\ \textcolor{comment}{//\ In\ case\ of\ doubt\ mask\ all\ interrupts:\ 1\ <<\ (8\ -\/\ BASEPRI\_PRIO\_BITS)\ i.e.\ 1\ <<\ 5\ when\ 3\ bits\ are\ implemented\ in\ NVIC}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00144}00144\ \textcolor{comment}{//\ or\ define\ SEGGER\_RTT\_LOCK()\ to\ completely\ disable\ interrupts.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00145}00145\ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00146}00146\ \textcolor{preprocessor}{\#ifndef\ \ \ SEGGER\_RTT\_MAX\_INTERRUPT\_PRIORITY}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00147}00147\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_MAX\_INTERRUPT\_PRIORITY\ \ \ \ \ \ \ \ \ (0x20)\ \ \ }\textcolor{comment}{//\ Interrupt\ priority\ to\ lock\ on\ SEGGER\_RTT\_LOCK\ on\ Cortex-\/M3/4\ (Default:\ 0x20)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00148}00148\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00149}00149\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00150}00150\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00151}00151\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00152}00152\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ lock\ configuration\ for\ SEGGER\ Embedded\ Studio,}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00153}00153\ \textcolor{comment}{*\ \ \ \ \ \ \ Rowley\ CrossStudio\ and\ GCC}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00154}00154\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00155}00155\ \textcolor{preprocessor}{\#if\ ((defined(\_\_SES\_ARM)\ ||\ defined(\_\_SES\_RISCV)\ ||\ defined(\_\_CROSSWORKS\_ARM)\ ||\ defined(\_\_GNUC\_\_)\ ||\ defined(\_\_clang\_\_))\ \&\&\ !defined\ (\_\_CC\_ARM)\ \&\&\ !defined(WIN32))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00156}00156\ \textcolor{preprocessor}{\ \ \#if\ (defined(\_\_ARM\_ARCH\_6M\_\_)\ ||\ defined(\_\_ARM\_ARCH\_8M\_BASE\_\_))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00157}00157\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_LOCK()\ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00158}00158\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ unsigned\ int\ \_SEGGER\_RTT\_\_LockState;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00159}00159\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_\_asm\ volatile\ ("{}mrs\ \ \ \%0,\ primask\ \ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00160}00160\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}movs\ \ r1,\ \#1\ \ \ \ \ \ \ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00161}00161\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}msr\ \ \ primask,\ r1\ \ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00162}00162\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}=r"{}\ (\_SEGGER\_RTT\_\_LockState)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00163}00163\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00164}00164\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}r1"{},\ "{}cc"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00165}00165\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ );}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00166}00166\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00167}00167\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_UNLOCK()\ \ \ \_\_asm\ volatile\ ("{}msr\ \ \ primask,\ \%0\ \ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00168}00168\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00169}00169\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}r"{}\ (\_SEGGER\_RTT\_\_LockState)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00170}00170\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00171}00171\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ );\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00172}00172\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00173}00173\ \textcolor{preprocessor}{\ \ \#elif\ (defined(\_\_ARM\_ARCH\_7M\_\_)\ ||\ defined(\_\_ARM\_ARCH\_7EM\_\_)\ ||\ defined(\_\_ARM\_ARCH\_8M\_MAIN\_\_)\ ||\ defined(\_\_ARM\_ARCH\_8\_1M\_MAIN\_\_))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00174}00174\ \textcolor{preprocessor}{\ \ \ \ \#ifndef\ \ \ SEGGER\_RTT\_MAX\_INTERRUPT\_PRIORITY}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00175}00175\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ SEGGER\_RTT\_MAX\_INTERRUPT\_PRIORITY\ \ \ (0x20)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00176}00176\ \textcolor{preprocessor}{\ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00177}00177\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_LOCK()\ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00178}00178\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ unsigned\ int\ \_SEGGER\_RTT\_\_LockState;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00179}00179\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_\_asm\ volatile\ ("{}mrs\ \ \ \%0,\ basepri\ \ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00180}00180\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}mov\ \ \ r1,\ \%1\ \ \ \ \ \ \ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00181}00181\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}msr\ \ \ basepri,\ r1\ \ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00182}00182\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}=r"{}\ (\_SEGGER\_RTT\_\_LockState)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00183}00183\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}i"{}(SEGGER\_RTT\_MAX\_INTERRUPT\_PRIORITY)\ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00184}00184\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}r1"{},\ "{}cc"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00185}00185\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ );}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00186}00186\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00187}00187\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_UNLOCK()\ \ \ \_\_asm\ volatile\ ("{}msr\ \ \ basepri,\ \%0\ \ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00188}00188\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00189}00189\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}r"{}\ (\_SEGGER\_RTT\_\_LockState)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00190}00190\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00191}00191\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ );\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00192}00192\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00193}00193\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00194}00194\ \textcolor{preprocessor}{\ \ \#elif\ (defined(\_\_ARM\_ARCH\_7A\_\_)\ ||\ defined(\_\_ARM\_ARCH\_7R\_\_))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00195}00195\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_LOCK()\ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00196}00196\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ unsigned\ int\ \_SEGGER\_RTT\_\_LockState;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00197}00197\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_\_asm\ volatile\ ("{}mrs\ r1,\ CPSR\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00198}00198\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}mov\ \%0,\ r1\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00199}00199\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}orr\ r1,\ r1,\ \#0xC0\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00200}00200\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}msr\ CPSR\_c,\ r1\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00201}00201\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}=r"{}\ (\_SEGGER\_RTT\_\_LockState)\ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00202}00202\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00203}00203\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}r1"{},\ "{}cc"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00204}00204\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ );}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00205}00205\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00206}00206\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_UNLOCK()\ \_\_asm\ volatile\ ("{}mov\ r0,\ \%0\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00207}00207\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}mrs\ r1,\ CPSR\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00208}00208\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}bic\ r1,\ r1,\ \#0xC0\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00209}00209\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}and\ r0,\ r0,\ \#0xC0\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00210}00210\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}orr\ r1,\ r1,\ r0\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00211}00211\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}msr\ CPSR\_c,\ r1\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00212}00212\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00213}00213\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}r"{}\ (\_SEGGER\_RTT\_\_LockState)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00214}00214\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}r0"{},\ "{}r1"{},\ "{}cc"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00215}00215\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ );\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00216}00216\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00217}00217\ \textcolor{preprocessor}{\ \ \#elif\ defined(\_\_riscv)\ ||\ defined(\_\_riscv\_xlen)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00218}00218\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_LOCK()\ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00219}00219\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ unsigned\ int\ \_SEGGER\_RTT\_\_LockState;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00220}00220\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_\_asm\ volatile\ ("{}csrr\ \ \%0,\ mstatus\ \ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00221}00221\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}csrci\ mstatus,\ 8\ \ \ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00222}00222\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}andi\ \ \%0,\ \%0,\ \ 8\ \ \ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00223}00223\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}=r"{}\ (\_SEGGER\_RTT\_\_LockState)\ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00224}00224\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00225}00225\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00226}00226\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ );}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00227}00227\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00228}00228\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_UNLOCK()\ \ \ \ \_\_asm\ volatile\ ("{}csrr\ \ a1,\ mstatus\ \ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00229}00229\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}or\ \ \ \ \%0,\ \%0,\ a1\ \ \ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00230}00230\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}csrs\ \ mstatus,\ \%0\ \ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00231}00231\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00232}00232\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}r"{}\ \ (\_SEGGER\_RTT\_\_LockState)\ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00233}00233\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}a1"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00234}00234\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ );\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00235}00235\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00236}00236\ \textcolor{preprocessor}{\ \ \#else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00237}00237\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_LOCK()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00238}00238\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_UNLOCK()}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00239}00239\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00240}00240\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00241}00241\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00242}00242\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00243}00243\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00244}00244\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ lock\ configuration\ for\ IAR\ EWARM}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00245}00245\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00246}00246\ \textcolor{preprocessor}{\#ifdef\ \_\_ICCARM\_\_}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00247}00247\ \textcolor{preprocessor}{\ \ \#if\ (defined\ (\_\_ARM6M\_\_)\ \ \ \ \ \ \ \ \ \ \&\&\ (\_\_CORE\_\_\ ==\ \_\_ARM6M\_\_))\ \ \ \ \ \ \ \ \ \ \ \ \ ||\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00248}00248\ \textcolor{preprocessor}{\ \ \ \ \ \ (defined\ (\_\_ARM8M\_BASELINE\_\_)\ \&\&\ (\_\_CORE\_\_\ ==\ \_\_ARM8M\_BASELINE\_\_))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00249}00249\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_LOCK()\ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00250}00250\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ unsigned\ int\ \_SEGGER\_RTT\_\_LockState;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00251}00251\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_SEGGER\_RTT\_\_LockState\ =\ \_\_get\_PRIMASK();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00252}00252\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_\_set\_PRIMASK(1);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00253}00253\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00254}00254\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_UNLOCK()\ \ \ \_\_set\_PRIMASK(\_SEGGER\_RTT\_\_LockState);\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00255}00255\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00256}00256\ \textcolor{preprocessor}{\ \ \#elif\ (defined\ (\_\_ARM7EM\_\_)\ \ \ \ \ \ \ \ \ \&\&\ (\_\_CORE\_\_\ ==\ \_\_ARM7EM\_\_))\ \ \ \ \ \ \ \ \ \ ||\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00257}00257\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ (defined\ (\_\_ARM7M\_\_)\ \ \ \ \ \ \ \ \ \ \&\&\ (\_\_CORE\_\_\ ==\ \_\_ARM7M\_\_))\ \ \ \ \ \ \ \ \ \ \ ||\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00258}00258\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ (defined\ (\_\_ARM8M\_MAINLINE\_\_)\ \&\&\ (\_\_CORE\_\_\ ==\ \_\_ARM8M\_MAINLINE\_\_))\ \ ||\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00259}00259\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ (defined\ (\_\_ARM8M\_MAINLINE\_\_)\ \&\&\ (\_\_CORE\_\_\ ==\ \_\_ARM8M\_MAINLINE\_\_))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00260}00260\ \textcolor{preprocessor}{\ \ \ \ \#ifndef\ \ \ SEGGER\_RTT\_MAX\_INTERRUPT\_PRIORITY}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00261}00261\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ SEGGER\_RTT\_MAX\_INTERRUPT\_PRIORITY\ \ \ (0x20)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00262}00262\ \textcolor{preprocessor}{\ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00263}00263\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_LOCK()\ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00264}00264\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ unsigned\ int\ \_SEGGER\_RTT\_\_LockState;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00265}00265\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_SEGGER\_RTT\_\_LockState\ =\ \_\_get\_BASEPRI();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00266}00266\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_\_set\_BASEPRI(SEGGER\_RTT\_MAX\_INTERRUPT\_PRIORITY);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00267}00267\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00268}00268\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_UNLOCK()\ \ \ \_\_set\_BASEPRI(\_SEGGER\_RTT\_\_LockState);\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00269}00269\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00270}00270\ \textcolor{preprocessor}{\ \ \#elif\ (defined\ (\_\_ARM7A\_\_)\ \&\&\ (\_\_CORE\_\_\ ==\ \_\_ARM7A\_\_))\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ||\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00271}00271\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ (defined\ (\_\_ARM7R\_\_)\ \&\&\ (\_\_CORE\_\_\ ==\ \_\_ARM7R\_\_))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00272}00272\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_LOCK()\ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00273}00273\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ unsigned\ int\ \_SEGGER\_RTT\_\_LockState;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00274}00274\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_\_asm\ volatile\ ("{}mrs\ r1,\ CPSR\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00275}00275\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}mov\ \%0,\ r1\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00276}00276\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}orr\ r1,\ r1,\ \#0xC0\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00277}00277\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}msr\ CPSR\_c,\ r1\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00278}00278\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}=r"{}\ (\_SEGGER\_RTT\_\_LockState)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00279}00279\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00280}00280\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}r1"{},\ "{}cc"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00281}00281\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ );}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00282}00282\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00283}00283\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_UNLOCK()\ \_\_asm\ volatile\ ("{}mov\ r0,\ \%0\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00284}00284\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}mrs\ r1,\ CPSR\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00285}00285\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}bic\ r1,\ r1,\ \#0xC0\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00286}00286\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}and\ r0,\ r0,\ \#0xC0\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00287}00287\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}orr\ r1,\ r1,\ r0\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00288}00288\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}msr\ CPSR\_c,\ r1\ \(\backslash\)n\(\backslash\)t"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00289}00289\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00290}00290\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}r"{}\ (\_SEGGER\_RTT\_\_LockState)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00291}00291\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ "{}r0"{},\ "{}r1"{},\ "{}cc"{}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00292}00292\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ );\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00293}00293\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00294}00294\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00295}00295\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00296}00296\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00297}00297\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00298}00298\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00299}00299\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ lock\ configuration\ for\ IAR\ RX}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00300}00300\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00301}00301\ \textcolor{preprocessor}{\#ifdef\ \_\_ICCRX\_\_}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00302}00302\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_LOCK()\ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00303}00303\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ unsigned\ long\ \_SEGGER\_RTT\_\_LockState;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00304}00304\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_SEGGER\_RTT\_\_LockState\ =\ \_\_get\_interrupt\_state();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00305}00305\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_\_disable\_interrupt();}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00306}00306\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00307}00307\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_UNLOCK()\ \ \ \_\_set\_interrupt\_state(\_SEGGER\_RTT\_\_LockState);\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00308}00308\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00309}00309\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00310}00310\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00311}00311\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00312}00312\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00313}00313\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ lock\ configuration\ for\ IAR\ RL78}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00314}00314\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00315}00315\ \textcolor{preprocessor}{\#ifdef\ \_\_ICCRL78\_\_}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00316}00316\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_LOCK()\ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00317}00317\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_\_istate\_t\ \_SEGGER\_RTT\_\_LockState;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00318}00318\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_SEGGER\_RTT\_\_LockState\ =\ \_\_get\_interrupt\_state();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00319}00319\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_\_disable\_interrupt();}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00320}00320\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00321}00321\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_UNLOCK()\ \ \ \_\_set\_interrupt\_state(\_SEGGER\_RTT\_\_LockState);\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00322}00322\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00323}00323\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00324}00324\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00325}00325\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00326}00326\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00327}00327\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ lock\ configuration\ for\ KEIL\ ARM}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00328}00328\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00329}00329\ \textcolor{preprocessor}{\#ifdef\ \_\_CC\_ARM}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00330}00330\ \textcolor{preprocessor}{\ \ \#if\ (defined\ \_\_TARGET\_ARCH\_6S\_M)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00331}00331\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_LOCK()\ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00332}00332\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ unsigned\ int\ \_SEGGER\_RTT\_\_LockState;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00333}00333\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ register\ unsigned\ char\ \_SEGGER\_RTT\_\_PRIMASK\ \_\_asm(\ "{}primask"{});\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00334}00334\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_SEGGER\_RTT\_\_LockState\ =\ \_SEGGER\_RTT\_\_PRIMASK;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00335}00335\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_SEGGER\_RTT\_\_PRIMASK\ =\ 1u;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00336}00336\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_\_schedule\_barrier();}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00337}00337\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00338}00338\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_UNLOCK()\ \ \ \_SEGGER\_RTT\_\_PRIMASK\ =\ \_SEGGER\_RTT\_\_LockState;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00339}00339\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_\_schedule\_barrier();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00340}00340\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00341}00341\ \textcolor{preprocessor}{\ \ \#elif\ (defined(\_\_TARGET\_ARCH\_7\_M)\ ||\ defined(\_\_TARGET\_ARCH\_7E\_M))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00342}00342\ \textcolor{preprocessor}{\ \ \ \ \#ifndef\ \ \ SEGGER\_RTT\_MAX\_INTERRUPT\_PRIORITY}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00343}00343\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ SEGGER\_RTT\_MAX\_INTERRUPT\_PRIORITY\ \ \ (0x20)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00344}00344\ \textcolor{preprocessor}{\ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00345}00345\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_LOCK()\ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00346}00346\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ unsigned\ int\ \_SEGGER\_RTT\_\_LockState;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00347}00347\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ register\ unsigned\ char\ BASEPRI\ \_\_asm(\ "{}basepri"{});\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00348}00348\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_SEGGER\_RTT\_\_LockState\ =\ BASEPRI;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00349}00349\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ BASEPRI\ =\ SEGGER\_RTT\_MAX\_INTERRUPT\_PRIORITY;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00350}00350\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_\_schedule\_barrier();}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00351}00351\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00352}00352\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_UNLOCK()\ \ \ BASEPRI\ =\ \_SEGGER\_RTT\_\_LockState;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00353}00353\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_\_schedule\_barrier();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00354}00354\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00355}00355\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00356}00356\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00357}00357\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00358}00358\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00359}00359\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00360}00360\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ lock\ configuration\ for\ TI\ ARM}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00361}00361\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00362}00362\ \textcolor{preprocessor}{\#ifdef\ \_\_TI\_ARM\_\_}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00363}00363\ \textcolor{preprocessor}{\ \ \#if\ defined\ (\_\_TI\_ARM\_V6M0\_\_)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00364}00364\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_LOCK()\ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00365}00365\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ unsigned\ int\ \_SEGGER\_RTT\_\_LockState;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00366}00366\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_SEGGER\_RTT\_\_LockState\ =\ \_\_get\_PRIMASK();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00367}00367\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_\_set\_PRIMASK(1);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00368}00368\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00369}00369\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_UNLOCK()\ \ \ \_\_set\_PRIMASK(\_SEGGER\_RTT\_\_LockState);\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00370}00370\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00371}00371\ \textcolor{preprocessor}{\ \ \#elif\ (defined\ (\_\_TI\_ARM\_V7M3\_\_)\ ||\ defined\ (\_\_TI\_ARM\_V7M4\_\_))}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00372}00372\ \textcolor{preprocessor}{\ \ \ \ \#ifndef\ \ \ SEGGER\_RTT\_MAX\_INTERRUPT\_PRIORITY}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00373}00373\ \textcolor{preprocessor}{\ \ \ \ \ \ \#define\ SEGGER\_RTT\_MAX\_INTERRUPT\_PRIORITY\ \ \ (0x20)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00374}00374\ \textcolor{preprocessor}{\ \ \ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00375}00375\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_LOCK()\ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00376}00376\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ unsigned\ int\ \_SEGGER\_RTT\_\_LockState;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00377}00377\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_SEGGER\_RTT\_\_LockState\ =\ \_set\_interrupt\_priority(SEGGER\_RTT\_MAX\_INTERRUPT\_PRIORITY);}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00378}00378\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00379}00379\ \textcolor{preprocessor}{\ \ \ \ \#define\ SEGGER\_RTT\_UNLOCK()\ \ \ \_set\_interrupt\_priority(\_SEGGER\_RTT\_\_LockState);\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00380}00380\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00381}00381\ \textcolor{preprocessor}{\ \ \#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00382}00382\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00383}00383\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00384}00384\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00385}00385\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00386}00386\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ lock\ configuration\ for\ CCRX}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00387}00387\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00388}00388\ \textcolor{preprocessor}{\#ifdef\ \_\_RX}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00389}00389\ \textcolor{preprocessor}{\ \ \#include\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00390}00390\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_LOCK()\ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00391}00391\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ unsigned\ long\ \_SEGGER\_RTT\_\_LockState;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00392}00392\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_SEGGER\_RTT\_\_LockState\ =\ get\_psw()\ \&\ 0x010000;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00393}00393\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ clrpsw\_i();}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00394}00394\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00395}00395\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_UNLOCK()\ \ \ set\_psw(get\_psw()\ |\ \_SEGGER\_RTT\_\_LockState);\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00396}00396\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00397}00397\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00398}00398\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00399}00399\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00400}00400\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00401}00401\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ lock\ configuration\ for\ embOS\ Simulation\ on\ Windows}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00402}00402\ \textcolor{comment}{*\ \ \ \ \ \ \ (Can\ also\ be\ used\ for\ generic\ RTT\ locking\ with\ embOS)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00403}00403\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00404}00404\ \textcolor{preprocessor}{\#if\ defined(WIN32)\ ||\ defined(SEGGER\_RTT\_LOCK\_EMBOS)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00405}00405\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00406}00406\ \textcolor{keywordtype}{void}\ OS\_SIM\_EnterCriticalSection(\textcolor{keywordtype}{void});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00407}00407\ \textcolor{keywordtype}{void}\ OS\_SIM\_LeaveCriticalSection(\textcolor{keywordtype}{void});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00408}00408\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00409}00409\ \textcolor{preprocessor}{\#define\ SEGGER\_RTT\_LOCK()\ \ \ \ \ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00410}00410\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ OS\_SIM\_EnterCriticalSection();}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00411}00411\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00412}00412\ \textcolor{preprocessor}{\#define\ SEGGER\_RTT\_UNLOCK()\ \ \ \ \ \ \ OS\_SIM\_LeaveCriticalSection();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00413}00413\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00414}00414\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00415}00415\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00416}00416\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00417}00417\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00418}00418\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ lock\ configuration\ fallback}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00419}00419\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00420}00420\ \textcolor{preprocessor}{\#ifndef\ \ \ SEGGER\_RTT\_LOCK}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00421}00421\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_LOCK()\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Lock\ RTT\ (nestable)\ \ \ (i.e.\ disable\ interrupts)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00422}00422\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00423}00423\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00424}00424\ \textcolor{preprocessor}{\#ifndef\ \ \ SEGGER\_RTT\_UNLOCK}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00425}00425\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_UNLOCK()\ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{//\ Unlock\ RTT\ (nestable)\ (i.e.\ enable\ previous\ interrupt\ lock\ state)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00426}00426\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00427}00427\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00428}00428\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___conf_8h_source_l00429}00429\ \textcolor{comment}{/***************************\ End\ of\ file\ ****************************/}} + +\end{DoxyCode} diff --git a/Doc/latex/_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source.tex b/Doc/latex/_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source.tex new file mode 100644 index 0000000..8e606e9 --- /dev/null +++ b/Doc/latex/_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source.tex @@ -0,0 +1,400 @@ +\doxysection{SEGGER\+\_\+\+RTT\+\_\+\+Syscalls\+\_\+\+KEIL.\+c} +\hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source}{}\label{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source}\index{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/RTT/SEGGER\_RTT\_Syscalls\_KEIL.c@{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/RTT/SEGGER\_RTT\_Syscalls\_KEIL.c}} + +\begin{DoxyCode}{0} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00001}00001\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00002}00002\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SEGGER\ Microcontroller\ GmbH\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00003}00003\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ The\ Embedded\ Experts\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00004}00004\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00005}00005\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00006}00006\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ (c)\ 1995\ -\/\ 2021\ SEGGER\ Microcontroller\ GmbH\ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00007}00007\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00008}00008\ \textcolor{comment}{*\ \ \ \ \ \ \ www.segger.com\ \ \ \ \ Support:\ support@segger.com\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00009}00009\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00010}00010\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00011}00011\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00012}00012\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\ RTT\ *\ Real\ Time\ Transfer\ for\ embedded\ targets\ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00013}00013\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00014}00014\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00015}00015\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00016}00016\ \textcolor{comment}{*\ All\ rights\ reserved.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00017}00017\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00018}00018\ \textcolor{comment}{*\ SEGGER\ strongly\ recommends\ to\ not\ make\ any\ changes\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00019}00019\ \textcolor{comment}{*\ to\ or\ modify\ the\ source\ code\ of\ this\ software\ in\ order\ to\ stay\ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00020}00020\ \textcolor{comment}{*\ compatible\ with\ the\ RTT\ protocol\ and\ J-\/Link.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00021}00021\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00022}00022\ \textcolor{comment}{*\ Redistribution\ and\ use\ in\ source\ and\ binary\ forms,\ with\ or\ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00023}00023\ \textcolor{comment}{*\ without\ modification,\ are\ permitted\ provided\ that\ the\ following\ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00024}00024\ \textcolor{comment}{*\ condition\ is\ met:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00025}00025\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00026}00026\ \textcolor{comment}{*\ o\ Redistributions\ of\ source\ code\ must\ retain\ the\ above\ copyright\ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00027}00027\ \textcolor{comment}{*\ \ \ notice,\ this\ condition\ and\ the\ following\ disclaimer.\ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00028}00028\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00029}00029\ \textcolor{comment}{*\ THIS\ SOFTWARE\ IS\ PROVIDED\ BY\ THE\ COPYRIGHT\ HOLDERS\ AND\ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00030}00030\ \textcolor{comment}{*\ CONTRIBUTORS\ "{}AS\ IS"{}\ AND\ ANY\ EXPRESS\ OR\ IMPLIED\ WARRANTIES,\ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00031}00031\ \textcolor{comment}{*\ INCLUDING,\ BUT\ NOT\ LIMITED\ TO,\ THE\ IMPLIED\ WARRANTIES\ OF\ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00032}00032\ \textcolor{comment}{*\ MERCHANTABILITY\ AND\ FITNESS\ FOR\ A\ PARTICULAR\ PURPOSE\ ARE\ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00033}00033\ \textcolor{comment}{*\ DISCLAIMED.\ IN\ NO\ EVENT\ SHALL\ SEGGER\ Microcontroller\ BE\ LIABLE\ FOR\ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00034}00034\ \textcolor{comment}{*\ ANY\ DIRECT,\ INDIRECT,\ INCIDENTAL,\ SPECIAL,\ EXEMPLARY,\ OR\ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00035}00035\ \textcolor{comment}{*\ CONSEQUENTIAL\ DAMAGES\ (INCLUDING,\ BUT\ NOT\ LIMITED\ TO,\ PROCUREMENT\ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00036}00036\ \textcolor{comment}{*\ OF\ SUBSTITUTE\ GOODS\ OR\ SERVICES;\ LOSS\ OF\ USE,\ DATA,\ OR\ PROFITS;\ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00037}00037\ \textcolor{comment}{*\ OR\ BUSINESS\ INTERRUPTION)\ HOWEVER\ CAUSED\ AND\ ON\ ANY\ THEORY\ OF\ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00038}00038\ \textcolor{comment}{*\ LIABILITY,\ WHETHER\ IN\ CONTRACT,\ STRICT\ LIABILITY,\ OR\ TORT\ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00039}00039\ \textcolor{comment}{*\ (INCLUDING\ NEGLIGENCE\ OR\ OTHERWISE)\ ARISING\ IN\ ANY\ WAY\ OUT\ OF\ THE\ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00040}00040\ \textcolor{comment}{*\ USE\ OF\ THIS\ SOFTWARE,\ EVEN\ IF\ ADVISED\ OF\ THE\ POSSIBILITY\ OF\ SUCH\ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00041}00041\ \textcolor{comment}{*\ DAMAGE.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00042}00042\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00043}00043\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00044}00044\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00045}00045\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ version:\ 7.54\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00046}00046\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00047}00047\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00048}00048\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00049}00049\ \textcolor{comment}{-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/END-\/OF-\/HEADER-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00050}00050\ \textcolor{comment}{File\ \ \ \ :\ RTT\_Syscalls\_KEIL.c}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00051}00051\ \textcolor{comment}{Purpose\ :\ Retargeting\ module\ for\ KEIL\ MDK-\/CM3.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00052}00052\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ Low-\/level\ functions\ for\ using\ printf()\ via\ RTT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00053}00053\ \textcolor{comment}{Revision:\ \$Rev:\ 24316\ \$}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00054}00054\ \textcolor{comment}{Notes\ \ \ :\ (1)\ https://wiki.segger.com/Keil\_MDK-\/ARM\#RTT\_in\_uVision}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00055}00055\ \textcolor{comment}{-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00056}00056\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00057}00057\ \textcolor{preprocessor}{\#if\ (defined\ \_\_CC\_ARM)\ ||\ (defined\ \_\_ARMCC\_VERSION)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00058}00058\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00059}00059\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00060}00060\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00061}00061\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00062}00062\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00063}00063\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00064}00064\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00065}00065\ \textcolor{preprocessor}{\#include\ "{}SEGGER\_RTT.h"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00066}00066\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00067}00067\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00068}00068\ \textcolor{comment}{*\ \ \ \ \ \ \ \#pragmas}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00069}00069\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00070}00070\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00071}00071\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00072}00072\ \textcolor{preprocessor}{\#if\ \_\_ARMCC\_VERSION\ <\ 6000000}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00073}00073\ \textcolor{preprocessor}{\#pragma\ import(\_\_use\_no\_semihosting)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00074}00074\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00075}00075\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00076}00076\ \textcolor{preprocessor}{\#ifdef\ \_MICROLIB}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00077}00077\ \textcolor{preprocessor}{\ \ \#pragma\ import(\_\_use\_full\_stdio)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00078}00078\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00079}00079\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00080}00080\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00081}00081\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00082}00082\ \textcolor{comment}{*\ \ \ \ \ \ \ Defines\ non-\/configurable}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00083}00083\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00084}00084\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00085}00085\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00086}00086\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00087}00087\ \textcolor{comment}{/*\ Standard\ IO\ device\ handles\ -\/\ arbitrary,\ but\ any\ real\ file\ system\ handles\ must\ be}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00088}00088\ \textcolor{comment}{\ \ \ less\ than\ 0x8000.\ */}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00089}00089\ \textcolor{preprocessor}{\#define\ STDIN\ \ \ \ \ \ \ \ \ \ \ \ \ 0x8001\ \ \ \ }\textcolor{comment}{//\ Standard\ Input\ Stream}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00090}00090\ \textcolor{preprocessor}{\#define\ STDOUT\ \ \ \ \ \ \ \ \ \ \ \ 0x8002\ \ \ \ }\textcolor{comment}{//\ Standard\ Output\ Stream}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00091}00091\ \textcolor{preprocessor}{\#define\ STDERR\ \ \ \ \ \ \ \ \ \ \ \ 0x8003\ \ \ \ }\textcolor{comment}{//\ Standard\ Error\ Stream}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00092}00092\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00093}00093\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00094}00094\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00095}00095\ \textcolor{comment}{*\ \ \ \ \ \ \ Public\ const}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00096}00096\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00097}00097\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00098}00098\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00099}00099\ \textcolor{preprocessor}{\#if\ \_\_ARMCC\_VERSION\ <\ 5000000}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00100}00100\ \textcolor{comment}{//const\ char\ \_\_stdin\_name[]\ \ =\ "{}STDIN"{};}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00101}00101\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ \_\_stdout\_name[]\ =\ \textcolor{stringliteral}{"{}STDOUT"{}};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00102}00102\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ \_\_stderr\_name[]\ =\ \textcolor{stringliteral}{"{}STDERR"{}};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00103}00103\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00104}00104\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00105}00105\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00106}00106\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00107}00107\ \textcolor{comment}{*\ \ \ \ \ \ \ Public\ code}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00108}00108\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00109}00109\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00110}00110\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00111}00111\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00112}00112\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00113}00113\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00114}00114\ \textcolor{comment}{*\ \ \ \ \ \ \ \_ttywrch}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00115}00115\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00116}00116\ \textcolor{comment}{*\ \ Function\ description:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00117}00117\ \textcolor{comment}{*\ \ \ \ Outputs\ a\ character\ to\ the\ console}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00118}00118\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00119}00119\ \textcolor{comment}{*\ \ Parameters:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00120}00120\ \textcolor{comment}{*\ \ \ \ c\ \ \ \ -\/\ character\ to\ output}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00121}00121\ \textcolor{comment}{*\ \ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00122}00122\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00123}00123\ \textcolor{keywordtype}{void}\ \_ttywrch(\textcolor{keywordtype}{int}\ c)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00124}00124\ \ \ fputc(c,\ stdout);\ \textcolor{comment}{//\ stdout}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00125}00125\ \ \ fflush(stdout);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00126}00126\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00127}00127\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00128}00128\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00129}00129\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00130}00130\ \textcolor{comment}{*\ \ \ \ \ \ \ \_sys\_open}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00131}00131\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00132}00132\ \textcolor{comment}{*\ \ Function\ description:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00133}00133\ \textcolor{comment}{*\ \ \ \ Opens\ the\ device/file\ in\ order\ to\ do\ read/write\ operations}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00134}00134\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00135}00135\ \textcolor{comment}{*\ \ Parameters:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00136}00136\ \textcolor{comment}{*\ \ \ \ sName\ \ \ \ \ \ \ \ -\/\ sName\ of\ the\ device/file\ to\ open}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00137}00137\ \textcolor{comment}{*\ \ \ \ OpenMode\ \ \ \ -\/\ This\ parameter\ is\ currently\ ignored}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00138}00138\ \textcolor{comment}{*\ \ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00139}00139\ \textcolor{comment}{*\ \ Return\ value:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00140}00140\ \textcolor{comment}{*\ \ \ \ !=\ 0\ \ \ \ \ -\/\ Handle\ to\ the\ object\ to\ open,\ otherwise\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00141}00141\ \textcolor{comment}{*\ \ \ \ ==\ 0\ \ \ \ \ -\/"{}device"{}\ is\ not\ handled\ by\ this\ module}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00142}00142\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00143}00143\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00144}00144\ FILEHANDLE\ \_sys\_open(\textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ *\ sName,\ \textcolor{keywordtype}{int}\ OpenMode)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00145}00145\ \ \ (void)OpenMode;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00146}00146\ \ \ \textcolor{comment}{//\ Register\ standard\ Input\ Output\ devices.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00147}00147\ \ \ \textcolor{keywordflow}{if}\ (strcmp(sName,\ \_\_stdout\_name)\ ==\ 0)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00148}00148\ \ \ \ \ \textcolor{keywordflow}{return}\ (STDOUT);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00149}00149\ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (strcmp(sName,\ \_\_stderr\_name)\ ==\ 0)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00150}00150\ \ \ \ \ \textcolor{keywordflow}{return}\ (STDERR);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00151}00151\ \ \ \}\ \textcolor{keywordflow}{else}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00152}00152\ \ \ \textcolor{keywordflow}{return}\ (0);\ \ \textcolor{comment}{//\ Not\ implemented}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00153}00153\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00154}00154\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00155}00155\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00156}00156\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00157}00157\ \textcolor{comment}{*\ \ \ \ \ \ \ \_sys\_close}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00158}00158\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00159}00159\ \textcolor{comment}{*\ \ Function\ description:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00160}00160\ \textcolor{comment}{*\ \ \ \ Closes\ the\ handle\ to\ the\ open\ device/file}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00161}00161\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00162}00162\ \textcolor{comment}{*\ \ Parameters:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00163}00163\ \textcolor{comment}{*\ \ \ \ hFile\ \ \ \ -\/\ Handle\ to\ a\ file\ opened\ via\ \_sys\_open}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00164}00164\ \textcolor{comment}{*\ \ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00165}00165\ \textcolor{comment}{*\ \ Return\ value:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00166}00166\ \textcolor{comment}{*\ \ \ \ 0\ \ \ \ \ -\/\ device/file\ closed}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00167}00167\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00168}00168\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00169}00169\ \textcolor{keywordtype}{int}\ \_sys\_close(FILEHANDLE\ hFile)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00170}00170\ \ \ (void)hFile;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00171}00171\ \ \ \textcolor{keywordflow}{return}\ 0;\ \ \textcolor{comment}{//\ Not\ implemented}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00172}00172\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00173}00173\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00174}00174\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00175}00175\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00176}00176\ \textcolor{comment}{*\ \ \ \ \ \ \ \_sys\_write}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00177}00177\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00178}00178\ \textcolor{comment}{*\ \ Function\ description:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00179}00179\ \textcolor{comment}{*\ \ \ \ Writes\ the\ data\ to\ an\ open\ handle.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00180}00180\ \textcolor{comment}{*\ \ \ \ Currently\ this\ function\ only\ outputs\ data\ to\ the\ console}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00181}00181\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00182}00182\ \textcolor{comment}{*\ \ Parameters:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00183}00183\ \textcolor{comment}{*\ \ \ \ hFile\ \ \ \ -\/\ Handle\ to\ a\ file\ opened\ via\ \_sys\_open}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00184}00184\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ -\/\ Pointer\ to\ the\ data\ that\ shall\ be\ written}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00185}00185\ \textcolor{comment}{*\ \ \ \ NumBytes\ \ \ \ \ \ -\/\ Number\ of\ bytes\ to\ write}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00186}00186\ \textcolor{comment}{*\ \ \ \ Mode\ \ \ \ \ -\/\ The\ Mode\ that\ shall\ be\ used}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00187}00187\ \textcolor{comment}{*\ \ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00188}00188\ \textcolor{comment}{*\ \ Return\ value:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00189}00189\ \textcolor{comment}{*\ \ \ \ Number\ of\ bytes\ *not*\ written\ to\ the\ file/device}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00190}00190\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00191}00191\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00192}00192\ \textcolor{keywordtype}{int}\ \_sys\_write(FILEHANDLE\ hFile,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char}\ *\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ NumBytes,\ \textcolor{keywordtype}{int}\ Mode)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00193}00193\ \ \ \textcolor{keywordtype}{int}\ r\ =\ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00194}00194\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00195}00195\ \ \ (void)Mode;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00196}00196\ \ \ \textcolor{keywordflow}{if}\ (hFile\ ==\ STDOUT)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00197}00197\ \ \ \ \ SEGGER\_RTT\_Write(0,\ (\textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*)pBuffer,\ NumBytes);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00198}00198\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00199}00199\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00200}00200\ \ \ \textcolor{keywordflow}{return}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00201}00201\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00202}00202\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00203}00203\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00204}00204\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00205}00205\ \textcolor{comment}{*\ \ \ \ \ \ \ \_sys\_read}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00206}00206\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00207}00207\ \textcolor{comment}{*\ \ Function\ description:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00208}00208\ \textcolor{comment}{*\ \ \ \ Reads\ data\ from\ an\ open\ handle.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00209}00209\ \textcolor{comment}{*\ \ \ \ Currently\ this\ modules\ does\ nothing.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00210}00210\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00211}00211\ \textcolor{comment}{*\ \ Parameters:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00212}00212\ \textcolor{comment}{*\ \ \ \ hFile\ \ \ \ -\/\ Handle\ to\ a\ file\ opened\ via\ \_sys\_open}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00213}00213\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ -\/\ Pointer\ to\ buffer\ to\ store\ the\ read\ data}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00214}00214\ \textcolor{comment}{*\ \ \ \ NumBytes\ \ \ \ \ \ -\/\ Number\ of\ bytes\ to\ read}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00215}00215\ \textcolor{comment}{*\ \ \ \ Mode\ \ \ \ \ -\/\ The\ Mode\ that\ shall\ be\ used}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00216}00216\ \textcolor{comment}{*\ \ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00217}00217\ \textcolor{comment}{*\ \ Return\ value:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00218}00218\ \textcolor{comment}{*\ \ \ \ Number\ of\ bytes\ read\ from\ the\ file/device}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00219}00219\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00220}00220\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00221}00221\ \textcolor{keywordtype}{int}\ \_sys\_read(FILEHANDLE\ hFile,\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char}\ *\ pBuffer,\ \textcolor{keywordtype}{unsigned}\ NumBytes,\ \textcolor{keywordtype}{int}\ Mode)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00222}00222\ \ \ (void)hFile;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00223}00223\ \ \ (void)pBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00224}00224\ \ \ (void)NumBytes;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00225}00225\ \ \ (void)Mode;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00226}00226\ \ \ \textcolor{keywordflow}{return}\ (0);\ \ \textcolor{comment}{//\ Not\ implemented}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00227}00227\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00228}00228\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00229}00229\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00230}00230\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00231}00231\ \textcolor{comment}{*\ \ \ \ \ \ \ \_sys\_istty}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00232}00232\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00233}00233\ \textcolor{comment}{*\ \ Function\ description:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00234}00234\ \textcolor{comment}{*\ \ \ \ This\ function\ shall\ return\ whether\ the\ opened\ file\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00235}00235\ \textcolor{comment}{*\ \ \ \ is\ a\ console\ device\ or\ not.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00236}00236\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00237}00237\ \textcolor{comment}{*\ \ Parameters:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00238}00238\ \textcolor{comment}{*\ \ \ \ hFile\ \ \ \ -\/\ Handle\ to\ a\ file\ opened\ via\ \_sys\_open}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00239}00239\ \textcolor{comment}{*\ \ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00240}00240\ \textcolor{comment}{*\ \ Return\ value:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00241}00241\ \textcolor{comment}{*\ \ \ \ 1\ \ \ \ \ \ \ -\/\ Device\ is\ \ \ \ \ a\ console}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00242}00242\ \textcolor{comment}{*\ \ \ \ 0\ \ \ \ \ \ \ -\/\ Device\ is\ not\ a\ console}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00243}00243\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00244}00244\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00245}00245\ \textcolor{keywordtype}{int}\ \_sys\_istty(FILEHANDLE\ hFile)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00246}00246\ \ \ \textcolor{keywordflow}{if}\ (hFile\ >\ 0x8000)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00247}00247\ \ \ \ \ \textcolor{keywordflow}{return}\ (1);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00248}00248\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00249}00249\ \ \ \textcolor{keywordflow}{return}\ (0);\ \ \textcolor{comment}{//\ Not\ implemented}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00250}00250\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00251}00251\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00252}00252\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00253}00253\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00254}00254\ \textcolor{comment}{*\ \ \ \ \ \ \ \_sys\_seek}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00255}00255\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00256}00256\ \textcolor{comment}{*\ \ Function\ description:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00257}00257\ \textcolor{comment}{*\ \ \ \ Seeks\ via\ the\ file\ to\ a\ specific\ position}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00258}00258\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00259}00259\ \textcolor{comment}{*\ \ Parameters:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00260}00260\ \textcolor{comment}{*\ \ \ \ hFile\ \ -\/\ Handle\ to\ a\ file\ opened\ via\ \_sys\_open}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00261}00261\ \textcolor{comment}{*\ \ \ \ Pos\ \ \ \ -\/\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00262}00262\ \textcolor{comment}{*\ \ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00263}00263\ \textcolor{comment}{*\ \ Return\ value:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00264}00264\ \textcolor{comment}{*\ \ \ \ int\ \ \ \ \ \ \ -\/\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00265}00265\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00266}00266\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00267}00267\ \textcolor{keywordtype}{int}\ \_sys\_seek(FILEHANDLE\ hFile,\ \textcolor{keywordtype}{long}\ Pos)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00268}00268\ \ \ (void)hFile;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00269}00269\ \ \ (void)Pos;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00270}00270\ \ \ \textcolor{keywordflow}{return}\ (0);\ \ \textcolor{comment}{//\ Not\ implemented}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00271}00271\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00272}00272\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00273}00273\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00274}00274\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00275}00275\ \textcolor{comment}{*\ \ \ \ \ \ \ \_sys\_ensure}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00276}00276\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00277}00277\ \textcolor{comment}{*\ \ Function\ description:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00278}00278\ \textcolor{comment}{*\ \ \ \ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00279}00279\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00280}00280\ \textcolor{comment}{*\ \ Parameters:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00281}00281\ \textcolor{comment}{*\ \ \ \ hFile\ \ \ \ -\/\ Handle\ to\ a\ file\ opened\ via\ \_sys\_open}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00282}00282\ \textcolor{comment}{*\ \ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00283}00283\ \textcolor{comment}{*\ \ Return\ value:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00284}00284\ \textcolor{comment}{*\ \ \ \ int\ \ \ \ \ \ \ -\/\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00285}00285\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00286}00286\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00287}00287\ \textcolor{keywordtype}{int}\ \_sys\_ensure(FILEHANDLE\ hFile)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00288}00288\ \ \ (void)hFile;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00289}00289\ \ \ \textcolor{keywordflow}{return}\ (-\/1);\ \ \textcolor{comment}{//\ Not\ implemented}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00290}00290\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00291}00291\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00292}00292\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00293}00293\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00294}00294\ \textcolor{comment}{*\ \ \ \ \ \ \ \_sys\_flen}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00295}00295\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00296}00296\ \textcolor{comment}{*\ \ Function\ description:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00297}00297\ \textcolor{comment}{*\ \ \ \ Returns\ the\ length\ of\ the\ opened\ file\ handle}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00298}00298\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00299}00299\ \textcolor{comment}{*\ \ Parameters:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00300}00300\ \textcolor{comment}{*\ \ \ \ hFile\ \ \ \ -\/\ Handle\ to\ a\ file\ opened\ via\ \_sys\_open}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00301}00301\ \textcolor{comment}{*\ \ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00302}00302\ \textcolor{comment}{*\ \ Return\ value:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00303}00303\ \textcolor{comment}{*\ \ \ \ Length\ of\ the\ file}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00304}00304\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00305}00305\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00306}00306\ \textcolor{keywordtype}{long}\ \_sys\_flen(FILEHANDLE\ hFile)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00307}00307\ \ \ (void)hFile;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00308}00308\ \ \ \textcolor{keywordflow}{return}\ (0);\ \ \textcolor{comment}{//\ Not\ implemented}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00309}00309\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00310}00310\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00311}00311\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00312}00312\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00313}00313\ \textcolor{comment}{*\ \ \ \ \ \ \ \_sys\_tmpnam}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00314}00314\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00315}00315\ \textcolor{comment}{*\ \ Function\ description:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00316}00316\ \textcolor{comment}{*\ \ \ \ This\ function\ converts\ the\ file\ number\ fileno\ for\ a\ temporary\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00317}00317\ \textcolor{comment}{*\ \ \ \ file\ to\ a\ unique\ filename,\ for\ example,\ tmp0001.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00318}00318\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00319}00319\ \textcolor{comment}{*\ \ Parameters:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00320}00320\ \textcolor{comment}{*\ \ \ \ pBuffer\ \ \ \ -\/\ Pointer\ to\ a\ buffer\ to\ store\ the\ name}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00321}00321\ \textcolor{comment}{*\ \ \ \ FileNum\ \ \ \ -\/\ file\ number\ to\ convert}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00322}00322\ \textcolor{comment}{*\ \ \ \ MaxLen\ \ \ \ \ -\/\ Size\ of\ the\ buffer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00323}00323\ \textcolor{comment}{*\ \ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00324}00324\ \textcolor{comment}{*\ \ Return\ value:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00325}00325\ \textcolor{comment}{*\ \ \ \ \ 1\ -\/\ Error}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00326}00326\ \textcolor{comment}{*\ \ \ \ \ 0\ -\/\ Success\ \ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00327}00327\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00328}00328\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00329}00329\ \textcolor{keywordtype}{int}\ \_sys\_tmpnam2(\textcolor{keywordtype}{char}\ *\ pBuffer,\ \textcolor{keywordtype}{int}\ FileNum,\ \textcolor{keywordtype}{unsigned}\ MaxLen)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00330}00330\ \ \ (void)pBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00331}00331\ \ \ (void)FileNum;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00332}00332\ \ \ (void)MaxLen;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00333}00333\ \ \ \textcolor{keywordflow}{return}\ (1);\ \ \textcolor{comment}{//\ Not\ implemented}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00334}00334\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00335}00335\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00336}00336\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00337}00337\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00338}00338\ \textcolor{comment}{*\ \ \ \ \ \ \ \_sys\_command\_string}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00339}00339\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00340}00340\ \textcolor{comment}{*\ \ Function\ description:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00341}00341\ \textcolor{comment}{*\ \ \ \ This\ function\ shall\ execute\ a\ system\ command.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00342}00342\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00343}00343\ \textcolor{comment}{*\ \ Parameters:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00344}00344\ \textcolor{comment}{*\ \ \ \ cmd\ \ \ \ -\/\ Pointer\ to\ the\ command\ string}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00345}00345\ \textcolor{comment}{*\ \ \ \ len\ \ \ \ -\/\ Length\ of\ the\ string}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00346}00346\ \textcolor{comment}{*\ \ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00347}00347\ \textcolor{comment}{*\ \ Return\ value:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00348}00348\ \textcolor{comment}{*\ \ \ \ ==\ NULL\ -\/\ Command\ was\ not\ successfully\ executed}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00349}00349\ \textcolor{comment}{*\ \ \ \ ==\ sCmd\ -\/\ Command\ was\ passed\ successfully}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00350}00350\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00351}00351\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00352}00352\ \textcolor{keywordtype}{char}\ *\ \_sys\_command\_string(\textcolor{keywordtype}{char}\ *\ cmd,\ \textcolor{keywordtype}{int}\ len)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00353}00353\ \ \ (void)len;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00354}00354\ \ \ \textcolor{keywordflow}{return}\ cmd;\ \ \textcolor{comment}{//\ Not\ implemented}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00355}00355\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00356}00356\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00357}00357\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00358}00358\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00359}00359\ \textcolor{comment}{*\ \ \ \ \ \ \ \_sys\_exit}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00360}00360\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00361}00361\ \textcolor{comment}{*\ \ Function\ description:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00362}00362\ \textcolor{comment}{*\ \ \ \ This\ function\ is\ called\ when\ the\ application\ returns\ from\ main}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00363}00363\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00364}00364\ \textcolor{comment}{*\ \ Parameters:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00365}00365\ \textcolor{comment}{*\ \ \ \ ReturnCode\ \ \ \ -\/\ Return\ code\ from\ the\ main\ function}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00366}00366\ \textcolor{comment}{*\ \ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00367}00367\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00368}00368\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00369}00369\ \textcolor{keywordtype}{void}\ \_sys\_exit(\textcolor{keywordtype}{int}\ ReturnCode)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00370}00370\ \ \ (void)ReturnCode;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00371}00371\ \ \ \textcolor{keywordflow}{while}\ (1);\ \ \textcolor{comment}{//\ Not\ implemented}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00372}00372\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00373}00373\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00374}00374\ \textcolor{preprocessor}{\#if\ \_\_ARMCC\_VERSION\ >=\ 5000000}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00375}00375\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00376}00376\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00377}00377\ \textcolor{comment}{*\ \ \ \ \ \ \ stdout\_putchar}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00378}00378\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00379}00379\ \textcolor{comment}{*\ \ Function\ description:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00380}00380\ \textcolor{comment}{*\ \ \ \ Put\ a\ character\ to\ the\ stdout}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00381}00381\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00382}00382\ \textcolor{comment}{*\ \ Parameters:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00383}00383\ \textcolor{comment}{*\ \ \ \ ch\ \ \ \ -\/\ Character\ to\ output}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00384}00384\ \textcolor{comment}{*\ \ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00385}00385\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00386}00386\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00387}00387\ \textcolor{keywordtype}{int}\ stdout\_putchar(\textcolor{keywordtype}{int}\ ch)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00388}00388\ \ \ (void)ch;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00389}00389\ \ \ \textcolor{keywordflow}{return}\ ch;\ \ \textcolor{comment}{//\ Not\ implemented}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00390}00390\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00391}00391\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00392}00392\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00393}00393\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source_l00394}00394\ \textcolor{comment}{/***************************\ End\ of\ file\ ****************************/}} + +\end{DoxyCode} diff --git a/Doc/latex/_s_e_g_g_e_r___r_t_t__printf_8c_source.tex b/Doc/latex/_s_e_g_g_e_r___r_t_t__printf_8c_source.tex new file mode 100644 index 0000000..e39dd74 --- /dev/null +++ b/Doc/latex/_s_e_g_g_e_r___r_t_t__printf_8c_source.tex @@ -0,0 +1,514 @@ +\doxysection{SEGGER\+\_\+\+RTT\+\_\+printf.\+c} +\hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source}{}\label{_s_e_g_g_e_r___r_t_t__printf_8c_source}\index{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/RTT/SEGGER\_RTT\_printf.c@{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/RTT/SEGGER\_RTT\_printf.c}} + +\begin{DoxyCode}{0} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00001}00001\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00002}00002\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SEGGER\ Microcontroller\ GmbH\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00003}00003\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ The\ Embedded\ Experts\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00004}00004\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00005}00005\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00006}00006\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ (c)\ 1995\ -\/\ 2021\ SEGGER\ Microcontroller\ GmbH\ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00007}00007\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00008}00008\ \textcolor{comment}{*\ \ \ \ \ \ \ www.segger.com\ \ \ \ \ Support:\ support@segger.com\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00009}00009\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00010}00010\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00011}00011\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00012}00012\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\ RTT\ *\ Real\ Time\ Transfer\ for\ embedded\ targets\ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00013}00013\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00014}00014\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00015}00015\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00016}00016\ \textcolor{comment}{*\ All\ rights\ reserved.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00017}00017\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00018}00018\ \textcolor{comment}{*\ SEGGER\ strongly\ recommends\ to\ not\ make\ any\ changes\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00019}00019\ \textcolor{comment}{*\ to\ or\ modify\ the\ source\ code\ of\ this\ software\ in\ order\ to\ stay\ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00020}00020\ \textcolor{comment}{*\ compatible\ with\ the\ RTT\ protocol\ and\ J-\/Link.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00021}00021\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00022}00022\ \textcolor{comment}{*\ Redistribution\ and\ use\ in\ source\ and\ binary\ forms,\ with\ or\ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00023}00023\ \textcolor{comment}{*\ without\ modification,\ are\ permitted\ provided\ that\ the\ following\ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00024}00024\ \textcolor{comment}{*\ condition\ is\ met:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00025}00025\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00026}00026\ \textcolor{comment}{*\ o\ Redistributions\ of\ source\ code\ must\ retain\ the\ above\ copyright\ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00027}00027\ \textcolor{comment}{*\ \ \ notice,\ this\ condition\ and\ the\ following\ disclaimer.\ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00028}00028\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00029}00029\ \textcolor{comment}{*\ THIS\ SOFTWARE\ IS\ PROVIDED\ BY\ THE\ COPYRIGHT\ HOLDERS\ AND\ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00030}00030\ \textcolor{comment}{*\ CONTRIBUTORS\ "{}AS\ IS"{}\ AND\ ANY\ EXPRESS\ OR\ IMPLIED\ WARRANTIES,\ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00031}00031\ \textcolor{comment}{*\ INCLUDING,\ BUT\ NOT\ LIMITED\ TO,\ THE\ IMPLIED\ WARRANTIES\ OF\ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00032}00032\ \textcolor{comment}{*\ MERCHANTABILITY\ AND\ FITNESS\ FOR\ A\ PARTICULAR\ PURPOSE\ ARE\ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00033}00033\ \textcolor{comment}{*\ DISCLAIMED.\ IN\ NO\ EVENT\ SHALL\ SEGGER\ Microcontroller\ BE\ LIABLE\ FOR\ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00034}00034\ \textcolor{comment}{*\ ANY\ DIRECT,\ INDIRECT,\ INCIDENTAL,\ SPECIAL,\ EXEMPLARY,\ OR\ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00035}00035\ \textcolor{comment}{*\ CONSEQUENTIAL\ DAMAGES\ (INCLUDING,\ BUT\ NOT\ LIMITED\ TO,\ PROCUREMENT\ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00036}00036\ \textcolor{comment}{*\ OF\ SUBSTITUTE\ GOODS\ OR\ SERVICES;\ LOSS\ OF\ USE,\ DATA,\ OR\ PROFITS;\ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00037}00037\ \textcolor{comment}{*\ OR\ BUSINESS\ INTERRUPTION)\ HOWEVER\ CAUSED\ AND\ ON\ ANY\ THEORY\ OF\ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00038}00038\ \textcolor{comment}{*\ LIABILITY,\ WHETHER\ IN\ CONTRACT,\ STRICT\ LIABILITY,\ OR\ TORT\ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00039}00039\ \textcolor{comment}{*\ (INCLUDING\ NEGLIGENCE\ OR\ OTHERWISE)\ ARISING\ IN\ ANY\ WAY\ OUT\ OF\ THE\ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00040}00040\ \textcolor{comment}{*\ USE\ OF\ THIS\ SOFTWARE,\ EVEN\ IF\ ADVISED\ OF\ THE\ POSSIBILITY\ OF\ SUCH\ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00041}00041\ \textcolor{comment}{*\ DAMAGE.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00042}00042\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00043}00043\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00044}00044\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00045}00045\ \textcolor{comment}{*\ \ \ \ \ \ \ RTT\ version:\ 8.10g\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00046}00046\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00047}00047\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00048}00048\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00049}00049\ \textcolor{comment}{-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/END-\/OF-\/HEADER-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00050}00050\ \textcolor{comment}{File\ \ \ \ :\ SEGGER\_RTT\_printf.c}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00051}00051\ \textcolor{comment}{Purpose\ :\ Replacement\ for\ printf\ to\ write\ formatted\ data\ via\ RTT}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00052}00052\ \textcolor{comment}{Revision:\ \$Rev:\ 17697\ \$}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00053}00053\ \textcolor{comment}{-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00054}00054\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00055}00055\ \textcolor{preprocessor}{\#include\ "{}SEGGER\_RTT.h"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00056}00056\ \textcolor{preprocessor}{\#include\ "{}SEGGER\_RTT\_Conf.h"{}}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00057}00057\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00058}00058\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00059}00059\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00060}00060\ \textcolor{comment}{*\ \ \ \ \ \ \ Defines,\ configurable}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00061}00061\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00062}00062\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00063}00063\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00064}00064\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00065}00065\ \textcolor{preprocessor}{\#ifndef\ SEGGER\_RTT\_PRINTF\_BUFFER\_SIZE}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00066}00066\ \textcolor{preprocessor}{\ \ \#define\ SEGGER\_RTT\_PRINTF\_BUFFER\_SIZE\ (64)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00067}00067\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00068}00068\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00069}00069\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00070}00070\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00071}00071\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00072}00072\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00073}00073\ \textcolor{preprocessor}{\#define\ FORMAT\_FLAG\_LEFT\_JUSTIFY\ \ \ (1u\ <<\ 0)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00074}00074\ \textcolor{preprocessor}{\#define\ FORMAT\_FLAG\_PAD\_ZERO\ \ \ \ \ \ \ (1u\ <<\ 1)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00075}00075\ \textcolor{preprocessor}{\#define\ FORMAT\_FLAG\_PRINT\_SIGN\ \ \ \ \ (1u\ <<\ 2)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00076}00076\ \textcolor{preprocessor}{\#define\ FORMAT\_FLAG\_ALTERNATE\ \ \ \ \ \ (1u\ <<\ 3)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00077}00077\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00078}00078\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00079}00079\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00080}00080\ \textcolor{comment}{*\ \ \ \ \ \ \ Types}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00081}00081\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00082}00082\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00083}00083\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00084}00084\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00085}\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c}{00085}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00086}00086\ \ \ \textcolor{keywordtype}{char}*\ \ \ \ \ pBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00087}00087\ \ \ \textcolor{keywordtype}{unsigned}\ \ BufferSize;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00088}00088\ \ \ \textcolor{keywordtype}{unsigned}\ \ Cnt;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00089}00089\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00090}00090\ \ \ \textcolor{keywordtype}{int}\ \ \ ReturnValue;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00091}00091\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00092}00092\ \ \ \textcolor{keywordtype}{unsigned}\ RTTBufferIndex;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00093}00093\ \}\ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c}{SEGGER\_RTT\_PRINTF\_DESC}};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00094}00094\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00095}00095\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00096}00096\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00097}00097\ \textcolor{comment}{*\ \ \ \ \ \ \ Function\ prototypes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00098}00098\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00099}00099\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00100}00100\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00101}00101\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00102}00102\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00103}00103\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00104}00104\ \textcolor{comment}{*\ \ \ \ \ \ \ Static\ code}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00105}00105\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00106}00106\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00107}00107\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00108}00108\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00109}00109\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00110}00110\ \textcolor{comment}{*\ \ \ \ \ \ \ \_StoreChar}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00111}00111\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00112}00112\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{void}\ \_StoreChar(\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c}{SEGGER\_RTT\_PRINTF\_DESC}}\ *\ p,\ \textcolor{keywordtype}{char}\ c)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00113}00113\ \ \ \textcolor{keywordtype}{unsigned}\ Cnt;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00114}00114\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00115}00115\ \ \ Cnt\ =\ p-\/>Cnt;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00116}00116\ \ \ \textcolor{keywordflow}{if}\ ((Cnt\ +\ 1u)\ <=\ p-\/>BufferSize)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00117}00117\ \ \ \ \ *(p-\/>pBuffer\ +\ Cnt)\ =\ c;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00118}00118\ \ \ \ \ p-\/>Cnt\ =\ Cnt\ +\ 1u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00119}00119\ \ \ \ \ p-\/>ReturnValue++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00120}00120\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00121}00121\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00122}00122\ \ \ \textcolor{comment}{//\ Write\ part\ of\ string,\ when\ the\ buffer\ is\ full}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00123}00123\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00124}00124\ \ \ \textcolor{keywordflow}{if}\ (p-\/>Cnt\ ==\ p-\/>BufferSize)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00125}00125\ \ \ \ \ \textcolor{keywordflow}{if}\ (SEGGER\_RTT\_Write(p-\/>RTTBufferIndex,\ p-\/>pBuffer,\ p-\/>Cnt)\ !=\ p-\/>Cnt)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00126}00126\ \ \ \ \ \ \ p-\/>ReturnValue\ =\ -\/1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00127}00127\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00128}00128\ \ \ \ \ \ \ p-\/>Cnt\ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00129}00129\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00130}00130\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00131}00131\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00132}00132\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00133}00133\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00134}00134\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00135}00135\ \textcolor{comment}{*\ \ \ \ \ \ \ \_PrintUnsigned}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00136}00136\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00137}00137\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{void}\ \_PrintUnsigned(\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c}{SEGGER\_RTT\_PRINTF\_DESC}}\ *\ pBufferDesc,\ \textcolor{keywordtype}{unsigned}\ v,\ \textcolor{keywordtype}{unsigned}\ Base,\ \textcolor{keywordtype}{unsigned}\ NumDigits,\ \textcolor{keywordtype}{unsigned}\ FieldWidth,\ \textcolor{keywordtype}{unsigned}\ FormatFlags)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00138}00138\ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ \_aV2C[16]\ =\ \{\textcolor{charliteral}{'0'},\ \textcolor{charliteral}{'1'},\ \textcolor{charliteral}{'2'},\ \textcolor{charliteral}{'3'},\ \textcolor{charliteral}{'4'},\ \textcolor{charliteral}{'5'},\ \textcolor{charliteral}{'6'},\ \textcolor{charliteral}{'7'},\ \textcolor{charliteral}{'8'},\ \textcolor{charliteral}{'9'},\ \textcolor{charliteral}{'A'},\ \textcolor{charliteral}{'B'},\ \textcolor{charliteral}{'C'},\ \textcolor{charliteral}{'D'},\ \textcolor{charliteral}{'E'},\ \textcolor{charliteral}{'F'}\ \};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00139}00139\ \ \ \textcolor{keywordtype}{unsigned}\ Div;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00140}00140\ \ \ \textcolor{keywordtype}{unsigned}\ Digit;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00141}00141\ \ \ \textcolor{keywordtype}{unsigned}\ Number;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00142}00142\ \ \ \textcolor{keywordtype}{unsigned}\ Width;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00143}00143\ \ \ \textcolor{keywordtype}{char}\ c;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00144}00144\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00145}00145\ \ \ Number\ =\ v;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00146}00146\ \ \ Digit\ =\ 1u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00147}00147\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00148}00148\ \ \ \textcolor{comment}{//\ Get\ actual\ field\ width}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00149}00149\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00150}00150\ \ \ Width\ =\ 1u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00151}00151\ \ \ \textcolor{keywordflow}{while}\ (Number\ >=\ Base)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00152}00152\ \ \ \ \ Number\ =\ (Number\ /\ Base);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00153}00153\ \ \ \ \ Width++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00154}00154\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00155}00155\ \ \ \textcolor{keywordflow}{if}\ (NumDigits\ >\ Width)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00156}00156\ \ \ \ \ Width\ =\ NumDigits;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00157}00157\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00158}00158\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00159}00159\ \ \ \textcolor{comment}{//\ Print\ leading\ chars\ if\ necessary}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00160}00160\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00161}00161\ \ \ \textcolor{keywordflow}{if}\ ((FormatFlags\ \&\ FORMAT\_FLAG\_LEFT\_JUSTIFY)\ ==\ 0u)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00162}00162\ \ \ \ \ \textcolor{keywordflow}{if}\ (FieldWidth\ !=\ 0u)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00163}00163\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (((FormatFlags\ \&\ FORMAT\_FLAG\_PAD\_ZERO)\ ==\ FORMAT\_FLAG\_PAD\_ZERO)\ \&\&\ (NumDigits\ ==\ 0u))\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00164}00164\ \ \ \ \ \ \ \ \ c\ =\ \textcolor{charliteral}{'0'};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00165}00165\ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00166}00166\ \ \ \ \ \ \ \ \ c\ =\ \textcolor{charliteral}{'\ '};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00167}00167\ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00168}00168\ \ \ \ \ \ \ \textcolor{keywordflow}{while}\ ((FieldWidth\ !=\ 0u)\ \&\&\ (Width\ <\ FieldWidth))\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00169}00169\ \ \ \ \ \ \ \ \ FieldWidth-\/-\/;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00170}00170\ \ \ \ \ \ \ \ \ \_StoreChar(pBufferDesc,\ c);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00171}00171\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (pBufferDesc-\/>ReturnValue\ <\ 0)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00172}00172\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00173}00173\ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00174}00174\ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00175}00175\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00176}00176\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00177}00177\ \ \ \textcolor{keywordflow}{if}\ (pBufferDesc-\/>ReturnValue\ >=\ 0)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00178}00178\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00179}00179\ \ \ \ \ \textcolor{comment}{//\ Compute\ Digit.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00180}00180\ \ \ \ \ \textcolor{comment}{//\ Loop\ until\ Digit\ has\ the\ value\ of\ the\ highest\ digit\ required.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00181}00181\ \ \ \ \ \textcolor{comment}{//\ Example:\ If\ the\ output\ is\ 345\ (Base\ 10),\ loop\ 2\ times\ until\ Digit\ is\ 100.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00182}00182\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00183}00183\ \ \ \ \ \textcolor{keywordflow}{while}\ (1)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00184}00184\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (NumDigits\ >\ 1u)\ \{\ \ \ \ \ \ \ \textcolor{comment}{//\ User\ specified\ a\ min\ number\ of\ digits\ to\ print?\ =>\ Make\ sure\ we\ loop\ at\ least\ that\ often,\ before\ checking\ anything\ else\ (>\ 1\ check\ avoids\ problems\ with\ NumDigits\ being\ signed\ /\ unsigned)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00185}00185\ \ \ \ \ \ \ \ \ NumDigits-\/-\/;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00186}00186\ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00187}00187\ \ \ \ \ \ \ \ \ Div\ =\ v\ /\ Digit;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00188}00188\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (Div\ <\ Base)\ \{\ \ \ \ \ \ \ \ \textcolor{comment}{//\ Is\ our\ divider\ big\ enough\ to\ extract\ the\ highest\ digit\ from\ value?\ =>\ Done}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00189}00189\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00190}00190\ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00191}00191\ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00192}00192\ \ \ \ \ \ \ Digit\ *=\ Base;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00193}00193\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00194}00194\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00195}00195\ \ \ \ \ \textcolor{comment}{//\ Output\ digits}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00196}00196\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00197}00197\ \ \ \ \ \textcolor{keywordflow}{do}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00198}00198\ \ \ \ \ \ \ Div\ =\ v\ /\ Digit;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00199}00199\ \ \ \ \ \ \ v\ -\/=\ Div\ *\ Digit;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00200}00200\ \ \ \ \ \ \ \_StoreChar(pBufferDesc,\ \_aV2C[Div]);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00201}00201\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (pBufferDesc-\/>ReturnValue\ <\ 0)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00202}00202\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00203}00203\ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00204}00204\ \ \ \ \ \ \ Digit\ /=\ Base;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00205}00205\ \ \ \ \ \}\ \textcolor{keywordflow}{while}\ (Digit);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00206}00206\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00207}00207\ \ \ \ \ \textcolor{comment}{//\ Print\ trailing\ spaces\ if\ necessary}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00208}00208\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00209}00209\ \ \ \ \ \textcolor{keywordflow}{if}\ ((FormatFlags\ \&\ FORMAT\_FLAG\_LEFT\_JUSTIFY)\ ==\ FORMAT\_FLAG\_LEFT\_JUSTIFY)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00210}00210\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (FieldWidth\ !=\ 0u)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00211}00211\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{while}\ ((FieldWidth\ !=\ 0u)\ \&\&\ (Width\ <\ FieldWidth))\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00212}00212\ \ \ \ \ \ \ \ \ \ \ FieldWidth-\/-\/;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00213}00213\ \ \ \ \ \ \ \ \ \ \ \_StoreChar(pBufferDesc,\ \textcolor{charliteral}{'\ '});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00214}00214\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (pBufferDesc-\/>ReturnValue\ <\ 0)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00215}00215\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00216}00216\ \ \ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00217}00217\ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00218}00218\ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00219}00219\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00220}00220\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00221}00221\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00222}00222\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00223}00223\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00224}00224\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00225}00225\ \textcolor{comment}{*\ \ \ \ \ \ \ \_PrintInt}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00226}00226\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00227}00227\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{void}\ \_PrintInt(\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c}{SEGGER\_RTT\_PRINTF\_DESC}}\ *\ pBufferDesc,\ \textcolor{keywordtype}{int}\ v,\ \textcolor{keywordtype}{unsigned}\ Base,\ \textcolor{keywordtype}{unsigned}\ NumDigits,\ \textcolor{keywordtype}{unsigned}\ FieldWidth,\ \textcolor{keywordtype}{unsigned}\ FormatFlags)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00228}00228\ \ \ \textcolor{keywordtype}{unsigned}\ Width;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00229}00229\ \ \ \textcolor{keywordtype}{int}\ Number;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00230}00230\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00231}00231\ \ \ Number\ =\ (v\ <\ 0)\ ?\ -\/v\ :\ v;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00232}00232\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00233}00233\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00234}00234\ \ \ \textcolor{comment}{//\ Get\ actual\ field\ width}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00235}00235\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00236}00236\ \ \ Width\ =\ 1u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00237}00237\ \ \ \textcolor{keywordflow}{while}\ (Number\ >=\ (\textcolor{keywordtype}{int})Base)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00238}00238\ \ \ \ \ Number\ =\ (Number\ /\ (int)Base);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00239}00239\ \ \ \ \ Width++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00240}00240\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00241}00241\ \ \ \textcolor{keywordflow}{if}\ (NumDigits\ >\ Width)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00242}00242\ \ \ \ \ Width\ =\ NumDigits;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00243}00243\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00244}00244\ \ \ \textcolor{keywordflow}{if}\ ((FieldWidth\ >\ 0u)\ \&\&\ ((v\ <\ 0)\ ||\ ((FormatFlags\ \&\ FORMAT\_FLAG\_PRINT\_SIGN)\ ==\ FORMAT\_FLAG\_PRINT\_SIGN)))\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00245}00245\ \ \ \ \ FieldWidth-\/-\/;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00246}00246\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00247}00247\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00248}00248\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00249}00249\ \ \ \textcolor{comment}{//\ Print\ leading\ spaces\ if\ necessary}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00250}00250\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00251}00251\ \ \ \textcolor{keywordflow}{if}\ ((((FormatFlags\ \&\ FORMAT\_FLAG\_PAD\_ZERO)\ ==\ 0u)\ ||\ (NumDigits\ !=\ 0u))\ \&\&\ ((FormatFlags\ \&\ FORMAT\_FLAG\_LEFT\_JUSTIFY)\ ==\ 0u))\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00252}00252\ \ \ \ \ \textcolor{keywordflow}{if}\ (FieldWidth\ !=\ 0u)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00253}00253\ \ \ \ \ \ \ \textcolor{keywordflow}{while}\ ((FieldWidth\ !=\ 0u)\ \&\&\ (Width\ <\ FieldWidth))\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00254}00254\ \ \ \ \ \ \ \ \ FieldWidth-\/-\/;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00255}00255\ \ \ \ \ \ \ \ \ \_StoreChar(pBufferDesc,\ \textcolor{charliteral}{'\ '});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00256}00256\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (pBufferDesc-\/>ReturnValue\ <\ 0)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00257}00257\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00258}00258\ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00259}00259\ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00260}00260\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00261}00261\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00262}00262\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00263}00263\ \ \ \textcolor{comment}{//\ Print\ sign\ if\ necessary}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00264}00264\ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00265}00265\ \ \ \textcolor{keywordflow}{if}\ (pBufferDesc-\/>ReturnValue\ >=\ 0)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00266}00266\ \ \ \ \ \textcolor{keywordflow}{if}\ (v\ <\ 0)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00267}00267\ \ \ \ \ \ \ v\ =\ -\/v;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00268}00268\ \ \ \ \ \ \ \_StoreChar(pBufferDesc,\ \textcolor{charliteral}{'-\/'});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00269}00269\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ ((FormatFlags\ \&\ FORMAT\_FLAG\_PRINT\_SIGN)\ ==\ FORMAT\_FLAG\_PRINT\_SIGN)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00270}00270\ \ \ \ \ \ \ \_StoreChar(pBufferDesc,\ \textcolor{charliteral}{'+'});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00271}00271\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00272}00272\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00273}00273\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00274}00274\ \ \ \ \ \textcolor{keywordflow}{if}\ (pBufferDesc-\/>ReturnValue\ >=\ 0)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00275}00275\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00276}00276\ \ \ \ \ \ \ \textcolor{comment}{//\ Print\ leading\ zeros\ if\ necessary}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00277}00277\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00278}00278\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (((FormatFlags\ \&\ FORMAT\_FLAG\_PAD\_ZERO)\ ==\ FORMAT\_FLAG\_PAD\_ZERO)\ \&\&\ ((FormatFlags\ \&\ FORMAT\_FLAG\_LEFT\_JUSTIFY)\ ==\ 0u)\ \&\&\ (NumDigits\ ==\ 0u))\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00279}00279\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (FieldWidth\ !=\ 0u)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00280}00280\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{while}\ ((FieldWidth\ !=\ 0u)\ \&\&\ (Width\ <\ FieldWidth))\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00281}00281\ \ \ \ \ \ \ \ \ \ \ \ \ FieldWidth-\/-\/;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00282}00282\ \ \ \ \ \ \ \ \ \ \ \ \ \_StoreChar(pBufferDesc,\ \textcolor{charliteral}{'0'});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00283}00283\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (pBufferDesc-\/>ReturnValue\ <\ 0)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00284}00284\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00285}00285\ \ \ \ \ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00286}00286\ \ \ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00287}00287\ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00288}00288\ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00289}00289\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (pBufferDesc-\/>ReturnValue\ >=\ 0)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00290}00290\ \ \ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00291}00291\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Print\ number\ without\ sign}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00292}00292\ \ \ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00293}00293\ \ \ \ \ \ \ \ \ \_PrintUnsigned(pBufferDesc,\ (\textcolor{keywordtype}{unsigned})v,\ Base,\ NumDigits,\ FieldWidth,\ FormatFlags);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00294}00294\ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00295}00295\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00296}00296\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00297}00297\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00298}00298\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00299}00299\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00300}00300\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00301}00301\ \textcolor{comment}{*\ \ \ \ \ \ \ Public\ code}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00302}00302\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00303}00303\ \textcolor{comment}{**********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00304}00304\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00305}00305\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00306}00306\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00307}00307\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_vprintf}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00308}00308\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00309}00309\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00310}00310\ \textcolor{comment}{*\ \ \ \ Stores\ a\ formatted\ string\ in\ SEGGER\ RTT\ control\ block.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00311}00311\ \textcolor{comment}{*\ \ \ \ This\ data\ is\ read\ by\ the\ host.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00312}00312\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00313}00313\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00314}00314\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ "{}Up"{}-\/buffer\ to\ be\ used.\ (e.g.\ 0\ for\ "{}Terminal"{})}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00315}00315\ \textcolor{comment}{*\ \ \ \ sFormat\ \ \ \ \ \ Pointer\ to\ format\ string}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00316}00316\ \textcolor{comment}{*\ \ \ \ pParamList\ \ \ Pointer\ to\ the\ list\ of\ arguments\ for\ the\ format\ string}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00317}00317\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00318}00318\ \textcolor{comment}{*\ \ Return\ values}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00319}00319\ \textcolor{comment}{*\ \ \ \ >=\ 0:\ \ Number\ of\ bytes\ which\ have\ been\ stored\ in\ the\ "{}Up"{}-\/buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00320}00320\ \textcolor{comment}{*\ \ \ \ \ <\ 0:\ \ Error}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00321}00321\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00322}00322\ \textcolor{keywordtype}{int}\ SEGGER\_RTT\_vprintf(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ *\ sFormat,\ va\_list\ *\ pParamList)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00323}00323\ \ \ \textcolor{keywordtype}{char}\ c;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00324}00324\ \ \ \mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c}{SEGGER\_RTT\_PRINTF\_DESC}}\ BufferDesc;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00325}00325\ \ \ \textcolor{keywordtype}{int}\ v;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00326}00326\ \ \ \textcolor{keywordtype}{unsigned}\ NumDigits;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00327}00327\ \ \ \textcolor{keywordtype}{unsigned}\ FormatFlags;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00328}00328\ \ \ \textcolor{keywordtype}{unsigned}\ FieldWidth;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00329}00329\ \ \ \textcolor{keywordtype}{char}\ acBuffer[SEGGER\_RTT\_PRINTF\_BUFFER\_SIZE];} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00330}00330\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00331}00331\ \ \ BufferDesc.pBuffer\ \ \ \ \ \ \ \ =\ acBuffer;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00332}00332\ \ \ BufferDesc.BufferSize\ \ \ \ \ =\ SEGGER\_RTT\_PRINTF\_BUFFER\_SIZE;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00333}00333\ \ \ BufferDesc.Cnt\ \ \ \ \ \ \ \ \ \ \ \ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00334}00334\ \ \ BufferDesc.RTTBufferIndex\ =\ BufferIndex;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00335}00335\ \ \ BufferDesc.ReturnValue\ \ \ \ =\ 0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00336}00336\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00337}00337\ \ \ \textcolor{keywordflow}{do}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00338}00338\ \ \ \ \ c\ =\ *sFormat;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00339}00339\ \ \ \ \ sFormat++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00340}00340\ \ \ \ \ \textcolor{keywordflow}{if}\ (c\ ==\ 0u)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00341}00341\ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00342}00342\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00343}00343\ \ \ \ \ \textcolor{keywordflow}{if}\ (c\ ==\ \textcolor{charliteral}{'\%'})\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00344}00344\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00345}00345\ \ \ \ \ \ \ \textcolor{comment}{//\ Filter\ out\ flags}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00346}00346\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00347}00347\ \ \ \ \ \ \ FormatFlags\ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00348}00348\ \ \ \ \ \ \ v\ =\ 1;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00349}00349\ \ \ \ \ \ \ \textcolor{keywordflow}{do}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00350}00350\ \ \ \ \ \ \ \ \ c\ =\ *sFormat;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00351}00351\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{switch}\ (c)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00352}00352\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{case}\ \textcolor{charliteral}{'-\/'}:\ FormatFlags\ |=\ FORMAT\_FLAG\_LEFT\_JUSTIFY;\ sFormat++;\ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00353}00353\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{case}\ \textcolor{charliteral}{'0'}:\ FormatFlags\ |=\ FORMAT\_FLAG\_PAD\_ZERO;\ \ \ \ \ sFormat++;\ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00354}00354\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{case}\ \textcolor{charliteral}{'+'}:\ FormatFlags\ |=\ FORMAT\_FLAG\_PRINT\_SIGN;\ \ \ sFormat++;\ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00355}00355\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{case}\ \textcolor{charliteral}{'\#'}:\ FormatFlags\ |=\ FORMAT\_FLAG\_ALTERNATE;\ \ \ \ sFormat++;\ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00356}00356\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{default}:\ \ v\ =\ 0;\ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00357}00357\ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00358}00358\ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{while}\ (v);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00359}00359\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00360}00360\ \ \ \ \ \ \ \textcolor{comment}{//\ filter\ out\ field\ with}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00361}00361\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00362}00362\ \ \ \ \ \ \ FieldWidth\ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00363}00363\ \ \ \ \ \ \ \textcolor{keywordflow}{do}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00364}00364\ \ \ \ \ \ \ \ \ c\ =\ *sFormat;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00365}00365\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ ((c\ <\ \textcolor{charliteral}{'0'})\ ||\ (c\ >\ \textcolor{charliteral}{'9'}))\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00366}00366\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00367}00367\ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00368}00368\ \ \ \ \ \ \ \ \ sFormat++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00369}00369\ \ \ \ \ \ \ \ \ FieldWidth\ =\ (FieldWidth\ *\ 10u)\ +\ ((\textcolor{keywordtype}{unsigned})c\ -\/\ \textcolor{charliteral}{'0'});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00370}00370\ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{while}\ (1);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00371}00371\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00372}00372\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00373}00373\ \ \ \ \ \ \ \textcolor{comment}{//\ Filter\ out\ precision\ (number\ of\ digits\ to\ display)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00374}00374\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00375}00375\ \ \ \ \ \ \ NumDigits\ =\ 0u;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00376}00376\ \ \ \ \ \ \ c\ =\ *sFormat;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00377}00377\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (c\ ==\ \textcolor{charliteral}{'.'})\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00378}00378\ \ \ \ \ \ \ \ \ sFormat++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00379}00379\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{do}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00380}00380\ \ \ \ \ \ \ \ \ \ \ c\ =\ *sFormat;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00381}00381\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ ((c\ <\ \textcolor{charliteral}{'0'})\ ||\ (c\ >\ \textcolor{charliteral}{'9'}))\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00382}00382\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00383}00383\ \ \ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00384}00384\ \ \ \ \ \ \ \ \ \ \ sFormat++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00385}00385\ \ \ \ \ \ \ \ \ \ \ NumDigits\ =\ NumDigits\ *\ 10u\ +\ ((unsigned)c\ -\/\ \textcolor{charliteral}{'0'});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00386}00386\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{while}\ (1);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00387}00387\ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00388}00388\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00389}00389\ \ \ \ \ \ \ \textcolor{comment}{//\ Filter\ out\ length\ modifier}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00390}00390\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00391}00391\ \ \ \ \ \ \ c\ =\ *sFormat;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00392}00392\ \ \ \ \ \ \ \textcolor{keywordflow}{do}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00393}00393\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ ((c\ ==\ \textcolor{charliteral}{'l'})\ ||\ (c\ ==\ \textcolor{charliteral}{'h'}))\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00394}00394\ \ \ \ \ \ \ \ \ \ \ sFormat++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00395}00395\ \ \ \ \ \ \ \ \ \ \ c\ =\ *sFormat;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00396}00396\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00397}00397\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00398}00398\ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00399}00399\ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{while}\ (1);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00400}00400\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00401}00401\ \ \ \ \ \ \ \textcolor{comment}{//\ Handle\ specifiers}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00402}00402\ \ \ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00403}00403\ \ \ \ \ \ \ \textcolor{keywordflow}{switch}\ (c)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00404}00404\ \ \ \ \ \ \ \textcolor{keywordflow}{case}\ \textcolor{charliteral}{'c'}:\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00405}00405\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{char}\ c0;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00406}00406\ \ \ \ \ \ \ \ \ v\ =\ va\_arg(*pParamList,\ \textcolor{keywordtype}{int});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00407}00407\ \ \ \ \ \ \ \ \ c0\ =\ (char)v;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00408}00408\ \ \ \ \ \ \ \ \ \_StoreChar(\&BufferDesc,\ c0);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00409}00409\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00410}00410\ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00411}00411\ \ \ \ \ \ \ \textcolor{keywordflow}{case}\ \textcolor{charliteral}{'d'}:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00412}00412\ \ \ \ \ \ \ \ \ v\ =\ va\_arg(*pParamList,\ \textcolor{keywordtype}{int});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00413}00413\ \ \ \ \ \ \ \ \ \_PrintInt(\&BufferDesc,\ v,\ 10u,\ NumDigits,\ FieldWidth,\ FormatFlags);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00414}00414\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00415}00415\ \ \ \ \ \ \ \textcolor{keywordflow}{case}\ \textcolor{charliteral}{'u'}:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00416}00416\ \ \ \ \ \ \ \ \ v\ =\ va\_arg(*pParamList,\ \textcolor{keywordtype}{int});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00417}00417\ \ \ \ \ \ \ \ \ \_PrintUnsigned(\&BufferDesc,\ (\textcolor{keywordtype}{unsigned})v,\ 10u,\ NumDigits,\ FieldWidth,\ FormatFlags);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00418}00418\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00419}00419\ \ \ \ \ \ \ \textcolor{keywordflow}{case}\ \textcolor{charliteral}{'x'}:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00420}00420\ \ \ \ \ \ \ \textcolor{keywordflow}{case}\ \textcolor{charliteral}{'X'}:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00421}00421\ \ \ \ \ \ \ \ \ v\ =\ va\_arg(*pParamList,\ \textcolor{keywordtype}{int});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00422}00422\ \ \ \ \ \ \ \ \ \_PrintUnsigned(\&BufferDesc,\ (\textcolor{keywordtype}{unsigned})v,\ 16u,\ NumDigits,\ FieldWidth,\ FormatFlags);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00423}00423\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00424}00424\ \ \ \ \ \ \ \textcolor{keywordflow}{case}\ \textcolor{charliteral}{'s'}:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00425}00425\ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00426}00426\ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ *\ s\ =\ va\_arg(*pParamList,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ *);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00427}00427\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (s\ ==\ NULL)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00428}00428\ \ \ \ \ \ \ \ \ \ \ \ \ s\ =\ \textcolor{stringliteral}{"{}(NULL)"{}};\ \ \textcolor{comment}{//\ Print\ (NULL)\ instead\ of\ crashing\ or\ breaking,\ as\ it\ is\ more\ informative\ to\ the\ user.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00429}00429\ \ \ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00430}00430\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{do}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00431}00431\ \ \ \ \ \ \ \ \ \ \ \ \ c\ =\ *s;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00432}00432\ \ \ \ \ \ \ \ \ \ \ \ \ s++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00433}00433\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (c\ ==\ \textcolor{charliteral}{'\(\backslash\)0'})\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00434}00434\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00435}00435\ \ \ \ \ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00436}00436\ \ \ \ \ \ \ \ \ \ \ \ \_StoreChar(\&BufferDesc,\ c);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00437}00437\ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{while}\ (BufferDesc.ReturnValue\ >=\ 0);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00438}00438\ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00439}00439\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00440}00440\ \ \ \ \ \ \ \textcolor{keywordflow}{case}\ \textcolor{charliteral}{'p'}:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00441}00441\ \ \ \ \ \ \ \ \ v\ =\ va\_arg(*pParamList,\ \textcolor{keywordtype}{int});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00442}00442\ \ \ \ \ \ \ \ \ \_PrintUnsigned(\&BufferDesc,\ (\textcolor{keywordtype}{unsigned})v,\ 16u,\ 8u,\ 8u,\ 0u);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00443}00443\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00444}00444\ \ \ \ \ \ \ \textcolor{keywordflow}{case}\ \textcolor{charliteral}{'\%'}:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00445}00445\ \ \ \ \ \ \ \ \ \_StoreChar(\&BufferDesc,\ \textcolor{charliteral}{'\%'});} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00446}00446\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00447}00447\ \ \ \ \ \ \ \textcolor{keywordflow}{default}:} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00448}00448\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00449}00449\ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00450}00450\ \ \ \ \ \ \ sFormat++;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00451}00451\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00452}00452\ \ \ \ \ \ \ \_StoreChar(\&BufferDesc,\ c);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00453}00453\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00454}00454\ \ \ \}\ \textcolor{keywordflow}{while}\ (BufferDesc.ReturnValue\ >=\ 0);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00455}00455\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00456}00456\ \ \ \textcolor{keywordflow}{if}\ (BufferDesc.ReturnValue\ >\ 0)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00457}00457\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00458}00458\ \ \ \ \ \textcolor{comment}{//\ Write\ remaining\ data,\ if\ any}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00459}00459\ \ \ \ \ \textcolor{comment}{//}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00460}00460\ \ \ \ \ \textcolor{keywordflow}{if}\ (BufferDesc.Cnt\ !=\ 0u)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00461}00461\ \ \ \ \ \ \ SEGGER\_RTT\_Write(BufferIndex,\ acBuffer,\ BufferDesc.Cnt);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00462}00462\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00463}00463\ \ \ \ \ BufferDesc.ReturnValue\ +=\ (int)BufferDesc.Cnt;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00464}00464\ \ \ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00465}00465\ \ \ \textcolor{keywordflow}{return}\ BufferDesc.ReturnValue;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00466}00466\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00467}00467\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00468}00468\ \textcolor{comment}{/*********************************************************************}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00469}00469\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00470}00470\ \textcolor{comment}{*\ \ \ \ \ \ \ SEGGER\_RTT\_printf}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00471}00471\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00472}00472\ \textcolor{comment}{*\ \ Function\ description}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00473}00473\ \textcolor{comment}{*\ \ \ \ Stores\ a\ formatted\ string\ in\ SEGGER\ RTT\ control\ block.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00474}00474\ \textcolor{comment}{*\ \ \ \ This\ data\ is\ read\ by\ the\ host.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00475}00475\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00476}00476\ \textcolor{comment}{*\ \ Parameters}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00477}00477\ \textcolor{comment}{*\ \ \ \ BufferIndex\ \ Index\ of\ "{}Up"{}-\/buffer\ to\ be\ used.\ (e.g.\ 0\ for\ "{}Terminal"{})}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00478}00478\ \textcolor{comment}{*\ \ \ \ sFormat\ \ \ \ \ \ Pointer\ to\ format\ string,\ followed\ by\ the\ arguments\ for\ conversion}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00479}00479\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00480}00480\ \textcolor{comment}{*\ \ Return\ values}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00481}00481\ \textcolor{comment}{*\ \ \ \ >=\ 0:\ \ Number\ of\ bytes\ which\ have\ been\ stored\ in\ the\ "{}Up"{}-\/buffer.}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00482}00482\ \textcolor{comment}{*\ \ \ \ \ <\ 0:\ \ Error}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00483}00483\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00484}00484\ \textcolor{comment}{*\ \ Notes}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00485}00485\ \textcolor{comment}{*\ \ \ \ (1)\ Conversion\ specifications\ have\ following\ syntax:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00486}00486\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ \%[flags][FieldWidth][.Precision]ConversionSpecifier}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00487}00487\ \textcolor{comment}{*\ \ \ \ (2)\ Supported\ flags:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00488}00488\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ -\/:\ Left\ justify\ within\ the\ field\ width}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00489}00489\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ +:\ Always\ print\ sign\ extension\ for\ signed\ conversions}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00490}00490\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ 0:\ Pad\ with\ 0\ instead\ of\ spaces.\ Ignored\ when\ using\ '-\/'-\/flag\ or\ precision}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00491}00491\ \textcolor{comment}{*\ \ \ \ \ \ \ \ Supported\ conversion\ specifiers:}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00492}00492\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ c:\ Print\ the\ argument\ as\ one\ char}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00493}00493\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ d:\ Print\ the\ argument\ as\ a\ signed\ integer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00494}00494\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ u:\ Print\ the\ argument\ as\ an\ unsigned\ integer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00495}00495\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ x:\ Print\ the\ argument\ as\ an\ hexadecimal\ integer}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00496}00496\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ s:\ Print\ the\ string\ pointed\ to\ by\ the\ argument}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00497}00497\ \textcolor{comment}{*\ \ \ \ \ \ \ \ \ \ p:\ Print\ the\ argument\ as\ an\ 8-\/digit\ hexadecimal\ integer.\ (Argument\ shall\ be\ a\ pointer\ to\ void.)}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00498}00498\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00499}00499\ \textcolor{keywordtype}{int}\ SEGGER\_RTT\_printf(\textcolor{keywordtype}{unsigned}\ BufferIndex,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ *\ sFormat,\ ...)\ \{} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00500}00500\ \ \ \textcolor{keywordtype}{int}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00501}00501\ \ \ va\_list\ ParamList;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00502}00502\ } +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00503}00503\ \ \ va\_start(ParamList,\ sFormat);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00504}00504\ \ \ r\ =\ SEGGER\_RTT\_vprintf(BufferIndex,\ sFormat,\ \&ParamList);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00505}00505\ \ \ va\_end(ParamList);} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00506}00506\ \ \ \textcolor{keywordflow}{return}\ r;} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00507}00507\ \}} +\DoxyCodeLine{\Hypertarget{_s_e_g_g_e_r___r_t_t__printf_8c_source_l00508}00508\ \textcolor{comment}{/***************************\ End\ of\ file\ ****************************/}} + +\end{DoxyCode} diff --git a/Doc/latex/annotated.tex b/Doc/latex/annotated.tex index 428a296..e25cf63 100644 --- a/Doc/latex/annotated.tex +++ b/Doc/latex/annotated.tex @@ -4,14 +4,12 @@ Here are the classes, structs, unions and interfaces with brief descriptions\+:\ \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}}{} \item\contentsline{section}{\mbox{\hyperlink{struct_r_t_t___flash_header__t}{RTT\+\_\+\+Flash\+Header\+\_\+t}} \\*Структура RTT, которая будет положена в Flash }{\pageref{struct_r_t_t___flash_header__t}}{} -\item\contentsline{section}{\mbox{\hyperlink{struct_s_p_i___settings_type_def}{SPI\+\_\+\+Settings\+Type\+Def}} \\*Структура настроек SPI }{\pageref{struct_s_p_i___settings_type_def}}{} -\item\contentsline{section}{\mbox{\hyperlink{struct_t_i_m___encoder_type_def}{TIM\+\_\+\+Encoder\+Type\+Def}} \\*Структура инициализации енкодера }{\pageref{struct_t_i_m___encoder_type_def}}{} -\item\contentsline{section}{\mbox{\hyperlink{struct_t_i_m___settings_type_def}{TIM\+\_\+\+Settings\+Type\+Def}} \\*Структура инициализации таймера }{\pageref{struct_t_i_m___settings_type_def}}{} -\item\contentsline{section}{\mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{UART\+\_\+\+Settings\+Type\+Def}} \\*Структура настроек UART }{\pageref{struct_u_a_r_t___settings_type_def}}{} +\item\contentsline{section}{\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n}{SEGGER\+\_\+\+RTT\+\_\+\+BUFFER\+\_\+\+DOWN}} }{\pageref{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___d_o_w_n}}{} +\item\contentsline{section}{\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}{SEGGER\+\_\+\+RTT\+\_\+\+BUFFER\+\_\+\+UP}} }{\pageref{struct_s_e_g_g_e_r___r_t_t___b_u_f_f_e_r___u_p}}{} +\item\contentsline{section}{\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___c_b}{SEGGER\+\_\+\+RTT\+\_\+\+CB}} }{\pageref{struct_s_e_g_g_e_r___r_t_t___c_b}}{} +\item\contentsline{section}{\mbox{\hyperlink{struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c}{SEGGER\+\_\+\+RTT\+\_\+\+PRINTF\+\_\+\+DESC}} }{\pageref{struct_s_e_g_g_e_r___r_t_t___p_r_i_n_t_f___d_e_s_c}}{} \item\contentsline{section}{\mbox{\hyperlink{unionuint16___bit_type_def}{uint16\+\_\+\+Bit\+Type\+Def}} }{\pageref{unionuint16___bit_type_def}}{} \item\contentsline{section}{\mbox{\hyperlink{unionuint32___bit_type_def}{uint32\+\_\+\+Bit\+Type\+Def}} }{\pageref{unionuint32___bit_type_def}}{} \item\contentsline{section}{\mbox{\hyperlink{unionuint64___bit_type_def}{uint64\+\_\+\+Bit\+Type\+Def}} }{\pageref{unionuint64___bit_type_def}}{} diff --git a/Doc/latex/bench__time_8h.tex b/Doc/latex/bench__time_8h.tex index db1c3db..060e44e 100644 --- a/Doc/latex/bench__time_8h.tex +++ b/Doc/latex/bench__time_8h.tex @@ -1,5 +1,5 @@ -\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}} +\doxysection{E\+:/.WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/bench\+\_\+time.h File Reference} +\hypertarget{bench__time_8h}{}\label{bench__time_8h}\index{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/bench\_time.h@{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/bench\_time.h}} Заголовочный файл для измерения времени между событиями @@ -7,12 +7,11 @@ {\ttfamily \#include "{}mylibs\+\_\+defs.\+h"{}}\newline {\ttfamily \#include $<$stdint.\+h$>$}\newline -Include dependency graph for bench\+\_\+time.\+h\+: -\nopagebreak +Include dependency graph for bench\+\_\+time.\+h\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode -\includegraphics[width=230pt]{bench__time_8h__incl} +\includegraphics[width=233pt]{bench__time_8h__incl} \end{center} \end{figure} \doxysubsubsection*{Classes} diff --git a/Doc/latex/bench__time_8h__incl.md5 b/Doc/latex/bench__time_8h__incl.md5 index 1ed4101..a89d29f 100644 --- a/Doc/latex/bench__time_8h__incl.md5 +++ b/Doc/latex/bench__time_8h__incl.md5 @@ -1 +1 @@ -122aa7271e7507ca099dc86bd8c9c747 \ No newline at end of file +0973ca287455c599a939b3aa21c17abd \ No newline at end of file diff --git a/Doc/latex/bench__time_8h__incl.pdf b/Doc/latex/bench__time_8h__incl.pdf index 1bd577ff11abfc96d435aa2db30624b44fc20e00..83e71988b2049e2961eddd14882592a717ec6bec 100644 GIT binary patch delta 20063 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�dNSb*;Z18|Lflh5 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,\ 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}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00007}00007\ \textcolor{comment}{*\ @brief\ \ \ \ \ \ Библиотека\ для\ измерения\ времени/тиков\ между\ событиями}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00008}00008\ \textcolor{comment}{*\ @details}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00009}00009\ \textcolor{comment}{Поддерживает:}} +\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}{-\/\ @ref\ BENCH\_TIME\_ENABLE\ -\/\ Включить\ бенч\ времени}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00018}00018\ \textcolor{comment}{-\/\ @ref\ BENCH\_TIME\_MAX\_CHANNELS\ -\/\ Максимальное\ количество\ каналов\ измерения\ (по\ умолчанию\ 8)}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00019}00019\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00020}00020\ \textcolor{comment}{@par\ Пример\ использования:}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00021}00021\ \textcolor{comment}{@code}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00022}00022\ \textcolor{comment}{\#include\ "{}bench\_time.h"{}}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00023}00023\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00024}00024\ \textcolor{comment}{//\ Инициализация}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00025}00025\ \textcolor{comment}{BenchTime\_Init();}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00026}00026\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00027}00027\ \textcolor{comment}{//\ Измерение\ с\ SysTick}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00028}00028\ \textcolor{comment}{BenchTime\_Start(0,\ HAL\_GetTick,\ 0xFFFFFFFF);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00029}00029\ \textcolor{comment}{some\_function();}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00030}00030\ \textcolor{comment}{uint32\_t\ time\ =\ BenchTime\_End(0,\ HAL\_GetTick);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00031}00031\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00032}00032\ \textcolor{comment}{//\ Измерение\ с\ TIM2\ (16-\/бит)}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00033}00033\ \textcolor{comment}{BenchTime\_Start(1,\ TIM2-\/>CNT,\ 0xFFFF);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00034}00034\ \textcolor{comment}{fast\_function();\ }} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00035}00035\ \textcolor{comment}{uint32\_t\ time2\ =\ BenchTime\_End(1,\ TIM2-\/>CNT);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00036}00036\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00037}00037\ \textcolor{comment}{//\ Измерение\ с\ DWT\ цикловым\ счетчиком}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00038}00038\ \textcolor{comment}{BenchTime\_Start(2,\ DWT-\/>CYCCNT,\ 0xFFFFFFFF);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00039}00039\ \textcolor{comment}{critical\_function();}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00040}00040\ \textcolor{comment}{uint32\_t\ cycles\ =\ BenchTime\_End(2,\ DWT-\/>CYCCNT);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00041}00041\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00042}00042\ \textcolor{comment}{//\ Многоканальное\ измерение}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00043}00043\ \textcolor{comment}{BenchTime\_Start(0,\ HAL\_GetTick,\ 1000);\ \ \ \ \ \ \ \ //\ общее\ время}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00044}00044\ \textcolor{comment}{BenchTime\_Start(1,\ TIM3-\/>CNT,\ 500);\ \ \ \ \ \ \ \ \ \ \ //\ часть\ 1}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00045}00045\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00046}00046\ \textcolor{comment}{//\ ...\ код\ 1}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00047}00047\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00048}00048\ \textcolor{comment}{uint32\_t\ part1\ =\ BenchTime\_End(1,\ TIM3-\/>CNT);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00049}00049\ \textcolor{comment}{BenchTime\_Start(2,\ TIM4-\/>CNT,\ 200);\ \ \ \ \ \ \ \ \ \ \ //\ часть\ 2\ \ }} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00050}00050\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00051}00051\ \textcolor{comment}{//\ ...\ код\ 2}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00052}00052\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00053}00053\ \textcolor{comment}{uint32\_t\ part2\ =\ BenchTime\_End(2,\ TIM4-\/>CNT);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00054}00054\ \textcolor{comment}{uint32\_t\ total\ =\ BenchTime\_End(0,\ HAL\_GetTick);\ //\ общее\ время}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00055}00055\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00056}00056\ \textcolor{comment}{//\ Статистика}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00057}00057\ \textcolor{comment}{uint32\_t\ min\_time\ =\ BenchTime\_GetMin(0);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00058}00058\ \textcolor{comment}{uint32\_t\ max\_time\ =\ BenchTime\_GetMax(0);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00059}00059\ \textcolor{comment}{uint32\_t\ avg\_time\ =\ BenchTime\_GetAverage(0);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00060}00060\ \textcolor{comment}{uint32\_t\ count\ =\ BenchTime\_GetCount(0);}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00061}00061\ \textcolor{comment}{@endcode}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00062}00062\ \textcolor{comment}{*\ @\{\ \ }} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00063}00063\ \textcolor{comment}{*****************************************************************************/}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00064}00064\ \textcolor{preprocessor}{\#ifndef\ \_\_BENCH\_TIME\_H\_}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00065}00065\ \textcolor{preprocessor}{\#define\ \_\_BENCH\_TIME\_H\_}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00066}00066\ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00067}00067\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{mylibs__defs_8h}{mylibs\_defs.h}}"{}}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00068}00068\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00069}00069\ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00070}00070\ \textcolor{preprocessor}{\#ifdef\ BENCH\_TIME\_ENABLE}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00071}00071\ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00072}00072\ \textcolor{comment}{//\ Конфигурация\ библиотеки}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00073}00073\ \textcolor{preprocessor}{\#ifndef\ BENCH\_TIME\_MAX\_CHANNELS}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00074}00074\ \textcolor{preprocessor}{\#define\ BENCH\_TIME\_MAX\_CHANNELS\ \ 8\ \ \ \ }\textcolor{comment}{///<\ Максимальное\ количество\ каналов\ измерения}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00075}00075\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00076}00076\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00077}00077\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00078}00078\ \textcolor{comment}{\ \ *\ @brief\ Структура\ статистики\ измерений}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00079}00079\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00080}\mbox{\hyperlink{struct_bench_time_stats__t}{00080}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00081}\mbox{\hyperlink{struct_bench_time_stats__t_a39b71a5d48c4a51a553a26a9fb961ac8}{00081}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_bench_time_stats__t_a39b71a5d48c4a51a553a26a9fb961ac8}{min\_ticks}};\ \ \ \ \ \ \textcolor{comment}{///<\ Минимальное\ время\ в\ тиках}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00082}\mbox{\hyperlink{struct_bench_time_stats__t_a3da36eb65b03ba995b5905b4650ea93c}{00082}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_bench_time_stats__t_a3da36eb65b03ba995b5905b4650ea93c}{max\_ticks}};\ \ \ \ \ \ \textcolor{comment}{///<\ Максимальное\ время\ в\ тиках\ \ }} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00083}\mbox{\hyperlink{struct_bench_time_stats__t_a21499b0b19d1ed27f8cea069f674e8ec}{00083}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_bench_time_stats__t_a21499b0b19d1ed27f8cea069f674e8ec}{total\_ticks}};\ \ \ \ \textcolor{comment}{///<\ Суммарное\ время\ в\ тиках}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00084}\mbox{\hyperlink{struct_bench_time_stats__t_a5e95ef31dd0daf973894ef2f034d1f71}{00084}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_bench_time_stats__t_a5e95ef31dd0daf973894ef2f034d1f71}{count}};\ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Количество\ измерений}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00085}\mbox{\hyperlink{struct_bench_time_stats__t_a2c739e1db6b26ceac5db3f2c44c177a0}{00085}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_bench_time_stats__t_a2c739e1db6b26ceac5db3f2c44c177a0}{last\_ticks}};\ \ \ \ \ \textcolor{comment}{///<\ Последнее\ измеренное\ время}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00086}00086\ \}\ \mbox{\hyperlink{struct_bench_time_stats__t}{BenchTimeStats\_t}};} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00087}00087\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00088}00088\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00089}00089\ \textcolor{comment}{\ \ *\ @brief\ Структура\ канала\ измерения}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00090}00090\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00091}\mbox{\hyperlink{struct_bench_time_channel__t}{00091}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00092}\mbox{\hyperlink{struct_bench_time_channel__t_a8140fe9e3d323404651f0cfeeae53928}{00092}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_bench_time_channel__t_a8140fe9e3d323404651f0cfeeae53928}{start\_tick}};\ \ \ \ \ \textcolor{comment}{///<\ Время\ старта\ в\ тиках}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00093}\mbox{\hyperlink{struct_bench_time_channel__t_a095d93e0228641f58b8661e263bc1bcd}{00093}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_bench_time_channel__t_a095d93e0228641f58b8661e263bc1bcd}{tick\_period}};\ \ \ \ \textcolor{comment}{///<\ Период\ тиков\ для\ переполнения}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00094}\mbox{\hyperlink{struct_bench_time_channel__t_a0f80bb194231df7921712d20bac603c9}{00094}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_bench_time_channel__t_a0f80bb194231df7921712d20bac603c9}{is\_running}};\ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Флаг\ активного\ измерения}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00095}\mbox{\hyperlink{struct_bench_time_channel__t_a22a3913e7925aa89cc12ec1d24a6c16c}{00095}}\ \ \ \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_l00096}00096\ \}\ \mbox{\hyperlink{struct_bench_time_channel__t}{BenchTimeChannel\_t}};} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00097}00097\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00098}00098\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00099}00099\ \textcolor{comment}{\ \ *\ @brief\ Основная\ структура\ менеджера\ измерений}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00100}00100\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00101}\mbox{\hyperlink{struct_bench_time__t}{00101}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00102}\mbox{\hyperlink{struct_bench_time__t_a51376c064bdcffba23cf65d0733e3d34}{00102}}\ \ \ \mbox{\hyperlink{struct_bench_time_channel__t}{BenchTimeChannel\_t}}\ \mbox{\hyperlink{struct_bench_time__t_a51376c064bdcffba23cf65d0733e3d34}{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_l00103}00103\ \}\ \mbox{\hyperlink{struct_bench_time__t}{BenchTime\_t}};} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00104}00104\ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00105}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga8e53ef7f7df233bd4e737a87bb203d9d}{00105}}\ \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_l00106}00106\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00107}00107\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00108}00108\ \textcolor{comment}{\ \ *\ @brief\ Инициализация\ системы\ измерения\ времени}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00109}00109\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00110}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gabb7a665a9603ea2e4dbc4432e8cb6054}{00110}}\ \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_l00111}00111\ \ \ \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_l00112}00112\ \ \ \ \ \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_l00113}00113\ \ \ \ \ \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_l00114}00114\ \ \ \ \ \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_l00115}00115\ \ \ \ \ \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_l00116}00116\ \ \ \ \ \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_l00117}00117\ \ \ \ \ \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_l00118}00118\ \ \ \ \ \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_l00119}00119\ \ \ \ \ \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_l00120}00120\ \ \ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00121}00121\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00122}00122\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00123}00123\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00124}00124\ \textcolor{comment}{\ \ *\ @brief\ Начало\ измерения\ на\ указанном\ канале}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00125}00125\ \textcolor{comment}{\ \ *\ @param\ channel\ Номер\ канала\ (0..BENCH\_TIME\_MAX\_CHANNELS-\/1)}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00126}00126\ \textcolor{comment}{\ \ *\ @param\ ticks\ Источник\ тиков\ (например:\ HAL\_GetTick(),\ TIM2-\/>CNT,\ DWT-\/>CYCCNT)}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00127}00127\ \textcolor{comment}{\ \ *\ @param\ tick\_period\ Период\ тиков\ для\ переполнения}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00128}00128\ \textcolor{comment}{\ \ *\ @return\ 1\ -\/\ успех,\ 0\ -\/\ ошибка}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00129}00129\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00130}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gac65338df38129964ce3e9d9cb2fcb349}{00130}}\ \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_l00131}00131\ \ \ \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_l00132}00132\ \ \ \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_l00133}00133\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00134}00134\ \ \ \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_l00135}00135\ \ \ \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_l00136}00136\ \ \ \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_l00137}00137\ \ \ \textcolor{keywordflow}{return}\ 1;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00138}00138\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00139}00139\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00140}00140\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00141}00141\ \textcolor{comment}{\ \ *\ @brief\ Окончание\ измерения\ на\ указанном\ канале}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00142}00142\ \textcolor{comment}{\ \ *\ @param\ channel\ Номер\ канала\ (0..BENCH\_TIME\_MAX\_CHANNELS-\/1)}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00143}00143\ \textcolor{comment}{\ \ *\ @param\ ticks\ Источник\ тиков\ (должен\ быть\ тот\ же\ что\ в\ Start)}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00144}00144\ \textcolor{comment}{\ \ *\ @return\ Измеренное\ время\ в\ тиках,\ 0\ -\/\ в\ случае\ ошибки}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00145}00145\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00146}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga47a69851a2089140eac00cde18a12439}{00146}}\ \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_l00147}00147\ \ \ \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_l00148}00148\ \ \ \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_l00149}00149\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00150}00150\ \ \ uint32\_t\ end\_tick\ =\ ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00151}00151\ \ \ 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_l00152}00152\ \ \ 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_l00153}00153\ \ \ uint32\_t\ elapsed\_ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00154}00154\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00155}00155\ \ \ \textcolor{keywordflow}{if}\ (end\_tick\ >=\ start\_tick)\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00156}00156\ \ \ \ \ elapsed\_ticks\ =\ end\_tick\ -\/\ start\_tick;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00157}00157\ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00158}00158\ \ \ \ \ elapsed\_ticks\ =\ (tick\_period\ -\/\ start\_tick)\ +\ end\_tick\ +\ 1;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00159}00159\ \ \ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00160}00160\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00161}00161\ \ \ \textcolor{keywordflow}{if}\ (elapsed\_ticks\ >\ tick\_period)\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00162}00162\ \ \ \ \ elapsed\_ticks\ =\ tick\_period;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00163}00163\ \ \ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00164}00164\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00165}00165\ \ \ \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_l00166}00166\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00167}00167\ \ \ \textcolor{comment}{//\ Обновление\ статистики}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00168}00168\ \ \ \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_l00169}00169\ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a2c739e1db6b26ceac5db3f2c44c177a0}{last\_ticks}}\ =\ elapsed\_ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00170}00170\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00171}00171\ \ \ \textcolor{keywordflow}{if}\ (elapsed\_ticks\ <\ stats-\/>min\_ticks)\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00172}00172\ \ \ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a39b71a5d48c4a51a553a26a9fb961ac8}{min\_ticks}}\ =\ elapsed\_ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00173}00173\ \ \ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00174}00174\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00175}00175\ \ \ \textcolor{keywordflow}{if}\ (elapsed\_ticks\ >\ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a3da36eb65b03ba995b5905b4650ea93c}{max\_ticks}})\ \{} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00176}00176\ \ \ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a3da36eb65b03ba995b5905b4650ea93c}{max\_ticks}}\ =\ elapsed\_ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00177}00177\ \ \ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00178}00178\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00179}00179\ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a21499b0b19d1ed27f8cea069f674e8ec}{total\_ticks}}\ +=\ elapsed\_ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00180}00180\ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a5e95ef31dd0daf973894ef2f034d1f71}{count}}++;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00181}00181\ \ \ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00182}00182\ \ \ \textcolor{keywordflow}{return}\ elapsed\_ticks;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00183}00183\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00184}00184\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00185}00185\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00186}00186\ \textcolor{comment}{\ \ *\ @brief\ Получение\ минимального\ времени\ измерения}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00187}00187\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00188}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga273d45255fe4403fc25648d60cca7705}{00188}}\ \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_l00189}00189\ \ \ \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_l00190}00190\ \ \ \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_l00191}00191\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00192}00192\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00193}00193\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00194}00194\ \textcolor{comment}{\ \ *\ @brief\ Получение\ максимального\ времени\ измерения}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00195}00195\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00196}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga07e27d7b169c9fa1abd57281bb4e374e}{00196}}\ \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_l00197}00197\ \ \ \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_l00198}00198\ \ \ \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_l00199}00199\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00200}00200\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00201}00201\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00202}00202\ \textcolor{comment}{\ \ *\ @brief\ Получение\ среднего\ времени\ измерения}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00203}00203\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00204}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga24e2450d5ea921074ec5d7a1e4d56ba8}{00204}}\ \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_l00205}00205\ \ \ \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_l00206}00206\ \ \ \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_l00207}00207\ \ \ \textcolor{keywordflow}{if}\ (stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a5e95ef31dd0daf973894ef2f034d1f71}{count}}\ ==\ 0)\ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00208}00208\ \ \ \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_l00209}00209\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00210}00210\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00211}00211\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00212}00212\ \textcolor{comment}{\ \ *\ @brief\ Получение\ количества\ измерений}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00213}00213\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00214}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gabd1301ca79a30c782970f89fd147df3a}{00214}}\ \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_l00215}00215\ \ \ \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_l00216}00216\ \ \ \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_l00217}00217\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00218}00218\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00219}00219\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00220}00220\ \textcolor{comment}{\ \ *\ @brief\ Получение\ последнего\ измеренного\ времени}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00221}00221\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00222}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gacf3a738d6423d71b238058a63558a4ed}{00222}}\ \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_l00223}00223\ \ \ \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_l00224}00224\ \ \ \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_l00225}00225\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00226}00226\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00227}00227\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00228}00228\ \textcolor{comment}{\ \ *\ @brief\ Сброс\ статистики\ для\ канала}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00229}00229\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00230}\mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_ga31a6b2b181b92bcb15f46758f5d57f35}{00230}}\ \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_l00231}00231\ \ \ \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_l00232}00232\ \ \ \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_l00233}00233\ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a39b71a5d48c4a51a553a26a9fb961ac8}{min\_ticks}}\ =\ 0xFFFFFFFF;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00234}00234\ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a3da36eb65b03ba995b5905b4650ea93c}{max\_ticks}}\ =\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00235}00235\ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a21499b0b19d1ed27f8cea069f674e8ec}{total\_ticks}}\ =\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00236}00236\ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a5e95ef31dd0daf973894ef2f034d1f71}{count}}\ =\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00237}00237\ \ \ stats-\/>\mbox{\hyperlink{struct_bench_time_stats__t_a2c739e1db6b26ceac5db3f2c44c177a0}{last\_ticks}}\ =\ 0;} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00238}00238\ \}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00239}00239\ \textcolor{preprocessor}{\#else\ }\textcolor{comment}{//BENCH\_TIME\_ENABLE}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00240}00240\ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00241}00241\ \textcolor{preprocessor}{\#define\ BenchTime\_Init()}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00242}00242\ \textcolor{preprocessor}{\#define\ BenchTime\_Start(channel,\ ticks,\ tick\_period)\ \ 0}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00243}00243\ \textcolor{preprocessor}{\#define\ BenchTime\_End(channel,\ ticks)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00244}00244\ \textcolor{preprocessor}{\#define\ BenchTime\_GetMin(channel)\ \ \ \ \ \ \ 0}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00245}00245\ \textcolor{preprocessor}{\#define\ BenchTime\_GetMax(channel)\ \ \ \ \ \ \ 0}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00246}00246\ \textcolor{preprocessor}{\#define\ BenchTime\_GetAverage(channel)\ \ \ 0}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00247}00247\ \textcolor{preprocessor}{\#define\ BenchTime\_GetCount(channel)\ \ \ \ \ 0}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00248}00248\ \textcolor{preprocessor}{\#define\ BenchTime\_GetLast(channel)\ \ \ \ \ \ 0}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00249}00249\ \textcolor{preprocessor}{\#define\ BenchTime\_ResetStats(channel)}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00250}00250\ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00251}00251\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//BENCH\_TIME\_ENABLE}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00252}00252\ } +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00253}00253\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ \_\_BENCH\_TIME\_H\_}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00254}00254\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00255}00255\ \textcolor{comment}{/**\ BENCH\_TIME}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00256}00256\ \textcolor{comment}{\ \ *\ @\}}} +\DoxyCodeLine{\Hypertarget{bench__time_8h_source_l00257}00257\ \textcolor{comment}{\ \ */}} \end{DoxyCode} diff --git a/Doc/latex/bit__access_8h.tex b/Doc/latex/bit__access_8h.tex index 4f37e4d..d1f8e81 100644 --- a/Doc/latex/bit__access_8h.tex +++ b/Doc/latex/bit__access_8h.tex @@ -1,25 +1,23 @@ -\doxysection{E\+:/.WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/bit\+\_\+access.h File Reference} -\hypertarget{bit__access_8h}{}\label{bit__access_8h}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/bit\_access.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/bit\_access.h}} +\doxysection{E\+:/.WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/bit\+\_\+access.h File Reference} +\hypertarget{bit__access_8h}{}\label{bit__access_8h}\index{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/bit\_access.h@{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/bit\_access.h}} Заголочный файл для дефайнов битового доступа. {\ttfamily \#include "{}mylibs\+\_\+defs.\+h"{}}\newline -Include dependency graph for bit\+\_\+access.\+h\+: -\nopagebreak +Include dependency graph for bit\+\_\+access.\+h\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode -\includegraphics[width=212pt]{bit__access_8h__incl} +\includegraphics[width=218pt]{bit__access_8h__incl} \end{center} \end{figure} -This graph shows which files directly or indirectly include this file\+: -\nopagebreak +This graph shows which files directly or indirectly include this file\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode -\includegraphics[width=212pt]{bit__access_8h__dep__incl} +\includegraphics[width=223pt]{bit__access_8h__dep__incl} \end{center} \end{figure} \doxysubsubsection*{Classes} diff --git a/Doc/latex/bit__access_8h__dep__incl.md5 b/Doc/latex/bit__access_8h__dep__incl.md5 index cbb050e..7054e1d 100644 --- a/Doc/latex/bit__access_8h__dep__incl.md5 +++ b/Doc/latex/bit__access_8h__dep__incl.md5 @@ -1 +1 @@ -4dab8ce789924da2e24a48609f62737b \ No newline at end of file +f89078e44c77b1c105e61efb2f8dc2dc \ No newline at end of file diff --git a/Doc/latex/bit__access_8h__dep__incl.pdf b/Doc/latex/bit__access_8h__dep__incl.pdf index f3819bf3a613e308d62f91cd9aa7ca4d0b9b69fe..c12e60b552ad76f37c22d9451f20c7cf94c7f6a7 100644 GIT binary patch delta 18456 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 LHVP#rMNdWw`_|>p delta 18438 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 z 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 xCcY6X8D^z}w3m2Dw~OOLeJ#Pl__?H$_RLC&?PN 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 diff --git a/Doc/latex/bit__access_8h_source.tex b/Doc/latex/bit__access_8h_source.tex index 6db1955..101b72a 100644 --- a/Doc/latex/bit__access_8h_source.tex +++ b/Doc/latex/bit__access_8h_source.tex @@ -1,5 +1,5 @@ \doxysection{bit\+\_\+access.\+h} -\hypertarget{bit__access_8h_source}{}\label{bit__access_8h_source}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/bit\_access.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/bit\_access.h}} +\hypertarget{bit__access_8h_source}{}\label{bit__access_8h_source}\index{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/bit\_access.h@{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/bit\_access.h}} \mbox{\hyperlink{bit__access_8h}{Go to the documentation of this file.}} \begin{DoxyCode}{0} \DoxyCodeLine{\Hypertarget{bit__access_8h_source_l00001}00001\ \textcolor{comment}{/**\ }} @@ -8,7 +8,7 @@ \DoxyCodeLine{\Hypertarget{bit__access_8h_source_l00004}00004\ \textcolor{comment}{*\ @brief\ Заголочный\ файл\ для\ дефайнов\ битового\ доступа.}} \DoxyCodeLine{\Hypertarget{bit__access_8h_source_l00005}00005\ \textcolor{comment}{**************************************************************************}} \DoxyCodeLine{\Hypertarget{bit__access_8h_source_l00006}00006\ \textcolor{comment}{*\ @defgroup\ BIT\_ACCESS\_DEFINES\ \ \ \ Bit\ access\ defines}} -\DoxyCodeLine{\Hypertarget{bit__access_8h_source_l00007}00007\ \textcolor{comment}{*\ @ingroup\ \ MYLIBS\_DEFINES}} +\DoxyCodeLine{\Hypertarget{bit__access_8h_source_l00007}00007\ \textcolor{comment}{*\ @ingroup\ \ MYLIBS\_TOOLS\ }} \DoxyCodeLine{\Hypertarget{bit__access_8h_source_l00008}00008\ \textcolor{comment}{*\ @brief\ \ \ \ \ Макросы\ и\ typedef'ы\ для\ работы\ с\ битами\ в\ unsigned\ типах.}} \DoxyCodeLine{\Hypertarget{bit__access_8h_source_l00009}00009\ \textcolor{comment}{*\ @details}} \DoxyCodeLine{\Hypertarget{bit__access_8h_source_l00010}00010\ \textcolor{comment}{В\ этом\ файле\ определены\ макросы\ для\ получения\ значения\ конкретного\ бита\string^}} diff --git a/Doc/latex/files.tex b/Doc/latex/files.tex index 87d066a..e61d203 100644 --- a/Doc/latex/files.tex +++ b/Doc/latex/files.tex @@ -1,22 +1,17 @@ \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{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}}{} -\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{trace_8h}{trace.\+h}} \\*Заголочный файл для работы с трассировкой }{\pageref{trace_8h}}{} -\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{trackers_8h}{trackers.\+h}} \\*Заголочный файл для работы с трекерами \doxylink{group___t_r_a_c_k_e_r_s}{Trackers defines} }{\pageref{trackers_8h}}{} -\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+STM32\+\_\+\+General/\+Inc/\mbox{\hyperlink{____general__flash_8h_source}{\+\_\+\+\_\+general\+\_\+flash.\+h}} }{\pageref{____general__flash_8h_source}}{} -\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+STM32\+\_\+\+General/\+Inc/\mbox{\hyperlink{general__gpio_8h}{general\+\_\+gpio.\+h}} \\*Заголовочный файл для модуля инициализации портов и работы с ними }{\pageref{general__gpio_8h}}{} -\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+STM32\+\_\+\+General/\+Inc/\mbox{\hyperlink{general__spi_8h}{general\+\_\+spi.\+h}} \\*Заголовочный файл для модуля инициализации SPI }{\pageref{general__spi_8h}}{} -\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+STM32\+\_\+\+General/\+Inc/\mbox{\hyperlink{general__tim_8h}{general\+\_\+tim.\+h}} \\*Заголовочный файл для модуля инициализации таймеров и работы с ними }{\pageref{general__tim_8h}}{} -\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+STM32\+\_\+\+General/\+Inc/\mbox{\hyperlink{general__uart_8h}{general\+\_\+uart.\+h}} \\*Заголовочный файл для модуля инициализации UART }{\pageref{general__uart_8h}}{} -\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+STM32\+\_\+\+General/\+Src/\mbox{\hyperlink{____general__flash_8c_source}{\+\_\+\+\_\+general\+\_\+flash.\+c}} }{\pageref{____general__flash_8c_source}}{} -\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+STM32\+\_\+\+General/\+Src/\mbox{\hyperlink{general__gpio_8c}{general\+\_\+gpio.\+c}} \\*Модуль для инициализации портов и работы с ними }{\pageref{general__gpio_8c}}{} -\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+STM32\+\_\+\+General/\+Src/\mbox{\hyperlink{general__spi_8c}{general\+\_\+spi.\+c}} \\*Модуль для инициализации SPI }{\pageref{general__spi_8c}}{} -\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+STM32\+\_\+\+General/\+Src/\mbox{\hyperlink{general__tim_8c}{general\+\_\+tim.\+c}} \\*Модуль для инициализации таймеров и работы с ними }{\pageref{general__tim_8c}}{} -\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+STM32\+\_\+\+General/\+Src/\mbox{\hyperlink{general__uart_8c}{general\+\_\+uart.\+c}} \\*Модуль для инициализации UART }{\pageref{general__uart_8c}}{} +\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\mbox{\hyperlink{mainpage_8h_source}{mainpage.\+h}} }{\pageref{mainpage_8h_source}}{} +\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{bench__time_8h}{bench\+\_\+time.\+h}} \\*Заголовочный файл для измерения времени между событиями }{\pageref{bench__time_8h}}{} +\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{bit__access_8h}{bit\+\_\+access.\+h}} \\*Заголочный файл для дефайнов битового доступа }{\pageref{bit__access_8h}}{} +\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{gen__optimizer_8h}{gen\+\_\+optimizer.\+h}} \\*Заголовочный файл для адаптивного подбора параметров }{\pageref{gen__optimizer_8h}}{} +\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM\+\_\+\+Libs/\+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/\+STM\+\_\+\+Libs/\+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/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{mylibs__include_8h}{mylibs\+\_\+include.\+h}} \\*Заголочный файл для всех библиотек }{\pageref{mylibs__include_8h}}{} +\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{trace_8h}{trace.\+h}} \\*Заголочный файл для работы с трассировкой }{\pageref{trace_8h}}{} +\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{trackers_8h}{trackers.\+h}} \\*Заголочный файл для работы с трекерами \doxylink{group___t_r_a_c_k_e_r_s}{Trackers defines} }{\pageref{trackers_8h}}{} +\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+RTT/\mbox{\hyperlink{_s_e_g_g_e_r___r_t_t_8c_source}{SEGGER\+\_\+\+RTT.\+c}} }{\pageref{_s_e_g_g_e_r___r_t_t_8c_source}}{} +\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+RTT/\mbox{\hyperlink{_s_e_g_g_e_r___r_t_t_8h_source}{SEGGER\+\_\+\+RTT.\+h}} }{\pageref{_s_e_g_g_e_r___r_t_t_8h_source}}{} +\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+RTT/\mbox{\hyperlink{_s_e_g_g_e_r___r_t_t___conf_8h_source}{SEGGER\+\_\+\+RTT\+\_\+\+Conf.\+h}} }{\pageref{_s_e_g_g_e_r___r_t_t___conf_8h_source}}{} +\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+RTT/\mbox{\hyperlink{_s_e_g_g_e_r___r_t_t__printf_8c_source}{SEGGER\+\_\+\+RTT\+\_\+printf.\+c}} }{\pageref{_s_e_g_g_e_r___r_t_t__printf_8c_source}}{} +\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+RTT/\mbox{\hyperlink{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source}{SEGGER\+\_\+\+RTT\+\_\+\+Syscalls\+\_\+\+KEIL.\+c}} }{\pageref{_s_e_g_g_e_r___r_t_t___syscalls___k_e_i_l_8c_source}}{} \end{DoxyCompactList} diff --git a/Doc/latex/gen__optimizer_8h.tex b/Doc/latex/gen__optimizer_8h.tex index 9639f6c..a48eb99 100644 --- a/Doc/latex/gen__optimizer_8h.tex +++ b/Doc/latex/gen__optimizer_8h.tex @@ -1,5 +1,5 @@ -\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}} +\doxysection{E\+:/.WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/gen\+\_\+optimizer.h File Reference} +\hypertarget{gen__optimizer_8h}{}\label{gen__optimizer_8h}\index{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/gen\_optimizer.h@{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/gen\_optimizer.h}} Заголовочный файл для адаптивного подбора параметров @@ -8,20 +8,18 @@ {\ttfamily \#include "{}mylibs\+\_\+defs.\+h"{}}\newline {\ttfamily \#include $<$stdint.\+h$>$}\newline {\ttfamily \#include $<$stdlib.\+h$>$}\newline -Include dependency graph for gen\+\_\+optimizer.\+h\+: -\nopagebreak +Include dependency graph for gen\+\_\+optimizer.\+h\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode \includegraphics[width=295pt]{gen__optimizer_8h__incl} \end{center} \end{figure} -This graph shows which files directly or indirectly include this file\+: -\nopagebreak +This graph shows which files directly or indirectly include this file\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode -\includegraphics[width=212pt]{gen__optimizer_8h__dep__incl} +\includegraphics[width=223pt]{gen__optimizer_8h__dep__incl} \end{center} \end{figure} \doxysubsubsection*{Classes} diff --git a/Doc/latex/gen__optimizer_8h__dep__incl.md5 b/Doc/latex/gen__optimizer_8h__dep__incl.md5 index d842556..3efea19 100644 --- a/Doc/latex/gen__optimizer_8h__dep__incl.md5 +++ b/Doc/latex/gen__optimizer_8h__dep__incl.md5 @@ -1 +1 @@ -f620087f87f5ce223eef2578f5c74e74 \ No newline at end of file +0edaf92a63ea1a4519c63edb0b8e1595 \ 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 index be1ec98ea5f4599e4e29b16f15b51d5c7eec960f..54ccfd51492a7669f2f01292a86936c61a3fc886 100644 GIT binary patch delta 19548 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 q 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 FMhf)Y;86eo diff --git a/Doc/latex/gen__optimizer_8h_source.tex b/Doc/latex/gen__optimizer_8h_source.tex index a7832c0..a42d6a5 100644 --- a/Doc/latex/gen__optimizer_8h_source.tex +++ b/Doc/latex/gen__optimizer_8h_source.tex @@ -1,5 +1,5 @@ \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}} +\hypertarget{gen__optimizer_8h_source}{}\label{gen__optimizer_8h_source}\index{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/gen\_optimizer.h@{E:/.WORK/STM32/STM\_Libs/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}{/**}} @@ -8,337 +8,336 @@ \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_l00007}00007\ \textcolor{comment}{*\ @brief\ \ \ \ \ \ Библиотека\ для\ эволюционного\ подбора\ параметров}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00008}00008\ \textcolor{comment}{*\ @details}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00009}00009\ \textcolor{comment}{Поддерживает:}} +\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_l00016}00016\ \textcolor{comment}{Параметры\ для\ конфигурации:}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00017}00017\ \textcolor{comment}{-\/\ @ref\ GEN\_OPTIMIZATION\_ENABLE\ -\/\ Включить\ оптимизацию\ параметров}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00018}00018\ \textcolor{comment}{\ \ Если\ библиотека\ отключена\ @ref\ GEN\_OPTIMIZATION\_ENABLE,\ то\ вставляются\ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00019}00019\ \textcolor{comment}{\ \ заглушки,\ никак\ не\ влияющие\ на\ параметры\ и\ остальную\ программу}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00020}00020\ \textcolor{comment}{-\/\ @ref\ GEN\_MAX\_PARAMS\ \ \ \ \ \ \ \ \ \ -\/\ Максимальное\ количество\ параметров}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00021}00021\ \textcolor{comment}{-\/\ @ref\ GEN\_MAX\_CANDIDATES\ \ \ \ \ \ -\/\ Максимальное\ количество\ кандидатов\ для\ обучения}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00022}00022\ \textcolor{comment}{-\/\ (опционально)\ @ref\ GEN\_MUTATION\_MIN\_PCT\ \ \ \ \ \ \ -\/\ Минимальная\ мутация\ в\ процентах\ от\ Loss\ (по\ умолчанию\ 10\%)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00023}00023\ \textcolor{comment}{-\/\ (опционально)\ @ref\ GEN\_MUTATION\_MAX\_PCT\ \ \ \ \ \ \ -\/\ Максимальная\ мутация\ в\ процентах\ от\ Loss\ (по\ умолчанию\ 100\%)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00024}00024\ \textcolor{comment}{-\/\ (опционально)\ @ref\ ELOVLE\_N\_ELITE\_CANDIDATE\ \ \ -\/\ Количество\ кандидатов,\ которые\ проходят\ в\ поколение\ без\ изменений}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00025}00025\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00026}00026\ \textcolor{comment}{@par\ Пример\ использования:}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00027}00027\ \textcolor{comment}{@code}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00028}00028\ \textcolor{comment}{\#include\ "{}gen\_optimizer.h"{}}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00029}00029\ \textcolor{comment}{\#define\ N\_PARAMS\ \ \ \ \ \ \ \ 4}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00030}00030\ \textcolor{comment}{\#define\ N\_CANDIDATES\ \ \ \ 100}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00031}00031\ \textcolor{comment}{\#define\ N\_BEST\ \ \ \ \ \ \ \ \ \ 10}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00032}00032\ \textcolor{comment}{\#define\ MUTATION\ \ \ \ \ \ \ \ 0.1f}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00033}00033\ \textcolor{comment}{float\ params[N\_PARAMS];}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00034}00034\ \textcolor{comment}{GenOptimizer\_t\ optimizer;}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00035}00035\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00036}00036\ \textcolor{comment}{//\ Формирование\ параметров}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00037}00037\ \textcolor{comment}{uint16\_t\ \ param\_u16\ =\ 800;}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00038}00038\ \textcolor{comment}{float\ \ \ \ \ param\_f\ \ \ =\ 0.01f;}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00039}00039\ \textcolor{comment}{uint8\_t\ \ \ param\_u8\ \ =\ 40;}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00040}00040\ \textcolor{comment}{int16\_t\ \ \ param\_i16\ =\ 1600;}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00041}00041\ \textcolor{comment}{params[0]\ =\ PARAM\_SCALE(param\_u16,\ \ 0.0f,\ \ \ 1000.0f);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00042}00042\ \textcolor{comment}{params[1]\ =\ PARAM\_SCALE(param\_f,\ \ \ \ 0.001f,\ 0.1f);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00043}00043\ \textcolor{comment}{params[2]\ =\ PARAM\_SCALE(param\_u8,\ \ \ 10.0f,\ \ 100.0f);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00044}00044\ \textcolor{comment}{params[3]\ =\ PARAM\_SCALE(param\_i16,\ \ 500.0f,\ 5000.0f);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00045}00045\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00046}00046\ \textcolor{comment}{//\ Инициалиазция}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00047}00047\ \textcolor{comment}{GenOptimizer\_Init(\&optimizer,\ N\_PARAMS,\ N\_CANDIDATES,\ N\_BEST,\ MUTATION,\ params);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00048}00048\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00049}00049\ \textcolor{comment}{//\ Шаг\ эволюции}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00050}00050\ \textcolor{comment}{float\ loss\ =\ calc\_loss();\ //\ расчет\ эффективности\ параметров\ (от\ 0\ до\ 1)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00051}00051\ \textcolor{comment}{GenOptimizer\_Step(\&optimizer,\ params,\ loss);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00052}00052\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00053}00053\ \textcolor{comment}{//\ Взятие\ следующих\ для\ эволюции\ параметров}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00054}00054\ \textcolor{comment}{param\_u16\ =\ PARAM\_UNSCALE(params[0],\ \ 0.0f,\ \ \ 1000.0f);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00055}00055\ \textcolor{comment}{param\_f\ \ \ =\ PARAM\_UNSCALE(params[1],\ \ 0.001f,\ 0.1f);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00056}00056\ \textcolor{comment}{param\_u8\ \ =\ PARAM\_UNSCALE(params[2],\ \ 10.0f,\ \ 100.0f);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00057}00057\ \textcolor{comment}{param\_i16\ =\ PARAM\_UNSCALE(params[3],\ \ 500.0f,\ 5000.0f);}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00058}00058\ \textcolor{comment}{@endcode}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00059}00059\ \textcolor{comment}{*\ @\{\ \ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00060}00060\ \textcolor{comment}{*****************************************************************************/}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00061}00061\ \textcolor{preprocessor}{\#ifndef\ \_\_GEN\_OPTIMIZER\_H\_}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00062}00062\ \textcolor{preprocessor}{\#define\ \_\_GEN\_OPTIMIZER\_H\_}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00063}00063\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00064}00064\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{mylibs__defs_8h}{mylibs\_defs.h}}"{}}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00065}00065\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00066}00066\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00067}00067\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00068}00068\ \textcolor{preprocessor}{\#ifdef\ GEN\_OPTIMIZATION\_ENABLE}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00069}00069\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00070}00070\ \textcolor{comment}{\ \ *\ @brief\ Линейное\ масштабирование\ x\ из\ диапазона\ [min\_val,\ max\_val]\ в\ диапазон\ [0,\ 1)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00071}00071\ \textcolor{comment}{\ \ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00072}\mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga83abbcabaff9111c03ae2475ee72ea3e}{00072}}\ \textcolor{preprocessor}{\#define\ PARAM\_SCALE(x,\ min\_val,\ max\_val)\ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00073}00073\ \textcolor{preprocessor}{(((float)(x)\ -\/\ (float)(min\_val))\ /\ ((float)(max\_val)\ -\/\ (float)(min\_val)))}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00074}00074\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00075}00075\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00076}00076\ \textcolor{comment}{\ \ *\ @brief\ Обратное\ линейное\ масштабирование\ значения\ из\ [0,\ 1)\ в\ диапазон\ [min\_val,\ max\_val]}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00077}00077\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00078}\mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa1d5510fe5f0bd989473f3ebe324bde3}{00078}}\ \textcolor{preprocessor}{\#define\ PARAM\_UNSCALE(val,\ min\_val,\ max\_val)\ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00079}00079\ \textcolor{preprocessor}{(((float)(val))\ *\ ((float)(max\_val)\ -\/\ (float)(min\_val))\ +\ (float)(min\_val))}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00080}00080\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00081}00081\ \textcolor{preprocessor}{\#ifndef\ local\_time}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00082}00082\ \textcolor{preprocessor}{\#define\ local\_time()\ \ HAL\_GetTick()\ }\textcolor{comment}{///<\ Локальное\ время}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00083}00083\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00084}00084\ } \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_l00087}00087\ \textcolor{preprocessor}{\#ifndef\ GEN\_MUTATION\_MIN\_PCT}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00088}\mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga3db7bdf57549722427e1e72dcaa87068}{00088}}\ \textcolor{preprocessor}{\#define\ GEN\_MUTATION\_MIN\_PCT\ \ \ 10\ \ \ \ }\textcolor{comment}{///<\ Минимальная\ мутация\ (в\ процентах\ от\ Loss)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00089}00089\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00090}00090\ \textcolor{preprocessor}{\#ifndef\ GEN\_MUTATION\_MAX\_PCT}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00091}\mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga48dca8f0a0c9b96d02236ef76ac827fd}{00091}}\ \textcolor{preprocessor}{\#define\ GEN\_MUTATION\_MAX\_PCT\ \ \ 100\ \ \ }\textcolor{comment}{///<\ Максимальная\ мутация\ (в\ процентах\ от\ Loss)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00092}00092\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00093}00093\ \textcolor{preprocessor}{\#ifndef\ ELOVLE\_N\_ELITE\_CANDIDATE}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00094}\mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga38607e23d9234524bc7de5869b15b8eb}{00094}}\ \textcolor{preprocessor}{\#define\ ELOVLE\_N\_ELITE\_CANDIDATE\ \ 2\ \ \ \ \ }\textcolor{comment}{///<\ Количество\ кандидатов,\ которые\ проходят\ в\ поколение\ без\ изменений\ (по\ умолчанию\ 2)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00095}00095\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00096}00096\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00097}00097\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00098}00098\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00099}00099\ \textcolor{comment}{\ \ *\ @brief\ Структура\ эволюционного\ оптимизатора}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00100}00100\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00101}\mbox{\hyperlink{struct_gen_optimizer__t}{00101}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00102}\mbox{\hyperlink{struct_gen_optimizer__t_abe0aacea949fbe93e5d4c002e37d7192}{00102}}\ \ \ \textcolor{keywordtype}{float}\ \ \ \ \ \mbox{\hyperlink{struct_gen_optimizer__t_abe0aacea949fbe93e5d4c002e37d7192}{stability}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Коэффициент\ насколько\ стабильная\ популяция\ (0..1)(@ref\ n\_cand)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00103}00103\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00104}\mbox{\hyperlink{struct_gen_optimizer__t_afe598a90024a8aa628dd16f3a2b38eb5}{00104}}\ \ \ uint16\_t\ \ \mbox{\hyperlink{struct_gen_optimizer__t_afe598a90024a8aa628dd16f3a2b38eb5}{n\_params}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Количество\ параметров}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00105}\mbox{\hyperlink{struct_gen_optimizer__t_a9e20d2f6f39a5147e6dbac46baca73a9}{00105}}\ \ \ uint16\_t\ \ \mbox{\hyperlink{struct_gen_optimizer__t_a9e20d2f6f39a5147e6dbac46baca73a9}{n\_cand}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Количество\ кандидатов\ в\ популяции}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00106}\mbox{\hyperlink{struct_gen_optimizer__t_a8201f1eede36a2c04ec7b4caac7465c9}{00106}}\ \ \ uint16\_t\ \ \mbox{\hyperlink{struct_gen_optimizer__t_a8201f1eede36a2c04ec7b4caac7465c9}{n\_best}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Количество\ лучших,\ усредняемых}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00107}\mbox{\hyperlink{struct_gen_optimizer__t_ad4dc0e53b3ca6bf2a642dfe7a1d1f26c}{00107}}\ \ \ \textcolor{keywordtype}{float}\ \ \ \ \ \mbox{\hyperlink{struct_gen_optimizer__t_ad4dc0e53b3ca6bf2a642dfe7a1d1f26c}{mutation\_amp}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Амплитуда\ мутации\ (0..1)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00108}00108\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00109}\mbox{\hyperlink{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}{00109}}\ \ \ uint16\_t\ \ \mbox{\hyperlink{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}{cand\_index}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Индекс\ текущего\ кандидата}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00110}\mbox{\hyperlink{struct_gen_optimizer__t_a8f226c85e9bb034cb811aa0366bb191c}{00110}}\ \ \ uint16\_t\ \ \mbox{\hyperlink{struct_gen_optimizer__t_a8f226c85e9bb034cb811aa0366bb191c}{gen\_index}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Индекс\ популяции\ \ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00111}00111\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00112}00112\ \ \ \textcolor{comment}{//INTERNAL}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00113}\mbox{\hyperlink{struct_gen_optimizer__t_acfeb93ef4823e09473ddba52fae9a6b1}{00113}}\ \ \ \textcolor{keywordtype}{float}\ \ \ \ \ \mbox{\hyperlink{struct_gen_optimizer__t_acfeb93ef4823e09473ddba52fae9a6b1}{gen\_mut}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Амплитуда\ мутации\ у\ текущей\ популяции\ \ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00114}00114\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00115}\mbox{\hyperlink{struct_gen_optimizer__t_ae74a211c5ab6d58ffc147bb65e8fdafa}{00115}}\ \ \ \textcolor{keywordtype}{float}\ \ \ \ \ \mbox{\hyperlink{struct_gen_optimizer__t_ae74a211c5ab6d58ffc147bb65e8fdafa}{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_l00116}\mbox{\hyperlink{struct_gen_optimizer__t_af0161e7c0b6ab691b8b59d522808f947}{00116}}\ \ \ \textcolor{keywordtype}{float}\ \ \ \ \ \mbox{\hyperlink{struct_gen_optimizer__t_af0161e7c0b6ab691b8b59d522808f947}{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_l00117}\mbox{\hyperlink{struct_gen_optimizer__t_a473a62c538392b7735d660f303377320}{00117}}\ \ \ uint16\_t\ \ \mbox{\hyperlink{struct_gen_optimizer__t_a473a62c538392b7735d660f303377320}{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_l00118}00118\ \}\ \mbox{\hyperlink{struct_gen_optimizer__t}{GenOptimizer\_t}};} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00119}00119\ } \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_l00121}00121\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00122}00122\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00123}00123\ \textcolor{comment}{\ *\ @cond\ GEN\_INTERNAL}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00124}00124\ \textcolor{comment}{\ */}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00125}00125\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00126}00126\ \textcolor{comment}{//\ Вспомогательный\ указатель\ для\ сортировки}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00127}00127\ \textcolor{keyword}{static}\ \mbox{\hyperlink{struct_gen_optimizer__t}{GenOptimizer\_t}}\ *g\_sort\_opt;\ \textcolor{comment}{//\ глобальный\ указатель\ на\ текущий\ оптимизатор}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00128}00128\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00129}00129\ \textcolor{comment}{//\ функция\ условия\ сортировки}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00130}00130\ \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_l00131}00131\ \ \ \textcolor{keywordflow}{if}\ (g\_sort\_opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ae74a211c5ab6d58ffc147bb65e8fdafa}{loss}}[*(\textcolor{keyword}{const}\ uint16\_t*)a]\ <\ g\_sort\_opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ae74a211c5ab6d58ffc147bb65e8fdafa}{loss}}[*(\textcolor{keyword}{const}\ uint16\_t*)b])\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00132}00132\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00133}00133\ \ \ \textcolor{keywordflow}{if}\ (g\_sort\_opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ae74a211c5ab6d58ffc147bb65e8fdafa}{loss}}[*(\textcolor{keyword}{const}\ uint16\_t*)a]\ >\ g\_sort\_opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ae74a211c5ab6d58ffc147bb65e8fdafa}{loss}}[*(\textcolor{keyword}{const}\ uint16\_t*)b])\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00134}00134\ \ \ \ \ \textcolor{keywordflow}{return}\ 1;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00135}00135\ \ \ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00136}00136\ \}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00137}00137\ \textcolor{comment}{/**\ @endcond\ */}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00138}00138\ } \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_l00142}00142\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00143}00143\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00144}00144\ \textcolor{comment}{\ \ *\ @brief\ Инициализация\ эволюционного\ оптимизатора.}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00145}00145\ \textcolor{comment}{\ \ *\ @param\ opt\ \ \ \ \ \ \ \ \ \ Указатель\ на\ структуру\ оптимизатора}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00146}00146\ \textcolor{comment}{\ \ *\ @param\ n\_params\ \ \ \ \ Количество\ параметров\ в\ одном\ кандидате}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00147}00147\ \textcolor{comment}{\ \ *\ @param\ n\_cand\ \ \ \ \ \ \ Количество\ кандидатов}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00148}00148\ \textcolor{comment}{\ \ *\ @param\ n\_best\ \ \ \ \ \ \ Количество\ лучших,\ усредняемых}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00149}00149\ \textcolor{comment}{\ \ *\ @param\ mutation\_amp\ Амплитуда\ мутации\ (в\ диапазоне\ 0.0–1.0)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00150}00150\ \textcolor{comment}{\ \ *\ @param\ start\_params\ Начальные\ параметры\ (в\ диапазоне\ 0.0–1.0)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00151}00151\ \textcolor{comment}{\ \ *\ @return\ 0\ \ \ —\ если\ окей,\ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00152}00152\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ -\/1\ \ —\ если\ ошибка}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00153}00153\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00154}\mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_ga2db1df46b4082ad9280ef4344fdf4e8a}{00154}}\ \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_l00155}00155\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint16\_t\ n\_params,} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00156}00156\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint16\_t\ n\_cand,} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00157}00157\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint16\_t\ n\_best,} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00158}00158\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ mutation\_amp,} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00159}00159\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}*\ start\_params)} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00160}00160\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00161}00161\ \ \ \textcolor{keywordflow}{if}((opt\ ==\ NULL)\ ||\ (start\_params\ ==\ NULL))} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00162}00162\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00163}00163\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00164}00164\ \ \ \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_l00165}00165\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00166}00166\ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_afe598a90024a8aa628dd16f3a2b38eb5}{n\_params}}\ \ \ \ \ =\ n\_params;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00167}00167\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00168}00168\ \ \ \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_l00169}00169\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00170}00170\ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a9e20d2f6f39a5147e6dbac46baca73a9}{n\_cand}}\ \ \ \ \ \ \ =\ n\_cand;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00171}00171\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00172}00172\ \ \ \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_l00173}00173\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00174}00174\ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8201f1eede36a2c04ec7b4caac7465c9}{n\_best}}\ \ \ \ \ \ \ =\ n\_best;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00175}00175\ \ \ } \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_l00177}00177\ \ \ \textcolor{keywordflow}{if}((mutation\_amp\ >\ 1)\ ||\ (mutation\_amp\ <\ 0))} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00178}00178\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00179}00179\ \ \ \textcolor{keywordflow}{if}(mutation\_amp\ <=\ 0.001f)} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00180}00180\ \ \ \ \ mutation\_amp\ =\ 0.001f;\ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00181}00181\ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ad4dc0e53b3ca6bf2a642dfe7a1d1f26c}{mutation\_amp}}\ \ =\ mutation\_amp;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00182}00182\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00183}00183\ \ \ 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_l00184}00184\ \textcolor{preprocessor}{\#ifdef\ ADC1}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00185}00185\ \ \ seed\ +=\ (ADC1-\/>DR\ \&\ 0xFF);} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00186}00186\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00187}00187\ \ \ srand(seed);} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00188}00188\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00189}00189\ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_cand;\ i++)\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00190}00190\ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ j\ =\ 0;\ j\ <\ n\_params;\ j++)\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00191}00191\ \ \ \ \ \ \ \textcolor{comment}{//\ Добавляем\ случайную\ мутацию\ вокруг\ стартового\ параметра}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00192}00192\ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ base\ =\ start\_params[j];} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00193}00193\ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ inv\_randmax\ =\ 1.0f\ /\ (float)RAND\_MAX;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00194}00194\ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ noise\ =\ ((float)rand()\ *\ inv\_randmax\ *\ 2.0f\ -\/\ 1.0f)\ *\ mutation\_amp;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00195}00195\ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_af0161e7c0b6ab691b8b59d522808f947}{candidates}}[i][j]\ =\ base\ +\ noise;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00196}00196\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_af0161e7c0b6ab691b8b59d522808f947}{candidates}}[i][j]\ <\ 0.0f)\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_af0161e7c0b6ab691b8b59d522808f947}{candidates}}[i][j]\ =\ 0.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00197}00197\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_af0161e7c0b6ab691b8b59d522808f947}{candidates}}[i][j]\ >\ 1.0f)\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_af0161e7c0b6ab691b8b59d522808f947}{candidates}}[i][j]\ =\ 1.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00198}00198\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00199}00199\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ae74a211c5ab6d58ffc147bb65e8fdafa}{loss}}[i]\ =\ 0.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00200}00200\ \ \ \}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00201}00201\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00202}00202\ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}{cand\_index}}\ =\ 0;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00203}00203\ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8f226c85e9bb034cb811aa0366bb191c}{gen\_index}}\ =\ 0;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00204}00204\ \ \ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00205}00205\ \}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00206}00206\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00207}00207\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00208}00208\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00209}00209\ \textcolor{comment}{\ \ *\ @brief\ Один\ шаг\ эволюционного\ оптимизатора.}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00210}00210\ \textcolor{comment}{\ \ *\ @param\ opt\ \ \ \ Указатель\ на\ структуру\ оптимизатора}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00211}00211\ \textcolor{comment}{\ \ *\ @param\ params\ Массив\ параметров,\ которые\ будут\ обновлены\ (на\ выходе\ —\ новые\ параметры)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00212}00212\ \textcolor{comment}{\ \ *\ @param\ loss\ \ \ Loss\ текущего\ кандидата}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00213}00213\ \textcolor{comment}{\ \ *\ @return\ 0\ \ \ —\ если\ окей,\ }} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00214}00214\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ -\/1\ \ —\ если\ ошибка}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00215}00215\ \textcolor{comment}{\ \ *\ @details}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00216}00216\ \textcolor{comment}{\ \ *\ Сохраняет\ loss\ текущего\ кандидата\ и\ формирует\ параметры\ следующего\ кандидата.}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00217}00217\ \textcolor{comment}{\ \ *\ Если\ накоплено\ n\_cand\ кандидатов,\ генерируется\ новое\ поколение.}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00218}00218\ \textcolor{comment}{\ \ *\ Новое\ поколение\ формируется\ случайным\ выбором\ из\ n\_best\ лучших\ с\ добавлением\ мутации.}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00219}00219\ \textcolor{comment}{\ \ *}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00220}00220\ \textcolor{comment}{\ \ *\ На\ выходе\ params\ содержит\ параметры\ следующего\ кандидата\ для\ измерений.}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00221}00221\ \textcolor{comment}{\ \ *\ @note\ Функция\ использует\ глобальную\ внутреннюю\ переменную\ для\ сортировки.}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00222}00222\ \textcolor{comment}{\ \ *\ Надо\ убедится\ что\ только\ один\ экземпляр\ функции\ запущен\ в\ момент\ времени}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00223}00223\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00224}\mbox{\hyperlink{group___g_e_n___o_p_t_i_m_i_z_e_r_gaa9a4c4f43f7beb926c85bd4817ebd628}{00224}}\ \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_l00225}00225\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}*\ params,} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00226}00226\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ loss)} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00227}00227\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00228}00228\ \ \ \textcolor{keywordflow}{if}((opt\ ==\ NULL)\ ||\ (params\ ==\ NULL))} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00229}00229\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00230}00230\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00231}00231\ \ \ uint16\_t\ n\_params\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_afe598a90024a8aa628dd16f3a2b38eb5}{n\_params}};\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00232}00232\ \ \ \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_l00233}00233\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00234}00234\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00235}00235\ \ \ uint16\_t\ n\_cand\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a9e20d2f6f39a5147e6dbac46baca73a9}{n\_cand}};\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00236}00236\ \ \ \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_l00237}00237\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;\ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00238}00238\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00239}00239\ \ \ uint16\_t\ n\_best\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8201f1eede36a2c04ec7b4caac7465c9}{n\_best}};\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00240}00240\ \ \ \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_l00241}00241\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00242}00242\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00243}00243\ \ \ \textcolor{keywordtype}{float}\ \ \ \ mut\ \ \ \ \ \ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ad4dc0e53b3ca6bf2a642dfe7a1d1f26c}{mutation\_amp}};} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00244}00244\ \ \ \textcolor{keywordflow}{if}((mut\ >\ 1)\ ||(mut\ <\ 0))} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00245}00245\ \ \ \ \ \textcolor{keywordflow}{return}\ -\/1;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00246}00246\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00247}00247\ \ \ \textcolor{comment}{//\ 1.\ Сохраняем\ loss\ текущего\ кандидата}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00248}00248\ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ae74a211c5ab6d58ffc147bb65e8fdafa}{loss}}[opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}{cand\_index}}]\ =\ loss;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00249}00249\ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}{cand\_index}}++;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00250}00250\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00251}00251\ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}{cand\_index}}\ >=\ n\_cand)\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00252}00252\ \ \ \ \ \textcolor{comment}{//\ 2.\ Сортируем\ текущее\ поколение\ по\ loss}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00253}00253\ \ \ \ \ \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_l00254}00254\ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a473a62c538392b7735d660f303377320}{sorted\_idx}}[i]\ =\ i;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00255}00255\ \ \ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00256}00256\ \ \ \ \ g\_sort\_opt\ =\ opt;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00257}00257\ \ \ \ \ qsort(opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a473a62c538392b7735d660f303377320}{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_l00258}00258\ \ \ \ \ g\_sort\_opt\ =\ NULL;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00259}00259\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00260}00260\ \ \ \ \ \textcolor{comment}{//\ -\/-\/-\/\ Адаптивная\ мутация\ в\ зависимости\ от\ Loss\ -\/-\/-\/}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00261}00261\ \ \ \ \ \textcolor{keywordtype}{float}\ best\_loss\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ae74a211c5ab6d58ffc147bb65e8fdafa}{loss}}[opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a473a62c538392b7735d660f303377320}{sorted\_idx}}[0]];} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00262}00262\ \ \ \ \ \textcolor{keywordtype}{float}\ worst\_loss\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ae74a211c5ab6d58ffc147bb65e8fdafa}{loss}}[opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a473a62c538392b7735d660f303377320}{sorted\_idx}}[opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a9e20d2f6f39a5147e6dbac46baca73a9}{n\_cand}}\ -\/\ 1]];} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00263}00263\ \ \ \ \ \textcolor{keywordtype}{float}\ diff\ =\ worst\_loss\ -\/\ best\_loss;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00264}00264\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00265}00265\ \ \ \ \ \textcolor{keywordtype}{float}\ sum\_loss\ =\ 0.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00266}00266\ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_cand;\ i++)} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00267}00267\ \ \ \ \ \ \ sum\_loss\ +=\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ae74a211c5ab6d58ffc147bb65e8fdafa}{loss}}[i];} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00268}00268\ \ \ \ \ \textcolor{keywordtype}{float}\ avg\_loss\ =\ sum\_loss\ /\ (float)n\_cand;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00269}00269\ \ \ \ \ } \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}{\ \ */}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00271}00271\ \ \ \ \ \textcolor{keywordtype}{float}\ loss\_ratio\ =\ (diff\ >\ 0.0f)\ ?\ ((avg\_loss\ -\/\ best\_loss)\ /\ diff)\ :\ 0.5f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00272}00272\ \ \ \ \ \textcolor{keywordflow}{if}\ (loss\_ratio\ <\ 0.0f)\ loss\_ratio\ =\ 0.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00273}00273\ \ \ \ \ \textcolor{keywordflow}{if}\ (loss\_ratio\ >\ 1.0f)\ loss\_ratio\ =\ 1.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00274}00274\ \ \ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00275}00275\ \ \ \ \ \textcolor{comment}{//\ Записываем\ стабильность\ популяции\ в\ структуру}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00276}00276\ \ \ \ \ \textcolor{keywordflow}{if}(diff\ <\ 0.0f)\ diff\ =\ 0.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00277}00277\ \ \ \ \ \textcolor{keywordflow}{if}(diff\ >\ 1.0f)\ diff\ =\ 1.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00278}00278\ \ \ \ \ 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_l00279}00279\ \ \ \ \ \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_l00280}00280\ \ \ \ \ \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_l00281}00281\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00282}00282\ \ \ \ \ \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_l00283}00283\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\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_l00284}00284\ \ \ \ \ \textcolor{keywordtype}{float}\ adaptive\_mut\ =\ mut\ *\ (mut\_pct\ /\ 100.0f);} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00285}00285\ \ \ \ \ \textcolor{keywordflow}{if}\ (adaptive\_mut\ <\ 0.0001f)\ adaptive\_mut\ =\ 0.0001f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00286}00286\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_acfeb93ef4823e09473ddba52fae9a6b1}{gen\_mut}}\ =\ adaptive\_mut;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00287}00287\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00288}00288\ \ \ \ \ \textcolor{comment}{//\ 3.\ Генерируем\ новое\ поколение}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00289}00289\ \ \ \ \ 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_l00290}00290\ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ c\ =\ 0;\ c\ <\ n\_cand;\ c++)\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00291}00291\ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (c\ <\ n\_elite)\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00292}00292\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_params;\ i++)} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00293}00293\ \ \ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_af0161e7c0b6ab691b8b59d522808f947}{candidates}}[c][i]\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_af0161e7c0b6ab691b8b59d522808f947}{candidates}}[opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a473a62c538392b7735d660f303377320}{sorted\_idx}}[c]][i];} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00294}00294\ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ae74a211c5ab6d58ffc147bb65e8fdafa}{loss}}[c]\ =\ 0.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00295}00295\ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00296}00296\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (uint16\_t\ i\ =\ 0;\ i\ <\ n\_params;\ i++)\ \{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00297}00297\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ inv\_randmax\ =\ 1.0f\ /\ (float)RAND\_MAX;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00298}00298\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ noise\ =\ ((float)rand()\ *\ inv\_randmax\ *\ 2.0f\ -\/\ 1.0f)\ *\ adaptive\_mut;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00299}00299\ \ \ \ \ \ \ \ \ \ \ uint16\_t\ parent\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a473a62c538392b7735d660f303377320}{sorted\_idx}}[rand()\ \%\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8201f1eede36a2c04ec7b4caac7465c9}{n\_best}}];} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00300}00300\ \ \ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_af0161e7c0b6ab691b8b59d522808f947}{candidates}}[c][i]\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_af0161e7c0b6ab691b8b59d522808f947}{candidates}}[parent][i]\ +\ noise;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00301}00301\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_af0161e7c0b6ab691b8b59d522808f947}{candidates}}[c][i]\ <\ 0.0f)\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_af0161e7c0b6ab691b8b59d522808f947}{candidates}}[c][i]\ =\ 0.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00302}00302\ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_af0161e7c0b6ab691b8b59d522808f947}{candidates}}[c][i]\ >\ 1.0f)\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_af0161e7c0b6ab691b8b59d522808f947}{candidates}}[c][i]\ =\ 1.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00303}00303\ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00304}00304\ \ \ \ \ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_ae74a211c5ab6d58ffc147bb65e8fdafa}{loss}}[c]\ =\ 0.0f;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00305}00305\ \ \ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00306}00306\ \ \ \ \ \}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00307}00307\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}{cand\_index}}\ =\ 0;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00308}00308\ \ \ \ \ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a8f226c85e9bb034cb811aa0366bb191c}{gen\_index}}++;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00309}00309\ \ \ \}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00310}00310\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00311}00311\ \ \ \textcolor{comment}{//\ 4.\ Возвращаем\ параметры\ следующего\ кандидата}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00312}00312\ \ \ \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_l00313}00313\ \ \ \ \ params[i]\ =\ opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_af0161e7c0b6ab691b8b59d522808f947}{candidates}}[opt-\/>\mbox{\hyperlink{struct_gen_optimizer__t_a04a72c1a13e17581e84eaaf3d245bbfc}{cand\_index}}][i];} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00314}00314\ \ \ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00315}00315\ \ \ \textcolor{keywordflow}{return}\ 0;} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00316}00316\ \}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00317}00317\ \textcolor{preprocessor}{\#else\ }\textcolor{comment}{//\ GEN\_OPTIMIZATION\_ENABLE}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00318}00318\ \textcolor{comment}{//заглушки}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00319}00319\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\{} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00320}00320\ \ \ uint16\_t\ n\_params;\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00321}00321\ \ \ uint16\_t\ n\_cand;\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00322}00322\ \ \ uint16\_t\ n\_best;\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00323}00323\ \ \ \textcolor{keywordtype}{float}\ mutation\_amp;\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00324}00324\ \ \ \textcolor{keywordtype}{float}\ loss[0];\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00325}00325\ \ \ \textcolor{keywordtype}{float}\ candidates[0][0];\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00326}00326\ \}\ \mbox{\hyperlink{struct_gen_optimizer__t}{GenOptimizer\_t}};} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00327}00327\ \textcolor{preprocessor}{\#define\ GenOptimizer\_Init(opt,\ n\_params,\ n\_cand,\ n\_best,\ mutation\_amp,\ start\_params)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00328}00328\ \textcolor{preprocessor}{\#define\ GenOptimizer\_Step(opt,\ params,\ LossFunc)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00329}00329\ \textcolor{preprocessor}{\#define\ PARAM\_SCALE(x,\ min\_val,\ max\_val)\ \ \ \ \ \ \ \ \ (x)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00330}00330\ \textcolor{preprocessor}{\#define\ PARAM\_UNSCALE(val,\ min\_val,\ max\_val)\ \ \ \ \ (val)}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00331}00331\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ GEN\_OPTIMIZATION\_ENABLE}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00332}00332\ } +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00333}00333\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ \_\_GEN\_OPTIMIZER\_H\_}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00334}00334\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00335}00335\ \textcolor{comment}{/**\ GEN\_OPTIMIZER}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00336}00336\ \textcolor{comment}{\ \ *\ @\}}} +\DoxyCodeLine{\Hypertarget{gen__optimizer_8h_source_l00337}00337\ \textcolor{comment}{\ \ */}} \end{DoxyCode} diff --git a/Doc/latex/group___b_e_n_c_h___t_i_m_e.md5 b/Doc/latex/group___b_e_n_c_h___t_i_m_e.md5 index a1ee85e..a4cef7c 100644 --- a/Doc/latex/group___b_e_n_c_h___t_i_m_e.md5 +++ b/Doc/latex/group___b_e_n_c_h___t_i_m_e.md5 @@ -1 +1 @@ -15b595630eeca30c57a018017bc540ba \ No newline at end of file +6705808550d728844cfae44f809a322b \ No newline at end of file diff --git a/Doc/latex/group___b_e_n_c_h___t_i_m_e.pdf b/Doc/latex/group___b_e_n_c_h___t_i_m_e.pdf index 0cab24d459c0ff67694d2de94423a42b507eea49..c3a600a7fb3e5b55a79a225b0ba8ce7f36ba4fe7 100644 GIT binary patch delta 12884 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 delta 12064 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 K3MC~)PeuyjmL*;Q diff --git a/Doc/latex/group___b_e_n_c_h___t_i_m_e.tex b/Doc/latex/group___b_e_n_c_h___t_i_m_e.tex index 46cb9e6..fea06f9 100644 --- a/Doc/latex/group___b_e_n_c_h___t_i_m_e.tex +++ b/Doc/latex/group___b_e_n_c_h___t_i_m_e.tex @@ -5,12 +5,11 @@ Библиотека для измерения времени/тиков между событиями -Collaboration diagram for Time measurement\+: -\nopagebreak +Collaboration diagram for Time measurement\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode -\includegraphics[width=291pt]{group___b_e_n_c_h___t_i_m_e} +\includegraphics[width=286pt]{group___b_e_n_c_h___t_i_m_e} \end{center} \end{figure} \doxysubsubsubsubsection*{Classes} @@ -112,7 +111,7 @@ static \mbox{\hyperlink{struct_bench_time__t}{Bench\+Time\+\_\+t}} \mbox{\hyperl \DoxyCodeLine{uint32\_t\ count\ =\ \mbox{\hyperlink{group___b_e_n_c_h___t_i_m_e_gabd1301ca79a30c782970f89fd147df3a}{BenchTime\_GetCount}}(0);} \end{DoxyCode} - + \end{DoxyParagraph} @@ -131,7 +130,7 @@ void Bench\+Time\+\_\+\+Init (\begin{DoxyParamCaption}\item[{void}]{}{}\end{Doxy -Definition at line \mbox{\hyperlink{bench__time_8h_source_l00111}{111}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00110}{110}} 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}} @@ -157,7 +156,7 @@ uint32\+\_\+t Bench\+Time\+\_\+\+Start (\begin{DoxyParamCaption}\item[{uint8\+\_ \end{DoxyReturn} -Definition at line \mbox{\hyperlink{bench__time_8h_source_l00131}{131}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00130}{130}} 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}} @@ -181,7 +180,7 @@ uint32\+\_\+t Bench\+Time\+\_\+\+End (\begin{DoxyParamCaption}\item[{uint8\+\_\+ \end{DoxyReturn} -Definition at line \mbox{\hyperlink{bench__time_8h_source_l00147}{147}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00146}{146}} 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}} @@ -195,7 +194,7 @@ uint32\+\_\+t Bench\+Time\+\_\+\+Get\+Min (\begin{DoxyParamCaption}\item[{uint8\ -Definition at line \mbox{\hyperlink{bench__time_8h_source_l00189}{189}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00188}{188}} 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}} @@ -209,7 +208,7 @@ uint32\+\_\+t Bench\+Time\+\_\+\+Get\+Max (\begin{DoxyParamCaption}\item[{uint8\ -Definition at line \mbox{\hyperlink{bench__time_8h_source_l00197}{197}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00196}{196}} 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}} @@ -223,7 +222,7 @@ uint32\+\_\+t Bench\+Time\+\_\+\+Get\+Average (\begin{DoxyParamCaption}\item[{ui -Definition at line \mbox{\hyperlink{bench__time_8h_source_l00205}{205}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00204}{204}} 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}} @@ -237,7 +236,7 @@ uint32\+\_\+t Bench\+Time\+\_\+\+Get\+Count (\begin{DoxyParamCaption}\item[{uint -Definition at line \mbox{\hyperlink{bench__time_8h_source_l00215}{215}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00214}{214}} 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}} @@ -251,7 +250,7 @@ uint32\+\_\+t Bench\+Time\+\_\+\+Get\+Last (\begin{DoxyParamCaption}\item[{uint8 -Definition at line \mbox{\hyperlink{bench__time_8h_source_l00223}{223}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00222}{222}} 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}} @@ -265,7 +264,7 @@ void Bench\+Time\+\_\+\+Reset\+Stats (\begin{DoxyParamCaption}\item[{uint8\+\_\+ -Definition at line \mbox{\hyperlink{bench__time_8h_source_l00231}{231}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00230}{230}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. @@ -284,5 +283,5 @@ Definition at line \mbox{\hyperlink{bench__time_8h_source_l00231}{231}} of file -Definition at line \mbox{\hyperlink{bench__time_8h_source_l00106}{106}} of file \mbox{\hyperlink{bench__time_8h_source}{bench\+\_\+time.\+h}}. +Definition at line \mbox{\hyperlink{bench__time_8h_source_l00105}{105}} 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.md5 b/Doc/latex/group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.md5 index d0764fb..96b7e88 100644 --- a/Doc/latex/group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.md5 +++ b/Doc/latex/group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.md5 @@ -1 +1 @@ -56d577ae2ce4b45bacd111b61cb7554f \ No newline at end of file +b15e6059b024c1bd57db4f03c04931dd \ No newline at end of file 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 01802dba551bc91417e30cc4c025d84e0df64049..d8441b0adfe4e1477232cea663975932ef92513c 100644 GIT binary patch delta 596 zcmV-a0;~O_Z=7$inlyh=Z<{a>e&<)*!=@#g1U3XptEf_wOjXrwq9oHErpj`OMbHRF zwwacHKOY!G)CmOV&v(AN?>kc<-U?#k(OZZJ^&*H?)T1dxx5Ntxtm4EAA&zgnkV0x5 z)@uk3msUWK@lt3H0D|Z0sNolcKp=$GT$*M7U_=@05Y3zsb%u0ILeuuQVD9qrTpi6?*u=4=xH5zEUY6?@y zX2kXo{K%iil{I1Up;WSK8DnR5VKuAR8`E}Wn6yvLw0|<^dWj*nON`p=0h|44d9a9U z{d;$|_2WK)6d8X)lS1Uo*K3Lf8ot!x?76BYhBBZ-{C@%tN{C!Kat9I-0;{Ua7(82E zBBzi$Aye|$6+*$H;FXdG?39Zs)Ui+RL0 io8|v&O)#D5nNPJ@iw{>j367I{Hy{W!3MC~)Peux|f*=wA delta 603 zcmV-h0;K(%Z=-LpnlyjgirX*{eb-maLrW71vE*BwB`j=`vMk#c*GcI^S%lVB9n-`z zl3bdeYG9*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(552cQzmaHItY&ECDr>x&j@O;xWf;5}=C%f}Ca0I1b50wRb;nArswCSpbFz>0}@5C=)S p>LF_pH`!*f{C}-*(TU#j$u+;g2UlkamXmZhAP6`LB_%~qMhf-V9y|a5 diff --git a/Doc/latex/group___d_e_l_a_y_s___d_e_f_i_n_e_s.md5 b/Doc/latex/group___d_e_l_a_y_s___d_e_f_i_n_e_s.md5 index 286061b..eba3690 100644 --- a/Doc/latex/group___d_e_l_a_y_s___d_e_f_i_n_e_s.md5 +++ b/Doc/latex/group___d_e_l_a_y_s___d_e_f_i_n_e_s.md5 @@ -1 +1 @@ -c52cb47284eaa7377e976a0f04f0002e \ No newline at end of file +9bb1fbf15e0d245a5219c269dfcf886b \ No newline at end of file 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 cde64125b3a13c1ac63c6bfe59d72434bbe86584..7da37eeddbfda389cb4bba96d08c31d49207b6ba 100644 GIT binary patch delta 536 zcmV+z0_XkQZP#tE%`<=7irX*{efL+)LrW71w&Yu~OIX+>Wm&c@u9MP-vIwms98*LyL?V9nENF&KXf4UJMEG=p96adJ#l1_2?R+JK}`|;w1G#NRpKoQdnDu z%?5(wwG|L#ycF64fZ(M%Y4`~t5Xj-Rhjy}S3{dakVHWY&G}3?c$A|9C^w8(3`86O$ zb%n{e5`7#(-#UKEWYrkFJSO;2n)qQdv(g^6{~>KI3NtvT=#ru}oIJv2g9h5Jn!;4F z8L0FEPY+iBa1FV6#6g4;FE) zf9)=|emp0zMuvaTq!2mt^_HT6hEKJ)c&@66p$zB{|DS-P5+aw5+<`=dz^dvp1}~PE z$SLG*$do*Fg;204c%>vzpRRoZi?cDUz7K*PEfsIiRiS;U%H?tpR|$^X?YR-K*x!dF zOeiI*kkB-aKa%JJAE!=} z!u%s>kIwWwD&FW8a~0PSeg?~z74ypj zx}VNlVuyNm-0)hKu4VgJW*y(kHdFR5)>Y*Eldm-(0Wy=&H7f!*Ig{=#8Iu+^kqmS% aP}UTv4gkzh3;vU|HXsNv3MC~)Peuv|s|0HR delta 541 zcmV+&0^pzUl0I>9A0{8E4oGlL3ekvi2J4yy5E1^cdxpKzShm30nxH6 zbjBp_<1F;tu`&~NqwV1lwl5*E7sN9w>0$F7(&oI-gL7hC5^D`R_pn}D!`iNzLf4`h zu|4=d^2c#yOjvxVr07~o>6u>WiPrR$Dzhpnr@zgrF@NP9_4%~4VWv|Xx!Hql_^08* zAg=xI-P!bD_c4E@mL+Qv2%Y(IP18WdmlHoDSJ}i;24sl;PryNPo(o6tK%|AhDC;u% zPllV&spL+`q$s|1P3>G6{duI#^EQ7m)B+5fq{=s+)?SNwr{+w*+ymjH6>#61UDfNjHhvGG`EA0 zO#Tm6oOh!3=uFdtWQ}TVuHrJnk6`%X<7#WXcKod_c>b`N37K;xI$3Z9@sx8uq{`f! zez5FN_Y-`>2^X?7BoYuQ|wS;yD1&6NEIcroU4ldCl#0XCD&H7f!+Fq7^s8Iuw= fkqz`9P}cMY0|Nled<+JYuQnhEGzujpMNdWwFZ~J- diff --git a/Doc/latex/group___d_e_l_a_y_s___d_e_f_i_n_e_s.tex b/Doc/latex/group___d_e_l_a_y_s___d_e_f_i_n_e_s.tex index 9dd509e..c182f06 100644 --- a/Doc/latex/group___d_e_l_a_y_s___d_e_f_i_n_e_s.tex +++ b/Doc/latex/group___d_e_l_a_y_s___d_e_f_i_n_e_s.tex @@ -5,8 +5,7 @@ Макросы и определения для работы с задержками в миллисекундах. -Collaboration diagram for Delays defines\+: -\nopagebreak +Collaboration diagram for Delays defines\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode @@ -65,7 +64,7 @@ Collaboration diagram for Delays defines\+: \end{DoxyNote} -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00080}{80}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00095}{95}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. \Hypertarget{group___d_e_l_a_y_s___d_e_f_i_n_e_s_ga8a5051b1292d1019fe8dd3fc5521ab25}\index{Delays defines@{Delays defines}!msDelayStart@{msDelayStart}} \index{msDelayStart@{msDelayStart}!Delays defines@{Delays defines}} @@ -91,7 +90,7 @@ Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00080}{80}} of file Используется для реализации неблокирующих задержек. -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00098}{98}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00113}{113}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. \Hypertarget{group___d_e_l_a_y_s___d_e_f_i_n_e_s_ga0b97e172659a59ee4fa56f851643ae85}\index{Delays defines@{Delays defines}!msDelayWhileActive@{msDelayWhileActive}} \index{msDelayWhileActive@{msDelayWhileActive}!Delays defines@{Delays defines}} @@ -131,7 +130,7 @@ Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00098}{98}} of file \end{DoxyCode} -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00115}{115}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00130}{130}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. \Hypertarget{group___d_e_l_a_y_s___d_e_f_i_n_e_s_gaed082c07b9fc4d1894330d885b9b5518}\index{Delays defines@{Delays defines}!msDelayWaitDone@{msDelayWaitDone}} \index{msDelayWaitDone@{msDelayWaitDone}!Delays defines@{Delays defines}} @@ -171,5 +170,5 @@ Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00115}{115}} of file \end{DoxyCode} -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00132}{132}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00147}{147}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. diff --git a/Doc/latex/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.md5 b/Doc/latex/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.md5 index 2db04ea..b989b0c 100644 --- a/Doc/latex/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.md5 +++ b/Doc/latex/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.md5 @@ -1 +1 @@ -d5db8daac36cb4cc1a3fac830c6bfd88 \ No newline at end of file +48759eae8e94aea68fae58ca8d91b5d1 \ No newline at end of file diff --git a/Doc/latex/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.pdf b/Doc/latex/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.pdf index 7ab86736deb136e28b5cfb7af6f8776a6aeb01cb..bcea605dcd1584b2cf6fd45cec5ef3155d85f3f1 100644 GIT binary patch delta 611 zcmV-p0-XKTY0+u0$1#6xYuhjo{_bCKA2yaSuqD4WEuqjPqm*vLbu#v06rno8F>@>< z$z%EV)7i3d=#Vj|M|Zlr=Q&XzUJMEG=q*HqdJ#l1_2>$sTjGTT;w1G#NRk^bq_DCM z>oo+2ODiDAcqz080Ks#0)bI;JAdtgr4{c@F7@*$${Vd|4X{3MYkN4f1>7lPx^Ls#y z>I#!_CHgpoUOIlvWYrkFJSO;2n)qQdv(g^6{~>KI3NtvT=#ru}oIJpKjRxATn!;4F z8L>SCKk}z>XH8gqD3$D5#@Lx%Sj{T-#vzpRRlYi<2>}z6*jLEfsH1RiS;U%H?tpR|$^X?YI%J*xiLB zOeiHcA)#rUd?wK+LYCKM;;_I+C+w*5RNFUktoTO$wIyK^yCP!6BV-z-#t0mObn<^h zVcrSaqcc4ZiZ{B&T*YOCpTP1Z#@*I>?Zls|5c%U~CS)$O>{KB%Bva1$fNJ|{`k}&s z?x*vb*rA>+H@udmYuP@QS;yD1&6NEI&c)>Plc+Nw0Wy=xGb;i(Ig>#G8Iun*Mpq@w z%L#x$6hqOx=MM(KMnsWm!Y-VRb-1$wch;d@Xh~y&o5O`b0Oagw0a1%WnArgsI%1pF xz#3QLE_N~{)k*qGykwZg^8b~>MI{=GH`n+8ABWHi*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(m86o`mlRS>Be30|RfJxTDfjZJ$M1^R0jUV@o9V35gYukZGJ6BXAIs z$^Q|>`A5_qooRYhywNS@Dy}2^1ePx`u6EXIFMijB$RD>eA#WN%_>3NkVv zFd%PYY6_FUGX()Plg2YE0y!{~K>`_*3^YbqV_;zT|DTD0hk*e^uz?6>5W&dEIF*5c zk%1pbFxG=)xqvMFR3O2`1R~migkb`RH3vxOYy%PJfrOq1h=_-n#{wdlKm;p@U}rSm c1(Y?u$iM&qhw%#Plc_Wy2sH{NB}Gq03P1uYuK)l5 diff --git a/Doc/latex/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.tex b/Doc/latex/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.tex index 5d17ae3..5ede620 100644 --- a/Doc/latex/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.tex +++ b/Doc/latex/group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.tex @@ -5,8 +5,7 @@ Дефайны для обработки ошибок -Collaboration diagram for Error Handler defines\+: -\nopagebreak +Collaboration diagram for Error Handler defines\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode @@ -61,7 +60,7 @@ Error\+\_\+\+Handler который будет вызыватся в библи -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00031}{31}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00046}{46}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. \Hypertarget{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_ga5d066a5b9781f9437e75d98677489eb9}\index{Error Handler defines@{Error Handler defines}!check\_null\_ptr\_1@{check\_null\_ptr\_1}} \index{check\_null\_ptr\_1@{check\_null\_ptr\_1}!Error Handler defines@{Error Handler defines}} @@ -80,7 +79,7 @@ Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00031}{31}} of file -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00038}{38}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00053}{53}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. \Hypertarget{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_ga27b363f333cacdccc15f5174e096b5b3}\index{Error Handler defines@{Error Handler defines}!check\_null\_ptr\_2@{check\_null\_ptr\_2}} \index{check\_null\_ptr\_2@{check\_null\_ptr\_2}!Error Handler defines@{Error Handler defines}} @@ -99,7 +98,7 @@ Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00038}{38}} of file -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00041}{41}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00056}{56}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. \Hypertarget{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_ga838b40542faa9aa273d18f921b21fda2}\index{Error Handler defines@{Error Handler defines}!check\_null\_ptr\_3@{check\_null\_ptr\_3}} \index{check\_null\_ptr\_3@{check\_null\_ptr\_3}!Error Handler defines@{Error Handler defines}} @@ -118,7 +117,7 @@ Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00041}{41}} of file -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00044}{44}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00059}{59}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. \Hypertarget{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_ga590973be111afc3f9ba15e6939530254}\index{Error Handler defines@{Error Handler defines}!check\_null\_ptr\_4@{check\_null\_ptr\_4}} \index{check\_null\_ptr\_4@{check\_null\_ptr\_4}!Error Handler defines@{Error Handler defines}} @@ -137,7 +136,7 @@ Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00044}{44}} of file -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00047}{47}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00062}{62}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. \Hypertarget{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_gaab0aafd7a4a21ec4f338b19269f65490}\index{Error Handler defines@{Error Handler defines}!check\_null\_ptr\_5@{check\_null\_ptr\_5}} \index{check\_null\_ptr\_5@{check\_null\_ptr\_5}!Error Handler defines@{Error Handler defines}} @@ -156,5 +155,5 @@ Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00047}{47}} of file -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00050}{50}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00065}{65}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. diff --git a/Doc/latex/group___g_e_n___c_o_n_f_i_g.tex b/Doc/latex/group___g_e_n___c_o_n_f_i_g.tex index dc3c7d1..5b88aa7 100644 --- a/Doc/latex/group___g_e_n___c_o_n_f_i_g.tex +++ b/Doc/latex/group___g_e_n___c_o_n_f_i_g.tex @@ -5,8 +5,7 @@ Конфигурация генетического алгоритма обучения -Collaboration diagram for Genetic configs\+: -\nopagebreak +Collaboration diagram for Genetic configs\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode diff --git a/Doc/latex/group___g_e_n___o_p_t_i_m_i_z_e_r.md5 b/Doc/latex/group___g_e_n___o_p_t_i_m_i_z_e_r.md5 index 63165ab..4f41ea9 100644 --- a/Doc/latex/group___g_e_n___o_p_t_i_m_i_z_e_r.md5 +++ b/Doc/latex/group___g_e_n___o_p_t_i_m_i_z_e_r.md5 @@ -1 +1 @@ -ec124a446898cfdeeba090736e9d2802 \ No newline at end of file +117f38e130c123102c33539947be2ce0 \ No newline at end of file diff --git a/Doc/latex/group___g_e_n___o_p_t_i_m_i_z_e_r.pdf b/Doc/latex/group___g_e_n___o_p_t_i_m_i_z_e_r.pdf index 5b112d295e05920e483527b7d016d513bb78bbd8..d7fa5b3f2df8fb99d95e58419237d73b969ebbbe 100644 GIT binary patch delta 13898 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 delta 15049 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 z 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 diff --git a/Doc/latex/group___m_y_l_i_b_s___a_l_l.tex b/Doc/latex/group___m_y_l_i_b_s___a_l_l.tex index c36f666..c476cb0 100644 --- a/Doc/latex/group___m_y_l_i_b_s___a_l_l.tex +++ b/Doc/latex/group___m_y_l_i_b_s___a_l_l.tex @@ -5,8 +5,7 @@ Все используемые My\+Libs библиотеки -Collaboration diagram for My Libs\+: -\nopagebreak +Collaboration diagram for My Libs\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode @@ -18,10 +17,10 @@ Collaboration diagram for My Libs\+: \item \mbox{\hyperlink{group___m_y_l_i_b_s___c_o_n_f_i_g}{Configs}} \begin{DoxyCompactList}\small\item\em Конфигурации для библиотек My\+Libs. \end{DoxyCompactList}\item -\mbox{\hyperlink{group___m_y_l_i_b_s___d_e_f_i_n_e_s}{General Tools}} +\mbox{\hyperlink{group___m_y_l_i_b_s___t_o_o_l_s}{General Tools}} \begin{DoxyCompactList}\small\item\em Общие макросы и typedef\textquotesingle{}ы, используемые по всему проекту \end{DoxyCompactList}\item -\mbox{\hyperlink{group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l}{Peripheral}} -\begin{DoxyCompactList}\small\item\em Модули для управления периферией \end{DoxyCompactList}\end{DoxyCompactItemize} +\mbox{\hyperlink{group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s}{Debug Tools}} +\begin{DoxyCompactList}\small\item\em Утилиты для тестирования программы \end{DoxyCompactList}\end{DoxyCompactItemize} \doxysubsection{Detailed Description} @@ -33,9 +32,8 @@ Collaboration diagram for My Libs\+: \begin{DoxyItemize} \item Подключить заголовочный файл HAL библиотеки конкретного МК (напр. stm32f4xx\+\_\+hal.\+h) \item Подключить другие заголовочные файлы которые общие для всего проекта и должны быть видны -\item -\end{DoxyItemize} \item Подключить \doxylink{mylibs__include_8h}{mylibs\+\_\+include.\+h} туда, где необходим доступ к библиотекам. +\end{DoxyItemize} \end{DoxyItemize}\input{group___m_y_l_i_b_s___c_o_n_f_i_g} -\input{group___m_y_l_i_b_s___d_e_f_i_n_e_s} -\input{group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l} +\input{group___m_y_l_i_b_s___t_o_o_l_s} +\input{group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s} 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 35e80d3..2853381 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 @@ -5,8 +5,7 @@ Конфигурации для библиотек My\+Libs. -Collaboration diagram for Configs\+: -\nopagebreak +Collaboration diagram for Configs\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode diff --git a/Doc/latex/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.md5 b/Doc/latex/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.md5 new file mode 100644 index 0000000..cb91b74 --- /dev/null +++ b/Doc/latex/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.md5 @@ -0,0 +1 @@ +e10d808e73658cbf4719fc412f2e0b91 \ No newline at end of file diff --git a/Doc/latex/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.pdf b/Doc/latex/group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fb44a959e47f6b766291bcf47e1c557d2a79e809 GIT binary patch literal 19247 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

    73(d%IHPS6 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 delta 16759 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 Jb@g}S0sxsU=(7L- diff --git a/Doc/latex/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.tex b/Doc/latex/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.tex index f146bd7..987a0fe 100644 --- a/Doc/latex/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.tex +++ b/Doc/latex/group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.tex @@ -5,31 +5,12 @@ Модули для управления периферией -Collaboration diagram for Peripheral\+: -\nopagebreak +Collaboration diagram for Peripheral\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode -\includegraphics[width=331pt]{group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l} +\includegraphics[width=226pt]{group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l} \end{center} \end{figure} -\doxysubsubsubsection*{Topics} -\begin{DoxyCompactItemize} -\item -\mbox{\hyperlink{group___m_y___l_i_b_s___g_p_i_o}{GPIO Tools}} -\begin{DoxyCompactList}\small\item\em Функции и макросы для удобной работы с GPIO. \end{DoxyCompactList}\item -\mbox{\hyperlink{group___m_y___l_i_b_s___s_p_i}{SPI Tools}} -\begin{DoxyCompactList}\small\item\em Функции и макросы для удобной работы с SPI. \end{DoxyCompactList}\item -\mbox{\hyperlink{group___m_y___l_i_b_s___t_i_m}{TIM Tools}} -\begin{DoxyCompactList}\small\item\em Функции и макросы для удобной работы с TIM. \end{DoxyCompactList}\item -\mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t}{UART Tools}} -\begin{DoxyCompactList}\small\item\em Функции и макросы для удобной работы с UART. \end{DoxyCompactList}\end{DoxyCompactItemize} - - -\doxysubsubsection{Detailed Description} Модули для управления периферией -\input{group___m_y___l_i_b_s___g_p_i_o} -\input{group___m_y___l_i_b_s___s_p_i} -\input{group___m_y___l_i_b_s___t_i_m} -\input{group___m_y___l_i_b_s___u_a_r_t} diff --git a/Doc/latex/group___m_y_l_i_b_s___t_o_o_l_s.md5 b/Doc/latex/group___m_y_l_i_b_s___t_o_o_l_s.md5 new file mode 100644 index 0000000..a4fbe2d --- /dev/null +++ b/Doc/latex/group___m_y_l_i_b_s___t_o_o_l_s.md5 @@ -0,0 +1 @@ +78998b4170ecf65af8583f6c3acb669a \ No newline at end of file diff --git a/Doc/latex/group___m_y_l_i_b_s___t_o_o_l_s.pdf b/Doc/latex/group___m_y_l_i_b_s___t_o_o_l_s.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a59ea3d1504bc11070adc3c0e7247cc2a8e6dc92 GIT binary patch literal 17625 zcmbrm1ymf(7Oss1cXt>Zg1fsr1h?Ss?(XjHuEB!4ySuvv2^t)JlJ9&+?m6pUcdg6J zD!O*nIMH4X!8@K1MWd>)93 z!qPi)W^p9ukj4wjVZw<;bcp~m;P6f_3G*|%c4j|@y2`x5n0>i)paUjyED(|Ac9$+Z zKW}`Soei+w^8_IRy*p3dWK|#B-Y{;yjg^*4A}tO<_8`O+2MI(Z4L{#YS2&mu=OElB zwQ}_?xhg5c!7wlXgANZDrXh~elQA3@R!!I&&S!>kw_n`jLaBaH7@%`!Uy99etDSa6 zioMR9Ra-rI*s*LZdt{#$R5?P=AFuoIXvkHYJe8VbbCpV2-4;@cRib{iTz`c$C+|>< zgdu%s8yFwOZC$`Ow71bc+$GHx#)3T6EH$Wu%RBGmorUFwANO*VN6xrI^r5e&CImNo zINZ7mE?OHN1fKfpQaMJM=d)0tHsG~>G;tz7lx)1$|ix9`UaXC zB};rr73)t84=M&OdLDDVVDaeaMD>R-X$S)0g{Ts()tN!9Zjl4g2fAJ$140}EUBA9d z7~H7^3`FbKb=ORZsFEm=!bEOHP_K^0GqAR9SP_3+92X@pKS}@(qNW-d%2%+~&+Gb5 z7taaDRDm!4GU$m|t5dD=;~bm_Oh<^hKTZt!t0Fd5(>=}GoMMA3MHq-Y)4PVts0vTZ zSw(jBqE~i_Gvngmq)xZ&9F(SviI9MH2MOc1Al7{;YEtFJC(Ct~=0CYkE z00sb^f!;^@p{0+4zfw9;8*9gZ^ERfTr=bThu>CE@53i5+-_5cAvpE2rlAEm&fKE=| zT+z|$Pvd_Jnd9$$>0|*6e@aBn>>V5dEdSX4{}(qCvm*U=_+j_~2oS_IaP_l7 zq<+P37`l94kr@U@wkP~V#NkKc8^=`%g)HG~%LGXns$r8CZdzz=CAHA#zvy0(JOQTG z-B~El;p+EF7K|b`=uswrkn9`hr@BV!vn-Z z@P&sHwdTBTewcN(_0jj<*v7b6sUDT{HIPITGD`(DN?7FeD44k-{9qI4ussi^VbgZe z>csf574%eo5kzw9pHpLz2W4lC*}?E&I6G#g;0>3 zsvGQk()6vKzg*ataPEB0xbB?YSn8`1`fDuV9n_t#Bq(u6eE#GB8!Zl1ms;y8`$p@@ z0Zt`^8hhZnume4hW&9vmVtj2#J7NqaU@t$x7f7#O+Q5gHAfe&tYk4Sd@)n*=cf_lc z??2cRB(!>OCgOw*oeGy+QxvpPJOXM)mMvNpo99T-TcR?XN=de|Of2PR2?&`O4bVtq zk#tcQqk7N{d&+;vU`EM`c}t8m+fl@($k9U`9<9aoz}!biZ=A~ba5`7BdBLxqblCUe zpiG1dCWn^YLYU7RgAVJ}^3$eI#Nr%F12YR<)Tse%>gSwkN{zOT7I*A>RoQlqgEUCcf-S%MN~8%VaG#s z;s?>SoQ^Pv^sCb)ggJD=1V5lbx03%;0I(>IoMU2I(EDAW_DuqlJWbkggnKVwkY}*a zuK%IxDpEmkFxM`jcB+|c&T%%CbyR>@RBac^1hu8_ByJp%6zak`QdnT$NFf|LbZg@0 zPQnYMPdtX$0~5D^XDA;qOSW7QA5L*3bhq1rK?6v?;>ErZC)nmdKX=j_F@QnWF_rN% z5Qb73BOTuoy~7)6GFb8Xik29fw3qhl2|KuTA@0bsorBy<&g%<=t2$yFbnAp>jz?uD ze)EjFc3R&G)%iUv0>X_Cr}s+)F7K}aO@La^iJU~(CFJ$?DPM9ez4_TdPDT3yoe4VW9~w9 z5?lo)S*c($1I3Vfi6060iLN9;g*;!rV8_Xd=N8WS=oNx*Q_n#Gd2&ii(9S65j`{&7 zz91{ZC+>eFWEpUPxLKSZ1hu5G@Nsv;5#(@{lf}HT?`M<;^~LOoiY9u5vWj?m)lT!P zR8&bhb3xN#yxlE|S_8IhCcThA3(HXga4X;H7zUyU&XPsS@jp|29xaXcMGJH97Z;#b zv5HYrU9~t%;y`K}JFlt)NM0yAQMF3_Y_%}m;x%b!f4|xot*;^<9?eqwf&aQX8L^eB zm>!W@sgw2=if}n6&rrStef*=WNHn6h-(-Xa%Y>4$tU-FT>`IO@O?%ebj85G~U3FGr z)278^z2M^KKCi_HWig!`N8Lx)#PUi!r_g@h9g0DEU~;?^5dwKWTl1chNAC}>P1jOnw|}M+MX3|A&*CgQ#3h4=Pb%9<5WgL z%Gu#HV{M-6gLZ~mx#Jo(Ufr#0>5b5B-#otMsBxU`+`7qh;fkwGILdrWucY6u{E;tZ z$})FX7w(Aktriwky(7}*7ir}p(2+#kQE+=vWKp-TtCW%36Y|d{EkEDD!A&q0v=OxK z@IB5X*-zkSTFKYX)KVrV=KY^MCt+oowNfSD(`3Ry%EKDb87V`a%Je=T2PKkI@&G?% zndi^Z8lnV0ff*M;EAC@2XcXqBBEt-f8h988(hS4yZK-{JEe6Mx%~`x=x++x`k{CDsCct3<>#4jIiU` z2|uZ&#xy%J5@D+EFUH1?9pl#-CmCVm#t|yUk7$Qr(wUj0AD0K?b%Mq9_x)yK&t@Bw zgK2<)_e+S+q9wa`C3)`9x9aMP6Fl-IpWz+xSlU9vFfRN+?j8^TwD@cp-}dvXS4Uu2qq5`Wu5y)Y^@c?DLl3#(vGE^=KJiU zLn=|Zo(SNn@B*9^WlOcDUtwySSyJgf&0ZIcEwmM+P4u62_};=B@olEOXv~k2P^>v` z27XbI?KMS!N?v8wspBn;x9y73FPVBj5nnJ5+tHpBet99fE}S}MRbVwlpD6`p#gljJ zhVK>_tpN=jS6eSvQU6(^hhuc~Xo}(r(oU=!-wwPP_>Cjp??k+@E4C(-h}QR>-GrqCr*-!o z@EbCzoCC@m-aT)(oRu@yEi3OF+eQC_#;8Uv%S^ZcwenhfVe$pwId{Z!0rD9vLt)ko zDD89upyEvc=+UX5=^T&bLUIk72AuR8%nN_h*tGl;oq=iTG%A8VJr8EZB6|Un3X^p7 z0_?&iiOgrgY2g;^3Z>*r>d^)E6kf0?`2FMF!~z&aS<%$qu*}{)WO&ItTRTgtc6k8}%P)*2bs6f*_TZ z^*R20pV4@lJ4)b8sAE0{6uJ2JbGp)rciXbrFmj|)q!u#d)W?${f}G`j@jX+Hmgv64 zrxX?8H*l`92K-DQ=wNwjnjqME?)~ZS;pIZzanwToQ^SXE^Mb<`_ek&2O}g>iYu!it zeyq#=rl^_`XC8!=g20sx;sA;5yFfModOwy_t8Lm^OaI4i6$&eMn{+U4IUc3*IZ!DK zWgZ}ZfLgwt zD%=D)k$W4|s0<|&LCVDW-uTa>JU1k=vuRX)tmfQ=L8(fN8&qJa_2$y(x@QN*UnA(c z$_H^mtd22p29D(MJfK&*`M8HX`#DzM4sS)|^Gh(PdQ?hFqTLeUy)1;1&WyX#LsCbN zK~GRenYtl4{e%(a!Co>L7iPZ!inIu2W#imTf;SBL4A?mOtfN;CmKswA&XbJJdDN*( zaz~*JT_p5=97^}@U@CU4H-t#O+h6X@$km*>bPcL_?hw1#K96Q$Y!ShXC!pMKK2giM zcJf6Ar1lwWaX(ESA4!`2%xieibeU3nM!gH5FNb*L0OD4gJo=6oBUaL+3gHRFJYTaw zJ2{IbqHaqK6K&iRq;5+BLp$u>r*11AvY?6L=~tl}ekEyOpqHOpv8}TAI@kuCWB*oj zOFF54yYJ3(KvQJn{)tarF!YO`(ND%c#yv*2G_y3fG@}l^4!e%_&HByuO-5WC+B&oW z=m_W`na^6Eo6=MURM2d~EGf^ZUV>k=Z-fT6XkS$x6Ry7>{>0!>=SF=t8`qZBMjRyu z<3ybC6U5VHPt1UJ1muGTamJ=db`@}5Tcluz=NqR@!425E&IPt>m5;-C7A1-Wbh>YG zZ`p5s-LlIuy#e#W@%s7nkoyyu;OZ5VyBJp zyQGJVf$)k0&A~apjOcmIgdmf)SkmfEqu`+tqZM}MSNki;vnYiw7smGHqYzqQ4I_h3 zV}02M$}*%d&|eRe&x=ww!SO)S4BcHjKAaUH*Z)4NzMLv%iNdlqkzIq<9%0Lq4l%mI z#!x`8>Tzf&#?O9rkNiTiaA1OI8==?L@m#D&w21E{78XJr9+d zi>?^7nrbLe`y225ni}E>MJp^^whfszm9;MdFVkN5ISrrLL%ye@;#>zb8Hw4$Tl%$ci+Zu5 zb6ovcBbd%k!o*t)(#NdN-vDR5MJ_*=%Bt@Tq$#H$KU1r%_yzBglZ8+&EmNB4b`Ecz zeQrr0s=iG7#bti-6Q~9sm=e9cvvKSBJcuHElLePM5d7))wVWE87F53J2@|r|8onKh zMAVJK&*>6b>Fh*!DVs^N$kmz~FVrX*)g1lf{fvI`_Gx)wC|rDF{r>%?;CK2e-9;TG zvU(Tm1FjpC#ujGn#huXu2xV>HIGD?wu(llY{-eyox(!4t`zD8TBrB%5;IJk|1<66+ zy$c$qfV~3XXZ@7Hrg2@_3r_c;Y8$op!7RMC(O}x(>@K}igzT1s;-R13mPZ&{TTv}< zU~v8JooVb}eeTGs+wYzfCPX>?uATyQ2oXAy?X)__LajO(bz0=^tggL=UbM%)qYG6P zEyv$RJ-8Am>-DVbDrfifrda`F9mO_}jW`g+yR_9%ozGKv0d|xg85~Y$F!~ElAvUAv5!jsLp5i8vh^>Rj)8q9&w`DxL2XpDC@Kt@qZnNfDYiggLUqVo#5 zKfo$tez2fV7JpJ_WqT3ash@8~Ja@)IdSg{ZmVmA@!s|n)7f2GP@Awd>UH`~Hkr8jTW{aC_``w2ienU38JKLc-1I0))yaK2R!oph4 zNQ5WiS+tz0q9WB8xI=J35+3dX_G0sVyu;yCdF&;D3Y`_7Z<43=`%!E8VFlh+LI#)0 zS$mC!W(gjo9f2?1-XKAZlRb3iG07AK<$>3Q&=J-}rsBRCYDKqUS*v;v0u^~Xd50Mt z0b_F|Z4)s-T+LC_Fk->7Lt5>dI()U$xCj(UWzg58FPme5^Gecs2@$hf!hJZ-t>9$n zoAhY(u%BC{#bv1RLGPx_5I+IZs=()`$}C|Fzfh4Y7s+70Njr2nt~gYXDU)`Xv>PV4 z#IT*V-Sa;tEs}fOk+A&*7K3&W66C4~uhxe6;u@t_L zxEge0fAICC)*wT)JmM6+DLJ1r=~ggo_L!_G?bg#VIde}SIXa`hj1592Ge;A5$TK7vMljT((Q60JtsFB`ZoSKTLE{#Xfwh{AAxI7clG_lcdj$NWDFl0l zvbLo{+rxH9RAIt>%=p4d^k=;~R4;hzTN&{S?2Z=yRGx1^rdnH9u0b_MZf+!ym}Jg8q-ccV-)p_2?Uw_w zg5?JToe{`ONOK9$V%*73ud5!Rc*dO$ZbQNsF!9wM3Y6pftOt^DkI-9r;w~gQV{t?R zROpmEf}5J#@^Sz{Hm(?DVM69;A!Xt7euF@mmK9~#KjnQ?V|(oRy^(ci25epD0dtg; z&&a~y#<=vDF-FAS(WwZO6>!6?NGpVJAk!(XLt3C``iYg^@!nkP2+O897TKKp~vc#c8viT{ovtn(*GRN4)p{YaT zL8U{bL)BP|`nq|`${X5}s(qv8(>WI&SJr(iesT^&M=5S2f&Ht(+w`64n8<;HDrf9Z zTla5^CsN?TtS(J+sFyd5qHEf$lZQASP^?my$*byWz154$mc|1Yw!@(}Et!+0Le2sM z#*Hfz3JI|5gj^?fff9wFxxUB%BR^tbWbwEsFV@`9AChqcH{48YTbZmVYQ85zMy$DrWdy%MthLXhK%wYz{v%I0qQMgyP8X`p^8urJy5y{lM-wzRCF7vDig_FD&_B)QHKhefQk zgeQ7!jn>2%^&a7YU0!=z^~sV|-FW`fW>vMJpSTh z8f;?*F;K-baC9AbbdZBv1o-FH6x3ZT3M{RM>P5}dK3Oy|be#{waBJ2Zl2y;UCLSeC zG_(8rP#~Msq={s`s(T)J^A~_DX>Al z@MWG_h!T=#O2}OXVc_rWVt7w%km9=Q)xSL|jKL(buJzD&f$(PHNky_Mj%BLt*acSa znp{RaEWDt9WnP674Vc-j$Ds*j(pBXDGz2#?xC;TdERSffPfl5LdRu#nAFsWH;w&># zKDx!lqV9gjw2)n-DpIU^0<0ujmaV)oE~ihP7aFuMqct>Mkdnh^@pXo>==JPSF+FzC zzfEhbAC;1CORwXcVq?b=T+_Exw~uSt-s#sZb^&F z>gl#@srCACd5`CNF}F7J_fCVG0k%?|xzx8%IuLA)ScDQvwEH916V$AyxNlL}8qT%s z@Ta!obyM7mnMUHFR>3U0oB?@~X}hVrRlis%X`<0x5?s=1#+&8MT{Y$JjOu2~MPtE7(O+a~JByQO~lj_iZnpTv*tkFMUeIznhFBUcIX z-DJIt$AM427c}-IrM@R}7y^?SK?K0+wn;X&SFQHfF9wIF>2r4_0wXh4^c0*6 z&Ejf?T7;GK*SS+_YD0Xwbrx-UC_nX(aKBEy!Pw|>y1mDUc|ECMC(!)rbAI>!aAHx-*l|blFb1Y%vtxYz zOa&7=dp=&a+u~W!F2+lUq7LXc1nRnGY+8vO00rN$+DxGjB#|iegLc*(Wvw`yR?-V8 zzD?u~!AsM3R$JXP=|R_@Maz}IuuUiiLLiY&e=9hp>MML>6G>e`!(m*@rnXtlQV1Y~ zfmc7&7N|32f~3HB0|oE zTpB<$VL^O`r386Qpo_bq>u^*+h1d2Br{>v`4yK*-YjVRRoB?N6ZGIdtVN6VAo+JV? z|JMANq-a4>cQE!wfudbN;TCDAn5n0_WEYkssl+h#d0`6V$ zXnix~n|Qc#xWa0UOVE(0q1j^b@GUu`l8YJ~1qrqxSz^(xFvucNsSkI|vEqf^EpUzW zoRPbahb9bO|GUN**e>!XeV`x(T1+73RE$;hS#~}K%*gF&O=^`2!KJdk8HlQ7!fRN_ zseS=ML-C!k=W$W>EufLQH_`yyFB2}QH7AJejc6G_DTTQ;wTfG3)hv@{$nF3?!A2Qq zl`kZA020UU;6Riw`)Pz+2c9|hjjxs-S@%Q-j)!9cG;9^_F!Qk z)?BTio~?M}vkfFN+oK0`YO7BMmph$6(OxKVw;2gNF?}==Ot)w{_BW-@kCxq^=VTAJ z)n{$a5SBEg`Wli^eYcO4=jm;?Tut$GD!wV=z&YR72Ur)5B8`WKNoFtTvLfQ3bV)j! z1*17PY|rn|Ljt08pZl5-brdgtDeoPqv2&*{bFF^HecGL?o=ShmyXbv1erupBe@xH` zOrWN#Oq5Ik0GuamT9ZQ4}7y1KD+SjFb3xwu;8qLagg{1Wv@Go{&i zpXu}KW#yhXqV`!(Fzws8GVT1D($42KPrZgql}(+;n{f4!+G`>K?;mX=9KaPL9_qsr z83&Y+Ue*=pB<(@u(rOH4#qf$bVM|1`WWPERMlxn}jxZ0TTibMJdF>6lB}AoYV266G zHEXhtFY*X)YW+HpIT%laTwljI_8`rXY9(cxerO%aucmD02S)0?05$^>9$*gxn(?Rl zaEoy+$IG6;tg53|?uk>eIL>n4J{faDSzMHq<}tn_d#pg9of+tzjpevK`ZfFt+ru^Y zQd^@$7a=&E&4PGnLzNEUl8^Dh91BkZpTBp~lxZ&=m=y^#t-aO2)+xxlg`|gLM|dO= z6NvLCnmlOP=h?oJL$JYDt8Eg)d%Yc^`zltR?CEuS!`G~LdZXL*_SD@D@%0?<)$sP? zt0--;t(7;%4E&;5-=@?wf6JXbf zE6BXa?ntjW?4Va0 zoWhnA6svuL1r4YS$bB2q=uL?Ut|06|JAp8}QjsUZzzl*Z2qJ_#lH2L+*E03^ojHV% z=b-~lF(IV0>77>y$Jm1VN@D{e)yXqCVCH?8#Y1#0ddh-=^r&9zke$siH3w|NE7+%L zu<>L|7W#TGRcKF#tEpwlvpgcbz2)&5B0LLoW0h1npsA=_o5a%jbstZ7`wzBHel1UG zi?DLjyX#N+L|x$H_ulxl;p~Ozd-PHLvRQwdjoKOEqJMlkHz|&LI=UK2$nZeewRk_3 zS?6jeyPLR{@p3?4XZe}EAtuImdRp1zyd7shT@k`hF0tJAf~TN^A^{;R@eZOn8vfvw zZM4X{6u_6SJLxI$sT=bL26hJhJS;4>I^dC8Om~Y0x}8D9JtUQA=)o7Ww=l8~xBJ<4 zu`V zcbg)XTt|40x#?jwvtyXz@V_Ci@LFK{LxmPL?;i5n3glf zoU1eD6m5K_2zw8BCzZOcqmf|)4}^l|H%d7#yyt7oPX_#fR*DDSh@U>KK_8|mDuz*= z)8=1sAM^dvz9Qk;x|%JYq1${IIDV9&oABIeWV?q6p@nVdao>5qHy9gQZ-)sG`}NHg zsts|Lh#MD<3TVNV5o6S|rUthzpGzK_t~cv}%#+JIv|Z2}BRptSNKtSq1ZLLk$;NUT zza7zq|J^FhoBVbu`tJRPAlT#uo-e#Bf*`;`?$8~qDrYB0fbYF)^R@c5o~=&c0^CI7 zx#f7pba5)6{e9mW_yB-}6&GlzLQdVp&q&A>&@%$|`GoKEJpk+7=N@$Bm%u1mwkR*J zs9Dw<;;dLbu69Z>g9ri52mvrhk_04Az}N26X_#Y3cc>h{wqN-HrkJm=Diugx7#rc8 zVb0yF)IrG}GlI>ZOy9|V6@@5Zx#KSG+d0D8R*N9=bqvwJ% z6IcoB^r;rv@Q+Qmy=0YwYX?<{W!UPpvUvGC<=rM6LmUI{zu$_eoom%2R~ejiLB1!w z;b9}Vc*5}bZw??}-4mi^&qAbb31!R_XmQ2NS5?;! zJ=o{k=efvu`TjyzByvHLe_yLpGkBkf9~o zv-jJ9do#h!+>S>7{k03U3(S2OK~!TjKHh80Oji-rtV;n{H^Q3kuPwoto(w$Up&6TP zcZ`k@Fw0(*W8L~6X6eJ(& zSLDf1vV0 zUgKPCTH2nuOJ)AF16Q64;MXT*PYlyBf|{0h$Sz2wC%G4>@fAT3%SjY*mNePJ9w(X; zBA$JLYeXzEoA{f|{xo)+l)fZerWWU_h_&90@$=pI_0#pWb&qw93lJ@{uZIDizyy1H zFVfx|KA`WI?}YDpHPWs!4*?VrIQ?w{i4R+|BxdQ%IvRimDFpH7A~smO?ku_juVenk z@x6p~)~c|zkPGsp_Lvv{7mx=x4vm2c!tSztEKh_MID`bj9WuMmY2iotOrEf&uh1(p zlW}G1xa7j5{h{-{Og^JYH+B~+ zx9In@$qyeR<%Z>PX?D%bM$o)H^unBn7S!@HpTLgifwew{nUKUsZyCyy8-owRU5}xv zJIBtf-|rPilx6+-Sk@8mkwf7=s%`;C5= z=@{V{_!f4P*Bxf{6YC=zU`-WjV!wGh6JPFW#AcYN?)3T&%v`J%;}xljK)@*77W3}r zJq$hX>2~tA+OI7_ppVyIC6{W3(sit>8^zd;xYXW}7E7GXA!FNXO9Wu?yyQ z0zWq6h~K{SjQB47T+^NH-g4FTHTdFmv0Agu*l8*J*J1^V6#7)gTJEA;TfX&=#MKd& z1?40(l(8|gNV=$$NGjTJ5g1~y9eH{_y6veuH=YaJlsP?BOO=Qf5}dSv38YBL45A6V zJi|(2sJ1Ni?}Kyhg(%pZ-?2I42~EvAamlfM=$ht@F(`Lyy}G292bV?b>60pj{1{9L zPAAISuN@Sp2uh(f1$(fFiffd=W)3)_e-HrI1cDFQ36@WAu`-|t;}Vn^Is9hvoWY5$ z*9@G%P0Uyzg|8D1ZiwPb<{O_qTnv1c7L3KuEu#poYog~TLFzypB_p9z7&i$R5y{|G zB|V}uwKBgA>9g9CN^l(<9S$c6mzG=Ig$0|?jgbgvibwX4HpTP8anv!*bu9ETkrbff z+&xr|Q_dRGNYFCD@e1aFpR$s6@3bHFD1#2*GOoWEzPNLEmDzM6)HwgSg(P{QKApaS zQ|zXR6A64DZ|WfC!^G`Qj#z7?0GTb?*wjFFBwJe z5r|i_%ILci59b(l#}JyQSZcI`X~dAFV8}`@%vjI(iODRgn@grxeaUdX%bqc}ry8zL zdqla0=rn#13-5IlbyfDK9JB%{@{e~a5ctr{x0?f+tTc3n@)tCP*y|C@3V|+o^1UlV z2`D2ZGw@2vaXah^)fl>sbfUOnGSW|Au?Q0otImxwl%UrkeU5%VrOHgfl;XW$G#cC? zzg;2_HBfIRli<~x2>%>W7xZ|#&8}VJBI+LL8&8^&z}7eLVI4TP)Ziiw+jy69Nmre=52IL@4)xSO(6@>QkF(*4jIo(%S|!RTuC&HJ&A zSC{47?>iHiEw{!xHvEKmJ}Dqg;UU24!Z3aHMFLHnHGl}{-ApF!hf(Mo>^eB#Xx5%o zhQQ3-J)4-|#4FxwR+-~gxVU)OEddE#T*?z0i_>vrf+RufRF3853V6LnM9GITGoKg;F(d>nN`$t0ft`yG~BTy%CDyiPL}wquo{{BWZzfuCv&M`oNGmUVtz;4qCp*kAnkjd`+JLWjts``tYfuj5??^9+U;E#ol-P z<96@&y7y7>xzF9XP?6Rw)GF-tJNxcFb!{}f!Lt%uEd+)h&}f&GXNPIbPQEK?X=j=%P>P>C zm^_R=VOIqP%b!9=`OnMWD^8gik*|xEWx9R2etIwx@|W$-&DRAyagKC8=0!KkLmVTv z1BIR=kb+SNRrGj;JAUb4(DBH5%zeo_KGXShPtI_T zJdL>wk&lnhCs)W~Oe=6hOx|QvgYRa*J{h}lle9lpz7e(2g!)7cC&1vDQiF8%r9}4;rGJsBP2~954B6)JiUJous}0X`<5eJ);5CqtrbU2 ziZG!%djEW^rl6SfJ~=|klMv6kUXCKyGhIL)&Rb|z2c3iJ_+ z0lvtZ#t(kZ22AChPj5n=%Y{$ng#d4YomkhRTWxQN9ZbKu9;$ET>c~w4V9!)_=Hopv z1kvU58Vev>8Ug!nkc2-2AP=GesJ`yJ(j44adHw^CBKV>d?%;X(%8*G~{1ou)D5FT9 zLps9{X5VqbIN|{mZc$=3X=ydnE zk5RKDWf}~h|eoS&*k$z#%M9U882K|*x ztbsl13VpEG13oPTDIt>VcztQ6K`FgT?K9*M@i-EEfiguZ{?29Yz}Fc-0`uc14*A%Z zpv*=0;S<7&4tn?RlqeYA?YxDN_ZaZ_-WQoJcl27M51{!=oIf7 zzAmmw0jtnmeC)46@>r5<)_v$lJR{O%#b$hD!ma=tGvA$yfRY1^iMeNs* zTe8m~g@Wk_BmAW%7e0PV2r_>%f-GY*;<8tb*kK_-99zVMo z(es63OHapaH7wXz7PXhY6?G5{3^vJP(?liCAbnNWWRvf z?(|$Q+3oCeWsJ>7sOU>kwosEfZ4%j5$O&1PNhE6AD##P z*-`#016+MfRG?qJ-u5H?aUgLlK}e!83tFro779mGZ(?{9fS0Z>ims3G z<5NLUe;-H(tmQ2u>@_2-Za_Q!ti3pKEU#Z;FbRk=u=ERX@*3bz1UU-10A3&xhI5af zkOgp<6xYYdM9H<2(;m3Rx!tg6u|?n$YSK$SB{nlgcmRB@9$mkBbLPwgnsDk{`mAe8 zYK-2usB>N?{3GE+?fKk%%dM|HO9ppD2c6yd~bcNvGSVxciZft47KYmD)pg>ol zTHx!KtW3f04QVu>3jl6f0XHb>5n7h~xk~WDZTtDb4j=;bLSf7PkducR0};>_oJ??m z(23N{_Ha{|2(0lnvWOlvL=g5)SJ(bBNEPb`>#?gNy(<^ZF9;i$aoDdIx_H_eLk%7B zidH>AwM9MZ^j{5hMdZ(e815lXL6^W!nJdlRr`~iqqzSA1Na;x_2?qPwfkYl_J|-j?9D^jhK*w& zx~1R1sz6SJ9kL)=0*)mU9qnlfjb;OeA|g{6gs#LlNaA;Om}Ux><^E!Zg_mGs@bSVEmX52e0{ z-dA5$ahPrnmQU3@<^vjwU*@M?X@P6R_p{S;;1~o zva!xW53KWSY%^T`v2^q%cxuHqY>1L_#SEgXC@UeRBh>}1UzHw1*~%>MQs5bK5Ec1T z>FPJ68!Yu6WL_$8zu$|}PGlbF`jxz0PTju6O%rOxNkaW3plim-99E z&hLb_+Svldu9~yBY1#Gs`PzFpgKX2Zh%~E4MGRZgDfhq1^xg?yq>H8ej6DoF!);pf z?!ou1G?q$V?|Ko^8`t@vst&F;eSQUW78kCrEW>QtOVt@FNY#1w%q{{;_%FggNsdsu zXN=4zO2(K*q2$^@TkSV92(PM$twj#P?($W=!==T0wXTT4Bj~XZ*a&o3X)$&gF#t!^ zu%l>keTqhFK0w0~$mnxpW2-I|UijRDysNFR{ zUF!`t+K;5Ou&S|7Xl9%T>U7{p+{?p7Fak?N(@Ogh3dZpTg&Eu2pR9#}A}mV4Yrc{F ziLcASHvGR?w?72i->e%G2Q$Mzakqbge}6-40LI@`?f)G?s~taP9YBvLa{m^tUK|lB z23r^(q*R21?p0b(z<*{Jt`uoB?B7*Agi`bcV+42b{;Mc{o#Op^i(Swe&v@$)+S##m zw^1i}l+x>Q5hA!6rf4Rdm=@%zMU%B|X96c(<)ISKg{M-qknMoD4CFIfowNla=jV zh$uZ<4Ajq4n(~W{AX$$tDw2(v-`?>3=Je-ud)MsX!?;X3Mc%3P!Zeyw8nft14rCl- zq4BhMMvGsI`$=&38N+B(@-wh#T~z3;-D@&4%CnO{xn`FTcim@0;(iI@VBu|c;qiIc z7j4n0N)=1|kAeG}aQ=V{nV9}XDgK6>e~;&HBJ(eR@;84eY~)~IZ)WRgWB(T-`C*dP zv-+SbMP=m$q?D-y?9KEnWt9F|D5_^=X6Xi?_+zL1%WSD<;s9V`{HKqgpp7d)6F|et z$_$`k`j{Jx^zLrAgrlCNnSp?{iKP*M{*Oh#!NBMP2IZjti`4wxtKWGV zMuxvIP9Z&8aU(MmQ^!Bm{Mkj((a1^#!2Z|%zcb>0XMP{o2X$%0_`z2GnV0{Dk^ZJj z|2qnQRp_Me_y;UivUf829icx~K|KefKcMRWjL2`gRLE4%{_n$=*84}Ef$<;w>3_r+ z!1yoJT*Uf=E;q9_0nn+MSqoS@nEh?|)2ynQp`)q8M-&;^*l5|A80ndQAIkshi-c@%0JihG??$nI7sM zr-uIFa!>Nm(@z)D6|?ojvW+Kt;pwZmszMJ(k|1DG;J`#-z$bDB;Y4In!sJYP_(%qc z=1*jWBp_;tP{<%KSmfftNW@Szp?Z*goYIgnz7p6d_y$?qY&D<6_MvQpg(i)+x7KaY z9&Rj)G(dpflxr<_xNLK4d^M%A7PO1};`a7BLKDi%8>~7nF6xVT(HG=~j*G|cxGfT+ znC4SxH78H=XPqzkT?NyVAOIjwsAJoC2>MNtL8A>YjfIe@aQ0E;^ch&Xwq4y?7)~s< zOWQu$TJSoMde_Da^Bb%(b8YqFEQ{*t1`1{oq%tX?-nvpom^R>FB8?c z)#{a=N|CA+z)4KK$YK!+Zhj$`2nm4~4s_G!^_Mbug+QI@MCvK%L&TEZF2b1ZiuDRf z5%S~Uy8(D!u%?EZ4atO!H<;6dGVsIi0D%nygU7;7pE<z17}u+3152 zB4+<_@5x-_WPf{2S` z_vDkxO4SZrDyEqNx8RP=?|lRtT*BY}``qee+fr(2bT}V*#J-P=`sKMV;r3D z`_r7A^QeP`K?k29IH(yiZ{^^A2~*>Aciw3_lNs$O2cZC>vk_*0H|A(HaTCXz&Q|8E zd)H5>bj#jj_d`C9y{GO{TF^(|&H56%I~lu^v2{Q3-9vvqJ2CHP9A<*2myg_yIwTD) zT8f9_!x+W_ob`y^eeZoYmk2I6-q_*=Zc?|9ruJ9bzm^bhH-q#nSUpVQBDBR-K$qc$ zd({@w4*FtUY(Fr6M4L-%U%>Yv?ti!OX%jYYgquFESPy@l=f7*XGQ0DqgX%lrC-P;@$tYOgUElUp+l-e`3CRY8ik8Xo z?TDD44^X@t6~x_YQwoq6PE8|P za3NX32sQBWMUH3ed`{&(J<}&xAV6#R}kitGTJxKI2vgn%`nxb&Zu95^UI0`;K3UhRFWnpa!c%1Egd0@P>WStQNI2tRW#Y(XXd>ZHdVjh{{H{%W@bKfyqS43pL=G5e=tHwkGc_u zg3H#mZ+PqN2YH05Uqy&4UUv1S;4?>0+>KC8K0?A(D>kfLH|eL&I70P5LdcL>x%S!> z!Iye|3q3py&jeR>v@ichWAZhG=3NYB6IVfjtxWqj$ah0NvTEI?EjJu6?uGoLkl(a+ z{jzq%Ed_AC8=@`i+P7>Ff3kG@AioRp!3`TbHayh#;ol*jLdaNx2%W43zA#%6O&cKi zlpqe0`x045!=K`iUgS?<L`3<`V>%1tjFk(HR!SuNS+6e<_KLDH`Fd7-~ zuL0U00G}tI8-QAKf2Oq1Wr(v+YxOY1)k?PYG(>DwYS^Mozcw+E^NCtPtI_gWUhufR zZXy`;M!iYT2@a>-ndRgJALj~Tn;9av)*r%7y)}g5aU72q!e=XP_4OiYkSiNli?lc! zfWEbuAa_l?CO&>bbD1?%>TVnul@e=imeJ&3<}YVl3Yo4RIS z_ubdFjr8KG@BVZ`{j49Zo&C(ntD3`(>`Rx99DCvMk&!3bOP`rIq5h-C{`RlJ9Ka0N zv&Qs?d=5VqIZ!rnvORMJkl#TTajlwG-6BH=cco^%uEU^p45m*F(50~gkeE-QY(I_j zY=73Ax1aO!e-mtzJrn%3wprd<|2$iZXTHDPw$9t`-y&>roFnJl5^`dT$>o~sY;$gK za!$Wxm$XMBlEnM`dJ!EaPa>Qi8lann2h&3dvm^p_L7dN#i6Tya z(v>g`rr&0}3&1CAz5x84?XHP-s>>@ZPnodE8-QGYe>7H3(}OwT^6>#2a2`p2C3kfo z=`549437YzMo~=5P%M#^lp5c=L#g$KMd=^EtQ&83!kDu$LWwT^#J3ZVA6*Z@ARV9Fpoz>WC ztE#e9e@z&VTM^X6apy)~A{(K(Xag{(T}U%t0fx|VBp}2~&OxpuVOlF8X}mm-VshW6xi+PX^Kf ze@{?TVkxnY*VI@NnoBKnH7hi4X8)5vFBv6=nHLE1`2`W{9e%UH4S1&D6X2FReRdS* z+$zo`a+B`JaRZhN2}7Hq+rZ15%3!4I#lU!!fifAo_W+z3pc@asS>QhmILYvlmLv=m z5e%EKl_=cHDr4P&q_qs$6ud*cig$=-e+-LfJgSUS@s3jv)05<)gbZQ43-7@xd~uWTX?t673M%D7IoFohY>Ue1MW3YwDy^#%?-aY^S4QPtJ_7 zNDFA&xv_ed1enXpPQ~LCR;v{Bt${ylm6c*FYQ^vb>huj@y<~O(?(JV|Ht>Rvf1#rw z5(Icy6R)a?m(~FOg~HY{>%_9s9O95rI5&^8yC?zz^8@t5#g7kc>|MIAGcoen&!4@L zlrQ@3)ldI)^VLsl4iEox=bW7{ca3~H^2Sf_y+;?_`PwVTUwjSZ!7b?zxs!Yhx$!}Y zZHJJTG6sjMoCLF+>BXFz4nG3epUU_(w7RTBQB zGwOCF$|jb36Lig8`7E~4Rd)@hKc<@w5Zg)@Ljt<)E<0Ux7ZpJaDO^Un^pHQ7Fwx~t zyYP?;yJmYS8*`RVEKhmQc*zFu9&gH<_VQk%R>2^n%C3wudh{oaQ5}6qe}WmE(P5+u z>W=G9>Uf>J(@dg%p0LvC>DZ)ndO9H;9h&XGjxcFU=(KdRJu~KBkc_awak|42q~}^Y zFW^L+iOf@M=c}u#Fxz>MlwMvkn=B?G$nugCB;M#lCau+n5J*E1g@7LLq;CM}F=rj* z#vfSA8JvP%ph%&jLJ3P24&2Z|39Da_T}@P{iNnIjnn4A!gW&AWTbzykvp zubWfRMeZ5yziYybc?))KCskj*$@tE+k$K$TLH6aKLQ=r^PMg7?u@@Pl_Dc=*c0rfz z$u2U)>_y=!!$kWfh6a05Y%;7eoY();VICJQ%9|RVns;g5uA)6ff8xZ@#Dbcl217%r zzF=W!VZmx~S!h{7TTyq>n|U9GJ_&!CXLUIR#~|q)$oFT7c#u4qkb-DDYGZ7gGHDSF zk{c6}#_zZ2>vR1^z0*+^Ez<+ST|hEDz$!n|tB9D0B=u3Z`?w2Bu7s=2)$QVo5(e1E zBF2|oHimu_(X5n1f4KyPh)z}q!cjp#n}U9yFy;inS4@1mYW3;!8FKf$GNv)<+GN2| zlp9ddEubP`KvBS4$w1_&<(TD!C2ipYmKw_(3ujSTmPL|T*0`jFiAsx?VxA?J&dTDa zGqM=z__Q2iPrPVTs2mV4KKp{S>}0a>?CA^aMlP;q1*gt|f9iVr6qTH(Xj)BWWhZLw z^d=&5RihYLC>6>oc?l$AAQ*WKQ>c8%K_PWP9-rDnvzu))RjW_Il z=DIC=o4oU)f2GS8SEla7)$jZW;~hWh{%XzV$F@Ah75>-I(N~{;@p&pEF(3-!4}**p zv5R7Azd%%#Lj?p;*#{ATTA4rL^cSP3gH#xrYK-zui2#f?{ZdxHSyKfD9a=+jc#a^g zC}@CTkgon9kNH824+=p{N;u2`ydN_?docZB!oYNGf32cuf2Qi!@2ML1SE`~t!mta` z9<>MV%T%?cvk-<)wf;@2mS6{E9UEWRU*HT{fg?;s=7_vSlqXn26(L8+O0q_>`JNG< z#`MfH=l>6-^E%Kk@_^1w$b-{#^$s}Pbnq;gFq?&i&b)&{9#&x!^&aC4;bLu4Xx6S2 zR%^B8f6`>zWM_rDUTU;8I_upnnik!Bsnyo%obO(zS*Kert+TCjE_Yvp9Xdf{x}006 zS*X9pvqfgMp+?F^kdy6l0)`Ht8rTA((l1i`MMl=|fh3yX zrAjc{{?^ewW+J6C-g++HdZ93`suHIGA39r6=k%7Qgl>Umfo`d0sgB33&4}SguffVR ze+h$ucQHcd#Zf~lOR5BNMGi)+D3e(09=+pNZ(-;4|G4wS$mv6Ux8K&+zwP!ul7;i` zzIx;@!>|40J2(fMUVY`&|N7M{FEg6F1)@rzNe*viG)eRd1#4rzkQh|W z4S><6!=u=MR2Z7_%Gz-NWb|qpB~}GKf0)!vq}!pPmQCfPa+a1?$m#eAa+(`uX(9^h zjztsD?ADyn@N*zKqu~OY4VrFETEk<6^n{C2ie^30G~p<#DBq3n5IO_QjC>2blq$&iZf5x^q#=rLQfAxcg zz*I$MAeUKh8PFU)-yrkL8qo22f#%2aIc#rSs+4l8fCqruO16ag8FZMJ0mm}nXa*d~ zfWsMZZU!96fPK`Qx;6SWhBd}Drh(W%o+U39$%_hBPyP>!elY$~{S(GV@*d6akNqm<%%>Iz-GE#b2&+Iu1y~!pBe^ON zR)L5LWDlm_P1tg(7HjjOMm_Hh#vHt1T(+00G`XH4y6*u`jc1N$iD#eZf0#$GcmkgF zo)aEE;MwURo}U9+IDjoPYd>M9%_W?`M8d~0L0H0sTL1laXF2l%NM>s}#^YMD*JhJ! zzeD8dH0VPB{EgWu6i8%I#>e}|83JDHjd&7S?($Olcq!$Z9=9A*#^rHR^z;Pjlb#@b z$|KRY@-UN}*4FCSrg_Nae@IlBb$?Qf6heRd{Z+>caUmU=c2h_t2<@8zw3|ZeZJ<3B z9#J>FKUwHya|z`YmbaA-m6Dp$?ov`pT^kX^CWRzM7(sa($RY;N8B*XNon%nq!_H(d zVqpTn!d}D@WC|0dK0BR=#mv+tS#=U*Jx3OlLiA;ZW!y%AV1q&25IK^KxK^prHr5>W2p4|IH&tmG&1igUuCNyn^`P0Eru zA=ec2Azi-c!|}zhO&7^m{MfH>Y+|;dd9@ z`18fql(B2|4Qrgv65p*yf0$hT;*H1tj4$$Exv`_}qOdz!e>!vP>>1bQ2jUlBztTOw zWqxJYpPi+Tl-1tQvUvApPcweC4JhJ8;8#{GGD~DiNfwrP9OldU>HGqI1;2?GbXKiS zt21R;btc4Vv4Q$5z%bS2@6uvzZZHdHkzA|F-mI!9x2hu7Dl>H141^)SiH9p@pu)oi z#>1)7rZDicf3iJ@1je+r3~6WEX1tKex&eV?(@$zWyAkX^F#N4mRaV&qtU}UnZa3ff z0(Amx#I3%Az`_L`Cm05~iG5)DvmGi`Il6;x1#ATDgD5zx+a8{}y5{mLrcRqSnNa&8TVHIQ%-*^DY5B&kt*uk1Dxbwu(hMf0M4zWAYXjm8F)x)w%3Y-)yL(B&`T|nmFEQ7ccba#b(`LL ziQ7z>3*9L*odok2m>H#;1-dQfn5wYKd}4# zA{u=cRG+6W^>c=TcBvhKj(RRbY56=uD^XO9e}o~41je|cA&?6nvq?opT^kXGJ`w6M zrWh2FSvC_PZ&M2aAU5HMY7ayP$>j-iUIN9WSTHs|wlAis0#qHKxELEuzaayos%w8T zHi6bBOjK{J8mc0Ds&Eyxa1SygR(7E!bV*m#om-+3LWxQUB?>RKCQBkmg<}E<2sHu` zf9wk72zKQGLFs2)QZUoy7nsLPU_M>JNZ(9g9y5Vyz5){?!h}f~T8!fUI(u4ikkFFT zqdb+7N&NlysY-ha_$p*6CoRc%xKrk=Dr;q)-Z<#Kpa*vX@o@3D(P%ChAZz^F7(CKj4ovv_< z6GStxKiTH3;HsA&TC?xj8C@4wT>0ioTvosR=4-Q4?yHX9vHi)plFpU;tlzcth4n3^ z>sGINIF^0OqK2oo&E7iOZZ>%%QT5lkb=Ee`l3k z+;;h#i>{%(a4zU>r-6>Wq@7anv&f}-{s)qJ)hVx20n4bHUInNN^$kjDm8;wrm zZN|S6&YZi%vfgsDg|jdZP;5M+lcGMLU1$$5<1KN)R?B8GSXV~~wFVUDvk!U+Y*aY9)&JW-~KAQUk_e{h01fiGsR zUoUh0&h$G}Vsfa&<5ap;tPdgA9mlRb4P&q20#;33Rg4~elBtwX7 zY+Mj-oVU2?5Y-YVHAC&jvs6#n$o2z>1W;LO1sQXSQUxdjoz04i0F(fbZ8o4-8}C*Q zI1DyM3I@dvq@rID|LWlefAiv85c(9^x$55RPk;92$iFszbjLGq2ljbxUcCLuM{iwo zH{RwtcnoJ_{nMCi-S?31%C*n`{*C9p!+eSjfV(HaCbXh#lEq}u4SKNPqNZ|Fok>$+ zukc?+7V78Q7x-6_<(dxNGJBhUDDb-G4_WVc-p_j9{;BI9p7+_Ae}yv;hNxiATKGT1hK51HMdSCd!c^;oNOW47g4Uz@<0CTKJ?*Ml0uGNn@ z%=la-BX=1_M^r=tYdmVTjB#vRz7gRfNlR3cj$5&0O<3Ek-Bv!pJQVWzhn4vmt)qTM zEAum2nSu+YpUHkke=9rIv#NeZD^)(&vEmVRb_bHyO*R$JY$~4F%!;agss3*UX`q=}n~0M24Ef@#<5u z_o14G3r88$5#j6Q=rKk@51bd9&0ze>XBh_3BA;c{l-a77fB!-8TvsUg2D}(&_#n7R z9WUJchs|qVzoqTolK$b~)0?mU>E7$NJapTGJHC8mH|Bcg)e`gh24Z{lH>Es79^OL*XTTdM&(@ka zqs6bs4idL#fAJislDqBLp3ah2`d~6E!H=5FE_Fj(igVWh!j(rHxd+Q`f(eS7Anp&8 z??TvM72pf(=PLwQ!tn5mqm&@5RigtnzEljR&N;aH|EKrUWJ29KY7IMc@`f= zA#@Jwkvkqgm$^suX#Ol%3T&fJ$4|FXuVFPkpFa(Xer*sN;mFG3>Gf8Apw z>l`W|e^MWk=i7Zq0BbT}{#$%Ya;GXFQg4&z+r3S!(+e>FEnX3%tA|cPTRGvAi zc!q$yih#W8tKvspRQzo1SQiyN^kn`iz_K{AZD^p*s*Rb)U}HbNgS=iNpak<1`vyz~Imea1~Txc9hI?jbkt=17^tf2pz=r^y9qqoC5<_~l<)fhPx;!hrtB?YCll4ow8hH7rcj*&?`P$>B&=^9zE$ydMDVtoCZ{q@qKGG>KW6h$*btz*08l)e^y4U zw?Dl3owkSOO8SAqD=+SPoR9r*U;Tzzr8f?Dk=w3XS9{N^!_P7~urB?9<`Bq%D1Myb zi`QrOIY?U`zCxRYZCoURLN*tPq8#R7OE{QjhXq%TnG59zI*em^(a4zlS&QPm;y1ChUb`X`& zC$nQgJqAK!SyNKaj48b*w(N36Lbo!}JWFb21lTIyH;7kLdr4IZslRyC6IG>bOC2Bf z`MrLRpA(ERDe8y?V%jJl3rF3i>=1HVvO>_D1q0xAD~EvT~P_bvs9n@A=cn?ty+h_pRL+-xJ#x zT6$ppw&$)1O}ZVE@7{D~e=4bY8V{e`*mVeB@uxR%*TBlb?~mWmJ!{^rbGGk(VdV4f z_DXD(@96QvAcIWEjmOE_LWlKAJ86^}?UzfJ+j)aA#{wFR%T4d>A+2o;KG-tw!FJ)= zl`W<{0@z_vjtsSWiUwMV5}}sj0OJ8#Z_tb3&+9g+cwkcTz@*@Te>rLTU$5*b8iP?K zarG$SjCym=lX-Jby}CDB>Xb1@xlTn-6=4_Tvqid%y=Eh9AT^^g(qeb!1w4vc>K#1l z2qdA972wh9cckE+S!?fU{$%7gBir%y&pz0C>4aNH?$8`I+d2-cJ2Emn{4|Gm+}v`D z!zAl#MeBU(a%hdX~%mFK4+2l5{@_I|Z6_k$f6dRxYQ- zO?#hw7`RbvZ6;V#6n z=FAy{+{#{ltnTF}>Rz5pu-iu{$oBGK{*C60bKvPMO?};9f3mhVQ$ag=3aFe2Wr);% z*e{ZC40QB4b__(>?{rXkJHVGHH=@N!DW55_i&jneR^5eMIu)aGWj2pmU5N3`YiGI8;V? zAnAw&MJ)aTe`Ks$DW*SUf=g7FK{>3Ik9pMt-LvX}?s=Jiir(&QoNZCj!=loSWt4wf zVw7yO>V+|dk!B^S4|mjI>+vsZ88vuhhB{kesG|ky`6|6B(Fy{qm)g#yV9Mw?594JV zmvNYiLZv*tlgfBlrF=uMoPgLu%kXwQ@fF%4*%r2k)OVOVr0+$m+<0WjQnfl7%s=Yer)*O$oq^=K>CnE&3$0kTt#=UHi(QF zOK!-3wHdIO0Sg(hp5k?^oZWb*XK7 z+3v|rf7+r(oEEk9y81S8gV-(Z5_u#B#XVw591@R<0^3?;kIyok7pZ7uekR%4RRCqz z&oh;i;z7c|j_(EK>|VZ{ARZ=bfLTxMUGZ-Rq-Re_rP{{30;{G5k&OH(@@Cd+nUaqY-mJBGhEtH>+!xJMDv;;qsKbv{s|l&cTQlu$An99AnHRV+JM~N6n->dYh7&Gdet^ z!%k)^Ihoz0V-}N+SxmZ7i%Gds>80)1l}ctY>6pc&8@=tRV-^#wKfvx<&URAVbWtnG zdB#aLIQKYH&a{(v61&Qp?5bsCe^>X<{_Q7x-(oIl|IJ)-W|&JvKHhWuyV)C8QMxnp zczE!_b?ENOrq3}@8DYt@V)EZORe@Hw&44JADn+t3| zSJmz2adFL!(hC_vQ2roAvrOo<2}_klnryXAhN5On?~)xt=JdM>ucykI>#4FqFem&~ zQm!3B0D_}R>7?1$r}I$5E@4>f@gQsghK+NXa-^^&eBjYuP=e%_718-zU zBeOS;bm9rO?wDi{hc|O&mDkQ#bsM6;?7A2D{zvke11iMt%KVQ9yQ_dXwfKf`GQ1+( zrMp!ptoCl!Y|wQXZqeLg5b~Tl&Yf479=6Y}dJyI$f46r?9Y~ z0Lj1T3gqNik=8v1#oQSv<{tGJ=#%c4V5BG^(91eehG^^_p&&2}W71V%N9h9lnSrn{ zI;P)fM!(U~ex+nIX7tm3jm+jWvY&?0zKq@?n4^NGIVzgwjG}4IfBe(1uN#>0Z}@50 zY?hbrBP(b!f96+W)Yb$^#}0Sd*#Tw;y6ne0fKIkT<~^|4Fv|JnAAwoFj!+PrNf?Jp z<)4B9El^*w)3*?U+x(B9=>Snq)QqbzVqP7TX@|SvFVE^FZ{ud z5#W=}hdQo!tSs-@?v=f56S(I~lf3jizwG)^=*OLB#|A*%HXgpWT zba5-n%Mg{Z3^=O7z!lVk8jlKi0jLeIcBTw0GiJbs4A`Fm`&1ZAUAMBILyi)yfnK$P#0;)TfjAoE!mgl-;rewQ;l4?v>*df6^N-oo(hB+ zTF8xMe;}#?F%`(8lD&aK`KDNeM7X@@L`!+NE?Qr*IG7ACimo-RFC3=tPUdz3XoL+$)TNj67HebxEixuD)LIqwMUpgU% zIzYggim&zE;Um7N(^Q<37sXMHQ#1ObNKH<$e=aA-$uUEYx|&*LpBPPA**$`i)AHAs zD2_(VCW9sf^z74$0?!cvM>O6Q&liX#zpPfD7SZ2O*5 zt=_Yz>E$-~lZIQ_t+x1Cx>6uY*zF4do7p+@1xbR(c!jB4@g2lIT(wJybOb|GBCAy4$||$*)KL&wcoh(p7g|Hm$3!er4Fz9)=7tZUOp2+5WjM-@fb9G=XEGzUpgVn#Qke>7fz z+wm5B6TXMMNZt;{g5!gegHMNY(`ou!W3&g)2Nc+XZ&d2DpuTFf{@Xvm;n3Uoe*6G_ z5Wahq?~Cw#3BLsO!vFa6fA;aQaX^y;1Q2%&HXuE6f?oaqKi~QRe|^LQ!K-;3dFXHL5K4al;X|5^tWHx~%|lc2cW6AQ z1OzthGk7(61|3Du;WO~mK6D5TpqF45>(B$}2K0Tf^aQjRO71}O;j4l2?_*DT0F{8= z&p~(%+FpikLWhwPyVD;5CU4_@4^M4_J`8khr*W}(;c5Q#(Y9q0q>#y4=&p_fO}sq_ob%8y#nDs(?Oj4SXA z64JD!XQf{QoGM0Jpx66Qe;+yk-$C?q^d>fH&ZHkrp8-rPLNnog2GDQu5H~Wsb)<$a zG^|nqs)CyJ=ojeM=r|7JUy}72qo!1o&|H^(9q@kwS_HFw9G?6e{uj9kzBh9(@(t-} zfaTlJcj;=QU!lKXFD}7zaFP^|_2fZrBVc1LPQdkCTtd7o3aB<>Fig zSIsqZ>tR;6bGzWXpZg2%<&W`cSm#pBy_(&cy_%;q&uPvGe@5{;U=h6f)g!}&!|#ru zk?kY*j`WQTr2hik$HRC}09C{6+u^$g_WNGIxP9pN*a&Oq#f5k(z7$qw30{LcfxmtS z-wNFFr)=&&!_UGh{Ski(b2bq_oAWqQL8g&8@V$a`kWR9T+(QP)8{|AEat6-AIk-Y@ z2G`1UaGSVmf4O_P6!$9k4)-2+j{6F}X1L z=Ot)4H;VwKlD&94xe*VLh-Qm0g-pS-(HTAlYyBeGe@)JjDcmgFh!>zWWP;qAVCSEN zq?&&oo#vl~cl#~$yhSkLo5-hv5%pn2s$k4tapUKGJAp<1A@mln$1Z%DJkHGp zEciJ;Rnvq*+ym%mTqnK}?I-mJ>A%$O06dzhKyWG<-`(xy1+${c#WX#6tZV!uTL z!a_2LR%*-`xDMEbuZ+w`i_?#x`_e1XRq1Fkmd(r!7C)$g*ja-j5fK2`~ z(DtR8269Z(kS-=Y;1Bbm2 ze=S9qpi}UcpTGzgb3>?XWH#wdH*g!^eNUiy>BrLntVgTTYtbC^Ec&UaLG5B3_Be%q z2k(15>LByeo4AgV)vyjbVHFavTAP9Y+`)J9xA0$}9YFK<0>9YLsp{QYOn^drkH4BbynShon{;g#~ZkZTuiKSpQsxB@H)`x?s*XqK-e?h!> zUK7A~)rFgbsnZOe#o%2GHUS(8!2`j1_o}*J3bzI8Qw>+I>Zxz5gYJ3_`sv~69s1%T z)T=iDXaFeX3UBDeuBn&-#8p4JmmsYPCYADr>*`aUa2=gNii_5_FHg;#*HmBU3x%4C zi&A*{vhdOr3QtQ};;adp&W1?|f74SU8z#7#z74uF*jqHzvtv*~OWWec<>BS+Elnw| zy_t?-jl;NgDc5zU+!wOYxovvW?U}VcuBYC;I!LoUJ+}u_d*(G|)`n=@+zfrdvn1Nk z*3$q(?|?;YTo8oO$hPLD6y63y2I-s7x02tlBV12Q+SUY9y708{s-87%f3P*)o)nsY zZK%)dO&m&}MBe&f&%&l~C{^PNH@DaMd+n%a{=;Li+z~lj@#ye8l*yx`{a%R=9nw-MU|Dn1=f38<95eMsg+LX0z zTsS5t*H0R)Q=nAV^d`g9u?7O;|);9x^aYP(pD zoAsg4fB4W~`V4)FB^Mr3rkR=?ADf>tCO>9+#vTqP4C1wM;o_bi{g^sHHF?09N&*;< z7B+=~(^F^>P-YbVf56tCL_@PLm4GFiP8$IJ$wf+bOhcanH^YZwXK_&jFuI&=bFx|a09F)R6hsbl}xtQQltv8Iff6wbp;Oz?*Hyr}AEx3JQ zQy;-(dfT+--U!q+9SVY|V5NkX(n6XE(hO?Eurz%{%i8-6B@pUnwLB|e`DKF`u`;b% zhS9P?B9}?>KruE@g5E$FHHX>1?P8Vkrx!7QkiIf8 zIWZ+MmDCVee-T>L2PKE0?G%jqr{Wsy>xDk&v*JPA-8&`WJH&dLue9ujmb9#Uv6+! zb&x)o!r|1C@RksLyHqlKZ3qg(sUUD`Xw-{l_?vrre}eE0!>TMxHpwxq!bN`QsX5iX zRBh|?15RAX8sSlfSN(pCj7EVTb-2{BZyXI~pTd{ZnEkQo_fAA%d3=!4 z@}NB}J&OS!L#b>!urd$Gn*GhJ2bjr^*i0}JPRl?iSV3tiNSPe4$?zq;WOkgTn58|J zgzJ|>e+wEw=vKgHg@VhQX{#_L8jASe+6ZSfqJo5V-Xl#>b6CmA4IX1g$G}}M} z=qS-~GMj*RVI&($t?{MSHpfSsw9|L)0otBS34Ahpcm@q^Aa-V?x|g-X6hYq1To#6c zOQ0awv{YU}DyVy?=CrIG9;2(QjFh@6KBi0He+d{^6m&#iC)GVS*w!3u10I6s!D9P@ zDGj8-6`($a+bQ3eE5FZNVE&M__bh;C5#2UlN(6qkqP-(bnQMyTyS(~zjy%i`Eoe$1 zUr$dMa0sRtZGgtmeJmx!X3_-yHpIj29aOVhK^40WS>=G~veluz`Rc==W@tj9Y%O8o ze}K@I(r8%^)f-#e;;<6d9$Qbass{+Z6?hdNTb67Cz7~{%4MDcm?LNrCBFv<@X6Q(6 zsEg8u@I3pArPjrJTgB*w685(~E;rV)UYQb+nyWSu*&hI%@f2}Qf=c@Gc>ZE07ht34 z;%TBYVR;jPRX+MOP|-p~Y{<{gq>uX4e+`o#gOX-d006%CM)CH!nVhgCWow*&xepe$ zm`QFCp`CMkZA&cG|J3?q*V@B>%`2qo8@HbN`24=%l@ij0Px76{X*y~zI+jR&|6{~F2=sv%FJZIHhNf8e>0 zHb9#!sM`+k?Lrk=r%9p*q3kHY%OH(FzmGy6ductu4?+FC5L%S6*8;x<5yL+Uv$Vss z{RkOel7k6`us}QMb5L3KBINuSA@2Z8cLPF!QwW82AQXNUp(vE+!)q0MAECmp5GsPQ zaa#~7f%5SmB2;=7p$cd}>01r zOL9>*3UG0*5E=)#!agB8Fv#Wi$J~MA&vFImBm}}0^u@CShqyd0yKhP$G027cZH`h) zZ81lODq(RD;`I>rK{yJ5M@zUID3>6<8A3ONeGra9I1WKT2x3|rgs>jMe{KjTX$_an z`TK$asWy-Ez_T9ebmd&=QwV7Y9L&=Nqq@)>2umRBgs>Zez}nH0^$>1`a1_EBR+Hdd zefN~X++BTlvZQ~_+ESKnm$NOcEZcusvz*SFC#Q8Y^>F(M~$a`oXgrg8R@*aHuLjHnoCMW5dLtF!4 zH-w`QjzRbofMu_SB9iucH(M0yB9XMt&UyA+A2to2PgjXTFfyP5fK$r_bOOE%!FoWb+Uu;^S)=7R#evMqP z;;)gHSo$h?k)^MYU$OKzkmf-8GI_BtCxB`VP> z070}nxI0D?v3u`>ERAA!-vbbhVz=%9h(@vNwgN<>*xIWBqET%58h~gNTf77y8pY-; z1PG!*^5DTpUZ8T$l{i>yA=khvT?4Ch4Xn~Nh$q+3FZzO~bNg{$VIi#8{fT%%VW1my z$Y*i)eBAvof9~$U-8bRxt+=}ycVB_KSYd*P$FCMOL6I9Zl@nxa`2p-bPlORPA714n^kKa#HIuPGJXCp6Vlb{$lYWoW!+?# zlJ4yLe*#!H{!w4-NTAk%e~5B;z&u=qVmJ!vB-F+7709opX*u$frywou^C#gkOJA%g za2T8EQwIWH_)i5s@(&UKKlC37{4qGlc zkbhF(nU`79tx$1)U*IO190=U#pAopy&ni0Pe~K%*AeXQN=EoKXE{6W<{7VCgF6i?> zpvHeipjvKKL7zDg7!Om3%U~f)w!qH@4d+0~K%ipLqRK(MDp4ffD>jL9#ED|5SR{tT zfS4`%M7!3em9%E9QLEQ#wStz{5-rl&>1lMFDhYOh=?Vf*W1hhhp)rxQ3WBu+U4l|s ze_SJJTrdqcriPZG#-+j3xdq`ttOo;I6P|`agF%f8r==#v8wbVo{8VMUF(uBuyr~!C zyPKgjMYe;9xUgvur)kkPA9ZCNLKs`O-Q}Zc{}k!ZQU<5fe*ib8zDHeNhwx|kOnu!U{NFTbZaTzG#h=yB zr{&z#y5{D_L7ZgmP!Rt&v;)-nZ`Mu=Qku3yL2ZuQ?tZyl6rP865t=|doeo7=yQogb z+VPmS>+Oov*Y!pstc@#(x>%boS1_~9%TZ_(jj}e*ZuBy1^Rly>wnw>*gTE3yWg;q}q*Y%>7 z`h`usEs2i0zA1?*_2Krq=KdLTf6FV!jCIH8SmkrSp|iQPvvNAtjLL7QuB6p7=vb9> ztV%l8jKmB!7GkJAx2ac)rZrD*k<)%+&;#1GfxR@%DQ%d_aCl0{eUtAns4jbvA>N!a zhNq=W5NK6#ZE-EF0@9*YX6h4Gs@ykC3Hc7=y-Jk?#n$jN6yLPDYcq1!f3L2S|GMA< zMVmI$1()M^*SCG3u0EA$uj|@`P-CiaL1U_B-r}ZSQH0Vq`bw$EYMH@MKbRhp3&%m> zWLn5^qYY_UH7(QWl!jm5|IJFut_XIMBmFp$gEyhBW-gV}xR3xxSg1JP4ufJvWkpvr zykHlO<1V!iW!myh5t`6?{pM*!c)Fm1H(8Y?6uGl8lEnCibOH-|x zo5+=*TF{-xLs|@JF{GuCmU1NtTP(nl%79K=88GPU0-{hCPBfsbRJR}Cz>r$1F~ZKme_w`)QmG4j z4#UjlilI1l&z&DvUcATI^ssU_dK+Pxuh9TM!)5fWs<|D_dRyhcnTEiM)ZA~&3RCCZ z%(UjkN7`K0xbcT4JD=f^an6gkXd#aN!XLg)J*E0J;&ThY>%6YWl9??mVK5K}e*vb;vgO*jmVvkb_UZ$*oSpd|BGW>o z(y~l}X(cnKkhmtU6E~D^a=xK_lejK3r@*u%9hr3;)i`8BY*1%UI(uZ&Z%|)VR8t{S zjlvp5f0`<5Dq@9vBt9YoF(ek`O`tbP-XwYxR4=ezkT-$e8q#l2UmPfZK&G<+Cj{90 zL_Ul13iFaYOY|&=1+pa1Dd2_QZWgZ|-^hKY<{D!fXMRX|jyS>5!~Ly=Ibc`*egPD- zuQ>{3Ze(+Ga%Ev{3T19&Z(?c+GBhACAa7!73LqdLGXgaXwIz$6ufC)lRg2bQFg@P8CIi&HY4!sO;*t6?(BmbxYYFu5ugHGBmQ6y|X2 zt+T2rEiiI?{3zn2EGz48UpIHwTknhVTkBZUXz6PQk&aJpMcZi}kyy=$0!o?rGolrVa=G*z=zN`GzCgIcRX z-KiRT3#CytYKhva3a_=QgO%N^$1WVV>z;6W4Q|(85C}Sd$ABL);Bgd4_wphL52cKT z0VsEvpzqBvZbSZ^id9BsDn}X$S!|I{^&%9)CnyLRaNGyOgqM6@hVd`}?H@$%MfHQBS?GcDx%Z3yJTB>@78)lx;+eFXGp;Z{igvpMt|#h)#X*2Kh6R^ z5S(0LDtO8*;FfKRwIlkA=gd@#Cf5c=c~+PTSiq8i!f0jfwmzCnyt_2nc2(qcP?_a; z+#ZZZXD*G-Gpk{Ae#9vkcveYlxk%p9@C~Ko-SxYJ7G8IUVt+yoi~gV&MRr>Kz_nAn zB0Tdsi-u#kwAvL0I)8n@g-g+eOb=NG4s zl6tP|sxi67Nr#l(Dcc(VvG@veW$w>*kJi6ANLt#oZTK$qcByBX&DPbj!?AP|?akA_ z>qqJE6CZ(?c+AO#>GH#0YrbVMuyFgTNr z1RayVL_}yy4uU`sgyCvt6hwuD%r&@!k3i-Y?md8O!ZF=*09G!c|G4>5ol2@DZCjxv zK?5ZiR8YVP0@M)U3ntlywhqWvA z_eV-eoTYJ_A+RjT5=A{E-w>euW+V-hhpPwk%Mj@A=@yPI5pJIiS`X{z^jJRqF$gE} z{4nPiGK;VR;m+)?pN~nf!;cecoC)zgbeu8- zHyPq@{VaE%E0(W4rxmf^wLJhSo66L6_m4f7w&FEUmV3ttg)Di!7ds)BJ!EHdPQX4{ zM^RJ3CmBW-cViK#9E**fAO>54Gjf?^y_ks3Vr1a#ZIOC^i9)5si6Af)>!akFm(#PJ zj>RHF5t~l1GewI@oXIllY8+l|c_R?j*`#&!ZWc?>WUWxx6O2znF*n#1`(jMjI{C7x zuofGr)OX@!#z3uCEVMh7`+H;MvShp9DYnQfgG)ArtcE=07KT^b-YN)hvl^5Q2dN&rpY41}Lp4zm@xfat)gB_eSMrT*rxev6e2ziU8G7&vNDHF*g zn?pmJ6IInnf>^H@qh?yEbuz`eanxNQ^EPW@+3zcV>lIkhnHb^<_U^v7)rW#VRDLL? zeTdJL*7(PAzk$7kN_$d-wsYJ3Uvf7gBIZhXR3ehMD*jrENC*W{gI3;Q z_H6c&kWENP0wEB|2_!*`K)9_5CXxW*W)MO^q259j#fU;}Ypb<_ms+*8Y%V|mTT->w zS}nZQ+SaPj7OS?UQeR3dn(X(?oIPQ&`o8^szwfVaPiE$sndi)ZnKSd;&j7**AtUNV z9FkY8@7VaeC%*jwLX$s5h%8-k{bu=@V<+!LXlgS;!gZ@Qu3kU&JFYlFGhRZ-lw94l zZB^5ftsxlU`*2Uwn$C`ue`!p-iqI8Xp>4_*bnt5p)POS)VcAIf%pFmb$Fh+1Q9w}9b7P55zQPT z__QDnlLwS6q~lL>$SCrsG4kpK-D$!-OC})$egIEIp15?rdbE0;bgp{tXf>()igF1aPK_wpX0xyaW5JzkRxJsmL~k>CV=J!q#9)gsqH)z@wV!@ z(kPVGc1KkSsyS102Ff@r5!B%iLvmD2DxI}WspG@`fG^+;aDq7|MYChUm_EwK!cmVU zCxl$KtPmhOvt$u!dAeu_2Tbk|cG@A!HH1Pa!a;_A=reIVE>%m_aqU;Q9k-!2{~=C^ zL_$`KhPmyQIFW?&1VI$CoesXdY)Yk_yOONmJ$7Q>Z^rfx4dSNX?Zx=M*#6M+ zgBx~#JaYbQ;<(9KENX_^0=&4OThw(MPc?0(htseeb>Bio<3vQpkbMFgd|LX0i z#CAkbW9ofAm!E;MQ4Vo2DscxJM7E&lD zK=XXZZ*>=(=Y9Mn$29MxK&@l0uQss2(du1)80c`U_jLre3R|{(4q`H@Sfj&yEwKJA)A2 zsed60CB(smTd@qM-eOb-z~9(>0r>L}r5+0%)R13Tk+fioF9@~4Xsm*khjPOer9m8j zbRA87st$E9;VPH(Y4Vgb@|5%zMvqwuDIzM7!iu0+BhD8&(VWH<%_>4XA<8BbSt5EU z-HQP_ArVFq0H#wBU36xmH@BiPP0s4CEk2i0@o8x5j>pe;(>6xuK+>aa(81`st$MV( znvyi5X-agI8oM|7l^lec&_)o3dyuYwG!2ZP6G%Xamt4bKiDK!JkW?y>EKV}=S`pP{aseIUP%J+Nl*wIl zr08#lKN$NEJKy>hw&G9UHxBGrv1{~AvcNnwao0^x;e`9KAsoaUHsgY^cg8+{mgN0M z*5I$-F>B2eAPqrI-3j9GPe6k%{3k|%SvpS0B2P-g(jU3^vd(hnvjl!PbymqUSt_=%uLr_3*($B5|AVMdBcseyipYDL^oP`xeG7!OkDbNw~+|v2B z?s1U?5|U=;swHT=qyv7G?m)hQx~Zu-W3R$#0qPR$2BY368aY9V*#)Z~+l&rBMpPbB z5!j95ZQXvwU@^LkSm1PyVXkzbOUG!dtfr<0D5~6Eo;{_!%;j>svh87eMT`8|kY2XCYFgInOOHdcI?BasL zin>L*lAtT>J06{}w&v<RX& zDDC9~pm-_tg!k!!gWjVBFL;j^{4)FP0)3qe=h9WM)Ax5U_RyJWK6yBGN|{fgpgZV^ z7Zp}i@l{20_{)nD`j+@A{o45T<~z+lGkGkNVp2?wmB#kRbX7pALzEU{!>Kn^;3&wuv{H;sqWy}6D!HnWDzdK%SGnOa zhv?vLRmmxaggffVE72ICL}P>!l}8kNq9k%mI4+QXpimyGIfl8cnkTGdQTh5GYM#d)bci*M9-RU@J zLtq+eHf7x0t=f8&cidH!X_%4L4F&23=HcRTv)MXfm@7Wi1$&)umcQ+~>S4`Z0diIkYmrccQ7X+k&xh0pkUp@b_8>lS2 z4YEqz5yau`l#2(6F}*V!0JW+f#6XG{Ni+=)C5S1##~c9TsG}JaoQ46FPj52^K*p$= zrX45tLkZm!y4gBvT~$u4U}eQ*wJe>amU&TDD$#6rg-sXK?bV&s@$(@&tK)*Yjk;cc zT}sD;%rz2D6~lBSCXTbqCs*u6cm$mV5%zg9`GS)3Z%We1l%zf_mdA$D+A+nriArq6 z$e?-r?50fN3^cWg5*}#48fs?I+Gl_MK@iFah$bzC?Y9l-j$CL^?V3`sx{ko!h}g~c zM$r5nQ3C`qy<4J~v0EQ!?AFKHZV5Vnv$_Q$0OP2is4f^oO~W9!bR?JO2-1s!jyDXG zoz*t6fb>F8_29`-r*%nc!jji2q>JQA0Mw;BoSUVU|fAE2e zYt>dQor5%by6sOAvlwcabBZ(8X$a{B@C~{0fi9RCGX-G9z;m4($`08{)>saI-#6yh zS)O_3!hci!R0sMgAM}$2d2x!a-ob1SeRvktJQT3enRimi%Q_sQ(QBS9T&_`Zz+407`b44?r6NY6B+B4kj0^LF331X%KlW1`6P4!xTQ!+& z)nv9cEwgLE(nV$~-Bt(NN;BKp0OJbgjUXnCk(u#^i|w)kj}D?5*aCBZdR(N9i_C1? zg9$XrM;#Zo{cV@ni{Q3^L*90=F`o8bYR&*Xbhn}IS*^{AVUcc;VYzO(fyZqv%$N4} zo9xUPF`0Nb6UBVm838KEk}AQrLD^2`hh#D7I=O<%-@3=|`pNIG>&Cy_eRAx~;ek8v z7#Q4f=K#sV`S)Hw_WRL)SO4;5oQo~5{QQ;w`pM5*!8Be-38_=Tx zUI1z<+5Q$}>~($y9Ls>C8E_;64rjo58E_~AmdBlvn-YAUGjE#V3PW8ak=L1bli^;& z?U5(4zE|`dXEC^a9(QSD(Hm}^pDZCnD#J!ktG?CHYHT&Nnp-V@>-6gk>x}D6>&)vc zL$RTJTYfB(ADJ*EveejOS{YkeusOUr(i{1z@gehl1>Y$8dg1UKeE!uT1as%JeQTGg7?FRj0kR2DWKlay1fvHGwdg5F>>!-hn{Xi9%dR zA5DiTq*98G%>X(~AvH(oNQFnWO&?4Y`q*4T`GpnjWg}&zrmVM&l+ln!1hGjWiSehb zZUb4u06Ieo9HNty)4c9V$PpV8GB)-iHksnvs77?siP%`&&BiQXo1ofi_Jl3(B*Hal zK5)BtQaToY(bhfpTn6vPB`7z|(@e5>yqiWO&Sfz8CSY$UYtD2tdyMMI)6ys_#-nd; z)pu0#i*v&|XHm>9IixI!6Y?yw9~lZnKh_mPmg|IS$Qt&eys*WrpJ4Rkf_#Hfi1U6F zlyaz-sm9z`#`H^JeEat8C_`uCwoM>s#v3S-Uoj$ojB`w}Sk6Qqq|2eMi6*blmz~2T zO}3a3i~|*3RZ>ocPNhqgGx@Rni3BXa$|&RMeoo@weB{v+Y6dCP1YY`5At8>S*6R*LAP+F@FI&^|Ei z&LRV{*-Yr-90M@*T4RO)wP}2)*b=sgl{wkgJU^`4C1@!1w{bKSF~x%z13h5H8fR;N zgq5_W!%BM9@D!D+WN4y#5-XJH@Z~H*?xRn^a{}3#;?33+WOkYvLy7FjaS_w#AW4V) zjC25zdBLKlSkqxcs?_}z7vln|ACwU!*wnZv+_+$A^I<9(r?x=vrgM}xH)(-xAX%yH zH2hJo2NUfUJLY9I4Gr$6FOxBuDU`!TsJ_m+pM}@!Qwki+8vW9mhG?_MXj+&dGtR$YSF{=c2%BvQpP+SmA6Bj09hQ*ZnH% zZST8T?>awp|Hb=m&Z%H3=n4kozG_#suhF+LxF;x1BoWI**EBNO(n#tp4bC}%tBeWD zYRkLAd#(%koK?cvoYf@RkRK?=j*Qvhu6uwaF2)8unyU_)zZ|2Z8XCLTZ$_Pc%P#_CDk7hVKZQa!pBhArx^=Z|rtES0+PK7)rJ!atf z`?+iyX*PmqjjdL2!u+abC)${!6t5|FR580QG?_|H@TygM1JR2!Y&&jh=L@&~YRkIU zZ)?B5WN=je{+8>%^W=?NAGzbP-Ah8}-Jj!5^zRQ)O4Ruv4-N22s!pM34*)Ke7upKL$lvxP3d0 z!xnDxA3#P|7IoK(hq^eyXk#C(K$I|vQC_AxyWz>;jaOa_J7#B>XNT}b|a}Vx+>b|z3;VQ?sjScO~cYV4FG1;&aHmjP(Es#iz{~ozey<-g!X)MG0 z#jy;4br~@K1u+hFPz?}i)WiG5Q4cogMVSABXoxzf28c91a&e~r79UB^RD=2PAYo;~ zzyc@p4SNjx3`xU?;iTcLK}3e2VWXkfus7Xw%8)V`g9cE4Um{O9gTNh4jig5?OmMeg zBmm zCH=kHny|<$oFb>=Q0Irz(UkLA5amLeyUp4s8!f1Ra#k@iBfrf%y)|P^+tg1p^Q3O| z3wQc6AdRem##iGj^mB8+)jZ6V(~u@cdhB5l7R(|nHPjquoEj=)hAIh#>;O~wnjZ^? z9wrm+o7;6?%iqR+HntPr`0T@NS5CTp>@M9AtE2Pa`lDl`qu=N7u3KAg%eJVp^%!K^ zS*)>tN#$5=Jva>@T0D#UU*lOsi)V5FOFZjfg6=0_k;AE%sS(8T3biaQRm*}2Y8h4| zi-S42YU%N*k;X!cR3Yp3==SS4P6m404F+Zs@g>aSJPDSj&LKnN9>g(p7MMq#^j`i| z+snUcdwE`w*j~zPFCXRKXvv6$&1!8P=mqnCvaN+O#dstn9YxF_|3TO&S}ycrl~(MxPBkC8yKx_WOBW0uFVX{QOhygVq6B0DCFSo{%x z7(QC32!1SG4^dl&bihgtb!kDZb6QaAf_lzF^!4W89GgZSHjQs=eatdhlaj`ryZSgBD|I>qc#DZD55^JGTtX4g=?9>Wkwt0!k=U z#yfx`*jbB8^~-hz0WF4B;GKBN&vCmEK*_a0wK6hiEV(HI z)@Q(C1}tR2MoQPQ3Iip~2mrlakp5e4CGpcZtPM@o0R^%wykPh&@%cY;uEz~%q zpL4N21Va)5pcuL^$V$7_XaLK91Pl^^?r3>gSxI_dqi)rpq^60z(oW40C-vfq#_riQ`qjBbK2^p&j*u=7WSj{%(7ij1EU@gZ ztn3P&%QYDH8BZ9AQAdbLuh;1>;Us+qC+Rg#I*`!IqA1XXWgo?uk;guNj4=Ts&@Z9c z?6VkVAH>>vE!aX#8o!vdO*E6?EkE>+){Web)q zO_p}cMhib3L|9vQhDJ~CP@2oC)zek1Dlk=NGD{Vk7j2I z4D6hTfzW9g=6Nr%#lUl8rvJYk=ui(DP_h=_oAR4t`yKoPEIokz*g`N)G}*x&+32HQIL^)sxEy)+@I=-7Io8g~D9TO~1P4 zvH6l|$Yj56!Ge3I4?Q$=`TF^jd&qsGgZE6DyFn$squwV3uidB{d0ctshcl22BrVZF(_BYF({%Q zxyk;ls}k2lTX$v{dz^C+3u@S_E}nR@3RW>{70iBrY|-1&C!MwP zTsqXH6V-3Q@v3p7j>U}CLr(MmTQ~t0S9>Wqx;$(e`s_WdF0L; z7u|dF=uxo$9swQn4A6oH<&j$%Cxjd(D|So?EDf&GuMhGD_E|vBa#2cus2O2;*`j`p zAxq4E8eq}@$8hQogAQK>lxGL?@+<7Lo|9i8rAu47g#OY_~b>cAMR1HaPqwa-!BU~iUqe+hOkA9wU$>I4=C5Q0uiZv}c!qcDpJjs#PrQXw? zG?~$l7-=yQkB>s7s>I<2$?UGW(>gJ(yIFc6!x&P3DD7b=M!jOIvPskIj%m=;g6VgE z)x*e|dPnhjtL%B+DhDL15~z~$oRET$va8aAwD<=MUV0E&F?D&p2-`q$<2+_0r$v^k zy{ppBBM`7t5b5WRtS~o`fbSS)ek2Rjg&rY&FTC=lmtUJ(u;j|rx#yN#cU5ty@%Q+V z9rw@s#$#ipx+C*n+V;>JInl_xEo0q(c+%~=rkcdjEnIo!w%Kd$K=dU1{UG;0P~*g? z5Wl0!KOXe(1Qv+k8^Ve3s&J3tc7w3iw?((n&||tycbiGbcNsWOeqpXF#{gvV{y3Q! z0M^Ka!m5AoNf-=Sj@-h+2@_BthtgOuH`k8zo=Zr~lR;vh@e}UGgeNALDM<)_^rK>w z5gPlZE(namn3W~4<8Aav6y%Gemy8?D7&kgTu9S$z%mF&CnZ+I`(<)3QnSDht$26Jd zYGj%_PNup4E17D?IQ~7*5YG%WjK>+yYe9z0uYc^{8fY;G&~)s;6^r*`_Dzo+J_d4f z6tdIq4hKfL01b5kMdf5FL3Yl6{WAmwxs`-*sH~Ea63`O#Rn8zPd_Rdj`SYGtt9R_a zs`tmc#=eR#+dlP*#)dCHJoY=h{+igVrPCIFeb*Ss$(F;N*E~_4|7`E-{`N`SLc43# z+&LR2e6mk8PrbHb;kHT4wrEYg$Nxq58Y<;#nNMa%`5CG*mH|gK7^H%K7F_pgfDeG$ zAj7j{P?AxE*iAd$53qaZ)iC=gL`GGndc@>!{+e&>Ecz zyulSzyqwDrFCS%ymw#y|a||&w0Z*X85Ne-HV15LB*aTl$NV9Z88Y72PBj{iP)(FQO zG{{8na%c?fpz6eb#3{eFwkKsxNsWP=*P{^>!J z7&{mFnQ!B~n=v`K1(8_mA@_3nGOUp>FP{Mv%) z2d>|8yl3+V2&o=BM-4^T9G=XBG8akEVnw&26kdco@K$^azK^^}-jZW-sXR^oekd=M zqW?Av?ZXRyfdsbVo74SS&|fv)|HVI$aOf@kAbtox4A;K&^&(s^;g_Ia{2%ZB&wieC zna#dvNf|wMWP{v|yh#6rck3XTU`2q@0CK@<(4T;)t~D^2M@Hm8&i@B9{r~m{_J|jf zPxoEqrLhTwQtv@}pO#~5Q`A@U(vtickcZO=fe-tC3|@<#LC4T@_$=JDA00+R=q1>( zI`j~_34IMbJpnC+mb=hGxOC9|HSA3dp%SqBIY_Sp?p5d(bOgDuC-nhP@(%7bxN8UO zW*(|VO=ttU2Va@mf?Cl@{x(#Ju0+?Njkq_}oVqu4U+Qu69dwv`DK!c-;6p3mdNuVo z-EUHVZ=qti9q-#yhO}z@VR*bg7s1Kk4bP%p#^h5L} zHtWu&9#5SGnk_(rL3?cG4w6;ZS-Sofj56ke> zSR@awFxfhZkAb%wvb8aq=i*u8?YOaOb0JFN2+XL4D?)SWpKhCFMoy&Ch z>-OrN)O}C)obIe(7QYN0!7HCWHd;9P&KMfoId=cpz}Qgg_aKkFKvMw}MAa~V`wqC) z!G7Nl6t^F}hRv{cK3s@r;45Kemf>}{8|3Sk@$Dcjzr*JK1Nu+}eTLm+JzJ+`!n9%@6 zqzaz-6Rwnxb3aFKawoCKKZ1V88?hUoA>ZYifC_%d&(Jla5cd%J0oRRhMh8eeLdH+@ zyMT`8;io|^EXHN{Ut9`tp#O$YCHF^k8@iVK2Au&u-if|}SMsaTy{H`Dgx*6>09Q=V zT_+R@+4yHQ| zv$}F4mV!uE`!eTOvR_m-7qz)*5s-KT7L`zdopa)W` z(RHc&P%+4ZJ5x8oh)<$-(Qfo4-Z6F~+6X%Nx4_$1>Ke##T|=sv^pW3^MdbcV_ZL<> ziaqGhaQy%(GjvB$AOCB#2-T!^rG5p}T>ujH0kj-lflk9){tcdRIX8mJ$L5j#R0FpW z-uEP0kos;ah>d7}O{xpcN6(_~h&t3E#$k_>_?Pg$H=<6mFtwTM99s+Pup3rEfz{dq z^5-tTo4<|!80`X{zaQkyKH!_DfpaMDBjxHHn|n5OZ`^R*`mSr&tzENvRp;`y=BpA* z7SEqotJKW6ta|#is;QNeE6U3zm6l8_E{YdUD9DdRBjLP%kQ~g-3HW_pj~i^REQejP zSuJLh(ZK!z07oz?st-4`%gI=Kl8=Qizr2{%!yVAjk#Z<;Iu_RZc>f$1~J}f6+tqaS;cfbXdbx5&ve44%v2Jq)%0916h=a=m9w zot(t&a(%LY;rcaw_3d>qT))XUD?F>ySX_kqjV1t1043ewjs4g?12cfQ>!+$)*L(^>zMGsHM0liD#_{FHfTI%%m;OP|z&)n4~Z(DYD1N zYw6pdyXF3(k-lBS5?bCKH?It@>}YLHavd%78TL4TJhv|C{?cjB#VQQ$nALn|X0M;? ztM{yxX|=EKPC2=6L33trh~_OVFb3R9q7ChR4e;n)u!xO|WOy3c(bAm6JK&KreG~dt z>iczu>uF2-Iyq?w&kV2WTh|U-13SLpkITN@p!VZkdlZv3-%P|ID^%HCl?o8KTN{mjgkxnEFWruwe4t`Rszc( z3egR|dssosp_1%f(5%*FwA?>{l#+N$lC;yF5v?bC3GM0Cdd6>W4+A9+G3O*ZsgI5S z*(6t1{hDb>?D`+NJJtU5!B4rquRXoCjf*d-sr^&O`_fP{YgRMoCuxZIIo1nA**cDY zOe@XiBp-!8ff4n}VNnlM$y%`7kd)dlSMwHQDD)rRG@Lq1?_$Np+tSlaPK#e!pMFXG zlIfZIIG8Y~*T%(5`}&NR^Z}`<51f-Ofa1~O=8!xqiIxCoM&S>9{i!sy_>&4O*({0x z^rtqZtCt}9({Ky?D0LPWHGrV&>uU&q%ME?)eI3K8-sNFg3ill*&ynZ)HrBUmgfpBv za<@O(u&V{uY7L%NTok4~eSItY5f_EWDE@xTfXZ2Sw3 z8Zj)*0MRpi|6v88Ue?RA23B7&j1gORDb=5#eZ6Rn3CuNY z2U`02WVphxDk~DrYEHXwQ2<72N%k(+aQy+GiHlV;+{)-`FhFI<_|tBG)Sk8po<@N_ z?QzK!pZheJeG*?ybN0uk-#-O~)#rnjRv+5e+P4(wF_g@q4^Gbms@6aY8v$nWO*RwE zl+y~Z306^FlBtjbF&Vz1pUjK160@@Jig5i(z@Q0~?qt}kki4>mVudNwP{RL0B%Fan z6$u->PnxdPaJr_lZ(nkM^`+G{7ei22fRIv zGWaxh^K6>hLG8>=_O9rFDT2P4vmy))S3rZ@yj)#Ds;K*@<+P#$ZlkN5ep2$f_$5Pv zOu!(bU?BQB$=)Wpy+v*Z8G;wUV*BN!4oZ0ym`~vjDmR+c_h|xu;SWVe-y*md(QWf5 zMUZE!Iy%EtxF#vRtE*4v$iwW=qUI#>_w|K=hG2@(20(`4V@V-4hZgX+F&^&dq?X+( zYS?wECI?KHtqvW{Ump&&01An+wSVN2e{c1q&(Ld%F((;YlPyhA8 z{?XME(l3Cj0r0Wvg1~Jv#^#|}61uSe!j~kJZol~R3D6`|q4j(ZYJ_wrc^d72@(TP@ zbQ|><`9GpksMqlb)j(fgT3<7~H=C%82f#=yB-34eoi8js^8c0Ox*4 zt?B1=fsEaMgAn+BNUVb;--(d92_eg0)nqF`$li;Ps}vy*)cx%U<-p4Zr-Fid7NNWd zLgCX0MfV|;4`WOSAXMl-VMEV!+ zs5Nm#^dfmE2L-t}R|v>Ku5due2@Z1wgE3F=#IxLg1at}#;U)~kbApGtd@g5TdQchW z!h??NGFxpiN8{xsESDkQ0BJv@V~}{XjLU^~3G!PZ^+MVY=@_IFkOYJvr@b zky<*UWxcdCTFORhU7QPE(ghRW2stJ%ARETukMHBMQ4$j2gmjC-IR+!Kvc1PR9$}7f z7_CIX)Ch+MEcUWmBT11Dkpl(E-^dxYhnyLIwA#z|)?PvWfc8T=28knofa~|<_vlt~ zimo~2HIVi~ItJ-Dqz@qpgKXq&R0636(lSVUAsvJCAtaH!4Y@?#qNK!f z3fDj)>eCP?j& zHbN2rdIO+0P%orCkoG}JLINs-T!JK%mm$3Z=?zp0NrBV^Nl#7;z+;BV@qyUPV6BV% zg8US@VZ~o1FR}6!@**pLPJY75pFx>_3+2n?#ev))sx?7Bf_o$=B`8avUq^mC7;yws zwRUn0)-DKn38WfG^C2yRv>TE@j*+~9l|cs#aumHx`J4=(4_NsGdQ^{;bwMRI3kXoA zS!~*60714_-WwxI?EVL!O0(F#_W?w+*zLOjqFL-q+X13ktm}G!Xck+!4j`I;#g;Au zh-R_*ivfacm^^$ak{_&`e=U}4ZR7@6r5j+CZh%#~0rBJpdZCYbI=62P6c)mYJ*dPd z6b5_2R(uxsF2uc$;@(c&dkgN}j(e+d?=`qLj(Y>RHy8IRxc4ZY3QN(8m7zwoxHp1(Wn8I$43p5noN`vwvtqE8G98qc%>e0RBOzGP5YT)GWWq7X zk3&kangU32o{H?vrDfh=VU1d!IIV00u+Q^w?ML zS_WwZ(ua^zkOaWagNg5Exef9XNHvg_LAn*vhmZs|oev=qv>`pk{cK`?bkZg1iO+|` zljq^0(c};bDLGO=ic6Psy93yki|6O2a!Dm}xj>pb?0Wk!wjBJY5!Pf(K1%FmDtcR9oW5XDV zBQirh9GDt>=4FPu9XcKy2;M@AgTb2vvxCvF0>2?NpIDg^+vs3FX(wa(IdT+eszvhW56jen?T@c&NEmdG$*R{K(L;m zD^N0vYb1?}X5z-=$O_cBTuz=}6duM#aHMtNnHVe;)VO$Na%#MBSWGQUR>m8XV$;>l z{TScd0sNzN8e!z>+0`Lq56lHi( zgMs1knBw*KMC$AMBN2w2b@MI4?&5CmLlqu3q#q!+F`&OL3Aj7)l@jD7gWK zf_*5!Py*P;P!bnWO42BIjicPfp2XpcH~|&Ma!SLooC2KqfBNg38IR+^=`AZ-X;`p5 zT;B<)J$d(k^=mxT!;$+}w4~#OvG(OF*3c4c{FZQMU2;XZPVS%H`Z?XLw0nBEt{=75 zFK+H{RXXbirYqCy!yR=kgR`3|Dld7~UE|NHX!@MNn&@B^^jWhjKc~BrcF(5Is-(}V zq|chI%x2F*jMST&`}JsM%dA$l93&2M>GC8p#aoi* z@XVwI674FkEv}_qz*@A+N@Kt2F3&B~L;fT9$#j-3QLTfvHrQ|fN&19+{PK~II6QOY$ zZREIraYWiyP1_8HG~&PS|CV&gjso_Qqk~w<#hX!23zy7oTueYBEKUd6j(}lBbwy7L zykHNG;~s5{^t9CzA+(_HtfkFc(olLWHm6JVPPnB3n4%3>&sp)7;4j4M$bu^>k(g9d#QWzb}-3yMNrP#d)+j{XlMfhq@+8$cff zG%+wSlRiL6e@$Mk7ip|Sk{nm8TO2vML1{{8H@>ZBdO zPn_4U;yBrht zv(Q>*AGo=!ag)0zJD=e}NGY?oXd#aNB6nY>o>Tobe}o^Hz^^hFZ7VG}w0jxC>o9@L zQt`gCxIeDj9?Sj|pIZP~rggzbGP8vx3nbq@WMBs5rc8_h^9AP%V#92Z%RDg#p(~Xb18N*=9QhpB=RkSpIx*|(q_3H4 z;v@5sQasteB7ensMR~>kD*3ZdLq6(}^N*D0z8dOFvA;_Gtf@&;agP=CsF)RT#plF8 zmwCH2x>lP1eO~4oBaSLPk~AZl&gkL(j=~(MDt*7{Kd3^J4^M5?1kl}%ujJVuG zj3s``hi>DUDO|VQbBrm!xSKkL$;1PXw+AX*Syw%G1>>)?i++R$Seu zD_!ba-QZ}hjlRQCg|Ug2ZoNA2X;`e!Jh=j2^EZ?OnZHwjKUIJySd)xF?8hYTc#MPk zd$M2r?+Q3=b*>AnSnGw}VDL_+nmh=vL%9!Qa-A>m~eSR%6M zgFB2ZI>Wt+7V&c~h@&)-fPYm9B_qZMFiUp}5I%B5>^Y&7Pk321ERGz;J5(aa4q3j6 z8uIy`z*ZLzLD4{Bc+wAQxA0}FZ}8hTw7yi_0~(BXFP>>-+#+CzCynARX zXM8gt(ligbwqq9bWGsZMZo|JGE&S_)zrjsHeHhSM_2m$HH&)XrKPB_w4W+US2ws zlgLOP0x~$0=}0V-!bKaCFiA*jyA8rX5QO15-}!|NCt1kNfRT`{19E31#DvsC7mi#7 zEx3tee>wRytC40U1|v# q}aFTEhJrCqQMoOq!(Jaabiy5rZ=UQxBuAqDppS>R_&}bbn=|T5HGZA-i|&tlH!V zb#N-_7}PG;cDc6Il~aRWq$yk{p{(&_vhf_+*O@Iw(}e%fL3sW zdMUm@7ilOtinnT&t3~Qc{v^ntUXNA#gT8Ffpq5P-3jkp+$=LW<5_XNL8(TsjOyCl> zIQ#xZei~hUU>%pod`taYH*;S5-m{y{zLVX}CL72G0(lSuk(@xn!^j)f z1QSVs$U_hU_(ly?6yu9}TU%`_Sgmi%<{>PPUeao9YqikUdT;RoRcy5tp}iIrA^ZDg z&Ta_TdVlwi-(SBy`DVVE`OeIoneTr!-#GyS04C@L0m94Ib!>R6<_8A>Mjr>DOO{`^ zIsC$*WA_7;)&j`aT(x24x`{t>#{tTp2QVjBuD$W9?f1N8#U8Lcx^h)#$BMr-C0+-Z z(u#ExR$+y+!tgehzlG((RqHn2aOua&jaW`$`Lea^mv;cU@iai4h~;_fI&Od1ARCRl zvAhV&;SC!*H$2w&;a{=58NgBolucH`3umjq)B#FP$V!SntmS|to)EyKh$jg646<~B z3J2+UFp`JKSn$TxGqvYy=cu37&OToYb%?9yFd08C;)pnkFd-nqxv(&JPLtqE2#bUG z`0yx>wM5zvcE}@hlH20VnlpbKBGU}PynITiL(R8?!BelMhrj|BqCo;Y>3@J3%o+R) z)?10Dg%X}v*hoT})k+r|!>Wp@$!^Eg%WG2UPc@6hA}==jLwTyrY)%nvAfcM9Rvp1M zL^NAM4U;es;5|SpeP)1l!V%UFB4-CI7LI&2!1_bva}B#etSx_XD_ehtIRCZPp2xH{ zQ*1kl315{uz9`df)Fuc4#UL9bgJ=+CpV#lDve{%YSxthR>vp+w+=3hsJQ3owVd6Ce zBgAcTL?9j~@puXTwvx6$FQ_S@Vqh&8NFE}6YY7E!UA!(nZhT9HBU0{hd)&@k7q!u7 zQKWoA^@Iskm9gSjH1dBa`Qo`Hx3+BFH0P#ozP@d!m(+aoN8=l3e`oES7lvMw_UGnZ zwruF|%TEmrJ=0PC!i4dSA3gc!&r0%~(qiWyrL(RxesR2Wl5c-}u--Y_Umu+BZ1pV& zb~xAhJAyaJH{_n7XS^!7iQVe)%yYN9H@F3N(7r?6rBYQD13{Al`{}bl(t`tRvq&mE zsM%CiUaS&AzMT^k&5UtQe+}b&4pzoE{Rxj|O{L%FyNk#te7=bMmG7>Vb!sdwsZ3gl z)gQuAe^IQG<$Hhgqm|=AB;-DjKBsrJC*iJ84V;gVp@vz^z*$VoNvMU2R#;LQQtFhs zilA6Bl!`?sh$ob=*-RHJUdCTakWEOzUS!1CR1`Oxnc~Z@toFuH%;K3}TYNTSv=dm@ z6_20kVs*21ZaaCt4IAoCI%~?18@p*{^Y5 z;~xzD(Q?#t)c0P_$DWUU@8=y4r9-~3RAw)8jgx=s?3#3$eV%lcbTsdu;#t+A=GsJ= zLLewB#FQJfnZ3wo8Gb_E@}@r><~eVc=d^-^xA2IWsAkRFZtgaVx~4K)n0hgD9c5-p zhV4Bfrw7=^Bl0QgAC4U7{K#rFGh+nvX5ye3?d8z9ZcoBd0nQBHftckx5V^tu3*dPk$&J7h~Whdl|Rw13yy?xt>ZI&T&`TamO^D(^VPIA%%tHT4VmxjXjrvY=i~70dVAC`5Nf}LSLPj<;-+v?J z)|Rqq8Rz(B%)4M2af9P*hgHnav~^wJi8wczC-~0S*3=Nb^JppkqH43+tyI?Sr68-K zB>+}~BLINb5KSSn2i_SN022`$DPi26wSw6#n`FimS(d0mjTA!#RE4a8?7)BcVFJU2 zx-EaW^6|N~b z`A|YfbG_4UHcPHjbCK&ZbE8W(=K1nU%`sPLw8lKab*Xu}E1@)-SDDY6{+VkV8!auK z5}i_fS@Dk2U8Tx|$b`{#rPF`S(<6Qnkof@c2i?P&|-4uRuom3kl`*cnF;Z%J~Cw) zQ7cTCioD(<9-?|QPrIkvBbI7r+{aR`mpo3+evHu^Ohb8O&WLW_hQ@y}!+y>T`+dTd z6C&rh`SjGA(q~85-Lsi7EeX$NJ1K&KP?p_7Sq2Pc957EJRCvgK*nZ5Owu>Qqoqeud zuxC}4UDZ|A*o2*%O1qzNp1pw0${u7hvRl~rtR7QeymWJ<5*aT(=YqBD;?o0y5Z?&|NNrz6-%m<_mF?ucfL!=z2EIVx90Q1 zH#{el{C4orYcIX>60?y683n}sXd@NkVVv48)2z#pMPwzj4+JN)VOcAnI4ij1?5CQQQ3HP&8=?^tC z_q7cfNBbXH|N4KutjB#W>u3*g?gG}MVb8-OU2XMKg!3ob{;bxjxP!WnO)l&&Y6gQW zQ0^iNRNo?|6C9DMNN&VIbB6N7o}qwbec^?(|Hb6I0sV_&lyfWiNSdwQo?I^*JO?Mt zXJKbE?_`*dH#ilO&oV=vX-LQ|hL!SagP~HL0UR^q z;ws~h1xSB@(U_S7jJPc;!nUlK+H~pG>Jzp?u-MqPI{8*w_|68|RDgT7VB;HVVQK{2 ze3vyGIs|pN1(r;|knI;Nyx%R;XURir7PZcCf;_TGM;rMP9i^awL#ak z)@IGPP+DkQCM`3Hq^$)wfApFi+>C)U?~{n~GT{_9t{Ox})3HOizw zwsM)Iri=s%rV$c&ZiED$%Ss?MXFWGWhDpy4a|2{?Bo#AjCm=GSSL?8_X7IfUX#(30 ziJgCJswYrI55!Iwpy8F*z*>A!&ouEu|%q0GOyy#3Y*c z#BwdSqN;KykU=<&`w3w*SjRzxtP8;o)4E@oaZyd2GhCcA44fw}$b34T)dJ@<6UXL= z7daK&rDQGylYg$ZH^#s63-qIhz+FXtK(2pq+&&=fKRaF5mv!jl^`gv=6Z84rc(PW? zn?-zx)K~K*95q4?i$~zG5qQxEyl?~_9f22&z#}8@@UUyRB_S5L3MLsZH8vC`3OWn6 z81FaUQTSxebEQ8MtVWOD>lxQn`ld$;(8ZLh<;3J|HMAOAO|9luORIH_VU2N(X^nq* zjb)8>AU05JFOC%!7ml7#xWv?AUJ+X{YIAgRVRzxbnZ9p%aMX87zdh~=(=(RGi=P

    zpFX(YnB*_i!3J5ACBdU=COHx z=F$}SO4+`Le09FLzNNn1zQaD*?hAkU*87h6#E|a+ANBnN*&-L!GC%EWE=H~rjZl>w zAry#8C_DZ4yWEvL3ZU8?m4u9K&0CvC^MbjG$fm(=Lgdf9(lqoKso3W=a%4o%%M8f9957Dtl(;F>LO+nUjc5agEBKiK9Xo$Q^31VV-dK^l zb7RduzdtvRTY+5Nohz%Ti{nAG!ckLJ!3;vRTektlvEs4l&9S&zMY-GUQDV$0<3S9%w;E~t(M^Kwju74=(Mm+ZX!d9JUvp+vlb z`pQ8ReiE5nmP1sLM8!&Rnz&HBO57~UMu)*@Fj{jQMk@#gVrDT5JeV3s?Jy8SK{$ux z&;mzRy*aX`+>tf84qc(^$3PtNU+M77F)*XUWv;`S)0R=-pXz_-L6Eu9HgKk$Wegv!m^;dVNS6n$|>eR_sy7I-?V_h>RJykrTu6^VAH<+JyDf)Rq zT*FaNEfnxoEH!^xjU_&-zhtzvq@>0=A-6g(sbp43o3*WEjdgWN`?wzKoueOdf6xDn zHFp#fVP>w1nK$TT*pt3zNA2+)81=I6@TlMAzB9_u;3oO}9L1jB>13(IBhgi<^l@!2 z!$O{rH(pv&StHhz&Jt&qCJZg{s|>5-*IDke{L1o$^^1SFqq@>YM76B2(o-IBd6$k} zKbnpXmf7lT57>6v(l%+QZMW@|O|Tun!xq;*d(j_b!fj*9h3%A$O@hY@Y+TZ9GTRng zEbF~_`If(k-dj-cpkD6xmg?%mmhhIEOj8$ozwHVJ6&QXNXe>6B2L|?7H?RV&hr6W@UbB&0r1PRYPjn33o3) z#Ofh5&6w~Mc?-(2f>4$fgtCk-btK9P56OpR8j^qOWGcHdk|Vn^H^`ZO#wKJNTYi~G z%w!(Zl`ZVaWF9e-x#uf$Ga`?lIKqp`gugyLnF)}vnv=sim5WLIgAbTXdjj<;7MUh3 z8*y`&u359Hl}CEx==-7{+=ap;#N!r=ZFEW)vv)1-b+Jh(=eS_@dOSfFS9`$=YOfA; zUYviaK4%RISP@rfsPRzcv5TodCTYb}C|7{)++3I26O9S7Vng+(pLwf<+7^?YS z)6A-?kFF#YjoWX#F)!)8=E&XKpPi=~Jp~7Yo@FnuZ!KT9deskOdABc~{@k`XTj#iJ zR)1lU>6$T@v~+p9?rG9GE**Qr=`XikGLe70Gb*T#nq4-t{ffDlT+ejjJoMd8q8$5a z2b1E1;K@e*2NI@iP~MnD?89ODEW$#l`xwLaQaWu>vsP)l%}(r$omp^P0MQvVE8d`J zCbnF~z*tM+JFD8SV2?eL+O!F+vS?FocY4?A8 zkA6>h#QKE#1dGA>Ol# zij4y{DHa3T0lQEcp9Uk??Pj*k7A~HySGE4@A z=6Hw@w2efw#rYZ$EyLtQ%d8ripi6&67^`?3SmQz9nLPCC=b_(O!Q8Acg|IgwH1n#%#5z#8mQ=C_z|5->cK8fbUa%XwoQyCc8=DqJo8~WR-p9Pei7nW= z@l)ofY~=faLV~QUwxNwV!K4D6fv%QJhya}cv~5n5Sf}XCyx=f9xhR-3=RkjE`ZMM~ z`*MRvaV{8r#_U3EZ{DdNA07H^<41SD@OEgo@3tk|pMBzvHTRQkp1p@j9x**n=+@nj z1+HHE((m8=**CZy-wq&rj%Px%z~5x_3+$AU!*|3u;^c1_fs0vucy&VTylO);)8&*px+#SwvvAj60W$h3ie!DTi|+m4;OMbicE> z(#YZjm^&q25#bfu9atlaq9n@I#u=hiB#$vQo30nGH60b+mz5`F5|v|0k)cMOXsol& zwYG>YaF|4DT13c>tV4{)Qf)kUdQ{yNA8~wj^5d&>gtz0fSpO86an;B; zWLsD5Y?ZSwOXjFuXX1Ztvr)^Rgt}Vhzt-X9@YLKTjg5=9s4rvgjoT1WR70(yR^Vx` z%r%v@$w)%RI|ORuUAN%rmxVb@#?rhRqaiP^7I*vIzPuXD-slVStT$4_C(_ae zU2UWbePX<0AIRy!zDNynz+j)7W$*T>HL{-Zl7(lzX8qv2amUhiN|JbyiZAUnG~3CCtAs`NsJ)-v)o*_blJHK4Ufbt)r|--=I(QF$Xl{ z4^`$Ftb)ZJG?82ycjbrz9?5pPh%23=uk_wTjwTL=pFG(O@np1-8J$!S1o|M+!)@a; z;kI}%REavur}5B*W@QS>#ZPIYcyPUdtE|#YSRI*yt1Ug=rXLeH@@F0qX3@F5T#G&K z^&NjC`ym2nhzU@Oof)}D>=TzyQDbG4*~vB*eXnKTxtzoU96#B+REKO-WCQxks?iw$ zhinfJ_TFymRuac8+!%NfOzs>Oo*y%?R*+5hlu+Kc7ELm@ycOm8(Joq5QB_%e;dqyu zTag=e^zGc4oMX z6t%Q)AU&Arp(G*PNSZ4f@Hj7WS)9iR7_gx4#*wd+Fa8DgiY7@0 zjT;#M>pWnPQ&o{Gpd#2lFfbtg?eKr$FLTA%mq$^q??RvK&v>42lRtC0&XEK;hd!;Q z)c1wIel<#q-og~)EJ$!fFME>iBc5l)n^ZYz6(8)vU@jaHM}L}Woi*M3~zS}FUk zb~tpDIm0@lj!NCBcii>EYu{;qY@TWwD7kv(rl-W%cXl^!m|cF$`AziBYu432_}ck{ zpj!fgJrnMyNatXl4=UE!;5JB;g`|VrKyD=u(pTu);aGTFcvATJNI`!(&Az{cU1R}i z$M#z??K#+9Gu;05KZ0YtO&%fNCy(N_D|5Yq*DuL0v0eTj@BZKa$p58X`Pvo>u7DNn zsC`xTIVt*OfGc9e)CmSofo?md;{T(W{(t#Ho8?3BOHYB1eSd_y{Vxa~vV3TD`a{;v za{5;!PGtb#X?TIGh8KU}5d4gs#=CaIJ{W*sf(IJl`>+MRg&IzVC0KJeEWk^``fm|m zdH~AcG2FMu;B}81#EPXAs!ZGo7sD{hn z8rVR()6MDo(+{SffFHp=;g@K}%;1ORc)gzfMEcM4+b{<2_%?q$49CcW#uq`uQM!@x z2e1(y5!ytOUYS0NGl;GTun)8Kri@XkMz&*-gq-6p&uPESuo zzTO7kWUCE7hd&WNDI;@9f{v!^>7&9%z7p2KeefK7 zMx10KnNO}DtH>5|7x^Z6n7mGokPm4+T|}>@r-W5Pm+%vDDqai4P2%m+ozgw>heORn zFAx28=(BWr`c9aS{IC^g|7~~_pKKo-hCkwU4BjIWL6;h@Fo}@Gi}DQv7+yQ~`1z9a?+(Gx_MwM{ z`i2J5e}Y`xLqD!U2x@Wm9eAz5{eB2JZa4g%Sa5&s{G^0TA(!FGEG2757wXq+MKB9?Ay+67W(aLU zr?6SLQFus53a<(82=57JgmZYMMUxm33&fZh7iWk|#cRb!#lMJuky@o+OCQK4d7XTx zoRWY4u1rv-DD#y0N}KY4vPXHt(2m^s61)g|N6I`oE^HMVg%{y|S|R%AZ|HB3pO?Z4 zVKzlhrB9RX^cFHe3#A+6$#gQA1E<9puJtQ)Cp|+a3$sZRSqN+Bc)d5-B|eK;t@sk0 z6c6IF{RVr!LAH=v=_%O)eFSI?j`?$8oEU!>eho*3W9aNX25*Tb;vpyLQ^Gvtf}e;} zq-KZ+--jOyUE~&ckv0ODzBJs6d_0Fdi+W)ZDJP!`X*`z9K`yEm-iO=aYWkmW66JV1 ze21(MSHk^JLAJnO;7OE<(b6??iJVJ*MOTYGG=~fT6`#SUt09F%kX&#FX%iliPtkur z!nJT%G{L*V^Ems%^vA+%@wBvntU?L61@45d^j5f0Y8HP-R)RqAI4vGW?Y2cI7bBS8 zhFYZ+b=n@3?)|6->V?@@<3-N74EbU)YKTYh`Y!4T5jkiz%J}7|#eM?=@*!Ag(B>f~joL&jnq#uMas1JYcN^ij)pN0?M0eG5h8@d@bpiTZG%JyZ_bb45t zo*qMc=pX4q`q0Jui>qBkyzp1NevE}F(gElZ{{t36UHabiACS98p@w}JmcgZP0-y2| z9ATy~2o*zfXm5JDumPX<7|c&Ul@8&7Y*l(K%!PySBSnG^C60TXB)`Mwy%~Qx>4NlT zp>t?8uEPVk3L37~wWxpY7Q4jT#V_Dql=+8H-|RxUc@`yy$v$XTY}>qPW7mfD*Q{H6 z^_tbIR$kS)tgZR-#NtJB=hSO;Q!c5UJgH`4bya0W`S@{VW5<-nOGb|>jujO~3nJlA zeqJ!(_j%EWa^*N3s@-O_m`#61{vnt^36wTQr?-cbvG$}Gi_V-mhLxioSkW<}qCFYL zs_7TgB*X2TEPOGghLl(RH%d*X)P^aE8m@)fF{RY@m?G4ynuh}#$I<3<*rWAjAO=d*Rh$TJI z4ZXxOg>Zy=8YlHqFj#R?Nq@AVG3kpouo)zUqQ;ID$$9ge8yf86x-1FN zsY!dBlfX1SOj4efRQNFA)$D2Do^WsJV9&iN6_&NfEi0lcI$E2PLPrZ5!x6`E8;vzmMbq1RrsL4};vzOJ z4C82YTT642Y{MbL>`B;D>Ce|0ZDcj=Yr;umbZT@}&zg4J8h=j`7Tg%=^ZT`Z>EqyU z4EHQ*jz*GofoMxdL$KEcJqvE^_i16@#Vun>dsTQ=iPf|FlTwiy z4fp&LkOQJ8Kfbu8BU2+6ss99qGCmn*HEhq~$#^_jQo>k7nTC6cbDYAf{85WY=^PBZ@7?uV4Kr4&4BxyTq8O*liE@my= z*_Pqk+oQ@J>NxGgiyq^HMpQ5&+FKH#iOh8z!znj_(9Nmz`M zS%iOh;+@E#C6Lr`$)+&^2y?dJw4N-;psi?JsqiZ_p)eM zjrQ!LKcjy?>)FuQo@Ja=djCCv7xctAK0e>bn|~!kyr5Y@)QAHXUNtOSe~MKovIHM z;{$2vST0YAdW)8&7O~Et*LCaEqcYS6Y*AUue*UkFyix!40)Js*s@5iHleHB#L*bilN~O({9lfSvrm7LD_F|^`1E@xKvW+et+YO9PixN-8w_y7=}aS6*CPHC&v|0DY9AvAUYTXW@S$ z8%eGSB-ggYheQOWu;uAQ!3#StVF#l2qE8b>r1yDanSLA5`_s0PK0f4*>Xn;}x(NceW$~ORtMfQL2 ze6~6CMW}^W@%dSdk)3Zq@<<akq@{#tzcaVoUOz@)|E5yL(=ev%5q2XSLJ(o8kdO5$ zrnezvgm45w2Ec!mwT2PaBkV*t&RT>#A=noVsrAKz5AXHi1K0%*oI*$=2slp< zj_QHA2ul$jK-h^Ob2?VD9^p2GLkOpNizayb9<0E*d;0F-S^t`~<-FLT7hBtSvH$WG zJ)b>a&l_gxWRrBV@s)b@*r|G6T&m~JqVjH*o2=!7^=`q959xo#iEqG^(3inZ2%f8V z3AvC&pn{yK(FA9IVXS=TAwdKpP=UY-2&D%F(r0y)*PCdXo&qO?=qL1~-a=3I+Z^RP z>o2A6!ES^@2m*Z%uRqa0!EN+7TXRh75OyLQLO6_Y3PGmF@j8aryYyYK(|4c@p$=gw z!cK%k2&WJf`VN1lDt()=5>FXkhd}Aun5y(Ge5|)HwbP@B9i>NcYQOKRt|{Ngk$71K z2^D1!PauOh-Q_9zyS^_*BS*z>r;(!$2n8?&DujZ*qVdRn-oDz^p%i_;KO7J3svk$+ zfFuINnY@7`zX4%{c?j(Y8xUl~-bCz8=tkIqunQrHfLwousfrM$uOhsL@Ft8y&=BS! z80e8c9418%_r<1$>fQ7=^cUd46@Q)nlIO3{S9tzw`g5ND3iEu-U!||~<%gi&jO~E; zsF(6=Jw#7+*ttEikpv=2Vw z`IGQN189G1LRxGZGGLe`u}PO8hRM$G&KT8V4?T=Umc;IV5HXg-?zk5*mc(w_iWo~` zYp+9$C9xH25MxPf$x_5v5}UgSF-%hQ(Y=Mmq3XF;lW@JAUXQDEJ+9LAxJuW9NUvuX zd?B*AeXp;i1Xt`4Ek3#=)QvvhLDIc|bpMcacaneZTS@m;(p^isuO!`Z(j6q-`J`JT z-3Q1-T#9a@4O~>L(Y&PlRnq+e>E1-TW2C!?bQhBDFsas3G}1S#f@h69>#t`*hxsK_ zQ2W?v1XnbIJRd=wa0t`G2x(r@kSJWB6Z`U6UeI4sr`-zR+wI}pN@I>gNV2UF8VemlcKf)=I^o9O_HP7t{y%D@S z^sBOz0c#G%QUtU8VNSX)I5G6XtDJNzHayZ7x|L;nLbn8Ggsu+qhEBcV%1v0(?4f@J zu_d9I*k40%SxDQ2eeMa>1+NU%>Qq(io;{&)IEA>5mf&PZ2l=4Ue5@G=RV`jzog%BW zQsp6~S(&R$P|B53C8C6sJSCvG3{Hb;uo)}{lfht+4WfY>z~EwEm&ch=cgftg%OXof zj;oZVRQCcXF;KV^k~u;XZCW^$G$nrrmqXLCaPrK;Xo{HdKrBV467)ErY0=c=#CTIm zNiRrN$D5MMyepb}3Aw)oYm;<49_bb}r%0MrZ40o_(>@@?vF*M9%SUayucZaN?(6Ej zbFT(StCLd~A*xXn3?6Y}OTax7*Pp1)YO8y%QQSE;t{~)Iu z8}^aEv#h0gpD=~|qj3SN7p63{v^1qig402m{2l3#b^gxj3}~ep9fS?}I^82WT@l`o zbcHNKI-?PaI9-v^$mvAF=z2F5Ha7GY7IGR-7&dX5O`h;bnpcaErl^S1xVzz1PV=g} zo6#hvaFSpUN%Di7g!m!INrHdG&q)#&NXjxKcMp@?%|{Z*1)88vV?Cawu^va7ul+#c zzyCU?#^a=aa?A2o7T#-*Hg+PkC-1p#m6x4V!oAB|GI76H`?BS$SdPAWOSH2gxjfns z?w#EFFPd9f^WRnbxZ3{nTtiwr$7r%~ZF#VG8Hr z$r10Zf&J*ZJPqb}OVSdZnzSOYrZM$n>RA(t7HhJx7;dJ?d+X##U_W^})1+dxBRUo0 zo3Gt;EqEJOH|T$x@P~g@o3CXHuBY)$U-!ed#-!HKuxT?uQ?g`XQ?hRUlIC7T!P<8A zNXbdrIgsiTX)ftT$!msZCwV9lM8QM(`^b;+gY=%uOLNdQ; z5k-x#C=)E(kB$|y6`NY{0XLC2*_7=gGj0B*C(qb3XJPZT87xh+7MnAZBbKKiIEdfn8j>=gyh{#k*f*j{&r?%Hz6Ry+jysGL}^}C?mt| zl>c%b94lgTzpVl1&gz8;0mVlwuEB4xds54Y4-5c`H?PneJHhVj(o?FxI`@M!+J68g zYg$j$ps#kvXGKDPZSJ~xL@=W|6@l8eIC4HEreCuE{5TM$~e46XWC zs~)Lk)be}qOdO9|!B3fEh+GrbksHc4Ip0veiCmYNV_@P$KBw%XNuv`>Vwrpn z|G=cCg_5uRyIPe09 z;?N5yBDAd>>ZJ|GTI~tD zBiNFEARCA{0={+^titXSe@HA()}#R z8Y65g#FPJ%73m*wdvvDlN%2Ov_OARo!q0$wiE*_@uY>qq^RA;g;6N%u+_KHLus4tBi&eg*x#S* z(yuWX3`at5B>R0NU_F&+5@xJ+^httz_FIgWjO~Hg)i}k|L|b3Pm}0E~xTtwQ@sIRzEd!(M`W`AORXErv7dC#d-dmDmT z=4ybAY?AF7^O3bCZw6ZhbFhmvrTe6`4Njr9KjEWfI>qcd*Zzqq@h*@5j+(4ov#o69 zqj@X&f_*3&n!Q<{H|mRiQE)o%>92Mu02$Y}j++LNv4e!@*tc0o9h?tcDRm=m>s+od zyDXBgN^?ZlyBl&;jN#O&8|@5urrXK>*8M+E%;=H60i^zVXp?CH9|1M9i2+Xme>XNV zGzvaG3UhRFWnpa!c%0pPd3;pW+3<7Dy>svEb7wM{B{Rv)WR^fCkdTECh~x$m79%^1 z8B8PrB8wn|#ieecieR)#ZELHx1(&*8CW|nD{YcgNwl0OYwZ7G=pkmcl3hirgCG$P! z+?fzseShEg`+a|XbLTndIp;iQf4R?jwsR%{0suzn0Re(5)^~3FQ^8Lj1qhb`(4{M` z+!B21@Uc4pqB{YkD=yo(YW<|2x#9rv&j3uRRqL*~%pUyyOE|)l0L4A4yE<3?wI%Ti zKrM~|6IWw}qe}lemXBjOvU>fNtEcL8X8|UOSXS3U$BhhnahE)#p>|E)ygn!kdhOUoTm4vd7u+d2w;@O69l|^Nq2$@ z&(H~AAoq~*;E5||>d)5CRX(YobG9BD5Ldp!WI{#A9=}P#gjv zus-vF?tt$15G9YKw#Qr5e*&M=mrpxN$ff!`;t(Pc2szv|3PqHpGec^=*(@y~L~<8d zg;0@XAS6~2jWjBmVK9T4sE~k2<{w}JQx-pi^%kP4mP8~d2tgVw>7W8lXHE>-Y;*}C z{}{AbIP%7z+02noR4bc>Zt5u^C56;%P7`%7QD`-pG{k7OAfg%*e}%E2kr>Td(ULGK zteeprTXBgej(mv6+vl8&$K!L9_A{8p+w12jXECq0JL<}z;bg-}%;U%+EaR6TIO--; zOut5L62m@!f#2&FBy&uO=EnjteN>EvqaI6P2wb+j5E47{f-;thbBX}DODWGUb25UVOD z*4l-O==wW{kM8;7@b19@GXGDz3Arn_H?(};hV9Q@6`Hhzf6(vVaC$0jc#@nwzG?FT za_JvmBbx_TrN3XXv1iVLo9FG^{rvD}J)O104is84ABsidRLF-y>f%!34uC(OE)m*w z?S>_$F5z8Sqf2o4ZM&2`3RM)*=Qql5kUkD1Gc>3u zbP1P7tD;Ct6hg=k^8BL7je>Z3L=fGh1ks)O3@l6#2NG`8lFq!zr4Et5@%19|mq8{y z7B;A%q_jF^A(nywmIk7+YL@RW3RhPINWgU{^OZK#f4+pPO3`P^qPK8)%u6T{ zS&fud2jm8Mo-D}bETwGL2;vDjXfn|yvWLmN>}Ly-aTE!0wiMaLRwjFks%x|2tbN+! zbC?vLz`E{u{7g5i<8qE7eYPDNxLmi_pY5(^BF$x*2_2Kh?oB?m5MVxRL}R!MbQM`- z2#$gTe;_KZv{0^E)+wM=C^Sz{jA9u?iLDjVXCx@DKPqf}Ovw|6t4 zbW2jW80-pERf63qhg>d{LlTOW#85JYOAnU)?Z8LFr-<{-KM*VV>O*7y_7%6EeSkty()iVRi(@2cIDf{_UafDqJjyc7p{3 zJu&$u6cR8R#_ZA)eQ_|4Z)z;x!b+=hIn+DC1O#5W|J z`D&1f2r!Xx@ja3Fp6L0W%yrCsf1Ww>5qi2j(7+j8hhMJUp!{Zs_4?;0 zR6zSCf{q1{p9VoPrG<(8>m-e#mFF0W9Cgc#ljtk#+aH*^rs0xHr%szTCA_NO!i6;QN0X%*!%dHecnT3p7$OZ^Sk`F#^{?| zq=<3B&fed_)k9}yX-ztFT%E_TfIHxcmz7r6iFIYO#aU$ueKLNTeog#J^A7WG%%596 zkK1djtwdDHBh~K8kkhklf9!^_bgaMJ+F-rYy4#wu>ULZAT2EO8>!HjSny&9pSj{Z_ zurjmHcFM{Y!S&W^W}9G@*tS?>*)6wv_?ADNuv-0sJ53)S@RV_}P^}41nbA0HiRTAS zzh8!tcY)>-W2Ij(jqOxA0S(TX5hDX=d~zNNa;`)*B|u^(1)`w{f7%zmD26Z-f*2Q{ z2=lH?f)M$Ha~6>|RTEowgfBS4M2k%yNz+SIYl#XmB^HcT#P-H?bttNXOcrD5%xfBQ z2<=_gDaIzScGbe1T-{I|-BU;E+&ImCHn>}Ja;hQWj(UpAbBa)&Q-pF&M^t;FJaSk% zBGG`#>#Dh&&pMs@DiVm+oi?mDJ4JV@)t47yQygm~O+ zwvJ5;2@a zKe=Qo&Dybir^_9V36gB3h_XO!VvSJ0^1#}?&&=FBtLE}IR*|aaoi|=nnDSh4^wyn^ z&sPlY;%EHs<Uwk;orpHqNCnLdf3uOeInJ-Dsoo7_2u`C3`#PKa zgR`J;_9%G4$%c<2EeSeV61|N8L_piu@C znyeMJ-!!N@_{9t@uBpJN>mcrpOx%2Lq}+K&&LNVV-7Q%jwOgN$+O5xXyCvz&+7`%& zjF5h*e;vU%X%(fhENj2!`Z@ULWRPjlnW5q<<<2s7^-;YS00^oc~PD`Wz) zA_wt!F=EX3CFBXme8k6SOw67mZq3#zPqT-W~fwqwI55A^T2rGH@ij((a)O76IF_?@$_{Po+Uh*(~Jf9d7_ z{MAb@a-D3*d?@sxTvdogTqoVR7|@eLyofZ`^8Fn%YOhO1;jvM8bQB&Lg@;Gs#iQ`h zC_FfFD7h{n7CVb48!j|7MH0nb#n&0`Fx(t@IPZzFX9bJFUEpz7w3NN(*7@iXN|j1t z^t9>Q3~k0XQ=7TXvR1#=u-3TNf3()T)-o6yEU}fuA|;Wr6C+EFNz=;M$}wBQTOvJ? z?-_q=zH7`6%YIPtknu6|gC!4*8HoKV<{HC74kic1IV7AzA~}T9F!?CXA>kYn$svX5 z%-gD?sBWpgBx*K_1;JRpXc}KwfH9R?>@8zb7w|TC=XsZT_j-?bC7Utf2`4YHozAnWDjL5i0j z)mdw!fp40ZUIKE?APgkre@H2g_q4z6XelXWQ?p@8nU!K=bA%03%ED1LQt6@GrVk`a z3;0?>C8gCJl|z-Zp|YovR}QJ%W_8__2u5t&$k_Oc z*n*7S#yp~vEyTv}-E2Gpwn46Pj{#|bd8qB)3E8`d_U<{Ke~i-IxPtknxw()m z9`9y15}%Ax@J*=Rm^Ym4=J6QwlP8q3JR7-vb8BZuwPajTSm!K@*%gP9rwCH9CFldg z7}-a3<1i_5VliY5`=B^%G3&<~ePm3D!6?N=9|V*_cFNT5+<3zMOKE)Dwrw!VXOs3# zXlF($7?Dpk0wIN_e^{(=yolCi|GM!eZ$UwRA-6R7@~F!=bm4X7Rm|wrx->ge5-S-` zG4iXOs2y2l?X>E2W7Ov^qMB8THT2tVz4p4RYogzK;huSolS;q4==xtQwWrLR*Ic*O z;O&5ec(aPD|=FYrkOdvk%f7(@^g>4IK!~ViNW2CC_ zy0)deFMg8StNCcJPNKakpqEe%zZ`HZSg4kl~-Tjc3gSBy^_I%3ZFXD zU?u_o^t|cre?@tV+#Pux?)&I{!o8Mb9CUT6!!Go1Zr9Gd^uL zyUe$k-=l)Hc$sa3?M9nmBg{m^Du6Aj1DCZ6_F!Ol8Vq2wnc&?rR0+S@Zag7)C`@ z`cb%;!$-J-k#7#sX^84iNZgLeQbJm45NwwJf7YFm1cRA{v6AME=n`WNG2{?|MU32_ zE)lLWQil}G3svhe?iz5ER2x|Qg}Fn=D?+?Ny%}pHQPhc2tzo99i%R2+t;VZ_t;RQm z_aymYiG-z?9M#uJlMD@(d6uM@lv?Ga;d=2J-93gEq~D3JNhhR_scv3 z$R&&WC%Iskg;-3v=*5&1N|VN{{RvYPXs(s!T4|P*)&z|bvMc8VFvM3U@B@^hxt~$T zCn;lUzW^Oy3ep5YEW9Cp`O|727K)9x*fXl zaq)WPdCWa=DI6)G^@vl#`0B!Z|n;x0kyH^9CbE6!AbI?w;kD%O+r#(Ys5|)8GbA;9<=K@q@U7uXa93ua4>*Q; zWQRhU$M5Q{GvbLnYN@s~S#&kde;WVAbg^-vbCG`)U8(CbtZ;VthXSwa{*d>U_x-&0 zou}M?^}b(tJdg>v0)cozy{o>UrC?)VS3n+5BbM>5$+X7OLYpl!oU{EG8xxjQmiMI( zTwjn+tP06TrB!U;LknyNW4>Q7dC;_;yJPp{uDmdUt|D;goc==8ZaeQff8O@BhC7n5 zMHS_!ohWwI-eK>tivfOu3h>jE-NBUF&hOq>7-N^1blQ1vgthl|3fBH#>$pilZ=j^CU15^@CN6yCUPiUv3dIokDEHM+#4@$m1 zA)ozXV_YYobGD)u`m__0Y~zv?Z>VzA@$*rrhD9K;nylSsf;H-lBuwgh{>DFSUHj@y z9e0-xoDDv?^~#?;dhONs-}2MjzkF~v5qcLiQtKBpsN>}qfBC{2e=k3;-Cg8iB;KR@ zJ-ErGT;htH24eG;dn>%Eccb?{^N%f$S@Z>#F_x5f$SZnT7#k=ER2S+kg4yObl6)F> z=81v?#@$Zh%;agD-k-=*#gQYIJGUY3tTi$v+))t(dKb~IeI{hDed7K=HQFez%ENWl z!VHv?Us{aemlnm`e`J+quPaa}xY=@Me;oNs?neI4{G`opiS~0V_Mpf63^@oPI75tp zR_x5^Jz~Foe1aA$Ys^lzvs;b&`m?xGb#^V9bt-nrAWM3QN{YeZ1G{AN5ezs>w{0VF z+`>)1r@`pTW7i(z2GbFv->}gsqx=$05u1iLu7U* z=>6t9LBw^VaPb@N3bjFVh|F#ebAx`(?I9oZ94>ytt)ez)4w2bC}r3!yZG*Fl0DpIBk%@5HM^s^cZ$$tBxBo24ld0VW2Ehw9>+%%usfO z(u8mW0ZAu`MoEt9K-?|v5mVxjcwCf*#M2`B=Ad{KOQM*&coau|ofG-RqsTp`$OTZ$ z380v}KNCl;9L2f%^RFE7(4^frqLjt?Z$J##<>RLFe}9`B{qgM=jXDWb?qCXD;a8D) zHC6cn8iJjJgM;EhVEgsi_B?E_8)^UM55YO!B=?dZlb_T5wk;)J4uo~`#gQSMcq#<2fW=`f6aN!(R=RV2Ax?~sZ({|%Df6rm;g&~ zwU1!WKa)@C4fxzBydciVOhXCZ4&P;N2r*YP<9?-Cus z5DA|k36Uk_T6}IG-ysi>N6BMk5NA0`-X$NAe~^EYFDa@ym8g$~XfZxvx`|#zzfXTm zkKl8ZeoQ|X+(NMs7ixrhAt`LYe^u=ecH#51@Qzp@9uYIh=Stn(y4|`*bx-J?)t#2i z^0)P%fBCBi&z7Ejdl-gy4&Oc8KRlRu2l8W zQZkiXgq&GM){<_tuiqv&qqY1QU;EF=Gsva?BByZ87V76~9#3oNG&&ETe@kf>?WViv zU38GXM!yhb!6ev(e4$jBDYOe+!WQ8g;cg)%yezyWyepg$zQQLX8pVKEEXKsRI8$6E zZWVtjejt9JYty}?dtWk2>!n+ywDfm*qC8ceFE5bWa|El9}8A{9NcJ*Td7a8Nm3Z{&tk(f4SswvhVtaAz3M|f;*s!Tn8V(!>AQwbyrBGQaR^vcpRKl6LfnhbkI+tt zC_!sb$1g@J_FEW~7SlAW(pd>w9duML4KIYHnTO$?%qqAda~F(5d$1#O9gg@YybpK6 zqh$N=wXhL=^6RME7wKluBf1%xakQ7dP8ZR;&);9;da#dyV2h4LA`k# zHHYawsF!Ttf3kT~_r?uZtY3He+BK_JUDma{z4hY6lEw4pHmVI%FQ}g~xo%QzO?6e} zgo^U<SUz^!p0D9=9vsndh)8Hmk*KG8*^~rUE5U)*PPE5lqE8 zQerGTYt}ec4tHWj=ctN~R1m9XoKKSqc5t%b`IIVBe_r-4l&VIlj!+UMSP%8%%7V?| zVCt2oa4=1lE@(ykJ5AwaFm;mSb2z?>;}*n2A?y%r_N;CSrbtJyIW^W_x7{`%RA!c zmEo10ZLKMxGs)(#$8p}Kl>1vJJm-oyxMOk2osnvS)>lp#DVyt;R7 z2X0M4ZweM(6Y4K0P!D8|LqT(}cX4YtlxpyWlbuceJ}2}pyk@|w2EFIEj4SI?>>6YH zthOv-wv0x)M%p;W$r;wNaD=mjttdPj1tJw(5yX|WhVh*yv7~Df^sbnMWcW!E?3G%H ze><`!WtiU4t4wC~tba-uRl>pEe*#KC_~ggu*K}rUq^R;wU?`K55mCeT9G;5DQ>CR$ zMC9qXr?|$cyj(M`?8-C^hc_xg%#eLBA9>rEoLr9V4~5tU-JxY?3T4{}F)Os1Q(_dq5*O-~X<3g_$!kb( zMoQ_JrKL$@DD;2WDV;gZdhzUBx9l=gljG-?r<_+lZ+Yfk0T+z!wPo?r-d^K*e{Cpg z+Jv*S8A?1XZVd&er(g+cW)#2a%+MqTNnc7umQ7~_D1Ta2ws;<)FN-Jf!=!Uu*$gyv zy}dKS!5O_By`AYy&+>3k3HKhL&(ddmH#T?V1Sg$2c$+UZ=>LXZ`pg&=GCsh-pO4yXVle_IG|)INQ{ zFTjnp>ST3_I+Zq1%gMbpX4LpN`AywLb!8Ufib~lOqYVpf5@Sk3}4ts=f-(X zc;0(qxOpW~FhHkUgPRo!u1qqjFjE>P_}@rGMiDVb!UykFrsPT_Thi3GH?`{g;_8v& z3nW>%?ow!8wH?voS zvEo9k2(~WQILI7ze=m!iR&-)F#^vlxsVm~=4T&~^pozkP*z2Tv<_9~H!49+`WC1eU z7fk6e4_=1hQ@E4ajrrR9%tzyoS!eGe>J>&Mp?&UB&{tE-mE1f8}!Su+e_%7cj1{2YnQzle0lQ`9{P8`;Z~g-f|#z>Q+e z(?w?^dsUPwe;@0OTC_OpHnje;Syx|f!?bQ#lgv2)l=r?U**Sl-C2UJMS{7d7L&lEd zo?8YO_i#d7W~=|F-ltv2J@8&hDa&8G`NYRx>^-|m0sR6j8jxPQ%fnQjIy@JqEAYkM zFTSPx`yHPmVU<(|>&4B`g0O==4%;!mko*VS#LkT3e|u1Yo&xKN730im>CDh#BBF#|DA;OH~LSU8SA zg|Yqdf5N~4p+qR`pAt~hLU_QDUukO`C$K-;Eazzu(+voF5e_4WuuLezdIi%P5qc2z zA{<6IiXZ`C%36a68xVFQ9A_;;q2TWi29(AU!Ha#p_yRV;4W|$?2m-FtjkCI89>Ow& zI}vsxNSuzqc3mYec5218c3vE~IH~1x7HE0X zY>jNPMmC{Zs~$g1%S+0%+!3wpVY$&#In?M9T=31S&|` z8dY!%L}Hb@4+|m?feHjxLLf6FkbaB3ve8I0^b|NCK>tQhYAy8SfYn~PyYWK$F6>1( ze~ci|cky|Lz5_SXIkK=O;pSS7TV54tAIYI-%GKAd-hY?O8 z$n-5t75XLT-xvZYwIcxa3o%yMFP<*;`U_` zhpRG8f7k!{Sd^$3?lel&A)y$iLX}Y5e;=KI;^*nFUlT~v_XdLTz@Ekm`YNOlD6ZsH zocUDNA@&+#uR#yOE`&V@DFl=e?aZL%So`&Mz2CHU4>k_3b}L@i1aG@c+kO3| zrO2^+)%e)bKo7=t&yb#lq~`(B(?xo2AU)eiPd(|ml=Q?&kDv4uksg)w93qpD6+J{9 zJg-=%dPvWUq~|Hpvzhe7NKcgXL`YAN)T(J3>YrW3vu2(RG%}^b{DP@ye|>B;gd7c_ z%!kk>9LDqrLWY-ABnlR5#NHy77Y~#+Xyx&fD>tC}Jck{h!)KWJ%@ul zhXdF!Z9rItFobXlA%h?xbuljdPM+E@Ek|fTScY&T!YKraFXt2jg$>yy?&S+(i!RSD zd>(>GpTmdU{)T8sEmZtUe_WX*-03H_A~LTiQ$%aQ0tiyiCdlZK11W-w5*WJztBtX9k9yX97So;*>m zl*{Ch9FPlTpX}5-fAospsyFM6dc9uKi+ZXDy_5adSDZO-r^J1@B(hZGxI$S%c5zdB{j4HT9yY>XBLIi#E1u9U3eP7$O2jxPfJaTx1{CF!c=X%B_+?l zq_vNbJCazNqC4^EwzxG-GOTL5k6kex07C5BzvE;1nC;(5ey0XF3;FxN!o6+<& zNk=vv^>eG|JiKsP>h6|Bt^GBRKVCR3nX2S?CWClO>U-=e>Hzr%Io;fJfc%|h$<_nH zRPvAJg{)qf+LTPTq)CF)L6H0%=}>h3>~%r5POr^+g)py&7E<`y*Y1Wk_c*K$O!( z4F*mp5=Pgze>u|J)E9|x8g~#jbDGWW;Aol`qev5tavE0;yvS)@boDTr)KpI5_ajM> zpOcUR@N*JBDc~fDb0p9jV){TaVnSLDIw1dzJnOLJPM|G zGGz`=e@j^qSkt)1agD4ARf{!Q*f-pkJ>grjY!H^~V_x<0R&G}#S_0U5De?%=JTVQiiNENj#rf3lsXD`JLVqnF5 z#pWcw;ARphn{#7im(Bk|k7w+ibFgJ=7R&NtOE%YfVwcT1mW+HDv*IHh+ro$C?2Nay zHd=*=LOC>I>|BBQILyakUWs|7P_8;+0fE*A4EoxD$=DQ-rKUh`)MOm~H(}i;mkMQW zAY^lNa%Ev{3T19&Z(?c+F*G1BAa7!73LqdLF)=bYHIrvEN`Gs^Fbsz8{uMfQhmw!B zDFqW4-6e;8uxvjdvE|mVIL2`g`S+9M(!mbN`&iN|Y^gYRFP*ayijOd>9wQj*biif4 z1%)u;#X3>dpskAc6aUpTcu|nKUzdne=gcgmgyNHuOAIS)p7lK9lK_C?J!lNpU10Nl z?sKTWdH;hGx_=0zXj{-|sNL(}--ZdHVDq-ql(%u+lI^eJYxM{2u-SlrytV@Tj8{T?0N_8@rG_660D&A{dT1xR#sKy1 z?`IJYO(RWzzkTRlO%Hvln_mNBR9BdcE78Xx^tIz>=UF`KtiT*YK*`^NGAVB6z3mNdvvDhQSnB%n5(#s@Do_R#JJj7uf6zP z7b1V$&V$ штук. -Definition at line \mbox{\hyperlink{trackers_8h_source_l00070}{70}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00069}{69}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_ga72be24629fedb8bf70e830373d151fbc}\index{Trackers defines@{Trackers defines}!num\_of\_usercnts@{num\_of\_usercnts}} \index{num\_of\_usercnts@{num\_of\_usercnts}!Trackers defines@{Trackers defines}} @@ -168,7 +167,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00070}{70}} of file \mbo -Definition at line \mbox{\hyperlink{trackers_8h_source_l00080}{80}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00079}{79}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_gadd7fd2c6e3a4800f1d5ddab35fd4b43e}\index{Trackers defines@{Trackers defines}!assert\_usertracker@{assert\_usertracker}} \index{assert\_usertracker@{assert\_usertracker}!Trackers defines@{Trackers defines}} @@ -187,7 +186,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00080}{80}} of file \mbo -Definition at line \mbox{\hyperlink{trackers_8h_source_l00082}{82}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00081}{81}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_gad91d8ca89074270fc040c0449e57cf07}\index{Trackers defines@{Trackers defines}!if\_assert\_usertracker@{if\_assert\_usertracker}} \index{if\_assert\_usertracker@{if\_assert\_usertracker}!Trackers defines@{Trackers defines}} @@ -206,7 +205,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00082}{82}} of file \mbo -Definition at line \mbox{\hyperlink{trackers_8h_source_l00084}{84}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00083}{83}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_ga39b6ffbc561f8caac276415e1ad32c30}\index{Trackers defines@{Trackers defines}!tern\_assert\_usertracker@{tern\_assert\_usertracker}} \index{tern\_assert\_usertracker@{tern\_assert\_usertracker}!Trackers defines@{Trackers defines}} @@ -225,7 +224,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00084}{84}} of file \mbo -Definition at line \mbox{\hyperlink{trackers_8h_source_l00086}{86}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00085}{85}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_gab880911066605602a966641682090169}\index{Trackers defines@{Trackers defines}!TrackerGet\_Ok@{TrackerGet\_Ok}} \index{TrackerGet\_Ok@{TrackerGet\_Ok}!Trackers defines@{Trackers defines}} @@ -244,7 +243,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00086}{86}} of file \mbo -Definition at line \mbox{\hyperlink{trackers_8h_source_l00090}{90}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00089}{89}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_ga9dc91e6b798a081f95f2ccef2c288e5e}\index{Trackers defines@{Trackers defines}!TrackerGet\_Err@{TrackerGet\_Err}} \index{TrackerGet\_Err@{TrackerGet\_Err}!Trackers defines@{Trackers defines}} @@ -263,7 +262,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00090}{90}} of file \mbo -Definition at line \mbox{\hyperlink{trackers_8h_source_l00092}{92}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00091}{91}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_ga47ac59a406ee74d4cd9fe0fbaf63a758}\index{Trackers defines@{Trackers defines}!TrackerGet\_Warn@{TrackerGet\_Warn}} \index{TrackerGet\_Warn@{TrackerGet\_Warn}!Trackers defines@{Trackers defines}} @@ -282,7 +281,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00092}{92}} of file \mbo -Definition at line \mbox{\hyperlink{trackers_8h_source_l00094}{94}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00093}{93}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_ga4b08632669043dfdbd219dda03502bdb}\index{Trackers defines@{Trackers defines}!TrackerGet\_User@{TrackerGet\_User}} \index{TrackerGet\_User@{TrackerGet\_User}!Trackers defines@{Trackers defines}} @@ -308,7 +307,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00094}{94}} of file \mbo \end{DoxyNote} -Definition at line \mbox{\hyperlink{trackers_8h_source_l00106}{106}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00105}{105}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_ga23de0006aa08984cfeddb6aa5e512fa1}\index{Trackers defines@{Trackers defines}!TrackerCnt\_Ok@{TrackerCnt\_Ok}} \index{TrackerCnt\_Ok@{TrackerCnt\_Ok}!Trackers defines@{Trackers defines}} @@ -327,7 +326,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00106}{106}} of file \mb -Definition at line \mbox{\hyperlink{trackers_8h_source_l00111}{111}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00110}{110}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_ga49af29ab3927cad105c1d2b018a767e9}\index{Trackers defines@{Trackers defines}!TrackerCnt\_Err@{TrackerCnt\_Err}} \index{TrackerCnt\_Err@{TrackerCnt\_Err}!Trackers defines@{Trackers defines}} @@ -346,7 +345,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00111}{111}} of file \mb -Definition at line \mbox{\hyperlink{trackers_8h_source_l00113}{113}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00112}{112}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_ga8017fb05a56a1b667244f1f786fa9c57}\index{Trackers defines@{Trackers defines}!TrackerCnt\_Warn@{TrackerCnt\_Warn}} \index{TrackerCnt\_Warn@{TrackerCnt\_Warn}!Trackers defines@{Trackers defines}} @@ -365,7 +364,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00113}{113}} of file \mb -Definition at line \mbox{\hyperlink{trackers_8h_source_l00115}{115}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00114}{114}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_ga1b7549afc4a1760b54a9b93b0f6d105e}\index{Trackers defines@{Trackers defines}!TrackerCnt\_User@{TrackerCnt\_User}} \index{TrackerCnt\_User@{TrackerCnt\_User}!Trackers defines@{Trackers defines}} @@ -384,7 +383,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00115}{115}} of file \mb -Definition at line \mbox{\hyperlink{trackers_8h_source_l00117}{117}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00116}{116}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_gad2f4062a9ac8c2ab062a364f640ebc51}\index{Trackers defines@{Trackers defines}!TrackerWrite\_User@{TrackerWrite\_User}} \index{TrackerWrite\_User@{TrackerWrite\_User}!Trackers defines@{Trackers defines}} @@ -403,7 +402,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00117}{117}} of file \mb -Definition at line \mbox{\hyperlink{trackers_8h_source_l00119}{119}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00118}{118}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_ga704f7b9f8c65c9bcec48ce7cb77a2d3b}\index{Trackers defines@{Trackers defines}!TrackerClear\_All@{TrackerClear\_All}} \index{TrackerClear\_All@{TrackerClear\_All}!Trackers defines@{Trackers defines}} @@ -422,7 +421,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00119}{119}} of file \mb -Definition at line \mbox{\hyperlink{trackers_8h_source_l00122}{122}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00121}{121}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_ga5dd8bac8c7ab5832019d55d7a68371b9}\index{Trackers defines@{Trackers defines}!TrackerClear\_Ok@{TrackerClear\_Ok}} \index{TrackerClear\_Ok@{TrackerClear\_Ok}!Trackers defines@{Trackers defines}} @@ -441,7 +440,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00122}{122}} of file \mb -Definition at line \mbox{\hyperlink{trackers_8h_source_l00124}{124}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00123}{123}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_gae860b6947c6e317e14d40bd7b4b8eb74}\index{Trackers defines@{Trackers defines}!TrackerClear\_Err@{TrackerClear\_Err}} \index{TrackerClear\_Err@{TrackerClear\_Err}!Trackers defines@{Trackers defines}} @@ -460,7 +459,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00124}{124}} of file \mb -Definition at line \mbox{\hyperlink{trackers_8h_source_l00126}{126}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00125}{125}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_ga365a8c60bd13b75154feda649dd21ead}\index{Trackers defines@{Trackers defines}!TrackerClear\_Warn@{TrackerClear\_Warn}} \index{TrackerClear\_Warn@{TrackerClear\_Warn}!Trackers defines@{Trackers defines}} @@ -479,7 +478,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00126}{126}} of file \mb -Definition at line \mbox{\hyperlink{trackers_8h_source_l00128}{128}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00127}{127}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_ga063dab1067005e1600ea32531fdf3f8d}\index{Trackers defines@{Trackers defines}!TrackerClear\_User@{TrackerClear\_User}} \index{TrackerClear\_User@{TrackerClear\_User}!Trackers defines@{Trackers defines}} @@ -498,7 +497,7 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00128}{128}} of file \mb -Definition at line \mbox{\hyperlink{trackers_8h_source_l00130}{130}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00129}{129}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. \Hypertarget{group___t_r_a_c_k_e_r_s_gaaec7ec19977bb26fa1919dfe920b82d5}\index{Trackers defines@{Trackers defines}!TrackerClear\_UserAll@{TrackerClear\_UserAll}} \index{TrackerClear\_UserAll@{TrackerClear\_UserAll}!Trackers defines@{Trackers defines}} @@ -517,5 +516,5 @@ Definition at line \mbox{\hyperlink{trackers_8h_source_l00130}{130}} of file \mb -Definition at line \mbox{\hyperlink{trackers_8h_source_l00132}{132}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. +Definition at line \mbox{\hyperlink{trackers_8h_source_l00131}{131}} of file \mbox{\hyperlink{trackers_8h_source}{trackers.\+h}}. diff --git a/Doc/latex/group___u_t_i_l_s___d_e_f_i_n_e_s.md5 b/Doc/latex/group___u_t_i_l_s___d_e_f_i_n_e_s.md5 index ead6af3..26c4ecb 100644 --- a/Doc/latex/group___u_t_i_l_s___d_e_f_i_n_e_s.md5 +++ b/Doc/latex/group___u_t_i_l_s___d_e_f_i_n_e_s.md5 @@ -1 +1 @@ -e4f09128a7c7fea7dcaa8c425861feae \ No newline at end of file +2cc6db69719569eeaf3a77181ade09ce \ No newline at end of file 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 6b0c886ed661049bbe0a4d20feb539440d6446a3..1a265b732ada51a2aec3bbeaaccbb54140de2a22 100644 GIT binary patch delta 636 zcmV-?0)zeVYU^sSVKRShYuhjo{;pqfA2yaSuqFAWX$gfU8Kra^u9LA3qX^Xzj+tW_ zNgm6;pJdC%p+m-;9^L8gp65gWqZks5$Sp*epa`OvAhLq!79)xwPEtf6Np27&u(A&8 zHH3#tDjhX%E}~kTw^E8Jtt+k~(WRd4ToW8P4|A6sD5R zi0vW#kw1+)Yr^6~sbtqO#?I`*YF4o~rtQu!X;;m3a5Cq5=|XImE^4y}*X&QrgGGGn z-@CJ|-<@MvIfj3nNg(p(>or9K4PR<;M!u?vp$y0n|DS+^5+awL+<`;~fmPLK44*A8 zkypsykSTfW3ZY<8@JdM_0a*nY7AIp`eHVs3S}NY2szL`+mCNNIt`gjFx8p{@Vs}R| zO$fm^6q7VgKI7;U#>?w6-LSw%FYKuDRNFUktoTO$wIzRIyJ$**U_6adV}u)mbn<_6 z!n_l-M`wB-6mN9vaut^megeyv74(Y< zbU&Tf#18drx#6`eearT-%sRf7ZKmu$)t}`13T19&b98cLVQmU!Ze(v_Y6>zkATS_r zVrmK?ARq%YI5LxDG%Er)Ig^nzUsol}%L#x$5ChQ6_yZBFL`B#_)-Lqy%?`X-qE#pe zvL<+WBm@E=B}W5@Qe?u+cEHdQTea3q!>f7`-^lnV9i)q5A^j=t|1TFV3Q<{@xP}?{ W01D&`b(2Un9| delta 640 zcmV-`0)PGMYVc~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=38a?$CilgLlX)F<7u24BitY) zlmDX==O0mfbf)Q1@kX~US8*NTC$M~pakaBvd-1z2MEk`@sx8uq}tw` zez4q7_Y-`>2+8-A9RZ`od$S;x1s&6NEMe0Sz{lRq>d0XCChG%Er*Fq4fmUw>m@ zVEF%^iGhcK0YtEY2xbt$$jI2qz`)4B4B_%~qMga;~$t^Je 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 5797503..c507e80 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 @@ -5,8 +5,7 @@ Общие вспомогательные макросы -Collaboration diagram for Utils defines\+: -\nopagebreak +Collaboration diagram for Utils defines\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode @@ -56,7 +55,7 @@ Collaboration diagram for Utils defines\+: \end{DoxyParams} Макрос использует memset для обнуления всей памяти структуры. Используется для быстрой и безопасной инициализации переменных структур до нуля. -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00154}{154}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00169}{169}} 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 +84,7 @@ Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00154}{154}} of file \end{DoxyReturn} Если результат деления без остатка\+: он возвращается как есть Если с остатком -\/ округляется вверх -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00165}{165}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00180}{180}} 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 +111,7 @@ Swap between Little Endian and Big Endian. \end{DoxyReturn} Переключения между двумя типами хранения слова\+: HI-\/\+LO байты и LO-\/\+HI байты. -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00173}{173}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00188}{188}} 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 +138,5 @@ Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00173}{173}} of file \end{DoxyReturn} Берет число по модулю. Хз как работает библиотечный abs в stdlib.\+h, мб это быстрее, но вряд ли конечно. -Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00181}{181}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__defs_8h_source_l00196}{196}} of file \mbox{\hyperlink{mylibs__defs_8h_source}{mylibs\+\_\+defs.\+h}}. diff --git a/Doc/latex/index.tex b/Doc/latex/index.tex index ac123f4..5ab445b 100644 --- a/Doc/latex/index.tex +++ b/Doc/latex/index.tex @@ -1,90 +1,108 @@ -\chapter{My\+Libs } -\hypertarget{index}{}\label{index}\index{MyLibs@{MyLibs}} -\hypertarget{index_overview}{}\doxysection{\texorpdfstring{Обзор}{Обзор}}\label{index_overview} -My\+Libs -\/ это набор библиотек для удобной работы с STM32. +\chapter{Обзор {\ttfamily Extended\+Libs} } +\hypertarget{index}{}\label{index}\index{Обзор $<$tt$>$ExtendedLibs$<$/tt$>$@{Обзор $<$tt$>$ExtendedLibs$<$/tt$>$}} +\label{index_md__e_1_2_8_w_o_r_k_2_s_t_m32_2_s_t_m___libs_2_s_t_m32___extended_libs_2_r_e_a_d_m_e}% +\Hypertarget{index_md__e_1_2_8_w_o_r_k_2_s_t_m32_2_s_t_m___libs_2_s_t_m32___extended_libs_2_r_e_a_d_m_e}% -\hypertarget{index_features}{}\doxysubsection{\texorpdfstring{Основные возможности}{Основные возможности}}\label{index_features} -\hypertarget{index_utils_module}{}\doxysubsubsection{\texorpdfstring{Общие утилиты (\protect\doxylink{group___m_y_l_i_b_s___d_e_f_i_n_e_s}{General Tools})}{Общие утилиты ({General Tools})}}\label{index_utils_module} + +Extended\+Libs -\/ это набор библиотек для удобной работы с STM32. Данный субмодуль подключается напрямую из Git и содержит набор вспомогательных библиотек для работы МК, в частности STM32 и SEGGER RTT.\hypertarget{index_основные-возможности}{}\doxysection{\texorpdfstring{Основные возможности}{Основные возможности}}\label{index_основные-возможности} +\hypertarget{index_общие-утилиты-mylibs-ref-mylibs_tools}{}\doxysubsubsection{\texorpdfstring{Общие утилиты My\+Libs (\protect\doxylink{group___m_y_l_i_b_s___t_o_o_l_s}{General Tools})}{Общие утилиты My\+Libs ({General Tools})}}\label{index_общие-утилиты-mylibs-ref-mylibs_tools} \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___g_e_n___o_p_t_i_m_i_z_e_r}{Genetic optimizer}) +\item Макросы для задержек (\doxylink{group___d_e_l_a_y_s___d_e_f_i_n_e_s}{Delays defines}) +\item Утилиты для работы с всяким (\doxylink{group___u_t_i_l_s___d_e_f_i_n_e_s}{Utils defines}) \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} +\end{DoxyItemize}\hypertarget{index_отладка-ref-mylibs_debug_tools}{}\doxysubsubsection{\texorpdfstring{Отладка\texorpdfstring{$\ast$}{*} (\protect\doxylink{group___m_y_l_i_b_s___d_e_b_u_g___t_o_o_l_s}{Debug Tools})}{Отладка\texorpdfstring{$\ast$}{*} ({Debug Tools})}}\label{index_отладка-ref-mylibs_debug_tools} \begin{DoxyItemize} -\item Serial трассировка через SWO и RTT (\doxylink{group___t_r_a_c_e___s_e_r_i_a_l}{Serial trace defines}) -\item GPIO трассировка для отладки (\doxylink{group___t_r_a_c_e___g_p_i_o}{GPIO trace defines}) -\item Сохранение логов в Flash память (\doxylink{group___t_r_a_c_e___r_t_t___f_l_a_s_h}{Flash RTT Buffer}) -\item Обработка Hard\+Fault с сохранением контекста (\doxylink{group___t_r_a_c_e___h_a_r_d_f_a_u_l_t}{Hardfault trace defines}) -\end{DoxyItemize}\hypertarget{index_gpio_module}{}\doxysubsubsection{\texorpdfstring{Модуль GPIO \protect\doxylink{group___m_y___l_i_b_s___g_p_i_o}{GPIO Tools}}{Модуль GPIO {GPIO Tools}}}\label{index_gpio_module} - -\begin{DoxyItemize} -\item Инициализация портов и тактирования (\doxylink{group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l}{General tools}) -\item Управление светодиодами (включение/выключение, моргание, плавное затухание) (\doxylink{group___m_y_l_i_b_s___g_p_i_o___l_e_d_s}{LED tools}) -\item Работа с кнопками (чтение состояния, фильтрация дребезга) (\doxylink{group___m_y_l_i_b_s___g_p_i_o___s_w_i_t_c_h}{Switch tools}) -\end{DoxyItemize}\hypertarget{index_tim_module}{}\doxysubsubsection{\texorpdfstring{Модуль таймеров \protect\doxylink{group___m_y___l_i_b_s___t_i_m}{TIM Tools}}{Модуль таймеров {TIM Tools}}}\label{index_tim_module} - -\begin{DoxyItemize} -\item Базовая инициализация таймеров (\doxylink{group___m_y_l_i_b_s___t_i_m___g_e_n_e_r_a_l}{General tools}) -\item Формирование задержек (блокирующие и неблокирующие) (\doxylink{group___m_y_l_i_b_s___t_i_m___d_e_l_a_y}{Delay tools}) -\item Работа с энкодерами (чтение положения, обработка кнопок) (\doxylink{group___m_y_l_i_b_s___t_i_m___e_n_c_o_d_e_r}{Encoder tools}) -\item Настройка ШИМ и Output Compare (\doxylink{group___m_y_l_i_b_s___t_i_m___o_c}{PWM/\+OC Channels tools}) -\end{DoxyItemize}\hypertarget{index_uart_module}{}\doxysubsubsection{\texorpdfstring{Модуль UART \protect\doxylink{group___m_y___l_i_b_s___u_a_r_t}{UART Tools}}{Модуль UART {UART Tools}}}\label{index_uart_module} - -\begin{DoxyItemize} -\item Базовая инициализация UART и его пинов одной функцией (\doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9f07396b778505c934143e89953e154}{UART\+\_\+\+Base\+\_\+\+Init}) -\end{DoxyItemize}\hypertarget{index_spi_module}{}\doxysubsubsection{\texorpdfstring{Модуль SPI \protect\doxylink{group___m_y___l_i_b_s___s_p_i}{SPI Tools}}{Модуль SPI {SPI Tools}}}\label{index_spi_module} - -\begin{DoxyItemize} -\item Базовая инициализация SPI и пинов одной функцией (\doxylink{group___m_y___l_i_b_s___s_p_i_ga0e177e3c57a8fcdc73b5602e72ec66ba}{SPI\+\_\+\+Base\+\_\+\+Init}) -\end{DoxyItemize}\hypertarget{index_structure}{}\doxysubsection{\texorpdfstring{Структура проекта}{Структура проекта}}\label{index_structure} +\item Трассировка (\doxylink{group___t_r_a_c_e}{Trace defines}) +\item Измерение временных интервалов (\doxylink{group___b_e_n_c_h___t_i_m_e}{Time measurement}) +\item Генетический алгоритм для оптимизации параметров (\doxylink{group___g_e_n___o_p_t_i_m_i_z_e_r}{Genetic optimizer}) +\item Трекеры для статистики и отладки (\doxylink{group___t_r_a_c_k_e_r_s}{Trackers defines}) +\end{DoxyItemize} +{\itshape \texorpdfstring{$\ast$}{*}Модули отладки независимы от My\+Libs и могут быть использованы отдельно}\hypertarget{index_структура-библиотеки}{}\doxysection{\texorpdfstring{Структура библиотеки}{Структура библиотеки}}\label{index_структура-библиотеки} +\texorpdfstring{$\ast$}{*}\+Note\+: Файлы начинающиеся с {\ttfamily \+\_\+\+\_\+} и которых нет в этом дереве являются \texorpdfstring{$\ast$}{*}\texorpdfstring{$\ast$}{*}внутренними/непротестированными/недокументированными\texorpdfstring{$\ast$}{*}\texorpdfstring{$\ast$}{*}\texorpdfstring{$\ast$}{*} \begin{DoxyCode}{0} \DoxyCodeLine{ProjectRoot/} \DoxyCodeLine{├──\ MyLibs/\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Общие\ библиотеки,\ независимые\ от\ платформы\ (или\ почти)} \DoxyCodeLine{│\ \ \ ├──\ inc/} -\DoxyCodeLine{│\ \ \ │\ \ \ ├──\ mylibs\_include.h\ \ \ \ \ \#\ Главный\ include\ файл} -\DoxyCodeLine{│\ \ \ │\ \ \ ├──\ mylibs\_config.h\ \ \ \ \ \ \#\ Конфигурация\ библиотек} +\DoxyCodeLine{│\ \ \ │\ \ \ ├──\ \_\_mylibs\_include.h\ \ \ \#\ Главный\ include\ файл} +\DoxyCodeLine{│\ \ \ │\ \ \ ├──\ \_\_mylibs\_config.h\ \ \ \ \#\ Конфигурация\ библиотек} \DoxyCodeLine{│\ \ \ │\ \ \ ├──\ mylibs\_defs.h\ \ \ \ \ \ \ \ \#\ Общие\ определения\ и\ макросы} \DoxyCodeLine{│\ \ \ │\ \ \ ├──\ bit\_access.h\ \ \ \ \ \ \ \ \ \#\ Битовый\ доступ\ к\ регистрам} -\DoxyCodeLine{│\ \ \ │\ \ \ ├──\ gen\_optimizer.h\ \ \ \#\ Оптимизатор\ (генетический\ алгоритм)} +\DoxyCodeLine{│\ \ \ │\ \ \ ├──\ gen\_optimizer.h\ \ \ \ \ \ \#\ Оптимизатор\ (генетический\ алгоритм)} \DoxyCodeLine{│\ \ \ │\ \ \ ├──\ trackers.h\ \ \ \ \ \ \ \ \ \ \ \#\ Трекеры\ для\ отладки} \DoxyCodeLine{│\ \ \ │\ \ \ └──\ trace.h\ \ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Трассировка\ и\ логирование} \DoxyCodeLine{│\ \ \ └──\ src/} \DoxyCodeLine{│} -\DoxyCodeLine{├──RTT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Библиотека\ RTT} -\DoxyCodeLine{│\ \ \ ├──\ \_\_SEGGER\_RTT\_Conf.h\ \ \ \ \ \ \#\ Конфигурационный\ файл\ RTT} -\DoxyCodeLine{│\ \ \ ├──\ SEGGER\_RTT.c\ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Основной\ модуль\ RTT} -\DoxyCodeLine{│\ \ \ ├──\ SEGGER\_RTT.h\ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Основной\ заголовок\ RTT} -\DoxyCodeLine{│\ \ \ ├──\ SEGGER\_RTT\_ASM\_ARMv7M.S\ \ \#\ Ассемблерная\ оптимизация\ для\ ARMv7M} -\DoxyCodeLine{│\ \ \ └──\ SEGGER\_RTT\_printf.c\ \ \ \ \ \ \#\ Реализация\ printf()\ через\ RTT} -\DoxyCodeLine{│} -\DoxyCodeLine{└──\ STM32\_General\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{preprocessor}{\#\ Работа\ с\ периферией\ STM32}} -\DoxyCodeLine{\ \ \ \ ├──\ inc/} -\DoxyCodeLine{\ \ \ \ │\ \ \ ├──\ general\_gpio.h\ \ \ \ \ \ \ \#\ Работа\ с\ GPIO} -\DoxyCodeLine{\ \ \ \ │\ \ \ ├──\ general\_spi.h\ \ \ \ \ \ \ \ \#\ Работа\ с\ SPI} -\DoxyCodeLine{\ \ \ \ │\ \ \ ├──\ general\_tim.h\ \ \ \ \ \ \ \ \#\ Работа\ с\ таймерами} -\DoxyCodeLine{\ \ \ \ │\ \ \ └──\ general\_uart.h\ \ \ \ \ \ \ \#\ Работа\ с\ UART} -\DoxyCodeLine{\ \ \ \ └──\ src/} -\DoxyCodeLine{\ \ \ \ \ \ \ \ ├──\ general\_gpio.c\ \ \ \ \ \ \ \#\ Реализация\ GPIO} -\DoxyCodeLine{\ \ \ \ \ \ \ \ ├──\ general\_spi.c\ \ \ \ \ \ \ \ \#\ Реализация\ SPI} -\DoxyCodeLine{\ \ \ \ \ \ \ \ ├──\ general\_tim.c\ \ \ \ \ \ \ \ \#\ Реализация\ TIM} -\DoxyCodeLine{\ \ \ \ \ \ \ \ └──\ general\_uart.c\ \ \ \ \ \ \ \#\ Реализация\ UART} +\DoxyCodeLine{└──RTT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Библиотека\ RTT} +\DoxyCodeLine{\ \ \ \ ├──\ \_\_SEGGER\_RTT\_Conf.h\ \ \ \ \ \ \#\ Конфигурационный\ файл\ RTT} +\DoxyCodeLine{\ \ \ \ ├──\ SEGGER\_RTT.c\ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Основной\ модуль\ RTT} +\DoxyCodeLine{\ \ \ \ ├──\ SEGGER\_RTT.h\ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Основной\ заголовок\ RTT} +\DoxyCodeLine{\ \ \ \ ├──\ SEGGER\_RTT\_ASM\_ARMv7M.S\ \ \#\ Ассемблерная\ оптимизация\ для\ ARMv7M} +\DoxyCodeLine{\ \ \ \ └──\ SEGGER\_RTT\_printf.c\ \ \ \ \ \ \#\ Реализация\ printf()\ через\ RTT} \end{DoxyCode} -\hypertarget{index_usage_basic}{}\doxysubsection{\texorpdfstring{Использование}{Использование}}\label{index_usage_basic} -Инструкция по подключению\+: +\hypertarget{index_инструкция-по-подключению}{}\doxysection{\texorpdfstring{Инструкция по подключению}{Инструкция по подключению}}\label{index_инструкция-по-подключению} + +\begin{DoxyEnumerate} +\item {\bfseries{Склонируйте субмодуль}} в ваш проект\+: +\end{DoxyEnumerate} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{git\ submodule\ add\ https://git.arktika.cyou/Razvalyaev/STM32\_ExtendedLibs\ path/to/ExtendedLibs} +\DoxyCodeLine{git\ submodule\ update\ -\/-\/init\ -\/-\/recursive} + +\end{DoxyCode} + \begin{DoxyEnumerate} -\item Настройте конфигурацию \doxylink{group___m_y_l_i_b_s___c_o_n_f_i_g}{Configs} в \doxylink{mylibs__config_8h}{mylibs\+\_\+config.\+h} -\item Подключите главный заголовочный файл\+: +\item {\bfseries{Скопируйте файлы конфигурации и главный include}} в отдельную папку в вашем проекте (вне субмодуля) и удалите {\ttfamily \+\_\+\+\_\+}\+: +\end{DoxyEnumerate} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{ProjectRoot/} +\DoxyCodeLine{├──\ Configs/} +\DoxyCodeLine{│\ \ \ ├──\ mylibs\_include.h} +\DoxyCodeLine{│\ \ \ └──\ mylibs\_config.h} +\DoxyCodeLine{│\ \ \ └──\ SEGGER\_RTT\_Conf.h} + +\end{DoxyCode} + + + +\begin{DoxyEnumerate} +\item {\bfseries{Настройте конфигурацию}} под ваш проект\+: +\end{DoxyEnumerate} +\begin{DoxyItemize} +\item {\ttfamily \doxylink{mylibs__config_8h}{mylibs\+\_\+config.\+h}} — задайте нужные параметры библиотек. +\item {\ttfamily \doxylink{mylibs__include_8h}{mylibs\+\_\+include.\+h}} — укажите пути к вашим заголовочным файлам и подключаемым модулям. +\item {\ttfamily \doxylink{_s_e_g_g_e_r___r_t_t___conf_8h_source}{SEGGER\+\_\+\+RTT\+\_\+\+Conf.\+h}} — настройки RTT. +\end{DoxyItemize} +\begin{DoxyEnumerate} +\item {\bfseries{Подключайте библиотеки в вашем коде}} через главный include файл\+: +\end{DoxyEnumerate} + + \begin{DoxyCode}{0} \DoxyCodeLine{\textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{mylibs__include_8h}{mylibs\_include.h}}"{}}} \end{DoxyCode} -\item Используйте нужные модули в своем коде. Примеры использования приведены в соответствующей теме -\end{DoxyEnumerate} \ No newline at end of file + + +\begin{DoxyEnumerate} +\item {\bfseries{Обновление библиотеки}}\+: +\end{DoxyEnumerate} + +После обновления субмодуля из Git, исходные файлы библиотеки будут обновлены, но ваши конфиги останутся в целевой папке и не перезапишутся\+: + + +\begin{DoxyCode}{0} +\DoxyCodeLine{git\ submodule\ update\ -\/-\/remote} + +\end{DoxyCode} + \ No newline at end of file diff --git a/Doc/latex/mainpage_8h_source.tex b/Doc/latex/mainpage_8h_source.tex index 194c8be..5877f06 100644 --- a/Doc/latex/mainpage_8h_source.tex +++ b/Doc/latex/mainpage_8h_source.tex @@ -1,7 +1,7 @@ -\doxysection{E\+:/.WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/mainpage.h} +\doxysection{E\+:/.WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/mainpage.h} \hypertarget{mainpage_8h_source}{}\label{mainpage_8h_source} \begin{DoxyCode}{0} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00001}00001\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00001}00001\ \textcolor{comment}{/*}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00002}00002\ \textcolor{comment}{@mainpage}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00003}00003\ \textcolor{comment}{}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00004}00004\ \textcolor{comment}{\ }} @@ -14,7 +14,7 @@ \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00011}00011\ \textcolor{comment}{}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00012}00012\ \textcolor{comment}{@subsection\ features\ Основные\ возможности}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00013}00013\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00014}00014\ \textcolor{comment}{@subsubsection\ utils\_module\ Общие\ утилиты\ (@ref\ MYLIBS\_DEFINES)}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00014}00014\ \textcolor{comment}{@subsubsection\ utils\_module\ Общие\ утилиты\ (@ref\ MYLIBS\_TOOLS)}} \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\ GEN\_OPTIMIZER)}} @@ -49,51 +49,57 @@ \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00046}00046\ \textcolor{comment}{ProjectRoot/}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00047}00047\ \textcolor{comment}{├──\ MyLibs/\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Общие\ библиотеки,\ независимые\ от\ платформы\ (или\ почти)}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00048}00048\ \textcolor{comment}{│\ \ \ ├──\ inc/}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00049}00049\ \textcolor{comment}{│\ \ \ │\ \ \ ├──\ mylibs\_include.h\ \ \ \ \ \#\ Главный\ include\ файл}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00050}00050\ \textcolor{comment}{│\ \ \ │\ \ \ ├──\ mylibs\_config.h\ \ \ \ \ \ \#\ Конфигурация\ библиотек}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00049}00049\ \textcolor{comment}{│\ \ \ │\ \ \ ├──\ \_\_mylibs\_include.h\ \ \ \ \ \#\ Главный\ include\ файл}} +\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}{│\ \ \ │\ \ \ ├──\ gen\_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/}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00057}00057\ \textcolor{comment}{│}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00058}00058\ \textcolor{comment}{├──RTT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Библиотека\ RTT}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00059}00059\ \textcolor{comment}{│\ \ \ ├──\ \_\_SEGGER\_RTT\_Conf.h\ \ \ \ \ \ \#\ Конфигурационный\ файл\ RTT}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00060}00060\ \textcolor{comment}{│\ \ \ ├──\ SEGGER\_RTT.c\ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Основной\ модуль\ RTT}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00061}00061\ \textcolor{comment}{│\ \ \ ├──\ SEGGER\_RTT.h\ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Основной\ заголовок\ RTT}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00062}00062\ \textcolor{comment}{│\ \ \ ├──\ SEGGER\_RTT\_ASM\_ARMv7M.S\ \ \#\ Ассемблерная\ оптимизация\ для\ ARMv7M}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00063}00063\ \textcolor{comment}{│\ \ \ └──\ SEGGER\_RTT\_printf.c\ \ \ \ \ \ \#\ Реализация\ printf()\ через\ RTT}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00064}00064\ \textcolor{comment}{│}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00065}00065\ \textcolor{comment}{└──\ STM32\_General\ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Работа\ с\ периферией\ STM32}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00066}00066\ \textcolor{comment}{\ \ \ \ ├──\ inc/}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00067}00067\ \textcolor{comment}{\ \ \ \ │\ \ \ ├──\ general\_gpio.h\ \ \ \ \ \ \ \#\ Работа\ с\ GPIO}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00068}00068\ \textcolor{comment}{\ \ \ \ │\ \ \ ├──\ general\_spi.h\ \ \ \ \ \ \ \ \#\ Работа\ с\ SPI}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00069}00069\ \textcolor{comment}{\ \ \ \ │\ \ \ ├──\ general\_tim.h\ \ \ \ \ \ \ \ \#\ Работа\ с\ таймерами}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00070}00070\ \textcolor{comment}{\ \ \ \ │\ \ \ └──\ general\_uart.h\ \ \ \ \ \ \ \#\ Работа\ с\ UART}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00071}00071\ \textcolor{comment}{\ \ \ \ └──\ src/}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00072}00072\ \textcolor{comment}{\ \ \ \ \ \ \ \ ├──\ general\_gpio.c\ \ \ \ \ \ \ \#\ Реализация\ GPIO}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00073}00073\ \textcolor{comment}{\ \ \ \ \ \ \ \ ├──\ general\_spi.c\ \ \ \ \ \ \ \ \#\ Реализация\ SPI}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00074}00074\ \textcolor{comment}{\ \ \ \ \ \ \ \ ├──\ general\_tim.c\ \ \ \ \ \ \ \ \#\ Реализация\ TIM}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00075}00075\ \textcolor{comment}{\ \ \ \ \ \ \ \ └──\ general\_uart.c\ \ \ \ \ \ \ \#\ Реализация\ UART}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00076}00076\ \textcolor{comment}{@endcode}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00077}00077\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00078}00078\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00058}00058\ \textcolor{comment}{└──RTT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Библиотека\ RTT}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00059}00059\ \textcolor{comment}{\ \ \ \ ├──\ \_\_SEGGER\_RTT\_Conf.h\ \ \ \ \ \ \#\ Конфигурационный\ файл\ RTT}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00060}00060\ \textcolor{comment}{\ \ \ \ ├──\ SEGGER\_RTT.c\ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Основной\ модуль\ RTT}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00061}00061\ \textcolor{comment}{\ \ \ \ ├──\ SEGGER\_RTT.h\ \ \ \ \ \ \ \ \ \ \ \ \ \#\ Основной\ заголовок\ RTT}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00062}00062\ \textcolor{comment}{\ \ \ \ ├──\ SEGGER\_RTT\_ASM\_ARMv7M.S\ \ \#\ Ассемблерная\ оптимизация\ для\ ARMv7M}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00063}00063\ \textcolor{comment}{\ \ \ \ └──\ SEGGER\_RTT\_printf.c\ \ \ \ \ \ \#\ Реализация\ printf()\ через\ RTT}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00064}00064\ \textcolor{comment}{@endcode}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00065}00065\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00066}00066\ \textcolor{comment}{\#\#\#\#\ Модуль\ GPIO\ @ref\ MY\_LIBS\_GPIO}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00067}00067\ \textcolor{comment}{-\/\ Инициализация\ портов\ и\ тактирования\ (@ref\ MYLIBS\_GPIO\_GENERAL)}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00068}00068\ \textcolor{comment}{-\/\ Управление\ светодиодами\ (включение/выключение,\ моргание,\ плавное\ затухание)\ (@ref\ MYLIBS\_GPIO\_LEDS)}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00069}00069\ \textcolor{comment}{-\/\ Работа\ с\ кнопками\ (чтение\ состояния,\ фильтрация\ дребезга)\ (@ref\ MYLIBS\_GPIO\_SWITCH)}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00070}00070\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00071}00071\ \textcolor{comment}{\#\#\#\#\ Модуль\ таймеров\ @ref\ MY\_LIBS\_TIM}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00072}00072\ \textcolor{comment}{-\/\ Базовая\ инициализация\ таймеров\ (@ref\ MYLIBS\_TIM\_GENERAL)}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00073}00073\ \textcolor{comment}{-\/\ Формирование\ задержек\ (блокирующие\ и\ неблокирующие)\ (@ref\ MYLIBS\_TIM\_DELAY)}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00074}00074\ \textcolor{comment}{-\/\ Работа\ с\ энкодерами\ (чтение\ положения,\ обработка\ кнопок)\ (@ref\ MYLIBS\_TIM\_ENCODER)}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00075}00075\ \textcolor{comment}{-\/\ Настройка\ ШИМ\ и\ Output\ Compare\ (@ref\ MYLIBS\_TIM\_OC)}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00076}00076\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00077}00077\ \textcolor{comment}{\#\#\#\#\ Модуль\ UART\ @ref\ MY\_LIBS\_UART}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00078}00078\ \textcolor{comment}{-\/\ Базовая\ инициализация\ UART\ и\ его\ пинов\ одной\ функцией\ (@ref\ UART\_Base\_Init)}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00079}00079\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00080}00080\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00081}00081\ \textcolor{comment}{@subsection\ usage\_basic\ Использование}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00080}00080\ \textcolor{comment}{@subsubsection\ spi\_module\ Модуль\ SPI\ @ref\ MY\_LIBS\_SPI}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00081}00081\ \textcolor{comment}{-\/\ Базовая\ инициализация\ SPI\ и\ пинов\ одной\ функцией\ (@ref\ SPI\_Base\_Init)}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00082}00082\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00083}00083\ \textcolor{comment}{Инструкция\ по\ подключению:}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00083}00083\ \textcolor{comment}{}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00084}00084\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00085}00085\ \textcolor{comment}{1.\ Настройте\ конфигурацию\ @ref\ MYLIBS\_CONFIG\ в\ @ref\ mylibs\_config.h\ }} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00085}00085\ \textcolor{comment}{}} \DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00086}00086\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00087}00087\ \textcolor{comment}{2.\ Подключите\ главный\ заголовочный\ файл:}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00088}00088\ \textcolor{comment}{@code}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00089}00089\ \textcolor{comment}{\#include\ "{}mylibs\_include.h"{}}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00090}00090\ \textcolor{comment}{@endcode}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00091}00091\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00092}00092\ \textcolor{comment}{3.\ Используйте\ нужные\ модули\ в\ своем\ коде.\ Примеры\ использования\ приведены\ в\ соответствующей\ теме}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00093}00093\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00094}00094\ \textcolor{comment}{*/}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00087}00087\ \textcolor{comment}{@subsection\ usage\_basic\ Использование}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00088}00088\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00089}00089\ \textcolor{comment}{Инструкция\ по\ подключению:}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00090}00090\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00091}00091\ \textcolor{comment}{1.\ Настройте\ конфигурацию\ @ref\ MYLIBS\_CONFIG\ в\ @ref\ mylibs\_config.h\ }} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00092}00092\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00093}00093\ \textcolor{comment}{2.\ Подключите\ главный\ заголовочный\ файл:}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00094}00094\ \textcolor{comment}{@code}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00095}00095\ \textcolor{comment}{\#include\ "{}mylibs\_include.h"{}}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00096}00096\ \textcolor{comment}{@endcode}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00097}00097\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00098}00098\ \textcolor{comment}{3.\ Используйте\ нужные\ модули\ в\ своем\ коде.\ Примеры\ использования\ приведены\ в\ соответствующей\ теме}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00099}00099\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mainpage_8h_source_l00100}00100\ \textcolor{comment}{*/}} \end{DoxyCode} diff --git a/Doc/latex/mylibs__config_8h.tex b/Doc/latex/mylibs__config_8h.tex index 373df53..bdfd47c 100644 --- a/Doc/latex/mylibs__config_8h.tex +++ b/Doc/latex/mylibs__config_8h.tex @@ -1,21 +1,19 @@ -\doxysection{E\+:/.WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/mylibs\+\_\+config.h File Reference} -\hypertarget{mylibs__config_8h}{}\label{mylibs__config_8h}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_config.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_config.h}} +\doxysection{E\+:/.WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/mylibs\+\_\+config.h File Reference} +\hypertarget{mylibs__config_8h}{}\label{mylibs__config_8h}\index{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_config.h@{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_config.h}} Конфигурации для библиотек My\+Libs. {\ttfamily \#include "{}stm32f4xx\+\_\+hal.\+h"{}}\newline -Include dependency graph for mylibs\+\_\+config.\+h\+: -\nopagebreak +Include dependency graph for mylibs\+\_\+config.\+h\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode -\includegraphics[width=212pt]{mylibs__config_8h__incl} +\includegraphics[width=218pt]{mylibs__config_8h__incl} \end{center} \end{figure} -This graph shows which files directly or indirectly include this file\+: -\nopagebreak +This graph shows which files directly or indirectly include this file\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode diff --git a/Doc/latex/mylibs__config_8h__dep__incl.md5 b/Doc/latex/mylibs__config_8h__dep__incl.md5 index 1088441..c3f1ecf 100644 --- a/Doc/latex/mylibs__config_8h__dep__incl.md5 +++ b/Doc/latex/mylibs__config_8h__dep__incl.md5 @@ -1 +1 @@ -26252fa1f097da1581d5603686501d37 \ No newline at end of file +7a5b1c76e74e0cbe8f5df16324c62ca4 \ 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 c6a3764a6fa07e957ce4fdfefafcaf2066815528..69d264f10a1c923a651f875e7f6b5e1344c91fb6 100644 GIT binary patch delta 22897 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 jyPqZ1lmDN$JUrp2^7gQw+ delta 25131 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

    #p~}12O>g!#hsOd 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 diff --git a/Doc/latex/mylibs__config_8h__incl.md5 b/Doc/latex/mylibs__config_8h__incl.md5 index 4b57b02..9d0bda2 100644 --- a/Doc/latex/mylibs__config_8h__incl.md5 +++ b/Doc/latex/mylibs__config_8h__incl.md5 @@ -1 +1 @@ -d92f2e71156ec00bf573687efd65ec85 \ No newline at end of file +ddd45146c613ec30ece73923bf565590 \ No newline at end of file diff --git a/Doc/latex/mylibs__config_8h__incl.pdf b/Doc/latex/mylibs__config_8h__incl.pdf index 8d7ea2cfaec61b4da581c6537171f60e69208e6e..ff73c7a3e9785997708b1610c7f66ab6c9ee4f78 100644 GIT binary patch delta 19462 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≠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 diff --git a/Doc/latex/mylibs__config_8h_source.tex b/Doc/latex/mylibs__config_8h_source.tex index 13d6468..bc7c809 100644 --- a/Doc/latex/mylibs__config_8h_source.tex +++ b/Doc/latex/mylibs__config_8h_source.tex @@ -1,5 +1,5 @@ \doxysection{mylibs\+\_\+config.\+h} -\hypertarget{mylibs__config_8h_source}{}\label{mylibs__config_8h_source}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_config.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_config.h}} +\hypertarget{mylibs__config_8h_source}{}\label{mylibs__config_8h_source}\index{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_config.h@{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_config.h}} \mbox{\hyperlink{mylibs__config_8h}{Go to the documentation of this file.}} \begin{DoxyCode}{0} \DoxyCodeLine{\Hypertarget{mylibs__config_8h_source_l00001}00001\ \textcolor{comment}{/**\ }} diff --git a/Doc/latex/mylibs__defs_8h.tex b/Doc/latex/mylibs__defs_8h.tex index 5185989..235e204 100644 --- a/Doc/latex/mylibs__defs_8h.tex +++ b/Doc/latex/mylibs__defs_8h.tex @@ -1,21 +1,19 @@ -\doxysection{E\+:/.WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/mylibs\+\_\+defs.h File Reference} -\hypertarget{mylibs__defs_8h}{}\label{mylibs__defs_8h}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_defs.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_defs.h}} +\doxysection{E\+:/.WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/mylibs\+\_\+defs.h File Reference} +\hypertarget{mylibs__defs_8h}{}\label{mylibs__defs_8h}\index{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_defs.h@{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_defs.h}} Заголочный файл для дефайнов библиотеки My\+Libs\+General. {\ttfamily \#include "{}mylibs\+\_\+config.\+h"{}}\newline -Include dependency graph for mylibs\+\_\+defs.\+h\+: -\nopagebreak +Include dependency graph for mylibs\+\_\+defs.\+h\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode -\includegraphics[width=212pt]{mylibs__defs_8h__incl} +\includegraphics[width=218pt]{mylibs__defs_8h__incl} \end{center} \end{figure} -This graph shows which files directly or indirectly include this file\+: -\nopagebreak +This graph shows which files directly or indirectly include this file\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode diff --git a/Doc/latex/mylibs__defs_8h__dep__incl.md5 b/Doc/latex/mylibs__defs_8h__dep__incl.md5 index 186de66..8615071 100644 --- a/Doc/latex/mylibs__defs_8h__dep__incl.md5 +++ b/Doc/latex/mylibs__defs_8h__dep__incl.md5 @@ -1 +1 @@ -69bb9960f1fbfb4580bf7e3b97eade6b \ No newline at end of file +f4eca99d81f8e23aa571cb1dc0f41d85 \ 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 ab88f79f39124a557091fe65b01a817806d0fc99..d8225f5677aedcbce57805f3b909b8df12484fa9 100644 GIT binary patch delta 22665 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%0AdDQkwJ3vFe!3?22E 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 diff --git a/Doc/latex/mylibs__defs_8h__incl.md5 b/Doc/latex/mylibs__defs_8h__incl.md5 index 08549bc..fe75a0e 100644 --- a/Doc/latex/mylibs__defs_8h__incl.md5 +++ b/Doc/latex/mylibs__defs_8h__incl.md5 @@ -1 +1 @@ -4877a0c82614795dedf2fb1ec1e645aa \ No newline at end of file +bcea638b5c9ec73e096480b97d84f849 \ No newline at end of file diff --git a/Doc/latex/mylibs__defs_8h__incl.pdf b/Doc/latex/mylibs__defs_8h__incl.pdf index 9d08a7f505f8f7975d0df967de856ffd006b9597..a45d2cf1df9032f07a5797b07104adba948ffb04 100644 GIT binary patch delta 19716 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 diff --git a/Doc/latex/mylibs__defs_8h_source.tex b/Doc/latex/mylibs__defs_8h_source.tex index dceb954..31403ae 100644 --- a/Doc/latex/mylibs__defs_8h_source.tex +++ b/Doc/latex/mylibs__defs_8h_source.tex @@ -1,5 +1,5 @@ \doxysection{mylibs\+\_\+defs.\+h} -\hypertarget{mylibs__defs_8h_source}{}\label{mylibs__defs_8h_source}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_defs.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_defs.h}} +\hypertarget{mylibs__defs_8h_source}{}\label{mylibs__defs_8h_source}\index{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_defs.h@{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_defs.h}} \mbox{\hyperlink{mylibs__defs_8h}{Go to the documentation of this file.}} \begin{DoxyCode}{0} \DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00001}00001\ \textcolor{comment}{/**\ }} @@ -7,206 +7,221 @@ \DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00003}00003\ \textcolor{comment}{*\ @file\ mylibs\_defs.h}} \DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00004}00004\ \textcolor{comment}{*\ @brief\ Заголочный\ файл\ для\ дефайнов\ библиотеки\ MyLibsGeneral.}} \DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00005}00005\ \textcolor{comment}{**************************************************************************}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00006}00006\ \textcolor{comment}{*\ @defgroup\ MYLIBS\_DEFINES\ \ General\ Tools}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00006}00006\ \textcolor{comment}{*\ @defgroup\ MYLIBS\_TOOLS\ \ General\ Tools}} \DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00007}00007\ \textcolor{comment}{*\ @ingroup\ \ MYLIBS\_ALL}} \DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00008}00008\ \textcolor{comment}{*\ @brief\ \ \ \ Общие\ макросы\ и\ typedef'ы,\ используемые\ по\ всему\ проекту}} \DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00009}00009\ \textcolor{comment}{*}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00010}00010\ \textcolor{comment}{*************************************************************************/}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00011}00011\ \textcolor{preprocessor}{\#ifndef\ \_\_MYLIBS\_DEFINES\_H\_}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00012}00012\ \textcolor{preprocessor}{\#define\ \_\_MYLIBS\_DEFINES\_H\_}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00013}00013\ } -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00014}00014\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{mylibs__config_8h}{mylibs\_config.h}}"{}}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00015}00015\ } -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00016}00016\ \textcolor{comment}{/***************************************************************************}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00017}00017\ \textcolor{comment}{******************************ERROR\_HANDLER********************************/}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00018}00018\ \textcolor{comment}{/**\ }} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00019}00019\ \textcolor{comment}{\ \ *\ @addtogroup\ ERROR\_HANDLER\_DEFINES\ \ \ Error\ Handler\ defines}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00020}00020\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ MYLIBS\_DEFINES}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00021}00021\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Дефайны\ для\ обработки\ ошибок}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00022}00022\ \textcolor{comment}{\ \ *\ @\{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00023}00023\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00024}00024\ } -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00025}00025\ \textcolor{comment}{/*\ extern\ Error\_Handler\ from\ main.h\ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00026}00026\ \textcolor{keyword}{extern}\ \textcolor{keywordtype}{void}\ Error\_Handler(\textcolor{keywordtype}{void});} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00027}00027\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00028}00028\ \textcolor{comment}{/**}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00029}00029\ \textcolor{comment}{\ \ *\ @brief\ Error\_Handler\ который\ будет\ вызыватся\ в\ библиотеке}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00030}00030\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00031}\mbox{\hyperlink{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_gae110df81afd885a390bbeb152d7b709f}{00031}}\ \textcolor{preprocessor}{\#define\ MyLibs\_Error\_Handler(params)\ \ Error\_Handler(params)}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00032}00032\ \textcolor{comment}{/*\ If\ error\ handler\ not\ defined\ -\/\ set\ void\ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00033}00033\ \textcolor{preprocessor}{\#ifndef\ MyLibs\_Error\_Handler}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00034}00034\ \textcolor{preprocessor}{\#define\ MyLibs\_Error\_Handler(...)}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00035}00035\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ MyLibs\_Error\_Handler}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00036}00036\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00037}00037\ \textcolor{comment}{/**\ @brief\ Проверить\ один\ указатель\ на\ NULL\ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00038}\mbox{\hyperlink{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_ga5d066a5b9781f9437e75d98677489eb9}{00038}}\ \textcolor{preprocessor}{\#define\ check\_null\_ptr\_1(p1)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (p1\ ==\ NULL)}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00039}00039\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00040}00040\ \textcolor{comment}{/**\ @brief\ Проверить\ два\ указателя\ на\ NULL\ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00041}\mbox{\hyperlink{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_ga27b363f333cacdccc15f5174e096b5b3}{00041}}\ \textcolor{preprocessor}{\#define\ check\_null\_ptr\_2(p1,\ p2)\ \ \ \ \ \ \ \ \ \ \ \ \ \ ((p1\ ==\ NULL)\ ||\ (p1\ !=\ NULL\ \&\&\ p2\ ==\ NULL))}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00010}00010\ \textcolor{comment}{*\ @defgroup\ MYLIBS\_DEBUG\_TOOLS\ \ Debug\ Tools}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00011}00011\ \textcolor{comment}{*\ @ingroup\ \ MYLIBS\_ALL}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00012}00012\ \textcolor{comment}{*\ @brief\ \ \ \ Утилиты\ для\ тестирования\ программы}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00013}00013\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00014}00014\ \textcolor{comment}{*\ @addtogroup\ BENCH\_TIME}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00015}00015\ \textcolor{comment}{*\ @ingroup\ MYLIBS\_DEBUG\_TOOLS\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00016}00016\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00017}00017\ \textcolor{comment}{*\ @addtogroup\ GEN\_OPTIMIZER}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00018}00018\ \textcolor{comment}{*\ @ingroup\ MYLIBS\_DEBUG\_TOOLS\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00019}00019\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00020}00020\ \textcolor{comment}{*\ @addtogroup\ TRACE}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00021}00021\ \textcolor{comment}{*\ @ingroup\ MYLIBS\_DEBUG\_TOOLS\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00022}00022\ \textcolor{comment}{*}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00023}00023\ \textcolor{comment}{*\ @addtogroup\ TRACKERS}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00024}00024\ \textcolor{comment}{*\ @ingroup\ MYLIBS\_DEBUG\_TOOLS\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00025}00025\ \textcolor{comment}{*************************************************************************/}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00026}00026\ \textcolor{preprocessor}{\#ifndef\ \_\_MYLIBS\_TOOLS\_H\_}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00027}00027\ \textcolor{preprocessor}{\#define\ \_\_MYLIBS\_TOOLS\_H\_}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00028}00028\ } +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00029}00029\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{mylibs__config_8h}{mylibs\_config.h}}"{}}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00030}00030\ } +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00031}00031\ \textcolor{comment}{/***************************************************************************}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00032}00032\ \textcolor{comment}{******************************ERROR\_HANDLER********************************/}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00033}00033\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00034}00034\ \textcolor{comment}{\ \ *\ @addtogroup\ ERROR\_HANDLER\_DEFINES\ \ \ Error\ Handler\ defines}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00035}00035\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ MYLIBS\_TOOLS}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00036}00036\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Дефайны\ для\ обработки\ ошибок}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00037}00037\ \textcolor{comment}{\ \ *\ @\{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00038}00038\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00039}00039\ } +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00040}00040\ \textcolor{comment}{/*\ extern\ Error\_Handler\ from\ main.h\ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00041}00041\ \textcolor{keyword}{extern}\ \textcolor{keywordtype}{void}\ Error\_Handler(\textcolor{keywordtype}{void});} \DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00042}00042\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00043}00043\ \textcolor{comment}{/**\ @brief\ Проверить\ три\ указателя\ на\ NULL\ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00044}\mbox{\hyperlink{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_ga838b40542faa9aa273d18f921b21fda2}{00044}}\ \textcolor{preprocessor}{\#define\ check\_null\_ptr\_3(p1,\ p2,\ p3)\ \ \ \ \ \ \ \ \ \ ((p1\ ==\ NULL)\ ||\ (p1\ !=\ NULL\ \&\&\ ((p2\ ==\ NULL)\ ||\ (p2\ !=\ NULL\ \&\&\ p3\ ==\ NULL))))}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00045}00045\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00046}00046\ \textcolor{comment}{/**\ @brief\ Проверить\ четыре\ указателя\ на\ NULL\ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00047}\mbox{\hyperlink{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_ga590973be111afc3f9ba15e6939530254}{00047}}\ \textcolor{preprocessor}{\#define\ check\_null\_ptr\_4(p1,\ p2,\ p3,\ p4)\ \ \ \ \ \ ((p1\ ==\ NULL)\ ||\ (p1\ !=\ NULL\ \&\&\ ((p2\ ==\ NULL)\ ||\ (p2\ !=\ NULL\ \&\&\ ((p3\ ==\ NULL)\ ||\ (p3\ !=\ NULL\ \&\&\ p4\ ==\ NULL))))))}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00048}00048\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00049}00049\ \textcolor{comment}{/**\ @brief\ Проверить\ пять\ указателей\ на\ NULL\ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00050}\mbox{\hyperlink{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_gaab0aafd7a4a21ec4f338b19269f65490}{00050}}\ \textcolor{preprocessor}{\#define\ check\_null\_ptr\_5(p1,\ p2,\ p3,\ p4,\ p5)\ \ ((p1\ ==\ NULL)\ ||\ (p1\ !=\ NULL\ \&\&\ ((p2\ ==\ NULL)\ ||\ (p2\ !=\ NULL\ \&\&\ ((p3\ ==\ NULL)\ ||\ (p3\ !=\ NULL\ \&\&\ ((p4\ ==\ NULL)\ ||\ (p4\ !=\ NULL\ \&\&\ p5\ ==\ NULL))))))))}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00043}00043\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00044}00044\ \textcolor{comment}{\ \ *\ @brief\ Error\_Handler\ который\ будет\ вызыватся\ в\ библиотеке}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00045}00045\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00046}\mbox{\hyperlink{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_gae110df81afd885a390bbeb152d7b709f}{00046}}\ \textcolor{preprocessor}{\#define\ MyLibs\_Error\_Handler(params)\ \ Error\_Handler(params)}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00047}00047\ \textcolor{comment}{/*\ If\ error\ handler\ not\ defined\ -\/\ set\ void\ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00048}00048\ \textcolor{preprocessor}{\#ifndef\ MyLibs\_Error\_Handler}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00049}00049\ \textcolor{preprocessor}{\#define\ MyLibs\_Error\_Handler(...)}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00050}00050\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ MyLibs\_Error\_Handler}} \DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00051}00051\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00052}00052\ \textcolor{comment}{/**\ ERROR\_HANDLER\_DEFINES}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00053}00053\ \textcolor{comment}{\ \ *\ @\}}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00054}00054\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00055}00055\ \ \ } -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00056}00056\ } -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00057}00057\ \textcolor{comment}{/***************************************************************************}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00058}00058\ \textcolor{comment}{******************************DELAYS\_DEFINES*******************************/}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00059}00059\ \textcolor{comment}{/**\ }} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00060}00060\ \textcolor{comment}{\ \ *\ @addtogroup\ DELAYS\_DEFINES\ \ \ \ Delays\ defines}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00061}00061\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ MYLIBS\_DEFINES}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00062}00062\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ \ Макросы\ и\ определения\ для\ работы\ с\ задержками\ в\ миллисекундах.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00063}00063\ \textcolor{comment}{\ \ *\ @details}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00064}00064\ \textcolor{comment}{\ \ *\ Этот\ блок\ содержит\ макросы\ для\ реализации\ задержек\ с\ использованием\ HAL\ или\ FreeRTOS:}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00065}00065\ \textcolor{comment}{\ \ *\ -\/\ @ref\ msDelay\ \ \ \ \ \ \ \ \ \ \ \ \ —\ простая\ задержка\ заданной\ длительности;}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00066}00066\ \textcolor{comment}{\ \ *\ -\/\ @ref\ msDelayStart\ \ \ \ \ \ \ \ —\ сохранение\ текущего\ времени\ начала\ задержки;}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00067}00067\ \textcolor{comment}{\ \ *\ -\/\ @ref\ msDelayWhileActive\ \ —\ проверка,\ активна\ ли\ задержка;}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00068}00068\ \textcolor{comment}{\ \ *\ -\/\ @ref\ msDelayWaitDone\ \ \ \ \ —\ проверка,\ завершена\ ли\ задержка.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00069}00069\ \textcolor{comment}{\ \ *\ Эти\ макросы\ удобны\ для\ реализации\ неблокирующих\ задержек.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00070}00070\ \textcolor{comment}{\ \ *\ @\{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00071}00071\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00072}00072\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00073}00073\ \textcolor{comment}{/**\ }} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00074}00074\ \textcolor{comment}{\ \ *\ @def\ msDelay(\_ms\_)}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00075}00075\ \textcolor{comment}{\ \ *\ @brief\ Блокирующая\ задержка\ на\ указанное\ количество\ миллисекунд.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00076}00076\ \textcolor{comment}{\ \ *\ @param\ \_ms\_\ Время\ задержки\ в\ миллисекундах.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00077}00077\ \textcolor{comment}{\ \ *\ @note\ Использует\ задержку\ через\ @ref\ local\_time\ или\ osDelay\ в\ зависимости\ от\ @ref\ FREERTOS\_DELAY.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00078}00078\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00079}00079\ \textcolor{preprocessor}{\#ifdef\ FREERTOS\_DELAY}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00080}\mbox{\hyperlink{group___d_e_l_a_y_s___d_e_f_i_n_e_s_gabeb97579daeb622c6651ed03c4a27479}{00080}}\ \textcolor{preprocessor}{\ \ \#define\ msDelay(\_ms\_)\ \ \ \ \ \ \ osDelay(\_ms\_)}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00081}00081\ \textcolor{preprocessor}{\#else}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00082}00082\ \textcolor{preprocessor}{\ \ \#define\ msDelay(\_ms\_)\ \(\backslash\)}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00083}00083\ \textcolor{preprocessor}{\ \ \ \ do\ \{\ \(\backslash\)}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00084}00084\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ uint32\_t\ \_start\_\ =\ local\_time();\ \(\backslash\)}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00085}00085\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ while\ (local\_time()\ -\/\ \_start\_\ <\ (\_ms\_))\ \{\}\ \(\backslash\)}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00086}00086\ \textcolor{preprocessor}{\ \ \ \ \}\ while(0)}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00087}00087\ \textcolor{preprocessor}{\#endif}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00088}00088\ } -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00089}00089\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00090}00090\ \textcolor{comment}{/**}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00091}00091\ \textcolor{comment}{\ \ *\ @brief\ Начать\ отсчет\ задержки.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00092}00092\ \textcolor{comment}{\ \ *\ @param\ \_pvar\_\ Указатель\ на\ переменную\ типа\ uint32\_t\ для\ хранения\ времени\ старта.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00093}00093\ \textcolor{comment}{\ \ *\ @details\ После\ вызова\ этого\ макроса\ переменная\ \_pvar\_\ содержит\ текущее\ количество\ миллисекунд}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00094}00094\ \textcolor{comment}{\ \ *\ с\ момента\ запуска\ системы\ (@ref\ local\_time).\ }} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00095}00095\ \textcolor{comment}{\ \ *\ }} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00096}00096\ \textcolor{comment}{\ \ *\ Используется\ для\ реализации\ неблокирующих\ задержек.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00097}00097\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00098}\mbox{\hyperlink{group___d_e_l_a_y_s___d_e_f_i_n_e_s_ga8a5051b1292d1019fe8dd3fc5521ab25}{00098}}\ \textcolor{preprocessor}{\#define\ msDelayStart(\_pvar\_)\ \ \ \ \ \ \ \ \ \ \ \ *(\_pvar\_)\ =\ local\_time()}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00099}00099\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00100}00100\ \textcolor{comment}{/**}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00101}00101\ \textcolor{comment}{\ *\ @brief\ Проверяет,\ активна\ ли\ задержка.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00102}00102\ \textcolor{comment}{\ *\ @param\ \_ms\_\ Длительность\ задержки\ в\ миллисекундах.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00103}00103\ \textcolor{comment}{\ *\ @param\ \_pvar\_\ Указатель\ на\ переменную,\ в\ которой\ сохранено\ время\ начала\ (@ref\ msDelayStart).}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00104}00104\ \textcolor{comment}{\ *\ @retval\ 1\ Задержка\ еще\ активна.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00105}00105\ \textcolor{comment}{\ *\ @retval\ 0\ Задержка\ завершена.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00106}00106\ \textcolor{comment}{\ *\ @details}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00107}00107\ \textcolor{comment}{\ *\ Возвращает\ true,\ пока\ время\ задержки\ не\ истекло.\ Используется\ в\ проверках,}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00108}00108\ \textcolor{comment}{\ *\ когда\ нужно\ **действовать,\ пока\ задержка\ выполняется**.\ Пример:}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00109}00109\ \textcolor{comment}{\ *\ @code}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00110}00110\ \textcolor{comment}{\ *\ while(msDelayWhileActive(1000,\ \&tick))\ \{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00111}00111\ \textcolor{comment}{\ *\ \ \ \ \ //\ выполняем\ другие\ задачи,\ задержка\ не\ блокирует\ поток}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00112}00112\ \textcolor{comment}{\ *\ \}}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00113}00113\ \textcolor{comment}{\ *\ @endcode}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00114}00114\ \textcolor{comment}{\ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00115}\mbox{\hyperlink{group___d_e_l_a_y_s___d_e_f_i_n_e_s_ga0b97e172659a59ee4fa56f851643ae85}{00115}}\ \textcolor{preprocessor}{\#define\ msDelayWhileActive(\_ms\_,\ \_pvar\_)\ \ \ \ (local\_time()\ -\/\ *(\_pvar\_)\ <\ \_ms\_)}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00116}00116\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00117}00117\ \textcolor{comment}{/**}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00118}00118\ \textcolor{comment}{\ *\ @brief\ Проверяет,\ завершилась\ ли\ задержка.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00119}00119\ \textcolor{comment}{\ *\ @param\ \_ms\_\ Длительность\ задержки\ в\ миллисекундах.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00120}00120\ \textcolor{comment}{\ *\ @param\ \_pvar\_\ Указатель\ на\ переменную,\ в\ которой\ сохранено\ время\ начала\ (msDelayStart).}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00121}00121\ \textcolor{comment}{\ *\ @retval\ 1\ Задержка\ завершена.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00122}00122\ \textcolor{comment}{\ *\ @retval\ 0\ Задержка\ еще\ активна.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00123}00123\ \textcolor{comment}{\ *\ @details}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00124}00124\ \textcolor{comment}{\ *\ Возвращает\ true,\ когда\ задержка\ уже\ завершена.\ Используется\ в\ проверках,}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00125}00125\ \textcolor{comment}{\ *\ когда\ нужно\ **выполнить\ действие\ только\ после\ окончания\ задержки**.\ Пример:}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00126}00126\ \textcolor{comment}{\ *\ @code}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00127}00127\ \textcolor{comment}{\ *\ if(msDelayWaitDone(1000,\ \&tick))\ \{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00128}00128\ \textcolor{comment}{\ *\ \ \ \ \ //\ выполняем\ действие\ после\ завершения\ задержки}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00129}00129\ \textcolor{comment}{\ *\ \}}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00130}00130\ \textcolor{comment}{\ *\ @endcode}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00131}00131\ \textcolor{comment}{\ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00132}\mbox{\hyperlink{group___d_e_l_a_y_s___d_e_f_i_n_e_s_gaed082c07b9fc4d1894330d885b9b5518}{00132}}\ \textcolor{preprocessor}{\#define\ msDelayWaitDone(\_ms\_,\ \_pvar\_)\ \ \ \ (local\_time()\ -\/\ *(\_pvar\_)\ >=\ \_ms\_)}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00133}00133\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00134}00134\ \textcolor{comment}{/**\ DELAYS\_DEFINES}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00135}00135\ \textcolor{comment}{\ \ *\ @\}}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00136}00136\ \textcolor{comment}{\ \ */}} -\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********************************/}\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.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00197}00197\ \textcolor{comment}{\ \ *\ @note\ \ \ @ref\ \_\_HAL\_LINKDMA.}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00198}00198\ \textcolor{comment}{\ \ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00199}00199\ \textcolor{preprocessor}{\#define\ \_\_USER\_LINKDMA(\_\_HANDLE\_\_,\ \_\_PPP\_DMA\_FIELD\_\_,\ \_\_DMA\_HANDLE\_\_)\ \ \ \(\backslash\)}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00200}00200\ \textcolor{preprocessor}{do\{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00201}00201\ \textcolor{preprocessor}{(\_\_HANDLE\_\_)-\/>\_\_PPP\_DMA\_FIELD\_\_\ =\ (\_\_DMA\_HANDLE\_\_);\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00202}00202\ \textcolor{preprocessor}{(\_\_DMA\_HANDLE\_\_)-\/>Parent\ =\ (\_\_HANDLE\_\_);\}\ while(0U)}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00203}00203\ } -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00204}00204\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00205}00205\ \textcolor{comment}{/**\ @endcond\ */}} -\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00206}00206\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\_\_MYLIBS\_DEFINES\_H\_}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00052}00052\ \textcolor{comment}{/**\ @brief\ Проверить\ один\ указатель\ на\ NULL\ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00053}\mbox{\hyperlink{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_ga5d066a5b9781f9437e75d98677489eb9}{00053}}\ \textcolor{preprocessor}{\#define\ check\_null\_ptr\_1(p1)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (p1\ ==\ NULL)}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00054}00054\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00055}00055\ \textcolor{comment}{/**\ @brief\ Проверить\ два\ указателя\ на\ NULL\ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00056}\mbox{\hyperlink{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_ga27b363f333cacdccc15f5174e096b5b3}{00056}}\ \textcolor{preprocessor}{\#define\ check\_null\_ptr\_2(p1,\ p2)\ \ \ \ \ \ \ \ \ \ \ \ \ \ ((p1\ ==\ NULL)\ ||\ (p1\ !=\ NULL\ \&\&\ p2\ ==\ NULL))}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00057}00057\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00058}00058\ \textcolor{comment}{/**\ @brief\ Проверить\ три\ указателя\ на\ NULL\ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00059}\mbox{\hyperlink{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_ga838b40542faa9aa273d18f921b21fda2}{00059}}\ \textcolor{preprocessor}{\#define\ check\_null\_ptr\_3(p1,\ p2,\ p3)\ \ \ \ \ \ \ \ \ \ ((p1\ ==\ NULL)\ ||\ (p1\ !=\ NULL\ \&\&\ ((p2\ ==\ NULL)\ ||\ (p2\ !=\ NULL\ \&\&\ p3\ ==\ NULL))))}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00060}00060\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00061}00061\ \textcolor{comment}{/**\ @brief\ Проверить\ четыре\ указателя\ на\ NULL\ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00062}\mbox{\hyperlink{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_ga590973be111afc3f9ba15e6939530254}{00062}}\ \textcolor{preprocessor}{\#define\ check\_null\_ptr\_4(p1,\ p2,\ p3,\ p4)\ \ \ \ \ \ ((p1\ ==\ NULL)\ ||\ (p1\ !=\ NULL\ \&\&\ ((p2\ ==\ NULL)\ ||\ (p2\ !=\ NULL\ \&\&\ ((p3\ ==\ NULL)\ ||\ (p3\ !=\ NULL\ \&\&\ p4\ ==\ NULL))))))}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00063}00063\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00064}00064\ \textcolor{comment}{/**\ @brief\ Проверить\ пять\ указателей\ на\ NULL\ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00065}\mbox{\hyperlink{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_gaab0aafd7a4a21ec4f338b19269f65490}{00065}}\ \textcolor{preprocessor}{\#define\ check\_null\_ptr\_5(p1,\ p2,\ p3,\ p4,\ p5)\ \ ((p1\ ==\ NULL)\ ||\ (p1\ !=\ NULL\ \&\&\ ((p2\ ==\ NULL)\ ||\ (p2\ !=\ NULL\ \&\&\ ((p3\ ==\ NULL)\ ||\ (p3\ !=\ NULL\ \&\&\ ((p4\ ==\ NULL)\ ||\ (p4\ !=\ NULL\ \&\&\ p5\ ==\ NULL))))))))}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00066}00066\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00067}00067\ \textcolor{comment}{/**\ ERROR\_HANDLER\_DEFINES}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00068}00068\ \textcolor{comment}{\ \ *\ @\}}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00069}00069\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00070}00070\ \ \ } +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00071}00071\ } +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00072}00072\ \textcolor{comment}{/***************************************************************************}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00073}00073\ \textcolor{comment}{******************************DELAYS\_DEFINES*******************************/}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00074}00074\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00075}00075\ \textcolor{comment}{\ \ *\ @addtogroup\ DELAYS\_DEFINES\ \ \ \ Delays\ defines}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00076}00076\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ MYLIBS\_TOOLS}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00077}00077\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ \ Макросы\ и\ определения\ для\ работы\ с\ задержками\ в\ миллисекундах.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00078}00078\ \textcolor{comment}{\ \ *\ @details}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00079}00079\ \textcolor{comment}{\ \ *\ Этот\ блок\ содержит\ макросы\ для\ реализации\ задержек\ с\ использованием\ HAL\ или\ FreeRTOS:}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00080}00080\ \textcolor{comment}{\ \ *\ -\/\ @ref\ msDelay\ \ \ \ \ \ \ \ \ \ \ \ \ —\ простая\ задержка\ заданной\ длительности;}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00081}00081\ \textcolor{comment}{\ \ *\ -\/\ @ref\ msDelayStart\ \ \ \ \ \ \ \ —\ сохранение\ текущего\ времени\ начала\ задержки;}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00082}00082\ \textcolor{comment}{\ \ *\ -\/\ @ref\ msDelayWhileActive\ \ —\ проверка,\ активна\ ли\ задержка;}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00083}00083\ \textcolor{comment}{\ \ *\ -\/\ @ref\ msDelayWaitDone\ \ \ \ \ —\ проверка,\ завершена\ ли\ задержка.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00084}00084\ \textcolor{comment}{\ \ *\ Эти\ макросы\ удобны\ для\ реализации\ неблокирующих\ задержек.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00085}00085\ \textcolor{comment}{\ \ *\ @\{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00086}00086\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00087}00087\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00088}00088\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00089}00089\ \textcolor{comment}{\ \ *\ @def\ msDelay(\_ms\_)}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00090}00090\ \textcolor{comment}{\ \ *\ @brief\ Блокирующая\ задержка\ на\ указанное\ количество\ миллисекунд.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00091}00091\ \textcolor{comment}{\ \ *\ @param\ \_ms\_\ Время\ задержки\ в\ миллисекундах.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00092}00092\ \textcolor{comment}{\ \ *\ @note\ Использует\ задержку\ через\ @ref\ local\_time\ или\ osDelay\ в\ зависимости\ от\ @ref\ FREERTOS\_DELAY.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00093}00093\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00094}00094\ \textcolor{preprocessor}{\#ifdef\ FREERTOS\_DELAY}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00095}\mbox{\hyperlink{group___d_e_l_a_y_s___d_e_f_i_n_e_s_gabeb97579daeb622c6651ed03c4a27479}{00095}}\ \textcolor{preprocessor}{\ \ \#define\ msDelay(\_ms\_)\ \ \ \ \ \ \ osDelay(\_ms\_)}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00096}00096\ \textcolor{preprocessor}{\#else}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00097}00097\ \textcolor{preprocessor}{\ \ \#define\ msDelay(\_ms\_)\ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00098}00098\ \textcolor{preprocessor}{\ \ \ \ do\ \{\ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00099}00099\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ uint32\_t\ \_start\_\ =\ local\_time();\ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00100}00100\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ while\ (local\_time()\ -\/\ \_start\_\ <\ (\_ms\_))\ \{\}\ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00101}00101\ \textcolor{preprocessor}{\ \ \ \ \}\ while(0)}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00102}00102\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00103}00103\ } +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00104}00104\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00105}00105\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00106}00106\ \textcolor{comment}{\ \ *\ @brief\ Начать\ отсчет\ задержки.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00107}00107\ \textcolor{comment}{\ \ *\ @param\ \_pvar\_\ Указатель\ на\ переменную\ типа\ uint32\_t\ для\ хранения\ времени\ старта.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00108}00108\ \textcolor{comment}{\ \ *\ @details\ После\ вызова\ этого\ макроса\ переменная\ \_pvar\_\ содержит\ текущее\ количество\ миллисекунд}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00109}00109\ \textcolor{comment}{\ \ *\ с\ момента\ запуска\ системы\ (@ref\ local\_time).\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00110}00110\ \textcolor{comment}{\ \ *\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00111}00111\ \textcolor{comment}{\ \ *\ Используется\ для\ реализации\ неблокирующих\ задержек.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00112}00112\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00113}\mbox{\hyperlink{group___d_e_l_a_y_s___d_e_f_i_n_e_s_ga8a5051b1292d1019fe8dd3fc5521ab25}{00113}}\ \textcolor{preprocessor}{\#define\ msDelayStart(\_pvar\_)\ \ \ \ \ \ \ \ \ \ \ \ *(\_pvar\_)\ =\ local\_time()}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00114}00114\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00115}00115\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00116}00116\ \textcolor{comment}{\ *\ @brief\ Проверяет,\ активна\ ли\ задержка.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00117}00117\ \textcolor{comment}{\ *\ @param\ \_ms\_\ Длительность\ задержки\ в\ миллисекундах.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00118}00118\ \textcolor{comment}{\ *\ @param\ \_pvar\_\ Указатель\ на\ переменную,\ в\ которой\ сохранено\ время\ начала\ (@ref\ msDelayStart).}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00119}00119\ \textcolor{comment}{\ *\ @retval\ 1\ Задержка\ еще\ активна.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00120}00120\ \textcolor{comment}{\ *\ @retval\ 0\ Задержка\ завершена.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00121}00121\ \textcolor{comment}{\ *\ @details}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00122}00122\ \textcolor{comment}{\ *\ Возвращает\ true,\ пока\ время\ задержки\ не\ истекло.\ Используется\ в\ проверках,}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00123}00123\ \textcolor{comment}{\ *\ когда\ нужно\ **действовать,\ пока\ задержка\ выполняется**.\ Пример:}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00124}00124\ \textcolor{comment}{\ *\ @code}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00125}00125\ \textcolor{comment}{\ *\ while(msDelayWhileActive(1000,\ \&tick))\ \{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00126}00126\ \textcolor{comment}{\ *\ \ \ \ \ //\ выполняем\ другие\ задачи,\ задержка\ не\ блокирует\ поток}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00127}00127\ \textcolor{comment}{\ *\ \}}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00128}00128\ \textcolor{comment}{\ *\ @endcode}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00129}00129\ \textcolor{comment}{\ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00130}\mbox{\hyperlink{group___d_e_l_a_y_s___d_e_f_i_n_e_s_ga0b97e172659a59ee4fa56f851643ae85}{00130}}\ \textcolor{preprocessor}{\#define\ msDelayWhileActive(\_ms\_,\ \_pvar\_)\ \ \ \ (local\_time()\ -\/\ *(\_pvar\_)\ <\ \_ms\_)}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00131}00131\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00132}00132\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00133}00133\ \textcolor{comment}{\ *\ @brief\ Проверяет,\ завершилась\ ли\ задержка.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00134}00134\ \textcolor{comment}{\ *\ @param\ \_ms\_\ Длительность\ задержки\ в\ миллисекундах.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00135}00135\ \textcolor{comment}{\ *\ @param\ \_pvar\_\ Указатель\ на\ переменную,\ в\ которой\ сохранено\ время\ начала\ (msDelayStart).}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00136}00136\ \textcolor{comment}{\ *\ @retval\ 1\ Задержка\ завершена.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00137}00137\ \textcolor{comment}{\ *\ @retval\ 0\ Задержка\ еще\ активна.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00138}00138\ \textcolor{comment}{\ *\ @details}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00139}00139\ \textcolor{comment}{\ *\ Возвращает\ true,\ когда\ задержка\ уже\ завершена.\ Используется\ в\ проверках,}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00140}00140\ \textcolor{comment}{\ *\ когда\ нужно\ **выполнить\ действие\ только\ после\ окончания\ задержки**.\ Пример:}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00141}00141\ \textcolor{comment}{\ *\ @code}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00142}00142\ \textcolor{comment}{\ *\ if(msDelayWaitDone(1000,\ \&tick))\ \{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00143}00143\ \textcolor{comment}{\ *\ \ \ \ \ //\ выполняем\ действие\ после\ завершения\ задержки}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00144}00144\ \textcolor{comment}{\ *\ \}}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00145}00145\ \textcolor{comment}{\ *\ @endcode}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00146}00146\ \textcolor{comment}{\ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00147}\mbox{\hyperlink{group___d_e_l_a_y_s___d_e_f_i_n_e_s_gaed082c07b9fc4d1894330d885b9b5518}{00147}}\ \textcolor{preprocessor}{\#define\ msDelayWaitDone(\_ms\_,\ \_pvar\_)\ \ \ \ (local\_time()\ -\/\ *(\_pvar\_)\ >=\ \_ms\_)}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00148}00148\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00149}00149\ \textcolor{comment}{/**\ DELAYS\_DEFINES}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00150}00150\ \textcolor{comment}{\ \ *\ @\}}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00151}00151\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00152}00152\ } +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00153}00153\ } +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00154}00154\ \textcolor{comment}{/***************************************************************************}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00155}00155\ \textcolor{comment}{*******************************UTIL\_DEFINES********************************/}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00156}00156\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00157}00157\ \textcolor{comment}{\ \ *\ @addtogroup\ UTILS\_DEFINES\ \ \ \ \ \ Utils\ defines}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00158}00158\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ MYLIBS\_TOOLS}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00159}00159\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Общие\ вспомогательные\ макросы}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00160}00160\ \textcolor{comment}{\ \ *\ @\{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00161}00161\ \textcolor{comment}{\ \ */}} +\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}{\ *\ @brief\ Обнуление\ структуры.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00165}00165\ \textcolor{comment}{\ *\ @param\ \_struct\_\ Структура,\ которую\ нужно\ обнулить.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00166}00166\ \textcolor{comment}{\ *\ @details\ Макрос\ использует\ memset\ для\ обнуления\ всей\ памяти\ структуры.}} +\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}\mbox{\hyperlink{group___u_t_i_l_s___d_e_f_i_n_e_s_gaf5e598848326d48e86167e5099a029be}{00169}}\ \textcolor{preprocessor}{\#define\ ClearStruct(\_struct\_)\ \ \ \ \ memset(\&(\_struct\_),\ 0,\ sizeof(\_struct\_))}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00170}00170\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00171}00171\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00172}00172\ \textcolor{comment}{\ \ *\ @brief\ \ Деление\ с\ округлением\ вверх}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00173}00173\ \textcolor{comment}{\ \ *\ @param\ \_val\_\ Делимое.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00174}00174\ \textcolor{comment}{\ \ *\ @param\ \_div\_\ Делитель.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00175}00175\ \textcolor{comment}{\ \ *\ @return\ Результат\ деления,\ округленный\ вверх.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00176}00176\ \textcolor{comment}{\ \ *\ @details\ \ Если\ результат\ деления\ без\ остатка:\ он\ возвращается\ как\ есть}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00177}00177\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ Если\ с\ остатком\ -\/\ округляется\ вверх}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00178}00178\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00179}00179\ \textcolor{comment}{//\#define\ Divide\_Up(\_val\_,\ \_div\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (((\_val\_)\%(\_div\_))?\ (\_val\_)/(\_div\_)+1\ :\ (\_val\_)/\_div\_)\ \ /*\ через\ тернарный\ оператор\ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00180}\mbox{\hyperlink{group___u_t_i_l_s___d_e_f_i_n_e_s_gabf45f2b60eedf80cf9d1dbe4302a741e}{00180}}\ \textcolor{preprocessor}{\#define\ Divide\_Up(\_val\_,\ \_div\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((\_val\_\ -\/\ 1)\ /\ \_div\_)\ +\ 1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{/*\ через\ мат\ выражение\ */}\textcolor{preprocessor}{\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00181}00181\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00182}00182\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00183}00183\ \textcolor{comment}{\ \ *\ @brief\ \ Swap\ between\ Little\ Endian\ and\ Big\ Endian}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00184}00184\ \textcolor{comment}{\ \ *\ @param\ v\ Исходное\ 16-\/битное\ значение.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00185}00185\ \textcolor{comment}{\ \ *\ @return\ Результат\ с\ поменяными\ местами\ старшим\ и\ младшим\ байтом.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00186}00186\ \textcolor{comment}{\ \ *\ @details\ \ Переключения\ между\ двумя\ типами\ хранения\ слова:\ HI-\/LO\ байты\ и\ LO-\/HI\ байты.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00187}00187\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00188}\mbox{\hyperlink{group___u_t_i_l_s___d_e_f_i_n_e_s_ga0f22e895ac7781c3d1b68fee182c4291}{00188}}\ \textcolor{preprocessor}{\#define\ ByteSwap16(v)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (((v\&0xFF00)\ >>\ (8))\ |\ ((v\&0x00FF)\ <<\ (8)))}} +\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}{\ \ *\ @brief\ \ Абсолютное\ значение\ числа}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00192}00192\ \textcolor{comment}{\ \ *\ @param\ x\ Число.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00193}00193\ \textcolor{comment}{\ \ *\ @return\ Абсолютное\ значение\ числа\ x.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00194}00194\ \textcolor{comment}{\ \ *\ @details\ \ Берет\ число\ по\ модулю.\ Хз\ как\ работает\ библиотечный\ abs\ в\ stdlib.h,\ мб\ это\ быстрее,\ но\ вряд\ ли\ конечно.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00195}00195\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00196}\mbox{\hyperlink{group___u_t_i_l_s___d_e_f_i_n_e_s_ga996f7be338ccb40d1a2a5abc1ad61759}{00196}}\ \textcolor{preprocessor}{\#define\ ABS(x)\ (\ ((x)\ >\ 0)?\ (x)\ :\ -\/(x))}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00197}00197\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00198}00198\ \textcolor{comment}{/**\ UTILS\_DEFINES}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00199}00199\ \textcolor{comment}{\ \ *\ @\}}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00200}00200\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00201}00201\ \ \ } +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00202}00202\ } +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00203}00203\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00204}00204\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00205}00205\ \textcolor{comment}{\ *\ @cond\ LIBS\_INTERNAL}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00206}00206\ \textcolor{comment}{\ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00207}00207\ } +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00208}00208\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ dummy;\ \textcolor{comment}{//\ переменная\ которой\ присваиваются\ значения,\ которые\ некуда\ присвоить}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00209}00209\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00210}00210\ \textcolor{comment}{/**\ \ }} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00211}00211\ \textcolor{comment}{\ \ *\ @brief\ \ Аналог\ HAL\ макроса\ для\ привязки\ DMA\ к\ UART.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00212}00212\ \textcolor{comment}{\ \ *\ @note\ \ \ @ref\ \_\_HAL\_LINKDMA.}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00213}00213\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00214}00214\ \textcolor{preprocessor}{\#define\ \_\_USER\_LINKDMA(\_\_HANDLE\_\_,\ \_\_PPP\_DMA\_FIELD\_\_,\ \_\_DMA\_HANDLE\_\_)\ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00215}00215\ \textcolor{preprocessor}{do\{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00216}00216\ \textcolor{preprocessor}{(\_\_HANDLE\_\_)-\/>\_\_PPP\_DMA\_FIELD\_\_\ =\ (\_\_DMA\_HANDLE\_\_);\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00217}00217\ \textcolor{preprocessor}{(\_\_DMA\_HANDLE\_\_)-\/>Parent\ =\ (\_\_HANDLE\_\_);\}\ while(0U)}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00218}00218\ } +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00219}00219\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00220}00220\ \textcolor{comment}{/**\ @endcond\ */}} +\DoxyCodeLine{\Hypertarget{mylibs__defs_8h_source_l00221}00221\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\_\_MYLIBS\_TOOLS\_H\_}} \end{DoxyCode} diff --git a/Doc/latex/mylibs__include_8h.tex b/Doc/latex/mylibs__include_8h.tex index 13645be..4999f15 100644 --- a/Doc/latex/mylibs__include_8h.tex +++ b/Doc/latex/mylibs__include_8h.tex @@ -1,5 +1,5 @@ -\doxysection{E\+:/.WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/mylibs\+\_\+include.h File Reference} -\hypertarget{mylibs__include_8h}{}\label{mylibs__include_8h}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_include.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_include.h}} +\doxysection{E\+:/.WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/mylibs\+\_\+include.h File Reference} +\hypertarget{mylibs__include_8h}{}\label{mylibs__include_8h}\index{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_include.h@{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/mylibs\_include.h}} Заголочный файл для всех библиотек @@ -13,8 +13,7 @@ {\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\+: -\nopagebreak +Include dependency graph for mylibs\+\_\+include.\+h\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode @@ -64,7 +63,7 @@ Definition in file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+inclu -Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00104}{104}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00099}{99}} 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}} @@ -79,7 +78,7 @@ Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00104}{104}} of f \end{DoxyCode} -Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00105}{105}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00100}{100}} 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}} @@ -94,7 +93,7 @@ Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00105}{105}} of f \end{DoxyCode} -Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00106}{106}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00101}{101}} 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}} @@ -109,7 +108,7 @@ Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00106}{106}} of f \end{DoxyCode} -Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00107}{107}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00102}{102}} 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}} @@ -124,7 +123,7 @@ Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00107}{107}} of f \end{DoxyCode} -Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00108}{108}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00103}{103}} 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}} @@ -139,7 +138,7 @@ Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00108}{108}} of f \end{DoxyCode} -Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00109}{109}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. +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_aafbca7155cfc97b68428da2b0b1200ef}\index{mylibs\_include.h@{mylibs\_include.h}!BenchTime\_GetCount@{BenchTime\_GetCount}} \index{BenchTime\_GetCount@{BenchTime\_GetCount}!mylibs\_include.h@{mylibs\_include.h}} @@ -154,7 +153,7 @@ Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00109}{109}} of f \end{DoxyCode} -Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00110}{110}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. +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_a9911aa13a8fa67c35a261d1cb3dc11e7}\index{mylibs\_include.h@{mylibs\_include.h}!BenchTime\_GetLast@{BenchTime\_GetLast}} \index{BenchTime\_GetLast@{BenchTime\_GetLast}!mylibs\_include.h@{mylibs\_include.h}} @@ -169,7 +168,7 @@ Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00110}{110}} of f \end{DoxyCode} -Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00111}{111}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. +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_a09b9a6ef9b60605fc0015f6b379d8420}\index{mylibs\_include.h@{mylibs\_include.h}!BenchTime\_ResetStats@{BenchTime\_ResetStats}} \index{BenchTime\_ResetStats@{BenchTime\_ResetStats}!mylibs\_include.h@{mylibs\_include.h}} @@ -179,5 +178,5 @@ Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00111}{111}} of f -Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00112}{112}} of file \mbox{\hyperlink{mylibs__include_8h_source}{mylibs\+\_\+include.\+h}}. +Definition at line \mbox{\hyperlink{mylibs__include_8h_source_l00107}{107}} 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 0123200..6185a6c 100644 --- a/Doc/latex/mylibs__include_8h__incl.md5 +++ b/Doc/latex/mylibs__include_8h__incl.md5 @@ -1 +1 @@ -64f981d795a52476ad96388f8545ab10 \ No newline at end of file +e67ccbddf49372db817259b2bebf33e7 \ 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 f28f26dfac09cdfad0f7db88fda5c7c758c029c7..f083965929537dca9a577b06c16a3f19ceaa4085 100644 GIT binary patch delta 24602 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 z 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 VZe(wh=VK2FI5s#6B_%~qMhXT7fY|^5 delta 24060 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řTthZ6i!G49LhebxBi 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

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

  • Qj0Vp;V0NtLFqc{q+M>UPiN4=S| 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 A@Bjb+ diff --git a/Doc/latex/trackers_8h__incl.md5 b/Doc/latex/trackers_8h__incl.md5 index 5e38f5b..001c007 100644 --- a/Doc/latex/trackers_8h__incl.md5 +++ b/Doc/latex/trackers_8h__incl.md5 @@ -1 +1 @@ -3f6ce4a82ec0dada7e006c4ba3a2e82f \ No newline at end of file +812583958a481bb84d7e2b0d1ce1fafa \ No newline at end of file diff --git a/Doc/latex/trackers_8h__incl.pdf b/Doc/latex/trackers_8h__incl.pdf index 754e36b11a0bddeb94a0fced10a3d842fe9c0b92..db25154df46e1f4264141bb9e7eb700e1f80d1f7 100644 GIT binary patch delta 20620 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 z zJKLR|PCmlWG{O{Nr;B2PlOm*(ax9pCzzHWiLUK~;4?|NYBb`puUgI?FGS0(h@Ajvh zn@4!3iF#QkxzO=H)yp>20o;+Qkh)CSqr(9^AjHU* zO#+!0gqdU`2*zN@l#Fn{`^Yqosv z$s4YHbo+Pj{^IdRFxNG&i8wx=MqDqy^s^UUfB7gf&-M5+z&Qauk(JE}&lL#B!c3s# z2m2(#nbud%F??UgJc;H0&v(Vn{>KrlIB`j?Nz{-em{19N5K{&?^BNdCF-m67i3&Zt zo+G~%4t@SV<S^4j4!SjDLYc5|NqplgMAbStOc(1VB?DYYsk_W8@lvg&deS;l32H zne$)*q6tU<3|BfhjQuDF7II)d=av+oMOMxPL=%tz$myvvY`7kQg&deSVZAP89Y;}k zj&-MXk2P%_u)bwIZIzHUV%=cvv_6teI$_ON<%kueP>Cm;Rpbt527j_Ol%=?vF%kul zmqjTqApQ}451-}-_!GQ1z@O#`;-ma45aW5e2kGkb!<3w7l$>XjoOd%@E)`Yi*5yr` zH~{B#nPLP#+cJG_u4LKPv9V#0*~CG=$L5tHDi3TtpN{8#LI-$R5a~5Nc9o4$V|Gsu z@a2xazCQl%$B%#E;eQifybk!X9c04@wUq;%bup~J0Sk7uSQslb3qoTg9U+lOQMe{N zIZUaiI3bUc(u=(p2iq)dN{ia&y)3xKvQAm0UhTa)I1u@h{dM2#fxqT`1DSOInSa&JBeNs4(?3i*i&FmL zS8Q0b>9%%Tr;Rsgrp-<_o6VoK$DcKClALB%ZJQzdGvEZ#R(a}cqiV2)A%&zBe)UI0hx#{bXMX$r{`0& z09}U~Ihh#~yMHKhU`AH4fkC2C)JwaJ{j|T>O(t^@(aNG5t@m1QFaCbs56hq96ss@j_f^d-f6XU^$Ra|tYApMgSe96q z$V+TX?0-v?HI_BjHS!wU8v7chFVR<`(&NM8QR9ji%dNH*i4~=rW1EXRi@za1Y`?$s zf%0!vJt043f4t<0(%!_+6W&tu9$AqI#7v;r1WJudQQ0ySh?zjK3FK4Lfvcc?v85z# zm-%2c;o)tg^Mn25X}u^=&IF7=V_;5TX<%>Qcz-}t1ChY`z*_-661Xow0zU!V_5cfE z8k+8=#Wi}SqTyG7=U@#Js>_3aDSzfy+FXw$TsGV^v7186m6ll9*_)lk$}2C|3&w1*TpKsy;V&{p@RqQ$C4$FH)1s8L#8rHsJMtZVFm zPGw?~DjMbsXG$%43*kmI2MBRsOjb{9>wlPKZf|Bs)*#$Cn+fkMv4aX%IRxO;M#N0b zji)-8Js7q(J1M7ual;^M)(5#>FR3Vq3GVWQQ*&u~8YdPh(GaqhN+B#%fLGv#XrUt( zLPasfZW$$qaA}EE7L$AkMYMdX0ni)S4Ti@K`pS}9w{Ar_<9~cx zB9TAZI4&4%3j~9ne5R6mq@3ddAU9t+D=0~nj3#4isWJ9TXYud_y2K9S6OBFUoj2Tg z?b!G?Uf4aSX?)q&7u@ud#m=;S)9M@7c)gXO+mAeuTK&RJ$Nz*c2(R6^a_R*!f4q9e z*4fjqD~%*Cyx~g!{3Y}2V&VKexqrB(>Bc3CAGzd5OeQQGn#X<2Cs2_5oY5=QpXC*9 zdlvARfY$_6U=csf9{rp#@7y@dT*U9bEy{Jy z>)qFTwkciCyIptZ-RXW%e$w`=cG!8y{h|Dx`=837_L(~qE^y`f9gg9vLl7BCP<0 zwJ@m+9|@CiKWW^j!i?zdezH)vHM(>cS?W6CBCdWsdB2K_P;*G8S!~YqsJ+TQ$Ii{Q zXY2$PU~+Gz3Nu6+`$Ewhuka^f3I{u2g9iQV5ZAArIT_GS0-Fu`wSQ9#0!%(NVgk09 z_thL(8}JTh@I5*+?N~4~?H@U~J#5^x%Dhhx+t@WUc6{s3yt%)wUM{MucK{vR=c#vQ zFGaRe9gAKm%i4WMJ}4RL4p3bIbf|!;$}*cxKfA@vt^$|PT~$ZF+56miHJBc1#ENcl zPb_b^(C17DwxO$@dw(NY6iNQAZ)japan+5f+Mz3-(n^a%Yt?+dba3}ITW{P#)_(Eg z-pQ>C4BhDncw4F7fsH#CWLQx$0b<@);r`eAD#X06!u>DzRraTVHCc#28PoU+YFSuQ zYlIb5Mp!z^2xD<0%r7uPe~^WGnWEK3g`L7)fddT=q5IGtlz&EiCDPGc^cFge1XmOi zcOs4zw=urp&nkHznM&TrrjmD7XHp$vmo?C1{A;Z_iXE(KPbZMVwpJ?G4_}p~68`yD zUV2SMFRSMrc@A{EX)w=oL4G;~@>7s3GtPc|rp2@`C7Z@fs|l#X=1mizB5p42sCC=| zC{9;^8WlOjyMMwq$sguH{q{%}W+%5BYCkgpFb*ftn;*$zufD*JkhP<2)zq=GN2?u2 z!c+35_!i_X@U`c)`@T)S%{`<%p*<0_TayD&xX;IG-W~^st4UaRpd=!$HoUSt={X!<12bpL- zBkZvZbA;?;o~&?CnDP`KmoT-dkgSPVX6FpdpeUJqAZudYpOVIeYL5=1jUmS8D1{qm zE{M&XM}Mz-VEVEL74hnaP4pqj1*7VlrMzK)8nP{7-)T`p~~NesJeAe~Ii3+_LzNr=Pfe&AoV= z@4#`KkL4d>vUTsHp|$It|J`fP8RwSUK)QSZaDUf{C8lXktjxn2k7Il-KZRewU%_wY zMXS?dwOExrr&U3m1>2}@C?eTfy3>L!MbSK*M~a-Ls^Bzd+-c6ZlNnY)I{mUy)Ktxx z(Z!i#WEGi_mEO{#D}tzA$n>u4bti^GXtrzm(ew3k!>S5%d}iZGgITdxeHgn!+AnuF z*njPvwvD(gbO6a%v~r@YpBvW$Di)J=sz;2ZFu5?d^psijIJZ4EX?5eJmra^HdE#a6 z0zUC*$AuGqP%^!-edFM()V^~O=<8va!%|eo6|q??w<^}MfD$YlrIeM`E8{$Mp$TO( z%G#8+vNg);vi7PjW&5ayyx$H!rFcq>OMe9-y%zhv9-z?o15cOk4;(H%8aQ71ThAM% zmZ@G`z-*6n{4R!}0=rQ*mR?ktL!pQ-;!l>B)zuMdC*D8x^ebt3-|I$(GN0CwCN=KvPKF1@Dj6- zG&~m6Tq0M8IoqgZ+A`Fnop-D2-#N6wG#%MeNMuAkURX>iefC=NM+OThX6RE)Ps}I= z6&vagQ^)>7Z$$#cI$Uhtfh_JPmw)Px5}n@Ri6*KNdlN!EeG7)-Vxm9ungJX(CC1)V zVhqjK6?$-0KTuEh)Z=;|)jMeAK8tyC%@_92(%cA@S<>T7RTdu+kBcNCHi|@a zn6Ig@M!4vqcbq8)^d2u0d6+uE?sH5c*|Q0tXTDg16D0>R zNE;O58de-!v-jEQn=Tx?_J8#&aZU3bw_KN>_Fw(Vop(GvSF`$xo(=mhKe~QN^;N4^ zJ(kG7ZPBzJZkxSzw%efui{tXu6&JL2_&e^JsV}=|^tGqI*ml8q{6=Y5E1gw&Vf&?X zF8CUyg?Avt{hPi+!ZE8`FSRE(<^9J!Y)cNzk7xkHhmoQQ2nL{sQ-7jinio^zVk@UA z|0A3gIjfx_uV}tmC7XcN1UO0$n6kTw`AmmvQz0ukvPUX zO$EI_Go+7Uj6*X_1371OE+*``ayUl7uDo419dw4|?BVySI)55w8D}8ICHIcA^pZPp z?%}H=jSci&Do`BwT*X1sEDe?hj`>-wNttQI5$o+7vHBHfEj^6O-XYOtYk7XX)smmz zKyU8!?Jv$J4%jF;vGXp(^^?(5bJzg5T*`u**KM=5(odw-C z^R_6JC1_KwH-C6+aeJXPx4VIP^j)?dKYjS4?vPO&L|tP;k6g@WcT828vx+?8Ei$a4 z$V}DQ*MrSBVCXFsEIIG!!%u%Ov<4q}bLi1qghS_^#p$6fgDXhn`k_m+=gRcGe>eW6 z@t(OCM0<~qzVCBFXEZC$kL8-VLkiE5Jib7!&*HQ@-G7{bks1~xw@tR6XLq*e>^b|e zg|H-Lk6YQ%uN4niv6mg#dD$7Wm7OkI+3B)%_;lII7=$%Q%UP*jz>e*#jH6kp6vE8U zR(85f^Y^nG+_Sxu=KJW0viG!?Z1C>!ro9<2?^IwjZEnhlX z_U0Td6MsYG@qGCxB72ZbiF}UvDQR9SMeIP&SwC`$><}GN+#%XSSh1+t)8no5x)M%? z_S<0LIYI5`s`}Om5;o1wrov;~2W1DxK(Fb+ao^1YTYfyV@0zu9?`aSY4Ssrm+Y=8D zE+vodxM9J)Hw_*(a6wFfY!u_xvpY)nqr9A@)PK&qk~;!BbKv}(Go)}19Lj-%IWR46 z3J&2MIFthibKu-NQ%Vl($br=ynD*aiL$Z2*zZtL}% z%InDMuh~NxCFPIr4B-%KDKy+th_w`=*Lj_^r4U2(5YxFrl#a8l7qZhfL#BKdf~NK( zQWG;9iJ2QNmSqU;R4k5PL71weB!Vbg;C~of$o~(vz$7Q+&F-%p-NMZ_8awSn4uew^ z$NTZMy@hnUjWCPs!H%J1_-SXHX5%=Hc}3wopQ1}v-RdSw7c^XZo4yt zU5dxthUSf;VsX7_X0Alg+vBk$Ny?jI~6-&wbG!nd9ne1P;^ zd+pqZzCQRTDl6RvULCV7ZT-&^?P2rKSDase>707F=vSOdf9do&r`G>CYd(+?*pV`` zBGrvItVy+Fjj(Er5f&NNCOrIy)^$8fVPx z#{@Qh1uFC+*`Uu^+I(9dGe$9;J`a@APT_aRhc7eUg?3x98mJ6Z1@yp%z<;;x4=Yb8 zmY`Cqqyqy1K0pT;2}Wx3EedB>!!q`eq&tu2K*fK=joq0%WAhzI<>~zJ(V)-Vh`#Jb zw1LvYBaYmUjj0=xow{T=QVa50KxfBFx4)Yn zeV3gT)0sZNChc*5;8}bK6@Q|$SVpi(b95hi_qIVh1JYYoushX8PwN}l^>tu{Yy-MA zr)ZT#3+P{()fGZO>_Ql}UfI^IIN8yLHiq^g*_%gSajWQC$BDAa-ffq$VUek+HYPqc z7BHi3#9ZL<(957bk35nWylu5P(2^2cEmw-GEtXnsf@^|z ztiM^C>6+55+)81k zyv{EB!o1`JzTs}lWq-x)9J`!*`27Jb4AwCIm+7`LG$b}*MUM4AWu49NZz z$7!~D*`MoRz<};3j@MR!kRfSORN|yzC7YVs-U9x?47*g%2H0U@+wf_OBdbd{r5we` z?x2|DVmQQXqA1LEAT#S_NjhU`$jgvNho&j7AjmZHA+uh}C4ZQ`4~+@Z!#}nyM}9wn zVN^%54b+63A63Zx?GJioib~?v1;PUB<-+Awo{HOS&vx6K#?2`k?_(-5FXj9kNF5*% zGEUA=Ue3L#sZZSb^FL$n4S&Dut)Wu~dvD{)Yhveasd$$a|J$UTzx8eeP?ejvZxmT;HH>TToP7ulw{ zQ&Nj4&8Pd?eVsnO9OwgCRL-!_$L{3$hVSJ0*quC|m*r91 zWWqfyCDOQYC(mcR`w2jkob$U-K7frj?J3`86~|Fg#3XeQ6Zs-pQs+xWijSzr)wk4) z%16{jb$^b^4WAdP*?W7VQ!2ZPtOnW9a}hgwrV^TY;LPsnsexqq=EB=p^kxV?xS?!v5#p1e|qc6sKV zP8h?kmxhQ$XUR(8)%{SfQci=7QKcBw( zH}^by{r6Y?dCyNj-2MHVZhZ2Y>#u#XB{(l$y<%})`Yzn?#)BB&{b1+0HUB<-?GL%K z-wYgi`S}-~H)vpx-jD`4LPiP+8>c6Bb6xsUig>;$CC9j8H350p++r@6IQ*M&CLo)D zWPggS788)n-~F*zhRbBv+hPKOW!N&81*|3@XKxzSrCcrcRrZJMPuYKI7cS;5R=&w| zE=(-QE^?9}+c=5-u#oZ+$GbU>=M+%v6kg&Elf%e@2;Kv0$MaAGy(IJfbP(`d1^hN!HXv?>5DDEt5g_ynD!%zNP8r{U1*47Ga&Xh=SU!u?r?(0`NY8N3=j zgN~r*@M(BzFFJ_&(2FqNQ_;idM)Xaz1J-acq}++-!&iXxZ{k3v4^^T^0XrT=$Dr&b z=w@^Xd9gq90buer?sxFiHo%%9)P&}u_2?daapoGd1ii)IhU(D8=xVe9cV=2L_h#@Bm3d?JLoH*pF}Ira&!^XVRIYP%4bt&?@v0I)umK>7-Ctl9`n` z26$J2u7z56qaL&$zWwMY=yhxtPG_FToCZ8DM>AkNedyPCfEyazI)BtiCmPY0yXzrm zJ^Cs71$qU?@XyG4!7fw_x^R8wRlxi)Xc6@G2k_*(_+R8^_};?3z)#Ce27KR!zD{Qw z{T#iGgSZmU!6`C|tS8^)Ho~qchiAv26=*fg_k&RTn;`t}Cw6k2dz}9v|Am-8bRy$` z6-l6Pqwk=fVFgAS#ebXdt@t(kH!_7RCEq50<-W;3#s5}X2BW?VU4`yJKSck+E<7I3 z!j^+VAY=z!`3w;+xb`Tv$e}eB@=&xA7Htc|J6c^$}_08WL0l7BQn@0Y=M4XpPrz_`8Wci0Yd7sO?F622H_W+`5SJAl64if;#M`90S6 zALD0Xmi~Z0fj)yA!1_Fzj3txF9Qa;FR+0{~liW}G$ZOiXy z*KxbJH1{(12KQI)EO!pR8D8cid=a1Ell*jkDSr+BU4Q;P{ykxd@GIdRQ5LTfw~PJa zKcsQeBx$ZRPim9yllDumTG|0SpGW)9f!sZhPjFkgW^Nz4m(=h9@@w*Iz~`lC1viTT zrjjS|9pon5M~a1O#ffAho{diP37G2_$Rp$|naIt;Gw}knhKw<46W#pN5H#@5qf`8| zFt%Sq&41U5c6>AWM6{zGj7UAS`E#y{PjbIPuXArkR&Oa4k=tKDa7$TE|!>Eh@16qI@Gk0fx57=D_6m~bd99@J? z!YDt67B1ulP|eV6(w&*cZGiE8~+))8}|Gzpf`J9-#iUFhwgo(U%GAcri~pN z)?aZe74HGBSkFOhBTT?xzs&aHid9rL&X@5x~ zUK}ebj7AFb!=Yfn@AG=xc`m1>IuyH2wz3}*;s{3N&9Q0i(R89c%_m|PURXinv1O33 zEGMBo9fhQ6=a)%G+gY*b`6YEIdBvAX>PAU@xFpu14XB}_JlY(KrjJdHMf>sMc`X3n zGd0#4O`l@$EC%mnumW&lAv_Rm_J6OM8cpN&XmfhnmQ`KN?Ngz;Zks$MHf5z;QI5K0 z8-O-|(!SV+ZtRCDu%IH60DQE81N?&~I@EPq?llIE7R z(l(q)Xm@Jbcl}BKNE9k}O=;PYn;YV~n*FPzG}_g*BbwebuO&CPkov8yPzO9q;?vr@ zra{wp!z9jJ5QWyrw$_$3-UdxZ=}73PjPb3EHPe*#HPN&+HaWJcYfU>WO|UDC=3iIX z6AbDHGbd26Ioh?bC03Yj41dL1mrV_KyHVHt>v{uvG;n@SMR~X8G$yv&p=JTQk_)UH z&SMZOPNA9ehi4Yk9>rz=LZqY1qtKI<7>sE=^;V8YUCYNqG5EA%cq+XDR%CVBI;Fi! zn?Td)^JyWj#iCvRM1TRYQy-n5vMie-#-t4lsF4^Yi$a7H!& zj7JMw3ZqlfXc6qpIQ)TzJf6DNP+Es6n?ef!{uxQx=y?T0S%0_{J`_7E%BKOL>*|^o zi%#om?^@QM>AXA^)nZ)-$#dknt_{uYCgSvG4&4<>PrJJn=4ut5P*EPEIbB^Vx)B$L zX7o@uW)g#4t5I#KOvl4(bSXvRs}e zu=w(Rj98k*Ov7k-KQYoYqoD+Ai2jh#@_ydP(aq94q*;u#PNQ^bwzLIuG@5gW{rdry zX?(g7yEq}&=@ayc`XtgwU`A+C52PG|vJ)}torD{4s2l2>&ys)pacB2LJ#>)OG(TIi z6H3yw&fzrZIW3k`5wvFve9_1V7A!Mim3MfGxFx|1RScTCQt+Z5(ZW@aC|FwS*&M8D039GzIn`p*xHfC(! zuJo1XM^_C;r%?woN_@0ICSWXV%NC~BgwpF;lfy-p(J^0tONV7180OJLg8* zTchnjL-2n*nCwtAEkGE(0>r1-GDU9NwwXnhxK_%@(bd}4X39q3wAi%yHO zrCt_-7)-(p8f%4$jDprUEeOxEzeM_~WOthsA4y?<>yt)d3#*k05$U;R5sCc)(2-0N z-+0KRgU9n1Grj-|MJG>)&w%OG0jomvY1l;zvuwk7eg=IsWG;#6?IFQs^b2b8@H^79}*72ITS!EE2wL3inU?&qLaH-dW^^xRSy(fgp4{t+Q% z1wzgSgk0Amw!zksYC8D3eGdRI(YNQBNRL4rQv2B2@DcLSugy zA~YVJt%vY}Ft9tQbMgj+rd^28^pgn9xErCF5YFC7|CbJ%y*Sy28qiCy9t3Gj-$H^< z_y`GzbT8c2WaG-|mlUCV6ycIw85E9iWj$hkq@OG8P52|PJj;zjC%_SIR8KNLa*!+G z@_Qym^nNbZ>+)2qO%)vdfq_cqN5Owz4{k5GBj9+nlq-OA4g6ccb%NUq?g+S7z=;Tf zPjjQ-)`NQl+zFb)<#XYlXhdr&;R5h%00y9PKJ*E=3^)$@>4R2%Xb!lg;O+zW2sn|I zqbcjb-2(0ixYI00=X^c)*FfKWJ$JF7cg?zL7F}jUm$b2H?Y6q{fa z8&hi}kDhFVCFMrwidT2iP*$o3n!KDB2I+;4ZvY>Yqe#UV^!z=X2c^LgPRyq0oU6Au zQT@mfjz^dy97ZcpBs0L_9>rPRB$EvJ1i4Uzd`wOmIpkEY!&&`E(?#U3XfL=U;5hPE z_`XfvMz@d?bk4zV1osHIBjA6IgZl)WNKU}_E%?4k-h?gj2C4+t2yQ93N5CBc_X#+O zyaB#O{z6fS`4nyhN625m*T|n?SbqjzC9ebYI(Z$s_Pd_C`s#xWNLFTnNIVPpLRrA& zt?nnk?fGmJU{nHD8ZhcGSA-^^8m_1(J_gXw-_x)<(og=@8%;*`G*y3*S5X=qfu6hy zEx(GQ;O2sB2e$#72+(T)y@oo$?F6?6TpAo;8TcBwD0vCo%ivx^Rp4}RbHQ22D?QLm zKRMo$m>g;Hl3$ZwARo;5G4dh{UnVcG@K@yLEc_*e1rWYOUg#-^pe7sSBX~xGP=l}% z@&)p<-eOlI)8r&aVD5h+;8%ic1UCoVQgHWy6Uh-$)UzVuf=Ujfmw;GCNDumeh2KYy zS&+Uaq9>*R0!FEqm~a6=;5`z3Bti7VuH6u&UgF;S0is^w_PYV1UgG+#08uZoZVN!v zORQJ}5cLv^mjXn+#GHiyf!9yId!V=^Qa5KUjy9>}YcNY+gIRz28qCty5Kq2Fzvwfb z_U+p}Wo0m959!HKWsy#hL7&B)^Ks{6xN{}$ycu_H#hnef^D^9-#GPT>S%5or+<6#} zhpFhqdf$1`dfksZU&5Ww;Lc6BGl4tfxU(2{Msc0qPYQcx)UcqL1-(sl(?NK_B%nSj zDTEm<1e`Afns9#v{Nvy{Gw zJr8K~JXG>LRG@<22yQ930dSvy%YYN1bP;s?KIW_7SAuH zhP5b6eh6W8PdEjSsXdAE$RX^YPwkI<7CssIAly#?d_R0R@`q?Yk9#7&hm;@gkGvYb zGxE#IehYu3Je%mp5FCoKq6fp{BhS3Vif)CBhk7D6(_nw(rttL0+AzylX=Gfs31Ye$ znV(o3xe)4`8ooTDZ-P4aM;gPIMH-A!W9c*dBUR9aqyd&eXGeuuqp<==>5GhAw5YBh zuhPqbg+MHu~&$+fV&za2{{zYa>imP1vjCT-Mw4peE5Ws=@7l7;Pc^4#_wv@P9Wv2=`SMjX1l@n3 zHMVkUdUy#x%*h_3Oplv(o zTa&%ohDi*ECl>l|4jlr~CY;2Z%sR5&Hh-8tiRhS3xA~eZl%0#s z+0b|r9@%70$?%6xR&sd8HnVEkbS9UyG&TqSA(*|`eB3J5D8tcI|ftJGbI2uJE7 zR!d#PCQpq>;?#&)Yiknye}e(#lXOia0Wy=BO;ZISu;T~alkrU)fAi@`9xY~1yXRdP z7n{Au$?bWu!x((z({zrGZO?}>m`!2*=$7kOdb?vcn@p1Tm(#+>T^J_Qwl@2a!_yKk zcJ=6|p6`scHhYVn;}{Nh_4Tv|wLj1E4<9)!HaFX?^*l(qmu`OTj%>4(yxw^^AD7Eo z(*6{mmziymzBjPseur(a~zq68%(hu&ti>9q=k>hR2}=;nz%00K5|$vj&{V3a3-E>VJ@{Vv5`3w+00->XcfiM*Ujr zH}?rk5R5vF)*<*O^-u6g>XV?M)XSllQ~m+`gJSd|?bX0TSfd^qXd2a2z*W*iLrH_& zMssNcexn$(lg>`?OzN31FX_AlKa~6sFe%2or1KK~GwFXWF^dGf(Cf|V)#?u3cE+7! zlyymqn)XCDWDI=U<$0PlD?Puf)01RRA^|azhfg>LR!LM&S5&jbPYeMDR!LM&S5&jt zP|pH?U2EGg6n)pPxDOjk7}%0**-iy4Ahf#v+sEJu(1z9f3zn?zr)Mk4a z+n#)V?v-@T(Y+#oQ49>D1n7hzN`OTSMZmHYF-W2WQ4C3DG89slA_^JH5RHHkoT2Fy z!u9ziAYAgDs1X2!_vN;RZ$JS<4v!9+%cjzQK+yGdZ^cbjN$t|B=1Du~V_ALoh*nLZ zms|bxhS+-C^@`Zg~~D zlvRhVApDZwb$=#=(VOG>P(Ib0%~m|un`|HK_3<#aB}SjEnytXf{AwI9$lr;kzY!gO z!z3~Evw*T*L`Y&&_A`|0F%nN~@xQArWc6I`{#ftl=4eRUJO+YoGuW6w)P)pS8$J#_ z@;-bxh$Ct_T`XDx^;`Xq1#2ZlF5Bzywp$3y473!(d*h=c?76-&T`IY43ZYNkLFN->mYBwH#`$BRwyOZ%rU*pU8RL>p6pV8t7LQfr3)O|Yl5}nReiE& z73U7V1LKE+CRW7p=rah+%f!FF}*j7^3a_Ig%x zuK7XkTH)q>>FFL`VegiI0+in^_LI6*AOSa%+f}A(Dh38d27VyHGzFxN2gnNO020g+ zAYv|%2sQ+WN%_>3UhQ}a&&ldWo8O8F*!Fi3MC~)Peux9hwp3v diff --git a/Doc/latex/trackers_8h_source.tex b/Doc/latex/trackers_8h_source.tex index 8d95a36..90a75ea 100644 --- a/Doc/latex/trackers_8h_source.tex +++ b/Doc/latex/trackers_8h_source.tex @@ -1,5 +1,5 @@ \doxysection{trackers.\+h} -\hypertarget{trackers_8h_source}{}\label{trackers_8h_source}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/trackers.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibs/Inc/trackers.h}} +\hypertarget{trackers_8h_source}{}\label{trackers_8h_source}\index{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/trackers.h@{E:/.WORK/STM32/STM\_Libs/STM32\_ExtendedLibs/MyLibs/Inc/trackers.h}} \mbox{\hyperlink{trackers_8h}{Go to the documentation of this file.}} \begin{DoxyCode}{0} \DoxyCodeLine{\Hypertarget{trackers_8h_source_l00001}00001\ \textcolor{comment}{/**\ }} @@ -8,162 +8,161 @@ \DoxyCodeLine{\Hypertarget{trackers_8h_source_l00004}00004\ \textcolor{comment}{*\ @brief\ Заголочный\ файл\ для\ работы\ с\ трекерами\ @ref\ TRACKERS.}} \DoxyCodeLine{\Hypertarget{trackers_8h_source_l00005}00005\ \textcolor{comment}{**************************************************************************}} \DoxyCodeLine{\Hypertarget{trackers_8h_source_l00006}00006\ \textcolor{comment}{*\ @addtogroup\ TRACKERS\ \ \ \ \ \ \ \ Trackers\ defines}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00007}00007\ \textcolor{comment}{*\ @ingroup\ \ \ \ MYLIBS\_DEFINES}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00008}00008\ \textcolor{comment}{*\ @brief\ \ \ \ \ \ Дефайны\ для\ работы\ с\ трекерами}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00009}00009\ \textcolor{comment}{*\ @details\ \ \ \ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00010}00010\ \textcolor{comment}{Есть\ дефайн\ для\ объявления\ структуры\ трекера:\ TrackerTypeDef(num\_user\_vars).\ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00011}00011\ \textcolor{comment}{Структура\ состоит\ из\ следующих\ элементов:\ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00012}00012\ \textcolor{comment}{-\/\ cnt\_ok}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00013}00013\ \textcolor{comment}{-\/\ cnt\_err}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00014}00014\ \textcolor{comment}{-\/\ cnt\_warn}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00015}00015\ \textcolor{comment}{-\/\ user[num\_user\_vars]\ \ \ \ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00016}00016\ \textcolor{comment}{Также\ есть\ ряд\ функций\ (дефайнов)\ для\ обращения\ к\ элементам\ этой\ структуры.}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00017}00017\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00018}00018\ \textcolor{comment}{Параметры\ для\ конфигурации:}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00019}00019\ \textcolor{comment}{-\/\ @ref\ TRACKERS\_ENABLE\ -\/\ Включить\ трекеры}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00020}00020\ \textcolor{comment}{\ \ Если\ трекеры\ @ref\ TRACKERS\_ENABLE\ отключены,\ то\ все\ дефайны\ определяются\ как\ ничего\ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00021}00021\ \textcolor{comment}{\ \ и\ на\ производительность\ кода\ не\ влияют\ \ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00022}00022\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00023}00023\ \textcolor{comment}{@par\ Пример:}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00024}00024\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00025}00025\ \textcolor{comment}{Определяем\ typedef\ трекера\ измерений\ Measure\_TrackerTypeDef}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00026}00026\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00027}00027\ \textcolor{comment}{@verbatim}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00028}00028\ \textcolor{comment}{\ \ typedef\ TrackerTypeDef(MEASURE\_USER\_VARS\_NUMB)\ Measure\_TrackerTypeDef;}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00029}00029\ \textcolor{comment}{@endverbatim}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00030}00030\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00031}00031\ \textcolor{comment}{И\ через\ @ref\ Measure\_TrackerTypeDef\ структура\ подключается\ в\ другие\ структуры}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00032}00032\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00033}00033\ \textcolor{comment}{Для\ работы\ с\ структурой\ можно\ использовать\ функции:}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00034}00034\ \textcolor{comment}{-\/\ Для\ получения\ значения:}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00035}00035\ \textcolor{comment}{\ \ -\/\ TrackerGet\_Ok()}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00036}00036\ \textcolor{comment}{\ \ -\/\ TrackerGet\_Err()}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00037}00037\ \textcolor{comment}{\ \ -\/\ TrackerGet\_Warn()}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00038}00038\ \textcolor{comment}{\ \ -\/\ TrackerGet\_User(n)}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00039}00039\ \textcolor{comment}{\ \ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00040}00040\ \textcolor{comment}{-\/\ Для\ записи\ значения:}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00041}00041\ \textcolor{comment}{\ \ -\/\ TrackerCnt\_Ok()}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00042}00042\ \textcolor{comment}{\ \ -\/\ TrackerCnt\_Err()}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00043}00043\ \textcolor{comment}{\ \ -\/\ TrackerCnt\_Warn()}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00044}00044\ \textcolor{comment}{\ \ -\/\ TrackerCnt\_User()}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00045}00045\ \textcolor{comment}{\ \ -\/\ TrackerWrite\_User(n)}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00046}00046\ \textcolor{comment}{\ \ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00047}00047\ \textcolor{comment}{-\/\ Для\ очищения\ значения:}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00048}00048\ \textcolor{comment}{\ \ -\/\ TrackerClear\_All()}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00049}00049\ \textcolor{comment}{\ \ -\/\ TrackerClear\_Ok()}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00050}00050\ \textcolor{comment}{\ \ -\/\ TrackerClear\_Err()}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00051}00051\ \textcolor{comment}{\ \ -\/\ TrackerClear\_Warn()}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00052}00052\ \textcolor{comment}{\ \ -\/\ TrackerClear\_User(n)}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00053}00053\ \textcolor{comment}{\ \ -\/\ TrackerClear\_UserAll()}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00054}00054\ \textcolor{comment}{*\ @\{\ \ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00055}00055\ \textcolor{comment}{*************************************************************************/}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00056}00056\ \textcolor{preprocessor}{\#ifndef\ \_\_TRACKERS\_H\_}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00057}00057\ \textcolor{preprocessor}{\#define\ \_\_TRACKERS\_H\_}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00058}00058\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{mylibs__defs_8h}{mylibs\_defs.h}}"{}}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00059}00059\ } -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00060}00060\ \textcolor{preprocessor}{\#ifdef\ TRACKERS\_ENABLE}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00061}00061\ \textcolor{comment}{\ \ /**\ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00062}00062\ \textcolor{comment}{\ \ \ \ *\ @brief\ Структура\ для\ счетчиков\ отладки}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00063}00063\ \textcolor{comment}{\ \ \ \ *\ @param\ num\_user\_vars\ -\/\ количество\ пользовательских\ переменных}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00064}00064\ \textcolor{comment}{\ \ \ \ *\ @details\ Содержит\ счетчик\ для\ успешных\ событый\ (cnt\_ok),}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00065}00065\ \textcolor{comment}{\ \ \ \ *\ счетчик\ для\ ошибок\ (cnt\_err),\ счетчик\ для\ предупреждений\ (cnt\_warn).}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00066}00066\ \textcolor{comment}{\ \ \ \ *}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00067}00067\ \textcolor{comment}{\ \ \ \ *\ Также\ есть\ возможность\ объявить\ пользовательские\ переменные\ в\ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00068}00068\ \textcolor{comment}{\ \ \ \ *\ количестве\ \ штук.}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00069}00069\ \textcolor{comment}{\ \ \ \ */}\textcolor{preprocessor}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00070}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga50ccb119acf302969b7fdcb58f2130e4}{00070}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerTypeDef(num\_user\_vars)\ \ \ \ \ \ \ \(\backslash\)}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00071}00071\ \textcolor{preprocessor}{\ \ struct\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00072}00072\ \textcolor{preprocessor}{\ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00073}00073\ \textcolor{preprocessor}{\ \ \ \ uint32\_t\ cnt\_ok;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00074}00074\ \textcolor{preprocessor}{\ \ \ \ uint32\_t\ cnt\_err;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00075}00075\ \textcolor{preprocessor}{\ \ \ \ uint32\_t\ cnt\_warn;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00076}00076\ \textcolor{preprocessor}{\ \ \ \ uint32\_t\ user[num\_user\_vars];\ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00077}00077\ \textcolor{preprocessor}{\ \ \}}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00078}00078\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00079}00079\ \textcolor{comment}{\ \ /**\ @brief\ Получить\ количетство\ пользовательских\ переменных\ */}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00080}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga72be24629fedb8bf70e830373d151fbc}{00080}}\ \textcolor{preprocessor}{\ \ \#define\ num\_of\_usercnts(\_user\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (sizeof(\_user\_)\ /\ sizeof(uint32\_t))}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00081}00081\ \textcolor{comment}{\ \ /**\ @brief\ Проверка\ существует\ ли\ указанная\ пользовательская\ переменная\ */}\textcolor{preprocessor}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00082}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gadd7fd2c6e3a4800f1d5ddab35fd4b43e}{00082}}\ \textcolor{preprocessor}{\ \ \#define\ assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ ((\_uservarnumb\_)\ <\ num\_of\_usercnts((\_cntstruct\_).user))}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00083}00083\ \textcolor{comment}{\ \ /**\ @brief\ Условие\ для\ проверки\ существует\ ли\ указанная\ пользовательская\ переменная\ */}\textcolor{preprocessor}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00084}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gad91d8ca89074270fc040c0449e57cf07}{00084}}\ \textcolor{preprocessor}{\ \ \#define\ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ if(assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_))}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00085}00085\ \textcolor{comment}{\ \ /**\ @brief\ Тернарный\ оператор\ для\ проверки\ существует\ ли\ указанная\ пользовательская\ переменная\ */}\textcolor{preprocessor}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00086}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga39b6ffbc561f8caac276415e1ad32c30}{00086}}\ \textcolor{preprocessor}{\ \ \#define\ tern\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ (assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_))\ ?\ \_uservarnumb\_\ :\ 0}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00087}00087\ } -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00088}00088\ \ \ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00089}00089\ \textcolor{comment}{\ \ /**\ @brief\ Считать\ счетчик\ успешных\ событий\ */}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00090}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gab880911066605602a966641682090169}{00090}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_ok}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00091}00091\ \textcolor{comment}{\ \ /**\ @brief\ Считать\ счетчик\ ошибок\ */}\textcolor{preprocessor}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00092}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga9dc91e6b798a081f95f2ccef2c288e5e}{00092}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_err}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00093}00093\ \textcolor{comment}{\ \ /**\ @brief\ Считать\ счетчик\ предупреждений\ */}\textcolor{preprocessor}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00094}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga47ac59a406ee74d4cd9fe0fbaf63a758}{00094}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_warn}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00095}00095\ \textcolor{comment}{\ \ /**\ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00096}00096\ \textcolor{comment}{\ \ \ \ *\ @brief\ Считать\ пользовательскую\ переменную\ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00097}00097\ \textcolor{comment}{\ \ \ \ *\ @note\ \ \ Здесь\ нет\ проверки\ -\/\ существует\ ли\ пользовательская\ переменная!\ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00098}00098\ \textcolor{comment}{\ \ \ \ *\ \ \ \ \ \ \ \ \ Есть\ возможность\ выйти\ за\ границы\ структуры!!!\ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00099}00099\ \textcolor{comment}{\ \ \ \ *\ \ \ \ \ \ \ \ \ Чтобы\ этого\ избежать\ можно\ использовать\ дефайн\ \#ref\ assert\_usertracker()}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00100}00100\ \textcolor{comment}{\ \ \ \ @verbatim\ \ \ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00101}00101\ \textcolor{comment}{\ \ \ \ \ \ if(assert\_usertracker(struct,\ 0))\ \{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00102}00102\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ TrackerGet\_User(struct,\ 0)}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00103}00103\ \textcolor{comment}{\ \ \ \ \ \ \}}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00104}00104\ \textcolor{comment}{\ \ \ \ @endverbatim}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00105}00105\ \textcolor{comment}{\ \ \ \ */}\textcolor{preprocessor}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00106}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga4b08632669043dfdbd219dda03502bdb}{00106}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).user[tern\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)]}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00007}00007\ \textcolor{comment}{*\ @brief\ \ \ \ \ \ Дефайны\ для\ работы\ с\ трекерами}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00008}00008\ \textcolor{comment}{*\ @details\ \ \ \ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00009}00009\ \textcolor{comment}{Есть\ дефайн\ для\ объявления\ структуры\ трекера:\ TrackerTypeDef(num\_user\_vars).\ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00010}00010\ \textcolor{comment}{Структура\ состоит\ из\ следующих\ элементов:\ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00011}00011\ \textcolor{comment}{-\/\ cnt\_ok}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00012}00012\ \textcolor{comment}{-\/\ cnt\_err}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00013}00013\ \textcolor{comment}{-\/\ cnt\_warn}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00014}00014\ \textcolor{comment}{-\/\ user[num\_user\_vars]\ \ \ \ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00015}00015\ \textcolor{comment}{Также\ есть\ ряд\ функций\ (дефайнов)\ для\ обращения\ к\ элементам\ этой\ структуры.}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00016}00016\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00017}00017\ \textcolor{comment}{Параметры\ для\ конфигурации:}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00018}00018\ \textcolor{comment}{-\/\ @ref\ TRACKERS\_ENABLE\ -\/\ Включить\ трекеры}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00019}00019\ \textcolor{comment}{\ \ Если\ трекеры\ @ref\ TRACKERS\_ENABLE\ отключены,\ то\ все\ дефайны\ определяются\ как\ ничего\ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00020}00020\ \textcolor{comment}{\ \ и\ на\ производительность\ кода\ не\ влияют\ \ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00021}00021\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00022}00022\ \textcolor{comment}{@par\ Пример:}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00023}00023\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00024}00024\ \textcolor{comment}{Определяем\ typedef\ трекера\ измерений\ Measure\_TrackerTypeDef}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00025}00025\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00026}00026\ \textcolor{comment}{@verbatim}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00027}00027\ \textcolor{comment}{\ \ typedef\ TrackerTypeDef(MEASURE\_USER\_VARS\_NUMB)\ Measure\_TrackerTypeDef;}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00028}00028\ \textcolor{comment}{@endverbatim}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00029}00029\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00030}00030\ \textcolor{comment}{И\ через\ @ref\ Measure\_TrackerTypeDef\ структура\ подключается\ в\ другие\ структуры}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00031}00031\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00032}00032\ \textcolor{comment}{Для\ работы\ с\ структурой\ можно\ использовать\ функции:}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00033}00033\ \textcolor{comment}{-\/\ Для\ получения\ значения:}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00034}00034\ \textcolor{comment}{\ \ -\/\ TrackerGet\_Ok()}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00035}00035\ \textcolor{comment}{\ \ -\/\ TrackerGet\_Err()}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00036}00036\ \textcolor{comment}{\ \ -\/\ TrackerGet\_Warn()}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00037}00037\ \textcolor{comment}{\ \ -\/\ TrackerGet\_User(n)}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00038}00038\ \textcolor{comment}{\ \ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00039}00039\ \textcolor{comment}{-\/\ Для\ записи\ значения:}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00040}00040\ \textcolor{comment}{\ \ -\/\ TrackerCnt\_Ok()}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00041}00041\ \textcolor{comment}{\ \ -\/\ TrackerCnt\_Err()}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00042}00042\ \textcolor{comment}{\ \ -\/\ TrackerCnt\_Warn()}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00043}00043\ \textcolor{comment}{\ \ -\/\ TrackerCnt\_User()}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00044}00044\ \textcolor{comment}{\ \ -\/\ TrackerWrite\_User(n)}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00045}00045\ \textcolor{comment}{\ \ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00046}00046\ \textcolor{comment}{-\/\ Для\ очищения\ значения:}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00047}00047\ \textcolor{comment}{\ \ -\/\ TrackerClear\_All()}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00048}00048\ \textcolor{comment}{\ \ -\/\ TrackerClear\_Ok()}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00049}00049\ \textcolor{comment}{\ \ -\/\ TrackerClear\_Err()}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00050}00050\ \textcolor{comment}{\ \ -\/\ TrackerClear\_Warn()}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00051}00051\ \textcolor{comment}{\ \ -\/\ TrackerClear\_User(n)}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00052}00052\ \textcolor{comment}{\ \ -\/\ TrackerClear\_UserAll()}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00053}00053\ \textcolor{comment}{*\ @\{\ \ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00054}00054\ \textcolor{comment}{*************************************************************************/}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00055}00055\ \textcolor{preprocessor}{\#ifndef\ \_\_TRACKERS\_H\_}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00056}00056\ \textcolor{preprocessor}{\#define\ \_\_TRACKERS\_H\_}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00057}00057\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{mylibs__defs_8h}{mylibs\_defs.h}}"{}}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00058}00058\ } +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00059}00059\ \textcolor{preprocessor}{\#ifdef\ TRACKERS\_ENABLE}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00060}00060\ \textcolor{comment}{\ \ /**\ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00061}00061\ \textcolor{comment}{\ \ \ \ *\ @brief\ Структура\ для\ счетчиков\ отладки}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00062}00062\ \textcolor{comment}{\ \ \ \ *\ @param\ num\_user\_vars\ -\/\ количество\ пользовательских\ переменных}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00063}00063\ \textcolor{comment}{\ \ \ \ *\ @details\ Содержит\ счетчик\ для\ успешных\ событый\ (cnt\_ok),}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00064}00064\ \textcolor{comment}{\ \ \ \ *\ счетчик\ для\ ошибок\ (cnt\_err),\ счетчик\ для\ предупреждений\ (cnt\_warn).}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00065}00065\ \textcolor{comment}{\ \ \ \ *}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00066}00066\ \textcolor{comment}{\ \ \ \ *\ Также\ есть\ возможность\ объявить\ пользовательские\ переменные\ в\ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00067}00067\ \textcolor{comment}{\ \ \ \ *\ количестве\ \ штук.}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00068}00068\ \textcolor{comment}{\ \ \ \ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00069}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga50ccb119acf302969b7fdcb58f2130e4}{00069}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerTypeDef(num\_user\_vars)\ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00070}00070\ \textcolor{preprocessor}{\ \ struct\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00071}00071\ \textcolor{preprocessor}{\ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00072}00072\ \textcolor{preprocessor}{\ \ \ \ uint32\_t\ cnt\_ok;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00073}00073\ \textcolor{preprocessor}{\ \ \ \ uint32\_t\ cnt\_err;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00074}00074\ \textcolor{preprocessor}{\ \ \ \ uint32\_t\ cnt\_warn;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00075}00075\ \textcolor{preprocessor}{\ \ \ \ uint32\_t\ user[num\_user\_vars];\ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00076}00076\ \textcolor{preprocessor}{\ \ \}}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00077}00077\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00078}00078\ \textcolor{comment}{\ \ /**\ @brief\ Получить\ количетство\ пользовательских\ переменных\ */}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00079}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga72be24629fedb8bf70e830373d151fbc}{00079}}\ \textcolor{preprocessor}{\ \ \#define\ num\_of\_usercnts(\_user\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (sizeof(\_user\_)\ /\ sizeof(uint32\_t))}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00080}00080\ \textcolor{comment}{\ \ /**\ @brief\ Проверка\ существует\ ли\ указанная\ пользовательская\ переменная\ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00081}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gadd7fd2c6e3a4800f1d5ddab35fd4b43e}{00081}}\ \textcolor{preprocessor}{\ \ \#define\ assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ ((\_uservarnumb\_)\ <\ num\_of\_usercnts((\_cntstruct\_).user))}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00082}00082\ \textcolor{comment}{\ \ /**\ @brief\ Условие\ для\ проверки\ существует\ ли\ указанная\ пользовательская\ переменная\ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00083}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gad91d8ca89074270fc040c0449e57cf07}{00083}}\ \textcolor{preprocessor}{\ \ \#define\ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ if(assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_))}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00084}00084\ \textcolor{comment}{\ \ /**\ @brief\ Тернарный\ оператор\ для\ проверки\ существует\ ли\ указанная\ пользовательская\ переменная\ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00085}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga39b6ffbc561f8caac276415e1ad32c30}{00085}}\ \textcolor{preprocessor}{\ \ \#define\ tern\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ (assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_))\ ?\ \_uservarnumb\_\ :\ 0}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00086}00086\ } +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00087}00087\ \ \ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00088}00088\ \textcolor{comment}{\ \ /**\ @brief\ Считать\ счетчик\ успешных\ событий\ */}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00089}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gab880911066605602a966641682090169}{00089}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_ok}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00090}00090\ \textcolor{comment}{\ \ /**\ @brief\ Считать\ счетчик\ ошибок\ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00091}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga9dc91e6b798a081f95f2ccef2c288e5e}{00091}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_err}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00092}00092\ \textcolor{comment}{\ \ /**\ @brief\ Считать\ счетчик\ предупреждений\ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00093}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga47ac59a406ee74d4cd9fe0fbaf63a758}{00093}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_warn}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00094}00094\ \textcolor{comment}{\ \ /**\ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00095}00095\ \textcolor{comment}{\ \ \ \ *\ @brief\ Считать\ пользовательскую\ переменную\ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00096}00096\ \textcolor{comment}{\ \ \ \ *\ @note\ \ \ Здесь\ нет\ проверки\ -\/\ существует\ ли\ пользовательская\ переменная!\ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00097}00097\ \textcolor{comment}{\ \ \ \ *\ \ \ \ \ \ \ \ \ Есть\ возможность\ выйти\ за\ границы\ структуры!!!\ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00098}00098\ \textcolor{comment}{\ \ \ \ *\ \ \ \ \ \ \ \ \ Чтобы\ этого\ избежать\ можно\ использовать\ дефайн\ \#ref\ assert\_usertracker()}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00099}00099\ \textcolor{comment}{\ \ \ \ @verbatim\ \ \ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00100}00100\ \textcolor{comment}{\ \ \ \ \ \ if(assert\_usertracker(struct,\ 0))\ \{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00101}00101\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ TrackerGet\_User(struct,\ 0)}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00102}00102\ \textcolor{comment}{\ \ \ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00103}00103\ \textcolor{comment}{\ \ \ \ @endverbatim}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00104}00104\ \textcolor{comment}{\ \ \ \ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00105}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga4b08632669043dfdbd219dda03502bdb}{00105}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).user[tern\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)]}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00106}00106\ \ \ } \DoxyCodeLine{\Hypertarget{trackers_8h_source_l00107}00107\ \ \ } -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00108}00108\ \ \ } -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00109}00109\ \ \ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00110}00110\ \textcolor{comment}{\ \ /**\ @brief\ Инкрементирование\ счетчика\ успешных\ событий\ */}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00111}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga23de0006aa08984cfeddb6aa5e512fa1}{00111}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_ok++}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00112}00112\ \textcolor{comment}{\ \ /**\ @brief\ Инкрементирование\ счетчика\ ошибок\ */}\textcolor{preprocessor}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00113}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga49af29ab3927cad105c1d2b018a767e9}{00113}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_err++}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00114}00114\ \textcolor{comment}{\ \ /**\ @brief\ Инкрементирование\ счетчика\ предупреждений\ */}\textcolor{preprocessor}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00115}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga8017fb05a56a1b667244f1f786fa9c57}{00115}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_warn++}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00116}00116\ \textcolor{comment}{\ \ /**\ @brief\ Инкрементирование\ пользовательской\ переменной\ */}\textcolor{preprocessor}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00117}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga1b7549afc4a1760b54a9b93b0f6d105e}{00117}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ \ \ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ (\_cntstruct\_).user[\_uservarnumb\_]++;}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00118}00118\ \textcolor{comment}{\ \ /**\ @brief\ Запись\ числа\ в\ пользовательскую\ переменную\ */}\textcolor{preprocessor}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00119}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gad2f4062a9ac8c2ab062a364f640ebc51}{00119}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerWrite\_User(\_cntstruct\_,\ \_uservarnumb\_,\ \_val\_)\ \ \ \ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ (\_cntstruct\_).user[\_uservarnumb\_]\ =\ (\_val\_)}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00120}00120\ \textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00121}00121\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ всей\ структуры\ */}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00122}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga704f7b9f8c65c9bcec48ce7cb77a2d3b}{00122}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_All(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ memset(\&(\_cntstruct\_),\ 0,\ sizeof(\_cntstruct\_))}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00123}00123\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ счетчика\ успешных\ событий\ */}\textcolor{preprocessor}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00124}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga5dd8bac8c7ab5832019d55d7a68371b9}{00124}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_ok\ =\ 0}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00125}00125\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ счетчика\ ошибок\ */}\textcolor{preprocessor}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00126}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gae860b6947c6e317e14d40bd7b4b8eb74}{00126}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_err\ =\ 0}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00127}00127\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ счетчика\ предупреждений\ */}\textcolor{preprocessor}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00128}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga365a8c60bd13b75154feda649dd21ead}{00128}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_warn\ =\ 0}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00129}00129\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ пользовательской\ переменной\ */}\textcolor{preprocessor}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00130}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga063dab1067005e1600ea32531fdf3f8d}{00130}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ (\_cntstruct\_).user[\_uservarnumb\_]\ =\ 0;}\textcolor{comment}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00131}00131\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ всех\ пользовательских\ переменных\ */}\textcolor{preprocessor}{}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00132}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gaaec7ec19977bb26fa1919dfe920b82d5}{00132}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_UserAll(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ memset(\&(\_cntstruct\_).user,\ 0,\ sizeof((\_cntstruct\_).user))}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00133}00133\ } -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00134}00134\ \textcolor{preprocessor}{\#else\ }\textcolor{comment}{//TRACKERS\_ENABLE}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00135}00135\ \ \ } -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00136}00136\ \textcolor{preprocessor}{\ \ \#define\ TrackerTypeDef(num\_user\_vars)\ void\ *}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00137}00137\ } -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00138}00138\ \textcolor{preprocessor}{\ \ \#define\ num\_of\_usercnts(\_user\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00139}00139\ \textcolor{preprocessor}{\ \ \#define\ assert\_tracecnt(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ 0}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00140}00140\ \textcolor{preprocessor}{\ \ \#define\ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ if(0)}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00141}00141\ \textcolor{preprocessor}{\ \ \#define\ tern\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ 0}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00142}00142\ } -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00143}00143\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dummy}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00144}00144\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dummy}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00145}00145\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dummy\ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00146}00146\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ dummy}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00147}00147\ \ \ } -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00148}00148\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00149}00149\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00150}00150\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00151}00151\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00152}00152\ \textcolor{preprocessor}{\ \ \#define\ TrackerWrite\_User(\_cntstruct\_,\ \_uservarnumb\_,\ \_val\_)}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00153}00153\ } -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00154}00154\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_All(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00155}00155\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00156}00156\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00157}00157\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00158}00158\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_User(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00159}00159\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_UserAll(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00160}00160\ } -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00161}00161\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//TRACKERS\_ENABLE}} -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00162}00162\ \ \ } -\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00163}00163\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\_\_TRACKERS\_H\_}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00108}00108\ \ \ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00109}00109\ \textcolor{comment}{\ \ /**\ @brief\ Инкрементирование\ счетчика\ успешных\ событий\ */}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00110}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga23de0006aa08984cfeddb6aa5e512fa1}{00110}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_ok++}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00111}00111\ \textcolor{comment}{\ \ /**\ @brief\ Инкрементирование\ счетчика\ ошибок\ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00112}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga49af29ab3927cad105c1d2b018a767e9}{00112}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_err++}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00113}00113\ \textcolor{comment}{\ \ /**\ @brief\ Инкрементирование\ счетчика\ предупреждений\ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00114}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga8017fb05a56a1b667244f1f786fa9c57}{00114}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_warn++}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00115}00115\ \textcolor{comment}{\ \ /**\ @brief\ Инкрементирование\ пользовательской\ переменной\ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00116}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga1b7549afc4a1760b54a9b93b0f6d105e}{00116}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ \ \ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ (\_cntstruct\_).user[\_uservarnumb\_]++;}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00117}00117\ \textcolor{comment}{\ \ /**\ @brief\ Запись\ числа\ в\ пользовательскую\ переменную\ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00118}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gad2f4062a9ac8c2ab062a364f640ebc51}{00118}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerWrite\_User(\_cntstruct\_,\ \_uservarnumb\_,\ \_val\_)\ \ \ \ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ (\_cntstruct\_).user[\_uservarnumb\_]\ =\ (\_val\_)}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00119}00119\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00120}00120\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ всей\ структуры\ */}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00121}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga704f7b9f8c65c9bcec48ce7cb77a2d3b}{00121}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_All(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ memset(\&(\_cntstruct\_),\ 0,\ sizeof(\_cntstruct\_))}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00122}00122\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ счетчика\ успешных\ событий\ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00123}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga5dd8bac8c7ab5832019d55d7a68371b9}{00123}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_ok\ =\ 0}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00124}00124\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ счетчика\ ошибок\ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00125}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gae860b6947c6e317e14d40bd7b4b8eb74}{00125}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_err\ =\ 0}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00126}00126\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ счетчика\ предупреждений\ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00127}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga365a8c60bd13b75154feda649dd21ead}{00127}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\_cntstruct\_).cnt\_warn\ =\ 0}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00128}00128\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ пользовательской\ переменной\ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00129}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_ga063dab1067005e1600ea32531fdf3f8d}{00129}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ (\_cntstruct\_).user[\_uservarnumb\_]\ =\ 0;}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00130}00130\ \textcolor{comment}{\ \ /**\ @brief\ Очистка\ всех\ пользовательских\ переменных\ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00131}\mbox{\hyperlink{group___t_r_a_c_k_e_r_s_gaaec7ec19977bb26fa1919dfe920b82d5}{00131}}\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_UserAll(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ memset(\&(\_cntstruct\_).user,\ 0,\ sizeof((\_cntstruct\_).user))}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00132}00132\ } +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00133}00133\ \textcolor{preprocessor}{\#else\ }\textcolor{comment}{//TRACKERS\_ENABLE}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00134}00134\ \ \ } +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00135}00135\ \textcolor{preprocessor}{\ \ \#define\ TrackerTypeDef(num\_user\_vars)\ void\ *}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00136}00136\ } +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00137}00137\ \textcolor{preprocessor}{\ \ \#define\ num\_of\_usercnts(\_user\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00138}00138\ \textcolor{preprocessor}{\ \ \#define\ assert\_tracecnt(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ 0}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00139}00139\ \textcolor{preprocessor}{\ \ \#define\ if\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ if(0)}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00140}00140\ \textcolor{preprocessor}{\ \ \#define\ tern\_assert\_usertracker(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ 0}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00141}00141\ } +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00142}00142\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dummy}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00143}00143\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dummy}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00144}00144\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dummy\ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00145}00145\ \textcolor{preprocessor}{\ \ \#define\ TrackerGet\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ dummy}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00146}00146\ \ \ } +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00147}00147\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00148}00148\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00149}00149\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00150}00150\ \textcolor{preprocessor}{\ \ \#define\ TrackerCnt\_User(\_cntstruct\_,\ \_uservarnumb\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00151}00151\ \textcolor{preprocessor}{\ \ \#define\ TrackerWrite\_User(\_cntstruct\_,\ \_uservarnumb\_,\ \_val\_)}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00152}00152\ } +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00153}00153\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_All(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00154}00154\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Ok(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00155}00155\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Err(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00156}00156\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_Warn(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00157}00157\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_User(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00158}00158\ \textcolor{preprocessor}{\ \ \#define\ TrackerClear\_UserAll(\_cntstruct\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00159}00159\ } +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00160}00160\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//TRACKERS\_ENABLE}} +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00161}00161\ \ \ } +\DoxyCodeLine{\Hypertarget{trackers_8h_source_l00162}00162\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\_\_TRACKERS\_H\_}} \end{DoxyCode} diff --git a/Doc/latex/unionuint16___bit_type_def.tex b/Doc/latex/unionuint16___bit_type_def.tex index 124b3d8..f58de34 100644 --- a/Doc/latex/unionuint16___bit_type_def.tex +++ b/Doc/latex/unionuint16___bit_type_def.tex @@ -5,7 +5,7 @@ \item uint16\+\_\+t \mbox{\hyperlink{unionuint16___bit_type_def_ab821c8d3f0ad9b2aa405b29c1a15e955}{all}} \item -\Hypertarget{unionuint16___bit_type_def_ac1f31de77621537e93ef61e2748a3601}\label{unionuint16___bit_type_def_ac1f31de77621537e93ef61e2748a3601} +\Hypertarget{unionuint16___bit_type_def_a1ea7c1c6715e1bdf134f3cd3b5601c91}\label{unionuint16___bit_type_def_a1ea7c1c6715e1bdf134f3cd3b5601c91} \begin{tabbing} xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill struct \{\\ @@ -214,4 +214,4 @@ Definition at line \mbox{\hyperlink{bit__access_8h_source_l00075}{75}} of file \ The documentation for this union was generated from the following file\+:\begin{DoxyCompactItemize} \item -E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{bit__access_8h}{bit\+\_\+access.\+h}}\end{DoxyCompactItemize} +E\+:/.\+WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{bit__access_8h}{bit\+\_\+access.\+h}}\end{DoxyCompactItemize} diff --git a/Doc/latex/unionuint32___bit_type_def.tex b/Doc/latex/unionuint32___bit_type_def.tex index c0ad0ac..a04a4b6 100644 --- a/Doc/latex/unionuint32___bit_type_def.tex +++ b/Doc/latex/unionuint32___bit_type_def.tex @@ -5,7 +5,7 @@ \item uint32\+\_\+t \mbox{\hyperlink{unionuint32___bit_type_def_aabd9acf3b55b909219a41737a105f31b}{all}} \item -\Hypertarget{unionuint32___bit_type_def_a0902ae26c90f85b2ee1423d994fe5592}\label{unionuint32___bit_type_def_a0902ae26c90f85b2ee1423d994fe5592} +\Hypertarget{unionuint32___bit_type_def_a52a24d7cf03b0ce7b23b62a84189e829}\label{unionuint32___bit_type_def_a52a24d7cf03b0ce7b23b62a84189e829} \begin{tabbing} xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill struct \{\\ @@ -390,4 +390,4 @@ Definition at line \mbox{\hyperlink{bit__access_8h_source_l00092}{92}} of file \ The documentation for this union was generated from the following file\+:\begin{DoxyCompactItemize} \item -E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{bit__access_8h}{bit\+\_\+access.\+h}}\end{DoxyCompactItemize} +E\+:/.\+WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{bit__access_8h}{bit\+\_\+access.\+h}}\end{DoxyCompactItemize} diff --git a/Doc/latex/unionuint64___bit_type_def.tex b/Doc/latex/unionuint64___bit_type_def.tex index c6e6f55..91d530b 100644 --- a/Doc/latex/unionuint64___bit_type_def.tex +++ b/Doc/latex/unionuint64___bit_type_def.tex @@ -5,7 +5,7 @@ \item uint64\+\_\+t \mbox{\hyperlink{unionuint64___bit_type_def_a1dd79aa84a1d13d156f1b684aaf01edd}{all}} \item -\Hypertarget{unionuint64___bit_type_def_a753566b86284afd8347ec6f5d2604441}\label{unionuint64___bit_type_def_a753566b86284afd8347ec6f5d2604441} +\Hypertarget{unionuint64___bit_type_def_a88a6752ed39cceac3848a0f96409f0c1}\label{unionuint64___bit_type_def_a88a6752ed39cceac3848a0f96409f0c1} \begin{tabbing} xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill struct \{\\ @@ -742,4 +742,4 @@ Definition at line \mbox{\hyperlink{bit__access_8h_source_l00117}{117}} of file The documentation for this union was generated from the following file\+:\begin{DoxyCompactItemize} \item -E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{bit__access_8h}{bit\+\_\+access.\+h}}\end{DoxyCompactItemize} +E\+:/.\+WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{bit__access_8h}{bit\+\_\+access.\+h}}\end{DoxyCompactItemize} diff --git a/Doc/latex/unionuint8___bit_type_def.tex b/Doc/latex/unionuint8___bit_type_def.tex index 0b6a2d6..505cfb8 100644 --- a/Doc/latex/unionuint8___bit_type_def.tex +++ b/Doc/latex/unionuint8___bit_type_def.tex @@ -5,7 +5,7 @@ \item uint8\+\_\+t \mbox{\hyperlink{unionuint8___bit_type_def_aacf75bef7d0b9ed458e03a4278f5fe88}{all}} \item -\Hypertarget{unionuint8___bit_type_def_aacf7b4350fc17ab7d9517f71e6408d85}\label{unionuint8___bit_type_def_aacf7b4350fc17ab7d9517f71e6408d85} +\Hypertarget{unionuint8___bit_type_def_ae698f6880705aa10e79d50c2fc99165a}\label{unionuint8___bit_type_def_ae698f6880705aa10e79d50c2fc99165a} \begin{tabbing} xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill struct \{\\ @@ -126,4 +126,4 @@ Definition at line \mbox{\hyperlink{bit__access_8h_source_l00051}{51}} of file \ The documentation for this union was generated from the following file\+:\begin{DoxyCompactItemize} \item -E\+:/.\+WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{bit__access_8h}{bit\+\_\+access.\+h}}\end{DoxyCompactItemize} +E\+:/.\+WORK/\+STM32/\+STM\+\_\+\+Libs/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs/\+Inc/\mbox{\hyperlink{bit__access_8h}{bit\+\_\+access.\+h}}\end{DoxyCompactItemize} diff --git a/MyLibs/Inc/bench_time.h b/MyLibs/Inc/bench_time.h index 1704b3e..731ccc3 100644 --- a/MyLibs/Inc/bench_time.h +++ b/MyLibs/Inc/bench_time.h @@ -4,7 +4,6 @@ * @brief Заголовочный файл для измерения времени между событиями ****************************************************************************** * @addtogroup BENCH_TIME Time measurement -* @ingroup MYLIBS_DEFINES * @brief Библиотека для измерения времени/тиков между событиями * @details Поддерживает: diff --git a/MyLibs/Inc/bit_access.h b/MyLibs/Inc/bit_access.h index fe824cd..52a6d60 100644 --- a/MyLibs/Inc/bit_access.h +++ b/MyLibs/Inc/bit_access.h @@ -4,7 +4,7 @@ * @brief Заголочный файл для дефайнов битового доступа. ************************************************************************** * @defgroup BIT_ACCESS_DEFINES Bit access defines -* @ingroup MYLIBS_DEFINES +* @ingroup MYLIBS_TOOLS * @brief Макросы и typedef'ы для работы с битами в unsigned типах. * @details В этом файле определены макросы для получения значения конкретного бита^ diff --git a/MyLibs/Inc/gen_optimizer.h b/MyLibs/Inc/gen_optimizer.h index 9a3b332..3a2c35f 100644 --- a/MyLibs/Inc/gen_optimizer.h +++ b/MyLibs/Inc/gen_optimizer.h @@ -4,7 +4,6 @@ * @brief Заголовочный файл для адаптивного подбора параметров ****************************************************************************** * @addtogroup GEN_OPTIMIZER Genetic optimizer -* @ingroup MYLIBS_DEFINES * @brief Библиотека для эволюционного подбора параметров * @details Поддерживает: diff --git a/MyLibs/Inc/mylibs_defs.h b/MyLibs/Inc/mylibs_defs.h index 020a1c7..8b32702 100644 --- a/MyLibs/Inc/mylibs_defs.h +++ b/MyLibs/Inc/mylibs_defs.h @@ -3,13 +3,28 @@ * @file mylibs_defs.h * @brief Заголочный файл для дефайнов библиотеки MyLibsGeneral. ************************************************************************** -* @defgroup MYLIBS_DEFINES General Tools +* @defgroup MYLIBS_TOOLS General Tools * @ingroup MYLIBS_ALL * @brief Общие макросы и typedef'ы, используемые по всему проекту * +* @defgroup MYLIBS_DEBUG_TOOLS Debug Tools +* @ingroup MYLIBS_ALL +* @brief Утилиты для тестирования программы +* +* @addtogroup BENCH_TIME +* @ingroup MYLIBS_DEBUG_TOOLS +* +* @addtogroup GEN_OPTIMIZER +* @ingroup MYLIBS_DEBUG_TOOLS +* +* @addtogroup TRACE +* @ingroup MYLIBS_DEBUG_TOOLS +* +* @addtogroup TRACKERS +* @ingroup MYLIBS_DEBUG_TOOLS *************************************************************************/ -#ifndef __MYLIBS_DEFINES_H_ -#define __MYLIBS_DEFINES_H_ +#ifndef __MYLIBS_TOOLS_H_ +#define __MYLIBS_TOOLS_H_ #include "mylibs_config.h" @@ -17,7 +32,7 @@ ******************************ERROR_HANDLER********************************/ /** * @addtogroup ERROR_HANDLER_DEFINES Error Handler defines - * @ingroup MYLIBS_DEFINES + * @ingroup MYLIBS_TOOLS * @brief Дефайны для обработки ошибок * @{ */ @@ -58,7 +73,7 @@ extern void Error_Handler(void); ******************************DELAYS_DEFINES*******************************/ /** * @addtogroup DELAYS_DEFINES Delays defines - * @ingroup MYLIBS_DEFINES + * @ingroup MYLIBS_TOOLS * @brief Макросы и определения для работы с задержками в миллисекундах. * @details * Этот блок содержит макросы для реализации задержек с использованием HAL или FreeRTOS: @@ -140,7 +155,7 @@ extern void Error_Handler(void); *******************************UTIL_DEFINES********************************/ /** * @addtogroup UTILS_DEFINES Utils defines - * @ingroup MYLIBS_DEFINES + * @ingroup MYLIBS_TOOLS * @brief Общие вспомогательные макросы * @{ */ @@ -203,4 +218,4 @@ do{ \ /** @endcond */ -#endif //__MYLIBS_DEFINES_H_ \ No newline at end of file +#endif //__MYLIBS_TOOLS_H_ \ No newline at end of file diff --git a/MyLibs/Inc/mylibs_include.h b/MyLibs/Inc/mylibs_include.h index 6f12c6c..27fa86c 100644 --- a/MyLibs/Inc/mylibs_include.h +++ b/MyLibs/Inc/mylibs_include.h @@ -14,13 +14,8 @@ - Сконфигурировать mylibs_config.h: - Подключить заголовочный файл HAL библиотеки конкретного МК (напр. stm32f4xx_hal.h) - Подключить другие заголовочные файлы которые общие для всего проекта и должны быть видны - - -- Подключить mylibs_include.h туда, где необходим доступ к библиотекам. + - Подключить mylibs_include.h туда, где необходим доступ к библиотекам. -* @defgroup MYLIBS_PERIPHERAL Peripheral -* @ingroup MYLIBS_ALL -* @brief Модули для управления периферией -* *************************************************************************/ #ifndef __MYLIBS_INCLUDE_H_ #define __MYLIBS_INCLUDE_H_ diff --git a/MyLibs/Inc/trace.h b/MyLibs/Inc/trace.h index d0f5c7f..976b8d1 100644 --- a/MyLibs/Inc/trace.h +++ b/MyLibs/Inc/trace.h @@ -4,7 +4,6 @@ * @brief Заголочный файл для работы с трассировкой. ************************************************************************** * @addtogroup TRACE Trace defines -* @ingroup MYLIBS_DEFINES * @brief Дефайны для работы с трассировкой *************************************************************************/ #ifndef __TRACE_H_ diff --git a/MyLibs/Inc/trackers.h b/MyLibs/Inc/trackers.h index 9313f39..458dd00 100644 --- a/MyLibs/Inc/trackers.h +++ b/MyLibs/Inc/trackers.h @@ -4,7 +4,6 @@ * @brief Заголочный файл для работы с трекерами @ref TRACKERS. ************************************************************************** * @addtogroup TRACKERS Trackers defines -* @ingroup MYLIBS_DEFINES * @brief Дефайны для работы с трекерами * @details Есть дефайн для объявления структуры трекера: TrackerTypeDef(num_user_vars). diff --git a/README.md b/README.md new file mode 100644 index 0000000..219c2b0 --- /dev/null +++ b/README.md @@ -0,0 +1,82 @@ +# Обзор `ExtendedLibs` + +ExtendedLibs - это набор библиотек для удобной работы с STM32. Данный субмодуль подключается напрямую из Git и содержит набор вспомогательных библиотек для работы МК, в частности STM32 и SEGGER RTT. + +## Основные возможности + + +#### Общие утилиты MyLibs (@ref MYLIBS_TOOLS) +- Макросы для задержек (@ref DELAYS_DEFINES) +- Утилиты для работы с всяким (@ref UTILS_DEFINES) +- Битовый доступ к регистрам через union (@ref BIT_ACCESS_DEFINES) + +#### Отладка* (@ref MYLIBS_DEBUG_TOOLS) +- Трассировка (@ref TRACE) +- Измерение временных интервалов (@ref BENCH_TIME) +- Генетический алгоритм для оптимизации параметров (@ref GEN_OPTIMIZER) +- Трекеры для статистики и отладки (@ref TRACKERS) + +_*Модули отладки независимы от MyLibs и могут быть использованы отдельно_ + +## Структура библиотеки + +*Note: Файлы начинающиеся с `__` и которых нет в этом дереве являются **внутренними/непротестированными/недокументированными*** +``` +ProjectRoot/ +├── MyLibs/ # Общие библиотеки, независимые от платформы (или почти) +│ ├── inc/ +│ │ ├── __mylibs_include.h # Главный include файл +│ │ ├── __mylibs_config.h # Конфигурация библиотек +│ │ ├── mylibs_defs.h # Общие определения и макросы +│ │ ├── bit_access.h # Битовый доступ к регистрам +│ │ ├── gen_optimizer.h # Оптимизатор (генетический алгоритм) +│ │ ├── trackers.h # Трекеры для отладки +│ │ └── trace.h # Трассировка и логирование +│ └── src/ +│ +└──RTT # Библиотека RTT + ├── __SEGGER_RTT_Conf.h # Конфигурационный файл RTT + ├── SEGGER_RTT.c # Основной модуль RTT + ├── SEGGER_RTT.h # Основной заголовок RTT + ├── SEGGER_RTT_ASM_ARMv7M.S # Ассемблерная оптимизация для ARMv7M + └── SEGGER_RTT_printf.c # Реализация printf() через RTT +``` + +## Инструкция по подключению + +1. **Склонируйте субмодуль** в ваш проект: + +```bash +git submodule add https://git.arktika.cyou/Razvalyaev/STM32_ExtendedLibs path/to/ExtendedLibs +git submodule update --init --recursive +``` + +2. **Скопируйте файлы конфигурации и главный include** в отдельную папку в вашем проекте (вне субмодуля) и удалите `__`: + +``` +ProjectRoot/ +├── Configs/ +│ ├── mylibs_include.h +│ └── mylibs_config.h +│ └── SEGGER_RTT_Conf.h +``` + +3. **Настройте конфигурацию** под ваш проект: + +* `mylibs_config.h` — задайте нужные параметры библиотек. +* `mylibs_include.h` — укажите пути к вашим заголовочным файлам и подключаемым модулям. +* `SEGGER_RTT_Conf.h` — настройки RTT. + +4. **Подключайте библиотеки в вашем коде** через главный include файл: + +```c +#include "mylibs_include.h" +``` + +5. **Обновление библиотеки**: + +После обновления субмодуля из Git, исходные файлы библиотеки будут обновлены, но ваши конфиги останутся в целевой папке и не перезапишутся: + +```bash +git submodule update --remote +``` \ No newline at end of file diff --git a/mainpage.h b/mainpage.h deleted file mode 100644 index bfb5b30..0000000 --- a/mainpage.h +++ /dev/null @@ -1,94 +0,0 @@ -/** -@mainpage - - -@section overview Обзор -MyLibs - это набор библиотек для удобной работы с STM32. - -\htmlonly -Актуальная версия -\endhtmlonly - -@subsection features Основные возможности - -@subsubsection utils_module Общие утилиты (@ref MYLIBS_DEFINES) -- Макросы для задержек и утилит (@ref DELAYS_DEFINES и @ref UTILS_DEFINES) -- Трекеры для статистики и отладки (@ref TRACKERS и @ref TRACE) -- Эволюционный алгоритм для оптимизации параметров (@ref GEN_OPTIMIZER) -- Битовый доступ к регистрам через union (@ref BIT_ACCESS_DEFINES) - -@subsubsection trace_module Трассировка @ref TRACE -- Serial трассировка через SWO и RTT (@ref TRACE_SERIAL) -- GPIO трассировка для отладки (@ref TRACE_GPIO) -- Сохранение логов в Flash память (@ref TRACE_RTT_FLASH) -- Обработка HardFault с сохранением контекста (@ref TRACE_HARDFAULT) - -@subsubsection gpio_module Модуль GPIO @ref MY_LIBS_GPIO -- Инициализация портов и тактирования (@ref MYLIBS_GPIO_GENERAL) -- Управление светодиодами (включение/выключение, моргание, плавное затухание) (@ref MYLIBS_GPIO_LEDS) -- Работа с кнопками (чтение состояния, фильтрация дребезга) (@ref MYLIBS_GPIO_SWITCH) - -@subsubsection tim_module Модуль таймеров @ref MY_LIBS_TIM -- Базовая инициализация таймеров (@ref MYLIBS_TIM_GENERAL) -- Формирование задержек (блокирующие и неблокирующие) (@ref MYLIBS_TIM_DELAY) -- Работа с энкодерами (чтение положения, обработка кнопок) (@ref MYLIBS_TIM_ENCODER) -- Настройка ШИМ и Output Compare (@ref MYLIBS_TIM_OC) - -@subsubsection uart_module Модуль UART @ref MY_LIBS_UART -- Базовая инициализация UART и его пинов одной функцией (@ref UART_Base_Init) - -@subsubsection spi_module Модуль SPI @ref MY_LIBS_SPI -- Базовая инициализация SPI и пинов одной функцией (@ref SPI_Base_Init) - -@subsection structure Структура проекта - -@code -ProjectRoot/ -├── MyLibs/ # Общие библиотеки, независимые от платформы (или почти) -│ ├── inc/ -│ │ ├── mylibs_include.h # Главный include файл -│ │ ├── mylibs_config.h # Конфигурация библиотек -│ │ ├── mylibs_defs.h # Общие определения и макросы -│ │ ├── bit_access.h # Битовый доступ к регистрам -│ │ ├── gen_optimizer.h # Оптимизатор (генетический алгоритм) -│ │ ├── trackers.h # Трекеры для отладки -│ │ └── trace.h # Трассировка и логирование -│ └── src/ -│ -├──RTT # Библиотека RTT -│ ├── __SEGGER_RTT_Conf.h # Конфигурационный файл RTT -│ ├── SEGGER_RTT.c # Основной модуль RTT -│ ├── SEGGER_RTT.h # Основной заголовок RTT -│ ├── SEGGER_RTT_ASM_ARMv7M.S # Ассемблерная оптимизация для ARMv7M -│ └── SEGGER_RTT_printf.c # Реализация printf() через RTT -│ -└── STM32_General # Работа с периферией STM32 - ├── inc/ - │ ├── general_gpio.h # Работа с GPIO - │ ├── general_spi.h # Работа с SPI - │ ├── general_tim.h # Работа с таймерами - │ └── general_uart.h # Работа с UART - └── src/ - ├── general_gpio.c # Реализация GPIO - ├── general_spi.c # Реализация SPI - ├── general_tim.c # Реализация TIM - └── general_uart.c # Реализация UART -@endcode - - - - -@subsection usage_basic Использование - -Инструкция по подключению: - -1. Настройте конфигурацию @ref MYLIBS_CONFIG в @ref mylibs_config.h - -2. Подключите главный заголовочный файл: -@code -#include "mylibs_include.h" -@endcode - -3. Используйте нужные модули в своем коде. Примеры использования приведены в соответствующей теме - -*/ \ No newline at end of file