@ nesC Programming KETI / Ubiquitous Computing Center Jeonghoon Kang budge@keti.re.kr

Preview:

Citation preview

@

nesC Programming

KETI / Ubiquitous Computing CenterJeonghoon Kangbudge@keti.re.kr

2

SN Overview

Sensor Network:

Bridge between the internet and the physical world

IEEE 802.15.4 (TinyOS, IPv6, ZigBee, SP100, etc)

3

Network Embedded System C

Application(NesC)

Application(.c)

Application(.exe)

TinyOS KernelTinyOS Libs

NesCComplier

CComplier

App.c Main.exe

4

TinyOS / nesC

2-Level Structure Command (Bottom direction)

Non-time critical Long running operations Cannot preempt & can be preempted Background computation

Events (Top direction) Time critical Small running operations Cannot be preempted Able to interrupt running Tasks

5

Preemption Pre-emption as used with respect to operating systems means the

ability of the operating system to preempt or stop a currently scheduled task in favour of a higher priority task. The scheduling may be one of, but not limited to, process or I/O scheduling etc.

Non-preemptability arises, for instance, when handling an interrupt. In this case, scheduling is avoided until the interrupt is handled. Making a scheduler preemptible has the advantage of better system responsiveness and scalability.

The schedulers used in most modern operating systems, such as various flavours of Unix, can preempt user processes. This is called preemptive multitasking, and is in contrast to cooperative multitasking wherein a process "gives away" its time by utilizing kernel resources or by specifically calling a kernel routine to allow other processes time to run. Some operating systems' schedulers (including Linux as of the 2.6 series) have the ability to preempt a process while it is processing a system call as well (a preemptible kernel).

Linux, Unix, *BSD, Mac OS X, and Windows NT are all examples of operating systems that utilize preemptive multitasking; Netware, Windows for Workgroups, and Macintosh System 9 are all examples of cooperative multitasking operating systems.

From www.wikipedia.org

6

TinyOS Kernel

HardWare& Kernel

Initialization

Application Initialization

Run All Tasks(in the Task Queue)

Run To Completion

Sleep Mode(Low Power) Wait for Interrupt

Infinite Loop

Task QueueEmpty

?

TinyOS Kernel Scheduler

Task 8

Task 7

Task 2

Task 1

Task 4

Task 3

Task 6

Task 5

ADC

Timer

UART

Wireless

Task Queue

InterruptVectors

SLEEP Run Task

Task exists

EventHandler

ISR

Interruptoccurs

7

nesC Overview

[nes-si:] Network Embedded System C Language Supports TinyOS Make applications for Network Embedded

system No dynamic memory allocation Extension of C programming language

Efficient code for micro-controllers Able to interact with old C code Many C Programmer C is little helpful for safe code & structuring

applications

8

nesC Application

Components + Interface *.nc Component:

Module Configuration

Static No dynamic memory No function pointers

Programming ( ATmega128L ) In flash memory(128K, 40K, 60K) In SRAM(4K) In EEPROM(4K)

9

nesC Structure

Component-1.nc(Wiring)

App….nc

Main.nc

(Wiring)

Interface-1.nc

Interface-1.nc

Interface-2.nc

Interface-2.nc

Interface-1.nc

Component-2M.nc(Code)

Component-3M.nc(Code)

Module oooM.nc Code file

Configuration ooo.nc/oooC.nc Wiring of components

Define wiring of Modules Interfaces

ooo.nc Contains only definition Commands/Events

10

File type

Components Configuration Module

Interface

11

Configuration (ex. Blink.nc)

12

Basic Concept

Component Configuration Module

Provides Uses

Interface Command Event

Task Post

Keep in mind (Interface file defines Command / Event) Command is implemented on Providing Component Event is implemented on Using Component

13

Basic Concept: Configuration

Syntax File name:

Top-level configuration: ooo.nc (in each application)

General configuration: oooC.nc

Wire only 2 components together at a time Using with ‘’ and ‘=’

14

Configuration

Ex. Top-level configuration

15

Configuration (ex. Blink.nc)

16

Basic Concept: Module

Syntax Name

File: oooM.nc Interface.command(or event)

Command Implement in all the ‘provides’ interfaces Prefixed with ‘call’

Event Implement in all the ‘uses’ interfaces Prefixed with ‘signal’

17

Module

Ex. Module Interface Command Event

18

Module (ex. BlinkM.nc)

19

Module (ex. BlinkM.nc)

20

Module (ex. BlinkM.nc)

21

Basic Concept: Interface

File name: ooo.nc Bi-directional

Provider & User No actual code or wiring Declare commands and events Provider Module:

Implement all commands User Module:

call command & Implement all events Parameterized Interfaces

Ex.

22

Interface (ex. Timer.nc)

23

Interface (ex. StdControl.nc)

24

Interface

Ex.

25

Configuration

Ex. General configuration

26

Wiring Syntax

Ex. End-point1End-point2 End-point1End-point2 End-point1=End-point2

27

Task

Ex. Task can be posted in command, event and

task task void taskname() {………} Post taskname();

28

Sample nesC Application (Kmote0)

전원 On 부팅 Led On

Basic Application

Component Main.nc, LedsC.nc Test.nc, TestM.nc

Interface StdControl.nc, Leds.nc

29

Top Configuration

Main

TestM

LedsC

StdControl

Leds

Test

30

Configuration (Test.nc)

31

Configuration (Main.nc)

32

Module (MainM.nc)

33

Module (TestM.nc)

34

Module (LedsC.nc)

35

Module (LedsC.nc)

36

Module (LedsC.nc)

37

Module (LedsC.nc)

38

Module (LedsC.nc)

39

Interface (Leds.nc)

40

Interface (Leds.nc)

41

Interface (Leds.nc)

42

Compile Environment

cd /opt/tinyos-1.x/apps/Blink make telosb make telosb install(or reinstall) Make telosb reinstall.1 bsl,/dev/ttyUSB0

1 : node ID bsl : fusing method

Important Environment Variables (so tough for newbie) nesC make

TOSDIR TOSROOT MAKERULES PATH

Java CLASSPATH

Check env | grep TOS

43

VMPlayer on Windows XP, Vista

Easy set-up all the Development Environment for TinyOS-1.x / TinyOS-2.x All set previously on Windows Check for the VM image file : www.tinyosmall.co.kr

http://www.tinyosmall.co.kr/shop/shopdetail.html?brandcode=016002000001&search=&sort=brandname

44

References

The nesC Language: A Holistic Approach to

Networked Embedded Systems

nesC 1.1 Language Reference Manual

http://nescc.sourceforge.net

TinyOS Programming Manual

http://www.tinyos.net/tinyos-2.x/doc/pdf/

tinyos-programming.pdf

Recommended