STM32_ExtendedLibs/Doc/html/bench__time_8h_source.html

422 lines
64 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibs/Inc/bench_time.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX","output/HTML-CSS"],
});
</script>
<script type="text/javascript" async="async" src="https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js"></script>
<script type="text/javascript" src="darkmode_toggle.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">MyLibs<span id="projectnumber">&#160;1.0</span>
</div>
<div id="projectbrief">Расширенные библиотеки для STM32</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('bench__time_8h_source.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">bench_time.h</div></div>
</div><!--header-->
<div class="contents">
<a href="bench__time_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/**</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">******************************************************************************</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">* @file bench_time.h</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">* @brief Заголовочный файл для измерения времени между событиями</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">******************************************************************************</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">* @addtogroup BENCH_TIME Time measurement</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">* @ingroup MYLIBS_DEFINES</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">* @brief Библиотека для измерения времени/тиков между событиями</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">* @details</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">Поддерживает:</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment">- Многоканальные измерения (несколько независимых таймеров)</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment">- Платформонезависимый интерфейс</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment">- Измерение в тиках или временных единицах</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">- Статистику измерений (мин/макс/среднее)</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">- Настраиваемый размер тиков для каждого канала</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"></span> </div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment">Параметры для конфигурации:</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment">- @ref BENCH_TIME_ENABLE - Включить бенч времени</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment">- @ref BENCH_TIME_MAX_CHANNELS - Максимальное количество каналов измерения (по умолчанию 8)</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment"></span> </div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">@par Пример использования:</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">@code</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">#include &quot;bench_time.h&quot;</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment"></span> </div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment">// Инициализация</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">BenchTime_Init();</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment"></span> </div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">// Измерение с SysTick</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">BenchTime_Start(0, HAL_GetTick, 0xFFFFFFFF);</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">some_function();</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment">uint32_t time = BenchTime_End(0, HAL_GetTick);</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment"></span> </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">// Измерение с TIM2 (16-бит)</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment">BenchTime_Start(1, TIM2-&gt;CNT, 0xFFFF);</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment">fast_function(); </span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment">uint32_t time2 = BenchTime_End(1, TIM2-&gt;CNT);</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment"></span> </div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment">// Измерение с DWT цикловым счетчиком</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment">BenchTime_Start(2, DWT-&gt;CYCCNT, 0xFFFFFFFF);</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment">critical_function();</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment">uint32_t cycles = BenchTime_End(2, DWT-&gt;CYCCNT);</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment"></span> </div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="comment">// Многоканальное измерение</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="comment">BenchTime_Start(0, HAL_GetTick, 1000); // общее время</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment">BenchTime_Start(1, TIM3-&gt;CNT, 500); // часть 1</span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment"></span> </div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment">// ... код 1</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment"></span> </div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment">uint32_t part1 = BenchTime_End(1, TIM3-&gt;CNT);</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment">BenchTime_Start(2, TIM4-&gt;CNT, 200); // часть 2 </span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="comment"></span> </div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="comment">// ... код 2</span></div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment"></span> </div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="comment">uint32_t part2 = BenchTime_End(2, TIM4-&gt;CNT);</span></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="comment">uint32_t total = BenchTime_End(0, HAL_GetTick); // общее время</span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="comment"></span> </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="comment">// Статистика</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="comment">uint32_t min_time = BenchTime_GetMin(0);</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment">uint32_t max_time = BenchTime_GetMax(0);</span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment">uint32_t avg_time = BenchTime_GetAverage(0);</span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment">uint32_t count = BenchTime_GetCount(0);</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment">@endcode</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment">* @{ </span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment">*****************************************************************************/</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="preprocessor">#ifndef __BENCH_TIME_H_</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="preprocessor">#define __BENCH_TIME_H_</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="preprocessor">#include &quot;<a class="code" href="mylibs__defs_8h.html">mylibs_defs.h</a>&quot;</span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="preprocessor">#ifdef BENCH_TIME_ENABLE</span></div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="comment">// Конфигурация библиотеки</span></div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="preprocessor">#ifndef BENCH_TIME_MAX_CHANNELS</span></div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor">#define BENCH_TIME_MAX_CHANNELS 8 </span><span class="comment">///&lt; Максимальное количество каналов измерения</span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="comment"></span> </div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="comment">/**</span></div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="comment"> * @brief Структура статистики измерений</span></div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00081" data-start="{" data-end="};">
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"><a class="line" href="struct_bench_time_stats__t.html"> 81</a></span><span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="struct_bench_time_stats__t.html#a39b71a5d48c4a51a553a26a9fb961ac8"> 82</a></span> uint32_t <a class="code hl_variable" href="struct_bench_time_stats__t.html#a39b71a5d48c4a51a553a26a9fb961ac8">min_ticks</a>; <span class="comment">///&lt; Минимальное время в тиках</span></div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="struct_bench_time_stats__t.html#a3da36eb65b03ba995b5905b4650ea93c"> 83</a></span> uint32_t <a class="code hl_variable" href="struct_bench_time_stats__t.html#a3da36eb65b03ba995b5905b4650ea93c">max_ticks</a>; <span class="comment">///&lt; Максимальное время в тиках </span></div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="struct_bench_time_stats__t.html#a21499b0b19d1ed27f8cea069f674e8ec"> 84</a></span> uint32_t <a class="code hl_variable" href="struct_bench_time_stats__t.html#a21499b0b19d1ed27f8cea069f674e8ec">total_ticks</a>; <span class="comment">///&lt; Суммарное время в тиках</span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"><a class="line" href="struct_bench_time_stats__t.html#a5e95ef31dd0daf973894ef2f034d1f71"> 85</a></span> uint32_t <a class="code hl_variable" href="struct_bench_time_stats__t.html#a5e95ef31dd0daf973894ef2f034d1f71">count</a>; <span class="comment">///&lt; Количество измерений</span></div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"><a class="line" href="struct_bench_time_stats__t.html#a2c739e1db6b26ceac5db3f2c44c177a0"> 86</a></span> uint32_t <a class="code hl_variable" href="struct_bench_time_stats__t.html#a2c739e1db6b26ceac5db3f2c44c177a0">last_ticks</a>; <span class="comment">///&lt; Последнее измеренное время</span></div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span>} <a class="code hl_struct" href="struct_bench_time_stats__t.html">BenchTimeStats_t</a>;</div>
</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="comment"></span> </div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="comment">/**</span></div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="comment"> * @brief Структура канала измерения</span></div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00092" data-start="{" data-end="};">
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"><a class="line" href="struct_bench_time_channel__t.html"> 92</a></span><span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"><a class="line" href="struct_bench_time_channel__t.html#a8140fe9e3d323404651f0cfeeae53928"> 93</a></span> uint32_t <a class="code hl_variable" href="struct_bench_time_channel__t.html#a8140fe9e3d323404651f0cfeeae53928">start_tick</a>; <span class="comment">///&lt; Время старта в тиках</span></div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"><a class="line" href="struct_bench_time_channel__t.html#a095d93e0228641f58b8661e263bc1bcd"> 94</a></span> uint32_t <a class="code hl_variable" href="struct_bench_time_channel__t.html#a095d93e0228641f58b8661e263bc1bcd">tick_period</a>; <span class="comment">///&lt; Период тиков для переполнения</span></div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"><a class="line" href="struct_bench_time_channel__t.html#a0f80bb194231df7921712d20bac603c9"> 95</a></span> uint32_t <a class="code hl_variable" href="struct_bench_time_channel__t.html#a0f80bb194231df7921712d20bac603c9">is_running</a>; <span class="comment">///&lt; Флаг активного измерения</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"><a class="line" href="struct_bench_time_channel__t.html#a22a3913e7925aa89cc12ec1d24a6c16c"> 96</a></span> <a class="code hl_struct" href="struct_bench_time_stats__t.html">BenchTimeStats_t</a> <a class="code hl_variable" href="struct_bench_time_channel__t.html#a22a3913e7925aa89cc12ec1d24a6c16c">stats</a>; <span class="comment">///&lt; Статистика измерений</span></div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span>} <a class="code hl_struct" href="struct_bench_time_channel__t.html">BenchTimeChannel_t</a>;</div>
</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="comment"></span> </div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="comment">/**</span></div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="comment"> * @brief Основная структура менеджера измерений</span></div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00102" data-start="{" data-end="};">
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"><a class="line" href="struct_bench_time__t.html"> 102</a></span><span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"><a class="line" href="struct_bench_time__t.html#a9ae6d45c610be9d4b7628a614ccb06d6"> 103</a></span> <a class="code hl_struct" href="struct_bench_time_channel__t.html">BenchTimeChannel_t</a> <a class="code hl_variable" href="struct_bench_time__t.html#a9ae6d45c610be9d4b7628a614ccb06d6">channels</a>[<a class="code hl_define" href="group___g_e_n___c_o_n_f_i_g.html#ga74fdf777ceefa5e7d67120fbda4cde52">BENCH_TIME_MAX_CHANNELS</a>]; <span class="comment">///&lt; Каналы измерения</span></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span>} <a class="code hl_struct" href="struct_bench_time__t.html">BenchTime_t</a>;</div>
</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"><a class="line" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d"> 106</a></span><span class="keyword">static</span> <a class="code hl_struct" href="struct_bench_time__t.html">BenchTime_t</a> <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a> = {0}; <span class="comment">///&lt; Внутренний экземпляр</span></div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="comment"></span> </div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="comment">/**</span></div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="comment"> * @brief Инициализация системы измерения времени</span></div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00111" data-start="{" data-end="}">
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"><a class="line" href="group___b_e_n_c_h___t_i_m_e.html#gabb7a665a9603ea2e4dbc4432e8cb6054"> 111</a></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="group___b_e_n_c_h___t_i_m_e.html#gabb7a665a9603ea2e4dbc4432e8cb6054">BenchTime_Init</a>(<span class="keywordtype">void</span>) {</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code hl_define" href="group___g_e_n___c_o_n_f_i_g.html#ga74fdf777ceefa5e7d67120fbda4cde52">BENCH_TIME_MAX_CHANNELS</a>; i++) {</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[i].start_tick = 0;</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[i].tick_period = 0xFFFFFFFF;</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[i].is_running = 0;</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[i].stats.min_ticks = 0xFFFFFFFF;</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[i].stats.max_ticks = 0;</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[i].stats.total_ticks = 0;</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[i].stats.count = 0;</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[i].stats.last_ticks = 0;</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> }</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span>}</div>
</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="comment"></span> </div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="comment">/**</span></div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="comment"> * @brief Начало измерения на указанном канале</span></div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="comment"> * @param channel Номер канала (0..BENCH_TIME_MAX_CHANNELS-1)</span></div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span><span class="comment"> * @param ticks Источник тиков (например: HAL_GetTick(), TIM2-&gt;CNT, DWT-&gt;CYCCNT)</span></div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="comment"> * @param tick_period Период тиков для переполнения</span></div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span><span class="comment"> * @return 1 - успех, 0 - ошибка</span></div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00131" data-start="{" data-end="}">
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"><a class="line" href="group___b_e_n_c_h___t_i_m_e.html#gac65338df38129964ce3e9d9cb2fcb349"> 131</a></span><span class="keyword">static</span> <span class="keyword">inline</span> uint32_t <a class="code hl_function" href="group___b_e_n_c_h___t_i_m_e.html#gac65338df38129964ce3e9d9cb2fcb349">BenchTime_Start</a>(uint8_t channel, uint32_t ticks, uint32_t tick_period) {</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">if</span> (channel &gt;= <a class="code hl_define" href="group___g_e_n___c_o_n_f_i_g.html#ga74fdf777ceefa5e7d67120fbda4cde52">BENCH_TIME_MAX_CHANNELS</a>) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[channel].is_running) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[channel].start_tick = ticks;</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[channel].tick_period = tick_period;</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[channel].is_running = 1;</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span>}</div>
</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span><span class="comment"></span> </div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="comment">/**</span></div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="comment"> * @brief Окончание измерения на указанном канале</span></div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span><span class="comment"> * @param channel Номер канала (0..BENCH_TIME_MAX_CHANNELS-1)</span></div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="comment"> * @param ticks Источник тиков (должен быть тот же что в Start)</span></div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="comment"> * @return Измеренное время в тиках, 0 - в случае ошибки</span></div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00147" data-start="{" data-end="}">
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"><a class="line" href="group___b_e_n_c_h___t_i_m_e.html#ga47a69851a2089140eac00cde18a12439"> 147</a></span><span class="keyword">static</span> <span class="keyword">inline</span> uint32_t <a class="code hl_function" href="group___b_e_n_c_h___t_i_m_e.html#ga47a69851a2089140eac00cde18a12439">BenchTime_End</a>(uint8_t channel, uint32_t ticks) {</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">if</span> (channel &gt;= <a class="code hl_define" href="group___g_e_n___c_o_n_f_i_g.html#ga74fdf777ceefa5e7d67120fbda4cde52">BENCH_TIME_MAX_CHANNELS</a>) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[channel].is_running) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> uint32_t end_tick = ticks;</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> uint32_t start_tick = <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[channel].start_tick;</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> uint32_t tick_period = <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[channel].tick_period;</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> uint32_t elapsed_ticks;</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">if</span> (end_tick &gt;= start_tick) {</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> elapsed_ticks = end_tick - start_tick;</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> elapsed_ticks = (tick_period - start_tick) + end_tick + 1;</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> }</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">if</span> (elapsed_ticks &gt; tick_period) {</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> elapsed_ticks = tick_period;</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> }</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> </div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[channel].is_running = 0;</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="comment">// Обновление статистики</span></div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <a class="code hl_struct" href="struct_bench_time_stats__t.html">BenchTimeStats_t</a>* stats = &amp;<a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[channel].stats;</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> stats-&gt;<a class="code hl_variable" href="struct_bench_time_stats__t.html#a2c739e1db6b26ceac5db3f2c44c177a0">last_ticks</a> = elapsed_ticks;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">if</span> (elapsed_ticks &lt; stats-&gt;min_ticks) {</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> stats-&gt;<a class="code hl_variable" href="struct_bench_time_stats__t.html#a39b71a5d48c4a51a553a26a9fb961ac8">min_ticks</a> = elapsed_ticks;</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> }</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">if</span> (elapsed_ticks &gt; stats-&gt;<a class="code hl_variable" href="struct_bench_time_stats__t.html#a3da36eb65b03ba995b5905b4650ea93c">max_ticks</a>) {</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> stats-&gt;<a class="code hl_variable" href="struct_bench_time_stats__t.html#a3da36eb65b03ba995b5905b4650ea93c">max_ticks</a> = elapsed_ticks;</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> }</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> stats-&gt;<a class="code hl_variable" href="struct_bench_time_stats__t.html#a21499b0b19d1ed27f8cea069f674e8ec">total_ticks</a> += elapsed_ticks;</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> stats-&gt;<a class="code hl_variable" href="struct_bench_time_stats__t.html#a5e95ef31dd0daf973894ef2f034d1f71">count</a>++;</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> </div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">return</span> elapsed_ticks;</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span>}</div>
</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="comment"></span> </div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="comment">/**</span></div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="comment"> * @brief Получение минимального времени измерения</span></div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00189" data-start="{" data-end="}">
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"><a class="line" href="group___b_e_n_c_h___t_i_m_e.html#ga273d45255fe4403fc25648d60cca7705"> 189</a></span><span class="keyword">static</span> <span class="keyword">inline</span> uint32_t <a class="code hl_function" href="group___b_e_n_c_h___t_i_m_e.html#ga273d45255fe4403fc25648d60cca7705">BenchTime_GetMin</a>(uint8_t channel) {</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">if</span> (channel &gt;= <a class="code hl_define" href="group___g_e_n___c_o_n_f_i_g.html#ga74fdf777ceefa5e7d67120fbda4cde52">BENCH_TIME_MAX_CHANNELS</a>) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[channel].stats.min_ticks;</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span>}</div>
</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span><span class="comment"></span> </div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span><span class="comment">/**</span></div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span><span class="comment"> * @brief Получение максимального времени измерения</span></div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00197" data-start="{" data-end="}">
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"><a class="line" href="group___b_e_n_c_h___t_i_m_e.html#ga07e27d7b169c9fa1abd57281bb4e374e"> 197</a></span><span class="keyword">static</span> <span class="keyword">inline</span> uint32_t <a class="code hl_function" href="group___b_e_n_c_h___t_i_m_e.html#ga07e27d7b169c9fa1abd57281bb4e374e">BenchTime_GetMax</a>(uint8_t channel) {</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keywordflow">if</span> (channel &gt;= <a class="code hl_define" href="group___g_e_n___c_o_n_f_i_g.html#ga74fdf777ceefa5e7d67120fbda4cde52">BENCH_TIME_MAX_CHANNELS</a>) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[channel].stats.max_ticks;</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span>}</div>
</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span><span class="comment"></span> </div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span><span class="comment">/**</span></div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span><span class="comment"> * @brief Получение среднего времени измерения</span></div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00205" data-start="{" data-end="}">
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"><a class="line" href="group___b_e_n_c_h___t_i_m_e.html#ga24e2450d5ea921074ec5d7a1e4d56ba8"> 205</a></span><span class="keyword">static</span> <span class="keyword">inline</span> uint32_t <a class="code hl_function" href="group___b_e_n_c_h___t_i_m_e.html#ga24e2450d5ea921074ec5d7a1e4d56ba8">BenchTime_GetAverage</a>(uint8_t channel) {</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">if</span> (channel &gt;= <a class="code hl_define" href="group___g_e_n___c_o_n_f_i_g.html#ga74fdf777ceefa5e7d67120fbda4cde52">BENCH_TIME_MAX_CHANNELS</a>) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <a class="code hl_struct" href="struct_bench_time_stats__t.html">BenchTimeStats_t</a>* stats = &amp;<a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[channel].stats;</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">if</span> (stats-&gt;<a class="code hl_variable" href="struct_bench_time_stats__t.html#a5e95ef31dd0daf973894ef2f034d1f71">count</a> == 0) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">return</span> stats-&gt;<a class="code hl_variable" href="struct_bench_time_stats__t.html#a21499b0b19d1ed27f8cea069f674e8ec">total_ticks</a> / stats-&gt;<a class="code hl_variable" href="struct_bench_time_stats__t.html#a5e95ef31dd0daf973894ef2f034d1f71">count</a>;</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span>}</div>
</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span><span class="comment"></span> </div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="comment">/**</span></div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span><span class="comment"> * @brief Получение количества измерений</span></div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00215" data-start="{" data-end="}">
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"><a class="line" href="group___b_e_n_c_h___t_i_m_e.html#gabd1301ca79a30c782970f89fd147df3a"> 215</a></span><span class="keyword">static</span> <span class="keyword">inline</span> uint32_t <a class="code hl_function" href="group___b_e_n_c_h___t_i_m_e.html#gabd1301ca79a30c782970f89fd147df3a">BenchTime_GetCount</a>(uint8_t channel) {</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">if</span> (channel &gt;= <a class="code hl_define" href="group___g_e_n___c_o_n_f_i_g.html#ga74fdf777ceefa5e7d67120fbda4cde52">BENCH_TIME_MAX_CHANNELS</a>) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[channel].stats.count;</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span>}</div>
</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span><span class="comment"></span> </div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span><span class="comment">/**</span></div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span><span class="comment"> * @brief Получение последнего измеренного времени</span></div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00223" data-start="{" data-end="}">
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"><a class="line" href="group___b_e_n_c_h___t_i_m_e.html#gacf3a738d6423d71b238058a63558a4ed"> 223</a></span><span class="keyword">static</span> <span class="keyword">inline</span> uint32_t <a class="code hl_function" href="group___b_e_n_c_h___t_i_m_e.html#gacf3a738d6423d71b238058a63558a4ed">BenchTime_GetLast</a>(uint8_t channel) {</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">if</span> (channel &gt;= <a class="code hl_define" href="group___g_e_n___c_o_n_f_i_g.html#ga74fdf777ceefa5e7d67120fbda4cde52">BENCH_TIME_MAX_CHANNELS</a>) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[channel].stats.last_ticks;</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span>}</div>
</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span><span class="comment"></span> </div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span><span class="comment">/**</span></div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span><span class="comment"> * @brief Сброс статистики для канала</span></div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00231" data-start="{" data-end="}">
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"><a class="line" href="group___b_e_n_c_h___t_i_m_e.html#ga31a6b2b181b92bcb15f46758f5d57f35"> 231</a></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="group___b_e_n_c_h___t_i_m_e.html#ga31a6b2b181b92bcb15f46758f5d57f35">BenchTime_ResetStats</a>(uint8_t channel) {</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">if</span> (channel &gt;= <a class="code hl_define" href="group___g_e_n___c_o_n_f_i_g.html#ga74fdf777ceefa5e7d67120fbda4cde52">BENCH_TIME_MAX_CHANNELS</a>) <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <a class="code hl_struct" href="struct_bench_time_stats__t.html">BenchTimeStats_t</a>* stats = &amp;<a class="code hl_variable" href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a>.channels[channel].stats;</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> stats-&gt;<a class="code hl_variable" href="struct_bench_time_stats__t.html#a39b71a5d48c4a51a553a26a9fb961ac8">min_ticks</a> = 0xFFFFFFFF;</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> stats-&gt;<a class="code hl_variable" href="struct_bench_time_stats__t.html#a3da36eb65b03ba995b5905b4650ea93c">max_ticks</a> = 0;</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> stats-&gt;<a class="code hl_variable" href="struct_bench_time_stats__t.html#a21499b0b19d1ed27f8cea069f674e8ec">total_ticks</a> = 0;</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> stats-&gt;<a class="code hl_variable" href="struct_bench_time_stats__t.html#a5e95ef31dd0daf973894ef2f034d1f71">count</a> = 0;</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> stats-&gt;<a class="code hl_variable" href="struct_bench_time_stats__t.html#a2c739e1db6b26ceac5db3f2c44c177a0">last_ticks</a> = 0;</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span>}</div>
</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span><span class="preprocessor">#else </span><span class="comment">//BENCH_TIME_ENABLE</span></div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> </div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span><span class="preprocessor">#define BenchTime_Init()</span></div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span><span class="preprocessor">#define BenchTime_Start(channel, ticks, tick_period) 0</span></div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span><span class="preprocessor">#define BenchTime_End(channel, ticks) 0</span></div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span><span class="preprocessor">#define BenchTime_GetMin(channel) 0</span></div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span><span class="preprocessor">#define BenchTime_GetMax(channel) 0</span></div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span><span class="preprocessor">#define BenchTime_GetAverage(channel) 0</span></div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span><span class="preprocessor">#define BenchTime_GetCount(channel) 0</span></div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span><span class="preprocessor">#define BenchTime_GetLast(channel) 0</span></div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span><span class="preprocessor">#define BenchTime_ResetStats(channel)</span></div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> </div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span><span class="preprocessor">#endif </span><span class="comment">//BENCH_TIME_ENABLE</span></div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> </div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span><span class="preprocessor">#endif </span><span class="comment">// __BENCH_TIME_H_</span></div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><span class="comment"></span> </div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span><span class="comment">/** BENCH_TIME</span></div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span><span class="comment"> * @}</span></div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span><span class="comment"> */</span></div>
<div class="ttc" id="agroup___b_e_n_c_h___t_i_m_e_html_ga07e27d7b169c9fa1abd57281bb4e374e"><div class="ttname"><a href="group___b_e_n_c_h___t_i_m_e.html#ga07e27d7b169c9fa1abd57281bb4e374e">BenchTime_GetMax</a></div><div class="ttdeci">static uint32_t BenchTime_GetMax(uint8_t channel)</div><div class="ttdoc">Получение максимального времени измерения</div><div class="ttdef"><b>Definition</b> <a href="#l00197">bench_time.h:197</a></div></div>
<div class="ttc" id="agroup___b_e_n_c_h___t_i_m_e_html_ga24e2450d5ea921074ec5d7a1e4d56ba8"><div class="ttname"><a href="group___b_e_n_c_h___t_i_m_e.html#ga24e2450d5ea921074ec5d7a1e4d56ba8">BenchTime_GetAverage</a></div><div class="ttdeci">static uint32_t BenchTime_GetAverage(uint8_t channel)</div><div class="ttdoc">Получение среднего времени измерения</div><div class="ttdef"><b>Definition</b> <a href="#l00205">bench_time.h:205</a></div></div>
<div class="ttc" id="agroup___b_e_n_c_h___t_i_m_e_html_ga273d45255fe4403fc25648d60cca7705"><div class="ttname"><a href="group___b_e_n_c_h___t_i_m_e.html#ga273d45255fe4403fc25648d60cca7705">BenchTime_GetMin</a></div><div class="ttdeci">static uint32_t BenchTime_GetMin(uint8_t channel)</div><div class="ttdoc">Получение минимального времени измерения</div><div class="ttdef"><b>Definition</b> <a href="#l00189">bench_time.h:189</a></div></div>
<div class="ttc" id="agroup___b_e_n_c_h___t_i_m_e_html_ga31a6b2b181b92bcb15f46758f5d57f35"><div class="ttname"><a href="group___b_e_n_c_h___t_i_m_e.html#ga31a6b2b181b92bcb15f46758f5d57f35">BenchTime_ResetStats</a></div><div class="ttdeci">static void BenchTime_ResetStats(uint8_t channel)</div><div class="ttdoc">Сброс статистики для канала</div><div class="ttdef"><b>Definition</b> <a href="#l00231">bench_time.h:231</a></div></div>
<div class="ttc" id="agroup___b_e_n_c_h___t_i_m_e_html_ga47a69851a2089140eac00cde18a12439"><div class="ttname"><a href="group___b_e_n_c_h___t_i_m_e.html#ga47a69851a2089140eac00cde18a12439">BenchTime_End</a></div><div class="ttdeci">static uint32_t BenchTime_End(uint8_t channel, uint32_t ticks)</div><div class="ttdoc">Окончание измерения на указанном канале</div><div class="ttdef"><b>Definition</b> <a href="#l00147">bench_time.h:147</a></div></div>
<div class="ttc" id="agroup___b_e_n_c_h___t_i_m_e_html_ga8e53ef7f7df233bd4e737a87bb203d9d"><div class="ttname"><a href="group___b_e_n_c_h___t_i_m_e.html#ga8e53ef7f7df233bd4e737a87bb203d9d">hbt</a></div><div class="ttdeci">static BenchTime_t hbt</div><div class="ttdoc">Внутренний экземпляр</div><div class="ttdef"><b>Definition</b> <a href="#l00106">bench_time.h:106</a></div></div>
<div class="ttc" id="agroup___b_e_n_c_h___t_i_m_e_html_gabb7a665a9603ea2e4dbc4432e8cb6054"><div class="ttname"><a href="group___b_e_n_c_h___t_i_m_e.html#gabb7a665a9603ea2e4dbc4432e8cb6054">BenchTime_Init</a></div><div class="ttdeci">static void BenchTime_Init(void)</div><div class="ttdoc">Инициализация системы измерения времени</div><div class="ttdef"><b>Definition</b> <a href="#l00111">bench_time.h:111</a></div></div>
<div class="ttc" id="agroup___b_e_n_c_h___t_i_m_e_html_gabd1301ca79a30c782970f89fd147df3a"><div class="ttname"><a href="group___b_e_n_c_h___t_i_m_e.html#gabd1301ca79a30c782970f89fd147df3a">BenchTime_GetCount</a></div><div class="ttdeci">static uint32_t BenchTime_GetCount(uint8_t channel)</div><div class="ttdoc">Получение количества измерений</div><div class="ttdef"><b>Definition</b> <a href="#l00215">bench_time.h:215</a></div></div>
<div class="ttc" id="agroup___b_e_n_c_h___t_i_m_e_html_gac65338df38129964ce3e9d9cb2fcb349"><div class="ttname"><a href="group___b_e_n_c_h___t_i_m_e.html#gac65338df38129964ce3e9d9cb2fcb349">BenchTime_Start</a></div><div class="ttdeci">static uint32_t BenchTime_Start(uint8_t channel, uint32_t ticks, uint32_t tick_period)</div><div class="ttdoc">Начало измерения на указанном канале</div><div class="ttdef"><b>Definition</b> <a href="#l00131">bench_time.h:131</a></div></div>
<div class="ttc" id="agroup___b_e_n_c_h___t_i_m_e_html_gacf3a738d6423d71b238058a63558a4ed"><div class="ttname"><a href="group___b_e_n_c_h___t_i_m_e.html#gacf3a738d6423d71b238058a63558a4ed">BenchTime_GetLast</a></div><div class="ttdeci">static uint32_t BenchTime_GetLast(uint8_t channel)</div><div class="ttdoc">Получение последнего измеренного времени</div><div class="ttdef"><b>Definition</b> <a href="#l00223">bench_time.h:223</a></div></div>
<div class="ttc" id="agroup___g_e_n___c_o_n_f_i_g_html_ga74fdf777ceefa5e7d67120fbda4cde52"><div class="ttname"><a href="group___g_e_n___c_o_n_f_i_g.html#ga74fdf777ceefa5e7d67120fbda4cde52">BENCH_TIME_MAX_CHANNELS</a></div><div class="ttdeci">#define BENCH_TIME_MAX_CHANNELS</div><div class="ttdoc">Максимальное количество каналов измерения</div><div class="ttdef"><b>Definition</b> <a href="mylibs__config_8h_source.html#l00082">mylibs_config.h:82</a></div></div>
<div class="ttc" id="amylibs__defs_8h_html"><div class="ttname"><a href="mylibs__defs_8h.html">mylibs_defs.h</a></div><div class="ttdoc">Заголочный файл для дефайнов библиотеки MyLibsGeneral.</div></div>
<div class="ttc" id="astruct_bench_time__t_html"><div class="ttname"><a href="struct_bench_time__t.html">BenchTime_t</a></div><div class="ttdoc">Основная структура менеджера измерений</div><div class="ttdef"><b>Definition</b> <a href="#l00102">bench_time.h:102</a></div></div>
<div class="ttc" id="astruct_bench_time__t_html_a9ae6d45c610be9d4b7628a614ccb06d6"><div class="ttname"><a href="struct_bench_time__t.html#a9ae6d45c610be9d4b7628a614ccb06d6">BenchTime_t::channels</a></div><div class="ttdeci">BenchTimeChannel_t channels[16]</div><div class="ttdoc">Каналы измерения</div><div class="ttdef"><b>Definition</b> <a href="#l00103">bench_time.h:103</a></div></div>
<div class="ttc" id="astruct_bench_time_channel__t_html"><div class="ttname"><a href="struct_bench_time_channel__t.html">BenchTimeChannel_t</a></div><div class="ttdoc">Структура канала измерения</div><div class="ttdef"><b>Definition</b> <a href="#l00092">bench_time.h:92</a></div></div>
<div class="ttc" id="astruct_bench_time_channel__t_html_a095d93e0228641f58b8661e263bc1bcd"><div class="ttname"><a href="struct_bench_time_channel__t.html#a095d93e0228641f58b8661e263bc1bcd">BenchTimeChannel_t::tick_period</a></div><div class="ttdeci">uint32_t tick_period</div><div class="ttdoc">Период тиков для переполнения</div><div class="ttdef"><b>Definition</b> <a href="#l00094">bench_time.h:94</a></div></div>
<div class="ttc" id="astruct_bench_time_channel__t_html_a0f80bb194231df7921712d20bac603c9"><div class="ttname"><a href="struct_bench_time_channel__t.html#a0f80bb194231df7921712d20bac603c9">BenchTimeChannel_t::is_running</a></div><div class="ttdeci">uint32_t is_running</div><div class="ttdoc">Флаг активного измерения</div><div class="ttdef"><b>Definition</b> <a href="#l00095">bench_time.h:95</a></div></div>
<div class="ttc" id="astruct_bench_time_channel__t_html_a22a3913e7925aa89cc12ec1d24a6c16c"><div class="ttname"><a href="struct_bench_time_channel__t.html#a22a3913e7925aa89cc12ec1d24a6c16c">BenchTimeChannel_t::stats</a></div><div class="ttdeci">BenchTimeStats_t stats</div><div class="ttdoc">Статистика измерений</div><div class="ttdef"><b>Definition</b> <a href="#l00096">bench_time.h:96</a></div></div>
<div class="ttc" id="astruct_bench_time_channel__t_html_a8140fe9e3d323404651f0cfeeae53928"><div class="ttname"><a href="struct_bench_time_channel__t.html#a8140fe9e3d323404651f0cfeeae53928">BenchTimeChannel_t::start_tick</a></div><div class="ttdeci">uint32_t start_tick</div><div class="ttdoc">Время старта в тиках</div><div class="ttdef"><b>Definition</b> <a href="#l00093">bench_time.h:93</a></div></div>
<div class="ttc" id="astruct_bench_time_stats__t_html"><div class="ttname"><a href="struct_bench_time_stats__t.html">BenchTimeStats_t</a></div><div class="ttdoc">Структура статистики измерений</div><div class="ttdef"><b>Definition</b> <a href="#l00081">bench_time.h:81</a></div></div>
<div class="ttc" id="astruct_bench_time_stats__t_html_a21499b0b19d1ed27f8cea069f674e8ec"><div class="ttname"><a href="struct_bench_time_stats__t.html#a21499b0b19d1ed27f8cea069f674e8ec">BenchTimeStats_t::total_ticks</a></div><div class="ttdeci">uint32_t total_ticks</div><div class="ttdoc">Суммарное время в тиках</div><div class="ttdef"><b>Definition</b> <a href="#l00084">bench_time.h:84</a></div></div>
<div class="ttc" id="astruct_bench_time_stats__t_html_a2c739e1db6b26ceac5db3f2c44c177a0"><div class="ttname"><a href="struct_bench_time_stats__t.html#a2c739e1db6b26ceac5db3f2c44c177a0">BenchTimeStats_t::last_ticks</a></div><div class="ttdeci">uint32_t last_ticks</div><div class="ttdoc">Последнее измеренное время</div><div class="ttdef"><b>Definition</b> <a href="#l00086">bench_time.h:86</a></div></div>
<div class="ttc" id="astruct_bench_time_stats__t_html_a39b71a5d48c4a51a553a26a9fb961ac8"><div class="ttname"><a href="struct_bench_time_stats__t.html#a39b71a5d48c4a51a553a26a9fb961ac8">BenchTimeStats_t::min_ticks</a></div><div class="ttdeci">uint32_t min_ticks</div><div class="ttdoc">Минимальное время в тиках</div><div class="ttdef"><b>Definition</b> <a href="#l00082">bench_time.h:82</a></div></div>
<div class="ttc" id="astruct_bench_time_stats__t_html_a3da36eb65b03ba995b5905b4650ea93c"><div class="ttname"><a href="struct_bench_time_stats__t.html#a3da36eb65b03ba995b5905b4650ea93c">BenchTimeStats_t::max_ticks</a></div><div class="ttdeci">uint32_t max_ticks</div><div class="ttdoc">Максимальное время в тиках</div><div class="ttdef"><b>Definition</b> <a href="#l00083">bench_time.h:83</a></div></div>
<div class="ttc" id="astruct_bench_time_stats__t_html_a5e95ef31dd0daf973894ef2f034d1f71"><div class="ttname"><a href="struct_bench_time_stats__t.html#a5e95ef31dd0daf973894ef2f034d1f71">BenchTimeStats_t::count</a></div><div class="ttdeci">uint32_t count</div><div class="ttdoc">Количество измерений</div><div class="ttdef"><b>Definition</b> <a href="#l00085">bench_time.h:85</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_d4b2573a0c19afb61452cc3d00967af1.html">MyLibs</a></li><li class="navelem"><a href="dir_8eb68c124db7670c3cb56141b10519ea.html">Inc</a></li><li class="navelem"><a href="bench__time_8h.html">bench_time.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.14.0 </li>
</ul>
</div>
</body>
</html>