]> begriffs open source - cmsis/blob - dev/v6.0.0-dev53/RTOS2/html/group__CMSIS__RTOS__ThreadMgmt.html
Update documentation for release dev/v6.0.0-dev53
[cmsis] / dev / v6.0.0-dev53 / RTOS2 / html / group__CMSIS__RTOS__ThreadMgmt.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: Thread Management</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__ThreadMgmt.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="#define-members">Macros</a> &#124;
133 <a href="#typedef-members">Typedefs</a> &#124;
134 <a href="#enum-members">Enumerations</a> &#124;
135 <a href="#func-members">Functions</a>  </div>
136   <div class="headertitle"><div class="title">Thread Management<div class="ingroups"><a class="el" href="group__CMSIS__RTOS.html">CMSIS-RTOS2 API</a></div></div></div>
137 </div><!--header-->
138 <div class="contents">
139
140 <p>Define, create, and control thread functions.  
141 <a href="#details">More...</a></p>
142 <table class="memberdecls">
143 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
144 Data Structures</h2></td></tr>
145 <tr class="memitem:structosThreadAttr__t"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#structosThreadAttr__t">osThreadAttr_t</a></td></tr>
146 <tr class="memdesc:structosThreadAttr__t"><td class="mdescLeft">&#160;</td><td class="mdescRight">Attributes structure for thread.  <a href="group__CMSIS__RTOS__ThreadMgmt.html#structosThreadAttr__t">More...</a><br /></td></tr>
147 <tr class="separator:structosThreadAttr__t"><td class="memSeparator" colspan="2">&#160;</td></tr>
148 </table><table class="memberdecls">
149 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
150 Macros</h2></td></tr>
151 <tr class="memitem:ga6f3bd4b67fb89bd085266fe65ee45b06"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga6f3bd4b67fb89bd085266fe65ee45b06">osErrorId</a>&#160;&#160;&#160;0xFFFFFFFFU</td></tr>
152 <tr class="memdesc:ga6f3bd4b67fb89bd085266fe65ee45b06"><td class="mdescLeft">&#160;</td><td class="mdescRight">osError (-1).  <br /></td></tr>
153 <tr class="separator:ga6f3bd4b67fb89bd085266fe65ee45b06"><td class="memSeparator" colspan="2">&#160;</td></tr>
154 <tr class="memitem:ga249499c519f3f8eef5673009ab6cfcbe"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga249499c519f3f8eef5673009ab6cfcbe">osThreadJoinable</a>&#160;&#160;&#160;0x00000001U</td></tr>
155 <tr class="memdesc:ga249499c519f3f8eef5673009ab6cfcbe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Thread created in joinable mode.  <br /></td></tr>
156 <tr class="separator:ga249499c519f3f8eef5673009ab6cfcbe"><td class="memSeparator" colspan="2">&#160;</td></tr>
157 <tr class="memitem:gaa9336c1073858d6b118e2e011636246f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa9336c1073858d6b118e2e011636246f">osThreadDetached</a>&#160;&#160;&#160;0x00000000U</td></tr>
158 <tr class="memdesc:gaa9336c1073858d6b118e2e011636246f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Thread created in detached mode (default)  <br /></td></tr>
159 <tr class="separator:gaa9336c1073858d6b118e2e011636246f"><td class="memSeparator" colspan="2">&#160;</td></tr>
160 <tr class="memitem:ga4c028e5c3f4d86d237a1e09ceaf84792"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga4c028e5c3f4d86d237a1e09ceaf84792">osThreadUnprivileged</a>&#160;&#160;&#160;0x00000002U</td></tr>
161 <tr class="memdesc:ga4c028e5c3f4d86d237a1e09ceaf84792"><td class="mdescLeft">&#160;</td><td class="mdescRight">Thread runs in unprivileged mode.  <br /></td></tr>
162 <tr class="separator:ga4c028e5c3f4d86d237a1e09ceaf84792"><td class="memSeparator" colspan="2">&#160;</td></tr>
163 <tr class="memitem:ga7c2b7db42d23e4f56132e0ed739d02e5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga7c2b7db42d23e4f56132e0ed739d02e5">osThreadPrivileged</a>&#160;&#160;&#160;0x00000004U</td></tr>
164 <tr class="memdesc:ga7c2b7db42d23e4f56132e0ed739d02e5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Thread runs in privileged mode.  <br /></td></tr>
165 <tr class="separator:ga7c2b7db42d23e4f56132e0ed739d02e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
166 <tr class="memitem:gaefca370070d0b1616421bc3311acfecc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaefca370070d0b1616421bc3311acfecc">osThreadZone</a>(n)</td></tr>
167 <tr class="memdesc:gaefca370070d0b1616421bc3311acfecc"><td class="mdescLeft">&#160;</td><td class="mdescRight">MPU zone value in attribute bit field format.  <br /></td></tr>
168 <tr class="separator:gaefca370070d0b1616421bc3311acfecc"><td class="memSeparator" colspan="2">&#160;</td></tr>
169 <tr class="memitem:ga4ef461379ceba9ab7764850ef2c7b0ac"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga4ef461379ceba9ab7764850ef2c7b0ac">osThreadProcessor</a>(n)&#160;&#160;&#160;(1UL &lt;&lt; (n))</td></tr>
170 <tr class="memdesc:ga4ef461379ceba9ab7764850ef2c7b0ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Thread processor affinity mask value in attribute affinity_mask format.  <br /></td></tr>
171 <tr class="separator:ga4ef461379ceba9ab7764850ef2c7b0ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
172 </table><table class="memberdecls">
173 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="typedef-members" name="typedef-members"></a>
174 Typedefs</h2></td></tr>
175 <tr class="memitem:gadd51f99a6eb50b94eee75f27cae815eb"><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gadd51f99a6eb50b94eee75f27cae815eb">osThreadFunc_t</a>) (void *argument)</td></tr>
176 <tr class="memdesc:gadd51f99a6eb50b94eee75f27cae815eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Entry point of a thread.  <br /></td></tr>
177 <tr class="separator:gadd51f99a6eb50b94eee75f27cae815eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
178 <tr class="memitem:gaa6c32fe2a3e0a2e01f212d55b02e51c7"><td class="memItemLeft" align="right" valign="top">typedef void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a></td></tr>
179 <tr class="separator:gaa6c32fe2a3e0a2e01f212d55b02e51c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
180 </table><table class="memberdecls">
181 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a>
182 Enumerations</h2></td></tr>
183 <tr class="memitem:gad3dc89e942e38d9f3af858a0269a820d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad3dc89e942e38d9f3af858a0269a820d">osThreadState_t</a> { <br />
184 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ggad3dc89e942e38d9f3af858a0269a820dae9d77830b6866e287417b6e1d983e971">osThreadInactive</a> = 0
185 , <br />
186 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ggad3dc89e942e38d9f3af858a0269a820da59e286915944fe0e4d1ffdb1f2946f14">osThreadReady</a> = 1
187 , <br />
188 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ggad3dc89e942e38d9f3af858a0269a820dac4fe336e0790188fcf7d667372eca19d">osThreadRunning</a> = 2
189 , <br />
190 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ggad3dc89e942e38d9f3af858a0269a820daf0e992e354fba8695957c530226a4968">osThreadBlocked</a> = 3
191 , <br />
192 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ggad3dc89e942e38d9f3af858a0269a820dad5b2726c2d0228f4f1a76cf6b630963c">osThreadTerminated</a> = 4
193 , <br />
194 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ggad3dc89e942e38d9f3af858a0269a820da339313e26613bc12f66a852e2ff8745e">osThreadError</a> = -1
195 , <br />
196 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad3dc89e942e38d9f3af858a0269a820da8872f7e352370eb11ee772c7dcca6e6c">osThreadReserved</a> = 0x7FFFFFFF
197 <br />
198  }</td></tr>
199 <tr class="memdesc:gad3dc89e942e38d9f3af858a0269a820d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Thread state.  <a href="group__CMSIS__RTOS__ThreadMgmt.html#gad3dc89e942e38d9f3af858a0269a820d">More...</a><br /></td></tr>
200 <tr class="separator:gad3dc89e942e38d9f3af858a0269a820d"><td class="memSeparator" colspan="2">&#160;</td></tr>
201 <tr class="memitem:gad4e3e0971b41f2d17584a8c6837342ec"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ec">osPriority_t</a> { <br />
202 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca6c437c7185161a3bd1e7e4669dfa17a3">osPriorityNone</a> = 0
203 , <br />
204 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ggad4e3e0971b41f2d17584a8c6837342ecacd5864eac01a6916a7c866bb51a6aac1">osPriorityIdle</a> = 1
205 , <br />
206 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca61cb822239ac8f66dfbdc7291598a3d4">osPriorityLow</a> = 8
207 , <br />
208 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ecaba2b6919f0b630c8c1b2c940e3bfadbe">osPriorityLow1</a> = 8+1
209 , <br />
210 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca78ad5d00aa07a2b4bf30a639544f5507">osPriorityLow2</a> = 8+2
211 , <br />
212 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca28ccb07942c16f5f5efefb6cf68a7f50">osPriorityLow3</a> = 8+3
213 , <br />
214 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca5a4a4f26d5b220a968e221e854f69a81">osPriorityLow4</a> = 8+4
215 , <br />
216 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ecad69b8c14809bc5bdce4887f5a57d9353">osPriorityLow5</a> = 8+5
217 , <br />
218 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ecac0f188468664d06d4cd9e6e1ed351393">osPriorityLow6</a> = 8+6
219 , <br />
220 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca5b151ebba7fdeb1baaa9b7b420890b7a">osPriorityLow7</a> = 8+7
221 , <br />
222 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca193b650117c209b4a203954542bcc3e6">osPriorityBelowNormal</a> = 16
223 , <br />
224 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca9138da7187690b15f52d8e5729c18da5">osPriorityBelowNormal1</a> = 16+1
225 , <br />
226 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca4f081d6735bf2f513338b07eddf13ae3">osPriorityBelowNormal2</a> = 16+2
227 , <br />
228 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca19c013690d0d6bf3ac90707942be3fdf">osPriorityBelowNormal3</a> = 16+3
229 , <br />
230 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca36931ad6cee5e4700e2c8622bdd2cd24">osPriorityBelowNormal4</a> = 16+4
231 , <br />
232 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca0bcd9ad1e7a02e3bf03be7dcc8ece38e">osPriorityBelowNormal5</a> = 16+5
233 , <br />
234 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ecabd3cc7df5b92b752ddf1e7843a786c05">osPriorityBelowNormal6</a> = 16+6
235 , <br />
236 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ecab18e3bda7b5e418e309a62d6267ea14b">osPriorityBelowNormal7</a> = 16+7
237 , <br />
238 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca45a2895ad30c79fb97de18cac7cc19f1">osPriorityNormal</a> = 24
239 , <br />
240 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca3e70c19e03d5a54e66bd071f0776782c">osPriorityNormal1</a> = 24+1
241 , <br />
242 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca19e96f2b025b6462a43b1965043c8205">osPriorityNormal2</a> = 24+2
243 , <br />
244 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca402bd7ab26fb57c8cee8cf94168f4c91">osPriorityNormal3</a> = 24+3
245 , <br />
246 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca93ef07d3a107aeee6508bfd29ba3485d">osPriorityNormal4</a> = 24+4
247 , <br />
248 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca68f3f6fdaa639de300277802aa13a0ab">osPriorityNormal5</a> = 24+5
249 , <br />
250 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca8221eb0d059726a6309f1f2d0cdb6204">osPriorityNormal6</a> = 24+6
251 , <br />
252 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca049abd04f8951415407ec9d92bd9b80b">osPriorityNormal7</a> = 24+7
253 , <br />
254 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca17b36cd9cd38652c2bc6d4803990674b">osPriorityAboveNormal</a> = 32
255 , <br />
256 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ecabfeafc713edfc7b9130aa5c762d68998">osPriorityAboveNormal1</a> = 32+1
257 , <br />
258 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca901acf86070e06f5990b611734ee2562">osPriorityAboveNormal2</a> = 32+2
259 , <br />
260 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ecad566b876b64e6efdc3eba0fc04e54013">osPriorityAboveNormal3</a> = 32+3
261 , <br />
262 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca6ccac37d7dae4586a2031966d36a63ec">osPriorityAboveNormal4</a> = 32+4
263 , <br />
264 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ecae36e8b38ee046a3104bcccabb10cf78c">osPriorityAboveNormal5</a> = 32+5
265 , <br />
266 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca61e6ce27e1e0f34f2540b413b8a8b207">osPriorityAboveNormal6</a> = 32+6
267 , <br />
268 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ecadbbb0fed3ada6b9b50d4a628abc2a67d">osPriorityAboveNormal7</a> = 32+7
269 , <br />
270 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca914433934143a9ba767e59577c56e6c2">osPriorityHigh</a> = 40
271 , <br />
272 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca17b7a7e6febf12444a84e90edfce36cb">osPriorityHigh1</a> = 40+1
273 , <br />
274 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca40a120cf8bbc42e575455c027f3d9b03">osPriorityHigh2</a> = 40+2
275 , <br />
276 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca0b15518b0b5321a29efa0b42b2f8c759">osPriorityHigh3</a> = 40+3
277 , <br />
278 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ecafe5a4f393fab04551ac7d93e80cdf0fb">osPriorityHigh4</a> = 40+4
279 , <br />
280 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca5960841bfbdd959b163429e8502ea4e9">osPriorityHigh5</a> = 40+5
281 , <br />
282 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca5714dda6effc1a3f8ec155d97e3e69bc">osPriorityHigh6</a> = 40+6
283 , <br />
284 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca63ad0cc52a701ef3d9df52b59b995652">osPriorityHigh7</a> = 40+7
285 , <br />
286 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca1485dec3702434a1ec3cb74c7a17a4af">osPriorityRealtime</a> = 48
287 , <br />
288 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ecaf685a06b30f0635476e21347a986305b">osPriorityRealtime1</a> = 48+1
289 , <br />
290 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ecab832bd9de84e5eec2ecad69d085dadff">osPriorityRealtime2</a> = 48+2
291 , <br />
292 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca3f2261e5e733e92844ae8c630f2f9eaa">osPriorityRealtime3</a> = 48+3
293 , <br />
294 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ecaf614e3dc966d559cd9d9d2a0f78ebe70">osPriorityRealtime4</a> = 48+4
295 , <br />
296 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ecaff84f31ceff203c711fb9476443507df">osPriorityRealtime5</a> = 48+5
297 , <br />
298 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342eca80ae9d0dd256312c0c8f44af48316194">osPriorityRealtime6</a> = 48+6
299 , <br />
300 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ecaa76da6825c4bd31c4958200bc289103b">osPriorityRealtime7</a> = 48+7
301 , <br />
302 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ggad4e3e0971b41f2d17584a8c6837342eca4b4fa46c3ebaf4259662a0a0a3173b7f">osPriorityISR</a> = 56
303 , <br />
304 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ecae35f5e2f9c64ad346822521b643bdea4">osPriorityError</a> = -1
305 , <br />
306 &#160;&#160;<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ecac86c171f8d466cced0cb1b03bb03343b">osPriorityReserved</a> = 0x7FFFFFFF
307 <br />
308  }</td></tr>
309 <tr class="memdesc:gad4e3e0971b41f2d17584a8c6837342ec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Priority values.  <a href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ec">More...</a><br /></td></tr>
310 <tr class="separator:gad4e3e0971b41f2d17584a8c6837342ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
311 </table><table class="memberdecls">
312 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
313 Functions</h2></td></tr>
314 <tr class="memitem:ga48d68b8666d99d28fa646ee1d2182b8f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gadd51f99a6eb50b94eee75f27cae815eb">osThreadFunc_t</a> func, void *argument, const <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#structosThreadAttr__t">osThreadAttr_t</a> *attr)</td></tr>
315 <tr class="memdesc:ga48d68b8666d99d28fa646ee1d2182b8f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a thread and add it to Active Threads.  <br /></td></tr>
316 <tr class="separator:ga48d68b8666d99d28fa646ee1d2182b8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
317 <tr class="memitem:gac3230f3a55a297514b013ebf38f27e0a"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gac3230f3a55a297514b013ebf38f27e0a">osThreadGetName</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id)</td></tr>
318 <tr class="memdesc:gac3230f3a55a297514b013ebf38f27e0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get name of a thread.  <br /></td></tr>
319 <tr class="separator:gac3230f3a55a297514b013ebf38f27e0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
320 <tr class="memitem:ga1bfbef7da94ed4147d231e8d6eeb5f3e"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga1bfbef7da94ed4147d231e8d6eeb5f3e">osThreadGetClass</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id)</td></tr>
321 <tr class="memdesc:ga1bfbef7da94ed4147d231e8d6eeb5f3e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get safety class of a thread.  <br /></td></tr>
322 <tr class="separator:ga1bfbef7da94ed4147d231e8d6eeb5f3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
323 <tr class="memitem:ga4101737fa4fd303d4b41fdca6b994f8e"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga4101737fa4fd303d4b41fdca6b994f8e">osThreadGetZone</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id)</td></tr>
324 <tr class="memdesc:ga4101737fa4fd303d4b41fdca6b994f8e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get MPU protected zone of a thread.  <br /></td></tr>
325 <tr class="separator:ga4101737fa4fd303d4b41fdca6b994f8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
326 <tr class="memitem:ga8df03548e89fbc56402a5cd584a505da"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a> (void)</td></tr>
327 <tr class="memdesc:ga8df03548e89fbc56402a5cd584a505da"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the thread ID of the current running thread.  <br /></td></tr>
328 <tr class="separator:ga8df03548e89fbc56402a5cd584a505da"><td class="memSeparator" colspan="2">&#160;</td></tr>
329 <tr class="memitem:gacc0a98b42f0a5928e12dc91dc76866b9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad3dc89e942e38d9f3af858a0269a820d">osThreadState_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gacc0a98b42f0a5928e12dc91dc76866b9">osThreadGetState</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id)</td></tr>
330 <tr class="memdesc:gacc0a98b42f0a5928e12dc91dc76866b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get current thread state of a thread.  <br /></td></tr>
331 <tr class="separator:gacc0a98b42f0a5928e12dc91dc76866b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
332 <tr class="memitem:ga861a420fb2d643115b06622903fb3bfb"><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__ThreadMgmt.html#ga861a420fb2d643115b06622903fb3bfb">osThreadSetPriority</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id, <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ec">osPriority_t</a> priority)</td></tr>
333 <tr class="memdesc:ga861a420fb2d643115b06622903fb3bfb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Change priority of a thread.  <br /></td></tr>
334 <tr class="separator:ga861a420fb2d643115b06622903fb3bfb"><td class="memSeparator" colspan="2">&#160;</td></tr>
335 <tr class="memitem:ga0aeaf349604f456e68e78f9d3b42e44b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ec">osPriority_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga0aeaf349604f456e68e78f9d3b42e44b">osThreadGetPriority</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id)</td></tr>
336 <tr class="memdesc:ga0aeaf349604f456e68e78f9d3b42e44b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get current priority of a thread.  <br /></td></tr>
337 <tr class="separator:ga0aeaf349604f456e68e78f9d3b42e44b"><td class="memSeparator" colspan="2">&#160;</td></tr>
338 <tr class="memitem:gad01c7ec26535b1de6b018bb9466720e2"><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__ThreadMgmt.html#gad01c7ec26535b1de6b018bb9466720e2">osThreadYield</a> (void)</td></tr>
339 <tr class="memdesc:gad01c7ec26535b1de6b018bb9466720e2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pass control to next thread that is in state <b>READY</b>.  <br /></td></tr>
340 <tr class="separator:gad01c7ec26535b1de6b018bb9466720e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
341 <tr class="memitem:gaa9de419d0152bf77e9bbcd1f369fb990"><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__ThreadMgmt.html#gaa9de419d0152bf77e9bbcd1f369fb990">osThreadSuspend</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id)</td></tr>
342 <tr class="memdesc:gaa9de419d0152bf77e9bbcd1f369fb990"><td class="mdescLeft">&#160;</td><td class="mdescRight">Suspend execution of a thread.  <br /></td></tr>
343 <tr class="separator:gaa9de419d0152bf77e9bbcd1f369fb990"><td class="memSeparator" colspan="2">&#160;</td></tr>
344 <tr class="memitem:ga3dbad90eff394b02de76a452c84c5d80"><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__ThreadMgmt.html#ga3dbad90eff394b02de76a452c84c5d80">osThreadResume</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id)</td></tr>
345 <tr class="memdesc:ga3dbad90eff394b02de76a452c84c5d80"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resume execution of a thread.  <br /></td></tr>
346 <tr class="separator:ga3dbad90eff394b02de76a452c84c5d80"><td class="memSeparator" colspan="2">&#160;</td></tr>
347 <tr class="memitem:gaaad14cd9547341ea8109dc4e8540f1dc"><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__ThreadMgmt.html#gaaad14cd9547341ea8109dc4e8540f1dc">osThreadDetach</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id)</td></tr>
348 <tr class="memdesc:gaaad14cd9547341ea8109dc4e8540f1dc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Detach a thread (thread storage can be reclaimed when thread terminates).  <br /></td></tr>
349 <tr class="separator:gaaad14cd9547341ea8109dc4e8540f1dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
350 <tr class="memitem:ga3fca90fb0679afeb968aa8c3d5874487"><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__ThreadMgmt.html#ga3fca90fb0679afeb968aa8c3d5874487">osThreadJoin</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id)</td></tr>
351 <tr class="memdesc:ga3fca90fb0679afeb968aa8c3d5874487"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wait for specified thread to terminate.  <br /></td></tr>
352 <tr class="separator:ga3fca90fb0679afeb968aa8c3d5874487"><td class="memSeparator" colspan="2">&#160;</td></tr>
353 <tr class="memitem:gaddaa452dd7610e4096647a566d3556fc"><td class="memItemLeft" align="right" valign="top">__NO_RETURN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaddaa452dd7610e4096647a566d3556fc">osThreadExit</a> (void)</td></tr>
354 <tr class="memdesc:gaddaa452dd7610e4096647a566d3556fc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Terminate execution of current running thread.  <br /></td></tr>
355 <tr class="separator:gaddaa452dd7610e4096647a566d3556fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
356 <tr class="memitem:ga2f8ba6dba6e9c065a6e236ffd410d74a"><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__ThreadMgmt.html#ga2f8ba6dba6e9c065a6e236ffd410d74a">osThreadTerminate</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id)</td></tr>
357 <tr class="memdesc:ga2f8ba6dba6e9c065a6e236ffd410d74a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Terminate execution of a thread.  <br /></td></tr>
358 <tr class="separator:ga2f8ba6dba6e9c065a6e236ffd410d74a"><td class="memSeparator" colspan="2">&#160;</td></tr>
359 <tr class="memitem:gab9f8bd715d671c6ee27644867bc1bf65"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gab9f8bd715d671c6ee27644867bc1bf65">osThreadGetStackSize</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id)</td></tr>
360 <tr class="memdesc:gab9f8bd715d671c6ee27644867bc1bf65"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get stack size of a thread.  <br /></td></tr>
361 <tr class="separator:gab9f8bd715d671c6ee27644867bc1bf65"><td class="memSeparator" colspan="2">&#160;</td></tr>
362 <tr class="memitem:ga9c83bd5dd8de329701775d6ef7012720"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga9c83bd5dd8de329701775d6ef7012720">osThreadGetStackSpace</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id)</td></tr>
363 <tr class="memdesc:ga9c83bd5dd8de329701775d6ef7012720"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get available stack space of a thread based on stack watermark recording during execution.  <br /></td></tr>
364 <tr class="separator:ga9c83bd5dd8de329701775d6ef7012720"><td class="memSeparator" colspan="2">&#160;</td></tr>
365 <tr class="memitem:ga495b3f812224e7301f23a691793765db"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga495b3f812224e7301f23a691793765db">osThreadGetCount</a> (void)</td></tr>
366 <tr class="memdesc:ga495b3f812224e7301f23a691793765db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get number of active threads.  <br /></td></tr>
367 <tr class="separator:ga495b3f812224e7301f23a691793765db"><td class="memSeparator" colspan="2">&#160;</td></tr>
368 <tr class="memitem:ga5606604d56e21ece1a654664be877439"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga5606604d56e21ece1a654664be877439">osThreadEnumerate</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> *thread_array, uint32_t array_items)</td></tr>
369 <tr class="memdesc:ga5606604d56e21ece1a654664be877439"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enumerate active threads.  <br /></td></tr>
370 <tr class="separator:ga5606604d56e21ece1a654664be877439"><td class="memSeparator" colspan="2">&#160;</td></tr>
371 <tr class="memitem:ga8f4455b06afb95c1915f15266818a8c6"><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__ThreadMgmt.html#ga8f4455b06afb95c1915f15266818a8c6">osThreadFeedWatchdog</a> (uint32_t ticks)</td></tr>
372 <tr class="memdesc:ga8f4455b06afb95c1915f15266818a8c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Feed watchdog of the current running thread.  <br /></td></tr>
373 <tr class="separator:ga8f4455b06afb95c1915f15266818a8c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
374 <tr class="memitem:gaee8e6bed82cd58dad31bb90156182032"><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__ThreadMgmt.html#gaee8e6bed82cd58dad31bb90156182032">osThreadProtectPrivileged</a> (void)</td></tr>
375 <tr class="memdesc:gaee8e6bed82cd58dad31bb90156182032"><td class="mdescLeft">&#160;</td><td class="mdescRight">Protect creation of privileged threads.  <br /></td></tr>
376 <tr class="separator:gaee8e6bed82cd58dad31bb90156182032"><td class="memSeparator" colspan="2">&#160;</td></tr>
377 <tr class="memitem:gadadb56627094dbb07f6aeddf7d713fd9"><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__ThreadMgmt.html#gadadb56627094dbb07f6aeddf7d713fd9">osThreadSuspendClass</a> (uint32_t safety_class, uint32_t mode)</td></tr>
378 <tr class="memdesc:gadadb56627094dbb07f6aeddf7d713fd9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Suspend execution of threads for specified safety classes.  <br /></td></tr>
379 <tr class="separator:gadadb56627094dbb07f6aeddf7d713fd9"><td class="memSeparator" colspan="2">&#160;</td></tr>
380 <tr class="memitem:gadd0a06b459925eb5cdeab67b380a3970"><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__ThreadMgmt.html#gadd0a06b459925eb5cdeab67b380a3970">osThreadResumeClass</a> (uint32_t safety_class, uint32_t mode)</td></tr>
381 <tr class="memdesc:gadd0a06b459925eb5cdeab67b380a3970"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resume execution of threads for specified safety classes.  <br /></td></tr>
382 <tr class="separator:gadd0a06b459925eb5cdeab67b380a3970"><td class="memSeparator" colspan="2">&#160;</td></tr>
383 <tr class="memitem:ga99ce311cc620c65fbac043d04dc7d755"><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__ThreadMgmt.html#ga99ce311cc620c65fbac043d04dc7d755">osThreadTerminateZone</a> (uint32_t zone)</td></tr>
384 <tr class="memdesc:ga99ce311cc620c65fbac043d04dc7d755"><td class="mdescLeft">&#160;</td><td class="mdescRight">Terminate execution of threads assigned to a specified MPU protected zone.  <br /></td></tr>
385 <tr class="separator:ga99ce311cc620c65fbac043d04dc7d755"><td class="memSeparator" colspan="2">&#160;</td></tr>
386 <tr class="memitem:ga60e2518df0194587a134b7e1836f2470"><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__ThreadMgmt.html#ga60e2518df0194587a134b7e1836f2470">osThreadSetAffinityMask</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id, uint32_t affinity_mask)</td></tr>
387 <tr class="memdesc:ga60e2518df0194587a134b7e1836f2470"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set processor affinity mask of a thread.  <br /></td></tr>
388 <tr class="separator:ga60e2518df0194587a134b7e1836f2470"><td class="memSeparator" colspan="2">&#160;</td></tr>
389 <tr class="memitem:gab0541a97b969f7f762572dcefe2f65e1"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gab0541a97b969f7f762572dcefe2f65e1">osThreadGetAffinityMask</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id)</td></tr>
390 <tr class="memdesc:gab0541a97b969f7f762572dcefe2f65e1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get current processor affinity mask of a thread.  <br /></td></tr>
391 <tr class="separator:gab0541a97b969f7f762572dcefe2f65e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
392 <tr class="memitem:ga5a02770aaf65c7a3c7562c109884176a"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga5a02770aaf65c7a3c7562c109884176a">osWatchdogAlarm_Handler</a> (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id)</td></tr>
393 <tr class="memdesc:ga5a02770aaf65c7a3c7562c109884176a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for expired thread watchdogs.  <br /></td></tr>
394 <tr class="separator:ga5a02770aaf65c7a3c7562c109884176a"><td class="memSeparator" colspan="2">&#160;</td></tr>
395 <tr class="memitem:ga79d4b26de0bfcdaf142f83e585532f93"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga79d4b26de0bfcdaf142f83e585532f93">osZoneSetup_Callback</a> (uint32_t zone)</td></tr>
396 <tr class="memdesc:ga79d4b26de0bfcdaf142f83e585532f93"><td class="mdescLeft">&#160;</td><td class="mdescRight">Setup MPU protected zone (called when zone changes).  <br /></td></tr>
397 <tr class="separator:ga79d4b26de0bfcdaf142f83e585532f93"><td class="memSeparator" colspan="2">&#160;</td></tr>
398 </table>
399 <a name="details" id="details"></a><h2 class="groupheader">Description</h2>
400 <p>Define, create, and control thread functions. </p>
401 <p>The Thread Management function group allows defining, creating, and controlling thread functions in the system.</p>
402 <dl class="section note"><dt>Note</dt><dd>Thread management functions cannot be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>.</dd></dl>
403 <p><a class="anchor" id="ThreadStates"></a></p>
404 <h2><a class="anchor" id="autotoc_md0"></a>
405 Thread states</h2>
406 <p>Threads can be in the following states:</p>
407 <ul>
408 <li><b>RUNNING:</b> The thread that is currently running is in the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">RUNNING</a> state. Only one thread at a time can be in this state.</li>
409 <li><b>READY:</b> Threads which are ready to run are in the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">READY</a> state. Once the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">RUNNING</a> thread has terminated, or is <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">BLOCKED</a>, the next <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">READY</a> thread with the highest priority becomes the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">RUNNING</a> thread.</li>
410 <li><b>BLOCKED:</b> Threads that are blocked either delayed, waiting for an event to occur or suspended are in the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">BLOCKED</a> state.</li>
411 <li><b>TERMINATED:</b> When <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga2f8ba6dba6e9c065a6e236ffd410d74a">osThreadTerminate</a> is called, threads are <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">TERMINATED</a> with resources not yet released (applies to <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#joinable_threads">joinable threads).</a></li>
412 <li><b>INACTIVE:</b> Threads that are not created or have been terminated with all resources released are in the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">INACTIVE</a> state.</li>
413 </ul>
414 <div class="image">
415 <img src="ThreadStatus.png" alt=""/>
416 <div class="caption">
417 Thread State and State Transitions</div></div>
418 <p>A CMSIS-RTOS assumes that threads are scheduled as shown in the figure <b>Thread State and State Transitions</b>. The thread states change as follows:</p><ul>
419 <li>A thread is created using the function <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a>. This puts the thread into the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">READY</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">RUNNING</a> state (depending on the thread priority).</li>
420 <li>CMSIS-RTOS is preemptive. The active thread with the highest priority becomes the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">RUNNING</a> thread provided it does not wait for any event. The initial priority of a thread is defined with the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#structosThreadAttr__t">osThreadAttr_t</a> but may be changed during execution using the function <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga861a420fb2d643115b06622903fb3bfb">osThreadSetPriority</a>.</li>
421 <li>The <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">RUNNING</a> thread transfers into the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">BLOCKED</a> state when it is delayed, waiting for an event or suspended.</li>
422 <li>Active threads can be terminated any time using the function <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga2f8ba6dba6e9c065a6e236ffd410d74a">osThreadTerminate</a>. Threads can terminate also by just returning from the thread function. Threads that are terminated are in the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">INACTIVE</a> state and typically do not consume any dynamic memory resources.</li>
423 </ul>
424 <p><a class="anchor" id="threadConfig_procmode"></a></p>
425 <h2><a class="anchor" id="autotoc_md1"></a>
426 Processor Mode for Thread Execution</h2>
427 <p>When creating user threads with <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> it is possible to specify for each thread whether it shall be executed in privileged or unprivileged mode. For that the thread attributes argument shall have in its <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#a6e93b49cb79c12f768d72580c7731f30" title="attribute bits">osThreadAttr_t::attr_bits</a> flags either <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga7c2b7db42d23e4f56132e0ed739d02e5">osThreadPrivileged</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga4c028e5c3f4d86d237a1e09ceaf84792">osThreadUnprivileged</a> set respectively. If not set then the default operation mode will be used according to kernel configuration.</p>
428 <p>For detailed differences between privileged and unprivileged mode, please refer to the User's Guide of the target processor. But typically following differences are specified:</p>
429 <p>In <b>unprivileged processor mode</b>, the thread :</p><ul>
430 <li>has limited access to the MSR and MRS instructions, and cannot use the CPS instruction.</li>
431 <li>cannot access the system timer, NVIC, or system control block.</li>
432 <li>might have restricted access to memory or peripherals.</li>
433 </ul>
434 <p>In <b>privileged processor mode</b>, the application software can use all the instructions and has access to all resources.</p>
435 <p><a class="anchor" id="thread_examples"></a></p>
436 <h1><a class="anchor" id="autotoc_md2"></a>
437 Thread Examples</h1>
438 <p>The following examples show various scenarios to create threads:</p>
439 <p><b>Example 1 - Create a simple thread</b></p>
440 <p>Create a thread out of the function thread1 using all default values for thread attributes and memory allocated by the system.</p>
441 <div class="fragment"><div class="line">__NO_RETURN <span class="keywordtype">void</span> thread1 (<span class="keywordtype">void</span> *argument) {</div>
442 <div class="line">  <span class="comment">// ...</span></div>
443 <div class="line">  <span class="keywordflow">for</span> (;;) {}</div>
444 <div class="line">}</div>
445 <div class="line"> </div>
446 <div class="line"><span class="keywordtype">int</span> main (<span class="keywordtype">void</span>) {</div>
447 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#gae818f6611d25ba3140bede410a52d659" title="Initialize the RTOS Kernel.">osKernelInitialize</a>();</div>
448 <div class="line">  ;</div>
449 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f" title="Create a thread and add it to Active Threads.">osThreadNew</a>(thread1, NULL, NULL);     <span class="comment">// Create thread with default settings</span></div>
450 <div class="line">  ;</div>
451 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#ga9ae2cc00f0d89d7b6a307bba942b5221" title="Start the RTOS Kernel scheduler.">osKernelStart</a>(); </div>
452 <div class="line">}</div>
453 </div><!-- fragment --><p><b>Example 2 - Create thread with stack non-default stack size</b></p>
454 <p>Similar to the simple thread all attributes are default. The stack size is requested of size 1024 Bytes with with corresponding value passed as <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#aacbc9a219f2d6870e9ce89bb93f975c9">osThreadAttr_t::stack_size</a> to <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a>. The memory for the stack is then allocated by the system.</p>
455 <div class="fragment"><div class="line">__NO_RETURN <span class="keywordtype">void</span> thread1 (<span class="keywordtype">void</span> *argument) {</div>
456 <div class="line">  <span class="comment">// ...</span></div>
457 <div class="line">  <span class="keywordflow">for</span> (;;) {}</div>
458 <div class="line">}</div>
459 <div class="line"> </div>
460 <div class="line"><span class="keyword">const</span> <a class="code hl_struct" href="group__CMSIS__RTOS__ThreadMgmt.html#structosThreadAttr__t" title="Attributes structure for thread.">osThreadAttr_t</a> thread1_attr = {</div>
461 <div class="line">  .<a class="code hl_variable" href="group__CMSIS__RTOS__ThreadMgmt.html#aacbc9a219f2d6870e9ce89bb93f975c9" title="size of stack">stack_size</a> = 1024                            <span class="comment">// Create the thread stack with a size of 1024 bytes</span></div>
462 <div class="line">};</div>
463 <div class="line"> </div>
464 <div class="line"><span class="keywordtype">int</span> main (<span class="keywordtype">void</span>) {</div>
465 <div class="line">  ;  </div>
466 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f" title="Create a thread and add it to Active Threads.">osThreadNew</a>(thread1, NULL, &amp;thread1_attr);    <span class="comment">// Create thread with custom sized stack memory</span></div>
467 <div class="line">  ;</div>
468 <div class="line">}</div>
469 </div><!-- fragment --><p><b>Example 3 - Create thread with statically allocated stack</b></p>
470 <p>Similar to the simple thread all attributes are default. The stack is statically allocated using the <code>uint64_t</code> array <code>thread1_stk_1</code>. This allocates 64*8 Bytes (=512 Bytes) with an alignment of 8 Bytes (mandatory for Cortex-M stack memory).</p>
471 <p><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ad7c9b42355a4c8b9467130ab3fb19e43">osThreadAttr_t::stack_mem</a> holds a pointer to the stacks lowest address.</p>
472 <p><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#aacbc9a219f2d6870e9ce89bb93f975c9">osThreadAttr_t::stack_size</a> is used to pass the stack size in Bytes to <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a>.</p>
473 <div class="fragment"><div class="line">__NO_RETURN <span class="keywordtype">void</span> thread1 (<span class="keywordtype">void</span> *argument) {</div>
474 <div class="line">  <span class="comment">// ...</span></div>
475 <div class="line">  <span class="keywordflow">for</span> (;;) {}</div>
476 <div class="line">}</div>
477 <div class="line"> </div>
478 <div class="line"><span class="keyword">static</span> uint64_t thread1_stk_1[64];</div>
479 <div class="line"> </div>
480 <div class="line"><span class="keyword">const</span> <a class="code hl_struct" href="group__CMSIS__RTOS__ThreadMgmt.html#structosThreadAttr__t" title="Attributes structure for thread.">osThreadAttr_t</a> thread1_attr = {</div>
481 <div class="line">  .<a class="code hl_variable" href="group__CMSIS__RTOS__ThreadMgmt.html#ad7c9b42355a4c8b9467130ab3fb19e43" title="memory for stack">stack_mem</a>  = &amp;thread1_stk_1[0],</div>
482 <div class="line">  .stack_size = <span class="keyword">sizeof</span>(thread1_stk_1)</div>
483 <div class="line">};</div>
484 <div class="line"> </div>
485 <div class="line"><span class="keywordtype">int</span> main (<span class="keywordtype">void</span>) {</div>
486 <div class="line">  ;  </div>
487 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f" title="Create a thread and add it to Active Threads.">osThreadNew</a>(thread1, NULL, &amp;thread1_attr);    <span class="comment">// Create thread with statically allocated stack memory</span></div>
488 <div class="line">  ;</div>
489 <div class="line">}</div>
490 </div><!-- fragment --><p><b>Example 4 - Thread with statically allocated task control block</b></p>
491 <p>Typically this method is chosen together with a statically allocated stack as shown in Example 2. </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;cmsis_os2.h&quot;</span></div>
492 <div class="line"> </div>
493 <div class="line"><span class="comment">//include rtx_os.h for control blocks of CMSIS-RTX objects</span></div>
494 <div class="line"><span class="preprocessor">#include &quot;rtx_os.h&quot;</span></div>
495 <div class="line"> </div>
496 <div class="line">__NO_RETURN <span class="keywordtype">void</span> thread1 (<span class="keywordtype">void</span> *argument) {</div>
497 <div class="line">  <span class="comment">// ...</span></div>
498 <div class="line">  <span class="keywordflow">for</span> (;;) {}</div>
499 <div class="line">}</div>
500 <div class="line"> </div>
501 <div class="line"><span class="keyword">static</span> osRtxThread_t thread1_tcb;</div>
502 <div class="line"> </div>
503 <div class="line"><span class="keyword">const</span> <a class="code hl_struct" href="group__CMSIS__RTOS__ThreadMgmt.html#structosThreadAttr__t" title="Attributes structure for thread.">osThreadAttr_t</a> thread1_attr = {</div>
504 <div class="line">  .<a class="code hl_variable" href="group__CMSIS__RTOS__ThreadMgmt.html#a1e100dc33d403841ed3c344e3397868e" title="memory for control block">cb_mem</a>  = &amp;thread1_tcb,</div>
505 <div class="line">  .cb_size = <span class="keyword">sizeof</span>(thread1_tcb),</div>
506 <div class="line">};</div>
507 <div class="line"> </div>
508 <div class="line"><span class="keywordtype">int</span> main (<span class="keywordtype">void</span>) {</div>
509 <div class="line">  ;</div>
510 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f" title="Create a thread and add it to Active Threads.">osThreadNew</a>(thread1, NULL, &amp;thread1_attr);    <span class="comment">// Create thread with custom tcb memory</span></div>
511 <div class="line">  ;</div>
512 <div class="line">}</div>
513 </div><!-- fragment --><p><b>Example 5 - Create thread with a different priority</b></p>
514 <p>The default priority of RTX kernel is <span class="XML-Token">osPriorityNormal</span>. Often you want to run a task with a higher or lower priority. Using the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#a6a5183df4c54c3e28dc8dc704f2487d5">osThreadAttr_t::priority</a> field you can assign any initial priority required.</p>
515 <div class="fragment"><div class="line">__NO_RETURN <span class="keywordtype">void</span> thread1 (<span class="keywordtype">void</span> *argument) {</div>
516 <div class="line">  <span class="comment">// ...</span></div>
517 <div class="line">  <span class="keywordflow">for</span> (;;) {}</div>
518 <div class="line">}</div>
519 <div class="line"> </div>
520 <div class="line"><span class="keyword">const</span> <a class="code hl_struct" href="group__CMSIS__RTOS__ThreadMgmt.html#structosThreadAttr__t" title="Attributes structure for thread.">osThreadAttr_t</a> thread1_attr = {</div>
521 <div class="line">  .<a class="code hl_variable" href="group__CMSIS__RTOS__ThreadMgmt.html#a6a5183df4c54c3e28dc8dc704f2487d5" title="initial thread priority (default: osPriorityNormal)">priority</a> = osPriorityHigh                    <span class="comment">//Set initial thread priority to high   </span></div>
522 <div class="line">};</div>
523 <div class="line"> </div>
524 <div class="line"><span class="keywordtype">int</span> main (<span class="keywordtype">void</span>) {</div>
525 <div class="line">  ;</div>
526 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f" title="Create a thread and add it to Active Threads.">osThreadNew</a>(thread1, NULL, &amp;thread1_attr);</div>
527 <div class="line">  ;</div>
528 <div class="line">}</div>
529 </div><!-- fragment --><p><a class="anchor" id="joinable_threads"></a><b>Example 6 - Joinable threads</b></p>
530 <p>In this example a master thread creates four threads with the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga249499c519f3f8eef5673009ab6cfcbe">osThreadJoinable</a> attribute. These will do some work and return using the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaddaa452dd7610e4096647a566d3556fc">osThreadExit</a> call after finished. <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga3fca90fb0679afeb968aa8c3d5874487">osThreadJoin</a> is used to synchronize the thread termination.</p>
531 <div class="fragment"><div class="line">__NO_RETURN <span class="keywordtype">void</span> worker (<span class="keywordtype">void</span> *argument) {</div>
532 <div class="line">  ; <span class="comment">// work a lot on data[] </span></div>
533 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__Wait.html#gaf6055a51390ef65b6b6edc28bf47322e" title="Wait for Timeout (Time Delay).">osDelay</a>(1000U);</div>
534 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#gaddaa452dd7610e4096647a566d3556fc" title="Terminate execution of current running thread.">osThreadExit</a>();</div>
535 <div class="line">}</div>
536 <div class="line"> </div>
537 <div class="line">__NO_RETURN <span class="keywordtype">void</span> thread1 (<span class="keywordtype">void</span> *argument) {</div>
538 <div class="line">  <a class="code hl_struct" href="group__CMSIS__RTOS__ThreadMgmt.html#structosThreadAttr__t" title="Attributes structure for thread.">osThreadAttr_t</a> worker_attr;</div>
539 <div class="line">  <a class="code hl_typedef" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> worker_ids[4];</div>
540 <div class="line">  uint8_t data[4][10];</div>
541 <div class="line"> </div>
542 <div class="line">  memset(&amp;worker_attr, 0, <span class="keyword">sizeof</span>(worker_attr));</div>
543 <div class="line">  worker_attr.<a class="code hl_variable" href="group__CMSIS__RTOS__ThreadMgmt.html#a6e93b49cb79c12f768d72580c7731f30" title="attribute bits">attr_bits</a> = <a class="code hl_define" href="group__CMSIS__RTOS__ThreadMgmt.html#ga249499c519f3f8eef5673009ab6cfcbe" title="Thread created in joinable mode.">osThreadJoinable</a>;</div>
544 <div class="line"> </div>
545 <div class="line">  worker_ids[0] = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f" title="Create a thread and add it to Active Threads.">osThreadNew</a>(worker, &amp;data[0][0], &amp;worker_attr);</div>
546 <div class="line">  worker_ids[1] = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f" title="Create a thread and add it to Active Threads.">osThreadNew</a>(worker, &amp;data[1][0], &amp;worker_attr);</div>
547 <div class="line">  worker_ids[2] = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f" title="Create a thread and add it to Active Threads.">osThreadNew</a>(worker, &amp;data[2][0], &amp;worker_attr);</div>
548 <div class="line">  worker_ids[3] = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f" title="Create a thread and add it to Active Threads.">osThreadNew</a>(worker, &amp;data[3][0], &amp;worker_attr);</div>
549 <div class="line"> </div>
550 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga3fca90fb0679afeb968aa8c3d5874487" title="Wait for specified thread to terminate.">osThreadJoin</a>(worker_ids[0]);</div>
551 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga3fca90fb0679afeb968aa8c3d5874487" title="Wait for specified thread to terminate.">osThreadJoin</a>(worker_ids[1]);</div>
552 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga3fca90fb0679afeb968aa8c3d5874487" title="Wait for specified thread to terminate.">osThreadJoin</a>(worker_ids[2]);</div>
553 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga3fca90fb0679afeb968aa8c3d5874487" title="Wait for specified thread to terminate.">osThreadJoin</a>(worker_ids[3]);</div>
554 <div class="line"> </div>
555 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#gaddaa452dd7610e4096647a566d3556fc" title="Terminate execution of current running thread.">osThreadExit</a>(); </div>
556 <div class="line">}</div>
557 </div><!-- fragment --> <hr/><h2 class="groupheader">Data Structure Documentation</h2>
558 <a name="structosThreadAttr__t" id="structosThreadAttr__t"></a>
559 <h2 class="memtitle"><span class="permalink"><a href="#structosThreadAttr__t">&#9670;&#160;</a></span>osThreadAttr_t</h2>
560
561 <div class="memitem">
562 <div class="memproto">
563       <table class="memname">
564         <tr>
565           <td class="memname">struct osThreadAttr_t</td>
566         </tr>
567       </table>
568 </div><div class="memdoc">
569 <div class="textblock"><p>Attributes structure for thread. </p>
570 <p>Specifies the following attributes for the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> function. </p>
571 </div><table class="fieldtable">
572 <tr><th colspan="3">Data Fields</th></tr>
573 <tr><td class="fieldtype">
574 <a id="ab74e6bf80237ddc4109968cedc58c151" name="ab74e6bf80237ddc4109968cedc58c151"></a>const char *</td>
575 <td class="fieldname">
576 name</td>
577 <td class="fielddoc">
578 name of the thread <p>Pointer to a constant string with a human readable name (displayed during debugging) of the thread object.</p>
579 <p>Default: <span class="XML-Token">NULL</span> no name specified (debugger may display function name instead). </p>
580 </td></tr>
581 <tr><td class="fieldtype">
582 <a id="a6e93b49cb79c12f768d72580c7731f30" name="a6e93b49cb79c12f768d72580c7731f30"></a>uint32_t</td>
583 <td class="fieldname">
584 attr_bits</td>
585 <td class="fielddoc">
586 attribute bits <p>The following bit masks can be used to set options:</p><ul>
587 <li><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa9336c1073858d6b118e2e011636246f">osThreadDetached</a> : create thread in a detached mode (default).</li>
588 <li><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga249499c519f3f8eef5673009ab6cfcbe">osThreadJoinable</a> : create thread in <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#joinable_threads">joinable mode</a>. <br  />
589 </li>
590 <li><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga4c028e5c3f4d86d237a1e09ceaf84792">osThreadUnprivileged</a> : create thread to execute in unprivileged mode.</li>
591 <li><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga7c2b7db42d23e4f56132e0ed739d02e5">osThreadPrivileged</a> : create thread to execute in privileged mode. <br  />
592 </li>
593 <li><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaefca370070d0b1616421bc3311acfecc">osThreadZone</a> (m) : create thread assigned to MPU zone <span class="XML-Token">m</span>.</li>
594 <li><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga604fce4f5205f92c347eb62fcc216861">osSafetyClass</a> (n) : create thread with safety class <span class="XML-Token">n</span> assigned to it.</li>
595 </ul>
596 <p>Default: <span class="XML-Token">0</span> no options set. Safety class and MPU Zone are inherited from running thread. Thread privilege mode is set based on configuration <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#threadConfig_procmode">threadConfig_procmode</a>. </p>
597 </td></tr>
598 <tr><td class="fieldtype">
599 <a id="a1e100dc33d403841ed3c344e3397868e" name="a1e100dc33d403841ed3c344e3397868e"></a>void *</td>
600 <td class="fieldname">
601 cb_mem</td>
602 <td class="fielddoc">
603 memory for control block <p>Pointer to a memory for the thread control block object. Refer to <a class="el" href="usingOS2.html#CMSIS_RTOS_MemoryMgmt_Manual">Manual User-defined Allocation</a> for more information.</p>
604 <p>Default: <span class="XML-Token">NULL</span> to use <a class="el" href="usingOS2.html#CMSIS_RTOS_MemoryMgmt_Automatic">Automatic Dynamic Allocation</a> for the thread control block. </p>
605 </td></tr>
606 <tr><td class="fieldtype">
607 <a id="aa55a4335d12dc2785dc00fdc292d1159" name="aa55a4335d12dc2785dc00fdc292d1159"></a>uint32_t</td>
608 <td class="fieldname">
609 cb_size</td>
610 <td class="fielddoc">
611 size of provided memory for control block <p>The size (in bytes) of memory block passed with <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#a1e100dc33d403841ed3c344e3397868e">cb_mem</a>. Required value depends on the underlying kernel implementation.</p>
612 <p>Default: <span class="XML-Token">0</span> as the default is no memory provided with <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#a1e100dc33d403841ed3c344e3397868e">cb_mem</a>. </p>
613 </td></tr>
614 <tr><td class="fieldtype">
615 <a id="ad7c9b42355a4c8b9467130ab3fb19e43" name="ad7c9b42355a4c8b9467130ab3fb19e43"></a>void *</td>
616 <td class="fieldname">
617 stack_mem</td>
618 <td class="fielddoc">
619 memory for stack <p>Pointer to a memory location for the thread stack (64-bit aligned).</p>
620 <p>Default: <span class="XML-Token">NULL</span> - the memory for the stack is provided by the system based on the configuration of underlying RTOS kernel . </p>
621 </td></tr>
622 <tr><td class="fieldtype">
623 <a id="aacbc9a219f2d6870e9ce89bb93f975c9" name="aacbc9a219f2d6870e9ce89bb93f975c9"></a>uint32_t</td>
624 <td class="fieldname">
625 stack_size</td>
626 <td class="fielddoc">
627 size of stack <p>The size (in bytes) of the stack specified by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ad7c9b42355a4c8b9467130ab3fb19e43">stack_mem</a>.</p>
628 <p>Default: <span class="XML-Token">0</span> as the default is no memory provided with <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ad7c9b42355a4c8b9467130ab3fb19e43">stack_mem</a>. </p>
629 </td></tr>
630 <tr><td class="fieldtype">
631 <a id="a6a5183df4c54c3e28dc8dc704f2487d5" name="a6a5183df4c54c3e28dc8dc704f2487d5"></a><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ec">osPriority_t</a></td>
632 <td class="fieldname">
633 priority</td>
634 <td class="fielddoc">
635 initial thread priority (default: osPriorityNormal) <p>Specifies the initial thread priority with a value from <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ec" title="Priority values.">osPriority_t</a>.</p>
636 <p>Default: <span class="XML-Token">osPriorityNormal</span>. </p>
637 </td></tr>
638 <tr><td class="fieldtype">
639 <a id="a697f2aad6119d655d212ea10245ae394" name="a697f2aad6119d655d212ea10245ae394"></a>TZ_ModuleId_t</td>
640 <td class="fieldname">
641 tz_module</td>
642 <td class="fielddoc">
643 TrustZone module identifier. <p>TrustZone Thread Context Management Identifier to allocate context memory for threads. The RTOS kernel that runs in non-secure state calls the interface functions defined by the header file TZ_context.h. Can safely be set to zero for threads not using secure calls at all. See <a href="../../Core/html/group__context__trustzone__functions.html">TrustZone RTOS Context Management</a>.</p>
644 <p>Default: <span class="XML-Token">0</span> not thread context specified.  </p>
645 </td></tr>
646 <tr><td class="fieldtype">
647 <a id="aaf358099120136bf63c5e53cf5d40043" name="aaf358099120136bf63c5e53cf5d40043"></a>uint32_t</td>
648 <td class="fieldname">
649 affinity_mask</td>
650 <td class="fielddoc">
651 processor affinity mask (0 when not used) <p>The affinity mask specified by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga4ef461379ceba9ab7764850ef2c7b0ac">osThreadProcessor</a> macro (multiple processors can be specified by OR-ing macros).</p>
652 <p>Default: <span class="XML-Token">0</span> to run on any processor. </p>
653 </td></tr>
654 </table>
655
656 </div>
657 </div>
658 <h2 class="groupheader">Macro Definition Documentation</h2>
659 <a id="ga6f3bd4b67fb89bd085266fe65ee45b06" name="ga6f3bd4b67fb89bd085266fe65ee45b06"></a>
660 <h2 class="memtitle"><span class="permalink"><a href="#ga6f3bd4b67fb89bd085266fe65ee45b06">&#9670;&#160;</a></span>osErrorId</h2>
661
662 <div class="memitem">
663 <div class="memproto">
664       <table class="memname">
665         <tr>
666           <td class="memname">#define osErrorId&#160;&#160;&#160;0xFFFFFFFFU</td>
667         </tr>
668       </table>
669 </div><div class="memdoc">
670
671 <p>osError (-1). </p>
672 <p>Error return code from <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga1bfbef7da94ed4147d231e8d6eeb5f3e">osThreadGetClass</a> and <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga4101737fa4fd303d4b41fdca6b994f8e">osThreadGetZone</a>. </p>
673
674 </div>
675 </div>
676 <a id="ga249499c519f3f8eef5673009ab6cfcbe" name="ga249499c519f3f8eef5673009ab6cfcbe"></a>
677 <h2 class="memtitle"><span class="permalink"><a href="#ga249499c519f3f8eef5673009ab6cfcbe">&#9670;&#160;</a></span>osThreadJoinable</h2>
678
679 <div class="memitem">
680 <div class="memproto">
681       <table class="memname">
682         <tr>
683           <td class="memname">#define osThreadJoinable&#160;&#160;&#160;0x00000001U</td>
684         </tr>
685       </table>
686 </div><div class="memdoc">
687
688 <p>Thread created in joinable mode. </p>
689 <p>Bitmask for a thread that can be joined. Intended for use in <em>attr_bits</em> of <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#structosThreadAttr__t">osThreadAttr_t</a> type argument for <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> function.</p>
690 <p>A thread in this state can be joined using <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga3fca90fb0679afeb968aa8c3d5874487">osThreadJoin</a>. </p>
691
692 </div>
693 </div>
694 <a id="gaa9336c1073858d6b118e2e011636246f" name="gaa9336c1073858d6b118e2e011636246f"></a>
695 <h2 class="memtitle"><span class="permalink"><a href="#gaa9336c1073858d6b118e2e011636246f">&#9670;&#160;</a></span>osThreadDetached</h2>
696
697 <div class="memitem">
698 <div class="memproto">
699       <table class="memname">
700         <tr>
701           <td class="memname">#define osThreadDetached&#160;&#160;&#160;0x00000000U</td>
702         </tr>
703       </table>
704 </div><div class="memdoc">
705
706 <p>Thread created in detached mode (default) </p>
707 <p>Bitmask for a thread that cannot be joined. Intended for use in <em>attr_bits</em> of <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#structosThreadAttr__t">osThreadAttr_t</a> type argument for <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> function.</p>
708 <p>A thread in this state cannot be joined using <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga3fca90fb0679afeb968aa8c3d5874487">osThreadJoin</a>. </p>
709
710 </div>
711 </div>
712 <a id="ga4c028e5c3f4d86d237a1e09ceaf84792" name="ga4c028e5c3f4d86d237a1e09ceaf84792"></a>
713 <h2 class="memtitle"><span class="permalink"><a href="#ga4c028e5c3f4d86d237a1e09ceaf84792">&#9670;&#160;</a></span>osThreadUnprivileged</h2>
714
715 <div class="memitem">
716 <div class="memproto">
717       <table class="memname">
718         <tr>
719           <td class="memname">#define osThreadUnprivileged&#160;&#160;&#160;0x00000002U</td>
720         </tr>
721       </table>
722 </div><div class="memdoc">
723
724 <p>Thread runs in unprivileged mode. </p>
725 <p>Bitmask for a thread that runs in unprivileged mode. Intended for use in <em>attr_bits</em> of <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#structosThreadAttr__t">osThreadAttr_t</a> type argument for <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> function.</p>
726 <p>In <b>unprivileged</b> processor mode, a thread:</p><ul>
727 <li>has limited access to the MSR and MRS instructions, and cannot use the CPS instruction.</li>
728 <li>cannot access the system timer, NVIC, or system control block.</li>
729 <li>might have restricted access to memory or peripherals.</li>
730 </ul>
731 <dl class="section note"><dt>Note</dt><dd>Ignored on processors that only run in privileged mode.</dd></dl>
732 <p>Refer to the target processor User's Guide for details. </p>
733
734 </div>
735 </div>
736 <a id="ga7c2b7db42d23e4f56132e0ed739d02e5" name="ga7c2b7db42d23e4f56132e0ed739d02e5"></a>
737 <h2 class="memtitle"><span class="permalink"><a href="#ga7c2b7db42d23e4f56132e0ed739d02e5">&#9670;&#160;</a></span>osThreadPrivileged</h2>
738
739 <div class="memitem">
740 <div class="memproto">
741       <table class="memname">
742         <tr>
743           <td class="memname">#define osThreadPrivileged&#160;&#160;&#160;0x00000004U</td>
744         </tr>
745       </table>
746 </div><div class="memdoc">
747
748 <p>Thread runs in privileged mode. </p>
749 <p>Bitmask for a thread that runs in privileged mode. Intended for use in <em>attr_bits</em> of <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#structosThreadAttr__t">osThreadAttr_t</a> type argument for <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> function.</p>
750 <p>In <b>privileged</b> processor mode, the application software can use all the instructions and has access to all resources. </p>
751
752 </div>
753 </div>
754 <a id="gaefca370070d0b1616421bc3311acfecc" name="gaefca370070d0b1616421bc3311acfecc"></a>
755 <h2 class="memtitle"><span class="permalink"><a href="#gaefca370070d0b1616421bc3311acfecc">&#9670;&#160;</a></span>osThreadZone</h2>
756
757 <div class="memitem">
758 <div class="memproto">
759       <table class="memname">
760         <tr>
761           <td class="memname">#define osThreadZone</td>
762           <td>(</td>
763           <td class="paramtype">&#160;</td>
764           <td class="paramname">n</td><td>)</td>
765           <td></td>
766         </tr>
767       </table>
768 </div><div class="memdoc">
769
770 <p>MPU zone value in attribute bit field format. </p>
771 <p>MPU protected zone.</p>
772 <dl class="params"><dt>Parameters</dt><dd>
773   <table class="params">
774     <tr><td class="paramname">n</td><td>MPU Protected Zone value.</td></tr>
775   </table>
776   </dd>
777 </dl>
778 <p>The preprocessor macro <b>osThreadZone</b> constructs attribute bitmask with MPU zone bits set to <em>n</em>.</p>
779 <p><b>Code Example:</b> </p><div class="fragment"><div class="line"><span class="comment">/* ThreadB thread attributes */</span></div>
780 <div class="line"><span class="keyword">const</span> <a class="code hl_struct" href="group__CMSIS__RTOS__ThreadMgmt.html#structosThreadAttr__t" title="Attributes structure for thread.">osThreadAttr_t</a> thread_B_attr = {</div>
781 <div class="line">  .<a class="code hl_variable" href="group__CMSIS__RTOS__ThreadMgmt.html#ab74e6bf80237ddc4109968cedc58c151" title="name of the thread">name</a>      = <span class="stringliteral">&quot;ThreadB&quot;</span>,       <span class="comment">// human readable thread name</span></div>
782 <div class="line">  .attr_bits = <a class="code hl_define" href="group__CMSIS__RTOS__ThreadMgmt.html#gaefca370070d0b1616421bc3311acfecc" title="MPU zone value in attribute bit field format.">osThreadZone</a>(3U) <span class="comment">// assign thread to MPU zone 3</span></div>
783 <div class="line">};</div>
784 </div><!-- fragment --> 
785 </div>
786 </div>
787 <a id="ga4ef461379ceba9ab7764850ef2c7b0ac" name="ga4ef461379ceba9ab7764850ef2c7b0ac"></a>
788 <h2 class="memtitle"><span class="permalink"><a href="#ga4ef461379ceba9ab7764850ef2c7b0ac">&#9670;&#160;</a></span>osThreadProcessor</h2>
789
790 <div class="memitem">
791 <div class="memproto">
792       <table class="memname">
793         <tr>
794           <td class="memname">#define osThreadProcessor</td>
795           <td>(</td>
796           <td class="paramtype">&#160;</td>
797           <td class="paramname">n</td><td>)</td>
798           <td>&#160;&#160;&#160;(1UL &lt;&lt; (n))</td>
799         </tr>
800       </table>
801 </div><div class="memdoc">
802
803 <p>Thread processor affinity mask value in attribute affinity_mask format. </p>
804 <p>Thread processor number for SMP systems.</p>
805 <dl class="params"><dt>Parameters</dt><dd>
806   <table class="params">
807     <tr><td class="paramname">n</td><td>Processor number.</td></tr>
808   </table>
809   </dd>
810 </dl>
811 <p>The preprocessor macro <b>osThreadProcessor</b> constructs attribute affinity_mask derived from <em>n</em>. </p>
812
813 </div>
814 </div>
815 <h2 class="groupheader">Typedef Documentation</h2>
816 <a id="gadd51f99a6eb50b94eee75f27cae815eb" name="gadd51f99a6eb50b94eee75f27cae815eb"></a>
817 <h2 class="memtitle"><span class="permalink"><a href="#gadd51f99a6eb50b94eee75f27cae815eb">&#9670;&#160;</a></span>osThreadFunc_t</h2>
818
819 <div class="memitem">
820 <div class="memproto">
821       <table class="memname">
822         <tr>
823           <td class="memname">void(* osThreadFunc_t)(void *argument)</td>
824         </tr>
825       </table>
826 </div><div class="memdoc">
827
828 <p>Entry point of a thread. </p>
829 <p>Entry function for threads. Setting up a new thread (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a>) will start execution with a call into this entry function. The optional argument can be used to hand over arbitrary user data to the thread, i.e. to identify the thread or for runtime parameters.</p>
830 <dl class="params"><dt>Parameters</dt><dd>
831   <table class="params">
832     <tr><td class="paramdir">[in]</td><td class="paramname">argument</td><td>Arbitrary user data set on <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a>. </td></tr>
833   </table>
834   </dd>
835 </dl>
836
837 </div>
838 </div>
839 <a id="gaa6c32fe2a3e0a2e01f212d55b02e51c7" name="gaa6c32fe2a3e0a2e01f212d55b02e51c7"></a>
840 <h2 class="memtitle"><span class="permalink"><a href="#gaa6c32fe2a3e0a2e01f212d55b02e51c7">&#9670;&#160;</a></span>osThreadId_t</h2>
841
842 <div class="memitem">
843 <div class="memproto">
844       <table class="memname">
845         <tr>
846           <td class="memname"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a></td>
847         </tr>
848       </table>
849 </div><div class="memdoc">
850 <p>Thread ID identifies the thread.</p>
851 <p>Returned by:</p><ul>
852 <li><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a></li>
853 <li><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a></li>
854 <li><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga5606604d56e21ece1a654664be877439">osThreadEnumerate</a></li>
855 <li><a class="el" href="group__CMSIS__RTOS__MutexMgmt.html#ga7f9a7666df0978738cd570cb700b83fb">osMutexGetOwner</a> </li>
856 </ul>
857
858 </div>
859 </div>
860 <h2 class="groupheader">Enumeration Type Documentation</h2>
861 <a id="gad3dc89e942e38d9f3af858a0269a820d" name="gad3dc89e942e38d9f3af858a0269a820d"></a>
862 <h2 class="memtitle"><span class="permalink"><a href="#gad3dc89e942e38d9f3af858a0269a820d">&#9670;&#160;</a></span>osThreadState_t</h2>
863
864 <div class="memitem">
865 <div class="memproto">
866       <table class="memname">
867         <tr>
868           <td class="memname">enum <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad3dc89e942e38d9f3af858a0269a820d">osThreadState_t</a></td>
869         </tr>
870       </table>
871 </div><div class="memdoc">
872
873 <p>Thread state. </p>
874 <p>State of a thread as retrieved by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gacc0a98b42f0a5928e12dc91dc76866b9">osThreadGetState</a>. In case <b>osThreadGetState</b> fails or if it is called from an ISR, it will return <code>osThreadError</code>, otherwise it returns the thread state. </p>
875 <table class="fieldtable">
876 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggad3dc89e942e38d9f3af858a0269a820dae9d77830b6866e287417b6e1d983e971" name="ggad3dc89e942e38d9f3af858a0269a820dae9d77830b6866e287417b6e1d983e971"></a>osThreadInactive&#160;</td><td class="fielddoc"><p>Inactive. </p>
877 <p>The thread is created but not actively used, or has been terminated (returned for static control block allocation, when memory pools are used <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ggad3dc89e942e38d9f3af858a0269a820da339313e26613bc12f66a852e2ff8745e">osThreadError</a> is returned as the control block is no longer valid) </p>
878 </td></tr>
879 <tr><td class="fieldname"><a id="ggad3dc89e942e38d9f3af858a0269a820da59e286915944fe0e4d1ffdb1f2946f14" name="ggad3dc89e942e38d9f3af858a0269a820da59e286915944fe0e4d1ffdb1f2946f14"></a>osThreadReady&#160;</td><td class="fielddoc"><p>Ready. </p>
880 <p>The thread is ready for execution but not currently running. </p>
881 </td></tr>
882 <tr><td class="fieldname"><a id="ggad3dc89e942e38d9f3af858a0269a820dac4fe336e0790188fcf7d667372eca19d" name="ggad3dc89e942e38d9f3af858a0269a820dac4fe336e0790188fcf7d667372eca19d"></a>osThreadRunning&#160;</td><td class="fielddoc"><p>Running. </p>
883 <p>The thread is currently running. </p>
884 </td></tr>
885 <tr><td class="fieldname"><a id="ggad3dc89e942e38d9f3af858a0269a820daf0e992e354fba8695957c530226a4968" name="ggad3dc89e942e38d9f3af858a0269a820daf0e992e354fba8695957c530226a4968"></a>osThreadBlocked&#160;</td><td class="fielddoc"><p>Blocked. </p>
886 <p>The thread is currently blocked (delayed, waiting for an event or suspended). </p>
887 </td></tr>
888 <tr><td class="fieldname"><a id="ggad3dc89e942e38d9f3af858a0269a820dad5b2726c2d0228f4f1a76cf6b630963c" name="ggad3dc89e942e38d9f3af858a0269a820dad5b2726c2d0228f4f1a76cf6b630963c"></a>osThreadTerminated&#160;</td><td class="fielddoc"><p>Terminated. </p>
889 <p>The thread is terminated and all its resources are not yet freed (applies to <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#joinable_threads">joinable threads).</a></p>
890 </td></tr>
891 <tr><td class="fieldname"><a id="ggad3dc89e942e38d9f3af858a0269a820da339313e26613bc12f66a852e2ff8745e" name="ggad3dc89e942e38d9f3af858a0269a820da339313e26613bc12f66a852e2ff8745e"></a>osThreadError&#160;</td><td class="fielddoc"><p>Error. </p>
892 <p>The thread does not exist (has raised an error condition) and cannot be scheduled. </p>
893 </td></tr>
894 </table>
895
896 </div>
897 </div>
898 <a id="gad4e3e0971b41f2d17584a8c6837342ec" name="gad4e3e0971b41f2d17584a8c6837342ec"></a>
899 <h2 class="memtitle"><span class="permalink"><a href="#gad4e3e0971b41f2d17584a8c6837342ec">&#9670;&#160;</a></span>osPriority_t</h2>
900
901 <div class="memitem">
902 <div class="memproto">
903       <table class="memname">
904         <tr>
905           <td class="memname">enum <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ec">osPriority_t</a></td>
906         </tr>
907       </table>
908 </div><div class="memdoc">
909
910 <p>Priority values. </p>
911 <p>The <b>osPriority_t</b> value specifies the priority for a thread. The default thread priority should be <em>osPriorityNormal</em>. If an active thread becomes ready that has a higher priority than the currently running thread then a thread switch occurs immediately. The system continues executing the thread with the higher priority.</p>
912 <p>To prevent from a priority inversion, a CMSIS-RTOS compliant OS may optionally implement a <b>priority inheritance</b> method. A priority inversion occurs when a high priority thread is waiting for a resource or event that is controlled by a thread with a lower priority. Thus causing the high priority thread potentially being blocked forever by another thread with lower priority. To come over this issue the low priority thread controlling the resource should be treated as having the higher priority until it releases the resource.</p>
913 <dl class="section note"><dt>Note</dt><dd>Priority inheritance only applies to mutexes. </dd></dl>
914 <table class="fieldtable">
915 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggad4e3e0971b41f2d17584a8c6837342ecacd5864eac01a6916a7c866bb51a6aac1" name="ggad4e3e0971b41f2d17584a8c6837342ecacd5864eac01a6916a7c866bb51a6aac1"></a>osPriorityIdle&#160;</td><td class="fielddoc"><p>Reserved for Idle thread. </p>
916 <p>This lowest priority should not be used for any other thread. </p>
917 </td></tr>
918 <tr><td class="fieldname"><a id="ggad4e3e0971b41f2d17584a8c6837342eca4b4fa46c3ebaf4259662a0a0a3173b7f" name="ggad4e3e0971b41f2d17584a8c6837342eca4b4fa46c3ebaf4259662a0a0a3173b7f"></a>osPriorityISR&#160;</td><td class="fielddoc"><p>Reserved for ISR deferred thread. </p>
919 <p>This highest priority might be used by the RTOS implementation but must not be used for any user thread. </p>
920 </td></tr>
921 </table>
922
923 </div>
924 </div>
925 <h2 class="groupheader">Function Documentation</h2>
926 <a id="ga48d68b8666d99d28fa646ee1d2182b8f" name="ga48d68b8666d99d28fa646ee1d2182b8f"></a>
927 <h2 class="memtitle"><span class="permalink"><a href="#ga48d68b8666d99d28fa646ee1d2182b8f">&#9670;&#160;</a></span>osThreadNew()</h2>
928
929 <div class="memitem">
930 <div class="memproto">
931       <table class="memname">
932         <tr>
933           <td class="memname"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> osThreadNew </td>
934           <td>(</td>
935           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gadd51f99a6eb50b94eee75f27cae815eb">osThreadFunc_t</a>&#160;</td>
936           <td class="paramname"><em>func</em>, </td>
937         </tr>
938         <tr>
939           <td class="paramkey"></td>
940           <td></td>
941           <td class="paramtype">void *&#160;</td>
942           <td class="paramname"><em>argument</em>, </td>
943         </tr>
944         <tr>
945           <td class="paramkey"></td>
946           <td></td>
947           <td class="paramtype">const <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#structosThreadAttr__t">osThreadAttr_t</a> *&#160;</td>
948           <td class="paramname"><em>attr</em>&#160;</td>
949         </tr>
950         <tr>
951           <td></td>
952           <td>)</td>
953           <td></td><td></td>
954         </tr>
955       </table>
956 </div><div class="memdoc">
957
958 <p>Create a thread and add it to Active Threads. </p>
959 <dl class="params"><dt>Parameters</dt><dd>
960   <table class="params">
961     <tr><td class="paramdir">[in]</td><td class="paramname">func</td><td>thread function. </td></tr>
962     <tr><td class="paramdir">[in]</td><td class="paramname">argument</td><td>pointer that is passed to the thread function as start argument. </td></tr>
963     <tr><td class="paramdir">[in]</td><td class="paramname">attr</td><td>thread attributes; NULL: default values. </td></tr>
964   </table>
965   </dd>
966 </dl>
967 <dl class="section return"><dt>Returns</dt><dd>thread ID for reference by other functions or NULL in case of error.</dd></dl>
968 <p>The function <b>osThreadNew</b> starts a thread function by adding it to the list of active threads and sets it to state <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">READY</a>. Arguments for the thread function are passed using the parameter pointer <em>*argument</em>. When the priority of the created thread function is higher than the current <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">RUNNING</a> thread, the created thread function starts instantly and becomes the new <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">RUNNING</a> thread. Thread attributes are defined with the parameter pointer <em>attr</em>. Attributes include settings for thread priority, stack size, or memory allocation.</p>
969 <p>The function can be safely called before the RTOS is started (call to <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga9ae2cc00f0d89d7b6a307bba942b5221">osKernelStart</a>), but not before it is initialized (call to <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#gae818f6611d25ba3140bede410a52d659">osKernelInitialize</a>).</p>
970 <p>The function <b>osThreadNew</b> returns the pointer to the thread object identifier or <span class="XML-Token">NULL</span> in case of an error.</p>
971 <dl class="section note"><dt>Note</dt><dd>Cannot be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>.</dd></dl>
972 <p><b>Code</b> <b>Example</b> </p>
973 <p>Refer to the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#thread_examples">Thread Examples</a> section. </p>
974
975 </div>
976 </div>
977 <a id="gac3230f3a55a297514b013ebf38f27e0a" name="gac3230f3a55a297514b013ebf38f27e0a"></a>
978 <h2 class="memtitle"><span class="permalink"><a href="#gac3230f3a55a297514b013ebf38f27e0a">&#9670;&#160;</a></span>osThreadGetName()</h2>
979
980 <div class="memitem">
981 <div class="memproto">
982       <table class="memname">
983         <tr>
984           <td class="memname">const char * osThreadGetName </td>
985           <td>(</td>
986           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td>
987           <td class="paramname"><em>thread_id</em></td><td>)</td>
988           <td></td>
989         </tr>
990       </table>
991 </div><div class="memdoc">
992
993 <p>Get name of a thread. </p>
994 <dl class="params"><dt>Parameters</dt><dd>
995   <table class="params">
996     <tr><td class="paramdir">[in]</td><td class="paramname">thread_id</td><td>thread ID obtained by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a>. </td></tr>
997   </table>
998   </dd>
999 </dl>
1000 <dl class="section return"><dt>Returns</dt><dd>name as null-terminated string.</dd></dl>
1001 <p>The function <b>osThreadGetName</b> returns the pointer to the name string of the thread identified by parameter <em>thread_id</em> or <span class="XML-Token">NULL</span> in case of an error.</p>
1002 <dl class="section note"><dt>Note</dt><dd>This function may be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>.</dd></dl>
1003 <p><b>Code Example</b> </p><div class="fragment"><div class="line"><span class="keywordtype">void</span> ThreadGetName_example (<span class="keywordtype">void</span>) {</div>
1004 <div class="line">  <a class="code hl_typedef" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da" title="Return the thread ID of the current running thread.">osThreadGetId</a>();</div>
1005 <div class="line">  <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#gac3230f3a55a297514b013ebf38f27e0a" title="Get name of a thread.">osThreadGetName</a>(thread_id);</div>
1006 <div class="line">  <span class="keywordflow">if</span> (name == NULL) {</div>
1007 <div class="line">    <span class="comment">// Failed to get the thread name; not in a thread</span></div>
1008 <div class="line">  }</div>
1009 <div class="line">}</div>
1010 </div><!-- fragment --> 
1011 </div>
1012 </div>
1013 <a id="ga1bfbef7da94ed4147d231e8d6eeb5f3e" name="ga1bfbef7da94ed4147d231e8d6eeb5f3e"></a>
1014 <h2 class="memtitle"><span class="permalink"><a href="#ga1bfbef7da94ed4147d231e8d6eeb5f3e">&#9670;&#160;</a></span>osThreadGetClass()</h2>
1015
1016 <div class="memitem">
1017 <div class="memproto">
1018       <table class="memname">
1019         <tr>
1020           <td class="memname">uint32_t osThreadGetClass </td>
1021           <td>(</td>
1022           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td>
1023           <td class="paramname"><em>thread_id</em></td><td>)</td>
1024           <td></td>
1025         </tr>
1026       </table>
1027 </div><div class="memdoc">
1028
1029 <p>Get safety class of a thread. </p>
1030 <dl class="params"><dt>Parameters</dt><dd>
1031   <table class="params">
1032     <tr><td class="paramdir">[in]</td><td class="paramname">thread_id</td><td>thread ID obtained by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a>. </td></tr>
1033   </table>
1034   </dd>
1035 </dl>
1036 <dl class="section return"><dt>Returns</dt><dd>safety class of the specified thread.</dd></dl>
1037 <p>The function <b>osThreadGetClass</b> returns safety class assigned to the thread identified by parameter <em>thread_id</em>. In case of an error, it returns <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga6f3bd4b67fb89bd085266fe65ee45b06">osErrorId</a>. </p>
1038
1039 </div>
1040 </div>
1041 <a id="ga4101737fa4fd303d4b41fdca6b994f8e" name="ga4101737fa4fd303d4b41fdca6b994f8e"></a>
1042 <h2 class="memtitle"><span class="permalink"><a href="#ga4101737fa4fd303d4b41fdca6b994f8e">&#9670;&#160;</a></span>osThreadGetZone()</h2>
1043
1044 <div class="memitem">
1045 <div class="memproto">
1046       <table class="memname">
1047         <tr>
1048           <td class="memname">uint32_t osThreadGetZone </td>
1049           <td>(</td>
1050           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td>
1051           <td class="paramname"><em>thread_id</em></td><td>)</td>
1052           <td></td>
1053         </tr>
1054       </table>
1055 </div><div class="memdoc">
1056
1057 <p>Get MPU protected zone of a thread. </p>
1058 <dl class="params"><dt>Parameters</dt><dd>
1059   <table class="params">
1060     <tr><td class="paramdir">[in]</td><td class="paramname">thread_id</td><td>thread ID obtained by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a>. </td></tr>
1061   </table>
1062   </dd>
1063 </dl>
1064 <dl class="section return"><dt>Returns</dt><dd>MPU protected zone of the specified thread.</dd></dl>
1065 <p>The function <b>osThreadGetZone</b> returns the MPU Protected Zone value assigned to the thread identified by parameter <em>thread_id</em>. In case of an error, it returns <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga6f3bd4b67fb89bd085266fe65ee45b06">osErrorId</a>. </p>
1066
1067 </div>
1068 </div>
1069 <a id="ga8df03548e89fbc56402a5cd584a505da" name="ga8df03548e89fbc56402a5cd584a505da"></a>
1070 <h2 class="memtitle"><span class="permalink"><a href="#ga8df03548e89fbc56402a5cd584a505da">&#9670;&#160;</a></span>osThreadGetId()</h2>
1071
1072 <div class="memitem">
1073 <div class="memproto">
1074       <table class="memname">
1075         <tr>
1076           <td class="memname"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> osThreadGetId </td>
1077           <td>(</td>
1078           <td class="paramtype">void&#160;</td>
1079           <td class="paramname"></td><td>)</td>
1080           <td></td>
1081         </tr>
1082       </table>
1083 </div><div class="memdoc">
1084
1085 <p>Return the thread ID of the current running thread. </p>
1086 <dl class="section return"><dt>Returns</dt><dd>thread ID for reference by other functions or NULL in case of error.</dd></dl>
1087 <p>The function <b>osThreadGetId</b> returns the thread object ID of the currently running thread or NULL in case of an error.</p>
1088 <dl class="section note"><dt>Note</dt><dd>This function may be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>.</dd></dl>
1089 <p><b>Code Example</b> </p><div class="fragment"><div class="line"><span class="keywordtype">void</span> ThreadGetId_example (<span class="keywordtype">void</span>) {</div>
1090 <div class="line">  <a class="code hl_typedef" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> id;                              <span class="comment">// id for the currently running thread</span></div>
1091 <div class="line">   </div>
1092 <div class="line">  <span class="keywordtype">id</span> = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da" title="Return the thread ID of the current running thread.">osThreadGetId</a>();</div>
1093 <div class="line">  <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == NULL) {</div>
1094 <div class="line">    <span class="comment">// Failed to get the id</span></div>
1095 <div class="line">  }</div>
1096 <div class="line">}</div>
1097 </div><!-- fragment --> 
1098 </div>
1099 </div>
1100 <a id="gacc0a98b42f0a5928e12dc91dc76866b9" name="gacc0a98b42f0a5928e12dc91dc76866b9"></a>
1101 <h2 class="memtitle"><span class="permalink"><a href="#gacc0a98b42f0a5928e12dc91dc76866b9">&#9670;&#160;</a></span>osThreadGetState()</h2>
1102
1103 <div class="memitem">
1104 <div class="memproto">
1105       <table class="memname">
1106         <tr>
1107           <td class="memname"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad3dc89e942e38d9f3af858a0269a820d">osThreadState_t</a> osThreadGetState </td>
1108           <td>(</td>
1109           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td>
1110           <td class="paramname"><em>thread_id</em></td><td>)</td>
1111           <td></td>
1112         </tr>
1113       </table>
1114 </div><div class="memdoc">
1115
1116 <p>Get current thread state of a thread. </p>
1117 <dl class="params"><dt>Parameters</dt><dd>
1118   <table class="params">
1119     <tr><td class="paramdir">[in]</td><td class="paramname">thread_id</td><td>thread ID obtained by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a>. </td></tr>
1120   </table>
1121   </dd>
1122 </dl>
1123 <dl class="section return"><dt>Returns</dt><dd>current thread state of the specified thread.</dd></dl>
1124 <p>The function <b>osThreadGetState</b> returns the state of the thread identified by parameter <em>thread_id</em>. In case it fails or if it is called from an ISR, it will return <code>osThreadError</code>, otherwise it returns the thread state (refer to <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad3dc89e942e38d9f3af858a0269a820d">osThreadState_t</a> for the list of thread states).</p>
1125 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>. </dd></dl>
1126
1127 </div>
1128 </div>
1129 <a id="ga861a420fb2d643115b06622903fb3bfb" name="ga861a420fb2d643115b06622903fb3bfb"></a>
1130 <h2 class="memtitle"><span class="permalink"><a href="#ga861a420fb2d643115b06622903fb3bfb">&#9670;&#160;</a></span>osThreadSetPriority()</h2>
1131
1132 <div class="memitem">
1133 <div class="memproto">
1134       <table class="memname">
1135         <tr>
1136           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osThreadSetPriority </td>
1137           <td>(</td>
1138           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td>
1139           <td class="paramname"><em>thread_id</em>, </td>
1140         </tr>
1141         <tr>
1142           <td class="paramkey"></td>
1143           <td></td>
1144           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ec">osPriority_t</a>&#160;</td>
1145           <td class="paramname"><em>priority</em>&#160;</td>
1146         </tr>
1147         <tr>
1148           <td></td>
1149           <td>)</td>
1150           <td></td><td></td>
1151         </tr>
1152       </table>
1153 </div><div class="memdoc">
1154
1155 <p>Change priority of a thread. </p>
1156 <dl class="params"><dt>Parameters</dt><dd>
1157   <table class="params">
1158     <tr><td class="paramdir">[in]</td><td class="paramname">thread_id</td><td>thread ID obtained by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a>. </td></tr>
1159     <tr><td class="paramdir">[in]</td><td class="paramname">priority</td><td>new priority value for the thread function. </td></tr>
1160   </table>
1161   </dd>
1162 </dl>
1163 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
1164 <p>The function <b>osThreadSetPriority</b> changes the priority of an active thread specified by the parameter <em>thread_id</em> to the priority specified by the parameter <em>priority</em>.</p>
1165 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
1166 <li><em>osOK:</em> the priority of the specified thread has been changed successfully.</li>
1167 <li><em>osErrorParameter:</em> <em>thread_id</em> is <span class="XML-Token">NULL</span> or invalid or <em>priority</em> is incorrect.</li>
1168 <li><em>osErrorResource:</em> the thread is in an invalid state.</li>
1169 <li><em>osErrorISR:</em> the function <b>osThreadSetPriority</b> cannot be called from interrupt service routines.</li>
1170 <li><em>osErrorSafetyClass:</em> the calling thread safety class is lower than the safety class of the specified thread.</li>
1171 </ul>
1172 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>.</dd></dl>
1173 <p><b>Code Example</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;cmsis_os2.h&quot;</span></div>
1174 <div class="line"> </div>
1175 <div class="line"><span class="keywordtype">void</span> Thread_1 (<span class="keywordtype">void</span> <span class="keyword">const</span> *arg) {               <span class="comment">// Thread function</span></div>
1176 <div class="line">  <a class="code hl_typedef" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> id;                              <span class="comment">// id for the currently running thread</span></div>
1177 <div class="line">  <a class="code hl_enumeration" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e" title="Status code values returned by CMSIS-RTOS functions.">osStatus_t</a>   status;                          <span class="comment">// status of the executed function</span></div>
1178 <div class="line"> </div>
1179 <div class="line">  :</div>
1180 <div class="line">  <span class="keywordtype">id</span> = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da" title="Return the thread ID of the current running thread.">osThreadGetId</a>();                         <span class="comment">// Obtain ID of current running thread</span></div>
1181 <div class="line"> </div>
1182 <div class="line">  status = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga861a420fb2d643115b06622903fb3bfb" title="Change priority of a thread.">osThreadSetPriority</a>(<span class="keywordtype">id</span>, osPriorityBelowNormal);  <span class="comment">// Set thread priority</span></div>
1183 <div class="line">  <span class="keywordflow">if</span> (status == <a class="code hl_enumvalue" href="group__CMSIS__RTOS__Definitions.html#gga6c0dbe6069e4e7f47bb4cd32ae2b813eab17c65ad8b5bae759882b41c5bf35cda" title="Operation completed successfully.">osOK</a>) {</div>
1184 <div class="line">    <span class="comment">// Thread priority changed to BelowNormal</span></div>
1185 <div class="line">  }</div>
1186 <div class="line">  <span class="keywordflow">else</span> {</div>
1187 <div class="line">    <span class="comment">// Failed to set the priority</span></div>
1188 <div class="line">  }</div>
1189 <div class="line">  :</div>
1190 <div class="line">}</div>
1191 </div><!-- fragment --> 
1192 </div>
1193 </div>
1194 <a id="ga0aeaf349604f456e68e78f9d3b42e44b" name="ga0aeaf349604f456e68e78f9d3b42e44b"></a>
1195 <h2 class="memtitle"><span class="permalink"><a href="#ga0aeaf349604f456e68e78f9d3b42e44b">&#9670;&#160;</a></span>osThreadGetPriority()</h2>
1196
1197 <div class="memitem">
1198 <div class="memproto">
1199       <table class="memname">
1200         <tr>
1201           <td class="memname"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ec">osPriority_t</a> osThreadGetPriority </td>
1202           <td>(</td>
1203           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td>
1204           <td class="paramname"><em>thread_id</em></td><td>)</td>
1205           <td></td>
1206         </tr>
1207       </table>
1208 </div><div class="memdoc">
1209
1210 <p>Get current priority of a thread. </p>
1211 <dl class="params"><dt>Parameters</dt><dd>
1212   <table class="params">
1213     <tr><td class="paramdir">[in]</td><td class="paramname">thread_id</td><td>thread ID obtained by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a>. </td></tr>
1214   </table>
1215   </dd>
1216 </dl>
1217 <dl class="section return"><dt>Returns</dt><dd>current priority value of the specified thread.</dd></dl>
1218 <p>The function <b>osThreadGetPriority</b> returns the priority of an active thread specified by the parameter <em>thread_id</em>.</p>
1219 <p>Possible <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ec">osPriority_t</a> return values:</p><ul>
1220 <li><em>priority:</em> the priority of the specified thread.</li>
1221 <li><em>osPriorityError:</em> priority cannot be determined or is illegal. It is also returned when the function is called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>.</li>
1222 </ul>
1223 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>.</dd></dl>
1224 <p><b>Code Example</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;cmsis_os2.h&quot;</span></div>
1225 <div class="line"> </div>
1226 <div class="line"><span class="keywordtype">void</span> Thread_1 (<span class="keywordtype">void</span> <span class="keyword">const</span> *arg) {               <span class="comment">// Thread function</span></div>
1227 <div class="line">  <a class="code hl_typedef" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> id;                              <span class="comment">// id for the currently running thread</span></div>
1228 <div class="line">  <a class="code hl_enumeration" href="group__CMSIS__RTOS__ThreadMgmt.html#gad4e3e0971b41f2d17584a8c6837342ec" title="Priority values.">osPriority_t</a> priority;                        <span class="comment">// thread priority</span></div>
1229 <div class="line">   </div>
1230 <div class="line">  <span class="keywordtype">id</span> = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da" title="Return the thread ID of the current running thread.">osThreadGetId</a>();                         <span class="comment">// Obtain ID of current running thread</span></div>
1231 <div class="line">  priority = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga0aeaf349604f456e68e78f9d3b42e44b" title="Get current priority of a thread.">osThreadGetPriority</a>(<span class="keywordtype">id</span>);           <span class="comment">// Obtain the thread priority</span></div>
1232 <div class="line">}</div>
1233 </div><!-- fragment --> 
1234 </div>
1235 </div>
1236 <a id="gad01c7ec26535b1de6b018bb9466720e2" name="gad01c7ec26535b1de6b018bb9466720e2"></a>
1237 <h2 class="memtitle"><span class="permalink"><a href="#gad01c7ec26535b1de6b018bb9466720e2">&#9670;&#160;</a></span>osThreadYield()</h2>
1238
1239 <div class="memitem">
1240 <div class="memproto">
1241       <table class="memname">
1242         <tr>
1243           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osThreadYield </td>
1244           <td>(</td>
1245           <td class="paramtype">void&#160;</td>
1246           <td class="paramname"></td><td>)</td>
1247           <td></td>
1248         </tr>
1249       </table>
1250 </div><div class="memdoc">
1251
1252 <p>Pass control to next thread that is in state <b>READY</b>. </p>
1253 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
1254 <p>The function <b>osThreadYield</b> passes control to the next thread with the same priority that is in the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">READY</a> state. If there is no other thread with the same priority in state <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">READY</a>, then the current thread continues execution and no thread switch occurs. <b>osThreadYield</b> does not set the thread to state <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">BLOCKED</a>. Thus no thread with a lower priority will be scheduled even if threads in state <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">READY</a> are available.</p>
1255 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
1256 <li><em>osOK:</em> control has been passed to the next thread successfully.</li>
1257 <li><em>osError:</em> an unspecified error has occurred.</li>
1258 <li><em>osErrorISR:</em> the function <b>osThreadYield</b> cannot be called from interrupt service routines.</li>
1259 </ul>
1260 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>. </dd>
1261 <dd>
1262 This function <b>has no impact</b> when called when the kernel is locked, see <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga948609ee930d9b38336b9e1c2a4dfe12">osKernelLock</a>.</dd></dl>
1263 <p><b>Code Example</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;cmsis_os2.h&quot;</span></div>
1264 <div class="line"> </div>
1265 <div class="line"><span class="keywordtype">void</span> Thread_1 (<span class="keywordtype">void</span> <span class="keyword">const</span> *arg) {               <span class="comment">// Thread function</span></div>
1266 <div class="line">  <a class="code hl_enumeration" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e" title="Status code values returned by CMSIS-RTOS functions.">osStatus_t</a> status;                            <span class="comment">// status of the executed function</span></div>
1267 <div class="line">  :</div>
1268 <div class="line">  <span class="keywordflow">while</span> (1) {</div>
1269 <div class="line">    status = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#gad01c7ec26535b1de6b018bb9466720e2" title="Pass control to next thread that is in state READY.">osThreadYield</a>();</div>
1270 <div class="line">    <span class="keywordflow">if</span> (status != <a class="code hl_enumvalue" href="group__CMSIS__RTOS__Definitions.html#gga6c0dbe6069e4e7f47bb4cd32ae2b813eab17c65ad8b5bae759882b41c5bf35cda" title="Operation completed successfully.">osOK</a>) {</div>
1271 <div class="line">      <span class="comment">// an error occurred</span></div>
1272 <div class="line">    }</div>
1273 <div class="line">  }</div>
1274 <div class="line">}</div>
1275 </div><!-- fragment --> 
1276 </div>
1277 </div>
1278 <a id="gaa9de419d0152bf77e9bbcd1f369fb990" name="gaa9de419d0152bf77e9bbcd1f369fb990"></a>
1279 <h2 class="memtitle"><span class="permalink"><a href="#gaa9de419d0152bf77e9bbcd1f369fb990">&#9670;&#160;</a></span>osThreadSuspend()</h2>
1280
1281 <div class="memitem">
1282 <div class="memproto">
1283       <table class="memname">
1284         <tr>
1285           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osThreadSuspend </td>
1286           <td>(</td>
1287           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td>
1288           <td class="paramname"><em>thread_id</em></td><td>)</td>
1289           <td></td>
1290         </tr>
1291       </table>
1292 </div><div class="memdoc">
1293
1294 <p>Suspend execution of a thread. </p>
1295 <dl class="params"><dt>Parameters</dt><dd>
1296   <table class="params">
1297     <tr><td class="paramdir">[in]</td><td class="paramname">thread_id</td><td>thread ID obtained by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a>. </td></tr>
1298   </table>
1299   </dd>
1300 </dl>
1301 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
1302 <p>The function <b>osThreadSuspend</b> suspends the execution of the thread identified by parameter <em>thread_id</em>. The thread is put into the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">BLOCKED</a> state (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ggad3dc89e942e38d9f3af858a0269a820daf0e992e354fba8695957c530226a4968">osThreadBlocked</a>). Suspending the running thread will cause a context switch to another thread in <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">READY</a> state immediately. The suspended thread is not executed until explicitly resumed with the function <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga3dbad90eff394b02de76a452c84c5d80">osThreadResume</a>.</p>
1303 <p>Threads that are already <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">BLOCKED</a> are removed from any wait list and become ready when they are resumed. Thus it is not recommended to suspend an already blocked thread.</p>
1304 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
1305 <li><em>osOK:</em> the thread has been suspended successfully.</li>
1306 <li><em>osErrorParameter:</em> <em>thread_id</em> is <span class="XML-Token">NULL</span> or invalid.</li>
1307 <li><em>osErrorResource:</em> the thread is in an invalid state.</li>
1308 <li><em>osErrorISR:</em> the function <b>osThreadSuspend</b> cannot be called from interrupt service routines.</li>
1309 <li><em>osErrorSafetyClass:</em> the calling thread safety class is lower than the safety class of the specified thread.</li>
1310 </ul>
1311 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>. </dd>
1312 <dd>
1313 This function <b>must not</b> be called to suspend the running thread when the kernel is locked, i.e. <a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga948609ee930d9b38336b9e1c2a4dfe12">osKernelLock</a>. </dd></dl>
1314
1315 </div>
1316 </div>
1317 <a id="ga3dbad90eff394b02de76a452c84c5d80" name="ga3dbad90eff394b02de76a452c84c5d80"></a>
1318 <h2 class="memtitle"><span class="permalink"><a href="#ga3dbad90eff394b02de76a452c84c5d80">&#9670;&#160;</a></span>osThreadResume()</h2>
1319
1320 <div class="memitem">
1321 <div class="memproto">
1322       <table class="memname">
1323         <tr>
1324           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osThreadResume </td>
1325           <td>(</td>
1326           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td>
1327           <td class="paramname"><em>thread_id</em></td><td>)</td>
1328           <td></td>
1329         </tr>
1330       </table>
1331 </div><div class="memdoc">
1332
1333 <p>Resume execution of a thread. </p>
1334 <dl class="params"><dt>Parameters</dt><dd>
1335   <table class="params">
1336     <tr><td class="paramdir">[in]</td><td class="paramname">thread_id</td><td>thread ID obtained by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a>. </td></tr>
1337   </table>
1338   </dd>
1339 </dl>
1340 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
1341 <p>The function <b>osThreadResume</b> puts the thread identified by parameter <em>thread_id</em> (which has to be in <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">BLOCKED</a> state) back to the <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">READY</a> state. If the resumed thread has a higher priority than the running thread a context switch occurs immediately.</p>
1342 <p>The thread becomes ready regardless of the reason why the thread was blocked. Thus it is not recommended to resume a thread not suspended by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa9de419d0152bf77e9bbcd1f369fb990">osThreadSuspend</a>.</p>
1343 <p>Functions that will put a thread into <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">BLOCKED</a> state are: <a class="el" href="group__CMSIS__RTOS__EventFlags.html#ga52acb34a8322e58020227344fe662b4e">osEventFlagsWait</a> and <a class="el" href="group__CMSIS__RTOS__ThreadFlagsMgmt.html#gac11542ad6300b600f872fc96e340ec2b">osThreadFlagsWait</a>, <a class="el" href="group__CMSIS__RTOS__Wait.html#gaf6055a51390ef65b6b6edc28bf47322e">osDelay</a> and <a class="el" href="group__CMSIS__RTOS__Wait.html#ga3c807924c2d6d43bc2ffb49da3f7f3a1">osDelayUntil</a>, <a class="el" href="group__CMSIS__RTOS__MutexMgmt.html#gabc54686ea0fc281823b1763422d2a924">osMutexAcquire</a> and <a class="el" href="group__CMSIS__RTOS__SemaphoreMgmt.html#ga7e94c8b242a0c81f2cc79ec22895c87b">osSemaphoreAcquire</a>, <a class="el" href="group__CMSIS__RTOS__Message.html#gad90d4959466a7a65105061da8256ab9e">osMessageQueueGet</a>, <a class="el" href="group__CMSIS__RTOS__PoolMgmt.html#ga8ead54e99ccb8f112356c88f99d38fbe">osMemoryPoolAlloc</a>, <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga3fca90fb0679afeb968aa8c3d5874487">osThreadJoin</a>, <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa9de419d0152bf77e9bbcd1f369fb990">osThreadSuspend</a>.</p>
1344 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
1345 <li><em>osOK:</em> the thread has been resumed successfully.</li>
1346 <li><em>osErrorParameter:</em> <em>thread_id</em> is <span class="XML-Token">NULL</span> or invalid.</li>
1347 <li><em>osErrorResource:</em> the thread is in an invalid state.</li>
1348 <li><em>osErrorISR:</em> the function <b>osThreadResume</b> cannot be called from interrupt service routines.</li>
1349 <li><em>osErrorSafetyClass:</em> the calling thread safety class is lower than the safety class of the specified thread.</li>
1350 </ul>
1351 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>. </dd>
1352 <dd>
1353 This function <b>may be</b> called when kernel is locked (<a class="el" href="group__CMSIS__RTOS__KernelCtrl.html#ga948609ee930d9b38336b9e1c2a4dfe12">osKernelLock</a>). Under this circumstances a potential context switch is delayed until the kernel gets unlocked, i.e. <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>. </dd></dl>
1354
1355 </div>
1356 </div>
1357 <a id="gaaad14cd9547341ea8109dc4e8540f1dc" name="gaaad14cd9547341ea8109dc4e8540f1dc"></a>
1358 <h2 class="memtitle"><span class="permalink"><a href="#gaaad14cd9547341ea8109dc4e8540f1dc">&#9670;&#160;</a></span>osThreadDetach()</h2>
1359
1360 <div class="memitem">
1361 <div class="memproto">
1362       <table class="memname">
1363         <tr>
1364           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osThreadDetach </td>
1365           <td>(</td>
1366           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td>
1367           <td class="paramname"><em>thread_id</em></td><td>)</td>
1368           <td></td>
1369         </tr>
1370       </table>
1371 </div><div class="memdoc">
1372
1373 <p>Detach a thread (thread storage can be reclaimed when thread terminates). </p>
1374 <dl class="params"><dt>Parameters</dt><dd>
1375   <table class="params">
1376     <tr><td class="paramdir">[in]</td><td class="paramname">thread_id</td><td>thread ID obtained by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a>. </td></tr>
1377   </table>
1378   </dd>
1379 </dl>
1380 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
1381 <p>The function <b>osThreadDetach</b> changes the attribute of a thread (specified by <em>thread_id</em>) to <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa9336c1073858d6b118e2e011636246f">osThreadDetached</a>. Detached threads are not joinable with <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga3fca90fb0679afeb968aa8c3d5874487">osThreadJoin</a>. When a detached thread is terminated, all resources are returned to the system. The behavior of <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaaad14cd9547341ea8109dc4e8540f1dc">osThreadDetach</a> on an already detached thread is undefined.</p>
1382 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
1383 <li><em>osOK:</em> the attribute of the specified thread has been changed to detached successfully.</li>
1384 <li><em>osErrorParameter:</em> <em>thread_id</em> is <span class="XML-Token">NULL</span> or invalid.</li>
1385 <li><em>osErrorResource:</em> the thread is in an invalid state.</li>
1386 <li><em>osErrorISR:</em> the function <b>osThreadDetach</b> cannot be called from interrupt service routines.</li>
1387 <li><em>osErrorSafetyClass:</em> the calling thread safety class is lower than the safety class of the specified thread.</li>
1388 </ul>
1389 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>. </dd></dl>
1390
1391 </div>
1392 </div>
1393 <a id="ga3fca90fb0679afeb968aa8c3d5874487" name="ga3fca90fb0679afeb968aa8c3d5874487"></a>
1394 <h2 class="memtitle"><span class="permalink"><a href="#ga3fca90fb0679afeb968aa8c3d5874487">&#9670;&#160;</a></span>osThreadJoin()</h2>
1395
1396 <div class="memitem">
1397 <div class="memproto">
1398       <table class="memname">
1399         <tr>
1400           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osThreadJoin </td>
1401           <td>(</td>
1402           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td>
1403           <td class="paramname"><em>thread_id</em></td><td>)</td>
1404           <td></td>
1405         </tr>
1406       </table>
1407 </div><div class="memdoc">
1408
1409 <p>Wait for specified thread to terminate. </p>
1410 <dl class="params"><dt>Parameters</dt><dd>
1411   <table class="params">
1412     <tr><td class="paramdir">[in]</td><td class="paramname">thread_id</td><td>thread ID obtained by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a>. </td></tr>
1413   </table>
1414   </dd>
1415 </dl>
1416 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
1417 <p>The function <b>osThreadJoin</b> waits for the thread specified by <em>thread_id</em> to terminate. If that thread has already terminated, then <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga3fca90fb0679afeb968aa8c3d5874487">osThreadJoin</a> returns immediately. The thread must be joinable. By default threads are created with the attribute <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa9336c1073858d6b118e2e011636246f">osThreadDetached</a>.</p>
1418 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
1419 <li><em>osOK:</em> if the thread has already been terminated and joined or once the thread has been terminated and the join operations succeeds.</li>
1420 <li><em>osErrorParameter:</em> <em>thread_id</em> is <span class="XML-Token">NULL</span> or invalid.</li>
1421 <li><em>osErrorResource:</em> the thread is in an invalid state (ex: not joinable).</li>
1422 <li><em>osErrorISR:</em> the function <b>osThreadJoin</b> cannot be called from interrupt service routines.</li>
1423 <li><em>osErrorSafetyClass:</em> the calling thread safety class is lower than the safety class of the specified thread.</li>
1424 </ul>
1425 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>. <br  />
1426  </dd>
1427 <dd>
1428 Only one thread shall call <b>osThreadJoin</b> to join the target thread. If multiple threads try to join simultaneously with the same thread, the results are undefined. </dd></dl>
1429
1430 </div>
1431 </div>
1432 <a id="gaddaa452dd7610e4096647a566d3556fc" name="gaddaa452dd7610e4096647a566d3556fc"></a>
1433 <h2 class="memtitle"><span class="permalink"><a href="#gaddaa452dd7610e4096647a566d3556fc">&#9670;&#160;</a></span>osThreadExit()</h2>
1434
1435 <div class="memitem">
1436 <div class="memproto">
1437       <table class="memname">
1438         <tr>
1439           <td class="memname">__NO_RETURN void osThreadExit </td>
1440           <td>(</td>
1441           <td class="paramtype">void&#160;</td>
1442           <td class="paramname"></td><td>)</td>
1443           <td></td>
1444         </tr>
1445       </table>
1446 </div><div class="memdoc">
1447
1448 <p>Terminate execution of current running thread. </p>
1449 <p>The function <b>osThreadExit</b> terminates the calling thread. This allows the thread to be synchronized with <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga3fca90fb0679afeb968aa8c3d5874487">osThreadJoin</a>.</p>
1450 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>.</dd></dl>
1451 <p><b>Code</b> <b>Example</b> </p><div class="fragment"><div class="line">__NO_RETURN <span class="keywordtype">void</span> worker (<span class="keywordtype">void</span> *argument) {</div>
1452 <div class="line">  <span class="comment">// do something</span></div>
1453 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__Wait.html#gaf6055a51390ef65b6b6edc28bf47322e" title="Wait for Timeout (Time Delay).">osDelay</a>(1000U);</div>
1454 <div class="line">  <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#gaddaa452dd7610e4096647a566d3556fc" title="Terminate execution of current running thread.">osThreadExit</a>();</div>
1455 <div class="line">}</div>
1456 </div><!-- fragment --> 
1457 </div>
1458 </div>
1459 <a id="ga2f8ba6dba6e9c065a6e236ffd410d74a" name="ga2f8ba6dba6e9c065a6e236ffd410d74a"></a>
1460 <h2 class="memtitle"><span class="permalink"><a href="#ga2f8ba6dba6e9c065a6e236ffd410d74a">&#9670;&#160;</a></span>osThreadTerminate()</h2>
1461
1462 <div class="memitem">
1463 <div class="memproto">
1464       <table class="memname">
1465         <tr>
1466           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osThreadTerminate </td>
1467           <td>(</td>
1468           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td>
1469           <td class="paramname"><em>thread_id</em></td><td>)</td>
1470           <td></td>
1471         </tr>
1472       </table>
1473 </div><div class="memdoc">
1474
1475 <p>Terminate execution of a thread. </p>
1476 <dl class="params"><dt>Parameters</dt><dd>
1477   <table class="params">
1478     <tr><td class="paramdir">[in]</td><td class="paramname">thread_id</td><td>thread ID obtained by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a>. </td></tr>
1479   </table>
1480   </dd>
1481 </dl>
1482 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
1483 <p>The function <b>osThreadTerminate</b> removes the thread specified by parameter <em>thread_id</em> from the list of active threads. If the thread is currently <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">RUNNING</a>, the thread terminates and the execution continues with the next <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">READY</a> thread. If no such thread exists, the function will not terminate the running thread, but return <em>osErrorResource</em>.</p>
1484 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
1485 <li><em>osOK:</em> the specified thread has been removed from the active thread list successfully.</li>
1486 <li><em>osErrorParameter:</em> <em>thread_id</em> is <span class="XML-Token">NULL</span> or invalid.</li>
1487 <li><em>osErrorResource:</em> the thread is in an invalid state or no other <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">READY</a> thread exists.</li>
1488 <li><em>osErrorISR:</em> the function <b>osThreadTerminate</b> cannot be called from interrupt service routines.</li>
1489 <li><em>osErrorSafetyClass:</em> the calling thread safety class is lower than the safety class of the specified thread.</li>
1490 </ul>
1491 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>. </dd>
1492 <dd>
1493 Avoid calling the function with a <em>thread_id</em> that does not exist or has been terminated already. </dd>
1494 <dd>
1495 <b>osThreadTerminate</b> destroys non-joinable threads and removes their thread_id from the system. Subsequent access to the thread_id (for example <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gacc0a98b42f0a5928e12dc91dc76866b9">osThreadGetState</a>) will return an <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ggad3dc89e942e38d9f3af858a0269a820da339313e26613bc12f66a852e2ff8745e">osThreadError</a>. Joinable threads will not be destroyed and return the status <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ggad3dc89e942e38d9f3af858a0269a820dad5b2726c2d0228f4f1a76cf6b630963c">osThreadTerminated</a> until they are joined with <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga3fca90fb0679afeb968aa8c3d5874487">osThreadJoin</a>.</dd></dl>
1496 <p><b>Code Example</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;cmsis_os2.h&quot;</span></div>
1497 <div class="line"> </div>
1498 <div class="line"><span class="keywordtype">void</span> Thread_1 (<span class="keywordtype">void</span> *arg);                      <span class="comment">// function prototype for Thread_1</span></div>
1499 <div class="line"> </div>
1500 <div class="line"><span class="keywordtype">void</span> ThreadTerminate_example (<span class="keywordtype">void</span>) {</div>
1501 <div class="line">  <a class="code hl_enumeration" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e" title="Status code values returned by CMSIS-RTOS functions.">osStatus_t</a> status;</div>
1502 <div class="line">  <a class="code hl_typedef" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> id;</div>
1503 <div class="line"> </div>
1504 <div class="line">  <span class="keywordtype">id</span> = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f" title="Create a thread and add it to Active Threads.">osThreadNew</a>(Thread_1, NULL, NULL);       <span class="comment">// create the thread</span></div>
1505 <div class="line">                                                <span class="comment">// do something</span></div>
1506 <div class="line">  status = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga2f8ba6dba6e9c065a6e236ffd410d74a" title="Terminate execution of a thread.">osThreadTerminate</a>(<span class="keywordtype">id</span>);               <span class="comment">// stop the thread</span></div>
1507 <div class="line">  <span class="keywordflow">if</span> (status == <a class="code hl_enumvalue" href="group__CMSIS__RTOS__Definitions.html#gga6c0dbe6069e4e7f47bb4cd32ae2b813eab17c65ad8b5bae759882b41c5bf35cda" title="Operation completed successfully.">osOK</a>) {</div>
1508 <div class="line">                                                <span class="comment">// Thread was terminated successfully</span></div>
1509 <div class="line">  }</div>
1510 <div class="line">  <span class="keywordflow">else</span> {</div>
1511 <div class="line">                                                <span class="comment">// Failed to terminate a thread</span></div>
1512 <div class="line">  }</div>
1513 <div class="line">}</div>
1514 </div><!-- fragment --> 
1515 </div>
1516 </div>
1517 <a id="gab9f8bd715d671c6ee27644867bc1bf65" name="gab9f8bd715d671c6ee27644867bc1bf65"></a>
1518 <h2 class="memtitle"><span class="permalink"><a href="#gab9f8bd715d671c6ee27644867bc1bf65">&#9670;&#160;</a></span>osThreadGetStackSize()</h2>
1519
1520 <div class="memitem">
1521 <div class="memproto">
1522       <table class="memname">
1523         <tr>
1524           <td class="memname">uint32_t osThreadGetStackSize </td>
1525           <td>(</td>
1526           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td>
1527           <td class="paramname"><em>thread_id</em></td><td>)</td>
1528           <td></td>
1529         </tr>
1530       </table>
1531 </div><div class="memdoc">
1532
1533 <p>Get stack size of a thread. </p>
1534 <dl class="params"><dt>Parameters</dt><dd>
1535   <table class="params">
1536     <tr><td class="paramdir">[in]</td><td class="paramname">thread_id</td><td>thread ID obtained by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a>. </td></tr>
1537   </table>
1538   </dd>
1539 </dl>
1540 <dl class="section return"><dt>Returns</dt><dd>stack size in bytes.</dd></dl>
1541 <p>The function <b>osThreadGetStackSize</b> returns the stack size of the thread specified by parameter <em>thread_id</em>. In case of an error, it returns <span class="XML-Token">0</span>.</p>
1542 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>. </dd></dl>
1543
1544 </div>
1545 </div>
1546 <a id="ga9c83bd5dd8de329701775d6ef7012720" name="ga9c83bd5dd8de329701775d6ef7012720"></a>
1547 <h2 class="memtitle"><span class="permalink"><a href="#ga9c83bd5dd8de329701775d6ef7012720">&#9670;&#160;</a></span>osThreadGetStackSpace()</h2>
1548
1549 <div class="memitem">
1550 <div class="memproto">
1551       <table class="memname">
1552         <tr>
1553           <td class="memname">uint32_t osThreadGetStackSpace </td>
1554           <td>(</td>
1555           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td>
1556           <td class="paramname"><em>thread_id</em></td><td>)</td>
1557           <td></td>
1558         </tr>
1559       </table>
1560 </div><div class="memdoc">
1561
1562 <p>Get available stack space of a thread based on stack watermark recording during execution. </p>
1563 <dl class="params"><dt>Parameters</dt><dd>
1564   <table class="params">
1565     <tr><td class="paramdir">[in]</td><td class="paramname">thread_id</td><td>thread ID obtained by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a>. </td></tr>
1566   </table>
1567   </dd>
1568 </dl>
1569 <dl class="section return"><dt>Returns</dt><dd>remaining stack space in bytes.</dd></dl>
1570 <p>The function <b>osThreadGetStackSpace</b> returns the size of unused stack space for the thread specified by parameter <em>thread_id</em>. In case of an error, it returns <span class="XML-Token">0</span>.</p>
1571 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>. </dd></dl>
1572
1573 </div>
1574 </div>
1575 <a id="ga495b3f812224e7301f23a691793765db" name="ga495b3f812224e7301f23a691793765db"></a>
1576 <h2 class="memtitle"><span class="permalink"><a href="#ga495b3f812224e7301f23a691793765db">&#9670;&#160;</a></span>osThreadGetCount()</h2>
1577
1578 <div class="memitem">
1579 <div class="memproto">
1580       <table class="memname">
1581         <tr>
1582           <td class="memname">uint32_t osThreadGetCount </td>
1583           <td>(</td>
1584           <td class="paramtype">void&#160;</td>
1585           <td class="paramname"></td><td>)</td>
1586           <td></td>
1587         </tr>
1588       </table>
1589 </div><div class="memdoc">
1590
1591 <p>Get number of active threads. </p>
1592 <dl class="section return"><dt>Returns</dt><dd>number of active threads.</dd></dl>
1593 <p>The function <b>osThreadGetCount</b> returns the number of active threads or <span class="XML-Token">0</span> in case of an error.</p>
1594 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>. </dd></dl>
1595
1596 </div>
1597 </div>
1598 <a id="ga5606604d56e21ece1a654664be877439" name="ga5606604d56e21ece1a654664be877439"></a>
1599 <h2 class="memtitle"><span class="permalink"><a href="#ga5606604d56e21ece1a654664be877439">&#9670;&#160;</a></span>osThreadEnumerate()</h2>
1600
1601 <div class="memitem">
1602 <div class="memproto">
1603       <table class="memname">
1604         <tr>
1605           <td class="memname">uint32_t osThreadEnumerate </td>
1606           <td>(</td>
1607           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> *&#160;</td>
1608           <td class="paramname"><em>thread_array</em>, </td>
1609         </tr>
1610         <tr>
1611           <td class="paramkey"></td>
1612           <td></td>
1613           <td class="paramtype">uint32_t&#160;</td>
1614           <td class="paramname"><em>array_items</em>&#160;</td>
1615         </tr>
1616         <tr>
1617           <td></td>
1618           <td>)</td>
1619           <td></td><td></td>
1620         </tr>
1621       </table>
1622 </div><div class="memdoc">
1623
1624 <p>Enumerate active threads. </p>
1625 <dl class="params"><dt>Parameters</dt><dd>
1626   <table class="params">
1627     <tr><td class="paramdir">[out]</td><td class="paramname">thread_array</td><td>pointer to array for retrieving thread IDs. </td></tr>
1628     <tr><td class="paramdir">[in]</td><td class="paramname">array_items</td><td>maximum number of items in array for retrieving thread IDs. </td></tr>
1629   </table>
1630   </dd>
1631 </dl>
1632 <dl class="section return"><dt>Returns</dt><dd>number of enumerated threads.</dd></dl>
1633 <p>The function <b>osThreadEnumerate</b> returns the number of enumerated threads or <span class="XML-Token">0</span> in case of an error.</p>
1634 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>. </dd></dl>
1635
1636 </div>
1637 </div>
1638 <a id="ga8f4455b06afb95c1915f15266818a8c6" name="ga8f4455b06afb95c1915f15266818a8c6"></a>
1639 <h2 class="memtitle"><span class="permalink"><a href="#ga8f4455b06afb95c1915f15266818a8c6">&#9670;&#160;</a></span>osThreadFeedWatchdog()</h2>
1640
1641 <div class="memitem">
1642 <div class="memproto">
1643       <table class="memname">
1644         <tr>
1645           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osThreadFeedWatchdog </td>
1646           <td>(</td>
1647           <td class="paramtype">uint32_t&#160;</td>
1648           <td class="paramname"><em>ticks</em></td><td>)</td>
1649           <td></td>
1650         </tr>
1651       </table>
1652 </div><div class="memdoc">
1653
1654 <p>Feed watchdog of the current running thread. </p>
1655 <dl class="params"><dt>Parameters</dt><dd>
1656   <table class="params">
1657     <tr><td class="paramdir">[in]</td><td class="paramname">ticks</td><td>interval in kernel ticks until the thread watchdog expires, or 0 to stop the watchdog </td></tr>
1658   </table>
1659   </dd>
1660 </dl>
1661 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
1662 <p>The function <b>osThreadFeedWatchdog</b> restarts watchdog of the current running thread. If the thread watchdog is not fed again within the <em>ticks</em> interval <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga5a02770aaf65c7a3c7562c109884176a">osWatchdogAlarm_Handler</a> will be called.</p>
1663 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
1664 <li><em>osOK:</em> the watchdog timer was restarted successfully.</li>
1665 <li><em>osError:</em> cannot be executed (kernel not running).</li>
1666 <li><em>osErrorISR:</em> the function <b>osThreadFeedWatchdog</b> cannot be called from interrupt service routines.</li>
1667 </ul>
1668 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>.</dd></dl>
1669 <p><b>Code Example:</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;cmsis_os2.h&quot;</span></div>
1670 <div class="line"> </div>
1671 <div class="line"><span class="keywordtype">void</span> Thread_1 (<span class="keywordtype">void</span> <span class="keyword">const</span> *arg) {          <span class="comment">// Thread function</span></div>
1672 <div class="line">  <a class="code hl_enumeration" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e" title="Status code values returned by CMSIS-RTOS functions.">osStatus_t</a> status;                       <span class="comment">// Status of the executed function</span></div>
1673 <div class="line">  :</div>
1674 <div class="line">  <span class="keywordflow">while</span> (1) {</div>
1675 <div class="line">    status = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8f4455b06afb95c1915f15266818a8c6" title="Feed watchdog of the current running thread.">osThreadFeedWatchdog</a>(500U);   <span class="comment">// Feed thread watchdog for 500 ticks</span></div>
1676 <div class="line">    <span class="comment">// verify status value here</span></div>
1677 <div class="line">    :</div>
1678 <div class="line">  }</div>
1679 <div class="line">}</div>
1680 </div><!-- fragment --> 
1681 </div>
1682 </div>
1683 <a id="gaee8e6bed82cd58dad31bb90156182032" name="gaee8e6bed82cd58dad31bb90156182032"></a>
1684 <h2 class="memtitle"><span class="permalink"><a href="#gaee8e6bed82cd58dad31bb90156182032">&#9670;&#160;</a></span>osThreadProtectPrivileged()</h2>
1685
1686 <div class="memitem">
1687 <div class="memproto">
1688       <table class="memname">
1689         <tr>
1690           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osThreadProtectPrivileged </td>
1691           <td>(</td>
1692           <td class="paramtype">void&#160;</td>
1693           <td class="paramname"></td><td>)</td>
1694           <td></td>
1695         </tr>
1696       </table>
1697 </div><div class="memdoc">
1698
1699 <p>Protect creation of privileged threads. </p>
1700 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
1701 <p>The function <b>osThreadProtectPrivileged</b> disables creation of new privileged threads. After its successful execution, no new threads with privilege execution mode (<a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga7c2b7db42d23e4f56132e0ed739d02e5">osThreadPrivileged</a> attribute) can be created. Kernel shall be in ready state or running when <b>osThreadProtectPrivileged</b> is called.</p>
1702 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
1703 <li><em>osOK:</em> the creation of new privileged threads is disabled.</li>
1704 <li><em>osError:</em> cannot be executed (kernel not ready).</li>
1705 <li><em>osErrorISR:</em> the function <b>osThreadProtectPrivileged</b> cannot be called from interrupt service routines.</li>
1706 </ul>
1707 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>.</dd></dl>
1708 <p><b>Code Example:</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;cmsis_os2.h&quot;</span></div>
1709 <div class="line"> </div>
1710 <div class="line"><span class="keywordtype">int</span> main (<span class="keywordtype">void</span>) {</div>
1711 <div class="line">  <a class="code hl_enumeration" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e" title="Status code values returned by CMSIS-RTOS functions.">osStatus_t</a> status;</div>
1712 <div class="line">  :</div>
1713 <div class="line">  status = <a class="code hl_function" href="group__CMSIS__RTOS__KernelCtrl.html#gae818f6611d25ba3140bede410a52d659" title="Initialize the RTOS Kernel.">osKernelInitialize</a>();        <span class="comment">// Initialize CMSIS-RTOS2 kernel</span></div>
1714 <div class="line">  <span class="comment">// verify status value here.</span></div>
1715 <div class="line">  :                                     <span class="comment">// Create privileged threads</span></div>
1716 <div class="line">  status = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#gaee8e6bed82cd58dad31bb90156182032" title="Protect creation of privileged threads.">osThreadProtectPrivileged</a>(); <span class="comment">// Disable creation of new privileged threads.</span></div>
1717 <div class="line">  <span class="comment">// verify status value here.</span></div>
1718 <div class="line">  :                                     <span class="comment">// Start the kernel</span></div>
1719 <div class="line">}</div>
1720 </div><!-- fragment --> 
1721 </div>
1722 </div>
1723 <a id="gadadb56627094dbb07f6aeddf7d713fd9" name="gadadb56627094dbb07f6aeddf7d713fd9"></a>
1724 <h2 class="memtitle"><span class="permalink"><a href="#gadadb56627094dbb07f6aeddf7d713fd9">&#9670;&#160;</a></span>osThreadSuspendClass()</h2>
1725
1726 <div class="memitem">
1727 <div class="memproto">
1728       <table class="memname">
1729         <tr>
1730           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osThreadSuspendClass </td>
1731           <td>(</td>
1732           <td class="paramtype">uint32_t&#160;</td>
1733           <td class="paramname"><em>safety_class</em>, </td>
1734         </tr>
1735         <tr>
1736           <td class="paramkey"></td>
1737           <td></td>
1738           <td class="paramtype">uint32_t&#160;</td>
1739           <td class="paramname"><em>mode</em>&#160;</td>
1740         </tr>
1741         <tr>
1742           <td></td>
1743           <td>)</td>
1744           <td></td><td></td>
1745         </tr>
1746       </table>
1747 </div><div class="memdoc">
1748
1749 <p>Suspend execution of threads for specified safety classes. </p>
1750 <dl class="params"><dt>Parameters</dt><dd>
1751   <table class="params">
1752     <tr><td class="paramdir">[in]</td><td class="paramname">safety_class</td><td>safety class. </td></tr>
1753     <tr><td class="paramdir">[in]</td><td class="paramname">mode</td><td>safety mode. </td></tr>
1754   </table>
1755   </dd>
1756 </dl>
1757 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
1758 <p>The function <b>osThreadSuspendClass</b> suspends execution of threads 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 suspended.</p>
1759 <p>If <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga7abd2d95425d9e02672778b3464b2eaa">osSafetyWithSameClass</a> is set in <em>mode</em> than the threads with safety class value equal to <em>safety_class</em> will be suspended. <br  />
1760  If <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga8c77ee126b9215425fc004ee13cdc6de">osSafetyWithLowerClass</a> is set in <em>mode</em> than the threads with safety class value lower than <em>safety_class</em> will be suspended.</p>
1761 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
1762 <li><em>osOK:</em> the threads with specified safety class have been suspended successfully.</li>
1763 <li><em>osErrorParameter:</em> <em>safety_class</em> is invalid.</li>
1764 <li><em>osErrorResource:</em> no other <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">READY</a> thread exists.</li>
1765 <li><em>osErrorISR:</em> the function <b>osThreadSuspendClass</b> is called from interrupt other than <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga5a02770aaf65c7a3c7562c109884176a">osWatchdogAlarm_Handler</a>.</li>
1766 <li><em>osErrorSafetyClass:</em> the calling thread safety class is lower than the safety class specified by <em>safety_class</em> and <em>mode</em>.</li>
1767 </ul>
1768 <p><b>Code Example:</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;cmsis_os2.h&quot;</span></div>
1769 <div class="line"> </div>
1770 <div class="line"><span class="keywordtype">void</span> SuspendNonCriticalClasses (<span class="keywordtype">void</span>) {</div>
1771 <div class="line">  <a class="code hl_enumeration" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e" title="Status code values returned by CMSIS-RTOS functions.">osStatus_t</a> status;</div>
1772 <div class="line"> </div>
1773 <div class="line">  status = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#gadadb56627094dbb07f6aeddf7d713fd9" title="Suspend execution of threads for specified safety classes.">osThreadSuspendClass</a>(4U, <a class="code hl_define" href="group__CMSIS__RTOS__Definitions.html#ga7abd2d95425d9e02672778b3464b2eaa" title="Objects with same safety class.">osSafetyWithSameClass</a> | <a class="code hl_define" href="group__CMSIS__RTOS__Definitions.html#ga8c77ee126b9215425fc004ee13cdc6de" title="Objects with lower safety class.">osSafetyWithLowerClass</a>); <span class="comment">// Suspends threads with safety class 4 or lower</span></div>
1774 <div class="line">  <span class="comment">// verify status value here.</span></div>
1775 <div class="line">}</div>
1776 </div><!-- fragment --> 
1777 </div>
1778 </div>
1779 <a id="gadd0a06b459925eb5cdeab67b380a3970" name="gadd0a06b459925eb5cdeab67b380a3970"></a>
1780 <h2 class="memtitle"><span class="permalink"><a href="#gadd0a06b459925eb5cdeab67b380a3970">&#9670;&#160;</a></span>osThreadResumeClass()</h2>
1781
1782 <div class="memitem">
1783 <div class="memproto">
1784       <table class="memname">
1785         <tr>
1786           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osThreadResumeClass </td>
1787           <td>(</td>
1788           <td class="paramtype">uint32_t&#160;</td>
1789           <td class="paramname"><em>safety_class</em>, </td>
1790         </tr>
1791         <tr>
1792           <td class="paramkey"></td>
1793           <td></td>
1794           <td class="paramtype">uint32_t&#160;</td>
1795           <td class="paramname"><em>mode</em>&#160;</td>
1796         </tr>
1797         <tr>
1798           <td></td>
1799           <td>)</td>
1800           <td></td><td></td>
1801         </tr>
1802       </table>
1803 </div><div class="memdoc">
1804
1805 <p>Resume execution of threads for specified safety classes. </p>
1806 <dl class="params"><dt>Parameters</dt><dd>
1807   <table class="params">
1808     <tr><td class="paramdir">[in]</td><td class="paramname">safety_class</td><td>safety class. </td></tr>
1809     <tr><td class="paramdir">[in]</td><td class="paramname">mode</td><td>safety mode. </td></tr>
1810   </table>
1811   </dd>
1812 </dl>
1813 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
1814 <p>The function <b>osThreadResumeClass</b> resumes execution of threads 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 resumed.</p>
1815 <p>If <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga7abd2d95425d9e02672778b3464b2eaa">osSafetyWithSameClass</a> is set in <em>mode</em> than the threads with safety class value equal to <em>safety_class</em> will be resumed. <br  />
1816  If <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga8c77ee126b9215425fc004ee13cdc6de">osSafetyWithLowerClass</a> is set in <em>mode</em> than the threads with safety class value lower than <em>safety_class</em> will be resumed.</p>
1817 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
1818 <li><em>osOK:</em> the threads with specified safety class have been resumed successfully.</li>
1819 <li><em>osErrorParameter:</em> <em>safety_class</em> is invalid.</li>
1820 <li><em>osErrorISR:</em> the function <b>osThreadResumeClass</b> is called from interrupt other than <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga5a02770aaf65c7a3c7562c109884176a">osWatchdogAlarm_Handler</a>.</li>
1821 <li><em>osErrorSafetyClass:</em> the calling thread safety class is lower than the safety class specified by <em>safety_class</em> and <em>mode</em>.</li>
1822 </ul>
1823 <p><b>Code Example:</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;cmsis_os2.h&quot;</span></div>
1824 <div class="line"> </div>
1825 <div class="line"><span class="keywordtype">void</span> ResumeNonCriticalClasses (<span class="keywordtype">void</span>) {</div>
1826 <div class="line">  <a class="code hl_enumeration" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e" title="Status code values returned by CMSIS-RTOS functions.">osStatus_t</a> status;</div>
1827 <div class="line"> </div>
1828 <div class="line">  status = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#gadd0a06b459925eb5cdeab67b380a3970" title="Resume execution of threads for specified safety classes.">osThreadResumeClass</a>(4U, <a class="code hl_define" href="group__CMSIS__RTOS__Definitions.html#ga7abd2d95425d9e02672778b3464b2eaa" title="Objects with same safety class.">osSafetyWithSameClass</a> | <a class="code hl_define" href="group__CMSIS__RTOS__Definitions.html#ga8c77ee126b9215425fc004ee13cdc6de" title="Objects with lower safety class.">osSafetyWithLowerClass</a>); <span class="comment">// Resumes threads with safety class 4 or lower</span></div>
1829 <div class="line">  <span class="comment">// verify status value here.</span></div>
1830 <div class="line">}</div>
1831 </div><!-- fragment --> 
1832 </div>
1833 </div>
1834 <a id="ga99ce311cc620c65fbac043d04dc7d755" name="ga99ce311cc620c65fbac043d04dc7d755"></a>
1835 <h2 class="memtitle"><span class="permalink"><a href="#ga99ce311cc620c65fbac043d04dc7d755">&#9670;&#160;</a></span>osThreadTerminateZone()</h2>
1836
1837 <div class="memitem">
1838 <div class="memproto">
1839       <table class="memname">
1840         <tr>
1841           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osThreadTerminateZone </td>
1842           <td>(</td>
1843           <td class="paramtype">uint32_t&#160;</td>
1844           <td class="paramname"><em>zone</em></td><td>)</td>
1845           <td></td>
1846         </tr>
1847       </table>
1848 </div><div class="memdoc">
1849
1850 <p>Terminate execution of threads assigned to a specified MPU protected zone. </p>
1851 <dl class="params"><dt>Parameters</dt><dd>
1852   <table class="params">
1853     <tr><td class="paramdir">[in]</td><td class="paramname">zone</td><td>MPU protected zone. </td></tr>
1854   </table>
1855   </dd>
1856 </dl>
1857 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
1858 <p>The function <b>osThreadTerminateZone</b> terminates execution of threads assigned to the MPU Protected Zone as given by <em>zone</em> parameter.</p>
1859 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
1860 <li><em>osOK:</em> the threads within the specified MPU Protected Zone have been terminated successfully.</li>
1861 <li><em>osErrorParameter:</em> <em>zone</em> is invalid.</li>
1862 <li><em>osErrorResource:</em> no other <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ThreadStates">READY</a> thread exists.</li>
1863 <li><em>osErrorISR:</em> the function <b>osThreadTerminateZone</b> is called from interrupt other than fault.</li>
1864 <li><em>osError:</em> the function <b>osThreadTerminateZone</b> is called from thread.</li>
1865 </ul>
1866 <dl class="section note"><dt>Note</dt><dd><b>osThreadTerminateZone</b> destroys non-joinable threads and removes their thread IDs from the system. Subsequent access to a terminated thread via its thread ID (for example <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gacc0a98b42f0a5928e12dc91dc76866b9">osThreadGetState</a>) will return an <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ggad3dc89e942e38d9f3af858a0269a820da339313e26613bc12f66a852e2ff8745e">osThreadError</a>. Joinable threads will not be destroyed and return the status <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ggad3dc89e942e38d9f3af858a0269a820dad5b2726c2d0228f4f1a76cf6b630963c">osThreadTerminated</a> until they are joined with <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga3fca90fb0679afeb968aa8c3d5874487">osThreadJoin</a>.</dd></dl>
1867 <p><b>Code Example:</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;cmsis_os2.h&quot;</span></div>
1868 <div class="line"> </div>
1869 <div class="line"><span class="keywordtype">void</span> TerminateFaultedThreads (<span class="keywordtype">void</span>) {  <span class="comment">// to be called from an exception fault context</span></div>
1870 <div class="line">  <a class="code hl_enumeration" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e" title="Status code values returned by CMSIS-RTOS functions.">osStatus_t</a> status;</div>
1871 <div class="line"> </div>
1872 <div class="line">  status = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga99ce311cc620c65fbac043d04dc7d755" title="Terminate execution of threads assigned to a specified MPU protected zone.">osThreadTerminateZone</a>(3U); <span class="comment">// Terminates threads assigned to MPU Protected Zone 3</span></div>
1873 <div class="line">  <span class="comment">// verify status value here.</span></div>
1874 <div class="line">}</div>
1875 </div><!-- fragment --> 
1876 </div>
1877 </div>
1878 <a id="ga60e2518df0194587a134b7e1836f2470" name="ga60e2518df0194587a134b7e1836f2470"></a>
1879 <h2 class="memtitle"><span class="permalink"><a href="#ga60e2518df0194587a134b7e1836f2470">&#9670;&#160;</a></span>osThreadSetAffinityMask()</h2>
1880
1881 <div class="memitem">
1882 <div class="memproto">
1883       <table class="memname">
1884         <tr>
1885           <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> osThreadSetAffinityMask </td>
1886           <td>(</td>
1887           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td>
1888           <td class="paramname"><em>thread_id</em>, </td>
1889         </tr>
1890         <tr>
1891           <td class="paramkey"></td>
1892           <td></td>
1893           <td class="paramtype">uint32_t&#160;</td>
1894           <td class="paramname"><em>affinity_mask</em>&#160;</td>
1895         </tr>
1896         <tr>
1897           <td></td>
1898           <td>)</td>
1899           <td></td><td></td>
1900         </tr>
1901       </table>
1902 </div><div class="memdoc">
1903
1904 <p>Set processor affinity mask of a thread. </p>
1905 <dl class="params"><dt>Parameters</dt><dd>
1906   <table class="params">
1907     <tr><td class="paramdir">[in]</td><td class="paramname">thread_id</td><td>thread ID obtained by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a>. </td></tr>
1908     <tr><td class="paramdir">[in]</td><td class="paramname">affinity_mask</td><td>processor affinity mask for the thread. </td></tr>
1909   </table>
1910   </dd>
1911 </dl>
1912 <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function.</dd></dl>
1913 <p>The function <b>osThreadSetAffinityMask</b> sets the affinity mask of the thread specified by parameter <em>thread_id</em> to the mask specified by the parameter <em>affinity_mask</em>. The mask indicates on which processor(s) the thread should run (<span class="XML-Token">0</span> indicates on any processor).</p>
1914 <p>Possible <a class="el" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e">osStatus_t</a> return values:</p><ul>
1915 <li><em>osOK:</em> the affinity mask of the specified thread has been set successfully.</li>
1916 <li><em>osErrorParameter:</em> <em>thread_id</em> is <span class="XML-Token">NULL</span> or invalid or <em>priority</em> is incorrect.</li>
1917 <li><em>osErrorResource:</em> the thread is in an invalid state.</li>
1918 <li><em>osErrorISR:</em> the function <b>osThreadSetAffinityMask</b> cannot be called from interrupt service routines.</li>
1919 <li><em>osErrorSafetyClass:</em> the calling thread safety class is lower than the safety class of the specified thread.</li>
1920 </ul>
1921 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>.</dd></dl>
1922 <p><b>Code Example</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;cmsis_os2.h&quot;</span></div>
1923 <div class="line"> </div>
1924 <div class="line"><span class="keywordtype">void</span> Thread_1 (<span class="keywordtype">void</span> <span class="keyword">const</span> *arg) {               <span class="comment">// Thread function</span></div>
1925 <div class="line">  <a class="code hl_typedef" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> id;                              <span class="comment">// id for the currently running thread</span></div>
1926 <div class="line">  <a class="code hl_enumeration" href="group__CMSIS__RTOS__Definitions.html#ga6c0dbe6069e4e7f47bb4cd32ae2b813e" title="Status code values returned by CMSIS-RTOS functions.">osStatus_t</a>   status;                          <span class="comment">// status of the executed function</span></div>
1927 <div class="line"> </div>
1928 <div class="line">  <span class="keywordtype">id</span> = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da" title="Return the thread ID of the current running thread.">osThreadGetId</a>();                         <span class="comment">// Obtain ID of current running thread</span></div>
1929 <div class="line"> </div>
1930 <div class="line">  status = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga60e2518df0194587a134b7e1836f2470" title="Set processor affinity mask of a thread.">osThreadSetAffinityMask</a>(<span class="keywordtype">id</span>, <a class="code hl_define" href="group__CMSIS__RTOS__ThreadMgmt.html#ga4ef461379ceba9ab7764850ef2c7b0ac" title="Thread processor affinity mask value in attribute affinity_mask format.">osThreadProcessor</a>(1));  <span class="comment">// Set thread affinity mask</span></div>
1931 <div class="line">  <span class="keywordflow">if</span> (status == <a class="code hl_enumvalue" href="group__CMSIS__RTOS__Definitions.html#gga6c0dbe6069e4e7f47bb4cd32ae2b813eab17c65ad8b5bae759882b41c5bf35cda" title="Operation completed successfully.">osOK</a>) {</div>
1932 <div class="line">    <span class="comment">// Thread affinity mask set to processor number 1</span></div>
1933 <div class="line">  }</div>
1934 <div class="line">  <span class="keywordflow">else</span> {</div>
1935 <div class="line">    <span class="comment">// Failed to set the affinity mask</span></div>
1936 <div class="line">  }</div>
1937 <div class="line">}</div>
1938 </div><!-- fragment --> 
1939 </div>
1940 </div>
1941 <a id="gab0541a97b969f7f762572dcefe2f65e1" name="gab0541a97b969f7f762572dcefe2f65e1"></a>
1942 <h2 class="memtitle"><span class="permalink"><a href="#gab0541a97b969f7f762572dcefe2f65e1">&#9670;&#160;</a></span>osThreadGetAffinityMask()</h2>
1943
1944 <div class="memitem">
1945 <div class="memproto">
1946       <table class="memname">
1947         <tr>
1948           <td class="memname">uint32_t osThreadGetAffinityMask </td>
1949           <td>(</td>
1950           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td>
1951           <td class="paramname"><em>thread_id</em></td><td>)</td>
1952           <td></td>
1953         </tr>
1954       </table>
1955 </div><div class="memdoc">
1956
1957 <p>Get current processor affinity mask of a thread. </p>
1958 <dl class="params"><dt>Parameters</dt><dd>
1959   <table class="params">
1960     <tr><td class="paramdir">[in]</td><td class="paramname">thread_id</td><td>thread ID obtained by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a>. </td></tr>
1961   </table>
1962   </dd>
1963 </dl>
1964 <dl class="section return"><dt>Returns</dt><dd>current processor affinity mask of the specified thread.</dd></dl>
1965 <p>The function <b>osThreadGetAffinityMask</b> returns the affinity mask of the thread specified by parameter <em>thread_id</em>. In case of an error, it returns <span class="XML-Token">0</span>.</p>
1966 <dl class="section note"><dt>Note</dt><dd>This function <b>cannot</b> be called from <a class="el" href="usingOS2.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>.</dd></dl>
1967 <p><b>Code Example</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;cmsis_os2.h&quot;</span></div>
1968 <div class="line"> </div>
1969 <div class="line"><span class="keywordtype">void</span> Thread_1 (<span class="keywordtype">void</span> <span class="keyword">const</span> *arg) {               <span class="comment">// Thread function</span></div>
1970 <div class="line">  <a class="code hl_typedef" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> id;                              <span class="comment">// id for the currently running thread</span></div>
1971 <div class="line">  uint32_t     affinity_mask;                   <span class="comment">// thread affinity mask</span></div>
1972 <div class="line">   </div>
1973 <div class="line">  <span class="keywordtype">id</span> = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da" title="Return the thread ID of the current running thread.">osThreadGetId</a>();                         <span class="comment">// Obtain ID of current running thread</span></div>
1974 <div class="line">  affinity_mask = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#gab0541a97b969f7f762572dcefe2f65e1" title="Get current processor affinity mask of a thread.">osThreadGetAffinityMask</a>(<span class="keywordtype">id</span>);  <span class="comment">// Obtain the thread affinity mask</span></div>
1975 <div class="line">}</div>
1976 </div><!-- fragment --> 
1977 </div>
1978 </div>
1979 <a id="ga5a02770aaf65c7a3c7562c109884176a" name="ga5a02770aaf65c7a3c7562c109884176a"></a>
1980 <h2 class="memtitle"><span class="permalink"><a href="#ga5a02770aaf65c7a3c7562c109884176a">&#9670;&#160;</a></span>osWatchdogAlarm_Handler()</h2>
1981
1982 <div class="memitem">
1983 <div class="memproto">
1984       <table class="memname">
1985         <tr>
1986           <td class="memname">uint32_t osWatchdogAlarm_Handler </td>
1987           <td>(</td>
1988           <td class="paramtype"><a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a>&#160;</td>
1989           <td class="paramname"><em>thread_id</em></td><td>)</td>
1990           <td></td>
1991         </tr>
1992       </table>
1993 </div><div class="memdoc">
1994
1995 <p>Handler for expired thread watchdogs. </p>
1996 <dl class="params"><dt>Parameters</dt><dd>
1997   <table class="params">
1998     <tr><td class="paramdir">[in]</td><td class="paramname">thread_id</td><td>thread ID obtained by <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga48d68b8666d99d28fa646ee1d2182b8f">osThreadNew</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#ga8df03548e89fbc56402a5cd584a505da">osThreadGetId</a>. </td></tr>
1999   </table>
2000   </dd>
2001 </dl>
2002 <dl class="section return"><dt>Returns</dt><dd>new watchdog reload value or 0 to stop the watchdog.</dd></dl>
2003 <p>The callback function <b>osWatchdogAlarm_Handler</b> is called by the kernel when a thread watchdog expires. Parameter <em>thread_id</em> identifies the thread which has the expired thread watchdog. The function needs to be implemented in user application.</p>
2004 <p>Return new reload value to restart the watchdog. Return <span class="XML-Token">0</span> to stop the thread watchdog.</p>
2005 <dl class="section note"><dt>Note</dt><dd>The callback function is called from interrupt.</dd>
2006 <dd>
2007 When multiple watchdogs expire in the same tick, this function is called for each thread with highest safety class first.</dd></dl>
2008 <p><b>Code Example:</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;cmsis_os2.h&quot;</span></div>
2009 <div class="line"> </div>
2010 <div class="line">uint32_t <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga5a02770aaf65c7a3c7562c109884176a" title="Handler for expired thread watchdogs.">osWatchdogAlarm_Handler</a> (<a class="code hl_typedef" href="group__CMSIS__RTOS__ThreadMgmt.html#gaa6c32fe2a3e0a2e01f212d55b02e51c7">osThreadId_t</a> thread_id) {</div>
2011 <div class="line">  uint32_t safety_class;</div>
2012 <div class="line">  uint32_t next_interval;</div>
2013 <div class="line"> </div>
2014 <div class="line">  safety_class = <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga1bfbef7da94ed4147d231e8d6eeb5f3e" title="Get safety class of a thread.">osThreadGetClass</a>(thread_id);</div>
2015 <div class="line">  </div>
2016 <div class="line">  <span class="comment">/* Handle the watchdog depending on how safety-critical is the thread */</span></div>
2017 <div class="line">  <span class="keywordflow">if</span> (safety_class &lt; ...){</div>
2018 <div class="line">    :</div>
2019 <div class="line">  } <span class="keywordflow">else</span> {</div>
2020 <div class="line">    :</div>
2021 <div class="line">  }</div>
2022 <div class="line"> </div>
2023 <div class="line">  <span class="keywordflow">return</span> next_interval;</div>
2024 <div class="line">}</div>
2025 </div><!-- fragment --> 
2026 </div>
2027 </div>
2028 <a id="ga79d4b26de0bfcdaf142f83e585532f93" name="ga79d4b26de0bfcdaf142f83e585532f93"></a>
2029 <h2 class="memtitle"><span class="permalink"><a href="#ga79d4b26de0bfcdaf142f83e585532f93">&#9670;&#160;</a></span>osZoneSetup_Callback()</h2>
2030
2031 <div class="memitem">
2032 <div class="memproto">
2033       <table class="memname">
2034         <tr>
2035           <td class="memname">void osZoneSetup_Callback </td>
2036           <td>(</td>
2037           <td class="paramtype">uint32_t&#160;</td>
2038           <td class="paramname"><em>zone</em></td><td>)</td>
2039           <td></td>
2040         </tr>
2041       </table>
2042 </div><div class="memdoc">
2043
2044 <p>Setup MPU protected zone (called when zone changes). </p>
2045 <dl class="params"><dt>Parameters</dt><dd>
2046   <table class="params">
2047     <tr><td class="paramdir">[in]</td><td class="paramname">zone</td><td>zone number.</td></tr>
2048   </table>
2049   </dd>
2050 </dl>
2051 <p>The callback function <b>osZoneSetup_Callback</b> is called by the kernel when MPU Protected Zone changes. The function shall be implemented in user application.</p>
2052 <p><b>Code Example:</b> </p><div class="fragment"><div class="line"><span class="comment">/* Update MPU settings for newly activating Zone */</span></div>
2053 <div class="line"><span class="keywordtype">void</span> <a class="code hl_function" href="group__CMSIS__RTOS__ThreadMgmt.html#ga79d4b26de0bfcdaf142f83e585532f93" title="Setup MPU protected zone (called when zone changes).">osZoneSetup_Callback</a> (uint32_t zone) {</div>
2054 <div class="line"> </div>
2055 <div class="line">  <span class="keywordflow">if</span> (zone &gt;= ZONES_NUM) {</div>
2056 <div class="line">    <span class="comment">//Issue an error for incorrect zone value</span></div>
2057 <div class="line">  }</div>
2058 <div class="line"> </div>
2059 <div class="line">  ARM_MPU_Disable();</div>
2060 <div class="line">  ARM_MPU_Load(mpu_table[zone], MPU_REGIONS);</div>
2061 <div class="line">  ARM_MPU_Enable(MPU_CTRL_PRIVDEFENA_Msk);</div>
2062 <div class="line">}</div>
2063 </div><!-- fragment --><p><code>ZONES_NUM</code> is the total amount of zones allocated by the application. For <code>ARM_MPU_</code>... functions refer to <a href="../../Core/html/group__mpu__functions.html"><b>MPU Functions</b></a> in CMSIS-Core documentation. </p>
2064
2065 </div>
2066 </div>
2067 </div><!-- contents -->
2068 </div><!-- doc-content -->
2069 <!-- start footer part -->
2070 <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
2071   <ul>
2072     <li class="footer">
2073       <script type="text/javascript">
2074         <!--
2075         writeFooter.call(this);
2076         //-->
2077       </script> 
2078     </li>
2079   </ul>
2080 </div>
2081 </body>
2082 </html>