<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.20"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Labor04: croutine.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Labor04
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.20 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('croutine_8h_source.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">croutine.h</div>  </div>
</div><!--header-->
<div class="contents">
<a href="croutine_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * FreeRTOS Kernel V10.0.0</span></div>
<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved.</span></div>
<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy of</span></div>
<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * this software and associated documentation files (the &quot;Software&quot;), to deal in</span></div>
<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * the Software without restriction, including without limitation the rights to</span></div>
<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of</span></div>
<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> * the Software, and to permit persons to whom the Software is furnished to do so,</span></div>
<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * subject to the following conditions:</span></div>
<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included in all</span></div>
<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * copies or substantial portions of the Software. If you wish to use our Amazon</span></div>
<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * FreeRTOS name, please do so in a fair use way that does not cause confusion.</span></div>
<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span></div>
<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS</span></div>
<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR</span></div>
<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span></div>
<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> * http://www.FreeRTOS.org</span></div>
<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> * http://aws.amazon.com/freertos</span></div>
<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> * 1 tab == 4 spaces!</span></div>
<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#ifndef CO_ROUTINE_H</span></div>
<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#define CO_ROUTINE_H</span></div>
<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#ifndef INC_FREERTOS_H</span></div>
<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="preprocessor">#error &quot;include FreeRTOS.h must appear in source files before include croutine.h&quot;</span></div>
<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="list_8h.html">list.h</a>&quot;</span></div>
<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment">/* Used to hide the implementation of the co-routine control block.  The</span></div>
<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment">control block structure however has to be included in the header due to</span></div>
<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment">the macro implementation of the co-routine functionality. */</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="croutine_8h.html#a33b9d058688c92258155b5756d9936dd">   45</a></span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">void</span> * <a class="code" href="croutine_8h.html#a33b9d058688c92258155b5756d9936dd">CoRoutineHandle_t</a>;</div>
<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment">/* Defines the prototype to which co-routine functions must conform. */</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="croutine_8h.html#a397a7505718dd366d8411ce324c49758">   48</a></span>&#160;<span class="keyword">typedef</span> void (*<a class="code" href="croutine_8h.html#a397a7505718dd366d8411ce324c49758">crCOROUTINE_CODE</a>)( <a class="code" href="croutine_8h.html#a33b9d058688c92258155b5756d9936dd">CoRoutineHandle_t</a>, <a class="code" href="portmacro_8h.html#a646f89d4298e4f5afd522202b11cb2e6">UBaseType_t</a> );</div>
<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="structcor_co_routine_control_block.html">   50</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structcor_co_routine_control_block.html">corCoRoutineControlBlock</a></div>
<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;{</div>
<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="structcor_co_routine_control_block.html#aa842d81ed7b4c345cf52cde20c5b22e5">   52</a></span>&#160;    <a class="code" href="croutine_8h.html#a397a7505718dd366d8411ce324c49758">crCOROUTINE_CODE</a>    <a class="code" href="structcor_co_routine_control_block.html#aa842d81ed7b4c345cf52cde20c5b22e5">pxCoRoutineFunction</a>;</div>
<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="structcor_co_routine_control_block.html#ad91115e6e382ba8961310c4559abc7d2">   53</a></span>&#160;    <a class="code" href="structx_l_i_s_t___i_t_e_m.html">ListItem_t</a>          <a class="code" href="structcor_co_routine_control_block.html#ad91115e6e382ba8961310c4559abc7d2">xGenericListItem</a>;   <span class="comment">/*&lt; List item used to place the CRCB in ready and blocked queues. */</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="structcor_co_routine_control_block.html#a139605d93d834601f34be927ecba3a15">   54</a></span>&#160;    <a class="code" href="structx_l_i_s_t___i_t_e_m.html">ListItem_t</a>          <a class="code" href="structcor_co_routine_control_block.html#a139605d93d834601f34be927ecba3a15">xEventListItem</a>;     <span class="comment">/*&lt; List item used to place the CRCB in event lists. */</span></div>
<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="structcor_co_routine_control_block.html#a0befed3dd0fe55b4314158f4814f50ae">   55</a></span>&#160;    <a class="code" href="portmacro_8h.html#a646f89d4298e4f5afd522202b11cb2e6">UBaseType_t</a>         <a class="code" href="structcor_co_routine_control_block.html#a0befed3dd0fe55b4314158f4814f50ae">uxPriority</a>;         <span class="comment">/*&lt; The priority of the co-routine in relation to other co-routines. */</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="structcor_co_routine_control_block.html#a0a9f1b8d3c0676d256f119fdc5fddfb5">   56</a></span>&#160;    <a class="code" href="portmacro_8h.html#a646f89d4298e4f5afd522202b11cb2e6">UBaseType_t</a>         <a class="code" href="structcor_co_routine_control_block.html#a0a9f1b8d3c0676d256f119fdc5fddfb5">uxIndex</a>;            <span class="comment">/*&lt; Used to distinguish between co-routines when multiple co-routines use the same co-routine function. */</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="structcor_co_routine_control_block.html#a40a191332ff98e1969a821b870f59531">   57</a></span>&#160;    uint16_t            <a class="code" href="structcor_co_routine_control_block.html#a40a191332ff98e1969a821b870f59531">uxState</a>;            <span class="comment">/*&lt; Used internally by the co-routine implementation. */</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="croutine_8h.html#a1c15f304ffe02d0777ae2509b3658e6f">   58</a></span>&#160;} <a class="code" href="croutine_8h.html#a1c15f304ffe02d0777ae2509b3658e6f">CRCB_t</a>; <span class="comment">/* Co-routine control block.  Note must be identical in size down to uxPriority with TCB_t. */</span></div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160; </div>
<div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="croutine_8h.html#ae0e03637a3d2c134e9b52006f353d8c0">  132</a></span>&#160;<a class="code" href="portmacro_8h.html#a46fb21e00ae0729d7515c0fbf2269796">BaseType_t</a> <a class="code" href="croutine_8h.html#ae0e03637a3d2c134e9b52006f353d8c0">xCoRoutineCreate</a>( <a class="code" href="croutine_8h.html#a397a7505718dd366d8411ce324c49758">crCOROUTINE_CODE</a> pxCoRoutineCode, <a class="code" href="portmacro_8h.html#a646f89d4298e4f5afd522202b11cb2e6">UBaseType_t</a> uxPriority, <a class="code" href="portmacro_8h.html#a646f89d4298e4f5afd522202b11cb2e6">UBaseType_t</a> uxIndex );</div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160; </div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160; </div>
<div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="croutine_8h.html#a5333c649a2c063006ca3cd7a3b5b9240">  174</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="croutine_8h.html#a5333c649a2c063006ca3cd7a3b5b9240">vCoRoutineSchedule</a>( <span class="keywordtype">void</span> );</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160; </div>
<div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="croutine_8h.html#a19a57a201a325e8af1207ed68c4aedde">  205</a></span>&#160;<span class="preprocessor">#define crSTART( pxCRCB ) switch( ( ( CRCB_t * )( pxCRCB ) )-&gt;uxState ) { case 0:</span></div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160; </div>
<div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="croutine_8h.html#ae6038cc976689b50000475ebfc4e2f23">  236</a></span>&#160;<span class="preprocessor">#define crEND() }</span></div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160; </div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;<span class="comment"> * These macros are intended for internal use by the co-routine implementation</span></div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;<span class="comment"> * only.  The macros should not be used directly by application writers.</span></div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="croutine_8h.html#aa8ec8c0192674b896b04df1f82d679f7">  242</a></span>&#160;<span class="preprocessor">#define crSET_STATE0( xHandle ) ( ( CRCB_t * )( xHandle ) )-&gt;uxState = (__LINE__ * 2); return; case (__LINE__ * 2):</span></div>
<div class="line"><a name="l00243"></a><span class="lineno"><a class="line" href="croutine_8h.html#a345ffc731dc40152bfb1162453ecc1f7">  243</a></span>&#160;<span class="preprocessor">#define crSET_STATE1( xHandle ) ( ( CRCB_t * )( xHandle ) )-&gt;uxState = ((__LINE__ * 2)+1); return; case ((__LINE__ * 2)+1):</span></div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160; </div>
<div class="line"><a name="l00291"></a><span class="lineno"><a class="line" href="croutine_8h.html#a05a06feb11028f2d1d440ea335f562ba">  291</a></span>&#160;<span class="preprocessor">#define crDELAY( xHandle, xTicksToDelay )                                               \</span></div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;<span class="preprocessor">    if( ( xTicksToDelay ) &gt; 0 )                                                         \</span></div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;<span class="preprocessor">    {                                                                                   \</span></div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;<span class="preprocessor">        vCoRoutineAddToDelayedList( ( xTicksToDelay ), NULL );                          \</span></div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;<span class="preprocessor">    }                                                                                   \</span></div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;<span class="preprocessor">    crSET_STATE0( ( xHandle ) );</span></div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160; </div>
<div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="croutine_8h.html#a26af3d36f22a04168eebdf5b08465d6e">  381</a></span>&#160;<span class="preprocessor">#define crQUEUE_SEND( xHandle, pxQueue, pvItemToQueue, xTicksToWait, pxResult )         \</span></div>
<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;<span class="preprocessor">{                                                                                       \</span></div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;<span class="preprocessor">    *( pxResult ) = xQueueCRSend( ( pxQueue) , ( pvItemToQueue) , ( xTicksToWait ) );   \</span></div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;<span class="preprocessor">    if( *( pxResult ) == errQUEUE_BLOCKED )                                             \</span></div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;<span class="preprocessor">    {                                                                                   \</span></div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;<span class="preprocessor">        crSET_STATE0( ( xHandle ) );                                                    \</span></div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;<span class="preprocessor">        *pxResult = xQueueCRSend( ( pxQueue ), ( pvItemToQueue ), 0 );                  \</span></div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;<span class="preprocessor">    }                                                                                   \</span></div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;<span class="preprocessor">    if( *pxResult == errQUEUE_YIELD )                                                   \</span></div>
<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;<span class="preprocessor">    {                                                                                   \</span></div>
<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;<span class="preprocessor">        crSET_STATE1( ( xHandle ) );                                                    \</span></div>
<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;<span class="preprocessor">        *pxResult = pdPASS;                                                             \</span></div>
<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;<span class="preprocessor">    }                                                                                   \</span></div>
<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;<span class="preprocessor">}</span></div>
<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160; </div>
<div class="line"><a name="l00473"></a><span class="lineno"><a class="line" href="croutine_8h.html#a586d57fd9a3e2aa5ae66484ed3be36c9">  473</a></span>&#160;<span class="preprocessor">#define crQUEUE_RECEIVE( xHandle, pxQueue, pvBuffer, xTicksToWait, pxResult )           \</span></div>
<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;<span class="preprocessor">{                                                                                       \</span></div>
<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;<span class="preprocessor">    *( pxResult ) = xQueueCRReceive( ( pxQueue) , ( pvBuffer ), ( xTicksToWait ) );     \</span></div>
<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;<span class="preprocessor">    if( *( pxResult ) == errQUEUE_BLOCKED )                                             \</span></div>
<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;<span class="preprocessor">    {                                                                                   \</span></div>
<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;<span class="preprocessor">        crSET_STATE0( ( xHandle ) );                                                    \</span></div>
<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;<span class="preprocessor">        *( pxResult ) = xQueueCRReceive( ( pxQueue) , ( pvBuffer ), 0 );                \</span></div>
<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;<span class="preprocessor">    }                                                                                   \</span></div>
<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;<span class="preprocessor">    if( *( pxResult ) == errQUEUE_YIELD )                                               \</span></div>
<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;<span class="preprocessor">    {                                                                                   \</span></div>
<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;<span class="preprocessor">        crSET_STATE1( ( xHandle ) );                                                    \</span></div>
<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;<span class="preprocessor">        *( pxResult ) = pdPASS;                                                         \</span></div>
<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;<span class="preprocessor">    }                                                                                   \</span></div>
<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;<span class="preprocessor">}</span></div>
<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160; </div>
<div class="line"><a name="l00582"></a><span class="lineno"><a class="line" href="croutine_8h.html#ac8eb0a81c5cf69de7e4edd73ce44a3be">  582</a></span>&#160;<span class="preprocessor">#define crQUEUE_SEND_FROM_ISR( pxQueue, pvItemToQueue, xCoRoutinePreviouslyWoken ) xQueueCRSendFromISR( ( pxQueue ), ( pvItemToQueue ), ( xCoRoutinePreviouslyWoken ) )</span></div>
<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160; </div>
<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160; </div>
<div class="line"><a name="l00695"></a><span class="lineno"><a class="line" href="croutine_8h.html#a9c0fa977ca69adbddb4811affa2a71f7">  695</a></span>&#160;<span class="preprocessor">#define crQUEUE_RECEIVE_FROM_ISR( pxQueue, pvBuffer, pxCoRoutineWoken ) xQueueCRReceiveFromISR( ( pxQueue ), ( pvBuffer ), ( pxCoRoutineWoken ) )</span></div>
<div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160; </div>
<div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;<span class="comment"> * This function is intended for internal use by the co-routine macros only.</span></div>
<div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;<span class="comment"> * The macro nature of the co-routine implementation requires that the</span></div>
<div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;<span class="comment"> * prototype appears here.  The function should not be used by application</span></div>
<div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;<span class="comment"> * writers.</span></div>
<div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;<span class="comment"> * Removes the current co-routine from its ready list and places it in the</span></div>
<div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;<span class="comment"> * appropriate delayed list.</span></div>
<div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00706"></a><span class="lineno"><a class="line" href="croutine_8h.html#a6b5b1c5857d38b79c96636754208e32d">  706</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="croutine_8h.html#a6b5b1c5857d38b79c96636754208e32d">vCoRoutineAddToDelayedList</a>( <a class="code" href="portmacro_8h.html#aa69c48c6e902ce54f70886e6573c92a9">TickType_t</a> xTicksToDelay, <a class="code" href="structx_l_i_s_t.html">List_t</a> *pxEventList );</div>
<div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160; </div>
<div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;<span class="comment"> * This function is intended for internal use by the queue implementation only.</span></div>
<div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;<span class="comment"> * The function should not be used by application writers.</span></div>
<div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;<span class="comment"> * Removes the highest priority co-routine from the event list and places it in</span></div>
<div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;<span class="comment"> * the pending ready list.</span></div>
<div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00715"></a><span class="lineno"><a class="line" href="croutine_8h.html#af2a96db518b18f5a7e1cd2fdf3c82873">  715</a></span>&#160;<a class="code" href="portmacro_8h.html#a46fb21e00ae0729d7515c0fbf2269796">BaseType_t</a> <a class="code" href="croutine_8h.html#af2a96db518b18f5a7e1cd2fdf3c82873">xCoRoutineRemoveFromEventList</a>( <span class="keyword">const</span> <a class="code" href="structx_l_i_s_t.html">List_t</a> *pxEventList );</div>
<div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160; </div>
<div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
<div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;}</div>
<div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160; </div>
<div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* CO_ROUTINE_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<div class="ttc" id="alist_8h_html_acc01a08e534b54fe438847ef02e5060a"><div class="ttname"><a href="list_8h.html#acc01a08e534b54fe438847ef02e5060a">listSET_LIST_ITEM_OWNER</a></div><div class="ttdeci">#define listSET_LIST_ITEM_OWNER(pxListItem, pxOwner)</div><div class="ttdef"><b>Definition:</b> list.h:180</div></div>
<div class="ttc" id="acroutine_8h_html"><div class="ttname"><a href="croutine_8h.html">croutine.h</a></div></div>
<div class="ttc" id="atask_8h_html"><div class="ttname"><a href="task_8h.html">task.h</a></div></div>
<div class="ttc" id="astructx_l_i_s_t_html"><div class="ttname"><a href="structx_l_i_s_t.html">xLIST</a></div><div class="ttdef"><b>Definition:</b> list.h:165</div></div>
<div class="ttc" id="acroutine_8h_html_a33b9d058688c92258155b5756d9936dd"><div class="ttname"><a href="croutine_8h.html#a33b9d058688c92258155b5756d9936dd">CoRoutineHandle_t</a></div><div class="ttdeci">void * CoRoutineHandle_t</div><div class="ttdef"><b>Definition:</b> croutine.h:45</div></div>
<div class="ttc" id="alist_8c_html_aa0831d347bba16bfbe524f4faa790b9d"><div class="ttname"><a href="list_8c.html#aa0831d347bba16bfbe524f4faa790b9d">vListInitialise</a></div><div class="ttdeci">void vListInitialise(List_t *const pxList)</div><div class="ttdef"><b>Definition:</b> list.c:38</div></div>
<div class="ttc" id="astructcor_co_routine_control_block_html_a40a191332ff98e1969a821b870f59531"><div class="ttname"><a href="structcor_co_routine_control_block.html#a40a191332ff98e1969a821b870f59531">corCoRoutineControlBlock::uxState</a></div><div class="ttdeci">uint16_t uxState</div><div class="ttdef"><b>Definition:</b> croutine.h:57</div></div>
<div class="ttc" id="a_free_r_t_o_s_config_8h_html_ae8f3fd645e6e78dfeb8a6e874af6195a"><div class="ttname"><a href="_free_r_t_o_s_config_8h.html#ae8f3fd645e6e78dfeb8a6e874af6195a">configMAX_CO_ROUTINE_PRIORITIES</a></div><div class="ttdeci">#define configMAX_CO_ROUTINE_PRIORITIES</div><div class="ttdef"><b>Definition:</b> FreeRTOSConfig.h:21</div></div>
<div class="ttc" id="astructx_l_i_s_t___i_t_e_m_html"><div class="ttname"><a href="structx_l_i_s_t___i_t_e_m.html">xLIST_ITEM</a></div><div class="ttdef"><b>Definition:</b> list.h:141</div></div>
<div class="ttc" id="aprojdefs_8h_html_a0b024e12cbca6f5018f5f1a43818b03d"><div class="ttname"><a href="projdefs_8h.html#a0b024e12cbca6f5018f5f1a43818b03d">errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY</a></div><div class="ttdeci">#define errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY</div><div class="ttdef"><b>Definition:</b> projdefs.h:54</div></div>
<div class="ttc" id="acroutine_8h_html_a6b5b1c5857d38b79c96636754208e32d"><div class="ttname"><a href="croutine_8h.html#a6b5b1c5857d38b79c96636754208e32d">vCoRoutineAddToDelayedList</a></div><div class="ttdeci">void vCoRoutineAddToDelayedList(TickType_t xTicksToDelay, List_t *pxEventList)</div></div>
<div class="ttc" id="alist_8c_html_a274fdced76bbdd9d8a4c4840ded2920c"><div class="ttname"><a href="list_8c.html#a274fdced76bbdd9d8a4c4840ded2920c">uxListRemove</a></div><div class="ttdeci">UBaseType_t uxListRemove(ListItem_t *const pxItemToRemove)</div><div class="ttdef"><b>Definition:</b> list.c:171</div></div>
<div class="ttc" id="alist_8h_html_a715561302af8cb5b74416b23ce4e999d"><div class="ttname"><a href="list_8h.html#a715561302af8cb5b74416b23ce4e999d">listGET_OWNER_OF_HEAD_ENTRY</a></div><div class="ttdeci">#define listGET_OWNER_OF_HEAD_ENTRY(pxList)</div><div class="ttdef"><b>Definition:</b> list.h:307</div></div>
<div class="ttc" id="aprojdefs_8h_html_a07848d3078849bd32353c69d30a479b3"><div class="ttname"><a href="projdefs_8h.html#a07848d3078849bd32353c69d30a479b3">pdPASS</a></div><div class="ttdeci">#define pdPASS</div><div class="ttdef"><b>Definition:</b> projdefs.h:48</div></div>
<div class="ttc" id="aportmacro_8h_html_aa69c48c6e902ce54f70886e6573c92a9"><div class="ttname"><a href="portmacro_8h.html#aa69c48c6e902ce54f70886e6573c92a9">TickType_t</a></div><div class="ttdeci">uint32_t TickType_t</div><div class="ttdef"><b>Definition:</b> portmacro.h:64</div></div>
<div class="ttc" id="astructx_l_i_s_t___i_t_e_m_html_a0a7b95bc338d7d9df18e10607893d103"><div class="ttname"><a href="structx_l_i_s_t___i_t_e_m.html#a0a7b95bc338d7d9df18e10607893d103">xLIST_ITEM::pvContainer</a></div><div class="ttdeci">void *configLIST_VOLATILE pvContainer</div><div class="ttdef"><b>Definition:</b> list.h:147</div></div>
<div class="ttc" id="acroutine_8h_html_ae0e03637a3d2c134e9b52006f353d8c0"><div class="ttname"><a href="croutine_8h.html#ae0e03637a3d2c134e9b52006f353d8c0">xCoRoutineCreate</a></div><div class="ttdeci">BaseType_t xCoRoutineCreate(crCOROUTINE_CODE pxCoRoutineCode, UBaseType_t uxPriority, UBaseType_t uxIndex)</div></div>
<div class="ttc" id="astructcor_co_routine_control_block_html"><div class="ttname"><a href="structcor_co_routine_control_block.html">corCoRoutineControlBlock</a></div><div class="ttdef"><b>Definition:</b> croutine.h:51</div></div>
<div class="ttc" id="alist_8h_html_aa50d09950abc602741d7ebe8387f4e1a"><div class="ttname"><a href="list_8h.html#aa50d09950abc602741d7ebe8387f4e1a">listGET_LIST_ITEM_VALUE</a></div><div class="ttdeci">#define listGET_LIST_ITEM_VALUE(pxListItem)</div><div class="ttdef"><b>Definition:</b> list.h:208</div></div>
<div class="ttc" id="alist_8h_html_a83e95e61652f032fdc26aa622f5e2610"><div class="ttname"><a href="list_8h.html#a83e95e61652f032fdc26aa622f5e2610">listSET_LIST_ITEM_VALUE</a></div><div class="ttdeci">#define listSET_LIST_ITEM_VALUE(pxListItem, xValue)</div><div class="ttdef"><b>Definition:</b> list.h:198</div></div>
<div class="ttc" id="astructcor_co_routine_control_block_html_a0a9f1b8d3c0676d256f119fdc5fddfb5"><div class="ttname"><a href="structcor_co_routine_control_block.html#a0a9f1b8d3c0676d256f119fdc5fddfb5">corCoRoutineControlBlock::uxIndex</a></div><div class="ttdeci">UBaseType_t uxIndex</div><div class="ttdef"><b>Definition:</b> croutine.h:56</div></div>
<div class="ttc" id="astructcor_co_routine_control_block_html_a139605d93d834601f34be927ecba3a15"><div class="ttname"><a href="structcor_co_routine_control_block.html#a139605d93d834601f34be927ecba3a15">corCoRoutineControlBlock::xEventListItem</a></div><div class="ttdeci">ListItem_t xEventListItem</div><div class="ttdef"><b>Definition:</b> croutine.h:54</div></div>
<div class="ttc" id="aprojdefs_8h_html_aa56260e937e7e203026707e5ba944273"><div class="ttname"><a href="projdefs_8h.html#aa56260e937e7e203026707e5ba944273">pdFALSE</a></div><div class="ttdeci">#define pdFALSE</div><div class="ttdef"><b>Definition:</b> projdefs.h:45</div></div>
<div class="ttc" id="alist_8c_html_a3240bc0f43fcf755be02bfc6de7dc6ef"><div class="ttname"><a href="list_8c.html#a3240bc0f43fcf755be02bfc6de7dc6ef">vListInsertEnd</a></div><div class="ttdeci">void vListInsertEnd(List_t *const pxList, ListItem_t *const pxNewListItem)</div><div class="ttdef"><b>Definition:</b> list.c:75</div></div>
<div class="ttc" id="aportmacro_8h_html_a646f89d4298e4f5afd522202b11cb2e6"><div class="ttname"><a href="portmacro_8h.html#a646f89d4298e4f5afd522202b11cb2e6">UBaseType_t</a></div><div class="ttdeci">unsigned long UBaseType_t</div><div class="ttdef"><b>Definition:</b> portmacro.h:58</div></div>
<div class="ttc" id="aportmacro_8h_html_a6e3d10ee1a0734a647ca192523c2cfc1"><div class="ttname"><a href="portmacro_8h.html#a6e3d10ee1a0734a647ca192523c2cfc1">portDISABLE_INTERRUPTS</a></div><div class="ttdeci">#define portDISABLE_INTERRUPTS()</div><div class="ttdef"><b>Definition:</b> portmacro.h:105</div></div>
<div class="ttc" id="alist_8h_html_aaba6eb05d67ebc8026bea29193eca28f"><div class="ttname"><a href="list_8h.html#aaba6eb05d67ebc8026bea29193eca28f">listLIST_IS_EMPTY</a></div><div class="ttdeci">#define listLIST_IS_EMPTY(pxList)</div><div class="ttdef"><b>Definition:</b> list.h:250</div></div>
<div class="ttc" id="alist_8c_html_a28faa70d3ec4b4f39e53b0fc52d62ecf"><div class="ttname"><a href="list_8c.html#a28faa70d3ec4b4f39e53b0fc52d62ecf">vListInsert</a></div><div class="ttdeci">void vListInsert(List_t *const pxList, ListItem_t *const pxNewListItem)</div><div class="ttdef"><b>Definition:</b> list.c:104</div></div>
<div class="ttc" id="a_free_r_t_o_s_8h_html"><div class="ttname"><a href="_free_r_t_o_s_8h.html">FreeRTOS.h</a></div></div>
<div class="ttc" id="astructcor_co_routine_control_block_html_ad91115e6e382ba8961310c4559abc7d2"><div class="ttname"><a href="structcor_co_routine_control_block.html#ad91115e6e382ba8961310c4559abc7d2">corCoRoutineControlBlock::xGenericListItem</a></div><div class="ttdeci">ListItem_t xGenericListItem</div><div class="ttdef"><b>Definition:</b> croutine.h:53</div></div>
<div class="ttc" id="aportmacro_8h_html_abc47e85a6befbb47961ad5ee7aa57173"><div class="ttname"><a href="portmacro_8h.html#abc47e85a6befbb47961ad5ee7aa57173">portENABLE_INTERRUPTS</a></div><div class="ttdeci">#define portENABLE_INTERRUPTS()</div><div class="ttdef"><b>Definition:</b> portmacro.h:106</div></div>
<div class="ttc" id="astructcor_co_routine_control_block_html_a0befed3dd0fe55b4314158f4814f50ae"><div class="ttname"><a href="structcor_co_routine_control_block.html#a0befed3dd0fe55b4314158f4814f50ae">corCoRoutineControlBlock::uxPriority</a></div><div class="ttdeci">UBaseType_t uxPriority</div><div class="ttdef"><b>Definition:</b> croutine.h:55</div></div>
<div class="ttc" id="astructcor_co_routine_control_block_html_aa842d81ed7b4c345cf52cde20c5b22e5"><div class="ttname"><a href="structcor_co_routine_control_block.html#aa842d81ed7b4c345cf52cde20c5b22e5">corCoRoutineControlBlock::pxCoRoutineFunction</a></div><div class="ttdeci">crCOROUTINE_CODE pxCoRoutineFunction</div><div class="ttdef"><b>Definition:</b> croutine.h:52</div></div>
<div class="ttc" id="aportmacro_8h_html_a46fb21e00ae0729d7515c0fbf2269796"><div class="ttname"><a href="portmacro_8h.html#a46fb21e00ae0729d7515c0fbf2269796">BaseType_t</a></div><div class="ttdeci">long BaseType_t</div><div class="ttdef"><b>Definition:</b> portmacro.h:57</div></div>
<div class="ttc" id="aprojdefs_8h_html_af268cf937960eb029256bd9c4d949fbe"><div class="ttname"><a href="projdefs_8h.html#af268cf937960eb029256bd9c4d949fbe">pdTRUE</a></div><div class="ttdeci">#define pdTRUE</div><div class="ttdef"><b>Definition:</b> projdefs.h:46</div></div>
<div class="ttc" id="atask_8h_html_a753ecfe23e7386066ecccad5d16422f7"><div class="ttname"><a href="task_8h.html#a753ecfe23e7386066ecccad5d16422f7">xTaskGetTickCount</a></div><div class="ttdeci">TickType_t xTaskGetTickCount(void) PRIVILEGED_FUNCTION</div><div class="ttdef"><b>Definition:</b> tasks.c:2214</div></div>
<div class="ttc" id="acroutine_8h_html_a5333c649a2c063006ca3cd7a3b5b9240"><div class="ttname"><a href="croutine_8h.html#a5333c649a2c063006ca3cd7a3b5b9240">vCoRoutineSchedule</a></div><div class="ttdeci">void vCoRoutineSchedule(void)</div></div>
<div class="ttc" id="alist_8h_html_a275d9855e9b71652e2b8f6e2ed62aadd"><div class="ttname"><a href="list_8h.html#a275d9855e9b71652e2b8f6e2ed62aadd">listGET_OWNER_OF_NEXT_ENTRY</a></div><div class="ttdeci">#define listGET_OWNER_OF_NEXT_ENTRY(pxTCB, pxList)</div><div class="ttdef"><b>Definition:</b> list.h:277</div></div>
<div class="ttc" id="acroutine_8h_html_a397a7505718dd366d8411ce324c49758"><div class="ttname"><a href="croutine_8h.html#a397a7505718dd366d8411ce324c49758">crCOROUTINE_CODE</a></div><div class="ttdeci">void(* crCOROUTINE_CODE)(CoRoutineHandle_t, UBaseType_t)</div><div class="ttdef"><b>Definition:</b> croutine.h:48</div></div>
<div class="ttc" id="acroutine_8h_html_a1c15f304ffe02d0777ae2509b3658e6f"><div class="ttname"><a href="croutine_8h.html#a1c15f304ffe02d0777ae2509b3658e6f">CRCB_t</a></div><div class="ttdeci">struct corCoRoutineControlBlock CRCB_t</div></div>
<div class="ttc" id="acroutine_8h_html_af2a96db518b18f5a7e1cd2fdf3c82873"><div class="ttname"><a href="croutine_8h.html#af2a96db518b18f5a7e1cd2fdf3c82873">xCoRoutineRemoveFromEventList</a></div><div class="ttdeci">BaseType_t xCoRoutineRemoveFromEventList(const List_t *pxEventList)</div></div>
<div class="ttc" id="alist_8h_html"><div class="ttname"><a href="list_8h.html">list.h</a></div></div>
<div class="ttc" id="alist_8c_html_a43e37223a86f5d0688ac4470d3106e87"><div class="ttname"><a href="list_8c.html#a43e37223a86f5d0688ac4470d3106e87">vListInitialiseItem</a></div><div class="ttdeci">void vListInitialiseItem(ListItem_t *const pxItem)</div><div class="ttdef"><b>Definition:</b> list.c:63</div></div>
<div class="ttc" id="aheap__1_8c_html_a0379669d07d76cc81e3028123113b271"><div class="ttname"><a href="heap__1_8c.html#a0379669d07d76cc81e3028123113b271">pvPortMalloc</a></div><div class="ttdeci">void * pvPortMalloc(size_t xWantedSize)</div><div class="ttdef"><b>Definition:</b> heap_1.c:71</div></div>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="croutine_8h.html">croutine.h</a></li>
    <li class="footer">Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20 </li>
  </ul>
</div>
</body>
</html>