group__CMSIS__RTOS__Mail.html 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
  5. <meta http-equiv="X-UA-Compatible" content="IE=9"/>
  6. <title>Mail Queue</title>
  7. <title>CMSIS-RTOS: Mail Queue</title>
  8. <link href="tabs.css" rel="stylesheet" type="text/css"/>
  9. <link href="cmsis.css" rel="stylesheet" type="text/css" />
  10. <script type="text/javascript" src="jquery.js"></script>
  11. <script type="text/javascript" src="dynsections.js"></script>
  12. <script type="text/javascript" src="printComponentTabs.js"></script>
  13. <link href="navtree.css" rel="stylesheet" type="text/css"/>
  14. <script type="text/javascript" src="resize.js"></script>
  15. <script type="text/javascript" src="navtree.js"></script>
  16. <script type="text/javascript">
  17. $(document).ready(initResizable);
  18. $(window).load(resizeHeight);
  19. </script>
  20. <link href="search/search.css" rel="stylesheet" type="text/css"/>
  21. <script type="text/javascript" src="search/search.js"></script>
  22. <script type="text/javascript">
  23. $(document).ready(function() { searchBox.OnSelectItem(0); });
  24. </script>
  25. </head>
  26. <body>
  27. <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
  28. <div id="titlearea">
  29. <table cellspacing="0" cellpadding="0">
  30. <tbody>
  31. <tr style="height: 46px;">
  32. <td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
  33. <td style="padding-left: 0.5em;">
  34. <div id="projectname">CMSIS-RTOS
  35. &#160;<span id="projectnumber">Version 1.03</span>
  36. </div>
  37. <div id="projectbrief">Real-Time Operating System: API and RTX Reference Implementation.</div>
  38. </td>
  39. </tr>
  40. </tbody>
  41. </table>
  42. </div>
  43. <!-- end header part -->
  44. <div id="CMSISnav" class="tabs1">
  45. <ul class="tablist">
  46. <script type="text/javascript">
  47. <!--
  48. writeComponentTabs.call(this);
  49. //-->
  50. </script>
  51. </ul>
  52. </div>
  53. <!-- Generated by Doxygen 1.8.6 -->
  54. <script type="text/javascript">
  55. var searchBox = new SearchBox("searchBox", "search",false,'Search');
  56. </script>
  57. <div id="navrow1" class="tabs">
  58. <ul class="tablist">
  59. <li><a href="index.html"><span>Main&#160;Page</span></a></li>
  60. <li><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
  61. <li><a href="modules.html"><span>Reference</span></a></li>
  62. <li>
  63. <div id="MSearchBox" class="MSearchBoxInactive">
  64. <span class="left">
  65. <img id="MSearchSelect" src="search/mag_sel.png"
  66. onmouseover="return searchBox.OnSearchSelectShow()"
  67. onmouseout="return searchBox.OnSearchSelectHide()"
  68. alt=""/>
  69. <input type="text" id="MSearchField" value="Search" accesskey="S"
  70. onfocus="searchBox.OnSearchFieldFocus(true)"
  71. onblur="searchBox.OnSearchFieldFocus(false)"
  72. onkeyup="searchBox.OnSearchFieldChange(event)"/>
  73. </span><span class="right">
  74. <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
  75. </span>
  76. </div>
  77. </li>
  78. </ul>
  79. </div>
  80. </div><!-- top -->
  81. <div id="side-nav" class="ui-resizable side-nav-resizable">
  82. <div id="nav-tree">
  83. <div id="nav-tree-contents">
  84. <div id="nav-sync" class="sync"></div>
  85. </div>
  86. </div>
  87. <div id="splitbar" style="-moz-user-select:none;"
  88. class="ui-resizable-handle">
  89. </div>
  90. </div>
  91. <script type="text/javascript">
  92. $(document).ready(function(){initNavTree('group__CMSIS__RTOS__Mail.html','');});
  93. </script>
  94. <div id="doc-content">
  95. <!-- window showing the filter options -->
  96. <div id="MSearchSelectWindow"
  97. onmouseover="return searchBox.OnSearchSelectShow()"
  98. onmouseout="return searchBox.OnSearchSelectHide()"
  99. onkeydown="return searchBox.OnSearchSelectKey(event)">
  100. <a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Pages</a></div>
  101. <!-- iframe showing the search results (closed by default) -->
  102. <div id="MSearchResultsWindow">
  103. <iframe src="javascript:void(0)" frameborder="0"
  104. name="MSearchResults" id="MSearchResults">
  105. </iframe>
  106. </div>
  107. <div class="header">
  108. <div class="summary">
  109. <a href="#define-members">Macros</a> &#124;
  110. <a href="#func-members">Functions</a> </div>
  111. <div class="headertitle">
  112. <div class="title">Mail Queue<div class="ingroups"><a class="el" href="group__CMSIS__RTOS__InterThread.html">Inter-Thread Communication and Resource Sharing</a></div></div> </div>
  113. </div><!--header-->
  114. <div class="contents">
  115. <p>Exchange data between threads using a queue of memory blocks.
  116. <a href="#details">More...</a></p>
  117. <table class="memberdecls">
  118. <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
  119. Macros</h2></td></tr>
  120. <tr class="memitem:gaceb2e0071ce160d153047f2eac1aca8e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__Mail.html#gaceb2e0071ce160d153047f2eac1aca8e">osFeature_MailQ</a>&#160;&#160;&#160;1</td></tr>
  121. <tr class="memdesc:gaceb2e0071ce160d153047f2eac1aca8e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mail Queues: 1=available, 0=not available. <a href="#gaceb2e0071ce160d153047f2eac1aca8e">More...</a><br/></td></tr>
  122. <tr class="separator:gaceb2e0071ce160d153047f2eac1aca8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
  123. <tr class="memitem:ga58d712b16c0c6668059f509386d1e55b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__Mail.html#ga58d712b16c0c6668059f509386d1e55b">osMailQDef</a>(name, queue_sz, type)</td></tr>
  124. <tr class="memdesc:ga58d712b16c0c6668059f509386d1e55b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a Mail Queue Definition. <a href="#ga58d712b16c0c6668059f509386d1e55b">More...</a><br/></td></tr>
  125. <tr class="separator:ga58d712b16c0c6668059f509386d1e55b"><td class="memSeparator" colspan="2">&#160;</td></tr>
  126. <tr class="memitem:gad2deeb66d51ade54e63d8f87ff2ec9d2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__Mail.html#gad2deeb66d51ade54e63d8f87ff2ec9d2">osMailQ</a>(name)&#160;&#160;&#160;&amp;os_mailQ_def_##name</td></tr>
  127. <tr class="memdesc:gad2deeb66d51ade54e63d8f87ff2ec9d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Access a Mail Queue Definition. <a href="#gad2deeb66d51ade54e63d8f87ff2ec9d2">More...</a><br/></td></tr>
  128. <tr class="separator:gad2deeb66d51ade54e63d8f87ff2ec9d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
  129. </table><table class="memberdecls">
  130. <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
  131. Functions</h2></td></tr>
  132. <tr class="memitem:gaa177e7fe5820dd70d8c9e46ded131174"><td class="memItemLeft" align="right" valign="top"><a class="el" href="cmsis__os_8h.html#a1dac049fb7725a8af8b26c71cbb373b5">osMailQId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__Mail.html#gaa177e7fe5820dd70d8c9e46ded131174">osMailCreate</a> (const <a class="el" href="cmsis__os_8h.html#structosMailQDef__t">osMailQDef_t</a> *queue_def, <a class="el" href="cmsis__os_8h.html#adfeb153a84a81309e2d958268197617f">osThreadId</a> thread_id)</td></tr>
  133. <tr class="memdesc:gaa177e7fe5820dd70d8c9e46ded131174"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create and Initialize mail queue. <a href="#gaa177e7fe5820dd70d8c9e46ded131174">More...</a><br/></td></tr>
  134. <tr class="separator:gaa177e7fe5820dd70d8c9e46ded131174"><td class="memSeparator" colspan="2">&#160;</td></tr>
  135. <tr class="memitem:gadf5ce811bd6a56e617e902a1db6c2194"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__Mail.html#gadf5ce811bd6a56e617e902a1db6c2194">osMailAlloc</a> (<a class="el" href="cmsis__os_8h.html#a1dac049fb7725a8af8b26c71cbb373b5">osMailQId</a> queue_id, uint32_t millisec)</td></tr>
  136. <tr class="memdesc:gadf5ce811bd6a56e617e902a1db6c2194"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocate a memory block from a mail. <a href="#gadf5ce811bd6a56e617e902a1db6c2194">More...</a><br/></td></tr>
  137. <tr class="separator:gadf5ce811bd6a56e617e902a1db6c2194"><td class="memSeparator" colspan="2">&#160;</td></tr>
  138. <tr class="memitem:ga8fde74f6fe5b9e88f75cc5eb8f2124fd"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__Mail.html#ga8fde74f6fe5b9e88f75cc5eb8f2124fd">osMailCAlloc</a> (<a class="el" href="cmsis__os_8h.html#a1dac049fb7725a8af8b26c71cbb373b5">osMailQId</a> queue_id, uint32_t millisec)</td></tr>
  139. <tr class="memdesc:ga8fde74f6fe5b9e88f75cc5eb8f2124fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocate a memory block from a mail and set memory block to zero. <a href="#ga8fde74f6fe5b9e88f75cc5eb8f2124fd">More...</a><br/></td></tr>
  140. <tr class="separator:ga8fde74f6fe5b9e88f75cc5eb8f2124fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
  141. <tr class="memitem:ga485ef6f81854ebda8ffbce4832181e02"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99e">osStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__Mail.html#ga485ef6f81854ebda8ffbce4832181e02">osMailPut</a> (<a class="el" href="cmsis__os_8h.html#a1dac049fb7725a8af8b26c71cbb373b5">osMailQId</a> queue_id, void *mail)</td></tr>
  142. <tr class="memdesc:ga485ef6f81854ebda8ffbce4832181e02"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put a mail to a queue. <a href="#ga485ef6f81854ebda8ffbce4832181e02">More...</a><br/></td></tr>
  143. <tr class="separator:ga485ef6f81854ebda8ffbce4832181e02"><td class="memSeparator" colspan="2">&#160;</td></tr>
  144. <tr class="memitem:gac6ad7e6e7d6c4a80e60da22c57a42ccd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CMSIS__RTOS__Definitions.html#structosEvent">osEvent</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__Mail.html#gac6ad7e6e7d6c4a80e60da22c57a42ccd">osMailGet</a> (<a class="el" href="cmsis__os_8h.html#a1dac049fb7725a8af8b26c71cbb373b5">osMailQId</a> queue_id, uint32_t millisec)</td></tr>
  145. <tr class="memdesc:gac6ad7e6e7d6c4a80e60da22c57a42ccd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a mail from a queue. <a href="#gac6ad7e6e7d6c4a80e60da22c57a42ccd">More...</a><br/></td></tr>
  146. <tr class="separator:gac6ad7e6e7d6c4a80e60da22c57a42ccd"><td class="memSeparator" colspan="2">&#160;</td></tr>
  147. <tr class="memitem:ga27c1060cf21393f96b4fd1ed1c0167cc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99e">osStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CMSIS__RTOS__Mail.html#ga27c1060cf21393f96b4fd1ed1c0167cc">osMailFree</a> (<a class="el" href="cmsis__os_8h.html#a1dac049fb7725a8af8b26c71cbb373b5">osMailQId</a> queue_id, void *mail)</td></tr>
  148. <tr class="memdesc:ga27c1060cf21393f96b4fd1ed1c0167cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free a memory block from a mail. <a href="#ga27c1060cf21393f96b4fd1ed1c0167cc">More...</a><br/></td></tr>
  149. <tr class="separator:ga27c1060cf21393f96b4fd1ed1c0167cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
  150. </table>
  151. <a name="details" id="details"></a><h2 class="groupheader">Description</h2>
  152. <p>A <b>mail</b> <b>queue</b> resembles a <a class="el" href="group__CMSIS__RTOS__Message.html">Message Queue</a>, but the data that is being transferred consists of memory blocks that need to be allocated (before putting data in) and freed (after taking data out). The mail queue uses a <a class="el" href="group__CMSIS__RTOS__PoolMgmt.html">Memory Pool</a> to create formatted memory blocks and passes pointers to these blocks in a message queue. This allows the data to stay in an allocated memory block while only a pointer is moved between the separate threads. This is an advantage over <a class="el" href="group__CMSIS__RTOS__Message.html">messages</a> that can transfer only a 32-bit value or a pointer. Using the mail queue functions, you can control, send, receive, or wait for mail.</p>
  153. <div class="image">
  154. <img src="MailQueue.png" alt="MailQueue.png"/>
  155. <div class="caption">
  156. CMSIS-RTOS Mail Queue</div></div>
  157. <h2>Working with Mail Queues </h2>
  158. <p>Follow these steps to create and use a mail queue:</p>
  159. <ol type="1">
  160. <li>Declare a data structure that combines a number of elements: <div class="fragment"><div class="line"><span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
  161. <div class="line"> uint32_t length;</div>
  162. <div class="line"> uint32_t width;</div>
  163. <div class="line"> uint32_t height;</div>
  164. <div class="line"> uint32_t weight;</div>
  165. <div class="line">} properties_t;</div>
  166. </div><!-- fragment --></li>
  167. <li>Declare a mail queue made up of these objects: <div class="fragment"><div class="line"><a class="code" href="group__CMSIS__RTOS__Mail.html#ga58d712b16c0c6668059f509386d1e55b">osMailQDef</a> (object_pool_q, 10, properties_t); <span class="comment">// Declare mail queue</span></div>
  168. <div class="line"><a class="code" href="cmsis__os_8h.html#a1dac049fb7725a8af8b26c71cbb373b5">osMailQId</a> (object_pool_q_id); <span class="comment">// Mail queue ID</span></div>
  169. </div><!-- fragment --></li>
  170. <li>Then, create the mail pool in a thread: <div class="fragment"><div class="line">object_pool_q_id = <a class="code" href="group__CMSIS__RTOS__Mail.html#gaa177e7fe5820dd70d8c9e46ded131174">osMailCreate</a>(<a class="code" href="group__CMSIS__RTOS__Mail.html#gad2deeb66d51ade54e63d8f87ff2ec9d2">osMailQ</a>(object_pool_q), NULL);</div>
  171. </div><!-- fragment --></li>
  172. <li>Allocate the mail queue within a thread and fill it with data: <div class="fragment"><div class="line">properties_t *object_data;</div>
  173. <div class="line"> object_data = (properties_t *) <a class="code" href="group__CMSIS__RTOS__Mail.html#gadf5ce811bd6a56e617e902a1db6c2194">osMailAlloc</a>(object_pool_q_id, <a class="code" href="cmsis__os_8h.html#a9eb9a7a797a42e4b55eb171ecc609ddb">osWaitForever</a>);</div>
  174. <div class="line"> </div>
  175. <div class="line">object_data-&gt;length = 100;</div>
  176. <div class="line">object_data-&gt;width = 10;</div>
  177. <div class="line">object_data-&gt;height = 23;</div>
  178. <div class="line">object_data-&gt;weight = 1000;</div>
  179. </div><!-- fragment --></li>
  180. <li>Pass the pointer to the mail queue to another thread: <div class="fragment"><div class="line"><a class="code" href="group__CMSIS__RTOS__Mail.html#ga485ef6f81854ebda8ffbce4832181e02">osMailPut</a>(object_pool_q_id, object_data);</div>
  181. </div><!-- fragment --></li>
  182. <li>Access the data in another thread: <div class="fragment"><div class="line"><a class="code" href="group__CMSIS__RTOS__Definitions.html#structosEvent">osEvent</a> <span class="keyword">event</span> = <a class="code" href="group__CMSIS__RTOS__Mail.html#gac6ad7e6e7d6c4a80e60da22c57a42ccd">osMailGet</a>(properties_q_id, <a class="code" href="cmsis__os_8h.html#a9eb9a7a797a42e4b55eb171ecc609ddb">osWaitForever</a>);</div>
  183. <div class="line">properties_t *received = (properties_t *)event.value.p; <span class="comment">// &quot;.p&quot; indicates that the message is a pointer</span></div>
  184. <div class="line">my_length(received-&gt;length);</div>
  185. </div><!-- fragment --></li>
  186. <li>Once the data has been used, the memory block must be freed so that the memory pool can be reused <div class="fragment"><div class="line"><a class="code" href="group__CMSIS__RTOS__Mail.html#ga27c1060cf21393f96b4fd1ed1c0167cc">osMailFree</a>(object_pool_q_id, received);</div>
  187. </div><!-- fragment --> </li>
  188. </ol>
  189. <h2 class="groupheader">Macro Definition Documentation</h2>
  190. <a class="anchor" id="gaceb2e0071ce160d153047f2eac1aca8e"></a>
  191. <div class="memitem">
  192. <div class="memproto">
  193. <table class="memname">
  194. <tr>
  195. <td class="memname">#define osFeature_MailQ&#160;&#160;&#160;1</td>
  196. </tr>
  197. </table>
  198. </div><div class="memdoc">
  199. <p>A CMSIS-RTOS implementation may support mail queues.</p>
  200. <ul>
  201. <li>When <a class="el" href="group__CMSIS__RTOS__Mail.html#gaceb2e0071ce160d153047f2eac1aca8e">osFeature_MailQ</a> is 1 mail queues are supported.</li>
  202. <li>When <a class="el" href="group__CMSIS__RTOS__Mail.html#gaceb2e0071ce160d153047f2eac1aca8e">osFeature_MailQ</a> is 0 no mail queues are supported.</li>
  203. </ul>
  204. <p><a class="el" href="rtxImplementation.html">CMSIS-RTOS RTX</a> Setting: <b>osFeature_MailQ</b> is 1 </p>
  205. </div>
  206. </div>
  207. <a class="anchor" id="gad2deeb66d51ade54e63d8f87ff2ec9d2"></a>
  208. <div class="memitem">
  209. <div class="memproto">
  210. <table class="memname">
  211. <tr>
  212. <td class="memname">#define osMailQ</td>
  213. <td>(</td>
  214. <td class="paramtype">&#160;</td>
  215. <td class="paramname">name</td><td>)</td>
  216. <td>&#160;&#160;&#160;&amp;os_mailQ_def_##name</td>
  217. </tr>
  218. </table>
  219. </div><div class="memdoc">
  220. <p>Access to the mail queue definition for the function <a class="el" href="group__CMSIS__RTOS__Mail.html#gaa177e7fe5820dd70d8c9e46ded131174">osMailCreate</a>.</p>
  221. <dl class="params"><dt>Parameters</dt><dd>
  222. <table class="params">
  223. <tr><td class="paramname">name</td><td>name of the queue </td></tr>
  224. </table>
  225. </dd>
  226. </dl>
  227. <dl class="section note"><dt>Note</dt><dd>CAN BE CHANGED: The parameter to <b>osMailQ</b> shall be consistent but the macro body is implementation specific in every CMSIS-RTOS. </dd></dl>
  228. </div>
  229. </div>
  230. <a class="anchor" id="ga58d712b16c0c6668059f509386d1e55b"></a>
  231. <div class="memitem">
  232. <div class="memproto">
  233. <table class="memname">
  234. <tr>
  235. <td class="memname">#define osMailQDef</td>
  236. <td>(</td>
  237. <td class="paramtype">&#160;</td>
  238. <td class="paramname">name, </td>
  239. </tr>
  240. <tr>
  241. <td class="paramkey"></td>
  242. <td></td>
  243. <td class="paramtype">&#160;</td>
  244. <td class="paramname">queue_sz, </td>
  245. </tr>
  246. <tr>
  247. <td class="paramkey"></td>
  248. <td></td>
  249. <td class="paramtype">&#160;</td>
  250. <td class="paramname">type&#160;</td>
  251. </tr>
  252. <tr>
  253. <td></td>
  254. <td>)</td>
  255. <td></td><td></td>
  256. </tr>
  257. </table>
  258. </div><div class="memdoc">
  259. <p>Define the attributes of a mail queue that can by the function <a class="el" href="group__CMSIS__RTOS__Mail.html#gaa177e7fe5820dd70d8c9e46ded131174">osMailCreate</a> using <a class="el" href="group__CMSIS__RTOS__Mail.html#gad2deeb66d51ade54e63d8f87ff2ec9d2">osMailQ</a>.</p>
  260. <dl class="section note"><dt>Note</dt><dd>The parameter <em>thread</em> registers the receiving thread for a mail and is needed for the general <a class="el" href="technicalData.html#osWait">osWait</a> function to deliver the mail.</dd></dl>
  261. <dl class="params"><dt>Parameters</dt><dd>
  262. <table class="params">
  263. <tr><td class="paramname">name</td><td>name of the queue </td></tr>
  264. <tr><td class="paramname">queue_sz</td><td>maximum number of messages in queue </td></tr>
  265. <tr><td class="paramname">type</td><td>data type of a single message element </td></tr>
  266. </table>
  267. </dd>
  268. </dl>
  269. <dl class="section note"><dt>Note</dt><dd>CAN BE CHANGED: The parameter to <b>osMailQDef</b> shall be consistent but the macro body is implementation specific in every CMSIS-RTOS. </dd></dl>
  270. </div>
  271. </div>
  272. <h2 class="groupheader">Function Documentation</h2>
  273. <a class="anchor" id="gadf5ce811bd6a56e617e902a1db6c2194"></a>
  274. <div class="memitem">
  275. <div class="memproto">
  276. <table class="memname">
  277. <tr>
  278. <td class="memname">void * osMailAlloc </td>
  279. <td>(</td>
  280. <td class="paramtype"><a class="el" href="cmsis__os_8h.html#a1dac049fb7725a8af8b26c71cbb373b5">osMailQId</a>&#160;</td>
  281. <td class="paramname"><em>queue_id</em>, </td>
  282. </tr>
  283. <tr>
  284. <td class="paramkey"></td>
  285. <td></td>
  286. <td class="paramtype">uint32_t&#160;</td>
  287. <td class="paramname"><em>millisec</em>&#160;</td>
  288. </tr>
  289. <tr>
  290. <td></td>
  291. <td>)</td>
  292. <td></td><td></td>
  293. </tr>
  294. </table>
  295. </div><div class="memdoc">
  296. <dl class="params"><dt>Parameters</dt><dd>
  297. <table class="params">
  298. <tr><td class="paramdir">[in]</td><td class="paramname">queue_id</td><td>mail queue ID obtained with <a class="el" href="group__CMSIS__RTOS__Mail.html#gaa177e7fe5820dd70d8c9e46ded131174">osMailCreate</a>. </td></tr>
  299. <tr><td class="paramdir">[in]</td><td class="paramname">millisec</td><td><a class="el" href="functionOverview.html#CMSIS_RTOS_TimeOutValue">Timout Value</a> or 0 in case of no time-out </td></tr>
  300. </table>
  301. </dd>
  302. </dl>
  303. <dl class="section return"><dt>Returns</dt><dd>pointer to memory block that can be filled with mail or NULL in case of error. </dd></dl>
  304. <dl class="section note"><dt>Note</dt><dd>MUST REMAIN UNCHANGED: <b>osMailAlloc</b> shall be consistent in every CMSIS-RTOS.</dd></dl>
  305. <p>Allocate a memory block from the mail queue that is filled with the mail information.</p>
  306. <p>The argument <em>queue_id</em> specifies a mail queue identifier that is obtain with <a class="el" href="group__CMSIS__RTOS__Mail.html#gaa177e7fe5820dd70d8c9e46ded131174">osMailCreate</a>.</p>
  307. <p>The argument <em>millisec</em> specifies how long the system waits for a mail slot to become available. While the system waits the thread calling this function is put into the state <b>WAITING</b>. The <em>millisec</em> timeout can have the following values:</p>
  308. <ul>
  309. <li>when <em>millisec</em> is 0, the function returns instantly.</li>
  310. <li>when <em>millisec</em> is set to <b>osWaitForever</b> the function will wait for an infinite time until a mail slot can be allocated.</li>
  311. <li>all other values specify a time in millisecond for a timeout.</li>
  312. </ul>
  313. <dl class="section note"><dt>Note</dt><dd>The parameter <em>millisec</em> must be 0 for using this function in an ISR. </dd>
  314. <dd>
  315. <a class="el" href="functionOverview.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a> can call this function.</dd></dl>
  316. <p>A NULL pointer is returned when no memory slot can be obtained or <em>queue</em> specifies an illegal parameter. </p>
  317. </div>
  318. </div>
  319. <a class="anchor" id="ga8fde74f6fe5b9e88f75cc5eb8f2124fd"></a>
  320. <div class="memitem">
  321. <div class="memproto">
  322. <table class="memname">
  323. <tr>
  324. <td class="memname">void * osMailCAlloc </td>
  325. <td>(</td>
  326. <td class="paramtype"><a class="el" href="cmsis__os_8h.html#a1dac049fb7725a8af8b26c71cbb373b5">osMailQId</a>&#160;</td>
  327. <td class="paramname"><em>queue_id</em>, </td>
  328. </tr>
  329. <tr>
  330. <td class="paramkey"></td>
  331. <td></td>
  332. <td class="paramtype">uint32_t&#160;</td>
  333. <td class="paramname"><em>millisec</em>&#160;</td>
  334. </tr>
  335. <tr>
  336. <td></td>
  337. <td>)</td>
  338. <td></td><td></td>
  339. </tr>
  340. </table>
  341. </div><div class="memdoc">
  342. <dl class="params"><dt>Parameters</dt><dd>
  343. <table class="params">
  344. <tr><td class="paramdir">[in]</td><td class="paramname">queue_id</td><td>mail queue ID obtained with <a class="el" href="group__CMSIS__RTOS__Mail.html#gaa177e7fe5820dd70d8c9e46ded131174">osMailCreate</a>. </td></tr>
  345. <tr><td class="paramdir">[in]</td><td class="paramname">millisec</td><td><a class="el" href="functionOverview.html#CMSIS_RTOS_TimeOutValue">Timout Value</a> or 0 in case of no time-out </td></tr>
  346. </table>
  347. </dd>
  348. </dl>
  349. <dl class="section return"><dt>Returns</dt><dd>pointer to memory block that can be filled with mail or NULL in case of error. </dd></dl>
  350. <dl class="section note"><dt>Note</dt><dd>MUST REMAIN UNCHANGED: <b>osMailCAlloc</b> shall be consistent in every CMSIS-RTOS.</dd></dl>
  351. <p>Allocate a memory block from the mail queue that is filled with the mail information. The memory block returned is cleared.</p>
  352. <p>The argument <em>queue_id</em> specifies a mail queue identifier that is obtain with <a class="el" href="group__CMSIS__RTOS__Mail.html#gaa177e7fe5820dd70d8c9e46ded131174">osMailCreate</a>.</p>
  353. <p>The argument <em>millisec</em> specifies how long the system waits for a mail slot to become available. While the system waits the thread that is calling this function is put into the state <b>WAITING</b>. The <em>millisec</em> timeout can have the following values:</p>
  354. <ul>
  355. <li>when <em>millisec</em> is 0, the function returns instantly.</li>
  356. <li>when <em>millisec</em> is set to <b>osWaitForever</b> the function will wait for an infinite time until a mail slot can be allocated.</li>
  357. <li>all other values specify a time in millisecond for a timeout.</li>
  358. </ul>
  359. <dl class="section note"><dt>Note</dt><dd>The parameter <em>millisec</em> must be 0 for using this function in an ISR. </dd>
  360. <dd>
  361. <a class="el" href="functionOverview.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a> can call this function.</dd></dl>
  362. <p>A NULL pointer is returned when no memory block can be obtained or <em>queue</em> specifies an illegal parameter. </p>
  363. </div>
  364. </div>
  365. <a class="anchor" id="gaa177e7fe5820dd70d8c9e46ded131174"></a>
  366. <div class="memitem">
  367. <div class="memproto">
  368. <table class="memname">
  369. <tr>
  370. <td class="memname"><a class="el" href="cmsis__os_8h.html#a1dac049fb7725a8af8b26c71cbb373b5">osMailQId</a> osMailCreate </td>
  371. <td>(</td>
  372. <td class="paramtype">const <a class="el" href="cmsis__os_8h.html#structosMailQDef__t">osMailQDef_t</a> *&#160;</td>
  373. <td class="paramname"><em>queue_def</em>, </td>
  374. </tr>
  375. <tr>
  376. <td class="paramkey"></td>
  377. <td></td>
  378. <td class="paramtype"><a class="el" href="cmsis__os_8h.html#adfeb153a84a81309e2d958268197617f">osThreadId</a>&#160;</td>
  379. <td class="paramname"><em>thread_id</em>&#160;</td>
  380. </tr>
  381. <tr>
  382. <td></td>
  383. <td>)</td>
  384. <td></td><td></td>
  385. </tr>
  386. </table>
  387. </div><div class="memdoc">
  388. <dl class="params"><dt>Parameters</dt><dd>
  389. <table class="params">
  390. <tr><td class="paramdir">[in]</td><td class="paramname">queue_def</td><td>reference to the mail queue definition obtain with <a class="el" href="group__CMSIS__RTOS__Mail.html#gad2deeb66d51ade54e63d8f87ff2ec9d2">osMailQ</a> </td></tr>
  391. <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#gac59b5713cb083702dce759c73fd90dff">osThreadCreate</a> or <a class="el" href="group__CMSIS__RTOS__ThreadMgmt.html#gab1df2a28925862ef8f9cf4e1c995c5a7">osThreadGetId</a>) or NULL. </td></tr>
  392. </table>
  393. </dd>
  394. </dl>
  395. <dl class="section return"><dt>Returns</dt><dd>mail queue ID for reference by other functions or NULL in case of error. </dd></dl>
  396. <dl class="section note"><dt>Note</dt><dd>MUST REMAIN UNCHANGED: <b>osMailCreate</b> shall be consistent in every CMSIS-RTOS.</dd></dl>
  397. <p>Initialize and create a mail queue.</p>
  398. <dl class="section note"><dt>Note</dt><dd>Cannot be called from <a class="el" href="functionOverview.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a>.</dd></dl>
  399. <p><b>Code Example</b> </p>
  400. <div class="fragment"><div class="line"><span class="preprocessor">#include &quot;<a class="code" href="cmsis__os_8h.html">cmsis_os.h</a>&quot;</span></div>
  401. <div class="line"> </div>
  402. <div class="line"><a class="code" href="cmsis__os_8h.html#adfeb153a84a81309e2d958268197617f">osThreadId</a> tid_thread1; <span class="comment">// ID for thread 1</span></div>
  403. <div class="line"><a class="code" href="cmsis__os_8h.html#adfeb153a84a81309e2d958268197617f">osThreadId</a> tid_thread2; <span class="comment">// ID for thread 2</span></div>
  404. <div class="line"> </div>
  405. <div class="line"><span class="keyword">typedef</span> <span class="keyword">struct </span>{ <span class="comment">// Mail object structure</span></div>
  406. <div class="line"> <span class="keywordtype">float</span> voltage; <span class="comment">// AD result of measured voltage</span></div>
  407. <div class="line"> <span class="keywordtype">float</span> current; <span class="comment">// AD result of measured current</span></div>
  408. <div class="line"> <span class="keywordtype">int</span> counter; <span class="comment">// A counter value</span></div>
  409. <div class="line">} T_MEAS;</div>
  410. <div class="line"> </div>
  411. <div class="line"><a class="code" href="group__CMSIS__RTOS__Mail.html#ga58d712b16c0c6668059f509386d1e55b">osMailQDef</a>(mail, 16, T_MEAS); <span class="comment">// Define mail queue</span></div>
  412. <div class="line"><a class="code" href="cmsis__os_8h.html#a1dac049fb7725a8af8b26c71cbb373b5">osMailQId</a> mail;</div>
  413. <div class="line"> </div>
  414. <div class="line"><span class="keywordtype">void</span> send_thread (<span class="keywordtype">void</span> <span class="keyword">const</span> *argument); <span class="comment">// forward reference</span></div>
  415. <div class="line"><span class="keywordtype">void</span> recv_thread (<span class="keywordtype">void</span> <span class="keyword">const</span> *argument);</div>
  416. <div class="line"> </div>
  417. <div class="line"><a class="code" href="group__CMSIS__RTOS__ThreadMgmt.html#gaee93d929beb350f16e5cc7fa602e229f">osThreadDef</a>(send_thread, <a class="code" href="cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa45a2895ad30c79fb97de18cac7cc19f1">osPriorityNormal</a>, 1, 0); <span class="comment">// thread definitions</span></div>
  418. <div class="line"><a class="code" href="group__CMSIS__RTOS__ThreadMgmt.html#gaee93d929beb350f16e5cc7fa602e229f">osThreadDef</a>(recv_thread, <a class="code" href="cmsis__os_8h.html#ga7f2b42f1983b9107775ec2a1c69a849aa45a2895ad30c79fb97de18cac7cc19f1">osPriorityNormal</a>, 1, 2000);</div>
  419. <div class="line"> </div>
  420. <div class="line"><span class="comment">//</span></div>
  421. <div class="line"><span class="comment">// Thread 1: Send thread</span></div>
  422. <div class="line"><span class="comment">//</span></div>
  423. <div class="line"><span class="keywordtype">void</span> send_thread (<span class="keywordtype">void</span> <span class="keyword">const</span> *argument) {</div>
  424. <div class="line"> T_MEAS *mptr;</div>
  425. <div class="line"> </div>
  426. <div class="line"> mptr = <a class="code" href="group__CMSIS__RTOS__Mail.html#gadf5ce811bd6a56e617e902a1db6c2194">osMailAlloc</a>(mail, <a class="code" href="cmsis__os_8h.html#a9eb9a7a797a42e4b55eb171ecc609ddb">osWaitForever</a>); <span class="comment">// Allocate memory</span></div>
  427. <div class="line"> mptr-&gt;voltage = 223.72; <span class="comment">// Set the mail content</span></div>
  428. <div class="line"> mptr-&gt;current = 17.54;</div>
  429. <div class="line"> mptr-&gt;counter = 120786;</div>
  430. <div class="line"> <a class="code" href="group__CMSIS__RTOS__Mail.html#ga485ef6f81854ebda8ffbce4832181e02">osMailPut</a>(mail, mptr); <span class="comment">// Send Mail</span></div>
  431. <div class="line"> <a class="code" href="group__CMSIS__RTOS__Wait.html#ga02e19d5e723bfb06ba9324d625162255">osDelay</a>(100);</div>
  432. <div class="line"> </div>
  433. <div class="line"> mptr = <a class="code" href="group__CMSIS__RTOS__Mail.html#gadf5ce811bd6a56e617e902a1db6c2194">osMailAlloc</a>(mail, <a class="code" href="cmsis__os_8h.html#a9eb9a7a797a42e4b55eb171ecc609ddb">osWaitForever</a>); <span class="comment">// Allocate memory</span></div>
  434. <div class="line"> mptr-&gt;voltage = 227.23; <span class="comment">// Prepare 2nd mail</span></div>
  435. <div class="line"> mptr-&gt;current = 12.41;</div>
  436. <div class="line"> mptr-&gt;counter = 170823;</div>
  437. <div class="line"> <a class="code" href="group__CMSIS__RTOS__Mail.html#ga485ef6f81854ebda8ffbce4832181e02">osMailPut</a>(mail, mptr); <span class="comment">// Send Mail</span></div>
  438. <div class="line"> <a class="code" href="group__CMSIS__RTOS__ThreadMgmt.html#gaf13a667493c5d629a90c13e113b99233">osThreadYield</a>(); <span class="comment">// Cooperative multitasking</span></div>
  439. <div class="line"> <span class="comment">// We are done here, exit this thread</span></div>
  440. <div class="line">}</div>
  441. <div class="line"> </div>
  442. <div class="line"><span class="comment">//</span></div>
  443. <div class="line"><span class="comment">// Thread 2: Receive thread</span></div>
  444. <div class="line"><span class="comment">//</span></div>
  445. <div class="line"><span class="keywordtype">void</span> recv_thread (<span class="keywordtype">void</span> <span class="keyword">const</span> *argument) {</div>
  446. <div class="line"> T_MEAS *rptr;</div>
  447. <div class="line"> <a class="code" href="group__CMSIS__RTOS__Definitions.html#structosEvent">osEvent</a> evt;</div>
  448. <div class="line"> </div>
  449. <div class="line"> <span class="keywordflow">for</span> (;;) {</div>
  450. <div class="line"> evt = <a class="code" href="group__CMSIS__RTOS__Mail.html#gac6ad7e6e7d6c4a80e60da22c57a42ccd">osMailGet</a>(mail, <a class="code" href="cmsis__os_8h.html#a9eb9a7a797a42e4b55eb171ecc609ddb">osWaitForever</a>); <span class="comment">// wait for mail</span></div>
  451. <div class="line"> <span class="keywordflow">if</span> (evt.<a class="code" href="group__CMSIS__RTOS__Definitions.html#ad477a289f1f03ac45407b64268d707d3">status</a> == <a class="code" href="group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99ea15b12e42b42b53f35fb8a2724ad02926">osEventMail</a>) {</div>
  452. <div class="line"> rptr = evt.<a class="code" href="group__CMSIS__RTOS__Definitions.html#a0b9f8fd3645f01d8cb09cae82add2d7f">value</a>.p;</div>
  453. <div class="line"> printf (<span class="stringliteral">&quot;\nVoltage: %.2f V\n&quot;</span>, rptr-&gt;voltage);</div>
  454. <div class="line"> printf (<span class="stringliteral">&quot;Current: %.2f A\n&quot;</span>, rptr-&gt;current);</div>
  455. <div class="line"> printf (<span class="stringliteral">&quot;Number of cycles: %d\n&quot;</span>, rptr-&gt;counter);</div>
  456. <div class="line"> <a class="code" href="group__CMSIS__RTOS__Mail.html#ga27c1060cf21393f96b4fd1ed1c0167cc">osMailFree</a>(mail, rptr); <span class="comment">// free memory allocated for mail</span></div>
  457. <div class="line"> }</div>
  458. <div class="line"> }</div>
  459. <div class="line">}</div>
  460. <div class="line"> </div>
  461. <div class="line"><span class="keywordtype">void</span> StartApplication (<span class="keywordtype">void</span>) {</div>
  462. <div class="line"> mail = <a class="code" href="group__CMSIS__RTOS__Mail.html#gaa177e7fe5820dd70d8c9e46ded131174">osMailCreate</a>(<a class="code" href="group__CMSIS__RTOS__Mail.html#gad2deeb66d51ade54e63d8f87ff2ec9d2">osMailQ</a>(mail), NULL); <span class="comment">// create mail queue</span></div>
  463. <div class="line"> </div>
  464. <div class="line"> tid_thread1 = <a class="code" href="group__CMSIS__RTOS__ThreadMgmt.html#gac59b5713cb083702dce759c73fd90dff">osThreadCreate</a>(<a class="code" href="group__CMSIS__RTOS__ThreadMgmt.html#gaf0c7c6b5e09f8be198312144b5c9e453">osThread</a>(send_thread), NULL);</div>
  465. <div class="line"> tid_thread2 = <a class="code" href="group__CMSIS__RTOS__ThreadMgmt.html#gac59b5713cb083702dce759c73fd90dff">osThreadCreate</a>(<a class="code" href="group__CMSIS__RTOS__ThreadMgmt.html#gaf0c7c6b5e09f8be198312144b5c9e453">osThread</a>(recv_thread), NULL);</div>
  466. <div class="line"> :</div>
  467. <div class="line">}</div>
  468. </div><!-- fragment -->
  469. </div>
  470. </div>
  471. <a class="anchor" id="ga27c1060cf21393f96b4fd1ed1c0167cc"></a>
  472. <div class="memitem">
  473. <div class="memproto">
  474. <table class="memname">
  475. <tr>
  476. <td class="memname"><a class="el" href="group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99e">osStatus</a> osMailFree </td>
  477. <td>(</td>
  478. <td class="paramtype"><a class="el" href="cmsis__os_8h.html#a1dac049fb7725a8af8b26c71cbb373b5">osMailQId</a>&#160;</td>
  479. <td class="paramname"><em>queue_id</em>, </td>
  480. </tr>
  481. <tr>
  482. <td class="paramkey"></td>
  483. <td></td>
  484. <td class="paramtype">void *&#160;</td>
  485. <td class="paramname"><em>mail</em>&#160;</td>
  486. </tr>
  487. <tr>
  488. <td></td>
  489. <td>)</td>
  490. <td></td><td></td>
  491. </tr>
  492. </table>
  493. </div><div class="memdoc">
  494. <dl class="params"><dt>Parameters</dt><dd>
  495. <table class="params">
  496. <tr><td class="paramdir">[in]</td><td class="paramname">queue_id</td><td>mail queue ID obtained with <a class="el" href="group__CMSIS__RTOS__Mail.html#gaa177e7fe5820dd70d8c9e46ded131174">osMailCreate</a>. </td></tr>
  497. <tr><td class="paramdir">[in]</td><td class="paramname">mail</td><td>pointer to the memory block that was obtained with <a class="el" href="group__CMSIS__RTOS__Mail.html#gac6ad7e6e7d6c4a80e60da22c57a42ccd">osMailGet</a>. </td></tr>
  498. </table>
  499. </dd>
  500. </dl>
  501. <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function. </dd></dl>
  502. <dl class="section note"><dt>Note</dt><dd>MUST REMAIN UNCHANGED: <b>osMailFree</b> shall be consistent in every CMSIS-RTOS.</dd></dl>
  503. <p>Free the memory block specified by <em>mail</em> and return it to the mail queue.</p>
  504. <dl class="section note"><dt>Note</dt><dd><a class="el" href="functionOverview.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a> can call this function.</dd></dl>
  505. <p><b><a class="el" href="group__CMSIS__RTOS__Status.html">Status and Error Codes</a></b><br/>
  506. </p>
  507. <ul>
  508. <li><em>osOK:</em> the <em>mail</em> block is released.</li>
  509. <li><em>osErrorValue:</em> <em>mail</em> block does not belong to the mail queue pool.</li>
  510. <li><em>osErrorParameter:</em> the value to the parameter <em>queue_id</em> is incorrect. </li>
  511. </ul>
  512. </div>
  513. </div>
  514. <a class="anchor" id="gac6ad7e6e7d6c4a80e60da22c57a42ccd"></a>
  515. <div class="memitem">
  516. <div class="memproto">
  517. <table class="memname">
  518. <tr>
  519. <td class="memname"><a class="el" href="group__CMSIS__RTOS__Definitions.html#structosEvent">osEvent</a> osMailGet </td>
  520. <td>(</td>
  521. <td class="paramtype"><a class="el" href="cmsis__os_8h.html#a1dac049fb7725a8af8b26c71cbb373b5">osMailQId</a>&#160;</td>
  522. <td class="paramname"><em>queue_id</em>, </td>
  523. </tr>
  524. <tr>
  525. <td class="paramkey"></td>
  526. <td></td>
  527. <td class="paramtype">uint32_t&#160;</td>
  528. <td class="paramname"><em>millisec</em>&#160;</td>
  529. </tr>
  530. <tr>
  531. <td></td>
  532. <td>)</td>
  533. <td></td><td></td>
  534. </tr>
  535. </table>
  536. </div><div class="memdoc">
  537. <dl class="params"><dt>Parameters</dt><dd>
  538. <table class="params">
  539. <tr><td class="paramdir">[in]</td><td class="paramname">queue_id</td><td>mail queue ID obtained with <a class="el" href="group__CMSIS__RTOS__Mail.html#gaa177e7fe5820dd70d8c9e46ded131174">osMailCreate</a>. </td></tr>
  540. <tr><td class="paramdir">[in]</td><td class="paramname">millisec</td><td><a class="el" href="functionOverview.html#CMSIS_RTOS_TimeOutValue">Timout Value</a> or 0 in case of no time-out </td></tr>
  541. </table>
  542. </dd>
  543. </dl>
  544. <dl class="section return"><dt>Returns</dt><dd>event that contains mail information or error code. </dd></dl>
  545. <dl class="section note"><dt>Note</dt><dd>MUST REMAIN UNCHANGED: <b>osMailGet</b> shall be consistent in every CMSIS-RTOS.</dd></dl>
  546. <p>Suspend the execution of the current <b>RUNNING</b> thread until a mail arrives. When a mail is already in the queue, the function returns instantly with the mail information.</p>
  547. <p>The argument <em>millisec</em> specifies how long the system waits for a mail to arrive. While the system waits the thread that is calling this function is put into the state <b>WAITING</b>. The <em>millisec</em> timeout can have the following values:</p>
  548. <ul>
  549. <li>when <em>millisec</em> is 0, the function returns instantly.</li>
  550. <li>when <em>millisec</em> is set to <b>osWaitForever</b> the function will wait for an infinite time until a mail arrives.</li>
  551. <li>all other values specify a time in millisecond for a timeout.</li>
  552. </ul>
  553. <dl class="section note"><dt>Note</dt><dd>The parameter <em>millisec</em> must be 0 for using this function in an ISR. </dd>
  554. <dd>
  555. <a class="el" href="functionOverview.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a> can call this function.</dd></dl>
  556. <p><b><a class="el" href="group__CMSIS__RTOS__Status.html">Status and Error Codes</a></b><br/>
  557. </p>
  558. <ul>
  559. <li><em>osOK:</em> no mail is available in the queue and no timeout was specified</li>
  560. <li><em>osEventTimeout:</em> no mail has arrived during the given timeout period.</li>
  561. <li><em>osEventMail:</em> mail received, <em>value.p</em> contains the pointer to mail content.</li>
  562. <li><em>osErrorParameter:</em> a parameter is invalid or outside of a permitted range. </li>
  563. </ul>
  564. </div>
  565. </div>
  566. <a class="anchor" id="ga485ef6f81854ebda8ffbce4832181e02"></a>
  567. <div class="memitem">
  568. <div class="memproto">
  569. <table class="memname">
  570. <tr>
  571. <td class="memname"><a class="el" href="group__CMSIS__RTOS__Status.html#gae2e091fefc4c767117727bd5aba4d99e">osStatus</a> osMailPut </td>
  572. <td>(</td>
  573. <td class="paramtype"><a class="el" href="cmsis__os_8h.html#a1dac049fb7725a8af8b26c71cbb373b5">osMailQId</a>&#160;</td>
  574. <td class="paramname"><em>queue_id</em>, </td>
  575. </tr>
  576. <tr>
  577. <td class="paramkey"></td>
  578. <td></td>
  579. <td class="paramtype">void *&#160;</td>
  580. <td class="paramname"><em>mail</em>&#160;</td>
  581. </tr>
  582. <tr>
  583. <td></td>
  584. <td>)</td>
  585. <td></td><td></td>
  586. </tr>
  587. </table>
  588. </div><div class="memdoc">
  589. <dl class="params"><dt>Parameters</dt><dd>
  590. <table class="params">
  591. <tr><td class="paramdir">[in]</td><td class="paramname">queue_id</td><td>mail queue ID obtained with <a class="el" href="group__CMSIS__RTOS__Mail.html#gaa177e7fe5820dd70d8c9e46ded131174">osMailCreate</a>. </td></tr>
  592. <tr><td class="paramdir">[in]</td><td class="paramname">mail</td><td>memory block previously allocated with <a class="el" href="group__CMSIS__RTOS__Mail.html#gadf5ce811bd6a56e617e902a1db6c2194">osMailAlloc</a> or <a class="el" href="group__CMSIS__RTOS__Mail.html#ga8fde74f6fe5b9e88f75cc5eb8f2124fd">osMailCAlloc</a>. </td></tr>
  593. </table>
  594. </dd>
  595. </dl>
  596. <dl class="section return"><dt>Returns</dt><dd>status code that indicates the execution status of the function. </dd></dl>
  597. <dl class="section note"><dt>Note</dt><dd>MUST REMAIN UNCHANGED: <b>osMailPut</b> shall be consistent in every CMSIS-RTOS.</dd></dl>
  598. <p>Put the memory block specified with <em>mail</em> into the mail queue specified by <em>queue</em>.</p>
  599. <p><b><a class="el" href="group__CMSIS__RTOS__Status.html">Status and Error Codes</a></b><br/>
  600. </p>
  601. <ul>
  602. <li><em>osOK:</em> the message is put into the queue.</li>
  603. <li><em>osErrorValue:</em> <em>mail</em> was previously not allocated as memory slot.</li>
  604. <li><em>osErrorParameter:</em> a parameter is invalid or outside of a permitted range.</li>
  605. </ul>
  606. <dl class="section note"><dt>Note</dt><dd><a class="el" href="functionOverview.html#CMSIS_RTOS_ISR_Calls">Interrupt Service Routines</a> can call this function. </dd></dl>
  607. </div>
  608. </div>
  609. </div><!-- contents -->
  610. </div><!-- doc-content -->
  611. <!-- start footer part -->
  612. <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  613. <ul>
  614. <li class="footer">Generated on Thu Apr 9 2020 15:49:56 for CMSIS-RTOS Version 1.03 by Arm Ltd. All rights reserved.
  615. <!--
  616. <a href="http://www.doxygen.org/index.html">
  617. <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
  618. -->
  619. </li>
  620. </ul>
  621. </div>
  622. </body>
  623. </html>