gnuk/ChibiOS_2.0.2/docs/html/group__messages.html
2010-08-10 12:11:02 +09:00

287 lines
22 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>ChibiOS/RT: Synchronous Messages</title>
<link href="custom.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<table style="text-align: center; width: 100%;" border="0"
cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="width: 80px;"><img alt="ChibiOS/RT Logo" src="logo_small.png"></td>
<td><big><big>ChibiOS/RT</big></big><br><br>Architecture - Reference Manual - Guides</td>
<td style="width: 80px;"></td>
</tr>
</tbody>
</table>
<hr size="1">
<!-- Generated by Doxygen 1.6.3 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Synchronous Messages<br/>
<small>
[<a class="el" href="group__synchronization.html">Synchronization</a>]</small>
</h1>
<p><div class="dynheader">
Collaboration diagram for Synchronous Messages:</div>
<div class="dynsection">
<center><table><tr><td><img src="group__messages.png" border="0" alt="" usemap="#group____messages_map"/>
<map name="group____messages_map" id="group____messages">
<area shape="rect" href="group__synchronization.html" title="Synchronization" alt="" coords="7,5,105,29"/>
</map></td></tr></table></center>
</div>
</p>
<hr/><a name="_details"></a><h2>Description</h2>
<p>Synchronous inter-thread messages APIs and services. </p>
<h2>Operation Mode</h2>
<p>Synchronous messages are an easy to use and fast IPC mechanism, threads can both act as message servers and/or message clients, the mechanism allows data to be carried in both directions. Note that messages are not copied between the client and server threads but just a pointer passed so the exchange is very time efficient.<br/>
Messages are usually processed in FIFO order but it is possible to process them in priority order by enabling the <code>CH_USE_MESSAGES_PRIORITY</code> option in <code><a class="el" href="chconf_8h.html" title="Configuration file template.">chconf.h</a></code>.<br/>
Applications do not need to allocate buffers for synchronous message queues, the mechanism just requires two extra pointers in the <code><a class="el" href="struct_thread.html" title="Structure representing a thread.">Thread</a></code> structure (the message queue header).<br/>
In order to use the Messages APIs the <code>CH_USE_MESSAGES</code> option must be enabled in <code><a class="el" href="chconf_8h.html" title="Configuration file template.">chconf.h</a></code>. </p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__messages.html#ga4e0eafdfd51c042d765e2949e6171093">chMsgIsPendingI</a>(tp)&nbsp;&nbsp;&nbsp;((tp)-&gt;p_msgqueue.p_next != (<a class="el" href="struct_thread.html">Thread</a> *)&amp;(tp)-&gt;p_msgqueue)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Evaluates to TRUE if the thread has pending messages. <a href="#ga4e0eafdfd51c042d765e2949e6171093"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__messages.html#ga3ed579be01280d265d0a7c02e0c7c1d8">chMsgGetI</a>(tp)&nbsp;&nbsp;&nbsp;((tp)-&gt;p_msgqueue.p_next-&gt;p_msg)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the first message in the queue. <a href="#ga3ed579be01280d265d0a7c02e0c7c1d8"></a><br/></td></tr>
<tr><td colspan="2"><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___s_t_m8___c_o_r_e.html#ga1e402860c42e2ceda36d0307f3aa6209">msg_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__messages.html#ga29a48a438e97dc47cb798a84e13764cb">chMsgSend</a> (<a class="el" href="struct_thread.html">Thread</a> *tp, <a class="el" href="group___s_t_m8___c_o_r_e.html#ga1e402860c42e2ceda36d0307f3aa6209">msg_t</a> msg)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends a message to the specified thread. <a href="#ga29a48a438e97dc47cb798a84e13764cb"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___s_t_m8___c_o_r_e.html#ga1e402860c42e2ceda36d0307f3aa6209">msg_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__messages.html#gae68fefbf9d0404bbf56ae354961fae41">chMsgWait</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Suspends the thread and waits for an incoming message. <a href="#gae68fefbf9d0404bbf56ae354961fae41"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___s_t_m8___c_o_r_e.html#ga1e402860c42e2ceda36d0307f3aa6209">msg_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__messages.html#ga65dda189b03b238412301ce5d80bfcf4">chMsgGet</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the next message in the queue. <a href="#ga65dda189b03b238412301ce5d80bfcf4"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__messages.html#ga19a54b3b4b0e3677c47d650a3be3c7aa">chMsgRelease</a> (<a class="el" href="group___s_t_m8___c_o_r_e.html#ga1e402860c42e2ceda36d0307f3aa6209">msg_t</a> msg)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Releases the thread waiting on top of the messages queue. <a href="#ga19a54b3b4b0e3677c47d650a3be3c7aa"></a><br/></td></tr>
</table>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="ga4e0eafdfd51c042d765e2949e6171093"></a><!-- doxytag: member="chmsg.h::chMsgIsPendingI" ref="ga4e0eafdfd51c042d765e2949e6171093" args="(tp)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define chMsgIsPendingI</td>
<td>(</td>
<td class="paramtype">tp&nbsp;</td>
<td class="paramname"></td>
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;((tp)-&gt;p_msgqueue.p_next != (<a class="el" href="struct_thread.html">Thread</a> *)&amp;(tp)-&gt;p_msgqueue)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Evaluates to TRUE if the thread has pending messages. </p>
<p>Definition at line <a class="el" href="chmsg_8h_source.html#l00043">43</a> of file <a class="el" href="chmsg_8h_source.html">chmsg.h</a>.</p>
<p>Referenced by <a class="el" href="group__messages.html#ga65dda189b03b238412301ce5d80bfcf4">chMsgGet()</a>, <a class="el" href="group__messages.html#ga19a54b3b4b0e3677c47d650a3be3c7aa">chMsgRelease()</a>, <a class="el" href="group__messages.html#gae68fefbf9d0404bbf56ae354961fae41">chMsgWait()</a>, and <a class="el" href="classchibios__rt_1_1_base_thread.html#a4477cb3ed6fc3250638bb21d8199f573">chibios_rt::BaseThread::IsPendingMessage()</a>.</p>
</div>
</div>
<a class="anchor" id="ga3ed579be01280d265d0a7c02e0c7c1d8"></a><!-- doxytag: member="chmsg.h::chMsgGetI" ref="ga3ed579be01280d265d0a7c02e0c7c1d8" args="(tp)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define chMsgGetI</td>
<td>(</td>
<td class="paramtype">tp&nbsp;</td>
<td class="paramname"></td>
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;((tp)-&gt;p_msgqueue.p_next-&gt;p_msg)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Returns the first message in the queue. </p>
<p>Definition at line <a class="el" href="chmsg_8h_source.html#l00049">49</a> of file <a class="el" href="chmsg_8h_source.html">chmsg.h</a>.</p>
<p>Referenced by <a class="el" href="group__messages.html#ga65dda189b03b238412301ce5d80bfcf4">chMsgGet()</a>, and <a class="el" href="group__messages.html#gae68fefbf9d0404bbf56ae354961fae41">chMsgWait()</a>.</p>
</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga29a48a438e97dc47cb798a84e13764cb"></a><!-- doxytag: member="chmsg.h::chMsgSend" ref="ga29a48a438e97dc47cb798a84e13764cb" args="(Thread *tp, msg_t msg)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group___s_t_m8___c_o_r_e.html#ga1e402860c42e2ceda36d0307f3aa6209">msg_t</a> chMsgSend </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_thread.html">Thread</a> *&nbsp;</td>
<td class="paramname"> <em>tp</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group___s_t_m8___c_o_r_e.html#ga1e402860c42e2ceda36d0307f3aa6209">msg_t</a>&nbsp;</td>
<td class="paramname"> <em>msg</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Sends a message to the specified thread. </p>
<p>The sender is stopped until the receiver executes a <code><a class="el" href="group__messages.html#ga19a54b3b4b0e3677c47d650a3be3c7aa" title="Releases the thread waiting on top of the messages queue.">chMsgRelease()</a>after</code> receiving the message.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>tp</em>&nbsp;</td><td>the pointer to the thread </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>msg</em>&nbsp;</td><td>the message </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The answer message from <code><a class="el" href="group__messages.html#ga19a54b3b4b0e3677c47d650a3be3c7aa" title="Releases the thread waiting on top of the messages queue.">chMsgRelease()</a></code>. </dd></dl>
<p>Definition at line <a class="el" href="chmsg_8c_source.html#l00070">70</a> of file <a class="el" href="chmsg_8c_source.html">chmsg.c</a>.</p>
<p>References <a class="el" href="group__debug.html#ga6bb6c0f97caab3a66332c8bfbf7a3844">chDbgCheck</a>, <a class="el" href="group__scheduler.html#ga97c1c514b755a1e71caf2f19c1ccf986">chSchGoSleepS()</a>, <a class="el" href="group__scheduler.html#ga535d58cfb3436c8d4e4586c31c062298">chSchReadyI()</a>, <a class="el" href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42">chSysLock</a>, <a class="el" href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e">chSysUnlock</a>, <a class="el" href="group__scheduler.html#ga1a5fddde56420e8accd0c09c1abb32a7">currp</a>, <a class="el" href="struct_thread.html#a8651bb33a6947efd9061c035ca0b728f">Thread::p_msg</a>, <a class="el" href="struct_thread.html#a282cb59bdbe00fcdf9741c47b735fa1f">Thread::p_msgqueue</a>, <a class="el" href="struct_thread.html#a3c3e9d6abccb62c3a5fab6ef043a391f">Thread::p_state</a>, <a class="el" href="struct_thread.html#a72cd0424b6098ca241fac1f74d21b56a">Thread::p_u</a>, <a class="el" href="struct_thread.html#ad5792c30fbd60df0de223b0f398fc6d7">Thread::rdymsg</a>, <a class="el" href="group__threads.html#gaff813590802bfd53cbf0560b680b89f5">THD_STATE_SNDMSG</a>, <a class="el" href="group__threads.html#gaf46c55b4468f0dad5cd0b3ef73e1be26">THD_STATE_WTMSG</a>, and <a class="el" href="struct_thread.html#a4f016b01444741e6f9b420436b748862">Thread::wtobjp</a>.</p>
<p>Referenced by <a class="el" href="classchibios__rt_1_1_base_thread.html#a1557c9e6e0b61a7eb848ce928115973d">chibios_rt::BaseThread::SendMessage()</a>.</p>
<p><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dynsection">
<div class="center"><img src="group__messages_ga29a48a438e97dc47cb798a84e13764cb_cgraph.png" border="0" usemap="#group__messages_ga29a48a438e97dc47cb798a84e13764cb_cgraph_map" alt=""></div>
<map name="group__messages_ga29a48a438e97dc47cb798a84e13764cb_cgraph_map" id="group__messages_ga29a48a438e97dc47cb798a84e13764cb_cgraph">
<area shape="rect" href="group__scheduler.html#ga97c1c514b755a1e71caf2f19c1ccf986" title="Puts the current thread to sleep into the specified state." alt="" coords="135,29,233,53"/>
<area shape="rect" href="group__scheduler.html#ga535d58cfb3436c8d4e4586c31c062298" title="Inserts a thread in the Ready List." alt="" coords="141,77,227,101"/>
<area shape="rect" href="group__debug.html#gac7f8f0653faf2e3a93108ff5333821b7" title="Inserts in the circular debug trace buffer a context switch record." alt="" coords="283,5,363,29"/>
<area shape="rect" href="group__internals.html#ga042479f09357fc59befebf4dfe0e9f4a" title="Removes the first&#45;out Thread from a queue and returns it." alt="" coords="283,53,363,77"/>
</map>
</div>
</p>
</div>
</div>
<a class="anchor" id="gae68fefbf9d0404bbf56ae354961fae41"></a><!-- doxytag: member="chmsg.h::chMsgWait" ref="gae68fefbf9d0404bbf56ae354961fae41" args="(void)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group___s_t_m8___c_o_r_e.html#ga1e402860c42e2ceda36d0307f3aa6209">msg_t</a> chMsgWait </td>
<td>(</td>
<td class="paramtype">void&nbsp;</td>
<td class="paramname"></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Suspends the thread and waits for an incoming message. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>You can assume that the data contained in the message is stable until you invoke <code><a class="el" href="group__messages.html#ga19a54b3b4b0e3677c47d650a3be3c7aa" title="Releases the thread waiting on top of the messages queue.">chMsgRelease()</a></code> because the sending thread is suspended until then.</dd></dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The pointer to the message structure. Note, it is always the message associated to the thread on the top of the messages queue. </dd></dl>
<p>Definition at line <a class="el" href="chmsg_8c_source.html#l00097">97</a> of file <a class="el" href="chmsg_8c_source.html">chmsg.c</a>.</p>
<p>References <a class="el" href="group__messages.html#ga3ed579be01280d265d0a7c02e0c7c1d8">chMsgGetI</a>, <a class="el" href="group__messages.html#ga4e0eafdfd51c042d765e2949e6171093">chMsgIsPendingI</a>, <a class="el" href="group__scheduler.html#ga97c1c514b755a1e71caf2f19c1ccf986">chSchGoSleepS()</a>, <a class="el" href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42">chSysLock</a>, <a class="el" href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e">chSysUnlock</a>, <a class="el" href="group__scheduler.html#ga1a5fddde56420e8accd0c09c1abb32a7">currp</a>, and <a class="el" href="group__threads.html#gaf46c55b4468f0dad5cd0b3ef73e1be26">THD_STATE_WTMSG</a>.</p>
<p>Referenced by <a class="el" href="classchibios__rt_1_1_base_thread.html#ae960dbec72042a9072e35984523694b8">chibios_rt::BaseThread::WaitMessage()</a>.</p>
<p><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dynsection">
<div class="center"><img src="group__messages_gae68fefbf9d0404bbf56ae354961fae41_cgraph.png" border="0" usemap="#group__messages_gae68fefbf9d0404bbf56ae354961fae41_cgraph_map" alt=""></div>
<map name="group__messages_gae68fefbf9d0404bbf56ae354961fae41_cgraph_map" id="group__messages_gae68fefbf9d0404bbf56ae354961fae41_cgraph">
<area shape="rect" href="group__scheduler.html#ga97c1c514b755a1e71caf2f19c1ccf986" title="Puts the current thread to sleep into the specified state." alt="" coords="129,29,228,53"/>
<area shape="rect" href="group__debug.html#gac7f8f0653faf2e3a93108ff5333821b7" title="Inserts in the circular debug trace buffer a context switch record." alt="" coords="277,5,357,29"/>
<area shape="rect" href="group__internals.html#ga042479f09357fc59befebf4dfe0e9f4a" title="Removes the first&#45;out Thread from a queue and returns it." alt="" coords="277,53,357,77"/>
</map>
</div>
</p>
</div>
</div>
<a class="anchor" id="ga65dda189b03b238412301ce5d80bfcf4"></a><!-- doxytag: member="chmsg.h::chMsgGet" ref="ga65dda189b03b238412301ce5d80bfcf4" args="(void)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group___s_t_m8___c_o_r_e.html#ga1e402860c42e2ceda36d0307f3aa6209">msg_t</a> chMsgGet </td>
<td>(</td>
<td class="paramtype">void&nbsp;</td>
<td class="paramname"></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Returns the next message in the queue. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>You can assume that the data pointed by the message is stable until you invoke <code><a class="el" href="group__messages.html#ga19a54b3b4b0e3677c47d650a3be3c7aa" title="Releases the thread waiting on top of the messages queue.">chMsgRelease()</a></code> because the sending thread is suspended until then. Always remember that the message data is not copied between the sender and the receiver, just a pointer is passed.</dd></dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The pointer to the message structure. Note, it is always the message associated to the thread on the top of the messages queue. </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>NULL</em>&nbsp;</td><td>if the queue is empty. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chmsg_8c_source.html#l00125">125</a> of file <a class="el" href="chmsg_8c_source.html">chmsg.c</a>.</p>
<p>References <a class="el" href="group__messages.html#ga3ed579be01280d265d0a7c02e0c7c1d8">chMsgGetI</a>, <a class="el" href="group__messages.html#ga4e0eafdfd51c042d765e2949e6171093">chMsgIsPendingI</a>, <a class="el" href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42">chSysLock</a>, <a class="el" href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e">chSysUnlock</a>, and <a class="el" href="group__scheduler.html#ga1a5fddde56420e8accd0c09c1abb32a7">currp</a>.</p>
<p>Referenced by <a class="el" href="classchibios__rt_1_1_base_thread.html#ab8e737914200f075bf02ade85876764d">chibios_rt::BaseThread::GetMessage()</a>.</p>
</div>
</div>
<a class="anchor" id="ga19a54b3b4b0e3677c47d650a3be3c7aa"></a><!-- doxytag: member="chmsg.h::chMsgRelease" ref="ga19a54b3b4b0e3677c47d650a3be3c7aa" args="(msg_t msg)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void chMsgRelease </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group___s_t_m8___c_o_r_e.html#ga1e402860c42e2ceda36d0307f3aa6209">msg_t</a>&nbsp;</td>
<td class="paramname"> <em>msg</em></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Releases the thread waiting on top of the messages queue. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>You can call this function only if there is a message already in the queue else the result will be unpredictable (a crash most likely). Exiting from the <code><a class="el" href="group__messages.html#gae68fefbf9d0404bbf56ae354961fae41" title="Suspends the thread and waits for an incoming message.">chMsgWait()</a></code> ensures you have at least one message in the queue so it is not a big deal.<br/>
The condition is only tested in debug mode in order to make this code as fast as possible.</dd></dl>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>msg</em>&nbsp;</td><td>the message returned to the message sender </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chmsg_8c_source.html#l00145">145</a> of file <a class="el" href="chmsg_8c_source.html">chmsg.c</a>.</p>
<p>References <a class="el" href="group__debug.html#ga43d50c69eb730d0f024eb832d61f30c9">chDbgAssert</a>, <a class="el" href="group__messages.html#ga4e0eafdfd51c042d765e2949e6171093">chMsgIsPendingI</a>, <a class="el" href="group__scheduler.html#gae47a8819a21ef2d521124e76bfb37c95">chSchWakeupS()</a>, <a class="el" href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42">chSysLock</a>, <a class="el" href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e">chSysUnlock</a>, <a class="el" href="group__scheduler.html#ga1a5fddde56420e8accd0c09c1abb32a7">currp</a>, and <a class="el" href="group__internals.html#ga042479f09357fc59befebf4dfe0e9f4a">fifo_remove()</a>.</p>
<p>Referenced by <a class="el" href="classchibios__rt_1_1_base_thread.html#a4ecedb2d2b646ea4a9261c0e62f16945">chibios_rt::BaseThread::ReleaseMessage()</a>.</p>
<p><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dynsection">
<div class="center"><img src="group__messages_ga19a54b3b4b0e3677c47d650a3be3c7aa_cgraph.png" border="0" usemap="#group__messages_ga19a54b3b4b0e3677c47d650a3be3c7aa_cgraph_map" alt=""></div>
<map name="group__messages_ga19a54b3b4b0e3677c47d650a3be3c7aa_cgraph_map" id="group__messages_ga19a54b3b4b0e3677c47d650a3be3c7aa_cgraph">
<area shape="rect" href="group__scheduler.html#gae47a8819a21ef2d521124e76bfb37c95" title="Wakes up a thread." alt="" coords="147,29,245,53"/>
<area shape="rect" href="group__internals.html#ga042479f09357fc59befebf4dfe0e9f4a" title="Removes the first&#45;out Thread from a queue and returns it." alt="" coords="156,77,236,101"/>
<area shape="rect" href="group__debug.html#gac7f8f0653faf2e3a93108ff5333821b7" title="Inserts in the circular debug trace buffer a context switch record." alt="" coords="296,5,376,29"/>
<area shape="rect" href="group__scheduler.html#ga535d58cfb3436c8d4e4586c31c062298" title="Inserts a thread in the Ready List." alt="" coords="293,53,379,77"/>
</map>
</div>
</p>
</div>
</div>
</div>
<hr size="1"><address style="text-align: right;"><small>
Generated on Sun Jul 11 13:13:15 2010 for ChibiOS/RT by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.6.3</small></address>
</body>
</html>