TOSThreads Tutorial

From TinyOS Wiki
Revision as of 23:55, 1 December 2008 by Liangmike (talk | contribs) (New page: This lesson demonstrates how to use the TOSThreads library. You will learn how to do the following: * Use the nesC API to create and manipulate both static and dynamic threads. * Use the C...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

This lesson demonstrates how to use the TOSThreads library. You will learn how to do the following:

  • Use the nesC API to create and manipulate both static and dynamic threads.
  • Use the C API to create and manipulate threads.
  • Add TOSThreads support to new system services.

Note: TOSThreads is part of TinyOS 2.1.

Introduction

TOSThreads is an attempt to combine the ease of a threaded programming model with the efficiency of a fully event-based OS. Unlike earlier threads packages designed for TinyOS, TOSThreads offers the following benefits:

  1. It supports fully-preemptive application-level threads.
  2. It does not need explicit continuation management, such as state variables between corresponding commands and events.
  3. It does not violate TinyOS's concurrency model.
  4. It requires minimal changes to the existing TinyOS code base. In addition, adding TOSThreads support to a new platform is a fairly easy process.
  5. It offers both nesC and C APIs.

In TOSThreads, TinyOS runs inside a single high-priority kernel thread, while the application logic is implemented in user-level threads. User-level threads execute whenever the TinyOS core becomes idle. This approach is a natural extension to the existing TinyOS concurrency model: adding support for long-running computations while preserving the timing-sensitive nature of TinyOS itself.

In this model, application threads access underlying TinyOS services using a kernel API of blocking system calls. The kernel API defines the set of TinyOS services provided to applications, such as radio, collection [TEP119], and so on. Each system call in the API is comprised of a thin blocking wrapper built on top of one of these services. The blocking wrapper is responsible for maintaining states across the non-blocking split-phase operations. TOSThreads allows system developers to re-define the kernel API by appropriately selecting an existing set or implementing their own blocking system call wrappers.

Please refer to TEP134 for more details on the TOSThreads implementation.

The TOSThreads library

At the time of writing, TOSThreads supports the following platforms: telosb, micaZ, and mica2. And, it supports various generic split-phase operations, such as the Read interface and the SplitControl interface, and system services, such as radio, serial, external flash (both Block and Log abstractions), CTP (Collection Tree Protocol), and so on. You can find the code in tinyos-2.x/tos/lib/tosthreads as described below.

TOSThreads system files are located in several subdirectories under tinyos-2.x/tos/lib/tosthreads.

  1. chips: Some chip-specific files that shadow tinyos-2.x/tos/chips to add code such as the interrupt postamble.
  2. csystem: Contain C API system files and the header file for different system services.
  3. interfaces: Contain nesC API interfaces.
  4. lib: Shadow some files in tinyos-2.x/tos/lib, and contain the blocking wrapper for CTP.
  5. platforms: Shadow some files in tinyos-2.x/tos/platforms.
  6. sensorboards: Contain blocking wrappers for telosb's onboard SHT11 sensors, and an universal sensor that generates a sine wave.
  7. system: Contain nesC API system files and the blocking wrappers for different system services.
  8. types: Define the structs used by TOSThreads system files.

You can find example TOSThreads applications are in tinyos-2.x/apps/tosthreads.

Related Documentation