kernel_8hpp_source.html 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" lang="ja">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
  5. <meta http-equiv="X-UA-Compatible" content="IE=11"/>
  6. <meta name="generator" content="Doxygen 1.18.0"/>
  7. <meta name="viewport" content="width=device-width, initial-scale=1"/>
  8. <title>tinykernel: C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include/tinykernel/kernel.hpp ソースファイル</title>
  9. <link href="tabs.css" rel="stylesheet" type="text/css"/>
  10. <script type="text/javascript" src="codefolding.js"></script>
  11. <script type="text/javascript" src="clipboard.js"></script>
  12. <link href="navtree.css" rel="stylesheet" type="text/css"/>
  13. <script type="text/javascript" src="navtreedata.js"></script>
  14. <script type="text/javascript" src="navtree.js"></script>
  15. <script type="text/javascript" src="cookie.js"></script>
  16. <link href="search/search.css" rel="stylesheet" type="text/css"/>
  17. <script type="text/javascript" src="search/searchdata.js"></script>
  18. <script type="text/javascript" src="search/search.js"></script>
  19. <link href="doxygen.css" rel="stylesheet" type="text/css" />
  20. </head>
  21. <body>
  22. <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
  23. <div id="titlearea">
  24. <table cellspacing="0" cellpadding="0">
  25. <tbody>
  26. <tr id="projectrow">
  27. <td id="projectalign">
  28. <div id="projectname">tinykernel
  29. </div>
  30. </td>
  31. </tr>
  32. </tbody>
  33. </table>
  34. </div>
  35. <!-- end header part -->
  36. <!-- 構築: Doxygen 1.18.0 -->
  37. <script type="text/javascript">
  38. let searchBox = new SearchBox("searchBox", "search/",'.html');
  39. </script>
  40. <script type="text/javascript">
  41. document.addEventListener('DOMContentLoaded', codefold.init);
  42. </script>
  43. <script type="application/json" id="doxygen-config">
  44. {
  45. "relPath": "",
  46. "generateTreeView": true,
  47. "searchEngine": true,
  48. "serverBasedSearch": false,
  49. "disableIndex": false,
  50. "dynamicMenus": true,
  51. "fullSidebar": false
  52. }
  53. </script>
  54. <script type="text/javascript" src="menudata.js"></script>
  55. <script type="text/javascript" src="menu.js"></script>
  56. <div id="main-nav-mobile">
  57. <div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
  58. <label class="main-menu-btn" for="main-menu-state">
  59. <span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
  60. <span id="searchBoxPos1"></span>
  61. </div>
  62. </div><!-- main-nav-mobile -->
  63. <div id="main-nav">
  64. <ul class="sm sm-dox" id="main-menu">
  65. <li id="searchBoxPos2">
  66. <div id="MSearchBox" class="MSearchBoxInactive">
  67. <span class="left">
  68. <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
  69. <input type="text" id="MSearchField" value="" placeholder="検索" accesskey="S"/>
  70. </span><span class="right">
  71. <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
  72. </span>
  73. </div>
  74. </li>
  75. </ul>
  76. </div><!-- main-nav -->
  77. </div><!-- top -->
  78. <div id="side-nav" class="ui-resizable side-nav-resizable">
  79. <div id="nav-tree">
  80. <div id="nav-tree-contents">
  81. <div id="nav-sync" class="sync"></div>
  82. </div>
  83. </div>
  84. <div id="splitbar" class="ui-resizable-handle">
  85. </div>
  86. </div>
  87. <script type="text/javascript">
  88. document.addEventListener('DOMContentLoaded',() => { initNavTree('kernel_8hpp_source.html','',''); });
  89. </script>
  90. <div id="container">
  91. <div id="doc-content">
  92. <!-- window showing the filter options -->
  93. <div id="MSearchSelectWindow">
  94. </div>
  95. <!-- iframe showing the search results (closed by default) -->
  96. <div id="MSearchResultsWindow">
  97. <div id="MSearchResults">
  98. <div class="SRPage">
  99. <div id="SRIndex">
  100. <div id="SRResults"></div>
  101. <div class="SRStatus" id="Loading">読み取り中…</div>
  102. <div class="SRStatus" id="Searching">検索中…</div>
  103. <div class="SRStatus" id="NoMatches">一致する文字列を見つけられません</div>
  104. </div>
  105. </div>
  106. </div>
  107. </div>
  108. <div class="header">
  109. <div class="headertitle"><div class="title">kernel.hpp</div></div>
  110. </div><!--header-->
  111. <div class="contents">
  112. <a href="kernel_8hpp.html">[詳解]</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// tinykernel: minimal preemptive task scheduler for RP2350 (Pico 2, Cortex-M33)</span></div>
  113. <div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#pragma once</span></div>
  114. <div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
  115. <div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div>
  116. <div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;stddef.h&gt;</span></div>
  117. <div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
  118. <div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &quot;pico/runtime.h&quot;</span> <span class="comment">// PICO_RUNTIME_INIT_FUNC (static task registration)</span></div>
  119. <div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span></div>
  120. <div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#ifndef TK_TICKS_PER_SEC</span></div>
  121. <div class="line"><a id="l00011" name="l00011"></a><span class="lineno"><a class="line" href="kernel_8hpp.html#a5c791131c5ad22ed87a8d3ca2cd57d33"> 11</a></span><span class="preprocessor">#define TK_TICKS_PER_SEC 1000u</span></div>
  122. <div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#endif</span></div>
  123. <div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span></div>
  124. <div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#ifndef TK_TIME_SLICE_MS</span></div>
  125. <div class="line"><a id="l00016" name="l00016"></a><span class="lineno"><a class="line" href="kernel_8hpp.html#af32989639aecb5479b4239639fd133f7"> 16</a></span><span class="preprocessor">#define TK_TIME_SLICE_MS 10u</span></div>
  126. <div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#endif</span></div>
  127. <div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span></div>
  128. <div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef TK_MAX_TASKS</span></div>
  129. <div class="line"><a id="l00021" name="l00021"></a><span class="lineno"><a class="line" href="kernel_8hpp.html#a22e1d9f532aa297014c125110226443c"> 21</a></span><span class="preprocessor">#define TK_MAX_TASKS 32u</span></div>
  130. <div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#endif</span></div>
  131. <div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span></div>
  132. <div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#ifndef TK_DEFAULT_STACK_SIZE</span></div>
  133. <div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="kernel_8hpp.html#afde197f9493ef5bdb5b715ce8b52148d"> 26</a></span><span class="preprocessor">#define TK_DEFAULT_STACK_SIZE (4 * 1024)</span></div>
  134. <div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#endif</span></div>
  135. <div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
  136. <div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacetk.html">tk</a> {</div>
  137. <div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span></div>
  138. <div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc"> 32</a></span><span class="keyword">using </span><a class="code hl_typedef" href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc">TaskFn</a> = void (*)(<span class="keywordtype">void</span>* arg);</div>
  139. <div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span></div>
  140. <div class="foldopen" id="foldopen00039" data-start="{" data-end="};">
  141. <div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50e"> 39</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50e">Prio</a> : uint32_t {</div>
  142. <div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75"> 40</a></span> <a class="code hl_enumvalue" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75">PRIO_REALTIME</a> = 1, </div>
  143. <div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37"> 41</a></span> <a class="code hl_enumvalue" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37">PRIO_HIGH</a> = 5, </div>
  144. <div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca"> 42</a></span> <a class="code hl_enumvalue" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">PRIO_NORMAL</a> = 9, </div>
  145. <div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519"> 43</a></span> <a class="code hl_enumvalue" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519">PRIO_LOW</a> = 13, </div>
  146. <div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span>};</div>
  147. </div>
  148. <div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span></div>
  149. <div class="foldopen" id="foldopen00049" data-start="{" data-end="};">
  150. <div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="structtk_1_1_task_handle.html"> 49</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structtk_1_1_task_handle.html">TaskHandle</a> {</div>
  151. <div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="structtk_1_1_task_handle.html#a425e4877384e92ad75fee388bd54a7c3"> 50</a></span> uint8_t <a class="code hl_variable" href="structtk_1_1_task_handle.html#a425e4877384e92ad75fee388bd54a7c3">slot</a>{0xFF}; </div>
  152. <div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span></div>
  153. <div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="structtk_1_1_task_handle.html#afe8adf95998f82fe6d03a80700ef7927"> 53</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="structtk_1_1_task_handle.html#afe8adf95998f82fe6d03a80700ef7927">is_valid</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code hl_variable" href="structtk_1_1_task_handle.html#a425e4877384e92ad75fee388bd54a7c3">slot</a> != 0xFF; }</div>
  154. <div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span>};</div>
  155. </div>
  156. <div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span></div>
  157. <div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span>TaskHandle <a class="code hl_function" href="namespacetk.html#a6e721332f5a7d85998345ed218de7394">create</a>(<a class="code hl_typedef" href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc">TaskFn</a> fn, <span class="keywordtype">void</span>* arg = <span class="keyword">nullptr</span>, uint32_t prio = <a class="code hl_enumvalue" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">PRIO_NORMAL</a>);</div>
  158. <div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span></div>
  159. <div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk.html#a675f1829b87e2a43239b6f80a526d0ed">start</a>();</div>
  160. <div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span></div>
  161. <div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk.html#a8081956b0a19b87d5b7c81b772373397">yield</a>();</div>
  162. <div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span></div>
  163. <div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk.html#aae83f84121085578a7568437a8dc2447">sleep_ms</a>(uint32_t ms);</div>
  164. <div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span></div>
  165. <div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk.html#aba50cfc62cb8be71cf96df7f495a7a3d">exit</a>(<span class="keywordtype">int</span> code = 0);</div>
  166. <div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span></div>
  167. <div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span>uint64_t <a class="code hl_function" href="namespacetk.html#a46e15375fba47cbd1a93278f17e77848">now_ms</a>();</div>
  168. <div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span></div>
  169. <div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="keywordtype">bool</span> <a class="code hl_function" href="namespacetk.html#a6540aa25eb8562f6d6c8b37977d6cfe8">lock</a>();</div>
  170. <div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span></div>
  171. <div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk.html#a752b12f6862815c94a52347af52578b7">unlock</a>(<span class="keywordtype">bool</span> was_enabled);</div>
  172. <div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span></div>
  173. <div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk.html#a3254a7e2a9f5ed3abe44e8cf62a8dcfe">preempt_disable</a>();</div>
  174. <div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span></div>
  175. <div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk.html#a70e6ee5f456e67a24ce13ff0fd04e4d9">preempt_enable</a>();</div>
  176. <div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span></div>
  177. <div class="foldopen" id="foldopen00156" data-start="{" data-end="};">
  178. <div class="line"><a id="l00156" name="l00156"></a><span class="lineno"><a class="line" href="classtk_1_1_preempt_guard.html"> 156</a></span><span class="keyword">class </span><a class="code hl_function" href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e">PreemptGuard</a> {</div>
  179. <div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="keyword">public</span>:</div>
  180. <div class="line"><a id="l00158" name="l00158"></a><span class="lineno"><a class="line" href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e"> 158</a></span> <a class="code hl_function" href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e">PreemptGuard</a>() { <a class="code hl_function" href="namespacetk.html#a3254a7e2a9f5ed3abe44e8cf62a8dcfe">preempt_disable</a>(); }</div>
  181. <div class="line"><a id="l00159" name="l00159"></a><span class="lineno"><a class="line" href="classtk_1_1_preempt_guard.html#a329ea4d806861d9455168aeb01f41f86"> 159</a></span> <a class="code hl_function" href="classtk_1_1_preempt_guard.html#a329ea4d806861d9455168aeb01f41f86">~PreemptGuard</a>() { <a class="code hl_function" href="namespacetk.html#a70e6ee5f456e67a24ce13ff0fd04e4d9">preempt_enable</a>(); }</div>
  182. <div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div>
  183. <div class="line"><a id="l00161" name="l00161"></a><span class="lineno"><a class="line" href="classtk_1_1_preempt_guard.html#a360ac2b073064abc0f21db3127e7f389"> 161</a></span> <a class="code hl_function" href="classtk_1_1_preempt_guard.html#a360ac2b073064abc0f21db3127e7f389">PreemptGuard</a>(<span class="keyword">const</span> <a class="code hl_function" href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e">PreemptGuard</a>&amp;) = <span class="keyword">delete</span>;</div>
  184. <div class="line"><a id="l00162" name="l00162"></a><span class="lineno"><a class="line" href="classtk_1_1_preempt_guard.html#ad651c301bd81f95866e1cd380c2a2417"> 162</a></span> <a class="code hl_function" href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e">PreemptGuard</a>&amp; <a class="code hl_function" href="classtk_1_1_preempt_guard.html#ad651c301bd81f95866e1cd380c2a2417">operator=</a>(<span class="keyword">const</span> <a class="code hl_function" href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e">PreemptGuard</a>&amp;) = <span class="keyword">delete</span>;</div>
  185. <div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span>};</div>
  186. </div>
  187. <div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
  188. <div class="line"><a id="l00165" name="l00165"></a><span class="lineno"><a class="line" href="namespacetk.html#add371a241ec6c1695ef4e67935317edd"> 165</a></span><span class="keyword">using </span><a class="code hl_typedef" href="namespacetk.html#add371a241ec6c1695ef4e67935317edd">task_mask_t</a> = uint32_t;</div>
  189. <div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> </div>
  190. <div class="foldopen" id="foldopen00167" data-start="{" data-end="}">
  191. <div class="line"><a id="l00167" name="l00167"></a><span class="lineno"><a class="line" href="namespacetk_1_1detail.html"> 167</a></span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacetk_1_1detail.html">detail</a> {</div>
  192. <div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk_1_1detail.html#a447e4ec89b3f2748451891219b7e3738">static_register</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <a class="code hl_typedef" href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc">TaskFn</a> fn, uint32_t prio);</div>
  193. <div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span>uint32_t <a class="code hl_function" href="namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523">sched_lock</a>();</div>
  194. <div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">sched_unlock</a>(uint32_t save);</div>
  195. <div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk_1_1detail.html#a400363f36b5fb5dfc8aec11334471d0d">block_current_task_locked</a>();</div>
  196. <div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk_1_1detail.html#ab19385598f18560cb574cc86174ececa">wake_task_locked</a>(<a class="code hl_struct" href="structtk_1_1_task_handle.html">TaskHandle</a> handle);</div>
  197. <div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span>uint8_t <a class="code hl_function" href="namespacetk_1_1detail.html#a73a80d92a172d565201f99e8f31278e4">current_task_slot</a>();</div>
  198. <div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span>uint8_t <a class="code hl_function" href="namespacetk_1_1detail.html#a70ba35e0daee086ad86770f1e39c9b35">find_highest_prio_waiter</a>(<a class="code hl_typedef" href="namespacetk.html#add371a241ec6c1695ef4e67935317edd">task_mask_t</a> wait_mask);</div>
  199. <div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span>} <span class="comment">// namespace detail</span></div>
  200. </div>
  201. <div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div>
  202. <div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span>} <span class="comment">// namespace tk</span></div>
  203. <div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span></div>
  204. <div class="foldopen" id="foldopen00187" data-start="" data-end="">
  205. <div class="line"><a id="l00187" name="l00187"></a><span class="lineno"><a class="line" href="kernel_8hpp.html#af57e92069cc01608150a45032c5ad473"> 187</a></span><span class="preprocessor">#define TK_TASK(fn, prio) \</span></div>
  206. <div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="preprocessor"> static void tk_register_##fn(void) { \</span></div>
  207. <div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="preprocessor"> ::tk::detail::static_register(#fn, fn, (prio)); \</span></div>
  208. <div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="preprocessor"> } \</span></div>
  209. <div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span><span class="preprocessor"> PICO_RUNTIME_INIT_FUNC(tk_register_##fn, &quot;ZZ900&quot;);</span></div>
  210. </div>
  211. <div class="ttc" id="aclasstk_1_1_preempt_guard_html_a329ea4d806861d9455168aeb01f41f86"><div class="ttname"><a href="classtk_1_1_preempt_guard.html#a329ea4d806861d9455168aeb01f41f86">tk::PreemptGuard::~PreemptGuard</a></div><div class="ttdeci">~PreemptGuard()</div><div class="ttdef"><b>定義</b> kernel.hpp:159</div></div>
  212. <div class="ttc" id="aclasstk_1_1_preempt_guard_html_a360ac2b073064abc0f21db3127e7f389"><div class="ttname"><a href="classtk_1_1_preempt_guard.html#a360ac2b073064abc0f21db3127e7f389">tk::PreemptGuard::PreemptGuard</a></div><div class="ttdeci">PreemptGuard(const PreemptGuard &amp;)=delete</div></div>
  213. <div class="ttc" id="aclasstk_1_1_preempt_guard_html_a39e396ce51420c942e7d6549ec63f88e"><div class="ttname"><a href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e">tk::PreemptGuard::PreemptGuard</a></div><div class="ttdeci">PreemptGuard()</div><div class="ttdef"><b>定義</b> kernel.hpp:158</div></div>
  214. <div class="ttc" id="aclasstk_1_1_preempt_guard_html_ad651c301bd81f95866e1cd380c2a2417"><div class="ttname"><a href="classtk_1_1_preempt_guard.html#ad651c301bd81f95866e1cd380c2a2417">tk::PreemptGuard::operator=</a></div><div class="ttdeci">PreemptGuard &amp; operator=(const PreemptGuard &amp;)=delete</div></div>
  215. <div class="ttc" id="anamespacetk_1_1detail_html"><div class="ttname"><a href="namespacetk_1_1detail.html">tk::detail</a></div><div class="ttdef"><b>定義</b> kernel.hpp:167</div></div>
  216. <div class="ttc" id="anamespacetk_1_1detail_html_a400363f36b5fb5dfc8aec11334471d0d"><div class="ttname"><a href="namespacetk_1_1detail.html#a400363f36b5fb5dfc8aec11334471d0d">tk::detail::block_current_task_locked</a></div><div class="ttdeci">void block_current_task_locked()</div><div class="ttdef"><b>定義</b> scheduler.cpp:333</div></div>
  217. <div class="ttc" id="anamespacetk_1_1detail_html_a447e4ec89b3f2748451891219b7e3738"><div class="ttname"><a href="namespacetk_1_1detail.html#a447e4ec89b3f2748451891219b7e3738">tk::detail::static_register</a></div><div class="ttdeci">void static_register(const char *name, TaskFn fn, uint32_t prio)</div><div class="ttdef"><b>定義</b> scheduler.cpp:188</div></div>
  218. <div class="ttc" id="anamespacetk_1_1detail_html_a5b8fa6406a867edf8c4410fcb03c6523"><div class="ttname"><a href="namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523">tk::detail::sched_lock</a></div><div class="ttdeci">uint32_t sched_lock()</div><div class="ttdef"><b>定義</b> scheduler.cpp:325</div></div>
  219. <div class="ttc" id="anamespacetk_1_1detail_html_a70ba35e0daee086ad86770f1e39c9b35"><div class="ttname"><a href="namespacetk_1_1detail.html#a70ba35e0daee086ad86770f1e39c9b35">tk::detail::find_highest_prio_waiter</a></div><div class="ttdeci">uint8_t find_highest_prio_waiter(task_mask_t wait_mask)</div><div class="ttdef"><b>定義</b> scheduler.cpp:355</div></div>
  220. <div class="ttc" id="anamespacetk_1_1detail_html_a73a80d92a172d565201f99e8f31278e4"><div class="ttname"><a href="namespacetk_1_1detail.html#a73a80d92a172d565201f99e8f31278e4">tk::detail::current_task_slot</a></div><div class="ttdeci">uint8_t current_task_slot()</div><div class="ttdef"><b>定義</b> scheduler.cpp:349</div></div>
  221. <div class="ttc" id="anamespacetk_1_1detail_html_a80be9b2429346faf161eab01f595684b"><div class="ttname"><a href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">tk::detail::sched_unlock</a></div><div class="ttdeci">void sched_unlock(uint32_t save)</div><div class="ttdef"><b>定義</b> scheduler.cpp:329</div></div>
  222. <div class="ttc" id="anamespacetk_1_1detail_html_ab19385598f18560cb574cc86174ececa"><div class="ttname"><a href="namespacetk_1_1detail.html#ab19385598f18560cb574cc86174ececa">tk::detail::wake_task_locked</a></div><div class="ttdeci">void wake_task_locked(TaskHandle handle)</div><div class="ttdef"><b>定義</b> scheduler.cpp:340</div></div>
  223. <div class="ttc" id="anamespacetk_html"><div class="ttname"><a href="namespacetk.html">tk</a></div><div class="ttdef"><b>定義</b> actor.hpp:9</div></div>
  224. <div class="ttc" id="anamespacetk_html_a3254a7e2a9f5ed3abe44e8cf62a8dcfe"><div class="ttname"><a href="namespacetk.html#a3254a7e2a9f5ed3abe44e8cf62a8dcfe">tk::preempt_disable</a></div><div class="ttdeci">void preempt_disable()</div><div class="ttdoc">自コアのタスクスイッチ (プリエンプション) を一時的に禁止します</div><div class="ttdef"><b>定義</b> scheduler.cpp:369</div></div>
  225. <div class="ttc" id="anamespacetk_html_a3d47fbd63b95ed3b46bed70c2fa1e50e"><div class="ttname"><a href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50e">tk::Prio</a></div><div class="ttdeci">Prio</div><div class="ttdoc">タスクの優先度レベル</div><div class="ttdef"><b>定義</b> kernel.hpp:39</div></div>
  226. <div class="ttc" id="anamespacetk_html_a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca"><div class="ttname"><a href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">tk::PRIO_NORMAL</a></div><div class="ttdeci">@ PRIO_NORMAL</div><div class="ttdoc">通常優先度 (デフォルト)</div><div class="ttdef"><b>定義</b> kernel.hpp:42</div></div>
  227. <div class="ttc" id="anamespacetk_html_a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37"><div class="ttname"><a href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37">tk::PRIO_HIGH</a></div><div class="ttdeci">@ PRIO_HIGH</div><div class="ttdoc">高優先度</div><div class="ttdef"><b>定義</b> kernel.hpp:41</div></div>
  228. <div class="ttc" id="anamespacetk_html_a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75"><div class="ttname"><a href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75">tk::PRIO_REALTIME</a></div><div class="ttdeci">@ PRIO_REALTIME</div><div class="ttdoc">リアルタイム最優先</div><div class="ttdef"><b>定義</b> kernel.hpp:40</div></div>
  229. <div class="ttc" id="anamespacetk_html_a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519"><div class="ttname"><a href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519">tk::PRIO_LOW</a></div><div class="ttdeci">@ PRIO_LOW</div><div class="ttdoc">低優先度</div><div class="ttdef"><b>定義</b> kernel.hpp:43</div></div>
  230. <div class="ttc" id="anamespacetk_html_a46e15375fba47cbd1a93278f17e77848"><div class="ttname"><a href="namespacetk.html#a46e15375fba47cbd1a93278f17e77848">tk::now_ms</a></div><div class="ttdeci">uint64_t now_ms()</div><div class="ttdoc">システム起動時からの経過時間をミリ秒単位で取得します</div><div class="ttdef"><b>定義</b> scheduler.cpp:312</div></div>
  231. <div class="ttc" id="anamespacetk_html_a6540aa25eb8562f6d6c8b37977d6cfe8"><div class="ttname"><a href="namespacetk.html#a6540aa25eb8562f6d6c8b37977d6cfe8">tk::lock</a></div><div class="ttdeci">bool lock()</div><div class="ttdoc">ハードウェアスピンロックと全割り込み禁止によるクリティカルセクションに入ります</div><div class="ttdef"><b>定義</b> scheduler.cpp:316</div></div>
  232. <div class="ttc" id="anamespacetk_html_a675f1829b87e2a43239b6f80a526d0ed"><div class="ttname"><a href="namespacetk.html#a675f1829b87e2a43239b6f80a526d0ed">tk::start</a></div><div class="ttdeci">void start()</div><div class="ttdoc">tinykernel スケジューラを起動します</div><div class="ttdef"><b>定義</b> scheduler.cpp:247</div></div>
  233. <div class="ttc" id="anamespacetk_html_a6e721332f5a7d85998345ed218de7394"><div class="ttname"><a href="namespacetk.html#a6e721332f5a7d85998345ed218de7394">tk::create</a></div><div class="ttdeci">TaskHandle create(TaskFn fn, void *arg=nullptr, uint32_t prio=PRIO_NORMAL)</div><div class="ttdoc">タスクを生成・登録します</div><div class="ttdef"><b>定義</b> scheduler.cpp:204</div></div>
  234. <div class="ttc" id="anamespacetk_html_a70e6ee5f456e67a24ce13ff0fd04e4d9"><div class="ttname"><a href="namespacetk.html#a70e6ee5f456e67a24ce13ff0fd04e4d9">tk::preempt_enable</a></div><div class="ttdeci">void preempt_enable()</div><div class="ttdoc">自コアのタスクスイッチ (プリエンプション) を再開します</div><div class="ttdef"><b>定義</b> scheduler.cpp:376</div></div>
  235. <div class="ttc" id="anamespacetk_html_a752b12f6862815c94a52347af52578b7"><div class="ttname"><a href="namespacetk.html#a752b12f6862815c94a52347af52578b7">tk::unlock</a></div><div class="ttdeci">void unlock(bool was_enabled)</div><div class="ttdoc">tk::lock() で入ったクリティカルセクションを抜けます</div><div class="ttdef"><b>定義</b> scheduler.cpp:321</div></div>
  236. <div class="ttc" id="anamespacetk_html_a8081956b0a19b87d5b7c81b772373397"><div class="ttname"><a href="namespacetk.html#a8081956b0a19b87d5b7c81b772373397">tk::yield</a></div><div class="ttdeci">void yield()</div><div class="ttdoc">現在実行中のタスクを一時中断し、同優先度の他のタスクへ CPU を譲渡します</div><div class="ttdef"><b>定義</b> scheduler.cpp:276</div></div>
  237. <div class="ttc" id="anamespacetk_html_a8908cf1e54cdc4e14ac3003126722cfc"><div class="ttname"><a href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc">tk::TaskFn</a></div><div class="ttdeci">void(*)(void *arg) TaskFn</div><div class="ttdef"><b>定義</b> kernel.hpp:32</div></div>
  238. <div class="ttc" id="anamespacetk_html_aae83f84121085578a7568437a8dc2447"><div class="ttname"><a href="namespacetk.html#aae83f84121085578a7568437a8dc2447">tk::sleep_ms</a></div><div class="ttdeci">void sleep_ms(uint32_t ms)</div><div class="ttdoc">現在のタスクを指定時間スリープさせます</div><div class="ttdef"><b>定義</b> scheduler.cpp:284</div></div>
  239. <div class="ttc" id="anamespacetk_html_aba50cfc62cb8be71cf96df7f495a7a3d"><div class="ttname"><a href="namespacetk.html#aba50cfc62cb8be71cf96df7f495a7a3d">tk::exit</a></div><div class="ttdeci">void exit(int code=0)</div><div class="ttdoc">現在のタスクを終了・破棄します</div><div class="ttdef"><b>定義</b> scheduler.cpp:298</div></div>
  240. <div class="ttc" id="anamespacetk_html_add371a241ec6c1695ef4e67935317edd"><div class="ttname"><a href="namespacetk.html#add371a241ec6c1695ef4e67935317edd">tk::task_mask_t</a></div><div class="ttdeci">uint32_t task_mask_t</div><div class="ttdef"><b>定義</b> kernel.hpp:165</div></div>
  241. <div class="ttc" id="astructtk_1_1_task_handle_html"><div class="ttname"><a href="structtk_1_1_task_handle.html">tk::TaskHandle</a></div><div class="ttdoc">タスクの識別ハンドル</div><div class="ttdef"><b>定義</b> kernel.hpp:49</div></div>
  242. <div class="ttc" id="astructtk_1_1_task_handle_html_a425e4877384e92ad75fee388bd54a7c3"><div class="ttname"><a href="structtk_1_1_task_handle.html#a425e4877384e92ad75fee388bd54a7c3">tk::TaskHandle::slot</a></div><div class="ttdeci">uint8_t slot</div><div class="ttdoc">タスクスロット番号 (0xFF は無効/失敗)</div><div class="ttdef"><b>定義</b> kernel.hpp:50</div></div>
  243. <div class="ttc" id="astructtk_1_1_task_handle_html_afe8adf95998f82fe6d03a80700ef7927"><div class="ttname"><a href="structtk_1_1_task_handle.html#afe8adf95998f82fe6d03a80700ef7927">tk::TaskHandle::is_valid</a></div><div class="ttdeci">bool is_valid() const</div><div class="ttdef"><b>定義</b> kernel.hpp:53</div></div>
  244. </div><!-- fragment --></div><!-- contents -->
  245. </div><!-- doc-content -->
  246. </div><!-- container -->
  247. <!-- start footer part -->
  248. <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  249. <ul>
  250. <li class="navelem"><a href="dir_81986ce0535ef2803d801068519a8a4c.html">tinykernel</a></li><li class="navelem"><a href="dir_acd5872930fa412076ba552147794c0b.html">include</a></li><li class="navelem"><a href="dir_53c07a1711446230771e696affad55be.html">tinykernel</a></li><li class="navelem"><a href="kernel_8hpp.html">kernel.hpp</a></li>
  251. <li class="footer">構築: <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
  252. </ul>
  253. </div>
  254. </body>
  255. </html>