gnuk/ChibiOS_2.0.6/docs/html/group__core.html
2010-11-22 14:53:37 +09:00

707 lines
37 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: Port Templates</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.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul class="tablist">
<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="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">
<h1>Port Templates<br/>
<small>
[<a class="el" href="group__kernel.html">Kernel</a>]</small>
</h1> </div>
</div>
<div class="contents">
<p><div class="dynheader">
Collaboration diagram for Port Templates:</div>
<div class="dyncontent">
<center><table><tr><td><img src="group__core.png" border="0" alt="" usemap="#group____core"/>
<map name="group____core" id="group____core">
<area shape="rect" id="node1" href="group__kernel.html" title="Kernel" alt="" coords="5,5,59,32"/>
</map>
</td></tr></table></center>
</div>
</p>
<hr/><a name="_details"></a><h2>Description</h2>
<p>Non portable code templates. </p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structextctx.html">extctx</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Interrupt saved context. <a href="structextctx.html#_details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structintctx.html">intctx</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">System saved context. <a href="structintctx.html#_details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcontext.html">context</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Platform dependent part of the <code><a class="el" href="struct_thread.html" title="Structure representing a thread.">Thread</a></code> structure. <a href="structcontext.html#_details">More...</a><br/></td></tr>
<tr><td colspan="2"><h2><a name="define-members"></a>
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__core.html#ga13c93f367fac1ed91eb714c5995ae484">CH_ARCHITECTURE_XXX</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Unique macro for the implemented architecture. <a href="#ga13c93f367fac1ed91eb714c5995ae484"></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__core.html#gaee128c531d64d5a635def6857fef3179">CH_ARCHITECTURE_NAME</a>&nbsp;&nbsp;&nbsp;&quot;&quot;</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Name of the implemented architecture. <a href="#gaee128c531d64d5a635def6857fef3179"></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__core.html#gabe8b979d1a33a1b43fc1c1f2967ea6f0">CH_ARCHITECTURE_VARIANT_NAME</a>&nbsp;&nbsp;&nbsp;&quot;&quot;</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Name of the architecture variant (optional). <a href="#gabe8b979d1a33a1b43fc1c1f2967ea6f0"></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__core.html#gaf5777aa68e4c4786b577953c7237a95d">SETUP_CONTEXT</a>(workspace, wsize, pf, arg)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Platform dependent part of the <code>chThdInit()</code> API. <a href="#gaf5777aa68e4c4786b577953c7237a95d"></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__core.html#gaf470de5c7ee71a407e5c7e0c5825af35">IDLE_THREAD_STACK_SIZE</a>&nbsp;&nbsp;&nbsp;0</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Stack size for the system idle thread. <a href="#gaf470de5c7ee71a407e5c7e0c5825af35"></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__core.html#ga010023936d16c8077e8cafa28ea3fc25">INT_REQUIRED_STACK</a>&nbsp;&nbsp;&nbsp;0</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Per-thread stack overhead for interrupts servicing. <a href="#ga010023936d16c8077e8cafa28ea3fc25"></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__core.html#gaae5413761dbdc6dd267ba0d43a9098ac">STACK_ALIGN</a>(n)&nbsp;&nbsp;&nbsp;((((n) - 1) | (sizeof(<a class="el" href="structstkalign__t.html">stkalign_t</a>) - 1)) + 1)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enforces a correct alignment for a stack area size value. <a href="#gaae5413761dbdc6dd267ba0d43a9098ac"></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__core.html#gaf7a83c1c8bde96b77299c36dc598d33d">THD_WA_SIZE</a>(n)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Computes the thread working area global size. <a href="#gaf7a83c1c8bde96b77299c36dc598d33d"></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__core.html#gac8b681d521d3b6c25e7a0304674732c9">WORKING_AREA</a>(s, n)&nbsp;&nbsp;&nbsp;<a class="el" href="structstkalign__t.html">stkalign_t</a> s[THD_WA_SIZE(n) / sizeof(<a class="el" href="structstkalign__t.html">stkalign_t</a>)]</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Static working area allocation. <a href="#gac8b681d521d3b6c25e7a0304674732c9"></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__core.html#gaf1bf4fcf135197fa2b8faf1935a25186">PORT_IRQ_PROLOGUE</a>()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IRQ prologue code. <a href="#gaf1bf4fcf135197fa2b8faf1935a25186"></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__core.html#ga65dc6ecfb3cd68961f7abde3a25c2260">PORT_IRQ_EPILOGUE</a>()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IRQ epilogue code. <a href="#ga65dc6ecfb3cd68961f7abde3a25c2260"></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__core.html#gae312af21c95e70c459af69c298eb0f9a">PORT_IRQ_HANDLER</a>(id)&nbsp;&nbsp;&nbsp;void id(void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IRQ handler function declaration. <a href="#gae312af21c95e70c459af69c298eb0f9a"></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__core.html#ga14d1e819dc6e26882fce8ace5e8cfe5c">PORT_FAST_IRQ_HANDLER</a>(id)&nbsp;&nbsp;&nbsp;void id(void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Fast IRQ handler function declaration. <a href="#ga14d1e819dc6e26882fce8ace5e8cfe5c"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="group___s_t_m8___c_o_r_e.html#gaba7bc1797add20fe3efdf37ced1182c5">uint8_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#gadae302cd6125c8c0d3da27caa5f41657">stkalign_t</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Base type for stack and memory alignment. <a href="#gadae302cd6125c8c0d3da27caa5f41657"></a><br/></td></tr>
<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__core.html#gad8478867d6441d9d94f92819688f15c1">port_init</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Port-related initialization code. <a href="#gad8478867d6441d9d94f92819688f15c1"></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__core.html#gad9aed313dfdafb6e9c58691af424fcb4">port_lock</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Kernel-lock action. <a href="#gad9aed313dfdafb6e9c58691af424fcb4"></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__core.html#ga242f36ee65eb9b19258654f7a3b63f87">port_unlock</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Kernel-unlock action. <a href="#ga242f36ee65eb9b19258654f7a3b63f87"></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__core.html#gad28405e9f7f53722447e674ff80c3ac9">port_lock_from_isr</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Kernel-lock action from an interrupt handler. <a href="#gad28405e9f7f53722447e674ff80c3ac9"></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__core.html#ga34dcbe2bba4aec9d2cfdc5cb5bebd4fe">port_unlock_from_isr</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Kernel-unlock action from an interrupt handler. <a href="#ga34dcbe2bba4aec9d2cfdc5cb5bebd4fe"></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__core.html#ga0544046d4df19935e29784adbd848465">port_disable</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Disables all the interrupt sources. <a href="#ga0544046d4df19935e29784adbd848465"></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__core.html#gaaae987909015c5d3c350d8866216667c">port_suspend</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Disables the interrupt sources below kernel-level priority. <a href="#gaaae987909015c5d3c350d8866216667c"></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__core.html#ga1d876d22b4a101a6cdda587a4afa0a67">port_enable</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enables all the interrupt sources. <a href="#ga1d876d22b4a101a6cdda587a4afa0a67"></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__core.html#ga1ebf4a8993a4714d7ff98cc56fd343d6">port_wait_for_interrupt</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enters an architecture-dependent IRQ-waiting mode. <a href="#ga1ebf4a8993a4714d7ff98cc56fd343d6"></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__core.html#gaffa627cc34d473a5c1b00810798c1592">port_halt</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Halts the system. <a href="#gaffa627cc34d473a5c1b00810798c1592"></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__core.html#ga15f282e0911ec832d2b12ced3170ba90">port_switch</a> (<a class="el" href="struct_thread.html">Thread</a> *ntp, <a class="el" href="struct_thread.html">Thread</a> *otp)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Performs a context switch between two threads. <a href="#ga15f282e0911ec832d2b12ced3170ba90"></a><br/></td></tr>
</table>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="ga13c93f367fac1ed91eb714c5995ae484"></a><!-- doxytag: member="kernel/templates/chcore.h::CH_ARCHITECTURE_XXX" ref="ga13c93f367fac1ed91eb714c5995ae484" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define CH_ARCHITECTURE_XXX</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Unique macro for the implemented architecture. </p>
<p>Definition at line <a class="el" href="kernel_2templates_2chcore_8h_source.html#l00043">43</a> of file <a class="el" href="kernel_2templates_2chcore_8h_source.html">kernel/templates/chcore.h</a>.</p>
</div>
</div>
<a class="anchor" id="gaee128c531d64d5a635def6857fef3179"></a><!-- doxytag: member="kernel/templates/chcore.h::CH_ARCHITECTURE_NAME" ref="gaee128c531d64d5a635def6857fef3179" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define CH_ARCHITECTURE_NAME&nbsp;&nbsp;&nbsp;&quot;&quot;</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Name of the implemented architecture. </p>
<p>Definition at line <a class="el" href="kernel_2templates_2chcore_8h_source.html#l00048">48</a> of file <a class="el" href="kernel_2templates_2chcore_8h_source.html">kernel/templates/chcore.h</a>.</p>
</div>
</div>
<a class="anchor" id="gabe8b979d1a33a1b43fc1c1f2967ea6f0"></a><!-- doxytag: member="kernel/templates/chcore.h::CH_ARCHITECTURE_VARIANT_NAME" ref="gabe8b979d1a33a1b43fc1c1f2967ea6f0" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define CH_ARCHITECTURE_VARIANT_NAME&nbsp;&nbsp;&nbsp;&quot;&quot;</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Name of the architecture variant (optional). </p>
<p>Definition at line <a class="el" href="kernel_2templates_2chcore_8h_source.html#l00053">53</a> of file <a class="el" href="kernel_2templates_2chcore_8h_source.html">kernel/templates/chcore.h</a>.</p>
</div>
</div>
<a class="anchor" id="gaf5777aa68e4c4786b577953c7237a95d"></a><!-- doxytag: member="kernel/templates/chcore.h::SETUP_CONTEXT" ref="gaf5777aa68e4c4786b577953c7237a95d" args="(workspace, wsize, pf, arg)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define SETUP_CONTEXT</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">workspace, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">wsize, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">pf, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">arg</td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">{ \
}
</pre></div>
<p>Platform dependent part of the <code>chThdInit()</code> API. </p>
<p>This code usually setup the context switching frame represented by an <code>intctx</code> structure. </p>
<p>Definition at line <a class="el" href="kernel_2templates_2chcore_8h_source.html#l00090">90</a> of file <a class="el" href="kernel_2templates_2chcore_8h_source.html">kernel/templates/chcore.h</a>.</p>
<p>Referenced by <a class="el" href="group__threads.html#gac6de13d4044b32d3ae9e2066b5d4c030">chThdCreateI()</a>.</p>
</div>
</div>
<a class="anchor" id="gaf470de5c7ee71a407e5c7e0c5825af35"></a><!-- doxytag: member="kernel/templates/chcore.h::IDLE_THREAD_STACK_SIZE" ref="gaf470de5c7ee71a407e5c7e0c5825af35" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define IDLE_THREAD_STACK_SIZE&nbsp;&nbsp;&nbsp;0</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Stack size for the system idle thread. </p>
<p>This size depends on the idle thread implementation, usually the idle thread should take no more space than those reserved by <code>INT_REQUIRED_STACK</code>. </p>
<p>Definition at line <a class="el" href="kernel_2templates_2chcore_8h_source.html#l00100">100</a> of file <a class="el" href="kernel_2templates_2chcore_8h_source.html">kernel/templates/chcore.h</a>.</p>
</div>
</div>
<a class="anchor" id="ga010023936d16c8077e8cafa28ea3fc25"></a><!-- doxytag: member="kernel/templates/chcore.h::INT_REQUIRED_STACK" ref="ga010023936d16c8077e8cafa28ea3fc25" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define INT_REQUIRED_STACK&nbsp;&nbsp;&nbsp;0</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Per-thread stack overhead for interrupts servicing. </p>
<p>This constant is used in the calculation of the correct working area size. This value can be zero on those architecture where there is a separate interrupt stack and the stack space between <code>intctx</code> and <code>extctx</code> is known to be zero. </p>
<p>Definition at line <a class="el" href="kernel_2templates_2chcore_8h_source.html#l00112">112</a> of file <a class="el" href="kernel_2templates_2chcore_8h_source.html">kernel/templates/chcore.h</a>.</p>
</div>
</div>
<a class="anchor" id="gaae5413761dbdc6dd267ba0d43a9098ac"></a><!-- doxytag: member="kernel/templates/chcore.h::STACK_ALIGN" ref="gaae5413761dbdc6dd267ba0d43a9098ac" args="(n)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define STACK_ALIGN</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">n</td>
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;((((n) - 1) | (sizeof(<a class="el" href="structstkalign__t.html">stkalign_t</a>) - 1)) + 1)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Enforces a correct alignment for a stack area size value. </p>
<p>Definition at line <a class="el" href="kernel_2templates_2chcore_8h_source.html#l00118">118</a> of file <a class="el" href="kernel_2templates_2chcore_8h_source.html">kernel/templates/chcore.h</a>.</p>
</div>
</div>
<a class="anchor" id="gaf7a83c1c8bde96b77299c36dc598d33d"></a><!-- doxytag: member="kernel/templates/chcore.h::THD_WA_SIZE" ref="gaf7a83c1c8bde96b77299c36dc598d33d" args="(n)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define THD_WA_SIZE</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">n</td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="group__core.html#gaae5413761dbdc6dd267ba0d43a9098ac" title="Enforces a correct alignment for a stack area size value.">STACK_ALIGN</a>(<span class="keyword">sizeof</span>(<a class="code" href="struct_thread.html" title="Structure representing a thread.">Thread</a>) + \
<span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structintctx.html" title="System saved context.">intctx</a>) + \
<span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structextctx.html" title="Interrupt saved context.">extctx</a>) + \
(n) + (<a class="code" href="group__core.html#ga010023936d16c8077e8cafa28ea3fc25" title="Per-thread stack overhead for interrupts servicing.">INT_REQUIRED_STACK</a>))
</pre></div>
<p>Computes the thread working area global size. </p>
<p>Definition at line <a class="el" href="kernel_2templates_2chcore_8h_source.html#l00123">123</a> of file <a class="el" href="kernel_2templates_2chcore_8h_source.html">kernel/templates/chcore.h</a>.</p>
<p>Referenced by <a class="el" href="group__threads.html#gac6de13d4044b32d3ae9e2066b5d4c030">chThdCreateI()</a>.</p>
</div>
</div>
<a class="anchor" id="gac8b681d521d3b6c25e7a0304674732c9"></a><!-- doxytag: member="kernel/templates/chcore.h::WORKING_AREA" ref="gac8b681d521d3b6c25e7a0304674732c9" args="(s, n)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define WORKING_AREA</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">s, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<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="structstkalign__t.html">stkalign_t</a> s[THD_WA_SIZE(n) / sizeof(<a class="el" href="structstkalign__t.html">stkalign_t</a>)]</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Static working area allocation. </p>
<p>This macro is used to allocate a static thread working area aligned as both position and size. </p>
<p>Definition at line <a class="el" href="kernel_2templates_2chcore_8h_source.html#l00133">133</a> of file <a class="el" href="kernel_2templates_2chcore_8h_source.html">kernel/templates/chcore.h</a>.</p>
</div>
</div>
<a class="anchor" id="gaf1bf4fcf135197fa2b8faf1935a25186"></a><!-- doxytag: member="kernel/templates/chcore.h::PORT_IRQ_PROLOGUE" ref="gaf1bf4fcf135197fa2b8faf1935a25186" args="()" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define PORT_IRQ_PROLOGUE</td>
<td>(</td>
<td class="paramname"></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>IRQ prologue code. </p>
<p>This macro must be inserted at the start of all IRQ handlers enabled to invoke system APIs. </p>
<p>Definition at line <a class="el" href="kernel_2templates_2chcore_8h_source.html#l00140">140</a> of file <a class="el" href="kernel_2templates_2chcore_8h_source.html">kernel/templates/chcore.h</a>.</p>
</div>
</div>
<a class="anchor" id="ga65dc6ecfb3cd68961f7abde3a25c2260"></a><!-- doxytag: member="kernel/templates/chcore.h::PORT_IRQ_EPILOGUE" ref="ga65dc6ecfb3cd68961f7abde3a25c2260" args="()" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define PORT_IRQ_EPILOGUE</td>
<td>(</td>
<td class="paramname"></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>IRQ epilogue code. </p>
<p>This macro must be inserted at the end of all IRQ handlers enabled to invoke system APIs. </p>
<p>Definition at line <a class="el" href="kernel_2templates_2chcore_8h_source.html#l00147">147</a> of file <a class="el" href="kernel_2templates_2chcore_8h_source.html">kernel/templates/chcore.h</a>.</p>
</div>
</div>
<a class="anchor" id="gae312af21c95e70c459af69c298eb0f9a"></a><!-- doxytag: member="kernel/templates/chcore.h::PORT_IRQ_HANDLER" ref="gae312af21c95e70c459af69c298eb0f9a" args="(id)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define PORT_IRQ_HANDLER</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">id</td>
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;void id(void)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>IRQ handler function declaration. </p>
<dl class="note"><dt><b>Note:</b></dt><dd><code>id</code> can be a function name or a vector number depending on the port implementation. </dd></dl>
<p>Definition at line <a class="el" href="kernel_2templates_2chcore_8h_source.html#l00154">154</a> of file <a class="el" href="kernel_2templates_2chcore_8h_source.html">kernel/templates/chcore.h</a>.</p>
</div>
</div>
<a class="anchor" id="ga14d1e819dc6e26882fce8ace5e8cfe5c"></a><!-- doxytag: member="kernel/templates/chcore.h::PORT_FAST_IRQ_HANDLER" ref="ga14d1e819dc6e26882fce8ace5e8cfe5c" args="(id)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define PORT_FAST_IRQ_HANDLER</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">id</td>
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;void id(void)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Fast IRQ handler function declaration. </p>
<dl class="note"><dt><b>Note:</b></dt><dd><code>id</code> can be a function name or a vector number depending on the port implementation. </dd>
<dd>
Not all architectures support fast interrupts, in this case this macro must be omitted. </dd></dl>
<p>Definition at line <a class="el" href="kernel_2templates_2chcore_8h_source.html#l00163">163</a> of file <a class="el" href="kernel_2templates_2chcore_8h_source.html">kernel/templates/chcore.h</a>.</p>
</div>
</div>
<hr/><h2>Typedef Documentation</h2>
<a class="anchor" id="gadae302cd6125c8c0d3da27caa5f41657"></a><!-- doxytag: member="kernel/templates/chcore.h::stkalign_t" ref="gadae302cd6125c8c0d3da27caa5f41657" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef <a class="el" href="group___s_t_m8___c_o_r_e.html#gaba7bc1797add20fe3efdf37ced1182c5">uint8_t</a> <a class="el" href="structstkalign__t.html">stkalign_t</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Base type for stack and memory alignment. </p>
<p>Definition at line <a class="el" href="kernel_2templates_2chcore_8h_source.html#l00058">58</a> of file <a class="el" href="kernel_2templates_2chcore_8h_source.html">kernel/templates/chcore.h</a>.</p>
</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="gad8478867d6441d9d94f92819688f15c1"></a><!-- doxytag: member="kernel/templates/chcore.c::port_init" ref="gad8478867d6441d9d94f92819688f15c1" args="(void)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void port_init </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>Port-related initialization code. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>This function is usually empty. </dd></dl>
<p>Referenced by <a class="el" href="group__system.html#gafe2c7de6567e98e487e009e81e3be10b">chSysInit()</a>.</p>
</div>
</div>
<a class="anchor" id="gad9aed313dfdafb6e9c58691af424fcb4"></a><!-- doxytag: member="kernel/templates/chcore.c::port_lock" ref="gad9aed313dfdafb6e9c58691af424fcb4" args="(void)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void port_lock </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>Kernel-lock action. </p>
<p>Usually this function just disables interrupts but may perform more actions. </p>
</div>
</div>
<a class="anchor" id="ga242f36ee65eb9b19258654f7a3b63f87"></a><!-- doxytag: member="kernel/templates/chcore.c::port_unlock" ref="ga242f36ee65eb9b19258654f7a3b63f87" args="(void)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void port_unlock </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>Kernel-unlock action. </p>
<p>Usually this function just disables interrupts but may perform more actions. </p>
</div>
</div>
<a class="anchor" id="gad28405e9f7f53722447e674ff80c3ac9"></a><!-- doxytag: member="kernel/templates/chcore.c::port_lock_from_isr" ref="gad28405e9f7f53722447e674ff80c3ac9" args="(void)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void port_lock_from_isr </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>Kernel-lock action from an interrupt handler. </p>
<p>This function is invoked before invoking I-class APIs from interrupt handlers. The implementation is architecture dependent, in its simplest form it is void. </p>
</div>
</div>
<a class="anchor" id="ga34dcbe2bba4aec9d2cfdc5cb5bebd4fe"></a><!-- doxytag: member="kernel/templates/chcore.c::port_unlock_from_isr" ref="ga34dcbe2bba4aec9d2cfdc5cb5bebd4fe" args="(void)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void port_unlock_from_isr </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>Kernel-unlock action from an interrupt handler. </p>
<p>This function is invoked after invoking I-class APIs from interrupt handlers. The implementation is architecture dependent, in its simplest form it is void. </p>
<p>Referenced by <a class="el" href="group___a_r_m_c_mx___v7_m___c_o_r_e.html#gaa870f7fd669dc9419dda0f9972ecc0d8">SVCallVector()</a>.</p>
</div>
</div>
<a class="anchor" id="ga0544046d4df19935e29784adbd848465"></a><!-- doxytag: member="kernel/templates/chcore.c::port_disable" ref="ga0544046d4df19935e29784adbd848465" args="(void)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void port_disable </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>Disables all the interrupt sources. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>Of course non maskable interrupt sources are not included. </dd></dl>
<p>Referenced by <a class="el" href="group___s_t_m8___c_o_r_e.html#gaffa627cc34d473a5c1b00810798c1592">port_halt()</a>.</p>
</div>
</div>
<a class="anchor" id="gaaae987909015c5d3c350d8866216667c"></a><!-- doxytag: member="kernel/templates/chcore.c::port_suspend" ref="gaaae987909015c5d3c350d8866216667c" args="(void)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void port_suspend </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>Disables the interrupt sources below kernel-level priority. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>Interrupt sources above kernel level remains enabled. </dd></dl>
</div>
</div>
<a class="anchor" id="ga1d876d22b4a101a6cdda587a4afa0a67"></a><!-- doxytag: member="kernel/templates/chcore.c::port_enable" ref="ga1d876d22b4a101a6cdda587a4afa0a67" args="(void)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void port_enable </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>Enables all the interrupt sources. </p>
</div>
</div>
<a class="anchor" id="ga1ebf4a8993a4714d7ff98cc56fd343d6"></a><!-- doxytag: member="kernel/templates/chcore.c::port_wait_for_interrupt" ref="ga1ebf4a8993a4714d7ff98cc56fd343d6" args="(void)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void port_wait_for_interrupt </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>Enters an architecture-dependent IRQ-waiting mode. </p>
<p>The function is meant to return when an interrupt becomes pending. The simplest implementation is an empty function or macro but this would not take advantage of architecture-specific power saving modes. </p>
</div>
</div>
<a class="anchor" id="gaffa627cc34d473a5c1b00810798c1592"></a><!-- doxytag: member="kernel/templates/chcore.c::port_halt" ref="gaffa627cc34d473a5c1b00810798c1592" args="(void)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void port_halt </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>Halts the system. </p>
<p>This function is invoked by the operating system when an unrecoverable error is detected (as example because a programming error in the application code that triggers an assertion while in debug mode). </p>
</div>
</div>
<a class="anchor" id="ga15f282e0911ec832d2b12ced3170ba90"></a><!-- doxytag: member="kernel/templates/chcore.c::port_switch" ref="ga15f282e0911ec832d2b12ced3170ba90" args="(Thread *ntp, Thread *otp)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void port_switch </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_thread.html">Thread</a> *&nbsp;</td>
<td class="paramname"> <em>ntp</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="struct_thread.html">Thread</a> *&nbsp;</td>
<td class="paramname"> <em>otp</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 context switch between two threads. </p>
<p>This is the most critical code in any port, this function is responsible for the context switch between 2 threads. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>The implementation of this code affects <b>directly</b> the context switch performance so optimize here as much as you can.</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>ntp</em>&nbsp;</td><td>the thread to be switched in </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>otp</em>&nbsp;</td><td>the thread to be switched out </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div>
<hr size="1"><address style="text-align: right;"><small>
Generated on Sun Oct 24 2010 09:40:46 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>
</body>
</html>