]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
Incorporate comments from community review.
authorscipio <scipio>
Mon, 22 Jan 2007 21:57:46 +0000 (21:57 +0000)
committerscipio <scipio>
Mon, 22 Jan 2007 21:57:46 +0000 (21:57 +0000)
doc/html/tep106.html

index a444e4af0c17a5f92c6a86111940fdd4b470b7af..4e997267f941cab9bca5f5ab0a1c68e5ff7b537c 100644 (file)
@@ -303,9 +303,9 @@ ul.auto-toc {
 <td>Philip Levis and Cory Sharp</td></tr>
 <tr class="field"><th class="docinfo-name">Draft-Created:</th><td class="field-body">10-Dec-2004</td>
 </tr>
-<tr class="field"><th class="docinfo-name">Draft-Version:</th><td class="field-body">1.1.2.11</td>
+<tr class="field"><th class="docinfo-name">Draft-Version:</th><td class="field-body">1.7</td>
 </tr>
-<tr class="field"><th class="docinfo-name">Draft-Modified:</th><td class="field-body">2006-11-07</td>
+<tr class="field"><th class="docinfo-name">Draft-Modified:</th><td class="field-body">2007-01-20</td>
 </tr>
 <tr class="field"><th class="docinfo-name">Draft-Discuss:</th><td class="field-body">TinyOS Developer List &lt;tinyos-devel at mail.millennium.berkeley.edu&gt;</td>
 </tr>
@@ -463,9 +463,8 @@ interface TaskParameter {
 <p>Using this task interface, a component could post a task with a
 <tt class="docutils literal"><span class="pre">uint16_t</span></tt> parameter. When the scheduler runs the task, it will
 signal the <tt class="docutils literal"><span class="pre">runTask</span></tt> event with the passed parameter, which contains
-the task's logic. Note, however, that this does not save any RAM: if
-anything, it will cost RAM as space must be allocated in the scheduler
-and may then also be allocated in the component. Furthermore, as
+the task's logic. Note, however, that this does not save any RAM:
+the scheduler must have RAM allocated for the parameter.  Furthermore, as
 there can only be one copy of a task outstanding at any time, it
 is just as simple to store the variable in the component. E.g.,
 rather than:</p>
@@ -552,6 +551,10 @@ Calls of runNextTask(FALSE) may return TRUE or FALSE; calls of
 runNextTask(TRUE) always return TRUE.   The taskLoop() command tells
 the scheduler to enter an infinite task-running loop, putting the MCU
 into a low power state when the processor is idle: it never returns.</p>
+<p>The scheduler is repsonsible for putting the processor to sleep
+predominantly for efficiency reasons. Including the sleep call
+within the scheduler improves the efficiency of the task loop,
+in terms of the assembly generated by the TinyOS toolchain.</p>
 <p>This is the TaskBasic interface:</p>
 <pre class="literal-block">
 interface TaskBasic {
@@ -572,6 +575,10 @@ keywords are used.</p>
 entries. When TinyOS tells the scheduler to run a task, it pulls the
 next identifier off the queue and uses it to dispatch on the
 parameterized TaskBasic interface.</p>
+<p>While the default TinyOS scheduler uses a FIFO policy, TinyOS
+components MUST NOT assume a FIFO policy. If two tasks must run
+in a particular temporal order, this order should be enforced by
+the earlier task posting the later task.</p>
 </div>
 <div class="section">
 <h1><a id="replacing-the-scheduler" name="replacing-the-scheduler">5. Replacing the Scheduler</a></h1>
@@ -672,7 +679,9 @@ implementation {
 <p>The requirement that basic tasks not be subject to starvation
 requires that a scheduler supporting EDF tasks must ensure that
 basic tasks run eventually even if there is an unending stream of
-short deadline tasks to run.</p>
+short deadline tasks to run. Quantifying &quot;eventually&quot; is difficult,
+but a 1% share of the MCU cycles (or invocations) is a reasonable
+approximation.</p>
 <p>If the scheduler provides two instances of the same task interface,
 their unique keys are based on the name of the interface as the
 scheduler presents it (the &quot;as&quot; keyword). For example, imagine