gnuk/ChibiOS_2.0.8/docs/html/group__semaphores.html

801 lines
58 KiB
HTML
Raw Normal View History

2010-08-10 03:11:02 +00:00
<!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: Semaphores</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">
2010-11-22 05:53:37 +00:00
<!-- Generated by Doxygen 1.7.1 -->
2010-08-10 03:11:02 +00:00
<div class="navigation" id="top">
<div class="tabs">
2010-11-22 05:53:37 +00:00
<ul class="tablist">
2010-08-10 03:11:02 +00:00
<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>
2010-11-22 05:53:37 +00:00
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Defines</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
2010-08-10 03:11:02 +00:00
<h1>Semaphores<br/>
<small>
[<a class="el" href="group__synchronization.html">Synchronization</a>]</small>
2010-11-22 05:53:37 +00:00
</h1> </div>
</div>
<div class="contents">
2010-08-10 03:11:02 +00:00
<p><div class="dynheader">
Collaboration diagram for Semaphores:</div>
2010-11-22 05:53:37 +00:00
<div class="dyncontent">
<center><table><tr><td><img src="group__semaphores.png" border="0" alt="" usemap="#group____semaphores"/>
<map name="group____semaphores" id="group____semaphores">
<area shape="rect" id="node1" href="group__synchronization.html" title="Synchronization" alt="" coords="7,5,105,32"/> </map>
</td></tr></table></center>
2010-08-10 03:11:02 +00:00
</div>
</p>
<hr/><a name="_details"></a><h2>Description</h2>
<p>Semaphores related APIs and services.</p>
<h2>Operation mode</h2>
<p>Semaphores are a flexible synchronization primitive, ChibiOS/RT implements semaphores in their "counting semaphores" variant as defined by Edsger Dijkstra plus several enhancements like:</p>
<ul>
<li>Wait operation with timeout.</li>
<li>Reset operation.</li>
<li>Atomic wait+signal operation.</li>
<li>Return message from the wait operation (OK, RESET, TIMEOUT).</li>
</ul>
<p>The binary semaphores variant can be easily implemented using counting semaphores.<br/>
Operations defined for semaphores:</p>
<ul>
<li><b>Signal</b>: The semaphore counter is increased and if the result is non-positive then a waiting thread is removed from the semaphore queue and made ready for execution.</li>
<li><b>Wait</b>: The semaphore counter is decreased and if the result becomes negative the thread is queued in the semaphore and suspended.</li>
<li><b>Reset</b>: The semaphore counter is reset to a non-negative value and all the threads in the queue are released.</li>
</ul>
<p>Semaphores can be used as guards for mutual exclusion zones (note that mutexes are recommended for this kind of use) but also have other uses, queues guards and counters as example.<br/>
Semaphores usually use a FIFO queuing strategy but it is possible to make them order threads by priority by enabling <code>CH_USE_SEMAPHORES_PRIORITY</code> in <code><a class="el" href="chconf_8h.html" title="Configuration file template.">chconf.h</a></code>.<br/>
In order to use the Semaphores APIs the <code>CH_USE_SEMAPHORES</code> option must be enabled in <code><a class="el" href="chconf_8h.html" title="Configuration file template.">chconf.h</a></code>. </p>
2010-11-22 05:53:37 +00:00
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Data Structures</h2></td></tr>
2010-08-10 03:11:02 +00:00
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_semaphore.html">Semaphore</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="struct_semaphore.html" title="Semaphore structure.">Semaphore</a> structure. <a href="struct_semaphore.html#_details">More...</a><br/></td></tr>
2010-11-22 05:53:37 +00:00
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
2010-08-10 03:11:02 +00:00
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__semaphores.html#ga1100c867cc8bd8328f7a7db5e7c74f6d">_SEMAPHORE_DATA</a>(name, n)&nbsp;&nbsp;&nbsp;{_THREADSQUEUE_DATA(name.s_queue), n}</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Data part of a static semaphore initializer. <a href="#ga1100c867cc8bd8328f7a7db5e7c74f6d"></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__semaphores.html#gac09ac6a24cd3dbe91ac13d72bebf67c1">SEMAPHORE_DECL</a>(name, n)&nbsp;&nbsp;&nbsp;<a class="el" href="struct_semaphore.html">Semaphore</a> name = _SEMAPHORE_DATA(name, n)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Static semaphore initializer. <a href="#gac09ac6a24cd3dbe91ac13d72bebf67c1"></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__semaphores.html#ga748b56bc2be187e316496d7b6e748f89">chSemFastWaitI</a>(sp)&nbsp;&nbsp;&nbsp;((sp)-&gt;s_cnt--)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Decreases the semaphore counter. <a href="#ga748b56bc2be187e316496d7b6e748f89"></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__semaphores.html#gacb89a28bd1fff2704207423f350215ba">chSemFastSignalI</a>(sp)&nbsp;&nbsp;&nbsp;((sp)-&gt;s_cnt++)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Increases the semaphore counter. <a href="#gacb89a28bd1fff2704207423f350215ba"></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__semaphores.html#gadab3ccf8a34988ef6d410354b2648327">chSemGetCounterI</a>(sp)&nbsp;&nbsp;&nbsp;((sp)-&gt;s_cnt)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the semaphore counter current value. <a href="#gadab3ccf8a34988ef6d410354b2648327"></a><br/></td></tr>
2010-11-22 05:53:37 +00:00
<tr><td colspan="2"><h2><a name="typedef-members"></a>
Typedefs</h2></td></tr>
2010-08-10 03:11:02 +00:00
<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_semaphore.html">Semaphore</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__semaphores.html#gac28c458b44903a8093398ef50333c513">Semaphore</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="struct_semaphore.html" title="Semaphore structure.">Semaphore</a> structure. <a href="#gac28c458b44903a8093398ef50333c513"></a><br/></td></tr>
2010-11-22 05:53:37 +00:00
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__semaphores.html#gafe8fc6155a871074e8017efd908b2c58">chSemInit</a> (<a class="el" href="struct_semaphore.html">Semaphore</a> *sp, <a class="el" href="group__types.html#ga090b3bab5602157ebf706a44041dc05e">cnt_t</a> n)</td></tr>
2010-08-10 03:11:02 +00:00
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initializes a semaphore with the specified counter value. <a href="#gafe8fc6155a871074e8017efd908b2c58"></a><br/></td></tr>
2010-11-22 05:53:37 +00:00
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__semaphores.html#ga58e266e609cfd3dbc67f299b3ae9debb">chSemReset</a> (<a class="el" href="struct_semaphore.html">Semaphore</a> *sp, <a class="el" href="group__types.html#ga090b3bab5602157ebf706a44041dc05e">cnt_t</a> n)</td></tr>
2010-08-10 03:11:02 +00:00
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Performs a reset operation on the semaphore. <a href="#ga58e266e609cfd3dbc67f299b3ae9debb"></a><br/></td></tr>
2010-11-22 05:53:37 +00:00
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__semaphores.html#gae7972b6b22b80ac09bac5a186277ab81">chSemResetI</a> (<a class="el" href="struct_semaphore.html">Semaphore</a> *sp, <a class="el" href="group__types.html#ga090b3bab5602157ebf706a44041dc05e">cnt_t</a> n)</td></tr>
2010-08-10 03:11:02 +00:00
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Performs a reset operation on the semaphore. <a href="#gae7972b6b22b80ac09bac5a186277ab81"></a><br/></td></tr>
2010-11-22 05:53:37 +00:00
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#ga35bcb0c321cd7bc45bf1a11fa17ebdd3">msg_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__semaphores.html#gabc8f7e509870e9b0527a6a68fad71425">chSemWait</a> (<a class="el" href="struct_semaphore.html">Semaphore</a> *sp)</td></tr>
2010-08-10 03:11:02 +00:00
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Performs a wait operation on a semaphore. <a href="#gabc8f7e509870e9b0527a6a68fad71425"></a><br/></td></tr>
2010-11-22 05:53:37 +00:00
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#ga35bcb0c321cd7bc45bf1a11fa17ebdd3">msg_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__semaphores.html#gaa2c0367078533e291d2e889e251d8b67">chSemWaitS</a> (<a class="el" href="struct_semaphore.html">Semaphore</a> *sp)</td></tr>
2010-08-10 03:11:02 +00:00
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Performs a wait operation on a semaphore. <a href="#gaa2c0367078533e291d2e889e251d8b67"></a><br/></td></tr>
2010-11-22 05:53:37 +00:00
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#ga35bcb0c321cd7bc45bf1a11fa17ebdd3">msg_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__semaphores.html#ga0bc227311e5be3e3b6e3aee6a68169da">chSemWaitTimeout</a> (<a class="el" href="struct_semaphore.html">Semaphore</a> *sp, <a class="el" href="group__types.html#gae3e32a98d431a02106616da3071832dd">systime_t</a> time)</td></tr>
2010-08-10 03:11:02 +00:00
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Performs a wait operation on a semaphore with timeout specification. <a href="#ga0bc227311e5be3e3b6e3aee6a68169da"></a><br/></td></tr>
2010-11-22 05:53:37 +00:00
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#ga35bcb0c321cd7bc45bf1a11fa17ebdd3">msg_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__semaphores.html#ga924ec5d191bb8debe8727ae4dd5d6d03">chSemWaitTimeoutS</a> (<a class="el" href="struct_semaphore.html">Semaphore</a> *sp, <a class="el" href="group__types.html#gae3e32a98d431a02106616da3071832dd">systime_t</a> time)</td></tr>
2010-08-10 03:11:02 +00:00
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Performs a wait operation on a semaphore with timeout specification. <a href="#ga924ec5d191bb8debe8727ae4dd5d6d03"></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__semaphores.html#ga7ec0cbda23e49e2370e0b91f20baf05e">chSemSignal</a> (<a class="el" href="struct_semaphore.html">Semaphore</a> *sp)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Performs a signal operation on a semaphore. <a href="#ga7ec0cbda23e49e2370e0b91f20baf05e"></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__semaphores.html#gaca0b70cf495a9cb7569e1cf5b07e2b3d">chSemSignalI</a> (<a class="el" href="struct_semaphore.html">Semaphore</a> *sp)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Performs a signal operation on a semaphore. <a href="#gaca0b70cf495a9cb7569e1cf5b07e2b3d"></a><br/></td></tr>
2010-11-22 05:53:37 +00:00
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#ga35bcb0c321cd7bc45bf1a11fa17ebdd3">msg_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__semaphores.html#ga0dc7b4339506de346d67b4560b271e44">chSemSignalWait</a> (<a class="el" href="struct_semaphore.html">Semaphore</a> *sps, <a class="el" href="struct_semaphore.html">Semaphore</a> *spw)</td></tr>
2010-08-10 03:11:02 +00:00
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Performs atomic signal and wait operations on two semaphores. <a href="#ga0dc7b4339506de346d67b4560b271e44"></a><br/></td></tr>
</table>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="ga1100c867cc8bd8328f7a7db5e7c74f6d"></a><!-- doxytag: member="chsem.h::_SEMAPHORE_DATA" ref="ga1100c867cc8bd8328f7a7db5e7c74f6d" args="(name, n)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define _SEMAPHORE_DATA</td>
<td>(</td>
2010-11-22 05:53:37 +00:00
<td class="paramtype">&nbsp;</td>
<td class="paramname">name, </td>
2010-08-10 03:11:02 +00:00
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
2010-11-22 05:53:37 +00:00
<td class="paramtype">&nbsp;</td>
<td class="paramname">n</td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td>&nbsp;&nbsp;&nbsp;{_THREADSQUEUE_DATA(name.s_queue), n}</td>
2010-08-10 03:11:02 +00:00
</tr>
</table>
</div>
<div class="memdoc">
<p>Data part of a static semaphore initializer. </p>
<p>This macro should be used when statically initializing a semaphore that is part of a bigger structure.</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>name</em>&nbsp;</td><td>the name of the semaphore variable </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>n</em>&nbsp;</td><td>the counter initial value, this value must be non-negative </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chsem_8h_source.html#l00077">77</a> of file <a class="el" href="chsem_8h_source.html">chsem.h</a>.</p>
</div>
</div>
<a class="anchor" id="gac09ac6a24cd3dbe91ac13d72bebf67c1"></a><!-- doxytag: member="chsem.h::SEMAPHORE_DECL" ref="gac09ac6a24cd3dbe91ac13d72bebf67c1" args="(name, n)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define SEMAPHORE_DECL</td>
<td>(</td>
2010-11-22 05:53:37 +00:00
<td class="paramtype">&nbsp;</td>
<td class="paramname">name, </td>
2010-08-10 03:11:02 +00:00
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
2010-11-22 05:53:37 +00:00
<td class="paramtype">&nbsp;</td>
<td class="paramname">n</td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td>&nbsp;&nbsp;&nbsp;<a class="el" href="struct_semaphore.html">Semaphore</a> name = _SEMAPHORE_DATA(name, n)</td>
2010-08-10 03:11:02 +00:00
</tr>
</table>
</div>
<div class="memdoc">
<p>Static semaphore initializer. </p>
<p>Statically initialized semaphores require no explicit initialization using <code><a class="el" href="group__semaphores.html#gafe8fc6155a871074e8017efd908b2c58" title="Initializes a semaphore with the specified counter value.">chSemInit()</a></code>.</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>name</em>&nbsp;</td><td>the name of the semaphore variable </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>n</em>&nbsp;</td><td>the counter initial value, this value must be non-negative </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chsem_8h_source.html#l00088">88</a> of file <a class="el" href="chsem_8h_source.html">chsem.h</a>.</p>
</div>
</div>
<a class="anchor" id="ga748b56bc2be187e316496d7b6e748f89"></a><!-- doxytag: member="chsem.h::chSemFastWaitI" ref="ga748b56bc2be187e316496d7b6e748f89" args="(sp)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define chSemFastWaitI</td>
<td>(</td>
2010-11-22 05:53:37 +00:00
<td class="paramtype">&nbsp;</td>
<td class="paramname">sp</td>
2010-08-10 03:11:02 +00:00
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;((sp)-&gt;s_cnt--)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Decreases the semaphore counter. </p>
<p>This macro can be used when the counter is known to be positive. </p>
<p>Definition at line <a class="el" href="chsem_8h_source.html#l00094">94</a> of file <a class="el" href="chsem_8h_source.html">chsem.h</a>.</p>
<p>Referenced by <a class="el" href="group__io__queues.html#gaddf6fc39af7d905c9f23afde14d8d764">chIQReadTimeout()</a>, and <a class="el" href="group__io__queues.html#ga1e90d41fa021107d72b1bed81186aae8">chOQWriteTimeout()</a>.</p>
</div>
</div>
<a class="anchor" id="gacb89a28bd1fff2704207423f350215ba"></a><!-- doxytag: member="chsem.h::chSemFastSignalI" ref="gacb89a28bd1fff2704207423f350215ba" args="(sp)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define chSemFastSignalI</td>
<td>(</td>
2010-11-22 05:53:37 +00:00
<td class="paramtype">&nbsp;</td>
<td class="paramname">sp</td>
2010-08-10 03:11:02 +00:00
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;((sp)-&gt;s_cnt++)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Increases the semaphore counter. </p>
<p>This macro can be used when the counter is known to be not negative. </p>
<p>Definition at line <a class="el" href="chsem_8h_source.html#l00100">100</a> of file <a class="el" href="chsem_8h_source.html">chsem.h</a>.</p>
</div>
</div>
<a class="anchor" id="gadab3ccf8a34988ef6d410354b2648327"></a><!-- doxytag: member="chsem.h::chSemGetCounterI" ref="gadab3ccf8a34988ef6d410354b2648327" args="(sp)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define chSemGetCounterI</td>
<td>(</td>
2010-11-22 05:53:37 +00:00
<td class="paramtype">&nbsp;</td>
<td class="paramname">sp</td>
2010-08-10 03:11:02 +00:00
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;((sp)-&gt;s_cnt)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Returns the semaphore counter current value. </p>
<p>Definition at line <a class="el" href="chsem_8h_source.html#l00105">105</a> of file <a class="el" href="chsem_8h_source.html">chsem.h</a>.</p>
</div>
</div>
<hr/><h2>Typedef Documentation</h2>
<a class="anchor" id="gac28c458b44903a8093398ef50333c513"></a><!-- doxytag: member="chsem.h::Semaphore" ref="gac28c458b44903a8093398ef50333c513" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct <a class="el" href="struct_semaphore.html">Semaphore</a> <a class="el" href="struct_semaphore.html">Semaphore</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p><a class="el" href="struct_semaphore.html" title="Semaphore structure.">Semaphore</a> structure. </p>
</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="gafe8fc6155a871074e8017efd908b2c58"></a><!-- doxytag: member="chsem.h::chSemInit" ref="gafe8fc6155a871074e8017efd908b2c58" args="(Semaphore *sp, cnt_t n)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void chSemInit </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_semaphore.html">Semaphore</a> *&nbsp;</td>
<td class="paramname"> <em>sp</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
2010-11-22 05:53:37 +00:00
<td class="paramtype"><a class="el" href="group__types.html#ga090b3bab5602157ebf706a44041dc05e">cnt_t</a>&nbsp;</td>
2010-08-10 03:11:02 +00:00
<td class="paramname"> <em>n</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Initializes a semaphore with the specified counter value. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>sp</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_semaphore.html" title="Semaphore structure.">Semaphore</a></code> structure </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>n</em>&nbsp;</td><td>initial value of the semaphore counter. Must be non-negative. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chsem_8c_source.html#l00083">83</a> of file <a class="el" href="chsem_8c_source.html">chsem.c</a>.</p>
<p>References <a class="el" href="group__debug.html#ga6bb6c0f97caab3a66332c8bfbf7a3844">chDbgCheck</a>, <a class="el" href="group__internals.html#ga6d19d0f3ff1fa599b6d9783dec180451">queue_init</a>, <a class="el" href="struct_semaphore.html#ae42955cd2346167681e0fd6a136369cd">Semaphore::s_cnt</a>, and <a class="el" href="struct_semaphore.html#a26051a38c22dc11a7a2bf37496d8e906">Semaphore::s_queue</a>.</p>
<p>Referenced by <a class="el" href="group___a_d_c.html#gac7f619e304c79c17f19221d05138d405">adcObjectInit()</a>, <a class="el" href="group___c_a_n.html#gadf8c892ca4bd2544d03be8a690885aef">canObjectInit()</a>, <a class="el" href="group__heaps.html#ga7135c9ddbd1402a4a36ce44df948f4e4">chHeapInit()</a>, <a class="el" href="group__io__queues.html#ga0d3a250e6572526b165d2c61f69230e5">chIQInit()</a>, <a class="el" href="group__mailboxes.html#gaff65b97bfdbf9144e9727a100a9be93a">chMBInit()</a>, <a class="el" href="group__io__queues.html#gae2a5a0ef7c488ac02762e76933baa7b1">chOQInit()</a>, <a class="el" href="group__heaps.html#ga7e7a6625a49b6a560a47ae7575575264">heap_init()</a>, <a class="el" href="group___m_a_c.html#ga34d60b00ad9794d52da6833e18c9ec70">macObjectInit()</a>, <a class="el" href="classchibios__rt_1_1_semaphore.html#a0804607c066a7a373188cb8220203f8f">chibios_rt::Semaphore::Semaphore()</a>, and <a class="el" href="group___s_p_i.html#ga87a7bdc554b8e8fdfc77064e67689fcf">spiObjectInit()</a>.</p>
</div>
</div>
<a class="anchor" id="ga58e266e609cfd3dbc67f299b3ae9debb"></a><!-- doxytag: member="chsem.h::chSemReset" ref="ga58e266e609cfd3dbc67f299b3ae9debb" args="(Semaphore *sp, cnt_t n)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void chSemReset </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_semaphore.html">Semaphore</a> *&nbsp;</td>
<td class="paramname"> <em>sp</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
2010-11-22 05:53:37 +00:00
<td class="paramtype"><a class="el" href="group__types.html#ga090b3bab5602157ebf706a44041dc05e">cnt_t</a>&nbsp;</td>
2010-08-10 03:11:02 +00:00
<td class="paramname"> <em>n</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Performs a reset operation on the semaphore. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>The released threads can recognize they were waked up by a reset rather than a signal because the <code><a class="el" href="group__semaphores.html#gabc8f7e509870e9b0527a6a68fad71425" title="Performs a wait operation on a semaphore.">chSemWait()</a></code> will return <code>RDY_RESET</code> instead of <code>RDY_OK</code>.</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>sp</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_semaphore.html" title="Semaphore structure.">Semaphore</a></code> structure </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>n</em>&nbsp;</td><td>the new value of the semaphore counter. The value must be non-negative. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chsem_8c_source.html#l00101">101</a> of file <a class="el" href="chsem_8c_source.html">chsem.c</a>.</p>
<p>References <a class="el" href="group__scheduler.html#ga4e38b4bee3d2330f6a0f1cdb7660af20">chSchRescheduleS()</a>, <a class="el" href="group__semaphores.html#gae7972b6b22b80ac09bac5a186277ab81">chSemResetI()</a>, <a class="el" href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42">chSysLock</a>, and <a class="el" href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e">chSysUnlock</a>.</p>
<p>Referenced by <a class="el" href="classchibios__rt_1_1_semaphore.html#aecb934714ebe5658c857ef1021dd5f2b">chibios_rt::Semaphore::Reset()</a>.</p>
<p><div class="dynheader">
Here is the call graph for this function:</div>
2010-11-22 05:53:37 +00:00
<div class="dyncontent">
<div class="center"><img src="group__semaphores_ga58e266e609cfd3dbc67f299b3ae9debb_cgraph.png" border="0" usemap="#group__semaphores_ga58e266e609cfd3dbc67f299b3ae9debb_cgraph" alt=""/></div>
<map name="group__semaphores_ga58e266e609cfd3dbc67f299b3ae9debb_cgraph" id="group__semaphores_ga58e266e609cfd3dbc67f299b3ae9debb_cgraph">
<area shape="rect" id="node3" href="group__scheduler.html#ga4e38b4bee3d2330f6a0f1cdb7660af20" title="Performs a reschedule if a higher priority thread is runnable." alt="" coords="136,5,253,32"/> <area shape="rect" id="node9" href="group__semaphores.html#gae7972b6b22b80ac09bac5a186277ab81" title="Performs a reset operation on the semaphore." alt="" coords="152,56,237,83"/> <area shape="rect" id="node5" href="group__scheduler.html#ga0257cf203e72a766a52059750cb97e6e" title="Switches to the first thread on the runnable queue." alt="" coords="301,5,427,32"/> <area shape="rect" id="node7" href="group__scheduler.html#ga535d58cfb3436c8d4e4586c31c062298" title="Inserts a thread in the Ready List." alt="" coords="476,31,561,57"/> <area shape="rect" id="node12" href="group__internals.html#gacacfe77140cab62948e63d898bf4dfba" title="Removes the last&#45;out Thread from a queue and returns it." alt="" coords="325,107,403,133"/> </map>
2010-08-10 03:11:02 +00:00
</div>
</p>
</div>
</div>
<a class="anchor" id="gae7972b6b22b80ac09bac5a186277ab81"></a><!-- doxytag: member="chsem.h::chSemResetI" ref="gae7972b6b22b80ac09bac5a186277ab81" args="(Semaphore *sp, cnt_t n)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void chSemResetI </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_semaphore.html">Semaphore</a> *&nbsp;</td>
<td class="paramname"> <em>sp</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
2010-11-22 05:53:37 +00:00
<td class="paramtype"><a class="el" href="group__types.html#ga090b3bab5602157ebf706a44041dc05e">cnt_t</a>&nbsp;</td>
2010-08-10 03:11:02 +00:00
<td class="paramname"> <em>n</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Performs a reset operation on the semaphore. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>The released threads can recognize they were waked up by a reset rather than a signal because the <code><a class="el" href="group__semaphores.html#gabc8f7e509870e9b0527a6a68fad71425" title="Performs a wait operation on a semaphore.">chSemWait()</a></code> will return <code>RDY_RESET</code> instead of <code>RDY_OK</code>. </dd>
<dd>
This function does not reschedule.</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>sp</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_semaphore.html" title="Semaphore structure.">Semaphore</a></code> structure </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>n</em>&nbsp;</td><td>the new value of the semaphore counter. The value must be non-negative. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chsem_8c_source.html#l00120">120</a> of file <a class="el" href="chsem_8c_source.html">chsem.c</a>.</p>
2010-11-22 05:53:37 +00:00
<p>References <a class="el" href="group__debug.html#ga6bb6c0f97caab3a66332c8bfbf7a3844">chDbgCheck</a>, <a class="el" href="group__scheduler.html#ga535d58cfb3436c8d4e4586c31c062298">chSchReadyI()</a>, <a class="el" href="group__internals.html#gacacfe77140cab62948e63d898bf4dfba">lifo_remove()</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="struct_semaphore.html#ae42955cd2346167681e0fd6a136369cd">Semaphore::s_cnt</a>, and <a class="el" href="struct_semaphore.html#a26051a38c22dc11a7a2bf37496d8e906">Semaphore::s_queue</a>.</p>
2010-08-10 03:11:02 +00:00
<p>Referenced by <a class="el" href="group___a_d_c.html#gabce14d8f240e85715cded02c85b6585a">adcStopConversion()</a>, <a class="el" href="group___c_a_n.html#ga4e89a7d246119e077d27431a02586133">canStop()</a>, <a class="el" href="group___s_t_m32___a_d_c.html#ga727ca25370379b53e77a820e7bfee540">CH_IRQ_HANDLER()</a>, <a class="el" href="group__io__queues.html#ga2252ca3e5d6ee6d8d323d025365aee59">chIQResetI()</a>, <a class="el" href="group__mailboxes.html#ga4199e224456395c3dbc74dbc889dff94">chMBReset()</a>, <a class="el" href="group__io__queues.html#ga0a35a7de945e4b56b5fb5f5c8567e296">chOQResetI()</a>, and <a class="el" href="group__semaphores.html#ga58e266e609cfd3dbc67f299b3ae9debb">chSemReset()</a>.</p>
<p><div class="dynheader">
Here is the call graph for this function:</div>
2010-11-22 05:53:37 +00:00
<div class="dyncontent">
<div class="center"><img src="group__semaphores_gae7972b6b22b80ac09bac5a186277ab81_cgraph.png" border="0" usemap="#group__semaphores_gae7972b6b22b80ac09bac5a186277ab81_cgraph" alt=""/></div>
<map name="group__semaphores_gae7972b6b22b80ac09bac5a186277ab81_cgraph" id="group__semaphores_gae7972b6b22b80ac09bac5a186277ab81_cgraph">
<area shape="rect" id="node3" href="group__scheduler.html#ga535d58cfb3436c8d4e4586c31c062298" title="Inserts a thread in the Ready List." alt="" coords="140,5,225,32"/> <area shape="rect" id="node5" href="group__internals.html#gacacfe77140cab62948e63d898bf4dfba" title="Removes the last&#45;out Thread from a queue and returns it." alt="" coords="144,56,221,83"/> </map>
2010-08-10 03:11:02 +00:00
</div>
</p>
</div>
</div>
<a class="anchor" id="gabc8f7e509870e9b0527a6a68fad71425"></a><!-- doxytag: member="chsem.h::chSemWait" ref="gabc8f7e509870e9b0527a6a68fad71425" args="(Semaphore *sp)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
2010-11-22 05:53:37 +00:00
<td class="memname"><a class="el" href="group__types.html#ga35bcb0c321cd7bc45bf1a11fa17ebdd3">msg_t</a> chSemWait </td>
2010-08-10 03:11:02 +00:00
<td>(</td>
<td class="paramtype"><a class="el" href="struct_semaphore.html">Semaphore</a> *&nbsp;</td>
<td class="paramname"> <em>sp</em></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Performs a wait operation on a semaphore. </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>sp</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_semaphore.html" title="Semaphore structure.">Semaphore</a></code> structure </td></tr>
</table>
</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>RDY_OK</em>&nbsp;</td><td>if the semaphore was signaled or not taken. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>RDY_RESET</em>&nbsp;</td><td>if the semaphore was reset using <code><a class="el" href="group__semaphores.html#ga58e266e609cfd3dbc67f299b3ae9debb" title="Performs a reset operation on the semaphore.">chSemReset()</a></code>. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chsem_8c_source.html#l00138">138</a> of file <a class="el" href="chsem_8c_source.html">chsem.c</a>.</p>
<p>References <a class="el" href="group__semaphores.html#gaa2c0367078533e291d2e889e251d8b67">chSemWaitS()</a>, <a class="el" href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42">chSysLock</a>, and <a class="el" href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e">chSysUnlock</a>.</p>
<p>Referenced by <a class="el" href="group___s_p_i.html#ga803cec73f6dd8d3d1f18fb6a61b8255a">spiAcquireBus()</a>, and <a class="el" href="classchibios__rt_1_1_semaphore.html#abfb1b068e95063f490b27cc3b467f63f">chibios_rt::Semaphore::Wait()</a>.</p>
<p><div class="dynheader">
Here is the call graph for this function:</div>
2010-11-22 05:53:37 +00:00
<div class="dyncontent">
<div class="center"><img src="group__semaphores_gabc8f7e509870e9b0527a6a68fad71425_cgraph.png" border="0" usemap="#group__semaphores_gabc8f7e509870e9b0527a6a68fad71425_cgraph" alt=""/></div>
<map name="group__semaphores_gabc8f7e509870e9b0527a6a68fad71425_cgraph" id="group__semaphores_gabc8f7e509870e9b0527a6a68fad71425_cgraph">
<area shape="rect" id="node3" href="group__semaphores.html#gaa2c0367078533e291d2e889e251d8b67" title="Performs a wait operation on a semaphore." alt="" coords="131,5,213,32"/> <area shape="rect" id="node5" href="group__scheduler.html#ga97c1c514b755a1e71caf2f19c1ccf986" title="Puts the current thread to sleep into the specified state." alt="" coords="261,5,363,32"/> </map>
2010-08-10 03:11:02 +00:00
</div>
</p>
</div>
</div>
<a class="anchor" id="gaa2c0367078533e291d2e889e251d8b67"></a><!-- doxytag: member="chsem.h::chSemWaitS" ref="gaa2c0367078533e291d2e889e251d8b67" args="(Semaphore *sp)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
2010-11-22 05:53:37 +00:00
<td class="memname"><a class="el" href="group__types.html#ga35bcb0c321cd7bc45bf1a11fa17ebdd3">msg_t</a> chSemWaitS </td>
2010-08-10 03:11:02 +00:00
<td>(</td>
<td class="paramtype"><a class="el" href="struct_semaphore.html">Semaphore</a> *&nbsp;</td>
<td class="paramname"> <em>sp</em></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Performs a wait operation on a semaphore. </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>sp</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_semaphore.html" title="Semaphore structure.">Semaphore</a></code> structure </td></tr>
</table>
</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>RDY_OK</em>&nbsp;</td><td>if the semaphore was signaled or not taken. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>RDY_RESET</em>&nbsp;</td><td>if the semaphore was reset using <code><a class="el" href="group__semaphores.html#ga58e266e609cfd3dbc67f299b3ae9debb" title="Performs a reset operation on the semaphore.">chSemReset()</a></code>. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chsem_8c_source.html#l00154">154</a> of file <a class="el" href="chsem_8c_source.html">chsem.c</a>.</p>
2010-11-22 05:53:37 +00:00
<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#ga1a5fddde56420e8accd0c09c1abb32a7">currp</a>, <a class="el" href="struct_semaphore.html#ae42955cd2346167681e0fd6a136369cd">Semaphore::s_cnt</a>, <a class="el" href="struct_semaphore.html#a26051a38c22dc11a7a2bf37496d8e906">Semaphore::s_queue</a>, and <a class="el" href="group__threads.html#gad0b81cae859c0a6bc6a0d2036aa8e272">THD_STATE_WTSEM</a>.</p>
2010-08-10 03:11:02 +00:00
<p>Referenced by <a class="el" href="group__semaphores.html#gabc8f7e509870e9b0527a6a68fad71425">chSemWait()</a>.</p>
<p><div class="dynheader">
Here is the call graph for this function:</div>
2010-11-22 05:53:37 +00:00
<div class="dyncontent">
<div class="center"><img src="group__semaphores_gaa2c0367078533e291d2e889e251d8b67_cgraph.png" border="0" usemap="#group__semaphores_gaa2c0367078533e291d2e889e251d8b67_cgraph" alt=""/></div>
<map name="group__semaphores_gaa2c0367078533e291d2e889e251d8b67_cgraph" id="group__semaphores_gaa2c0367078533e291d2e889e251d8b67_cgraph">
<area shape="rect" id="node3" href="group__scheduler.html#ga97c1c514b755a1e71caf2f19c1ccf986" title="Puts the current thread to sleep into the specified state." alt="" coords="136,31,237,57"/> <area shape="rect" id="node5" href="group__debug.html#gac7f8f0653faf2e3a93108ff5333821b7" title="Inserts in the circular debug trace buffer a context switch record." alt="" coords="287,5,367,32"/> <area shape="rect" id="node7" href="group__internals.html#ga042479f09357fc59befebf4dfe0e9f4a" title="Removes the first&#45;out Thread from a queue and returns it." alt="" coords="287,56,367,83"/> </map>
2010-08-10 03:11:02 +00:00
</div>
</p>
</div>
</div>
<a class="anchor" id="ga0bc227311e5be3e3b6e3aee6a68169da"></a><!-- doxytag: member="chsem.h::chSemWaitTimeout" ref="ga0bc227311e5be3e3b6e3aee6a68169da" args="(Semaphore *sp, systime_t time)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
2010-11-22 05:53:37 +00:00
<td class="memname"><a class="el" href="group__types.html#ga35bcb0c321cd7bc45bf1a11fa17ebdd3">msg_t</a> chSemWaitTimeout </td>
2010-08-10 03:11:02 +00:00
<td>(</td>
<td class="paramtype"><a class="el" href="struct_semaphore.html">Semaphore</a> *&nbsp;</td>
<td class="paramname"> <em>sp</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
2010-11-22 05:53:37 +00:00
<td class="paramtype"><a class="el" href="group__types.html#gae3e32a98d431a02106616da3071832dd">systime_t</a>&nbsp;</td>
2010-08-10 03:11:02 +00:00
<td class="paramname"> <em>time</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Performs a wait operation on a semaphore with timeout specification. </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>sp</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_semaphore.html" title="Semaphore structure.">Semaphore</a></code> structure </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>time</em>&nbsp;</td><td>the number of ticks before the operation timeouts, the following special values are allowed:</p>
<ul>
<li><em>TIME_IMMEDIATE</em> immediate timeout.</li>
<li><em>TIME_INFINITE</em> no timeout.</li>
</ul>
</td></tr>
</table>
</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>RDY_OK</em>&nbsp;</td><td>if the semaphore was signaled or not taken. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>RDY_RESET</em>&nbsp;</td><td>if the semaphore was reset using <code><a class="el" href="group__semaphores.html#ga58e266e609cfd3dbc67f299b3ae9debb" title="Performs a reset operation on the semaphore.">chSemReset()</a></code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>RDY_TIMEOUT</em>&nbsp;</td><td>if the semaphore was not signaled or reset within the specified timeout. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chsem_8c_source.html#l00181">181</a> of file <a class="el" href="chsem_8c_source.html">chsem.c</a>.</p>
<p>References <a class="el" href="group__semaphores.html#ga924ec5d191bb8debe8727ae4dd5d6d03">chSemWaitTimeoutS()</a>, <a class="el" href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42">chSysLock</a>, and <a class="el" href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e">chSysUnlock</a>.</p>
<p>Referenced by <a class="el" href="classchibios__rt_1_1_semaphore.html#a589b4780f60d73929bd77a652b526868">chibios_rt::Semaphore::WaitTimeout()</a>.</p>
<p><div class="dynheader">
Here is the call graph for this function:</div>
2010-11-22 05:53:37 +00:00
<div class="dyncontent">
<div class="center"><img src="group__semaphores_ga0bc227311e5be3e3b6e3aee6a68169da_cgraph.png" border="0" usemap="#group__semaphores_ga0bc227311e5be3e3b6e3aee6a68169da_cgraph" alt=""/></div>
<map name="group__semaphores_ga0bc227311e5be3e3b6e3aee6a68169da_cgraph" id="group__semaphores_ga0bc227311e5be3e3b6e3aee6a68169da_cgraph">
<area shape="rect" id="node3" href="group__semaphores.html#ga924ec5d191bb8debe8727ae4dd5d6d03" title="Performs a wait operation on a semaphore with timeout specification." alt="" coords="168,5,288,32"/> <area shape="rect" id="node5" href="group__scheduler.html#ga306e564f678c1a39139639490c77e78b" title="Puts the current thread to sleep into the specified state with timeout specification." alt="" coords="336,5,475,32"/> </map>
2010-08-10 03:11:02 +00:00
</div>
</p>
</div>
</div>
<a class="anchor" id="ga924ec5d191bb8debe8727ae4dd5d6d03"></a><!-- doxytag: member="chsem.h::chSemWaitTimeoutS" ref="ga924ec5d191bb8debe8727ae4dd5d6d03" args="(Semaphore *sp, systime_t time)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
2010-11-22 05:53:37 +00:00
<td class="memname"><a class="el" href="group__types.html#ga35bcb0c321cd7bc45bf1a11fa17ebdd3">msg_t</a> chSemWaitTimeoutS </td>
2010-08-10 03:11:02 +00:00
<td>(</td>
<td class="paramtype"><a class="el" href="struct_semaphore.html">Semaphore</a> *&nbsp;</td>
<td class="paramname"> <em>sp</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
2010-11-22 05:53:37 +00:00
<td class="paramtype"><a class="el" href="group__types.html#gae3e32a98d431a02106616da3071832dd">systime_t</a>&nbsp;</td>
2010-08-10 03:11:02 +00:00
<td class="paramname"> <em>time</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Performs a wait operation on a semaphore with timeout specification. </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>sp</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_semaphore.html" title="Semaphore structure.">Semaphore</a></code> structure </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>time</em>&nbsp;</td><td>the number of ticks before the operation timeouts, the following special values are allowed:</p>
<ul>
<li><em>TIME_IMMEDIATE</em> immediate timeout.</li>
<li><em>TIME_INFINITE</em> no timeout.</li>
</ul>
</td></tr>
</table>
</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>RDY_OK</em>&nbsp;</td><td>if the semaphore was signaled or not taken. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>RDY_RESET</em>&nbsp;</td><td>if the semaphore was reset using <code><a class="el" href="group__semaphores.html#ga58e266e609cfd3dbc67f299b3ae9debb" title="Performs a reset operation on the semaphore.">chSemReset()</a></code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>RDY_TIMEOUT</em>&nbsp;</td><td>if the semaphore was not signaled or reset within the specified timeout. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chsem_8c_source.html#l00204">204</a> of file <a class="el" href="chsem_8c_source.html">chsem.c</a>.</p>
2010-11-22 05:53:37 +00:00
<p>References <a class="el" href="group__debug.html#ga6bb6c0f97caab3a66332c8bfbf7a3844">chDbgCheck</a>, <a class="el" href="group__scheduler.html#ga306e564f678c1a39139639490c77e78b">chSchGoSleepTimeoutS()</a>, <a class="el" href="group__scheduler.html#ga1a5fddde56420e8accd0c09c1abb32a7">currp</a>, <a class="el" href="struct_semaphore.html#ae42955cd2346167681e0fd6a136369cd">Semaphore::s_cnt</a>, <a class="el" href="struct_semaphore.html#a26051a38c22dc11a7a2bf37496d8e906">Semaphore::s_queue</a>, <a class="el" href="group__threads.html#gad0b81cae859c0a6bc6a0d2036aa8e272">THD_STATE_WTSEM</a>, and <a class="el" href="group__scheduler.html#gad1ac15e9e5fc17810a94a779257f3d29">TIME_IMMEDIATE</a>.</p>
2010-08-10 03:11:02 +00:00
<p>Referenced by <a class="el" href="group___a_d_c.html#ga026ac46dfe36031ab177e35f3aff5b09">adcWaitConversion()</a>, <a class="el" href="group___c_a_n.html#ga557d845167f6ab4f224b036860411db5">canReceive()</a>, <a class="el" href="group___c_a_n.html#gad9c686d19b4319ef586af3631b779c6c">canTransmit()</a>, <a class="el" href="group__io__queues.html#ga142d0e885ac3a695f5f033a65f49abd0">chIQGetTimeout()</a>, <a class="el" href="group__io__queues.html#gaddf6fc39af7d905c9f23afde14d8d764">chIQReadTimeout()</a>, <a class="el" href="group__mailboxes.html#gadc562242a8854497a1f9539cb9ffea09">chMBFetchS()</a>, <a class="el" href="group__mailboxes.html#gaa9c91c0b781bec0df3540407d75b1bb3">chMBPostAheadS()</a>, <a class="el" href="group__mailboxes.html#gac6514c185ae87c2633132478ea48d689">chMBPostS()</a>, <a class="el" href="group__io__queues.html#ga3df1926602eb698119990b311b097ad9">chOQPutTimeout()</a>, <a class="el" href="group__io__queues.html#ga1e90d41fa021107d72b1bed81186aae8">chOQWriteTimeout()</a>, <a class="el" href="group__semaphores.html#ga0bc227311e5be3e3b6e3aee6a68169da">chSemWaitTimeout()</a>, <a class="el" href="group___m_a_c.html#ga151a33674ef86c2403ac7797fa87805c">macWaitReceiveDescriptor()</a>, and <a class="el" href="group___m_a_c.html#ga7304721038db1d7c0cb616c9c4d3f0ce">macWaitTransmitDescriptor()</a>.</p>
<p><div class="dynheader">
Here is the call graph for this function:</div>
2010-11-22 05:53:37 +00:00
<div class="dyncontent">
<div class="center"><img src="group__semaphores_ga924ec5d191bb8debe8727ae4dd5d6d03_cgraph.png" border="0" usemap="#group__semaphores_ga924ec5d191bb8debe8727ae4dd5d6d03_cgraph" alt=""/></div>
<map name="group__semaphores_ga924ec5d191bb8debe8727ae4dd5d6d03_cgraph" id="group__semaphores_ga924ec5d191bb8debe8727ae4dd5d6d03_cgraph">
<area shape="rect" id="node3" href="group__scheduler.html#ga306e564f678c1a39139639490c77e78b" title="Puts the current thread to sleep into the specified state with timeout specification." alt="" coords="173,56,312,83"/> <area shape="rect" id="node5" href="group__scheduler.html#ga97c1c514b755a1e71caf2f19c1ccf986" title="Puts the current thread to sleep into the specified state." alt="" coords="360,5,461,32"/> <area shape="rect" id="node7" href="group__time.html#ga680d851a74e594cc965101e79891840f" title="Disables a Virtual Timer." alt="" coords="372,56,449,83"/> <area shape="rect" id="node9" href="group__time.html#ga1c44c3a0bc64b2954d95cd98b2e7124e" title="Enables a virtual timer." alt="" coords="377,107,444,133"/> </map>
2010-08-10 03:11:02 +00:00
</div>
</p>
</div>
</div>
<a class="anchor" id="ga7ec0cbda23e49e2370e0b91f20baf05e"></a><!-- doxytag: member="chsem.h::chSemSignal" ref="ga7ec0cbda23e49e2370e0b91f20baf05e" args="(Semaphore *sp)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void chSemSignal </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_semaphore.html">Semaphore</a> *&nbsp;</td>
<td class="paramname"> <em>sp</em></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Performs a signal operation on a semaphore. </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>sp</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_semaphore.html" title="Semaphore structure.">Semaphore</a></code> structure </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chsem_8c_source.html#l00225">225</a> of file <a class="el" href="chsem_8c_source.html">chsem.c</a>.</p>
<p>References <a class="el" href="group__debug.html#ga6bb6c0f97caab3a66332c8bfbf7a3844">chDbgCheck</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__internals.html#ga042479f09357fc59befebf4dfe0e9f4a">fifo_remove()</a>, <a class="el" href="group__scheduler.html#gae1c86078318e11c2fa57ee3c2ec69f61">RDY_OK</a>, <a class="el" href="struct_semaphore.html#ae42955cd2346167681e0fd6a136369cd">Semaphore::s_cnt</a>, and <a class="el" href="struct_semaphore.html#a26051a38c22dc11a7a2bf37496d8e906">Semaphore::s_queue</a>.</p>
<p>Referenced by <a class="el" href="classchibios__rt_1_1_semaphore.html#a202630db53afefbe5c419ee6d2eddab1">chibios_rt::Semaphore::Signal()</a>, and <a class="el" href="group___s_p_i.html#ga1b04a2410ef4323ee4e37c63f320c18f">spiReleaseBus()</a>.</p>
<p><div class="dynheader">
Here is the call graph for this function:</div>
2010-11-22 05:53:37 +00:00
<div class="dyncontent">
<div class="center"><img src="group__semaphores_ga7ec0cbda23e49e2370e0b91f20baf05e_cgraph.png" border="0" usemap="#group__semaphores_ga7ec0cbda23e49e2370e0b91f20baf05e_cgraph" alt=""/></div>
<map name="group__semaphores_ga7ec0cbda23e49e2370e0b91f20baf05e_cgraph" id="group__semaphores_ga7ec0cbda23e49e2370e0b91f20baf05e_cgraph">
<area shape="rect" id="node3" href="group__scheduler.html#gae47a8819a21ef2d521124e76bfb37c95" title="Wakes up a thread." alt="" coords="139,31,237,57"/> <area shape="rect" id="node9" href="group__internals.html#ga042479f09357fc59befebf4dfe0e9f4a" title="Removes the first&#45;out Thread from a queue and returns it." alt="" coords="148,81,228,108"/> <area shape="rect" id="node5" href="group__debug.html#gac7f8f0653faf2e3a93108ff5333821b7" title="Inserts in the circular debug trace buffer a context switch record." alt="" coords="289,5,369,32"/> <area shape="rect" id="node7" href="group__scheduler.html#ga535d58cfb3436c8d4e4586c31c062298" title="Inserts a thread in the Ready List." alt="" coords="287,56,372,83"/> </map>
2010-08-10 03:11:02 +00:00
</div>
</p>
</div>
</div>
<a class="anchor" id="gaca0b70cf495a9cb7569e1cf5b07e2b3d"></a><!-- doxytag: member="chsem.h::chSemSignalI" ref="gaca0b70cf495a9cb7569e1cf5b07e2b3d" args="(Semaphore *sp)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void chSemSignalI </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_semaphore.html">Semaphore</a> *&nbsp;</td>
<td class="paramname"> <em>sp</em></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Performs a signal operation on a semaphore. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>This function does not reschedule.</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>sp</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_semaphore.html" title="Semaphore structure.">Semaphore</a></code> structure </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chsem_8c_source.html#l00241">241</a> of file <a class="el" href="chsem_8c_source.html">chsem.c</a>.</p>
2010-11-22 05:53:37 +00:00
<p>References <a class="el" href="group__debug.html#ga6bb6c0f97caab3a66332c8bfbf7a3844">chDbgCheck</a>, <a class="el" href="group__scheduler.html#ga535d58cfb3436c8d4e4586c31c062298">chSchReadyI()</a>, <a class="el" href="group__internals.html#ga042479f09357fc59befebf4dfe0e9f4a">fifo_remove()</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="struct_semaphore.html#ae42955cd2346167681e0fd6a136369cd">Semaphore::s_cnt</a>, and <a class="el" href="struct_semaphore.html#a26051a38c22dc11a7a2bf37496d8e906">Semaphore::s_queue</a>.</p>
2010-08-10 03:11:02 +00:00
<p>Referenced by <a class="el" href="group__io__queues.html#ga23b72ba9803de5a20caa84ffd0c193fc">chIQPutI()</a>, <a class="el" href="group__mailboxes.html#gadc562242a8854497a1f9539cb9ffea09">chMBFetchS()</a>, <a class="el" href="group__mailboxes.html#gaa9c91c0b781bec0df3540407d75b1bb3">chMBPostAheadS()</a>, <a class="el" href="group__mailboxes.html#gac6514c185ae87c2633132478ea48d689">chMBPostS()</a>, and <a class="el" href="group__io__queues.html#ga34a5a71f39e94fcfdd88935da92a8ce9">chOQGetI()</a>.</p>
<p><div class="dynheader">
Here is the call graph for this function:</div>
2010-11-22 05:53:37 +00:00
<div class="dyncontent">
<div class="center"><img src="group__semaphores_gaca0b70cf495a9cb7569e1cf5b07e2b3d_cgraph.png" border="0" usemap="#group__semaphores_gaca0b70cf495a9cb7569e1cf5b07e2b3d_cgraph" alt=""/></div>
<map name="group__semaphores_gaca0b70cf495a9cb7569e1cf5b07e2b3d_cgraph" id="group__semaphores_gaca0b70cf495a9cb7569e1cf5b07e2b3d_cgraph">
<area shape="rect" id="node3" href="group__scheduler.html#ga535d58cfb3436c8d4e4586c31c062298" title="Inserts a thread in the Ready List." alt="" coords="143,5,228,32"/> <area shape="rect" id="node5" href="group__internals.html#ga042479f09357fc59befebf4dfe0e9f4a" title="Removes the first&#45;out Thread from a queue and returns it." alt="" coords="145,56,225,83"/> </map>
2010-08-10 03:11:02 +00:00
</div>
</p>
</div>
</div>
<a class="anchor" id="ga0dc7b4339506de346d67b4560b271e44"></a><!-- doxytag: member="chsem.h::chSemSignalWait" ref="ga0dc7b4339506de346d67b4560b271e44" args="(Semaphore *sps, Semaphore *spw)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
2010-11-22 05:53:37 +00:00
<td class="memname"><a class="el" href="group__types.html#ga35bcb0c321cd7bc45bf1a11fa17ebdd3">msg_t</a> chSemSignalWait </td>
2010-08-10 03:11:02 +00:00
<td>(</td>
<td class="paramtype"><a class="el" href="struct_semaphore.html">Semaphore</a> *&nbsp;</td>
<td class="paramname"> <em>sps</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="struct_semaphore.html">Semaphore</a> *&nbsp;</td>
<td class="paramname"> <em>spw</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Performs atomic signal and wait operations on two semaphores. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>The function is available only if the <code>CH_USE_SEMSW</code> option is enabled in <code><a class="el" href="chconf_8h.html" title="Configuration file template.">chconf.h</a></code>.</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>sps</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_semaphore.html" title="Semaphore structure.">Semaphore</a></code> structure to be signaled </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>spw</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_semaphore.html" title="Semaphore structure.">Semaphore</a></code> structure to be wait on </td></tr>
</table>
</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>RDY_OK</em>&nbsp;</td><td>if the semaphore was signaled or not taken. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>RDY_RESET</em>&nbsp;</td><td>if the semaphore was reset using <code><a class="el" href="group__semaphores.html#ga58e266e609cfd3dbc67f299b3ae9debb" title="Performs a reset operation on the semaphore.">chSemReset()</a></code>. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chsem_8c_source.html#l00265">265</a> of file <a class="el" href="chsem_8c_source.html">chsem.c</a>.</p>
2010-11-22 05:53:37 +00:00
<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__scheduler.html#ga4e38b4bee3d2330f6a0f1cdb7660af20">chSchRescheduleS()</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__internals.html#ga042479f09357fc59befebf4dfe0e9f4a">fifo_remove()</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="struct_semaphore.html#ae42955cd2346167681e0fd6a136369cd">Semaphore::s_cnt</a>, <a class="el" href="struct_semaphore.html#a26051a38c22dc11a7a2bf37496d8e906">Semaphore::s_queue</a>, <a class="el" href="group__threads.html#gad0b81cae859c0a6bc6a0d2036aa8e272">THD_STATE_WTSEM</a>, and <a class="el" href="struct_thread.html#a4f016b01444741e6f9b420436b748862">Thread::wtobjp</a>.</p>
2010-08-10 03:11:02 +00:00
<p>Referenced by <a class="el" href="classchibios__rt_1_1_semaphore.html#a3f2ad5962e43c82fc56b1e0e76a58c9a">chibios_rt::Semaphore::SignalWait()</a>.</p>
<p><div class="dynheader">
Here is the call graph for this function:</div>
2010-11-22 05:53:37 +00:00
<div class="dyncontent">
<div class="center"><img src="group__semaphores_ga0dc7b4339506de346d67b4560b271e44_cgraph.png" border="0" usemap="#group__semaphores_ga0dc7b4339506de346d67b4560b271e44_cgraph" alt=""/></div>
<map name="group__semaphores_ga0dc7b4339506de346d67b4560b271e44_cgraph" id="group__semaphores_ga0dc7b4339506de346d67b4560b271e44_cgraph">
<area shape="rect" id="node3" href="group__scheduler.html#ga97c1c514b755a1e71caf2f19c1ccf986" title="Puts the current thread to sleep into the specified state." alt="" coords="337,26,439,53"/> <area shape="rect" id="node7" href="group__internals.html#ga042479f09357fc59befebf4dfe0e9f4a" title="Removes the first&#45;out Thread from a queue and returns it." alt="" coords="503,26,583,53"/> <area shape="rect" id="node9" href="group__scheduler.html#ga535d58cfb3436c8d4e4586c31c062298" title="Inserts a thread in the Ready List." alt="" coords="500,128,585,154"/> <area shape="rect" id="node11" href="group__scheduler.html#ga4e38b4bee3d2330f6a0f1cdb7660af20" title="Performs a reschedule if a higher priority thread is runnable." alt="" coords="160,77,277,104"/> <area shape="rect" id="node5" href="group__debug.html#gac7f8f0653faf2e3a93108ff5333821b7" title="Inserts in the circular debug trace buffer a context switch record." alt="" coords="503,77,583,104"/> <area shape="rect" id="node13" href="group__scheduler.html#ga0257cf203e72a766a52059750cb97e6e" title="Switches to the first thread on the runnable queue." alt="" coords="325,77,451,104"/> </map>
2010-08-10 03:11:02 +00:00
</div>
</p>
</div>
</div>
</div>
<hr size="1"><address style="text-align: right;"><small>
2010-11-30 04:54:43 +00:00
Generated on Sun Nov 28 2010 14:09:56 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.7.1</small></address>
2010-08-10 03:11:02 +00:00
</body>
</html>