tinyos tutorial jianping wang (merge several tutorials found online)

23
TinyOS Tutorial Jianping Wang (merge several tutorials found online)

Upload: claire-turner

Post on 26-Dec-2015

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

TinyOS Tutorial

Jianping Wang(merge several tutorials found online)

Page 2: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

TinyOS• TinyOS is an open source operation system

designed for wireless embedded sensor network. It is not a operation for general purpose.

Official website: http://www.tinyos.net/• It features a component-based architecture which

enables rapid development while minimizing code size.

• Supported platforms include Linux RedHat9.0, Windows 2000/XP with Cygwin.

Page 3: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

TinyOS versions• 1.0 (Oct 2002)• 1.1 (Sep 2003)• 1.1.1 (Nov 2003) add a new routing module MintRoute,

a new ADC interface.• 1.1.3 (Jan 2004) add B-Mac, a new MAC layer w/

CSMA with collision, etc.• 1.1.4 (Feb 2004) add Tython, which is a TOSSIM (a

TinyOS simulator) scripting environment.• 1.1.5 (Mar 2004) make improvements and bugs fixes to

Tython.• 1.1.6 (May 2004) support PageEEPROM component, a

new make system, for PC platform.• 1.1.7 (July 2004) supports MicaZ and Telos.• 1.1.8 (Oct 2004) support TinyOS network programming

components: Delug, NetProg and TOSBoot.

Page 4: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

Serial-line communication in TinyOS• The protocol is based on the PPP in HDLC-like framing

described in RFC-1662.• Components:

• FramerM – provides core framing protocol• FramerAcm – implements ACK processing for inbound packets• UARTFramedPacket – A configuration component incorporating

FrameM and FrameAckM• Applications

• TOBase (apps/TOBase) – simple bridge between serial and wireless chanels

• TransparentBase (apps/TransparentBase) – bridge identical to TOBase but doesn’t check group ID

• GenericBase (apps/GenericBase) – legacy bridge w/o framing or flow control

• Host Tools• net.tinyos.packet.PacketSource (Interface)• Net.tinyos.packet.PhoenixSource (Class)• Net.tinyos.SerialForwarder (Application)

Page 5: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

Different platforms need different solutions

Capabili

tie

s

Size, Power Consumption, Cost

MICA Mote

MK - II

StarGate

Spec

Software: atmel tools, java, perl

Highly constrained (memory, cpu, storage, power)

Solutions: TinyOS,…

Page 6: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

Environment/Tools

2.25 in

1.25 in

Microphone

AccelerometerLightSensor

TemperatureSensor

Sounder Magnetometer

Page 7: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

Environment/Tools

• download TOS distribution and Java JDK from:– http://www.tinyos.net/download.html

• directory structure, after installation:– c:\tinyos\cygwin – installation directory– \opt\tiny-1.x\contrib\xbow\apps {cnt_to_leds, cnt_to_rfm,

sense, …}– \opt\tiny-1.x\docs {connector.pdf, tossim.pdf, …}– \opt\tiny-1.x\tools {toscheck, inject, verify, …}– \opt\tiny-1.x\tos {shared/system components, …}

Page 8: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

Environment/Tools

• verify the software installation:– ~\tools\toscheck.exe

• verify the hardware is working:– ~\apps\mica_hardware_verify\make mica– install the mote into the board. Red LED on.– ~\apps\mica_hardware_verify\make mica install.1– ~\apps\mica_hardware_verify\java hardware_check COM1

Page 9: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

• TinyOS 1.0 libraries and components are written in an extension of C, called nesC

• Applications are too!– just additional components composed with the

OS components• Provides syntax for TinyOS concurrency and storage

model– commands, events, tasks– local frame variable

• Rich Compositional Support– separation of definition and linkage– robustness through narrow interfaces and reuse– interpositioning

Programming TinyOs

Page 10: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

• A TinyOS application consists of one or more components.

• A component provides and uses interfaces.– A interface defines a set of functions called

commands.• There are two types of components in nesC:

– Modules. It implements application code.– Configurations. It assemble other components

together, called wiring.

TinyOs Components (1)

Page 11: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

TinyOs Components (2)

• Component interface:– commands accepts (implemented)– commands uses– events accepts (implemented)– events uses

• Component implementation– functions that implement interface– frame: internal state– tasks: concurrency control

Internal Tasks

Messaging Component

Internal State

Commands Events

Page 12: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

• A component specifies a set of interfaces by which it is connected to other components

– provides a set of interfaces to others– uses a set of interfaces provided by others

• Interfaces are bi-directional– include commands and events

• Interface methods are the external namespace of the component

Timer Component

StdControl Timer

Clock

provides

uses

provides

interface StdControl;

interface Timer:

uses

interface Clock

TinyOs Components (3)

Page 13: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

• TinyOS executes only one program consisting of a set of components.

• Two type threads:– Task– Hardware event handler

• Tasks are scheduled to executed and put into a single queue. A task doesn’t preempt another task.

• Hardware event handlers are executed in response to a hardware interrupt. They may preempt the execution of a task and other hardware handler.

– The events and commands executed as part of a hardware event handler must be declared as async.

TinyOs Concurrency Model

Page 14: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

Issues/Comments

• System perspective:– simplistic FIFO scheduling -> no real-time guarantees – bounded number of pending tasks– no “process” management -> resource allocation

problematic, e.g. shared resources– software level “bit manipulation”. HW implementation

can provide speed-up and power saving

Page 15: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

5/5/2003 MobiSys Tutorial, San Francisco 15

TinyOS Application• TinyOS (TOS) = application/binary image, executable on an TinyOS (TOS) = application/binary image, executable on an

ATmega processorATmega processor• event-driven architectureevent-driven architecture• single-shared stacksingle-shared stack• no kernel, no process management, no memory management, no kernel, no process management, no memory management,

no virtual memoryno virtual memory• 2-level scheduling2-level scheduling• simple FIFO scheduler, part of the mainsimple FIFO scheduler, part of the main

Page 16: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

Application = Graph of Components

RFM

Radio byte

Radio Packet

UART

Serial Packet

ADC

Temp photo

Active Messages

clocks

bit

by

tep

ac

ke

t

Route map router sensor appln

ap

pli

ca

tio

n

HW

SWExample: ad hoc, multi-hop routing of photo sensor readings

3450 B code 226 B data

Graph of cooperatingstate machines on shared stack

Page 17: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

Application = Graph of Components+Scheduler

• TOS application = graph of components + scheduler

CommunicationActuating Sensing Communication

Application (User Components)

Main (includes Scheduler)

Hardware Abstractions

• main {

// component initialization

while(1) {

while(more_tasks) schedule_task;

sleep;

} // while

} // main

Page 18: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

TOS Execution Model• commands request action

– ack/nack at every boundary– call cmd or post task

• events notify occurrence– HW intrpt at lowest level– may signal events– call cmds– post tasks

• Tasks provide logical concurrency– preempted by events

RFM

Radio byte

Radio Packet

bit

by

tep

ac

ke

t

event-driven bit-pump

event-driven byte-pump

event-driven packet-pump

message-event driven

active message

application comp

encode/decode

crc

data processing

Page 19: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

Dynamics of Events and Threads

bit event filtered at byte layer

bit event => end of byte =>

end of packet => end of msg send

thread posted to start

send next message

radio takes clock events to detect recv

Page 20: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

Event-Driven Sensor Access Pattern

• clock event handler initiates data collection

• sensor signals data ready event

• data event handler calls output command

• device sleeps or handles other activity while waiting

• conservative send/ack at component boundary

command result_t StdControl.start() {

return call Timer.start(TIMER_REPEAT, 200);

}

event result_t Timer.fired() {

return call sensor.getData();

}

event result_t sensor.dataReady(uint16_t data) {

display(data)

return SUCCESS;

}

SENSE

Timer Photo LED

Page 21: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

TinyOS Commands and Events{... status = call CmdName(args)...}

command CmdName(args) {...return status;}

{... status = signal EvtName(args)...}

event EvtName)(args) {...return status;}

Page 22: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

TinyOS Execution Contexts

• Events generated by interrupts preempt tasks• Tasks do not preempt tasks• Both essential process state transitions

Hardware

Interrupts

eve

nts

commands

Tasks

Page 23: TinyOS Tutorial Jianping Wang (merge several tutorials found online)

TASKS

• provide concurrency internal to a component– longer running operations

• are preempted by events• able to perform operations beyond event context• may call commands• may signal events• not preempted by tasks

{...post TskName();...}

task void TskName {...}