X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=doc%2Fhtml%2Ftep107.html;h=ab3eaed5070c1f26ce9a808a615744fbeeee02d1;hb=ace2e1376f6c85defb0a5fe22ca43456a796ce05;hp=907c5754b68c24413d87d7f7a51cfd610c932a40;hpb=d68b8abef28bcad6157aed63edeb0f535c82d097;p=tinyos-2.x.git diff --git a/doc/html/tep107.html b/doc/html/tep107.html index 907c5754..ab3eaed5 100644 --- a/doc/html/tep107.html +++ b/doc/html/tep107.html @@ -303,9 +303,9 @@ ul.auto-toc { Philip Levis Draft-Created:10-Dec-2004 -Draft-Version:1.7 +Draft-Version:1.9 -Draft-Modified:2007-02-05 +Draft-Modified:2007-02-10 Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu> @@ -483,8 +483,19 @@ operations besides those which are absolutely necessary for further code, such as scheduler initialization, to execute. Examples of platform_bootstrap() operations are configuring the memory system and setting the processor mode. Generally, platform_bootstrap() -is an empty function. The platform_bootstrap() function SHOULD be -specified in a platform's hardware.h file.

+is an empty function. TinyOS's top-level include file, tos.h, includes +a default implementation of this function which does nothing. If a platform +needs to replace the default, it SHOULD put it in a platform's +platform.h file as a #define. The implementation of tos.h +supports this:

+
+/* This platform_bootstrap macro exists in accordance with TEP
+   107. A platform may override this through a platform.h file. */
+#include <platform.h>
+#ifndef platform_bootstrap
+#define platform_bootstrap() {}
+#endif
+

The boot sequence has three separate initializations: Scheduler, PlatformInit, and SoftwareInit. The boot configuration (MainC) wires the first two automatically, to TinySchedulerC (discussed in TEP 106) @@ -519,9 +530,7 @@ initialization order. As these hidden dependencies must be due to hardware, the sequence is platform-specific. A port of TinyOS to a new plaform MUST include a component PlatformC which provides one and only one instance of the Init interface.

-

Generally, component intialization occurs through SoftwareInit. -PlatformInit is for a small subset of initializations whose properties -requires that they be performed separately. Initializations invoked +

Initializations invoked through PlatformC meet some or all of the following criteria:

  1. The initialization requires configuring hardware resources. This implies that the code is platform-specific.
  2. @@ -538,6 +547,14 @@ all three criteria. LED configuration is a special case: while it nominally meets all three criteria, the most important one is the third: as LEDs are often needed during SoftwareInit initialization, they must be set up before it is invoked.

    +

    Note that not all code which meets some of these criteria is wired through +PlatformC. In particular, criterion 1 is typically necessary but not +sufficient to require PlatformC. For example, a timer system that +configures overflow and capture settings or a UART stack that sets the +baud rate and transmission options can often be wired to SoftwareInit. +They are encapsulated abstractions which will not be invoked or +started until the boot event, and only need to be configured if the +system includes their functionality.

    Components whose initialization does not directly depend on hardware resources SHOULD wire to MainC.SoftwareInit. If a component requires a specific initialization ordering, then it is responsible for