tinyos tutorial based on wenyuan xu’s slides (trappe/courses/comm...
TRANSCRIPT
![Page 1: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/1.jpg)
TinyOS Tutorial
Based on Wenyuan Xu’s slides (http://www.winlab.rutgers.edu/~trappe/Courses/CommNetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)
![Page 2: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/2.jpg)
Lecture Overview 1. Hardware Primer
2. Introduction to TinyOS
3. Programming TinyOS
4. Network Communication
![Page 3: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/3.jpg)
UC Berkeley Family of Motes
![Page 4: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/4.jpg)
Mica2 and Mica2Dot ATmega128 CPU
Self-programming 128KB Instruction EEPROM 4KB Data EEPROM
Chipcon CC1000 Manchester encoding Tunable frequency
315, 433 or 900MHz 38K or 19K baud
Lower power consumption 2 AA batteries
Expansion 51 pin I/O Connector
1 inch
![Page 5: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/5.jpg)
MTS300CA Sensor Board
![Page 6: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/6.jpg)
Programming Board (MIB510)
![Page 7: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/7.jpg)
Hardware Setup Overview
![Page 8: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/8.jpg)
Ethernet Programming Board (MIB 600)
![Page 9: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/9.jpg)
Testbed (WiSeNeT, 3rd floor, EBII)
![Page 10: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/10.jpg)
Testbed (WiSeNeT, 2nd floor, EBII)
![Page 11: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/11.jpg)
Lecture Overview 1. Hardware Primer
2. Introduction to TinyOS
3. Programming TinyOS
4. Network Communication
![Page 12: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/12.jpg)
What is TinyOS? An operation system
An open-source development environment
Not an operation system for general purpose, it is designed for wireless embedded sensor network. Official website: http://www.tinyos.net/
Programming language: NesC (an extension of C)
It features a component-based architecture.
Supported platforms include Linux, Windows 2000/XP with Cygwin.
![Page 13: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/13.jpg)
Install TinyOS and the ‘make’ Download
http://www.tinyos.net/download.html
Directory Structure/apps
/Blink/Forwarder
/contrib/doc/tools
/java/tos
/interfaces/lib/platform
/mica/mica2/mica2dot
/sensorboard/micasb
/system/types
From within the application’s directory: make (re)install.<node
id> <platform> <node id> is an integer between 0
and 255 <platform> may be mica2,
mica2dot, or allExample: make install.0 mica2
make pc Generates an executable that can
be run a pc for
![Page 14: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/14.jpg)
Build Tool Chain
Convert NesC into Cand compile to exec
Modify exec withplatform-specificoptions
Set the mote ID
Reprogram themote
![Page 15: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/15.jpg)
Lecture Overview 1. Hardware Primer
2. Introduction to TinyOS
3. Programming TinyOS
4. Network Communication
![Page 16: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/16.jpg)
Characteristics of Network Sensors Small physical size and low power consumption Concurrency-intensive operation
multiple flows, not wait-command-respond Limited Physical Parallelism and Controller
Hierarchy primitive direct-to-device interface
Diversity in Design and Usage application specific, not general purpose huge device variation=> efficient modularity=> migration across HW/SW boundary
Robust Operation numerous, unattended, critical=> narrow interfaces
sensorsactuators
network
storage
![Page 17: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/17.jpg)
A Operating System for Tiny Devices? Main Concept
HURRY UP AND SLEEP!! Sleep as often as possible to save power
provide framework for concurrency and modularity Commands, events, tasks
interleaving flows, events - never poll, never block
Separation of construction and composition Programs are built out of components
Libraries and components are written in nesC. Applications are too -- just additional components composed with the OS
components Each component is specified by an interface
Provides “hooks” for wiring components together Components are statically wired together based on their interfaces
Increases runtime efficiency
![Page 18: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/18.jpg)
Programming TinyOs A component provides and uses interfaces. A interface defines a logically related set of commands and events. Components implement the events they use and the commands they
provide:
There are two types of components in nesC: Modules. It implements application code. Configurations. It assemble other components together, called wiring
A component does not care if another component is a module or configuration
A component may be composed of other components via configurations
Component Commands Events
Use Can call Must implement
Provide Must implement Can signal
![Page 19: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/19.jpg)
Component Syntax - Module 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
module ForwarderM { provides { interface StdControl; } uses { interface StdControl as CommControl; interface ReceiveMsg; interface SendMsg; interface Leds; }}implementation { …// code implementing all provided commands and used events}
ForwarderM
StdControl ReceiveMsg
provides uses
CommControl
SendMsg
Leds
![Page 20: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/20.jpg)
Component Syntax - Configurationconfiguration Forwarder { }implementation{ components Main, LedsC; components GenericComm as Comm; components ForwarderM;
Main.StdControl -> ForwarderM.StdControl; ForwarderM.CommControl -> Comm; ForwarderM.SendMsg -> Comm.SendMsg[AM_INTMSG]; ForwarderM.ReceiveMsg -> Comm.ReceiveMsg[AM_INTMSG]; ForwarderM.Leds -> LedsC;}
ComponentSelection
Wiring the Components together
ForwarderM
StdControl ReceiveMsg
provides uses
CommControl
SendMsg
Leds
Main StdControl
LedsCLeds
GenericCommSendMsg
ReceiveMsg
StdControlForwarder
![Page 21: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/21.jpg)
Configuration Wires A configuration can bind an interface user to a
provider using -> or <- User.interface -> Provider.interface Provider.interface <- User.interface
Bounce responsibilities using = User1.interface = User2.interface Provider1.interface = Provider2.interface
The interface may be implicit if there is no ambiguity e.g., User.interface -> Provider
User.interface -> Provider.interface
![Page 22: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/22.jpg)
Interface Syntax- interface StdControl Look in <tos>/tos/interfaces/StdControl.nc
Multiple components may provide and use this interface Every component should provide this interface
This is good programming technique, it is not a language specification
interface StdControl {// Initialize the component and its subcomponents.command result_t init();
// Start the component and its subcomponents.command result_t start();
// Stop the component and pertinent subcomponentscommand result_t stop();
}
![Page 23: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/23.jpg)
Interface Syntax- interface SendMsg Look in <tos>/tos/interfaces/SendMsg.nc
Includes both command and event. Split the task of sending a message into two parts, send
and sendDone.
includes AM; // includes AM.h located in <tos>\tos\types\
interface SendMsg {// send a messagecommand result_t send(uint16_t address, uint8_t length,
TOS_MsgPtr msg);
// an event indicating the previous message was sentevent result_t sendDone(TOS_MsgPtr msg, result_t
success);}
![Page 24: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/24.jpg)
Component implementationmodule ForwarderM { //interface declaration}implementation { command result_t StdControl.init() { call CommControl.init(); call Leds.init(); return SUCCESS; } command result_t StdControl.start() {…} command result_t StdControl.stop() {…} event TOS_MsgPtr ReceiveMsg.receive(TOS_MsgPtr m) { call Leds.yellowToggle(); call SendMsg.send(TOS_BCAST_ADDR, sizeof(IntMsg), m); return m; } event result_t SendMsg.sendDone(TOS_MsgPtr msg, bool success) { call Leds.greenToggle(); return success; }}
Command implementation (interface provided)
Event implementation (interface used)
![Page 25: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/25.jpg)
{... status = call CmdName(args)...}
command CmdName(args) {...return status;}
{... status = signal EvtName(args)...}
event EvtName)(args) {...return status;}
TinyOS Commands and Events
![Page 26: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/26.jpg)
TinyOs Concurrency Model TinyOS executes only one program consisting of a set of
components. Two type threads:
Task Hardware event handler
Tasks: Time flexible Longer background processing jobs Atomic with respect to other tasks (single threaded) Preempted by event
Hardware event handlers Time critical Shorter duration (hand off to task if need be) Interrupts task and other hardware handler. Last-in first-out semantics (no priority among events) executed in response to a hardware interrupt
![Page 27: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/27.jpg)
Tasks Provide concurrency internal to a component
longer running operations Scheduling:
Currently simple FIFO scheduler Bounded number of pending tasks When idle, shuts down node except clock
Uses non-blocking task queue data structure
Simple event-driven structure + control over complete application/system graph instead of complex task priorities and IPC
{...post TaskName();...}
task void TaskName {...}
![Page 28: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/28.jpg)
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 29: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/29.jpg)
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 30: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/30.jpg)
Lecture Overview 1. Hardware Primer
2. Introduction to TinyOS
3. NesC Syntax
4. Network Communication
![Page 31: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/31.jpg)
Inter-Node Communication General idea:
Sender:
Receiver:
Fill messagebuffer with data
SpecifyRecipients
Pass bufferto OS
Determine whenmessage buffercan be reused
OS Buffersincoming messagein a free buffer
Signalapplication withnew message
OS obtains freebuffer to storenext message
![Page 32: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/32.jpg)
TOS Active Messages Message is “active” because it
contains the destination address, group ID, and type.
‘group’: group IDs create a virtual network an 8 bit value specified in
<tos>/apps/Makelocal
The address is a 16-bit value specified by “make” – make install.<id> mica2
“length” specifies the size of the message .
“crc” is the check sum
typedef struct TOS_Msg {
// the following are transmitteduint16_t addr;uint8_t type;uint8_t group;uint8_t length;int8_t data[TOSH_DATA_LENGTH];uint16_t crc;
// the following are not transmitteduint16_t strength;uint8_t ack;uint16_t time;uint8_t sendSecurityMode;uint8_t receiveSecurityMode;
} TOS_Msg;
Preamble Header (5) Payload (29) CRC (2)Sync
![Page 33: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/33.jpg)
TOS Active Messages (continue)
![Page 34: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/34.jpg)
Sending a message Define the message
format Define a unique
active message number
How does TOS know the AM number?
configuration Forwarder { }implementation{ … ForwarderM.SendMsg -> Comm.SendMsg[AM_INTMSG]; ForwarderM.ReceiveMsg -> Comm.ReceiveMsg[AM_INTMSG];}
struct Int16Msg { uint16_t val;};
enum { AM_INTMSG = 47};
File: Int16Msg.h
includes Int16Msg;module ForwarderM { //interface declaration}implementation {event TOS_MsgPtr ReceiveMsg.receive(TOS_MsgPtr m) { call Leds.yellowToggle(); call SendMsg.send(TOS_BCAST_ADDR,
sizeof(IntMsg), m); return m; }
event result_t SendMsg.sendDone(TOS_MsgPtr msg, bool success) { call Leds.greenToggle(); return success; }}
destination
length
![Page 35: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/35.jpg)
Receiving a message Define the message
format Define a unique
active message number
How does TOS know the AM number?
configuration Forwarder { }implementation{ … ForwarderM.SendMsg -> Comm.SendMsg[AM_INTMSG]; ForwarderM.ReceiveMsg -> Comm.ReceiveMsg[AM_INTMSG];}
struct Int16Msg { uint16_t val;};
enum { AM_INTMSG = 47};
File: Int16Msg.h
includes Int16Msg;module ForwarderM { //interface declaration}implementation {event TOS_MsgPtr ReceiveMsg.receive(TOS_MsgPtr m) { call Leds.yellowToggle(); call SendMsg.send(TOS_BCAST_ADDR,
sizeof(IntMsg), m); return m; }
event result_t SendMsg.sendDone(TOS_MsgPtr msg, bool success) { call Leds.greenToggle(); return success; }}
Message received
![Page 36: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/36.jpg)
Further Reading TinyECC
http://discovery.csc.ncsu.edu/software/TinyECC/
Go through the on-line tutorial: http://www.tinyos.net/tinyos-1.x/doc/tutorial/index.html
Search the help archive: http://www.tinyos.net/scoop/special/support#mailing-lists
NesC language reference manual: http://www.tinyos.net/tinyos-1.x/doc/nesc/ref.pdf
Getting started guide http://www.xbow.com/Support/Support_pdf_files/
Getting_Started_Guide.pdf
Hardware manual: http://www.xbow.com/Support/Support_pdf_files/MPR-
MIB_Series_Users_Manual.pdf
![Page 37: TinyOS Tutorial Based on Wenyuan Xu’s slides (trappe/Courses/Comm NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)](https://reader035.vdocuments.site/reader035/viewer/2022062409/56649dd05503460f94ac62f7/html5/thumbnails/37.jpg)
Reference “Programming TinyOS”, David Culler, Phil Levis,
Rob Szewczyk, Joe Polastre University of California, BerkeleyIntel Research Berkeley
“TinyOS Tutorial”, Chien-Liang Fok, http://www.princeton.edu/~wolf/EECS579/imotes/tos_tutorial.pdf
“Computer Networks”, Badri Nath http://www.cs.rutgers.edu/dataman/552dir/notes/week2-one.pdf