MCB1700_Welcome/Doxygen/html/group__cr_q_u_e_u_e___s_e_n...

150 lines
8.3 KiB
HTML

<!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: crQUEUE_SEND_FROM_ISR</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('group__cr_q_u_e_u_e___s_e_n_d___f_r_o_m___i_s_r.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">crQUEUE_SEND_FROM_ISR</div> </div>
</div><!--header-->
<div class="contents">
<p>croutine. h </p><pre>
crQUEUE_SEND_FROM_ISR(
QueueHandle_t pxQueue,
void *pvItemToQueue,
BaseType_t xCoRoutinePreviouslyWoken
)</pre><p>The macro's <a class="el" href="croutine_8h.html#ac8eb0a81c5cf69de7e4edd73ce44a3be">crQUEUE_SEND_FROM_ISR()</a> and <a class="el" href="croutine_8h.html#a9c0fa977ca69adbddb4811affa2a71f7">crQUEUE_RECEIVE_FROM_ISR()</a> are the co-routine equivalent to the <a class="el" href="queue_8h.html#a21d5919ed26c21d121df4a4debeb643c">xQueueSendFromISR()</a> and <a class="el" href="queue_8c.html#ac61ec62828e70ed35d18559a35550462">xQueueReceiveFromISR()</a> functions used by tasks.</p>
<p><a class="el" href="croutine_8h.html#ac8eb0a81c5cf69de7e4edd73ce44a3be">crQUEUE_SEND_FROM_ISR()</a> and <a class="el" href="croutine_8h.html#a9c0fa977ca69adbddb4811affa2a71f7">crQUEUE_RECEIVE_FROM_ISR()</a> can only be used to pass data between a co-routine and and ISR, whereas <a class="el" href="queue_8h.html#a21d5919ed26c21d121df4a4debeb643c">xQueueSendFromISR()</a> and <a class="el" href="queue_8c.html#ac61ec62828e70ed35d18559a35550462">xQueueReceiveFromISR()</a> can only be used to pass data between a task and and ISR.</p>
<p>crQUEUE_SEND_FROM_ISR can only be called from an ISR to send data to a queue that is being used from within a co-routine.</p>
<p>See the co-routine section of the WEB documentation for information on passing data between tasks and co-routines and between ISR's and co-routines.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">xQueue</td><td>The handle to the queue on which the item is to be posted.</td></tr>
<tr><td class="paramname">pvItemToQueue</td><td>A pointer to the item that is to be placed on the queue. The size of the items the queue will hold was defined when the queue was created, so this many bytes will be copied from pvItemToQueue into the queue storage area.</td></tr>
<tr><td class="paramname">xCoRoutinePreviouslyWoken</td><td>This is included so an ISR can post onto the same queue multiple times from a single interrupt. The first call should always pass in pdFALSE. Subsequent calls should pass in the value returned from the previous call.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>pdTRUE if a co-routine was woken by posting onto the queue. This is used by the ISR to determine if a context switch may be required following the ISR.</dd></dl>
<p>Example usage: </p><pre>
// A co-routine that blocks on a queue waiting for characters to be received.
static void vReceivingCoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
{
char cRxedChar;
BaseType_t xResult;</pre><pre> // All co-routines must start with a call to <a class="el" href="croutine_8h.html#a19a57a201a325e8af1207ed68c4aedde">crSTART()</a>.
<a class="el" href="croutine_8h.html#a19a57a201a325e8af1207ed68c4aedde">crSTART( xHandle )</a>;</pre><pre> for( ;; )
{
// Wait for data to become available on the queue. This assumes the
// queue xCommsRxQueue has already been created!
<a class="el" href="croutine_8h.html#a586d57fd9a3e2aa5ae66484ed3be36c9">crQUEUE_RECEIVE( xHandle, xCommsRxQueue, &amp;uxLEDToFlash, portMAX_DELAY, &amp;xResult )</a>;</pre><pre> // Was a character received?
if( xResult == pdPASS )
{
// Process the character here.
}
}</pre><pre> // All co-routines must end with a call to <a class="el" href="croutine_8h.html#ae6038cc976689b50000475ebfc4e2f23">crEND()</a>.
<a class="el" href="croutine_8h.html#ae6038cc976689b50000475ebfc4e2f23">crEND()</a>;
}</pre><pre>// An ISR that uses a queue to send characters received on a serial port to
// a co-routine.
void vUART_ISR( void )
{
char cRxedChar;
BaseType_t xCRWokenByPost = pdFALSE;</pre><pre> // We loop around reading characters until there are none left in the UART.
while( UART_RX_REG_NOT_EMPTY() )
{
// Obtain the character from the UART.
cRxedChar = UART_RX_REG;</pre><pre> // Post the character onto a queue. xCRWokenByPost will be pdFALSE
// the first time around the loop. If the post causes a co-routine
// to be woken (unblocked) then xCRWokenByPost will be set to pdTRUE.
// In this manner we can ensure that if more than one co-routine is
// blocked on the queue only one is woken by this ISR no matter how
// many characters are posted to the queue.
xCRWokenByPost = <a class="el" href="croutine_8h.html#ac8eb0a81c5cf69de7e4edd73ce44a3be">crQUEUE_SEND_FROM_ISR( xCommsRxQueue, &amp;cRxedChar, xCRWokenByPost )</a>;
}
}</pre> </div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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>