]> begriffs open source - cmsis/blob - main/RTOS2/html/group__CMSIS__RTOS__KernelCtrl.html
Update documentation for branch main
[cmsis] / main / RTOS2 / html / group__CMSIS__RTOS__KernelCtrl.html
1 <!-- HTML header for doxygen 1.9.6-->
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
4 <head>
5 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
6 <meta http-equiv="X-UA-Compatible" content="IE=11"/>
7 <meta name="viewport" content="width=device-width, initial-scale=1"/>
8 <title>CMSIS-RTOS2: Kernel Information and Control</title>
9 <link href="doxygen.css" rel="stylesheet" type="text/css"/>
10 <link href="tabs.css" rel="stylesheet" type="text/css"/>
11 <link href="extra_navtree.css" rel="stylesheet" type="text/css"/>
12 <link href="extra_stylesheet.css" rel="stylesheet" type="text/css"/>
13 <link href="extra_search.css" rel="stylesheet" type="text/css"/>
14 <script type="text/javascript" src="jquery.js"></script>
15 <script type="text/javascript" src="dynsections.js"></script>
16 <script type="text/javascript" src="printComponentTabs.js"></script>
17 <script type="text/javascript" src="footer.js"></script>
18 <script type="text/javascript" src="navtree.js"></script>
19 <link href="navtree.css" rel="stylesheet" type="text/css"/>
20 <script type="text/javascript" src="resize.js"></script>
21 <script type="text/javascript" src="navtreedata.js"></script>
22 <script type="text/javascript" src="navtree.js"></script>
23 <link href="search/search.css" rel="stylesheet" type="text/css"/>
24 <script type="text/javascript" src="search/searchdata.js"></script>
25 <script type="text/javascript" src="search/search.js"></script>
26 <script type="text/javascript">
27 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
28   $(document).ready(function() { init_search(); });
29 /* @license-end */
30 </script>
31 <script type="text/javascript" src="darkmode_toggle.js"></script>
32 <link href="extra_stylesheet.css" rel="stylesheet" type="text/css"/>
33 <link href="extra_navtree.css" rel="stylesheet" type="text/css"/>
34 <link href="extra_search.css" rel="stylesheet" type="text/css"/>
35 <link href="version.css" rel="stylesheet" type="text/css" />
36 <script type="text/javascript" src="../../../version.js"></script>
37 </head>
38 <body>
39 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
40 <div id="titlearea">
41 <table cellspacing="0" cellpadding="0">
42  <tbody>
43  <tr style="height: 55px;">
44   <td id="projectlogo" style="padding: 1.5em;"><img alt="Logo" src="cmsis_logo_white_small.png"/></td>
45   <td style="padding-left: 1em; padding-bottom: 1em;padding-top: 1em;">
46    <div id="projectname">CMSIS-RTOS2
47    &#160;<span id="projectnumber"><script type="text/javascript">
48      <!--
49      writeHeader.call(this);
50      writeVersionDropdown.call(this);
51      //-->
52     </script>
53    </span>
54    </div>
55    <div id="projectbrief">Real-Time Operating System API</div>
56   </td>
57    <td>        <div id="MSearchBox" class="MSearchBoxInactive">
58         <span class="left">
59           <span id="MSearchSelect"                onmouseover="return searchBox.OnSearchSelectShow()"                onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
60           <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
61                onfocus="searchBox.OnSearchFieldFocus(true)" 
62                onblur="searchBox.OnSearchFieldFocus(false)" 
63                onkeyup="searchBox.OnSearchFieldChange(event)"/>
64           </span><span class="right">
65             <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
66           </span>
67         </div>
68 </td>
69   <!--END !PROJECT_NAME-->
70  </tr>
71  </tbody>
72 </table>
73 </div>
74 <!-- end header part -->
75 <div id="CMSISnav" class="tabs1">
76   <ul class="tablist">
77     <script type="text/javascript">
78       writeComponentTabs.call(this);
79     </script>
80   </ul>
81 </div>
82 <script type="text/javascript">
83   writeSubComponentTabs.call(this);
84 </script>
85 <!-- Generated by Doxygen 1.9.6 -->
86 <script type="text/javascript">
87 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
88 var searchBox = new SearchBox("searchBox", "search/",'.html');
89 /* @license-end */
90 </script>
91 </div><!-- top -->
92 <div id="side-nav" class="ui-resizable side-nav-resizable">
93   <div id="nav-tree">
94     <div id="nav-tree-contents">
95       <div id="nav-sync" class="sync"></div>
96     </div>
97   </div>
98   <div id="splitbar" style="-moz-user-select:none;" 
99        class="ui-resizable-handle">
100   </div>
101 </div>
102 <script type="text/javascript">
103 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
104 $(document).ready(function(){initNavTree('group__CMSIS__RTOS__KernelCtrl.html',''); initResizable(); });
105 /* @license-end */
106 </script>
107 <div id="doc-content">
108 <!-- window showing the filter options -->
109 <div id="MSearchSelectWindow"
110      onmouseover="return searchBox.OnSearchSelectShow()"
111      onmouseout="return searchBox.OnSearchSelectHide()"
112      onkeydown="return searchBox.OnSearchSelectKey(event)">
113 </div>
114
115 <!-- iframe showing the search results (closed by default) -->
116 <div id="MSearchResultsWindow">
117 <div id="MSearchResults">
118 <div class="SRPage">
119 <div id="SRIndex">
120 <div id="SRResults"></div>
121 <div class="SRStatus" id="Loading">Loading...</div>
122 <div class="SRStatus" id="Searching">Searching...</div>
123 <div class="SRStatus" id="NoMatches">No Matches</div>
124 </div>
125 </div>
126 </div>
127 </div>
128
129 <div class="header">
130   <div class="summary">
131 <a href="#nested-classes">Data Structures</a> &#124;
132 <a href="#enum-members">Enumerations</a> &#124;
133 <a href="#func-members">Functions</a>  </div>
134   <div class="headertitle"><div class="title">Kernel Information and Control<div class="ingroups"><a class="el" href="group__CMSIS__RTOS.html">CMSIS-RTOS API v2</a></div></div></div>
135 </div><!--header-->
136 <div class="contents">
137
138 <p>Provides version/system information and starts/controls the RTOS Kernel.  
139 <a href="#details">More...</a></p>
140 <table class="memberdecls">
141 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
142 Data Structures</h2></td></tr>
143 <tr class="memitem:structosVersion__t"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#structosVersion__t">osVersion_t</a></td></tr>
144 <tr class="memdesc:structosVersion__t"><td class="mdescLeft">&#160;</td><td class="mdescRight">Version information.  <a href="group__CMSIS__RTOS__KernelCtrl.html#structosVersion__t">More...</a><br /></td></tr>
145 <tr class="separator:structosVersion__t"><td class="memSeparator" colspan="2">&#160;</td></tr>
146 </table><table class="memberdecls">
147 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a>
148 Enumerations</h2></td></tr>
149 <tr class="memitem:ga08326469274b668140ca934b168a5ad4"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga08326469274b668140ca934b168a5ad4">osKernelState_t</a> { <br />
150 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga08326469274b668140ca934b168a5ad4a2ad3e5912db47b497529d036c89e7995">osKernelInactive</a> = 0
151 , <br />
152 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga08326469274b668140ca934b168a5ad4a0596c6e14113447604753656417c9a24">osKernelReady</a> = 1
153 , <br />
154 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga08326469274b668140ca934b168a5ad4a8e0b699fbe1c8bb66fefadd5911cb6ce">osKernelRunning</a> = 2
155 , <br />
156 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga08326469274b668140ca934b168a5ad4a2fe382ad5ebab2257b35740414b28b01">osKernelLocked</a> = 3
157 , <br />
158 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga08326469274b668140ca934b168a5ad4ad364464ad84d63b1413a9ac8a962390c">osKernelSuspended</a> = 4
159 , <br />
160 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga08326469274b668140ca934b168a5ad4a0545c92c18ce8e6b24e82a0d694a0b4a">osKernelError</a> = -1
161 , <br />
162 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga08326469274b668140ca934b168a5ad4ab0a47576defa29396a649d9173d4bc4b">osKernelReserved</a> = 0x7FFFFFFF
163 <br />
164  }</td></tr>
165 <tr class="memdesc:ga08326469274b668140ca934b168a5ad4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Kernel state.  <a href="group__CMSIS__RTOS__KernelCtrl.html#ga08326469274b668140ca934b168a5ad4">More...</a><br /></td></tr>
166 <tr class="separator:ga08326469274b668140ca934b168a5ad4"><td class="memSeparator" colspan="2">&#160;</td></tr>
167 </table><table class="memberdecls">
168 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
169 Functions</h2></td></tr>
170 <tr class="memitem:gae818f6611d25ba3140bede410a52d659"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gae818f6611d25ba3140bede410a52d659">osKernelInitialize</a> (void)</td></tr>
171 <tr class="memdesc:gae818f6611d25ba3140bede410a52d659"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize the RTOS Kernel.  <br /></td></tr>
172 <tr class="separator:gae818f6611d25ba3140bede410a52d659"><td class="memSeparator" colspan="2">&#160;</td></tr>
173 <tr class="memitem:ga6f7764e7250c5c5364c00c45a5d1d199"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga6f7764e7250c5c5364c00c45a5d1d199">osKernelGetInfo</a> (<a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#structosVersion__t">osVersion_t</a> *version, char *id_buf, uint32_t id_size)</td></tr>
174 <tr class="memdesc:ga6f7764e7250c5c5364c00c45a5d1d199"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get RTOS Kernel Information.  <br /></td></tr>
175 <tr class="separator:ga6f7764e7250c5c5364c00c45a5d1d199"><td class="memSeparator" colspan="2">&#160;</td></tr>
176 <tr class="memitem:ga48b69b81012fce051f639be288b243ba"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga08326469274b668140ca934b168a5ad4">osKernelState_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga48b69b81012fce051f639be288b243ba">osKernelGetState</a> (void)</td></tr>
177 <tr class="memdesc:ga48b69b81012fce051f639be288b243ba"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current RTOS Kernel state.  <br /></td></tr>
178 <tr class="separator:ga48b69b81012fce051f639be288b243ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
179 <tr class="memitem:ga9ae2cc00f0d89d7b6a307bba942b5221"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga9ae2cc00f0d89d7b6a307bba942b5221">osKernelStart</a> (void)</td></tr>
180 <tr class="memdesc:ga9ae2cc00f0d89d7b6a307bba942b5221"><td class="mdescLeft">&#160;</td><td class="mdescRight">Start the RTOS Kernel scheduler.  <br /></td></tr>
181 <tr class="separator:ga9ae2cc00f0d89d7b6a307bba942b5221"><td class="memSeparator" colspan="2">&#160;</td></tr>
182 <tr class="memitem:ga948609ee930d9b38336b9e1c2a4dfe12"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga948609ee930d9b38336b9e1c2a4dfe12">osKernelLock</a> (void)</td></tr>
183 <tr class="memdesc:ga948609ee930d9b38336b9e1c2a4dfe12"><td class="mdescLeft">&#160;</td><td class="mdescRight">Lock the RTOS Kernel scheduler.  <br /></td></tr>
184 <tr class="separator:ga948609ee930d9b38336b9e1c2a4dfe12"><td class="memSeparator" colspan="2">&#160;</td></tr>
185 <tr class="memitem:gaf401728b4657456198c33fe75f8d6720"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gaf401728b4657456198c33fe75f8d6720">osKernelUnlock</a> (void)</td></tr>
186 <tr class="memdesc:gaf401728b4657456198c33fe75f8d6720"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unlock the RTOS Kernel scheduler.  <br /></td></tr>
187 <tr class="separator:gaf401728b4657456198c33fe75f8d6720"><td class="memSeparator" colspan="2">&#160;</td></tr>
188 <tr class="memitem:gae7d0a71b9586cbbb49fcbdf6a04f0289"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gae7d0a71b9586cbbb49fcbdf6a04f0289">osKernelRestoreLock</a> (int32_t lock)</td></tr>
189 <tr class="memdesc:gae7d0a71b9586cbbb49fcbdf6a04f0289"><td class="mdescLeft">&#160;</td><td class="mdescRight">Restore the RTOS Kernel scheduler lock state.  <br /></td></tr>
190 <tr class="separator:gae7d0a71b9586cbbb49fcbdf6a04f0289"><td class="memSeparator" colspan="2">&#160;</td></tr>
191 <tr class="memitem:gae26683e1606ec633354a2876c68f0c1f"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gae26683e1606ec633354a2876c68f0c1f">osKernelSuspend</a> (void)</td></tr>
192 <tr class="memdesc:gae26683e1606ec633354a2876c68f0c1f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Suspend the RTOS Kernel scheduler.  <br /></td></tr>
193 <tr class="separator:gae26683e1606ec633354a2876c68f0c1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
194 <tr class="memitem:ga8c4b4d7ed34cab73c001665d9176aced"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga8c4b4d7ed34cab73c001665d9176aced">osKernelResume</a> (uint32_t sleep_ticks)</td></tr>
195 <tr class="memdesc:ga8c4b4d7ed34cab73c001665d9176aced"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resume the RTOS Kernel scheduler.  <br /></td></tr>
196 <tr class="separator:ga8c4b4d7ed34cab73c001665d9176aced"><td class="memSeparator" colspan="2">&#160;</td></tr>
197 <tr class="memitem:ga84bcdbf2fb76b10c8df4e439f0c7e11b"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga84bcdbf2fb76b10c8df4e439f0c7e11b">osKernelGetTickCount</a> (void)</td></tr>
198 <tr class="memdesc:ga84bcdbf2fb76b10c8df4e439f0c7e11b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the RTOS kernel tick count.  <br /></td></tr>
199 <tr class="separator:ga84bcdbf2fb76b10c8df4e439f0c7e11b"><td class="memSeparator" colspan="2">&#160;</td></tr>
200 <tr class="memitem:ga7a8d7bd927eaaa58999f91d7d6310cee"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga7a8d7bd927eaaa58999f91d7d6310cee">osKernelGetTickFreq</a> (void)</td></tr>
201 <tr class="memdesc:ga7a8d7bd927eaaa58999f91d7d6310cee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the RTOS kernel tick frequency.  <br /></td></tr>
202 <tr class="separator:ga7a8d7bd927eaaa58999f91d7d6310cee"><td class="memSeparator" colspan="2">&#160;</td></tr>
203 <tr class="memitem:gae0fcaff6cecfb4013bb556c87afcd7d2"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gae0fcaff6cecfb4013bb556c87afcd7d2">osKernelGetSysTimerCount</a> (void)</td></tr>
204 <tr class="memdesc:gae0fcaff6cecfb4013bb556c87afcd7d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the RTOS kernel system timer count.  <br /></td></tr>
205 <tr class="separator:gae0fcaff6cecfb4013bb556c87afcd7d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
206 <tr class="memitem:ga4d69215a93220f72be3684cad582f16a"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga4d69215a93220f72be3684cad582f16a">osKernelGetSysTimerFreq</a> (void)</td></tr>
207 <tr class="memdesc:ga4d69215a93220f72be3684cad582f16a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the RTOS kernel system timer frequency.  <br /></td></tr>
208 <tr class="separator:ga4d69215a93220f72be3684cad582f16a"><td class="memSeparator" colspan="2">&#160;</td></tr>
209 <tr class="memitem:gac7e3b012c15c55bda68e0dd96ad9cd72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gac7e3b012c15c55bda68e0dd96ad9cd72">osKernelProtect</a> (uint32_t safety_class)</td></tr>
210 <tr class="memdesc:gac7e3b012c15c55bda68e0dd96ad9cd72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Protect the RTOS Kernel scheduler access.  <br /></td></tr>
211 <tr class="separator:gac7e3b012c15c55bda68e0dd96ad9cd72"><td class="memSeparator" colspan="2">&#160;</td></tr>
212 <tr class="memitem:ga2065364d1bc805a40e749430377df1e1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga2065364d1bc805a40e749430377df1e1">osKernelDestroyClass</a> (uint32_t safety_class, uint32_t mode)</td></tr>
213 <tr class="memdesc:ga2065364d1bc805a40e749430377df1e1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destroy objects for specified safety classes.  <br /></td></tr>
214 <tr class="separator:ga2065364d1bc805a40e749430377df1e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
215 <tr class="memitem:ga91b400b21a9093f7751fc45613c12110"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga91b400b21a9093f7751fc45613c12110">osFaultResume</a> (void)</td></tr>
216 <tr class="memdesc:ga91b400b21a9093f7751fc45613c12110"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resume normal operation when exiting exception faults.  <br /></td></tr>
217 <tr class="separator:ga91b400b21a9093f7751fc45613c12110"><td class="memSeparator" colspan="2">&#160;</td></tr>
218 </table>
219 <a name="details" id="details"></a><h2 class="groupheader">Description</h2>
220 <p>The kernel Information and Control function group allows to:</p><ul>
221 <li>obtain information about the system and the underlying kernel.</li>
222 <li>obtain version information about the CMSIS-RTOS API.</li>
223 <li>initialize of the RTOS kernel for creating objects.</li>
224 <li>start the RTOS kernel and thread switching.</li>
225 <li>check the execution status of the RTOS kernel.</li>
226 </ul>
227 <dl class="section note"><dt>Note</dt><dd>The kernel information and control functions cannot be called from Interrupt Service Routines. </dd>
228 <dd>
229 The kernel initialization for RTX5 is documented in SystemStartup.</dd></dl>
230 <p><b>Code Example</b> </p><div class="fragment"><div class="line"><span class="comment">/*----------------------------------------------------------------------------</span></div>
231 <div class="line"><span class="comment"> * Application main thread</span></div>
232 <div class="line"><span class="comment"> *---------------------------------------------------------------------------*/</span></div>
233 <div class="line"><span class="keywordtype">void</span> app_main (<span class="keywordtype">void</span> *argument) {</div>
234 <div class="line"> </div>
235 <div class="line">  <span class="comment">// ...</span></div>
236 <div class="line">  <span class="keywordflow">for</span> (;;) {}</div>
237 <div class="line">}</div>
238 <div class="line"> </div>
239 <div class="line"><span class="keywordtype">int</span> main (<span class="keywordtype">void</span>) {</div>
240 <div class="line"> </div>
241 <div class="line">  <span class="comment">// System Initialization</span></div>
242 <div class="line">  SystemCoreClockUpdate();</div>
243 <div class="line">  <span class="comment">// ...</span></div>
244 <div class="line"> </div>
245 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#gae818f6611d25ba3140bede410a52d659">osKernelInitialize</a>();                 <span class="comment">// Initialize CMSIS-RTOS</span></div>
246 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a>(app_main, NULL, NULL);    <span class="comment">// Create application main thread</span></div>
247 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#ga9ae2cc00f0d89d7b6a307bba942b5221">osKernelStart</a>();                      <span class="comment">// Start thread execution</span></div>
248 <div class="line">  <span class="keywordflow">for</span> (;;) {}</div>
249 <div class="line">}</div>
250 <div class="ttc" id="agroup__CMSIS__RTOS__KernelCtrl_html_ga9ae2cc00f0d89d7b6a307bba942b5221"><div class="ttname"><a href="group__CMSIS__RTOS__KernelCtrl.html#ga9ae2cc00f0d89d7b6a307bba942b5221">osKernelStart</a></div><div class="ttdeci">osStatus_t osKernelStart(void)</div><div class="ttdoc">Start the RTOS Kernel scheduler.</div></div>
251 <div class="ttc" id="agroup__CMSIS__RTOS__KernelCtrl_html_gae818f6611d25ba3140bede410a52d659"><div class="ttname"><a href="group__CMSIS__RTOS__KernelCtrl.html#gae818f6611d25ba3140bede410a52d659">osKernelInitialize</a></div><div class="ttdeci">osStatus_t osKernelInitialize(void)</div><div class="ttdoc">Initialize the RTOS Kernel.</div></div>
252 <div class="ttc" id="agroup__CMSIS__RTOS__ThreadMgmt_html_ga48d68b8666d99d28fa646ee1d2182b8f"><div class="ttname"><a href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a></div><div class="ttdeci">osThreadId_t osThreadNew(osThreadFunc_t func, void *argument, const osThreadAttr_t *attr)</div><div class="ttdoc">Create a thread and add it to Active Threads.</div></div>
253 </div><!-- fragment --> <hr/><h2 class="groupheader">Data Structure Documentation</h2>
254 <a name="structosVersion__t" id="structosVersion__t"></a>
255 <h2 class="memtitle"><span class="permalink"><a href="#structosVersion__t">&#9670;&#160;</a></span>osVersion_t</h2>
256
257 <div class="memitem">
258 <div class="memproto">
259       <table class="memname">
260         <tr>
261           <td class="memname">struct osVersion_t</td>
262         </tr>
263       </table>
264 </div><div class="memdoc">
265 <div class="textblock"><p>Identifies the underlying RTOS kernel and API version number. The version is represented in a combined decimal number in the format: major.minor.rev: mmnnnrrrr</p>
266 <p>Use <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga6f7764e7250c5c5364c00c45a5d1d199">osKernelGetInfo</a> to retrieve the version numbers. </p>
267 </div><table class="fieldtable">
268 <tr><th colspan="3">Data Fields</th></tr>
269 <tr><td class="fieldtype">
270 <a id="a76a1ef1a4d3d9bd3e70783051f22a6d3" name="a76a1ef1a4d3d9bd3e70783051f22a6d3"></a>uint32_t</td>
271 <td class="fieldname">
272 api</td>
273 <td class="fielddoc">
274 API version (major.minor.rev: mmnnnrrrr dec). </td></tr>
275 <tr><td class="fieldtype">
276 <a id="ad8075d3f42141346ae2c56389358f9e7" name="ad8075d3f42141346ae2c56389358f9e7"></a>uint32_t</td>
277 <td class="fieldname">
278 kernel</td>
279 <td class="fielddoc">
280 Kernel version (major.minor.rev: mmnnnrrrr dec). </td></tr>
281 </table>
282
283 </div>
284 </div>
285 <h2 class="groupheader">Enumeration Type Documentation</h2>
286 <a id="ga08326469274b668140ca934b168a5ad4" name="ga08326469274b668140ca934b168a5ad4"></a>
287 <h2 class="memtitle"><span class="permalink"><a href="#ga08326469274b668140ca934b168a5ad4">&#9670;&#160;</a></span>osKernelState_t</h2>
288
289 <div class="memitem">
290 <div class="memproto">
291       <table class="memname">
292         <tr>
293           <td class="memname">enum <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga08326469274b668140ca934b168a5ad4">osKernelState_t</a></td>
294         </tr>
295       </table>
296 </div><div class="memdoc">
297 <p>State of the kernel as retrieved by <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga48b69b81012fce051f639be288b243ba">osKernelGetState</a>. In case <b>osKernelGetState</b> fails or if it is called from an ISR, it will return <code>osKernelError</code>, otherwise it returns the kernel state. </p>
298 <table class="fieldtable">
299 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ga08326469274b668140ca934b168a5ad4a2ad3e5912db47b497529d036c89e7995" name="ga08326469274b668140ca934b168a5ad4a2ad3e5912db47b497529d036c89e7995"></a>osKernelInactive&#160;</td><td class="fielddoc"><p>Inactive. </p>
300 <p>The kernel is not ready yet. <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gae818f6611d25ba3140bede410a52d659">osKernelInitialize</a> needs to be executed successfully. </p>
301 </td></tr>
302 <tr><td class="fieldname"><a id="ga08326469274b668140ca934b168a5ad4a0596c6e14113447604753656417c9a24" name="ga08326469274b668140ca934b168a5ad4a0596c6e14113447604753656417c9a24"></a>osKernelReady&#160;</td><td class="fielddoc"><p>Ready. </p>
303 <p>The kernel is not yet running. <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga9ae2cc00f0d89d7b6a307bba942b5221">osKernelStart</a> transfers the kernel to the running state. </p>
304 </td></tr>
305 <tr><td class="fieldname"><a id="ga08326469274b668140ca934b168a5ad4a8e0b699fbe1c8bb66fefadd5911cb6ce" name="ga08326469274b668140ca934b168a5ad4a8e0b699fbe1c8bb66fefadd5911cb6ce"></a>osKernelRunning&#160;</td><td class="fielddoc"><p>Running. </p>
306 <p>The kernel is initialized and running. </p>
307 </td></tr>
308 <tr><td class="fieldname"><a id="ga08326469274b668140ca934b168a5ad4a2fe382ad5ebab2257b35740414b28b01" name="ga08326469274b668140ca934b168a5ad4a2fe382ad5ebab2257b35740414b28b01"></a>osKernelLocked&#160;</td><td class="fielddoc"><p>Locked. </p>
309 <p>The kernel was locked with <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga948609ee930d9b38336b9e1c2a4dfe12">osKernelLock</a>. The functions <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gaf401728b4657456198c33fe75f8d6720">osKernelUnlock</a> or <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gae7d0a71b9586cbbb49fcbdf6a04f0289">osKernelRestoreLock</a> unlocks it. </p>
310 </td></tr>
311 <tr><td class="fieldname"><a id="ga08326469274b668140ca934b168a5ad4ad364464ad84d63b1413a9ac8a962390c" name="ga08326469274b668140ca934b168a5ad4ad364464ad84d63b1413a9ac8a962390c"></a>osKernelSuspended&#160;</td><td class="fielddoc"><p>Suspended. </p>
312 <p>The kernel was suspended using <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gae26683e1606ec633354a2876c68f0c1f">osKernelSuspend</a>. The function <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga8c4b4d7ed34cab73c001665d9176aced">osKernelResume</a> returns to normal operation. </p>
313 </td></tr>
314 <tr><td class="fieldname"><a id="ga08326469274b668140ca934b168a5ad4a0545c92c18ce8e6b24e82a0d694a0b4a" name="ga08326469274b668140ca934b168a5ad4a0545c92c18ce8e6b24e82a0d694a0b4a"></a>osKernelError&#160;</td><td class="fielddoc"><p>Error. </p>
315 <p>An error occurred. </p>
316 </td></tr>
317 <tr><td class="fieldname"><a id="ga08326469274b668140ca934b168a5ad4ab0a47576defa29396a649d9173d4bc4b" name="ga08326469274b668140ca934b168a5ad4ab0a47576defa29396a649d9173d4bc4b"></a>osKernelReserved&#160;</td><td class="fielddoc"><p>Prevents enum down-size compiler optimization. </p>
318 <p>Reserved. </p>
319 </td></tr>
320 </table>
321
322 </div>
323 </div>
324 <h2 class="groupheader">Function Documentation</h2>
325 <a id="gae818f6611d25ba3140bede410a52d659" name="gae818f6611d25ba3140bede410a52d659"></a>
326 <h2 class="memtitle"><span class="permalink"><a href="#gae818f6611d25ba3140bede410a52d659">&#9670;&#160;</a></span>osKernelInitialize()</h2>
327
328 <div class="memitem">
329 <div class="memproto">
330       <table class="memname">
331         <tr>
332           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osKernelInitialize </td>
333           <td>(</td>
334           <td class="paramtype">void&#160;</td>
335           <td class="paramname"></td><td>)</td>
336           <td></td>
337         </tr>
338       </table>
339 </div><div class="memdoc">
340 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
341 <p>The function <b>osKernelInitialize</b> initializes the RTOS Kernel. Before it is successfully executed, only the functions <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga6f7764e7250c5c5364c00c45a5d1d199">osKernelGetInfo</a> and <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga48b69b81012fce051f639be288b243ba">osKernelGetState</a> may be called.</p>
342 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
343 <li><em>osOK</em> in case of success.</li>
344 <li><em>osError</em> if an unspecific error occurred.</li>
345 <li><em>osErrorISR</em> if called from an Interrupt Service Routine.</li>
346 <li><em>osErrorNoMemory</em> if no memory could be reserved for the operation.</li>
347 </ul>
348 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from Interrupt Service Routines.</dd></dl>
349 <p><b> Code Example</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;RTE_Components.h&quot;</span></div>
350 <div class="line"><span class="preprocessor">#include  CMSIS_device_header</span></div>
351 <div class="line"><span class="preprocessor">#include &quot;<a class="code" href="cmsis__os2_8h.html">cmsis_os2.h</a>&quot;</span></div>
352 <div class="line"> </div>
353 <div class="line"><span class="comment">/*----------------------------------------------------------------------------</span></div>
354 <div class="line"><span class="comment"> * Application main thread</span></div>
355 <div class="line"><span class="comment"> *---------------------------------------------------------------------------*/</span></div>
356 <div class="line"><span class="keywordtype">void</span> app_main (<span class="keywordtype">void</span> *argument) {</div>
357 <div class="line"> </div>
358 <div class="line">  <span class="comment">// ...</span></div>
359 <div class="line">  <span class="keywordflow">for</span> (;;) {}</div>
360 <div class="line">}</div>
361 <div class="line"> </div>
362 <div class="line"><span class="keywordtype">int</span> main (<span class="keywordtype">void</span>) {</div>
363 <div class="line"> </div>
364 <div class="line">  <span class="comment">// System Initialization</span></div>
365 <div class="line">  SystemCoreClockUpdate();</div>
366 <div class="line">  <span class="comment">// ...</span></div>
367 <div class="line"> </div>
368 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#gae818f6611d25ba3140bede410a52d659">osKernelInitialize</a>();                 <span class="comment">// Initialize CMSIS-RTOS</span></div>
369 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a>(app_main, NULL, NULL);    <span class="comment">// Create application main thread</span></div>
370 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#ga9ae2cc00f0d89d7b6a307bba942b5221">osKernelStart</a>();                      <span class="comment">// Start thread execution</span></div>
371 <div class="line">  <span class="keywordflow">for</span> (;;) {}</div>
372 <div class="line">}</div>
373 <div class="ttc" id="acmsis__os2_8h_html"><div class="ttname"><a href="cmsis__os2_8h.html">cmsis_os2.h</a></div></div>
374 </div><!-- fragment --> 
375 </div>
376 </div>
377 <a id="ga6f7764e7250c5c5364c00c45a5d1d199" name="ga6f7764e7250c5c5364c00c45a5d1d199"></a>
378 <h2 class="memtitle"><span class="permalink"><a href="#ga6f7764e7250c5c5364c00c45a5d1d199">&#9670;&#160;</a></span>osKernelGetInfo()</h2>
379
380 <div class="memitem">
381 <div class="memproto">
382       <table class="memname">
383         <tr>
384           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osKernelGetInfo </td>
385           <td>(</td>
386           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#structosVersion__t">osVersion_t</a> *&#160;</td>
387           <td class="paramname"><em>version</em>, </td>
388         </tr>
389         <tr>
390           <td class="paramkey"></td>
391           <td></td>
392           <td class="paramtype">char *&#160;</td>
393           <td class="paramname"><em>id_buf</em>, </td>
394         </tr>
395         <tr>
396           <td class="paramkey"></td>
397           <td></td>
398           <td class="paramtype">uint32_t&#160;</td>
399           <td class="paramname"><em>id_size</em>&#160;</td>
400         </tr>
401         <tr>
402           <td></td>
403           <td>)</td>
404           <td></td><td></td>
405         </tr>
406       </table>
407 </div><div class="memdoc">
408 <dl class="params"><dt>Parameters</dt><dd>
409   <table class="params">
410     <tr><td class="paramdir">[out]</td><td class="paramname">version</td><td>pointer to buffer for retrieving version information. </td></tr>
411     <tr><td class="paramdir">[out]</td><td class="paramname">id_buf</td><td>pointer to buffer for retrieving kernel identification string. </td></tr>
412     <tr><td class="paramdir">[in]</td><td class="paramname">id_size</td><td>size of buffer for kernel identification string. </td></tr>
413   </table>
414   </dd>
415 </dl>
416 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
417 <p>The function <b>osKernelGetInfo</b> retrieves the API and kernel version of the underlying RTOS kernel and a human readable identifier string for the kernel. It can be safely called before the RTOS is initialized or started (call to <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gae818f6611d25ba3140bede410a52d659">osKernelInitialize</a> or <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga9ae2cc00f0d89d7b6a307bba942b5221">osKernelStart</a>).</p>
418 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
419 <li><em>osOK</em> in case of success.</li>
420 <li><em>osError</em> if an unspecific error occurred.</li>
421 </ul>
422 <dl class="section note"><dt>Note</dt><dd>This function may be called from Interrupt Service Routines.</dd></dl>
423 <p><b>Code Example</b> </p><div class="fragment"><div class="line"><span class="keywordtype">void</span> info (<span class="keywordtype">void</span>) {</div>
424 <div class="line">  <span class="keywordtype">char</span> infobuf[100];</div>
425 <div class="line">  <a class="code hl_struct" href="group__CMSIS__RTOS__KernelCtrl.html#structosVersion__t">osVersion_t</a> osv;</div>
426 <div class="line">  <a class="code hl_enumeration" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> status;</div>
427 <div class="line"> </div>
428 <div class="line">  status = <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#ga6f7764e7250c5c5364c00c45a5d1d199">osKernelGetInfo</a>(&amp;osv, infobuf, <span class="keyword">sizeof</span>(infobuf));</div>
429 <div class="line">  <span class="keywordflow">if</span>(status == <a class="code hl_enumvalue" href="cmsis__os2_8h.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813ea9e1c9e2550bb4de8969a935acffc968f">osOK</a>) {</div>
430 <div class="line">    printf(<span class="stringliteral">&quot;Kernel Information: %s\r\n&quot;</span>, infobuf);</div>
431 <div class="line">    printf(<span class="stringliteral">&quot;Kernel Version    : %d\r\n&quot;</span>, osv.<a class="code hl_variable" href="group__CMSIS__RTOS__KernelCtrl.html#ad8075d3f42141346ae2c56389358f9e7">kernel</a>);</div>
432 <div class="line">    printf(<span class="stringliteral">&quot;Kernel API Version: %d\r\n&quot;</span>, osv.<a class="code hl_variable" href="group__CMSIS__RTOS__KernelCtrl.html#a76a1ef1a4d3d9bd3e70783051f22a6d3">api</a>);</div>
433 <div class="line">  }</div>
434 <div class="line">}</div>
435 <div class="ttc" id="acmsis__os2_8h_html_ga6c0dbe6069e4e7f47bb4cd32ae2b813ea9e1c9e2550bb4de8969a935acffc968f"><div class="ttname"><a href="cmsis__os2_8h.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813ea9e1c9e2550bb4de8969a935acffc968f">osOK</a></div><div class="ttdeci">@ osOK</div><div class="ttdoc">Operation completed successfully.</div><div class="ttdef"><b>Definition:</b> cmsis_os2.h:247</div></div>
436 <div class="ttc" id="agroup__CMSIS__RTOS__Definitions_html_ga6c0dbe6069e4e7f47bb4cd32ae2b813e"><div class="ttname"><a href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a></div><div class="ttdeci">osStatus_t</div><div class="ttdoc">Status code values returned by CMSIS-RTOS functions.</div><div class="ttdef"><b>Definition:</b> cmsis_os2.h:246</div></div>
437 <div class="ttc" id="agroup__CMSIS__RTOS__KernelCtrl_html_a76a1ef1a4d3d9bd3e70783051f22a6d3"><div class="ttname"><a href="group__CMSIS__RTOS__KernelCtrl.html#a76a1ef1a4d3d9bd3e70783051f22a6d3">osVersion_t::api</a></div><div class="ttdeci">uint32_t api</div><div class="ttdoc">API version (major.minor.rev: mmnnnrrrr dec).</div><div class="ttdef"><b>Definition:</b> cmsis_os2.h:97</div></div>
438 <div class="ttc" id="agroup__CMSIS__RTOS__KernelCtrl_html_ad8075d3f42141346ae2c56389358f9e7"><div class="ttname"><a href="group__CMSIS__RTOS__KernelCtrl.html#ad8075d3f42141346ae2c56389358f9e7">osVersion_t::kernel</a></div><div class="ttdeci">uint32_t kernel</div><div class="ttdoc">Kernel version (major.minor.rev: mmnnnrrrr dec).</div><div class="ttdef"><b>Definition:</b> cmsis_os2.h:98</div></div>
439 <div class="ttc" id="agroup__CMSIS__RTOS__KernelCtrl_html_ga6f7764e7250c5c5364c00c45a5d1d199"><div class="ttname"><a href="group__CMSIS__RTOS__KernelCtrl.html#ga6f7764e7250c5c5364c00c45a5d1d199">osKernelGetInfo</a></div><div class="ttdeci">osStatus_t osKernelGetInfo(osVersion_t *version, char *id_buf, uint32_t id_size)</div><div class="ttdoc">Get RTOS Kernel Information.</div></div>
440 <div class="ttc" id="agroup__CMSIS__RTOS__KernelCtrl_html_structosVersion__t"><div class="ttname"><a href="group__CMSIS__RTOS__KernelCtrl.html#structosVersion__t">osVersion_t</a></div><div class="ttdoc">Version information.</div><div class="ttdef"><b>Definition:</b> cmsis_os2.h:96</div></div>
441 </div><!-- fragment --> 
442 </div>
443 </div>
444 <a id="ga48b69b81012fce051f639be288b243ba" name="ga48b69b81012fce051f639be288b243ba"></a>
445 <h2 class="memtitle"><span class="permalink"><a href="#ga48b69b81012fce051f639be288b243ba">&#9670;&#160;</a></span>osKernelGetState()</h2>
446
447 <div class="memitem">
448 <div class="memproto">
449       <table class="memname">
450         <tr>
451           <td class="memname"><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga08326469274b668140ca934b168a5ad4">osKernelState_t</a> osKernelGetState </td>
452           <td>(</td>
453           <td class="paramtype">void&#160;</td>
454           <td class="paramname"></td><td>)</td>
455           <td></td>
456         </tr>
457       </table>
458 </div><div class="memdoc">
459 <dl class="section return"><dt>Returns</dt><dd>current RTOS Kernel state.</dd></dl>
460 <p>The function <b>osKernelGetState</b> returns the current state of the kernel and can be safely called before the RTOS is initialized or started (call to <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gae818f6611d25ba3140bede410a52d659">osKernelInitialize</a> or <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga9ae2cc00f0d89d7b6a307bba942b5221">osKernelStart</a>). In case it fails it will return <code>osKernelError</code>, otherwise it returns the kernel state (refer to <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga08326469274b668140ca934b168a5ad4">osKernelState_t</a> for the list of kernel states).</p>
461 <p>Possible <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga08326469274b668140ca934b168a5ad4">osKernelState_t</a> return values:</p><ul>
462 <li><a class="el" href="cmsis__os2_8h.html#ga08326469274b668140ca934b168a5ad4a0545c92c18ce8e6b24e82a0d694a0b4a">osKernelError</a> if an unspecific error occurred.</li>
463 <li>the actual kernel state otherwise.</li>
464 </ul>
465 <dl class="section note"><dt>Note</dt><dd>This function may be called from Interrupt Service Routines.</dd></dl>
466 <p><b>Code Example</b> </p><div class="fragment"><div class="line"><span class="keywordtype">int</span> main (<span class="keywordtype">void</span>) {</div>
467 <div class="line">  <span class="comment">// System Initialization</span></div>
468 <div class="line">  SystemCoreClockUpdate();</div>
469 <div class="line">  <span class="comment">// ...</span></div>
470 <div class="line">  <span class="keywordflow">if</span>(<a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#ga48b69b81012fce051f639be288b243ba">osKernelGetState</a>() == <a class="code hl_enumvalue" href="cmsis__os2_8h.html#ga08326469274b668140ca934b168a5ad4a2ad3e5912db47b497529d036c89e7995">osKernelInactive</a>) {     <span class="comment">// Is the kernel initialized?</span></div>
471 <div class="line">     <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#gae818f6611d25ba3140bede410a52d659">osKernelInitialize</a>();                         <span class="comment">// Initialize CMSIS-RTOS kernel</span></div>
472 <div class="line">  }</div>
473 <div class="line">  ;</div>
474 <div class="line">}</div>
475 <div class="ttc" id="acmsis__os2_8h_html_ga08326469274b668140ca934b168a5ad4a2ad3e5912db47b497529d036c89e7995"><div class="ttname"><a href="cmsis__os2_8h.html#ga08326469274b668140ca934b168a5ad4a2ad3e5912db47b497529d036c89e7995">osKernelInactive</a></div><div class="ttdeci">@ osKernelInactive</div><div class="ttdoc">Inactive.</div><div class="ttdef"><b>Definition:</b> cmsis_os2.h:103</div></div>
476 <div class="ttc" id="agroup__CMSIS__RTOS__KernelCtrl_html_ga48b69b81012fce051f639be288b243ba"><div class="ttname"><a href="group__CMSIS__RTOS__KernelCtrl.html#ga48b69b81012fce051f639be288b243ba">osKernelGetState</a></div><div class="ttdeci">osKernelState_t osKernelGetState(void)</div><div class="ttdoc">Get the current RTOS Kernel state.</div></div>
477 </div><!-- fragment --> 
478 </div>
479 </div>
480 <a id="ga9ae2cc00f0d89d7b6a307bba942b5221" name="ga9ae2cc00f0d89d7b6a307bba942b5221"></a>
481 <h2 class="memtitle"><span class="permalink"><a href="#ga9ae2cc00f0d89d7b6a307bba942b5221">&#9670;&#160;</a></span>osKernelStart()</h2>
482
483 <div class="memitem">
484 <div class="memproto">
485       <table class="memname">
486         <tr>
487           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osKernelStart </td>
488           <td>(</td>
489           <td class="paramtype">void&#160;</td>
490           <td class="paramname"></td><td>)</td>
491           <td></td>
492         </tr>
493       </table>
494 </div><div class="memdoc">
495 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
496 <p>The function <b>osKernelStart</b> starts the RTOS kernel and begins thread switching. It will not return to its calling function in case of success. Before it is successfully executed, only the functions <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga6f7764e7250c5c5364c00c45a5d1d199">osKernelGetInfo</a>, <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga48b69b81012fce051f639be288b243ba">osKernelGetState</a>, and object creation functions (<b>osXxxNew</b>) may be called.</p>
497 <p>At least one initial thread should be created prior osKernelStart, see <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a>.</p>
498 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
499 <li><em>osError</em> if an unspecific error occurred.</li>
500 <li><em>osErrorISR</em> if called from an Interrupt Service Routine.</li>
501 </ul>
502 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from Interrupt Service Routines.</dd></dl>
503 <p><b>Code Example</b> </p><div class="fragment"><div class="line"><span class="keywordtype">int</span> main (<span class="keywordtype">void</span>) {</div>
504 <div class="line">  <span class="comment">// System Initialization</span></div>
505 <div class="line">  SystemCoreClockUpdate();</div>
506 <div class="line">  <span class="comment">// ...</span></div>
507 <div class="line">  <span class="keywordflow">if</span>(<a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#ga48b69b81012fce051f639be288b243ba">osKernelGetState</a>() == <a class="code hl_enumvalue" href="cmsis__os2_8h.html#ga08326469274b668140ca934b168a5ad4a2ad3e5912db47b497529d036c89e7995">osKernelInactive</a>) {</div>
508 <div class="line">    <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#gae818f6611d25ba3140bede410a52d659">osKernelInitialize</a>();</div>
509 <div class="line">  }</div>
510 <div class="line">  ; <span class="comment">// ... Start Threads</span></div>
511 <div class="line">  <span class="keywordflow">if</span> (<a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#ga48b69b81012fce051f639be288b243ba">osKernelGetState</a>() == <a class="code hl_enumvalue" href="cmsis__os2_8h.html#ga08326469274b668140ca934b168a5ad4a0596c6e14113447604753656417c9a24">osKernelReady</a>) {        <span class="comment">// If kernel is ready to run...</span></div>
512 <div class="line">    <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#ga9ae2cc00f0d89d7b6a307bba942b5221">osKernelStart</a>();                                <span class="comment">// ... start thread execution</span></div>
513 <div class="line">    }</div>
514 <div class="line">  </div>
515 <div class="line">  <span class="keywordflow">while</span>(1);                                         <span class="comment">// only reached in case of error</span></div>
516 <div class="line">}</div>
517 <div class="ttc" id="acmsis__os2_8h_html_ga08326469274b668140ca934b168a5ad4a0596c6e14113447604753656417c9a24"><div class="ttname"><a href="cmsis__os2_8h.html#ga08326469274b668140ca934b168a5ad4a0596c6e14113447604753656417c9a24">osKernelReady</a></div><div class="ttdeci">@ osKernelReady</div><div class="ttdoc">Ready.</div><div class="ttdef"><b>Definition:</b> cmsis_os2.h:104</div></div>
518 </div><!-- fragment --> 
519 </div>
520 </div>
521 <a id="ga948609ee930d9b38336b9e1c2a4dfe12" name="ga948609ee930d9b38336b9e1c2a4dfe12"></a>
522 <h2 class="memtitle"><span class="permalink"><a href="#ga948609ee930d9b38336b9e1c2a4dfe12">&#9670;&#160;</a></span>osKernelLock()</h2>
523
524 <div class="memitem">
525 <div class="memproto">
526       <table class="memname">
527         <tr>
528           <td class="memname">int32_t osKernelLock </td>
529           <td>(</td>
530           <td class="paramtype">void&#160;</td>
531           <td class="paramname"></td><td>)</td>
532           <td></td>
533         </tr>
534       </table>
535 </div><div class="memdoc">
536 <dl class="section return"><dt>Returns</dt><dd>previous lock state (1 - locked, 0 - not locked, error code if negative).</dd></dl>
537 <p>The function <b>osKernelLock</b> allows to lock all task switches. It returns the previous value of the lock state (<span class="XML-Token">1</span> if it was locked, <span class="XML-Token">0</span> if it was unlocked), or a negative number representing an error code otherwise (refer to <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a>).</p>
538 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
539 <li><em>osError</em> if an unspecific error occurred.</li>
540 <li><em>osErrorISR</em> if called from an Interrupt Service Routine.</li>
541 <li><em>osErrorSafetyClass</em> if the calling thread safety class is lower than the kernel protect safety class.</li>
542 </ul>
543 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from Interrupt Service Routines.</dd></dl>
544 <p><b>Code Example</b> </p><div class="fragment"><div class="line">int32_t state = <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#ga948609ee930d9b38336b9e1c2a4dfe12">osKernelLock</a>();</div>
545 <div class="line"><span class="comment">// ... critical code</span></div>
546 <div class="line">osKernelRestore(state);</div>
547 <div class="ttc" id="agroup__CMSIS__RTOS__KernelCtrl_html_ga948609ee930d9b38336b9e1c2a4dfe12"><div class="ttname"><a href="group__CMSIS__RTOS__KernelCtrl.html#ga948609ee930d9b38336b9e1c2a4dfe12">osKernelLock</a></div><div class="ttdeci">int32_t osKernelLock(void)</div><div class="ttdoc">Lock the RTOS Kernel scheduler.</div></div>
548 </div><!-- fragment --> 
549 </div>
550 </div>
551 <a id="gaf401728b4657456198c33fe75f8d6720" name="gaf401728b4657456198c33fe75f8d6720"></a>
552 <h2 class="memtitle"><span class="permalink"><a href="#gaf401728b4657456198c33fe75f8d6720">&#9670;&#160;</a></span>osKernelUnlock()</h2>
553
554 <div class="memitem">
555 <div class="memproto">
556       <table class="memname">
557         <tr>
558           <td class="memname">int32_t osKernelUnlock </td>
559           <td>(</td>
560           <td class="paramtype">void&#160;</td>
561           <td class="paramname"></td><td>)</td>
562           <td></td>
563         </tr>
564       </table>
565 </div><div class="memdoc">
566 <dl class="section return"><dt>Returns</dt><dd>previous lock state (1 - locked, 0 - not locked, error code if negative).</dd></dl>
567 <p>The function <b>osKernelUnlock</b> resumes from <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga948609ee930d9b38336b9e1c2a4dfe12">osKernelLock</a>. It returns the previous value of the lock state (<span class="XML-Token">1</span> if it was locked, <span class="XML-Token">0</span> if it was unlocked), or a negative number representing an error code otherwise (refer to <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a>).</p>
568 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
569 <li><em>osError</em> if an unspecific error occurred.</li>
570 <li><em>osErrorISR</em> if called from an Interrupt Service Routine.</li>
571 </ul>
572 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from Interrupt Service Routines.</dd></dl>
573 <p><b>Code Example</b> </p><div class="fragment"><div class="line">int32_t sl = <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#ga948609ee930d9b38336b9e1c2a4dfe12">osKernelLock</a>();</div>
574 <div class="line"><span class="comment">// ... critical code</span></div>
575 <div class="line">{</div>
576 <div class="line">  int32_t su = <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#gaf401728b4657456198c33fe75f8d6720">osKernelUnlock</a>();</div>
577 <div class="line">  <span class="comment">// ... uncritical code</span></div>
578 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#gae7d0a71b9586cbbb49fcbdf6a04f0289">osKernelRestoreLock</a>(su);</div>
579 <div class="line">}</div>
580 <div class="line"><span class="comment">// ... critical code</span></div>
581 <div class="line"><a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#gae7d0a71b9586cbbb49fcbdf6a04f0289">osKernelRestoreLock</a>(sl);</div>
582 <div class="ttc" id="agroup__CMSIS__RTOS__KernelCtrl_html_gae7d0a71b9586cbbb49fcbdf6a04f0289"><div class="ttname"><a href="group__CMSIS__RTOS__KernelCtrl.html#gae7d0a71b9586cbbb49fcbdf6a04f0289">osKernelRestoreLock</a></div><div class="ttdeci">int32_t osKernelRestoreLock(int32_t lock)</div><div class="ttdoc">Restore the RTOS Kernel scheduler lock state.</div></div>
583 <div class="ttc" id="agroup__CMSIS__RTOS__KernelCtrl_html_gaf401728b4657456198c33fe75f8d6720"><div class="ttname"><a href="group__CMSIS__RTOS__KernelCtrl.html#gaf401728b4657456198c33fe75f8d6720">osKernelUnlock</a></div><div class="ttdeci">int32_t osKernelUnlock(void)</div><div class="ttdoc">Unlock the RTOS Kernel scheduler.</div></div>
584 </div><!-- fragment --> 
585 </div>
586 </div>
587 <a id="gae7d0a71b9586cbbb49fcbdf6a04f0289" name="gae7d0a71b9586cbbb49fcbdf6a04f0289"></a>
588 <h2 class="memtitle"><span class="permalink"><a href="#gae7d0a71b9586cbbb49fcbdf6a04f0289">&#9670;&#160;</a></span>osKernelRestoreLock()</h2>
589
590 <div class="memitem">
591 <div class="memproto">
592       <table class="memname">
593         <tr>
594           <td class="memname">int32_t osKernelRestoreLock </td>
595           <td>(</td>
596           <td class="paramtype">int32_t&#160;</td>
597           <td class="paramname"><em>lock</em></td><td>)</td>
598           <td></td>
599         </tr>
600       </table>
601 </div><div class="memdoc">
602 <dl class="params"><dt>Parameters</dt><dd>
603   <table class="params">
604     <tr><td class="paramdir">[in]</td><td class="paramname">lock</td><td>lock state obtained by <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga948609ee930d9b38336b9e1c2a4dfe12">osKernelLock</a> or <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gaf401728b4657456198c33fe75f8d6720">osKernelUnlock</a>. </td></tr>
605   </table>
606   </dd>
607 </dl>
608 <dl class="section return"><dt>Returns</dt><dd>new lock state (1 - locked, 0 - not locked, error code if negative).</dd></dl>
609 <p>The function <b>osKernelRestoreLock</b> restores the previous lock state after <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga948609ee930d9b38336b9e1c2a4dfe12">osKernelLock</a> or <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gaf401728b4657456198c33fe75f8d6720">osKernelUnlock</a>.</p>
610 <p>The argument <em>lock</em> specifies the lock state as obtained by <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga948609ee930d9b38336b9e1c2a4dfe12">osKernelLock</a> or <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gaf401728b4657456198c33fe75f8d6720">osKernelUnlock</a>.</p>
611 <p>The function returns the new value of the lock state (<span class="XML-Token">1</span> if it was locked, <span class="XML-Token">0</span> if it was unlocked), or a negative number representing an error code otherwise (refer to <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a>).</p>
612 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
613 <li><em>osError</em> if an unspecific error occurred.</li>
614 <li><em>osErrorISR</em> if called from interrupt other than fault or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga5a02770aaf65c7a3c7562c109884176a">osWatchdogAlarm_Handler</a>.</li>
615 <li><em>osErrorSafetyClass</em> if the calling thread safety class is lower than the kernel protect safety class.</li>
616 </ul>
617 <p><b>Code Example</b> </p><div class="fragment"><div class="line">int32_t sl = <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#ga948609ee930d9b38336b9e1c2a4dfe12">osKernelLock</a>();</div>
618 <div class="line"><span class="comment">// ... critical code</span></div>
619 <div class="line">{</div>
620 <div class="line">  int32_t su = <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#gaf401728b4657456198c33fe75f8d6720">osKernelUnlock</a>();</div>
621 <div class="line">  <span class="comment">// ... uncritical code</span></div>
622 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#gae7d0a71b9586cbbb49fcbdf6a04f0289">osKernelRestoreLock</a>(su);</div>
623 <div class="line">}</div>
624 <div class="line"><span class="comment">// ... critical code</span></div>
625 <div class="line"><a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#gae7d0a71b9586cbbb49fcbdf6a04f0289">osKernelRestoreLock</a>(sl);</div>
626 </div><!-- fragment --> 
627 </div>
628 </div>
629 <a id="gae26683e1606ec633354a2876c68f0c1f" name="gae26683e1606ec633354a2876c68f0c1f"></a>
630 <h2 class="memtitle"><span class="permalink"><a href="#gae26683e1606ec633354a2876c68f0c1f">&#9670;&#160;</a></span>osKernelSuspend()</h2>
631
632 <div class="memitem">
633 <div class="memproto">
634       <table class="memname">
635         <tr>
636           <td class="memname">uint32_t osKernelSuspend </td>
637           <td>(</td>
638           <td class="paramtype">void&#160;</td>
639           <td class="paramname"></td><td>)</td>
640           <td></td>
641         </tr>
642       </table>
643 </div><div class="memdoc">
644 <dl class="section return"><dt>Returns</dt><dd>time in ticks, for how long the system can sleep or power-down.</dd></dl>
645 <p>CMSIS-RTOS provides extension for tick-less operation which is useful for applications that use extensively low-power modes where the SysTick timer is also disabled. To provide a time-tick in such power-saving modes a wake-up timer is used to derive timer intervals. The function <b>osKernelSuspend</b> suspends the RTX kernel scheduler and thus enables sleep modes.</p>
646 <p>The return value can be used to determine the amount of system ticks until the next tick-based kernel event will occur, i.e. a delayed thread becomes ready again. It is recommended to set up the low power timer to generate a wake-up interrupt based on this return value.</p>
647 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from Interrupt Service Routines.</dd></dl>
648 <p><b>Code Example</b> </p><div class="fragment"><div class="line"><span class="keywordtype">void</span> osRtxIdleThread (<span class="keywordtype">void</span>) {</div>
649 <div class="line">                                               <span class="comment">/* The idle thread is running</span></div>
650 <div class="line"><span class="comment">                                                  when no other thread is ready</span></div>
651 <div class="line"><span class="comment">                                                  to run.                      */</span></div>
652 <div class="line">  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sleep;</div>
653 <div class="line"> </div>
654 <div class="line">  <span class="keywordflow">for</span> (;;) {</div>
655 <div class="line">                                               <span class="comment">/* HERE: include optional user</span></div>
656 <div class="line"><span class="comment">                                                  code to be executed when no</span></div>
657 <div class="line"><span class="comment">                                                  task runs.                   */</span></div>
658 <div class="line">    sleep = <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#gae26683e1606ec633354a2876c68f0c1f">osKernelSuspend</a>();                 <span class="comment">/* Suspend RTX thread scheduler */</span></div>
659 <div class="line"> </div>
660 <div class="line">    <span class="keywordflow">if</span> (sleep) {                               <span class="comment">/* How long can we sleep?       */</span></div>
661 <div class="line">                                               <span class="comment">/* &quot;sleep&quot; is in RTX Timer Ticks</span></div>
662 <div class="line"><span class="comment">                                                  which is 1ms in this</span></div>
663 <div class="line"><span class="comment">                                                  configuration                */</span></div>
664 <div class="line">       </div>
665 <div class="line">                                               <span class="comment">/* Setup wake-up e.g. watchdog  */</span></div>
666 <div class="line"> </div>
667 <div class="line">      __WFE();                                 <span class="comment">/* Enter Power-down mode        */</span></div>
668 <div class="line">      </div>
669 <div class="line">                                               <span class="comment">/* After Wake-up                */</span></div>
670 <div class="line">      sleep = tc;                              <span class="comment">/* Adjust with cycles slept     */</span>  </div>
671 <div class="line">    }</div>
672 <div class="line"> </div>
673 <div class="line">    <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#ga8c4b4d7ed34cab73c001665d9176aced">osKernelResume</a>(sleep);                     <span class="comment">/* Resume thread scheduler      */</span></div>
674 <div class="line">  }</div>
675 <div class="line">}</div>
676 <div class="ttc" id="agroup__CMSIS__RTOS__KernelCtrl_html_ga8c4b4d7ed34cab73c001665d9176aced"><div class="ttname"><a href="group__CMSIS__RTOS__KernelCtrl.html#ga8c4b4d7ed34cab73c001665d9176aced">osKernelResume</a></div><div class="ttdeci">void osKernelResume(uint32_t sleep_ticks)</div><div class="ttdoc">Resume the RTOS Kernel scheduler.</div></div>
677 <div class="ttc" id="agroup__CMSIS__RTOS__KernelCtrl_html_gae26683e1606ec633354a2876c68f0c1f"><div class="ttname"><a href="group__CMSIS__RTOS__KernelCtrl.html#gae26683e1606ec633354a2876c68f0c1f">osKernelSuspend</a></div><div class="ttdeci">uint32_t osKernelSuspend(void)</div><div class="ttdoc">Suspend the RTOS Kernel scheduler.</div></div>
678 </div><!-- fragment --> 
679 </div>
680 </div>
681 <a id="ga8c4b4d7ed34cab73c001665d9176aced" name="ga8c4b4d7ed34cab73c001665d9176aced"></a>
682 <h2 class="memtitle"><span class="permalink"><a href="#ga8c4b4d7ed34cab73c001665d9176aced">&#9670;&#160;</a></span>osKernelResume()</h2>
683
684 <div class="memitem">
685 <div class="memproto">
686       <table class="memname">
687         <tr>
688           <td class="memname">void osKernelResume </td>
689           <td>(</td>
690           <td class="paramtype">uint32_t&#160;</td>
691           <td class="paramname"><em>sleep_ticks</em></td><td>)</td>
692           <td></td>
693         </tr>
694       </table>
695 </div><div class="memdoc">
696 <dl class="params"><dt>Parameters</dt><dd>
697   <table class="params">
698     <tr><td class="paramdir">[in]</td><td class="paramname">sleep_ticks</td><td>time in ticks for how long the system was in sleep or power-down mode.</td></tr>
699   </table>
700   </dd>
701 </dl>
702 <p>CMSIS-RTOS provides extension for tick-less operation which is useful for applications that use extensively low-power modes where the SysTick timer is also disabled. To provide a time-tick in such power-saving modes a wake-up timer is used to derive timer intervals. The function <b>osKernelResume</b> enables the RTX kernel scheduler and thus wakes up the system from sleep mode.</p>
703 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from Interrupt Service Routines.</dd></dl>
704 <p><b>Code Example</b> </p><div class="fragment"><div class="line"><span class="keywordtype">void</span> osRtxIdleThread (<span class="keywordtype">void</span>) {</div>
705 <div class="line">                                               <span class="comment">/* The idle thread is running</span></div>
706 <div class="line"><span class="comment">                                                  when no other thread is ready</span></div>
707 <div class="line"><span class="comment">                                                  to run.                      */</span></div>
708 <div class="line">  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sleep;</div>
709 <div class="line"> </div>
710 <div class="line">  <span class="keywordflow">for</span> (;;) {</div>
711 <div class="line">                                               <span class="comment">/* HERE: include optional user</span></div>
712 <div class="line"><span class="comment">                                                  code to be executed when no</span></div>
713 <div class="line"><span class="comment">                                                  task runs.                   */</span></div>
714 <div class="line">    sleep = <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#gae26683e1606ec633354a2876c68f0c1f">osKernelSuspend</a>();                 <span class="comment">/* Suspend RTX thread scheduler */</span></div>
715 <div class="line"> </div>
716 <div class="line">    <span class="keywordflow">if</span> (sleep) {                               <span class="comment">/* How long can we sleep?       */</span></div>
717 <div class="line">                                               <span class="comment">/* &quot;sleep&quot; is in RTX Timer Ticks</span></div>
718 <div class="line"><span class="comment">                                                  which is 1ms in this</span></div>
719 <div class="line"><span class="comment">                                                  configuration                */</span></div>
720 <div class="line">       </div>
721 <div class="line">                                               <span class="comment">/* Setup wake-up e.g. watchdog  */</span></div>
722 <div class="line"> </div>
723 <div class="line">      __WFE();                                 <span class="comment">/* Enter Power-down mode        */</span></div>
724 <div class="line">      </div>
725 <div class="line">                                               <span class="comment">/* After Wake-up                */</span></div>
726 <div class="line">      sleep = tc;                              <span class="comment">/* Adjust with cycles slept     */</span>  </div>
727 <div class="line">    }</div>
728 <div class="line"> </div>
729 <div class="line">    <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#ga8c4b4d7ed34cab73c001665d9176aced">osKernelResume</a>(sleep);                     <span class="comment">/* Resume thread scheduler      */</span></div>
730 <div class="line">  }</div>
731 <div class="line">}</div>
732 </div><!-- fragment --> 
733 </div>
734 </div>
735 <a id="ga84bcdbf2fb76b10c8df4e439f0c7e11b" name="ga84bcdbf2fb76b10c8df4e439f0c7e11b"></a>
736 <h2 class="memtitle"><span class="permalink"><a href="#ga84bcdbf2fb76b10c8df4e439f0c7e11b">&#9670;&#160;</a></span>osKernelGetTickCount()</h2>
737
738 <div class="memitem">
739 <div class="memproto">
740       <table class="memname">
741         <tr>
742           <td class="memname">uint32_t osKernelGetTickCount </td>
743           <td>(</td>
744           <td class="paramtype">void&#160;</td>
745           <td class="paramname"></td><td>)</td>
746           <td></td>
747         </tr>
748       </table>
749 </div><div class="memdoc">
750 <dl class="section return"><dt>Returns</dt><dd>RTOS kernel current tick count.</dd></dl>
751 <p>The function <b>osKernelGetTickCount</b> returns the current RTOS kernel tick count.</p>
752 <dl class="section note"><dt>Note</dt><dd>This function may be called from Interrupt Service Routines.</dd></dl>
753 <p><b>Code</b> <b>Example</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;<a class="code" href="cmsis__os2_8h.html">cmsis_os2.h</a>&quot;</span></div>
754 <div class="line"> </div>
755 <div class="line"><span class="keywordtype">void</span> Thread_1 (<span class="keywordtype">void</span> *arg)  {                <span class="comment">// Thread function</span></div>
756 <div class="line">  uint32_t tick;</div>
757 <div class="line"> </div>
758 <div class="line">  tick = <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#ga84bcdbf2fb76b10c8df4e439f0c7e11b">osKernelGetTickCount</a>();            <span class="comment">// retrieve the number of system ticks</span></div>
759 <div class="line">  <span class="keywordflow">for</span> (;;) {</div>
760 <div class="line">    tick += 1000;                           <span class="comment">// delay 1000 ticks periodically</span></div>
761 <div class="line">    <a class="code hl_function" href="group__CMSIS__RTOS__Wait.html#ga3c807924c2d6d43bc2ffb49da3f7f3a1">osDelayUntil</a>(tick);</div>
762 <div class="line">    <span class="comment">// ...</span></div>
763 <div class="line">  }</div>
764 <div class="line">}</div>
765 <div class="ttc" id="agroup__CMSIS__RTOS__KernelCtrl_html_ga84bcdbf2fb76b10c8df4e439f0c7e11b"><div class="ttname"><a href="group__CMSIS__RTOS__KernelCtrl.html#ga84bcdbf2fb76b10c8df4e439f0c7e11b">osKernelGetTickCount</a></div><div class="ttdeci">uint32_t osKernelGetTickCount(void)</div><div class="ttdoc">Get the RTOS kernel tick count.</div></div>
766 <div class="ttc" id="agroup__CMSIS__RTOS__Wait_html_ga3c807924c2d6d43bc2ffb49da3f7f3a1"><div class="ttname"><a href="group__CMSIS__RTOS__Wait.html#ga3c807924c2d6d43bc2ffb49da3f7f3a1">osDelayUntil</a></div><div class="ttdeci">osStatus_t osDelayUntil(uint32_t ticks)</div><div class="ttdoc">Wait until specified time.</div></div>
767 </div><!-- fragment --><p>Due to the limited value range used for the tick count it may overflow during runtime, i.e. after 2<sup>32</sup> ticks which are roughly 49days @ 1ms. Typically one has not to take special care of this unless a monotonic counter is needed. For such a case an additional 64bit tick counter can be implemented as follows. The given example needs GetTick() called at least twice per tick overflow to work properly.</p>
768 <p><b>Code</b> <b>Example</b> </p><div class="fragment"><div class="line">uint64_t GetTick(<span class="keywordtype">void</span>) {</div>
769 <div class="line">  <span class="keyword">static</span> uint32_t tick_h = 0U;</div>
770 <div class="line">  <span class="keyword">static</span> uint32_t tick_l = 0U;</div>
771 <div class="line">         uint32_t tick;</div>
772 <div class="line"> </div>
773 <div class="line">  tick = <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#ga84bcdbf2fb76b10c8df4e439f0c7e11b">osKernelGetTickCount</a>();</div>
774 <div class="line">  <span class="keywordflow">if</span> (tick &lt; tick_l) {</div>
775 <div class="line">    tick_h++;</div>
776 <div class="line">  }</div>
777 <div class="line">  tick_l = tick;</div>
778 <div class="line"> </div>
779 <div class="line">  <span class="keywordflow">return</span> (((uint64_t)tick_h &lt;&lt; 32) | tick_l);</div>
780 <div class="line">}</div>
781 </div><!-- fragment --> 
782 </div>
783 </div>
784 <a id="ga7a8d7bd927eaaa58999f91d7d6310cee" name="ga7a8d7bd927eaaa58999f91d7d6310cee"></a>
785 <h2 class="memtitle"><span class="permalink"><a href="#ga7a8d7bd927eaaa58999f91d7d6310cee">&#9670;&#160;</a></span>osKernelGetTickFreq()</h2>
786
787 <div class="memitem">
788 <div class="memproto">
789       <table class="memname">
790         <tr>
791           <td class="memname">uint32_t osKernelGetTickFreq </td>
792           <td>(</td>
793           <td class="paramtype">void&#160;</td>
794           <td class="paramname"></td><td>)</td>
795           <td></td>
796         </tr>
797       </table>
798 </div><div class="memdoc">
799 <dl class="section return"><dt>Returns</dt><dd>frequency of the kernel tick in hertz, i.e. kernel ticks per second.</dd></dl>
800 <p>The function <b>osKernelGetTickFreq</b> returns the frequency of the current RTOS kernel tick.</p>
801 <dl class="section note"><dt>Note</dt><dd>This function may be called from Interrupt Service Routines. </dd></dl>
802
803 </div>
804 </div>
805 <a id="gae0fcaff6cecfb4013bb556c87afcd7d2" name="gae0fcaff6cecfb4013bb556c87afcd7d2"></a>
806 <h2 class="memtitle"><span class="permalink"><a href="#gae0fcaff6cecfb4013bb556c87afcd7d2">&#9670;&#160;</a></span>osKernelGetSysTimerCount()</h2>
807
808 <div class="memitem">
809 <div class="memproto">
810       <table class="memname">
811         <tr>
812           <td class="memname">uint32_t osKernelGetSysTimerCount </td>
813           <td>(</td>
814           <td class="paramtype">void&#160;</td>
815           <td class="paramname"></td><td>)</td>
816           <td></td>
817         </tr>
818       </table>
819 </div><div class="memdoc">
820 <dl class="section return"><dt>Returns</dt><dd>RTOS kernel current system timer count as 32-bit value.</dd></dl>
821 <p>The function <b>osKernelGetSysTimerCount</b> returns the current RTOS kernel system timer as a 32-bit value. The value is a rolling 32-bit counter that is composed of the kernel system interrupt timer value and the counter that counts these interrupts (RTOS kernel ticks).</p>
822 <p>This function allows the implementation of very short timeout checks below the RTOS tick granularity. Such checks might be required when checking for a busy status in a device or peripheral initialization routine, see code example below.</p>
823 <dl class="section note"><dt>Note</dt><dd>This function may be called from Interrupt Service Routines.</dd></dl>
824 <p><b>Code Example</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;<a class="code" href="cmsis__os2_8h.html">cmsis_os2.h</a>&quot;</span></div>
825 <div class="line"> </div>
826 <div class="line"><span class="keywordtype">void</span> SetupDevice (<span class="keywordtype">void</span>)  {</div>
827 <div class="line">  uint32_t tick;</div>
828 <div class="line">  </div>
829 <div class="line">  <span class="comment">// Calculating 100us timeout in system timer ticks</span></div>
830 <div class="line">  <span class="keyword">const</span> uint32_t timeout = 100U * <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#ga4d69215a93220f72be3684cad582f16a">osKernelGetSysTimerFreq</a>() / 1000000u;</div>
831 <div class="line">  </div>
832 <div class="line">  tick = <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#gae0fcaff6cecfb4013bb556c87afcd7d2">osKernelGetSysTimerCount</a>();             <span class="comment">// get start value of the Kernel system tick</span></div>
833 <div class="line">  Device.Setup ();                               <span class="comment">// initialize a device or peripheral</span></div>
834 <div class="line">  <span class="keywordflow">do</span> {                                           <span class="comment">// poll device busy status for 100 microseconds</span></div>
835 <div class="line">    <span class="keywordflow">if</span> (!Device.Busy) <span class="keywordflow">break</span>;                     <span class="comment">// check if device is correctly initialized</span></div>
836 <div class="line">  } <span class="keywordflow">while</span> ((<a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#gae0fcaff6cecfb4013bb556c87afcd7d2">osKernelGetSysTimerCount</a>() - tick) &lt; timeout));</div>
837 <div class="line">  <span class="keywordflow">if</span> (Device.Busy)  {              </div>
838 <div class="line">    ;                                            <span class="comment">// in case device still busy, signal error</span></div>
839 <div class="line">  }</div>
840 <div class="line">                                                 <span class="comment">// start interacting with device</span></div>
841 <div class="line">}</div>
842 <div class="ttc" id="agroup__CMSIS__RTOS__KernelCtrl_html_ga4d69215a93220f72be3684cad582f16a"><div class="ttname"><a href="group__CMSIS__RTOS__KernelCtrl.html#ga4d69215a93220f72be3684cad582f16a">osKernelGetSysTimerFreq</a></div><div class="ttdeci">uint32_t osKernelGetSysTimerFreq(void)</div><div class="ttdoc">Get the RTOS kernel system timer frequency.</div></div>
843 <div class="ttc" id="agroup__CMSIS__RTOS__KernelCtrl_html_gae0fcaff6cecfb4013bb556c87afcd7d2"><div class="ttname"><a href="group__CMSIS__RTOS__KernelCtrl.html#gae0fcaff6cecfb4013bb556c87afcd7d2">osKernelGetSysTimerCount</a></div><div class="ttdeci">uint32_t osKernelGetSysTimerCount(void)</div><div class="ttdoc">Get the RTOS kernel system timer count.</div></div>
844 </div><!-- fragment --> 
845 </div>
846 </div>
847 <a id="ga4d69215a93220f72be3684cad582f16a" name="ga4d69215a93220f72be3684cad582f16a"></a>
848 <h2 class="memtitle"><span class="permalink"><a href="#ga4d69215a93220f72be3684cad582f16a">&#9670;&#160;</a></span>osKernelGetSysTimerFreq()</h2>
849
850 <div class="memitem">
851 <div class="memproto">
852       <table class="memname">
853         <tr>
854           <td class="memname">uint32_t osKernelGetSysTimerFreq </td>
855           <td>(</td>
856           <td class="paramtype">void&#160;</td>
857           <td class="paramname"></td><td>)</td>
858           <td></td>
859         </tr>
860       </table>
861 </div><div class="memdoc">
862 <dl class="section return"><dt>Returns</dt><dd>frequency of the system timer in hertz, i.e. timer ticks per second.</dd></dl>
863 <p>The function <b>osKernelGetSysTimerFreq</b> returns the frequency of the current RTOS kernel system timer.</p>
864 <dl class="section note"><dt>Note</dt><dd>This function may be called from Interrupt Service Routines. </dd></dl>
865
866 </div>
867 </div>
868 <a id="gac7e3b012c15c55bda68e0dd96ad9cd72" name="gac7e3b012c15c55bda68e0dd96ad9cd72"></a>
869 <h2 class="memtitle"><span class="permalink"><a href="#gac7e3b012c15c55bda68e0dd96ad9cd72">&#9670;&#160;</a></span>osKernelProtect()</h2>
870
871 <div class="memitem">
872 <div class="memproto">
873       <table class="memname">
874         <tr>
875           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osKernelProtect </td>
876           <td>(</td>
877           <td class="paramtype">uint32_t&#160;</td>
878           <td class="paramname"><em>safety_class</em></td><td>)</td>
879           <td></td>
880         </tr>
881       </table>
882 </div><div class="memdoc">
883 <dl class="params"><dt>Parameters</dt><dd>
884   <table class="params">
885     <tr><td class="paramdir">[in]</td><td class="paramname">safety_class</td><td>safety class. </td></tr>
886   </table>
887   </dd>
888 </dl>
889 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
890 <p>The function <b>osKernelProtect</b> configures kernel access protection. After its successful execution, only threads with safety class equal or higher than the <em>safety_class</em> specified in the argument can execute kernel control functions.</p><ul>
891 <li><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga948609ee930d9b38336b9e1c2a4dfe12">osKernelLock</a></li>
892 <li><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gaf401728b4657456198c33fe75f8d6720">osKernelUnlock</a></li>
893 <li><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gae7d0a71b9586cbbb49fcbdf6a04f0289">osKernelRestoreLock</a></li>
894 <li><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gae26683e1606ec633354a2876c68f0c1f">osKernelSuspend</a></li>
895 <li><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga8c4b4d7ed34cab73c001665d9176aced">osKernelResume</a></li>
896 <li><a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gac7e3b012c15c55bda68e0dd96ad9cd72">osKernelProtect</a></li>
897 </ul>
898 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
899 <li><em>osOK</em> in case of success.</li>
900 <li><em>osErrorParameter</em> if <em>safety_class</em> is invalid.</li>
901 <li><em>osError</em> if kernel is not in ready or running state.</li>
902 <li><em>osErrorISR</em> if called from an Interrupt Service Routine.</li>
903 <li><em>osErrorSafetyClass</em> if the calling thread safety class is lower than the kernel protect safety class.</li>
904 </ul>
905 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from Interrupt Service Routines.</dd></dl>
906 <p><b>Code Example:</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;<a class="code" href="cmsis__os2_8h.html">cmsis_os2.h</a>&quot;</span></div>
907 <div class="line"> </div>
908 <div class="line"><span class="keywordtype">void</span> ProtectKernelControlFunctions (<span class="keywordtype">void</span>) {</div>
909 <div class="line">  <a class="code hl_enumeration" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> status;</div>
910 <div class="line"> </div>
911 <div class="line">  status = <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#gac7e3b012c15c55bda68e0dd96ad9cd72">osKernelProtect</a>(4U); <span class="comment">// Enable Kernel Control for threads with safety class 4 or higher</span></div>
912 <div class="line">  <span class="comment">// verify status value here.</span></div>
913 <div class="line">}</div>
914 <div class="ttc" id="agroup__CMSIS__RTOS__KernelCtrl_html_gac7e3b012c15c55bda68e0dd96ad9cd72"><div class="ttname"><a href="group__CMSIS__RTOS__KernelCtrl.html#gac7e3b012c15c55bda68e0dd96ad9cd72">osKernelProtect</a></div><div class="ttdeci">osStatus_t osKernelProtect(uint32_t safety_class)</div><div class="ttdoc">Protect the RTOS Kernel scheduler access.</div></div>
915 </div><!-- fragment --> 
916 </div>
917 </div>
918 <a id="ga2065364d1bc805a40e749430377df1e1" name="ga2065364d1bc805a40e749430377df1e1"></a>
919 <h2 class="memtitle"><span class="permalink"><a href="#ga2065364d1bc805a40e749430377df1e1">&#9670;&#160;</a></span>osKernelDestroyClass()</h2>
920
921 <div class="memitem">
922 <div class="memproto">
923       <table class="memname">
924         <tr>
925           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osKernelDestroyClass </td>
926           <td>(</td>
927           <td class="paramtype">uint32_t&#160;</td>
928           <td class="paramname"><em>safety_class</em>, </td>
929         </tr>
930         <tr>
931           <td class="paramkey"></td>
932           <td></td>
933           <td class="paramtype">uint32_t&#160;</td>
934           <td class="paramname"><em>mode</em>&#160;</td>
935         </tr>
936         <tr>
937           <td></td>
938           <td>)</td>
939           <td></td><td></td>
940         </tr>
941       </table>
942 </div><div class="memdoc">
943 <dl class="params"><dt>Parameters</dt><dd>
944   <table class="params">
945     <tr><td class="paramdir">[in]</td><td class="paramname">safety_class</td><td>safety class. </td></tr>
946     <tr><td class="paramdir">[in]</td><td class="paramname">mode</td><td>safety mode. </td></tr>
947   </table>
948   </dd>
949 </dl>
950 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
951 <p>The function <b>osKernelDestroyClass</b> destroys RTOS objects based on safety class assignment. <em>safety_class</em> provides the reference safety class value, while <em>mode</em> is considered as a bitmap that additionally specifies the safety classes to be destroyed.</p>
952 <p>If <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga7abd2d95425d9e02672778b3464b2eaa">osSafetyWithSameClass</a> is set in <em>mode</em> than the RTOS objects with safety class value equal to <em>safety_class</em> will be destroyed. <br  />
953  If <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga8c77ee126b9215425fc004ee13cdc6de">osSafetyWithLowerClass</a> is set in <em>mode</em> than the RTOS objects with safety class value lower than <em>safety_class</em> will be destroyed.</p>
954 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
955 <li><em>osOK</em> in case of success.</li>
956 <li><em>osErrorParameter</em> if <em>safety_class</em> is invalid.</li>
957 <li><em>osErrorResource</em> if no other <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">READY</a> thread exists.</li>
958 <li><em>osErrorISR</em> if called from interrupt other than <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga5a02770aaf65c7a3c7562c109884176a">osWatchdogAlarm_Handler</a>.</li>
959 <li><em>osErrorSafetyClass</em> if the calling thread safety class is lower than the kernel protect safety class.</li>
960 </ul>
961 <p><b>Code Example:</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;<a class="code" href="cmsis__os2_8h.html">cmsis_os2.h</a>&quot;</span></div>
962 <div class="line"> </div>
963 <div class="line"><span class="keywordtype">void</span> DestroyNonCriticalClasses (<span class="keywordtype">void</span>) {</div>
964 <div class="line">  <a class="code hl_enumeration" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> status;</div>
965 <div class="line"> </div>
966 <div class="line">  status = <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#ga2065364d1bc805a40e749430377df1e1">osKernelDestroyClass</a>(4U, <a class="code hl_define" href="group__CMSIS__RTOS__Definitions.html#ga7abd2d95425d9e02672778b3464b2eaa">osSafetyWithSameClass</a> | <a class="code hl_define" href="group__CMSIS__RTOS__Definitions.html#ga8c77ee126b9215425fc004ee13cdc6de">osSafetyWithLowerClass</a>); <span class="comment">// Destroy objects with safety class 4 or lower</span></div>
967 <div class="line">  <span class="comment">// verify status value here.</span></div>
968 <div class="line">}</div>
969 <div class="ttc" id="agroup__CMSIS__RTOS__Definitions_html_ga7abd2d95425d9e02672778b3464b2eaa"><div class="ttname"><a href="group__CMSIS__RTOS__Definitions.html#ga7abd2d95425d9e02672778b3464b2eaa">osSafetyWithSameClass</a></div><div class="ttdeci">#define osSafetyWithSameClass</div><div class="ttdoc">Objects with same safety class.</div><div class="ttdef"><b>Definition:</b> cmsis_os2.h:239</div></div>
970 <div class="ttc" id="agroup__CMSIS__RTOS__Definitions_html_ga8c77ee126b9215425fc004ee13cdc6de"><div class="ttname"><a href="group__CMSIS__RTOS__Definitions.html#ga8c77ee126b9215425fc004ee13cdc6de">osSafetyWithLowerClass</a></div><div class="ttdeci">#define osSafetyWithLowerClass</div><div class="ttdoc">Objects with lower safety class.</div><div class="ttdef"><b>Definition:</b> cmsis_os2.h:240</div></div>
971 <div class="ttc" id="agroup__CMSIS__RTOS__KernelCtrl_html_ga2065364d1bc805a40e749430377df1e1"><div class="ttname"><a href="group__CMSIS__RTOS__KernelCtrl.html#ga2065364d1bc805a40e749430377df1e1">osKernelDestroyClass</a></div><div class="ttdeci">osStatus_t osKernelDestroyClass(uint32_t safety_class, uint32_t mode)</div><div class="ttdoc">Destroy objects for specified safety classes.</div></div>
972 </div><!-- fragment --> 
973 </div>
974 </div>
975 <a id="ga91b400b21a9093f7751fc45613c12110" name="ga91b400b21a9093f7751fc45613c12110"></a>
976 <h2 class="memtitle"><span class="permalink"><a href="#ga91b400b21a9093f7751fc45613c12110">&#9670;&#160;</a></span>osFaultResume()</h2>
977
978 <div class="memitem">
979 <div class="memproto">
980       <table class="memname">
981         <tr>
982           <td class="memname">void osFaultResume </td>
983           <td>(</td>
984           <td class="paramtype">void&#160;</td>
985           <td class="paramname"></td><td>)</td>
986           <td></td>
987         </tr>
988       </table>
989 </div><div class="memdoc">
990 <p>Resume normal RTOS operation when exiting exception faults.</p>
991 <p><b>Code Example:</b> </p><div class="fragment"><div class="line"><span class="keywordtype">void</span> HardFault_Handler (<span class="keywordtype">void</span>) {</div>
992 <div class="line">  __ASM <span class="keyword">volatile</span> (</div>
993 <div class="line">    <span class="stringliteral">&quot;...                          \n\t&quot;</span> <span class="comment">// Enter assembly and handle faults</span></div>
994 <div class="line">    <span class="stringliteral">&quot;...                          \n\t&quot;</span></div>
995 <div class="line">    <span class="stringliteral">&quot;ldr  r0,=osFaultResume       \n\t&quot;</span> <span class="comment">// Before exiting the handler load and</span></div>
996 <div class="line">    <span class="stringliteral">&quot;bx   r0                      \n\t&quot;</span> <span class="comment">// jump to osFaultResume</span></div>
997 <div class="line">  );</div>
998 <div class="line">}</div>
999 </div><!-- fragment --> 
1000 </div>
1001 </div>
1002 </div><!-- contents -->
1003 </div><!-- doc-content -->
1004 <!-- start footer part -->
1005 <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
1006   <ul>
1007     <li class="footer">
1008       <script type="text/javascript">
1009         <!--
1010         writeFooter.call(this);
1011         //-->
1012       </script> 
1013     </li>
1014   </ul>
1015 </div>
1016 </body>
1017 </html>