You are on page 1of 90

LI NI U

Cc i tng thng minh thng l cc thit b n gin, nh gn, gi


thnh thp, s dng ngun nng lng hn ch (pin), c thi gian hot ng lu
di. Mt trong nhng c im ni bt ca mt nt mng cc i tng thng
minh l s hn ch v nng lc tnh ton, ngun nng lng cung cp, v gi
thnh sn xut. Mc d phn cng n gin nhng cc i tng thng minh
v ang c ng dng rng ri trong i sng.
Vic h tr c s h tng cho cc ng dng mng cc i tng thng
minh trn h iu hnh ngy cng tr nn quan trng. Bn cht, h iu hnh l
cu ni gia phn cng n gin vi phn ng dng phc tp.
H iu hnh cho mng cc i tng thng minh ng vai tr trung tm
trong vic xy dng cc ng dng phn tn vi kh nng m rng, c tin cy
v hiu qu cao. Qua nhiu nm, chng ta thy xut hin nhiu h iu hnh
khc nhau nhm d dng cho vic pht trin cc ng dng mng vi cc i tng
thng minh. Cc chc nng c bn ca h iu hnh bao gm vic tru tng ha
ti nguyn cho cc thit b phn cng khc nhau, qun l ngt v lp lch cc
nhim v, iu khin ng thi, v h tr mng. Da trn cc dch v c cung
cp bi h iu hnh, nhng ngi lp trnh ng dng c th thun tin s dng
cc giao din lp trnh ng dng mc cao c lp vi phn cng lp di.
H iu hnh Contiki l h iu hnh m ngun m, c nghin cu, thit
k v pht trin bi mt nhm cc nh pht trin t vin khoa hc my tnh Thy
in, ngi ng u l Adam Dunkels. Nhm pht trin Contiki gm nhiu
thnh vin n t SICS, CISCO, cng nhiu t chc v cc trng i hc khc
trn th gii. H iu hnh Contiki c thit k cho cc vi iu khin c b nh
nh, vi thng s 2KB RAM v 40KB ROM. Nh , Contiki c s dng rng
ri cho cc i tng thng minh.
Ni dung bi ging ny gm 4 chng:
Chng 1: Tng quan v h iu hnh nhng cho cc i tng thng
minh. Chng ny kho st cc h iu hnh hin c t a ra nhng so snh
v nhng hng nghin cu trong tng lai i vi cc h iu hnh ny.
Chng 2: Gii thiu v h iu hnh Contiki. Chng ny gii thiu tng
quan v h iu hnh Contiki bao gm lch s hnh thnh v pht trin, cc c
im chnh, k thut lp trnh trn h iu hnh Contiki, vn qun l b nh,
cc bc ci t mi trng pht trin ng dng vi Contiki trn Ubuntu.
1

Chng 3: Cc module trong h iu hnh Contiki. Chng ny trnh by


cc module chnh trong h iu hnh Contiki bao gm ngn xp truyn thng uIP,
RIME, cc giao din lp trnh ng dng, module qun l b nh, Contiki system,
cc th vin, cc nn tng phn cng c h tr trn h iu hnh Contiki.
Chng 4: Xy dng chng trnh vi Contiki. Chng ny trnh by cch
xy dng chng trnh ng dng v cch m phng, thc thi chng trnh trn
thit b thc.
Mc du a ht sc c gng nhng khng th trnh khi cc thiu st. Mi
kin ng gp

MC LC

LI NI U.....................................................................................................................1
MC LC...........................................................................................................................2
Chng 1. TNG QUAN V H IU HNH CHO MNG CC I TNG
THNG MINH...................................................................................................................4
Chng 2. H IU HNH CONTIKI ..........................................................................19
Chng 3. CC MODULE TRONG H IU HNH CONTIKI.................................37
Chng 4. XY DNG CHNG TRNH ...................................................................38
NG DNG VI CONTIKI............................................................................................38
[edit] The COOJA Simulator.............................................................................................38
[edit] Getting started..........................................................................................................38
[edit] Feature requests, bug reporting, and questions........................................................41
Get started with the Cooja simulator.................................................................................41
Example-Shell Guide.........................................................................................................60
Simple Contiki Data Collection on the Tmote Sky...........................................................62
Setting up a Low-Power IPv6/RPL Network....................................................................72
REST-Example Guide.......................................................................................................88
TI LIU THAM KHO.................................................................................................89

Chng 1. TNG QUAN V H IU HNH CHO MNG CC


I TNG THNG MINH
1.1. Gii thiu v cc i tng thng minh
Cc i tng thng minh thng l cc thit b n gin, nh gn, gi
thnh thp, s dng ngun nng lng hn ch (pin), c thi gian hot ng lu
di (vi thng n vi nm).
Mt v d in hnh v cc i tng thng minh l cc nt cm bin
khng dy. Trong cc nt mng thng l cc thit b n gin, nh gn, gi
thnh thp v c s lng ln c phn b mt cch khng c h thng trn
phm vi hot ng rng, s dng ngun nng lng hn ch. Cc nt mng
thng c chc nng cm nhn, quan st mi trng xung quanh nh nhit ,
m, nh sng theo di hay nh v cc mc tiu c nh hoc di ng Cc nt
giao tip ad-hoc vi nhau v truyn d liu v trung tm (base station) vi cch
thc giao tip bng k thut multi-hop.
Cu trc bn trong cc i tng thng minh thng c mt b vi iu
khin chy cc phn mm. Vi iu khin l mt b vi x l c b nh trong, b
nh thi, v phn cng cho vic kt ni cc thit b bn ngoi khc. Vi iu khin
trng ging nh mt vi mch thng thng vi mt v bc bng nha, cc chn
kt ni bng kim loi nh trong hnh 1.1.

Hnh 1.1: Mt b vi iu khin Atmel ATTINY 2313 vi 20 chn. Cc b


ATTINY 2313 c 2kB ca ROM v 128byte b nh RAM.
Do hn ch v chi ph v nng lng, cc vi iu khin c s dng trong
cc i tng thng minh thng nh hn nhiu so cc b vi x l c s dng
trong cc my tnh c nhn. Thng thng, mt b vi iu khin s dng trong nt
cm bin c mt vi KB b nh ca chip v c chy tc xung nhp mt vi
MHz. Trong khi , my tnh hin i c n hng Gbytes b nh v chy xung
nhp mt vi Ghz.
Vi iu khin c hai loi b nh: B nh ch c (ROM) v b nh truy
cp ngu nhin (RAM). ROM c s dng lu tr m chng trnh cn RAM
c s dng cho cc d liu tm thi ca chng trnh phn mm. D liu tm
thi bao gm vic lu tr cc bin chng trnh v b nh m x l lu lng
v tuyn. Ni dung ca ROM c ghi vo thit b khi n c sn xut v
thng khng b thay i sau khi nt c trin khai. Tuy nhin, vi iu khin
hin i cung cp mt c ch ghi li ROM, m n rt c ch cp nht phn
mm sau khi cc nt c trin khai.
Ngoi b nh th b vi iu khin cn c b nh thi v c ch tng tc
vi cc thit b bn ngoi nh thit b truyn thng, cm bin. Cc b b nh thi
c th c s dng bi cc phn mm chy trn vi iu khin. Cc thit b bn
ngoi c kt ni vt l vi cc chn ca vi iu khin. Cc phn mm giao tip
vi cc thit b s dng cc c ch c cung cp bi vi iu khin, thng thng
dng mt cng ni tip hoc cc Bus ni tip. Hu ht cc b vi iu khin cung
cp b thu pht ng b/khng ng b chung (USART) giao tip vi cc cng

ni tip. Mt s USART c th c cu hnh lm vic nh mt giao din bus


ngoi vi ni tip (SPI) giao tip vi cm bin.
Ngy nay, Pin l ngun nng lng ph bin nht cho cc i tng thng
minh. Chng c nhiu hnh dng v kiu dng. Cc Pin Lithium hin nay l ph
bin nht. Vi vic qun l nng lng thch hp, mt i tng thng minh c
th c tui i hng nm trn tiu chun t bo pin lithium.
Mi hot ng ca mt i tng thng minh c xc nh bi phn mm
chy trn b vi iu khin. Cc phn mm thng c vit tng t nh phn
mm cho cc my tnh. Cc chng trnh c vit bng mt ngn ng lp trnh,
chng hn nh C, v c bin dch vi mt trnh bin dch m my cho vi iu
khin. Cc m my c ghi vo ROM ca vi iu khin. Khi c bt ngun, th
b vi iu khin s chy cc phn mm. Qu trnh ny c minh ha trong hnh
1.2.
Mc d hon ton c th chy chng trnh cho vi iu khin m khng
cn s dng mt h iu hnh no, nhng hu ht cc i tng thng minh s
dng h iu hnh. Bi v cc hn ch v ti nguyn nn cc h iu hnh cho
chng rt khc vi cc h iu hnh cho my tnh. Cc h iu hnh cho cc i
tng thng minh nh gn hn nhiu v tiu tn t ti nguyn.

Hnh 1.2: Qu trnh pht trin phn mm cho i tng thng minh.
M ngun c c bin dch thnh m my m c ghi
vo ROM trong b vi iu khin.

1.2. H iu hnh nhng cho cc i tng thng minh


1.2.1. Chc nng ca h iu hnh
Mt mng cc i tng thng minh in hnh bao gm mt s lng ln
cc nt vi kch thc nh, ngun nng lng pin hn ch, mt b x l, v kh
nng truyn thng.
Mc d phn cng ca cc i tng thng minh n gin nhng cc ng
dng mng ca cc i tng thng minh bao gm nhiu ng dng khc nhau v
theo nhu cu. Vic h tr c s h tng cho cc ng dng trn h iu hnh ngy
cng tr nn quan trng. Bn cht, h iu hnh l cu ni gia phn cng n
gin vi phn ng dng phc tp.
Cc chc nng c bn ca h iu hnh bao gm vic tru tng ha ti
nguyn cho cc thit b phn cng khc nhau, qun l ngt v lp lch cc nhim
v, iu khin ng thi, v h tr mng. Da trn cc dch v c cung cp bi
h iu hnh, nhng ngi lp trnh ng dng c th thun tin s dng cc giao
din lp trnh ng dng mc cao (APIs) c lp vi phn cng lp di. Bi v
hu ht cc thit b c ti nguyn hn ch do vy mt h iu hnh khng nn ch
cung cp cc dch v a dng thun li cho vic lp trnh cc ng dng m cn
tn dng ti nguyn mt cch ti u.
1.2.2. Nhng thch thc nh hng n vic thit k h iu hnh
Hin ti, vic nghin cu v pht trin h iu hnh cho cc i tng
thng minh ang gp phi mt s thch thc cn phi gii quyt. Nhng thch
thc chnh l cc rng buc v ti nguyn ca phn cng v cc yu cu ca ng
dng. Nhng thch thc chnh nh hng n vic thit k h iu hnh c
quan tm nht l:

Kch thc nh: Vi b nh b gii hn ch vi KB nn i hi h iu


hnh phi c thit k vi kch thc rt nh. y l c im c bn ca
h iu hnh cho cc i tng thng minh v cng l l do chnh m
ti sao nhiu h iu hnh nhng tinh vi (nh uC/OS, VxWorks) khng th
d dng ci t c trn cc thit b ny.

Hiu qu nng lng: Cc i tng thng minh thng hot ng bng


pin do vy vn nng lng cng cn phi quan tm.

m bo thi gian thc: Nhiu ng dng ca cc i tng thng minh


v d nh l ng dng gim st thng c khuynh hng nhy cm vi thi

gian. Vi cc ng dng , cc gi tin cn c chuyn tip v gi i mt


cch kp thi, vn m bo thi gian thc l yu cu p ng cho cc
ng dng .

Kh nng cu hnh li: L iu cn thit vi cc h thng mng ti


nguyn hn ch c th c lp trnh li sau khi mng c trin khai. Kh
nng cu hnh li h thng l mt c im cn thit ca h iu hnh lm
cho mng c th lp trnh li d dng v hiu qu.

S tin li cho lp trnh: Cc ng dng ca mng cc i tng thng


minh l khc nhau v ty theo yu cu. Do vy, s tin li cho lp trnh l
mt iu quan trng nht rt ngn thi gian trin khai cc ng dng.
Thng th rt kh t c s ti u trong tt c cc vn nu ra

trn. Hu ht cc gii php hin ti c p dng cho cc kch bn ng dng c


th v to ra nhng tha hip nhm gii quyt cc thch thc thit k trn.
1.2.3. Cc thnh phn c bn ca mt h iu hnh
Cc thnh phn chnh cu thnh nn h iu hnh cho cc i tng thng
minh c lit k di y:

Lp lch nhim v: Thnh phn lp lch nhim v cung cp cho ngi lp


trnh ng dng mi trng nhim v cho vic thc thi on m ng dng.
Hin ti, c ba c ch lp lch nhim v l: Lp lch nhim v iu khin
theo s kin (event-driven), lp lch nhim v a lung (multi-threaded) v
lp lch nhim v Prototheads.

Np v lin kt ng: Thnh phn np v lin kt ng cho php cc phn


ng dng c np hon ton ng v ci thin kh nng t cu hnh h
iu hnh khi lp trnh li mng. Khi phn ng dng c np, trnh lin
kt v np nh v khng gian nh cho phn m v d liu ca ng dng,
lin kt cc k hiu ti cc a ch vt l ca chng, v sao chp phn c
lin kt ti khng gian b nh dnh ring. C ch ny rt hu ch khi lp
trnh li mt ng dng trn cc nt mng: Khng phi truyn b c mt
khi hnh nh nhn ng dng, m n ch yu cu truyn b phn ng dng
ph bin nh hn nhiu do vy hiu qu hn v nng lng.

Qun l b nh: B nh trong cc thit b c th c phn loi gm:


RAM (cho vic lu tr d liu nhanh), b nh trong (cho vic lu tr m),
EEPROM (cho lu tr d liu), v b nh ngoi (cho vic lu tr d liu).
V d nh, vi MicaZ c 4KB RAM, 128KB b nh trong, 4KB EEPROM,
8

v 512KB b nh ngoi. B nh RAM l quan trng cho vic truy nhp d


liu nhanh trong khi b nh bn ngoi l quan trng cho lu tr d liu.
Vic qun l b nh RAM cng c th l tnh hoc ng. Vic qun l b
nh ngoi c th cung cp s tru tng mc cao chng hn nh tp (v d
vi h iu hnh LiteOS) hoc nhng tru tng mc thp nh khi (v d
vi h iu hnh TinyOS).

Tru tng ha ti nguyn: Thnh phn tru tng ha ti nguyn cung


cp giao tip truy nhp mc cao v an ton vi cc thit b phn cng. V
d nh, tru tng ha ti nguyn trong TinyOS c phn loi thnh
nhng tru tng ha ti nguyn dnh ring, nhng tru tng ha ti
nguyn o, v nhng tru tng ha ti nguyn chia s. Ti nguyn dnh
ring h tr cho mt ngi dng duy nht. Ti nguyn o h tr nhiu
ngi dng bng vic duy tr hng i v lp lch cho nhiu yu cu ng
thi theo kiu tun t. Ti nguyn chia s cng h tr nhiu ngi dng,
nhng cc ngi dng phi cnh tranh cc trnh iu khin thng qua mt
kha.

Cc giao din cm bin: Cc giao din cm bin cung cp cho ngi lp


trnh ng dng cch thc truy cp c d liu cm bin mt cch d
dng v theo dng chun. Nhng m t chi tit mc thp c gn vi
nhng cu hnh cm bin cng c tru tng ha vi nhng ngi lp
trnh ng dng.

Ngn xp mng: Ngn xp mng thun tin cho vic pht trin cc ng
dng WSN phn tn. N cng cn thit cho vic duy tr h thng t xa sau
khi WSN c trin khai. Ngn xp mng cho h iu hnh nn h tr cc
dch v mc cao chng hn nh vic thu thp v truyn d liu. N cng
qun l cc chi tit mc thp nh cu hnh chip thu pht v tuyn, iu
khin truy nhp ng truyn (MAC), v qun l hng i.

1.2.4. Kho st mt s h iu hnh


Mc ny ca bo co s m t cc h iu hnh tin tin hin nay. Cn phi
ch rng, hu ht cc h iu hnh vn ang c pht trin, do vy mc ny ch
m t nhng c im chnh trong cc phin bn hin ti ca cc h iu hnh
ny.
1.2.4.1. TinyOS
H iu hnh TinyOS c pht trin UC Berkeley, c l l h iu hnh
nhng cho cc i tng thng minh sm nht. N cho php mt kin trc mm
9

do v tiu th ti nguyn thp, vic lp trnh trn TinyOS da trn cc thnh phn
c kt ni vi nhau to mt ng dng thi im thit k. Nhng tng tc
gia cc thnh phn xy ra theo hai chiu, tc l mt thnh phn s dng lnh
c cung cp bi mt thnh phn khc; ngoi ra, mt thnh phn c th bo hiu
cc s kin ti mt thnh phn khc. M hnh thc thi ca TinyOS bao gm cc
ngt (interrupt) v cc nhim v (task). Cc ngt c thc thi mc u tin cao
hn v c th c u tin thc thi trc cc nhim v. Cc nhim v c thc
thi mc u tin thp hn v c lp lch theo kiu vo trc ra trc FIFO
(First In First Out). Cc nhim v trong TinyOS c vit theo kiu run-tocompletion (chy n khi hon thnh), v chng khng th ginh c quyn u
tin trc (preempt) hoc tm ngng (suspend). V l do ny, vic xut nhp
(I/Os) c chia thnh cc giai on. Tc l mt yu cu (request) c thc hin
vo lc kt thc mt nhim v trong khi tn hiu (signal) gi n s bt u ca
nhim v tip theo. h tr tt hn cho kin trc thnh phn v m hnh thc thi
ca TinyOS th ngn ng nesC c thit k cho vic lp trnh da trn TinyOS.
Phin bn 2 ca TinyOS (T2) ci tin sa vi phin bn 1 mt s mt. T2
cng cp s tra tng lng nhau, n l s lai ghp s phn chia theo phng
ngang (cho mc thp hn h tr nhiu loi thit b phn cng khc nhau), v s
phn chia theo phng ng (cho mc cao hn h tr chc nng nn tng phn
cng c lp), v lm cho n d dng h tr cc nn tng phn cng mi. Bn
cnh nhng ci tin kin trc, c mt s ci tin quan trng trong s thc thi, bao
gm h tr c lung (v d TinyThreads, v TOSThreads trong TinyOS phin bn
2.1), h tr bo v b nh. Hn na, T2 cung cp dch v phn tn v cung cp
mt nhm cc thnh phn (v d cc dch v) ci thin tin cy ca h thng.
Bn cnh nhng ci tin kin trc, c mt s ci tin quan trng trong s thc thi,
bao gm h tr c lung (v d TinyThreads, v TOSThreads trong TinyOS phin
bn 2.1), h tr bo v b nh.
1.2.4.2. Contiki
Cc thnh phn trong TinyOS c kt ni hon ton tnh to mt ng
dng hay mt nhn n duy nht. Cch tip cn ny c th ti u vic tiu th ti
nguyn nhng cng rt phc tp t ng cu hnh li hay cp nht cc ng
dng. gii quyt vn ny, Vin khoa hc my tnh Thy in nghin cu
10

v pht trin h iu hnh Contiki. Contiki h tr cc thnh phn c th np t


ng. gii quyt nhng kh khn trong kiu lp trnh da trn s kin (v d
trong TinyOS), Contiki h tr hot ng a lung (tc l s chuyn i tnh
hung nhng thi im c xc nh bi ngi dng) thng qua cc th vin
ngi dng. Contiki cng h tr c ch lung nh protothreads. Phin bn mi
nht ca Contiki thc thi mt tp h thng trong b nh ROM gi l Coffee v
kin trc Chameleon cho ngn xp v tuyn nng lng thp Rime.
1.2.4.3. SOS
H iu hnh SOS c pht trin i hc California, Los Angeles, cng
h tr cc module c th t ng np. N s dng kin trc da trn module. C
mt iu lu l c s khc nhau gia cc thnh phn trong TinyOS v cc
modules trong SOS. Cc thnh phn trong TinyOS ch c th nhn thy t gc
nhn ca nhng ngi lp trnh v chng khng thy khi c bin dch thnh
on m nh phn. Mt khc, cc modules trong SOS vn cn cc thng tin m nh
phn (v d nh im bt u ca mt module, cc hm ca mt module) sau khi
bin dch, cho php cc modules c np hoc np li t ng. h tr kin
trc ny, SOS cng h tr vic nh v b nh ng.
M hnh thc thi SOS phc tp hn khng nhiu so vi TinyOS. Cc trnh
x l bn tin SOS (ging nh cc cc tasks trong TinyOS) c gii quyt theo ba
mc u tin. Phin bn mi nht ca SOS l phin bn 2.0.1, ci tin hn so vi
phin bn c mt s im, bao gm s h tr nhiu nn phn cng v h tr
vic bo v b nh. Tuy nhin, k t 24/11/2008, SOS khng c pht trin bi
v cc thnh vin pht trin chnh tt nghip.
1.2.4.4. MantisOS
Mantis OS c pht trin i hc Colorado. Mantis OS cho php h tr
a lung thc hin a lung phn chia theo thi gian u tin. cho php lp
trnh a lung, nhn Mantis cng h tr ng b I/Os (ngc vi chia giai on
I/Os), v mt tp cc b iu khin ng thi Semaphores. Phin bn Mantis mi
nht ci thin s n nh ca h thng v sa mt s li. Ngoi ra, n thc hin
giao thc CTP (Collection Tree Protocol) cho cc nn phn cng MicaZ v
TelosB.
1.2.4.5. Nano-RK
11

H tr cc ng dng mng khng dy nhy cm vi thi gian nh gim st


mi trng v gim st an ninh. Nano-RK c pht trin i hc Carnegie
Mellon, thc hin h iu hnh thi gian thc. Nano-RK h tr quyn u tin a
nhim m bo cc nhim v c p ng ng thi hn. N cng h tr vic
ginh trc rng di tn mng v CPU, tc l cc nhim v c th ch nh cc
yu cu ti nguyn ca chng v h iu hnh cung cp bng thng mng v vic
truy cp cc chu k CPU kp thi, m bo v c kim sot. thun tin cho
vic lp trnh, Nano-RK cung cp cc APIs cho cc tru tng ha ging nh
socket, v h thng chung h tr nh tuyn v lp lch mng.
1.2.4.6. RETOS
RETOS c pht trin i hc Yonsei Hn Quc, c thit k ci
tin mt s im cc cng vic trc. N ci tin kh nng phc hi h thng
bi vic h tr ch vn hnh kp (tc l ch ht nhn v ch ngi dng)
cng nh vic kim tra m ng dng thi im thit k v thi im chy.
N ti u s thc thi a lung v h tr vic lp lch thi gian thc POSIX
1003.1b. N cng h tr kh nng np cc modules v cc dch v mng a
chng. Phin bn mi nht ca RETOS h tr nhiu nn phn cng khc nhau, ti
u ha lp mng v ci thin s an ton h thng.
1.2.4.7. LiteOS
LiteOS c pht trin i hc Illinois ti Urbana Champaign, c thit
k cung cp mi trng lp trnh ng dng cho mng khng dy ging nh
UNIX truyn thng. N bao gm: H thng file phn cp v wireless shell cho s
tng tc vi ngi dng s dng cc lnh ging Unix; H tr cc ht nhn cho
vic thc thi np t ng cc ng dng a lung; Ngn ng lp trnh hng i
tng c s dng mt tp con ca ngn ng C++. Phin bn mi nht ca
LiteOS c s h tr mt s nn tng phn cng IRIS ca Crossbow. Hn na, n
h tr c ch Virtual Battery v h thng g ri t xa (Declarative Tracepoints).
1.2.5. Tiu ch phn loi h iu hnh
Mc ny trnh by s phn loi cc h iu hnh da trn vic kho st mt
s c im h iu hnh quan trng.

12

Tnh hay ng: Trong cc h thng tnh (v d nh TinyOS, Nano-PR),


ngi lp trnh ng dng phi nh v tt c cc ti nguyn thi im thit
k. Mt khc, trong cc h thng ng (v d nh SOS, Contiki, Mantis,
RETOS, LiteOS), nhng ngi lp trnh ng dng c th nh v v nh v
li cc ti nguyn thi im chy ng dng. Cc h thng ng mm do
hn v do vy ph hp cho nhng mi trng thay i thng xuyn. Tuy
nhin, chng khng tin cy v d nh mt ng dng li c th d dng
ginh c qu nhiu ti nguyn ( thi gian chy ng dng), l nguyn
nhn lm cho ton b h thng b sp .

Hng s kin hay a lung: Trong cc h thng hng s kin (v d


nh TinyOS, SOS), ngi lp trnh ng dng cn phi duy tr trng thi
ng dng v s dng chia giai on I/Os. Mt khc, cc h thng a lung
(v d nh Mantis, Nano-RK, RETOS), ngi lp trnh ng dng c th s
dng cch lp trnh nh cc lung truyn thng. Do vy, cc h thng a
lung ngy cng quen thuc vi hu ht nhng ngi lp trnh v c
xem nh l thn thin vi ngi dng hn cc h thng hng s kin. C
mt lng ln cc d n tp trung ci tin h thng hng s kin bng
vic cung cp thm s h tr a lung. V d nh TinyThread,
TOSThreads l cc th vin lung da trn TinyOS. Contiki h tr a
lung u tin thng qua mt th vin trn ht nhn hng s kin, v n
cng thc thi mt c ch lung con c gi l protothreads. Cc h thng
hng s kin cng rt hu dng bi v: Chng ph hp cho cc ng dng
phn ng nhanh v iu quan trng hn l yu cu ti nguyn t v ph hp
cho cc thit b hn ch v ti nguyn. Do vy, mt s h thng a lung
cng vn h tr s kin v d nh LiteOS cung cp s h tr Events thng
qua cc hm Callback.

n khi hay module ha: Mt ng dng c th c bin dch vi h


iu hnh nh mt khi chng trnh (v d TinyOS) hoc c th c bin
dch thnh cc phn chng trnh ring l m chng c th c np bi
nhn h iu hnh (v d nh Contiki, SOS, RETOS). Cch tip cn n
khi c kh nng phn tch v ti u ha chng trnh y , v thch hp
khi ng dng t cn chnh sa. Cch tip moudle ha c quan tm khi
13

tng ng dng ring l cn chnh sa u n thng qua vic lp trnh li


mng. Mc d, n lm tng thm s phc tp cho h iu hnh bi vic h
tr lin kt v np, nhng n gim ng k chi ph khi lp trnh li mng.

H tr mng: Vi nhiu h iu hnh, TCP/IP l mt tiu chun. Hu ht


cc h iu hnh mng cc i tng thng minh cung cp vic truyn
thng n bc pha trn mng a chng. V d bao nh TinyOS, SOS,
Mantis. TinyOS s dng ngn xp truyn thng da trn vic s dng bn
tin AM (Active Message) . Ngoi d liu, mi AM cng cha AM ID c
s dng cho nt ch gi i cc AM ti b x l tng ng ca n khi
n ch. C mt iu ch rng mt s giao thc mng lp cao hn c
thc thi trn lp AM ny, bao gm c cc giao thc truyn tin trong mng
v cc giao thc thu thp. Mt s h iu hnh mng h tr trc tip mng
multi-hop. V d nh Contiki, Nano-RK, RETOS. Contiki cha hai ngn
xp truyn thng l uIP v Rime. uIP l ngn xp TCP/IP tng thch vi
RFC, gip cho h iu hnh Contiki c th truyn thng qua Internet. Gn
y, Contiki cn thc hin thm uIPv6 h tr IPv6. Rime l ngn xp
truyn thng n gin c thit k cho truyn thng v tuyn nng lng
thp. Rime h tr nhiu giao thc truyn thng nguyn thy, t qung b
vng cc b best-effort, n ngp lt d liu multi-hop. LiteOS b sung s
h tr cho vic truyn cc file gia cc nt mng, s dng cc lnh Shell
ging nh Unix truyn thng chng hn nh cp, mv.

H tr thi gian thc: Vic h tr thi gian thc cho cc h iu hnh c


th xy ra cp nt h iu hnh nn thc hin vic lp lch cc
nhim v u tin m bo vic h tr thi gian thc hiu qu ca mt
nt. Nano-RK l mt h iu hnh thi gian thc h tr quyn u tin v
kp thi thng qua vic phn tch vic lp lch off-line. RETOS h tr giao
din lp lch thi gian thc 1003.1b ng thi cho php gn mc u tin
ca ngi lp trnh v qun l u tin ng ca ht nhn h iu hnh.

H tr ngn ng: Hu ht cc h iu hnh s dng ngn ng C cho c


vic pht trin h iu hnh v pht trin ng dng (v d nh Contiki,
SOS, Mantis, RETOS). Bi v ngn ng C l hiu qu, thun tin v l
ngn ng chnh cho vic pht trin cc h thng nhng. Tuy nhin, ngn
14

ng C cng c mt s im hn ch: Mt mt, n khng chuyn su trong


vic kim tra ng ngha, ti u ha, v ty chnh ht nhn; mt khc n t
thn thin vi ngi dng so vi cc ngn ng hng i tng chng hn
nh C++, Java. Ngn ng nesC, v LiteC++ trnh by hai gii php gii
quyt hai vn c cp trn. Ngn ng nesC tch hp vi m hnh
thc thi trong TinyOS v p dng m hnh lp trnh da trn thnh phn. V
n c th thc hin kim tra tnh, ti u v phn tch ton b chng trnh,
nn sinh ra ton b hnh nh ht nhn ng dng vi kch thc rt nh. Tuy
nhin, ngn ng nesC c mt s im ring, n buc nhng ngi lp trnh
phi tm hiu thm. Ngn ng LiteC++ c thit k cho LiteOS pht
trin ng dng. N b sung nhng c im c ngn ng hng i tng
hin i. Do vy, n gn gi vi ngi lp trnh v thn thin vi ngi
dng hn c vi ngn ng C v nesC.

Cc tp tin h thng: Mt i tng thng minh c kh nng lu tr hn


ch, v d nh MicaZ ch c 4KB EEPROM v 512 KB b nh ngoi. Do
vy, cc tp h thng phi c chi ph ti nguyn thc hin rt nh. C
Matchbox v ELF u c thc thi da trn phin bn th nht trong
TinyOS. Chng cung cp s t chc tp cp ring l v nhng tru tng
c bn cho s hot ng ca tp chng hn nh ghi v c. LiteOS ci tin
hn so vi cc h iu hnh trc bng vic h tr t chc tp phn cp v
c nhiu hn cc APIs thao tc vi tp. Gn y, Contiki a ra h
thng tp da trn b nh flash (Coffee) cho vic lu tr d liu trong
mng cc i tng thng minh. H thng tp cho php nhiu tp trn cng
mt b nh vt l v c hiu sut gn ging vi thng lng truyn d liu
th ca b nh.

Vic lp trnh li khng dy: Vic lp trnh li mi c nghin cu


trong nhng nm gn y. Thng thng, cc ng dng c lp trnh trn
cc thit b thng qua kt ni c dy. Vi vic h tr lp trnh li th nhng
ngi pht trin h thng c th ci t hay cp nht ng dng mi cho
mng hon ton khng dy. Deluge l mt chun c ch lp trnh li cho
TinyOS. Bi v nguyn l thit k tnh ca TinyOS nn cc ng dng c
ci t vi ht nhn h iu hnh nh l mt hnh nh y . Cch tip
15

cn ny phi chu chi ph ti nguyn ln bi v bao gm c chi ph ht


nhn. gii quyt vn ny, FlexCup h tr vic lin kt v np ng
cc thnh phn nh phn, do vy cho php cp nht m trn mi phn c
bn. C ch np v lin kt ng c h tr bi SOS, Contiki, RETOS, v
LiteOS.
1.2.6. Mt s vn cn tip tc nghin cu
Vic h tr h iu hnh l quan trng thun li cho vic trin khai v
bo tr mng cc i tng thng minh. Vi s h tr mnh t cc h iu hnh,
chng ta c th hnh dung c rng vic pht trin ng dng s v cng n
gin. Di y s l mt s hng nghin cu pht trin h iu hnh trong tng
lai.
1.2.6.1. H tr cc ng dng thi gian thc
C nhiu lnh vc ng dng thi gian thc cho mng cc i tng thng
minh, v dng nh trong t ng ha cng nghip, gim st qu trnh ha hc, x
l v truyn dn d liu a phng tin. Trong mt vi h iu hnh, cc b lp
lch c thit k h tr cc phn mm cng nh i vi hot ng phn cng
thi gian thc. Trong tng lai, i hi cc thut ton lp lch c th thch ng c
phn mm v yu cu phn cng thi gian thc ca cc ng dng.
1.2.6.2. Qun l b nh th cp
Thi gian qua, cc lnh vc mi cho mng cc i tng thng minh ang
ni ln v cc ng dng yu cu nhiu b nh nhiu hn na. Mt c s d liu
c yu cu b nh lu tr th cp i vi cc i tng thng minh. Ch c mt
vi h iu hnh cung cp mt file h thng qun l lu tr th cp. Nu chng
ta xem xt nh lut Moores, trong tng lai khng xa, chng ta c th hi vng s
c cc i tng thng minh s c b nh lu tr th cp ln hn. Do nhng
n lc nghin cu cn thc hin xy dng c mt h thng tp tin c kh
nng m rng (phn tn) cho mng cc i tng thng minh.
1.2.6.3. H tr b nh o
Mt i tng thng minh c b nh RAM b gii hn v cc ng dng
yu cu nhiu RAM hn na. Do , trong tng lai chng ta cn gii thiu cc
khi nim v b nh o trong cc h iu hnh cho cc i tng thng minh.
16

Chng ta cn pht minh cc cng ngh qun l b nh o s dng nng lng


v b nh hiu qu.
1.2.6.4. H tr nhiu ng dng
H iu hnh cho cc i tng thng minh c pht trin vi gi nh
rng ch c mt ng dng s chy trn thit b. Nhng i vi s xut hin ca cc
lnh vc ng dng mi v ang t ra nhiu thch thc. Chng ta xem xt
trng hp i tng thng minh l mt nt cm bin khng dy a phng tin,
trong cc nt cm bin c trang b vi mt b cm bin ging ni
(microphone), cm bin hnh nh nh l my nh, v cm bin v hng (scalar
sensors). Do trn mt node cm bin duy nht chng ta c th c mt ng
dng n s dng l b cm bin hnh nh. Tc l, quay video, p dng k thut x
l nh trn n v gi video nn ti trm c s. Tng t nh vy, chng ta c th
c cc ng dng khc m chng ang s dng b cm bin ting ni v b cm
bin v hng. V vy, cc h iu hnh cn phi cha nhiu ng dng cng mt
lc.
1.2.6.5. H tr ngn xp giao thc truyn thng
Nhiu h iu hnh cho cc i tng thng minh cung cp mt giao din
lp trnh ng dng API truyn thng cho php cc ng dng gi v nhn d
liu. Mt khc, nhng API ny s dng ngn xp giao thc truyn thng c
cung cp bi h iu hnh. Khng c tha thun v mt chng giao thc thng
nht cho cc i tng thng minh, do hu nh mi h iu hnh u cung cp
cho ring mnh ci t ty chnh mt ngn xp giao thc truyn thng. Kt qu l,
khng th truyn thng gia hai thit b s dng h iu hnh khc nhau. Trc
y, Contiki cung cp ci t ca mt ngn xp micro IPv6 cho mng cc i
tng thng minh. iu ny cho php cc thit b s dng a ch IP v giao tip
vi cc thit b cho php IP khc. Theo phng php tip cn Contiki, trong phin
bn mi ca TinyOS c cung cp h tr cho IP ph hp vi chun
6LowPAN. Cung cp mt ci t giao thc ngn xp uIP cho php hai thit b s
dng h iu hnh khc nhau c th giao tip vi nhau.
1.2.6.6. Qun l c s d liu h thng

17

Nhim v ca mt i tng thng minh v d nh mt nt cm bin


khng dy l cm nhn, thc hin tnh ton, truyn ti, v lu tr d liu. Trong
mt s mng cm bin, d liu ch gi ti trm c s trong p ng ca mt truy
vn, v vy mt nt cm bin phi c th lu tr d liu v hiu c ngn ng
truy vn. Mt n lc nghin cu l cn thit thit k mt h thng qun l c s
d liu cho nt cm bin ph hp i vi cc c trng ca chng.
1.2.6.7. H tr cc giao din lp trnh ng dng APIs cho x l nh v tn
hiu
V cc lnh vc ng dng cho cc i tng thng minh trong lnh vc x
l hnh nh ang ni ln, do vy h iu hnh cn phi cung cp mt tp hp
phong ph cc API x l tn hiu to iu kin thun li cho cc nhim v ca
nh pht trin chng trnh ng dng.

18

Chng 2. H IU HNH CONTIKI


2.1. Gii thiu v h iu hnh Contiki
H iu hnh Contiki l h iu hnh m ngun m, c nghin cu, thit
k v pht trin bi mt nhm cc nh pht trin t vin khoa hc my tnh Thy
in, ngi ng u l Adam Dunkels. Nhm pht trin Contiki gm nhiu
thnh vin n t SICS, CISCO, cng nhiu t chc v cc trng i hc khc
trn th gii. H iu hnh Contiki c thit k cho cc vi iu khin c b nh
nh, vi thng s 2KB RAM v 40KB ROM. Nh , Contiki c s dng cho
cc h thng nhng v cc ng dng trong mng cc i tng thng minh.
Contiki bt u c nghin cu t nm 2001 v pht hnh phin bn u tin
Contiki 1.0 nm 2003. Hnh 2.1 cho thy lch s pht trin ca Contiki trong
nhng nm qua. Phin bn hin nay ca Contiki l 2.5, vi nhiu thay i, b sung
v pht trin vt bc. Trong thc t, Contiki c ng dng trong nhiu d n
nh gim st ng hm xe la, theo di nc trong bin Baltic, Nhiu c ch,
tng trong Contiki c ng dng rng ri trong cng nghip. in hnh
nh m hnh uIP c pht hnh nm 2001 c s dng trong h thng ng
dng ca hng trm cng ty trong cc lnh vc hng hi, thng tin v tinh, khai
thc du m,; m hnh Protothreads c cng b ln u tin nm 2005, n
nay c s dng trong nhiu ng dng nh b gii m k thut s v i
tng thng minh ni chung v mng cm bin khng dy ni ring.

19

Hnh 2.1: Lch s pht trin Contiki.


H iu hnh Contiki c lp trnh bng ngn ng C v c nhng c
im ph hp vi cc i tng thng minh:
Contiki c chia thnh nhiu module hot ng c lp. Nh cc ng
dng c th s dng cc module mt cch linh ng v ch np nhng
module cn thit.
C ch hot ng iu khin s kin lm gim nng lng tiu hao v hn
ch dung lng b nh cn s dng.

C th s dng IP trong mng thng qua uIP stack c xy dng da trn


nn TCP/IP.

C nhng module cho php c lng v qun l nng lng mt cch


hiu qu.
Cc giao thc tng tc gia cc lp v cc node trong mng d dng hn.
S dng RIME stack phc v cc giao thc dnh cho mng nng lng
thp mt cch hiu qu.
Bn cnh , Contiki cn cung cp nhng cng c h tr m phng vi
giao din n gin, d s dng v h tr tt nhng thit b trong thc t, phc v
nhng mc ch nghin cu, m phng v trin khai nhng giao thc mi.

2.2. Cu trc h iu hnh Contiki


Bt k phin bn Contiki no cng gm 7 th mc l: apps, core, cpu, docs,
example, platform v tools.

Th mc apps: Cha cc tp tin ngun ca cc tin ch pht trin cho Contiki.


Chng c sn s dng v bao gm cc thit lp c bn ca cc ng dng
20

cho mng cc i tng thng minh . ng dng tiu biu trong th mc ny l


trnh duyt web, my ch Web, FTP, email....

Th mc Core: Nh tn gi cho thy, n cha cc ht nhn ca h iu hnh


Contiki. N cha khong 300 files, gn mt na trong s l tp tin tiu
cha cc khai bo v cn li l cc tp tin ngun cha ci t.

Th mc CPU: Cha cc b x l c th cho vic thc hin cc chc nng


khc nhau c s dng trong h iu hnh.

Th mc Docs: c s dng trong vic chun b ti liu cho Contiki. N


cha thng tin s c s dng bi mt h thng ti liu in hnh nh
Doxygen.

Th mc Examples: Cha cc chng trnh v d n gin bt u vi


Hello-world, nh l bc u tin hng ti lp trnh ng dng trn Contiki.

Th mc Platform: Bao gm thng tin c th lin quan n nn tng phn


cng cho cc nt cm bin nh ESB, Sky mote,

Th mc Tools: L th mc cha cc cng c phn mm c bit. V d nh


'Cooja' l mt chng trnh Java m phng cho Contiki.Th mc ny cng
cha cc cng c cho cc nn tng phn cng c th. V d in hnh l cc
cng c cho nt cm bin Tmote Sky ca Sentilla.

2.3. Kin trc phn lp h iu hnh Contiki


H iu hnh Contiki theo kiu kin trc module. Ti mc ht nhn n theo
m hnh iu khin hng s kin (event-driven), nhng li cung cp cc phng
tin ty chn lung ti cc tin trnh ring l. Nhn Contiki bao gm mt b lp
lch s kin lm nhim v gi i cc s kin ti cc tin trnh ang chy. Cc tin
trnh thc thi c kch hot bng cc s kin gi i bi ht nhn ti cc tin trnh
hoc bng c ch hi vng. C ch hi vng c s dng trnh cc iu kin
tranh ua (race conditions). Bt k s kin no c lp lch s chy cho n
khi n hon thnh. Tuy nhin, cc trnh x l s kin cng c th s dng cc c
ch ni u tin.
C hai loi s kin c h tr bi h iu hnh Contiki: Cc s kin ng
b v khng ng b. S khc nhau gia hai loi s kin ny l, s kin loi
ng b c gi i ngay lp tc ti tin trnh ch bi v n c lp lch.
Cn i vi cc s kin khng ng b th chm hn, th tc gi c xp vo
hng i v sau cng c gi n tin trnh ch. C ch hi vng c s
21

dng trong Contiki c th xem nh l cc s kin c u tin cao n c lp


lch gia mi s kin khng ng b. Khi mt hi vng c lp lch th tt c
cc tin trnh thc hin mt trnh x l hi vng c gi l th t u tin ca
chng.
Tt c cc cng c ca h iu hnh v d nh, b cm bin x l d liu,
truyn thng, v cc trnh iu khin thit b c cung cp di dng cc dch
v. Mi dch v c mt giao din v ci t ca n. Cc ng dng s dng mt
dch v c th cn hiu c giao din dch v. Mt ng dng khng quan tm
n ci t ca mt dch v. Hnh 2.2 minh ha kin trc phn lp ca h iu
hnh Contiki.

Hnh 2.2: Kin trc h iu hnh Contiki

2.4. Ngn xp truyn thng trong h iu hnh Contiki


Contiki c bn gm 2 stack truyn thng l uIP vi TCP/UDP, IPV4, IPV6
gip h iu hnh truyn thng qua mng Internet v Rime c thit k cho
nhng lin kt khng dy nng lng thp, n cung cp mt phm vi rng ln cc
truyn thng nguyn thy t nhng cch thc qung b ni vng hiu qu cao n
flooding d liu ng tin cy trn nhiu nt mng.

22

Hnh 2.3: Kin trc giao thc mng trong h iu hnh Contiki.
2.4.1. Ngn xp uIP
Trong nhng nm gn y, cng vi s thnh cng ca Internet, giao thc
TCP/IP tr thnh tiu chun ton cu trong lnh vc truyn thng, TCP/IP l
giao thc c bn c s dng cho nhng mc ch truyn ti cc trang web, gi
v nhn email, truyn d liuCc h thng nhng s dng TCP/IP c kh nng
kt ni nhng h thng trc tip n mt mng ni b, hoc thm ch l mt mng
ton cu.
Nhng thit b nhng c kh nng p ng c y nhng c tnh
caTCP/IP s l nhng thit b c tnh u vit, c kh nng giao tip mt cch y
vi tt c cc thit b khc trong mng.
Tuy nhin, s trin khai giao thc TCP/IP truyn thng i hi qu nhiu
ti nguyn gm c dung lng code v b nh s dng, khng th c p ng
trong cc h thng nhng 8 hoc 16 bit.
Xut pht t tng , uIP c thit k da trn ngn ng C vi mc
tiu ti u ha tuyt i cc c tnh cn thit cho mt stack TCP/IP y . uIP
ch c th hot ng vi mt giao din mng duy nht v bao gm cc giao thc :
IP, ICMP, UDP, TCP.
Mt s hm trong API uIP
Khi to mt kt ni : tcp_connect(), tcp_listen(), udp_new().

Ngt mt kt ni : uip_close(), uip_abort().


23

Gi mt gi kiu TCP: uip_send().


Gi mt gi kiu UDP : uip_udp_packet_send().
Nhn mt gi t mng : uip_newdata(), uip_datalen().
Gi li mt gi d liu : uip_rexmit().
M v Kim tra cng kt ni : uip_listen() m mt cng kt ni ;
uip_connected()- kim tra kt ni.
2.4.2. Ngn xp RIME
Rime stack cung cp mt cu trc phn tng ca giao thc mng cm bin
khng dy, t mt b pht qung b n gin ti vic nh tuyn rc ri trong ton
mng. Rime trin khai mt giao thc phc tp, vi nhiu phn, mi phn li gm
nhng module phc tp c to nn t nhng module nh l n gin hn. Di
y l ton th t chc ca giao thc Rime:

Hnh 2.4: T chc ca RIME

Abc: pht sng qung b, n ch gi mt gi tin qua cc trnh iu khin v


tuyn v nhn tt c cc gi tin t cc trnh iu khin v tuyn khc.

Broadcast: pht sng xc nh, n thm a ch ngi gi gi i cc gi


d liu v chuyn n vo module abc.
24

Unicast: module ny cho bit thm mt a ch ch cho cc gi tin c


truyn cho khi pht sng. bn nhn, nu a ch ch ca gi tin khng
ph hp vi a ch ca nt th gi tin s b loi b.

Stunicast: l cc unicast cng u , khi c hi gi mt gi tin n mt


nt, n s gi nhiu ln vi mt khong thi gian nht nh cho n khi yu
cu dng li.

Runicast: l cc unicast ng tin cy, n s gi mt gi tin bng cch s dng


cc stunicast ch mt gi tin xc nhn. Khi nhn c, n dng vic truyn ti
lin tc ca cc gi tin. Mt s lng ti a cc gi tin truyn li phi c
xc nh, trnh gi v hn.

Polite v ipolite: hai module gn nh ging ht nhau, khi mt gi tin c


gi i trong mt khung thi gian nht nh, module ch mt na thi gian,
kim tra xem n c nhn c gi tin n nh gi hay khng. Nu trng, gi
tin khng c gi i, nu khng n s gi gi tin. iu ny rt hu ch cho
cc k thut flooding trnh vic truyn li khng cn thit.

Multihop: module ny i hi chc nng bng nh tuyn, v khi nh gi mt


gi tin, n yu cu bng nh tuyn cho hop tip theo v gi gi tin n n
bng cch unicast. Khi n nhn c mt gi tin, nu hop l ch, gi tin s
c truyn ti cc lp trn, nu khng n s yu cu thng tin v hop tip
theo t bng nh tuyn v chuyn tip cc gi tin n n. Khi gi gi, cc ng
dng lu gi vo b nh m v gi cc hm x l lin quan gi gi i. Khi
nhn c mt gi, gi nhn c c lu trong b m gi, ng thi
RIME stack gi cc hm callback tng ng x l gi u vo.

25

Hnh 2.5: Qu trnh truyn d liu ca RIME.

2.5. K thut lp trnh trn h iu hnh Contiki


Contiki hot ng da trn c ch iu khin s kin. Cc Process hay cc
trnh x l c gi mi khi c mt s kin xy ra nh cc s kin v cm bin,
trnh khi ng, trnh kt thc, Qu trnh gi cc Process hon ton khng b
ngn chn hay cn tr trong cc chng trnh. Process hot ng da trn cc
Protothread, to ra cc lung iu khin lin tip theo c ch event -driven.
Protothread l s kt hp gia hai c ch iu khin: Multithreads Lp trnh
a lung v event driven Lp trnh hng s kin.
2.5.1. Lp trnh Event-driven
Lp trnh hng s kin (Event-driven) l mt phng php hiu qu v b
nh vit phn mm cho cc nt cm bin. Vi kiu lp trnh ny, phn mm
c biu din nh l cc trnh x l s kin: Cc on m ngn gn m t lm
th no m h thng p ng c cc s kin. V d v cc s kin nh l mt
gi tin v tuyn n t mt nt ln cn, s kin c d liu cm bin t mt trong
cc b cm bin, v s kin t b nh thi. Khi s kin din ra, nt cm bin tr
li bng cch thc thi mt phn phn mm ca n.
Lp trnh hng s kin i hi t b nh hn so vi lp trnh a lung bi
v khng c lung no yu cu b nh ngn xp. Ton b h thng c th chy
nh mt lung duy nht, trong ch yu cu mt ngn xp duy nht.
Kiu lp trnh hng s kin cng ph hp t nhin vi bn cht hng s kin
ca cc nt cm bin. V nt cm bin tng tc vi mt mi trng iu khin
hng s kin, nn m hnh lp trnh nm bt c hnh vi c th quan st c
ca h thng.
2.5.2. Lp trnh Multi-threaded
a lung l mt k thut lp trnh cho php nhiu chng trnh c th chy
ng thi trn mt b x l duy nht. Trong lp trnh a lung, mi chng trnh

26

c nh sn mt lung iu khin ring ca n, v lung chy cng vi tt c


cc lung khc trong h thng. Mi lung c nh sn thi gian nht nh
chy trn b vi x l. cho php chy nhiu chng trnh cng mt lc, h iu
hnh chuyn i gia cc lung chng cng nhau nhn c s chia s cng
bng ca b vi x l.
Lp trnh a lung c s dng rng ri trong cc h thng iu hnh
thng dng, cc lung t bo v ln nhau sao cho mt lung khng th tip
cn mt lung khc m khng i qua cc giao din quy nh. Khi cc lung t
bo v ln nhau, chng thng c gi l cc tin trnh thay v gi l cc lung.
i vi cc i tng thng minh, tn ti mt vn a lung l mi lung
yu cu mt phn b nh ca ring mnh gi trng thi ca cc lung ny, c
gi l ngn xp ca lung. Cc ngn xp cha cc bin cc b m lung s dng
v cc gi tr tr v cho cc hm m lung gi n, nhng cng bao gm mt
lng tng i ln b nh khng s dng. B nh ny phi c cp pht bi v
n cha bit trc c c bao nhiu b nh ngn xp m mi lung cn dng.
Do , b nh ngn xp thng vt qu s cp pht.
2.5.3. Lp trnh Prothreads
Protothreads l mt cch kt hp u im ca cc m hnh lp trnh
hng s kin v a lung. Protothreads l c ch lp trnh c pht trin cho
cc h thng c b nh hn ch, n kt hp m hnh lp trnh hng s kin v a
lung theo mt phng thc hiu qu v b nh. Vi Protothreads, chng trnh
c cu trc theo tun t, ging nh trong m hnh a lung, nhng s dng t
b nh tng t nh m hnh hng s kin. Protothreads c th thc hin c
hiu qu trong ngn ng lp trnh C m khng cn bt k ngn ng lp trnh bc
thp hay cc thay i no vi trnh bin dch. iu hn ch l cc lp trnh vin
phi lu tr cc bin mt cch r rng khi cc Protothreads dng. Bi v cc
Protothreads c thc hin bi ngn ng C, nn chng rt tin li trn cc nn
tng phn cng khc nhau.
2.5.4. So snh ba m hnh lp trnh trong Contiki
M hnh lp trnh Multi-threaded c kh nng thc hin ng thi mt
chui cc threads. Tuy nhin, cc threads i hi phi c thc hin trn nhng
ngn nh ring, to ra chui cc lung iu khin tun t. Multi-threaded c
xy dng nh mt th vin, cung cp cho cc Process khi cn thit.
Trong khi , m hnh lp trnh Event-driven ch hot ng trn mt ngn
nh v thc hin cc lung iu khin ty theo cc s kin n. Do Event27

driven i hi b nh t hn v cung cp c ch iu khin linh hot theo cc s


kin.

Hnh 2.6: Phng thc s dng b nh ca Multi-threaded v Event-driven.

Hnh 2.7: Cc lung iu khin trong Multi-Threaded v Event-driven.


Nh s kt hp cc c tnh ca hai c ch Multi-threaded v Event-driven,
Protothreads c kh nng cung cp c ch iu khin kiu event-driven, cung cp
cc lung iu khin lin tc, ng thi s dng dung lng b nh nh vi mt
ngn nh duy nht.
Trong API ca Contiki bao gm 4 loi Protothreads c bn:
- PT_INIT (pt): khi to mt Protothread.
- PT_BEGIN (pt): bt u mt Protothread.
- PT_WAIT_UNTIL (pt, iu kin): iu khin i mt s kin.
- PT_END (pt): kt thc mt Protothread.
Hnh 2.8 l mt v d v Protothreads.

28

Hnh 2.8. V d lp trnh Protothreads.


Hnh 2.9 trnh by mt v d ca mt chng trnh c thc thi vi m
hnh lp trnh a lung v m hnh lp trnh hng s kin. Hnh 2.10 trnh by
mt chng trnh tng t c thc hin vi Protothreads. S khc bit gia m
hnh khng ch l cu trc on m m cn c chiu di ca on m. Mc d m
hnh lp trnh hng s kin c nhiu dng m hn, nhng n hiu qu v b nh
hn so m hnh a lung.

Hnh 2.9: V d v lp trnh a lung (tri) v lp trnh hng s kin (phi).

29

Hnh 2.10: V d ca lp trnh Protothreads.


2.6. Hot ng nh thi trong Contiki
Trong Contiki s dng 4 loi nh thi:

Timer: l loi nh thi th ng, ch s dng lu li vt cc thi im


khi b nh thi ht hn.

Rtimer: l loi nh thi thi gian thc, s dng gi mt hm ti mt


thi im c th no .
Event timer (etimer): l loi nh thi hot ng, c kch hot trong cc
Process v s dng gi mt s kin n Process khi b nh thi ht
hn.

Callback timer (ctimer): l loi nh thi hot ng, c th c s dng


bt k v tr no trong chng trnh, c chc nng gi mt hm x l mi
khi b nh thi ht hn. Ctimer c s dng trong module RIME ca
Contiki.

Hnh 2.11 minh ha v d s dng Etimer trong Contiki:

Hnh 2.11. V d s dng Etimer.

30

V d trn cho thy cch s dng b nh thi kiu Etimer trong Contiki
thay i trng thi ca Led sau mi giy. Cc b nh thi kiu Etimer thng
c khai bo kiu tnh v c kch hot trong Process.

Hnh 2.12. V d s dng Ctimer trong Contiki.


Hnh 2.12 minh ha v d trn cho thy cch s dng b nh thi kiu
Ctimer trong cc chng trnh Contiki. Chng trnh trn c chc nng thay i
trng thi LED mi giy cho n khi c mt s kin no xy ra. B nh thi
c s dng gi hm led_toggler sau mi giy.
Bng cch s dng cc b nh thi mt cch ph hp, kt hp vi s dng
cc Protothreads, cc chng trnh Contiki c kh nng h tr hiu qu cho cc
chng trnh, giao thc ph hp vi nhng yu cu kht khe v b nh, kh nng
x l, nng lng, ca mng cc i tng thng minh.
2.7. Qun l b nh
Do nhng hn ch nghim trng nh nng lng tiu th, kch thc vt l
v chi ph ca cc b vi iu khin c s dng cho cc nt cm bin, nn b
nh b hn ch. Do , b nh phi c qun l mt cch hiu qu. C mt s k
thut c thc hin cho hu ht cc b nh hn ch trong mt nt cm bin.
Khng ging nh cc my tnh thng thng, m b nh c th hon i mt
cch linh ng vo mt a cng, th b nh trong vi iu khin ca cc i
tng thng minh thng khng th c di chuyn ti b lu tr th hai.
phn mm, b nh c cp pht c th l tnh ti thi im bin dch
hoc cp pht ng thi im chy. B nh c cp pht tnh cho php cc lp
trnh vin bit trc l chng trnh s ph hp vi b nh ca vi iu khin,
nhng n khng cho php h thng p ng mt cch linh hot vi cc yu cu
trong thi gian chy. Mt khc, s cp pht b nh ng c th p ng c b

31

nh m h thng yu cu thc t, nhng n khng th d on c hnh vi ca


h thng s nh th no.

Hnh 2.13: Cp pht b nh tnh (tri), s cp pht ng t mt vng b nh tnh


(gia) v cp pht ng t mt Heap (phi).
Bi v nhng u im v nhng hn ch khc nhau ca cc phng php
cp pht ng v tnh, nn mt phng php lai thng c s dng. Trong phn
ny, chng ta hy xem ba phng php:

Cp pht tnh: Tt c b nh c cp pht ti thi im bin dch v


khng b nh no c cp pht trong thi gian chy.

Cp pht ng t vng b nh tnh: B nh c th c cp pht ng


trong thi gian chy t mt tp hp c nh ca cc vng b nh tnh. Kch
thc ca mi cp pht c xc nh trc v khng th thay i trong
thi gian chy.

Cp pht ng t mt vng lu tr c bit Heap: B nh c th c cp


pht ng trong thi gian chy v kch thc ca mi cp pht c th c
xc nh ti thi gian chy.

Hnh 2.13 cho thy b nh c cp pht vi cp pht tnh, cp pht ng


t mt vng b nh tnh v cp pht ng t mt vng lu tr c bit Heap. Hnh
ny cho thy cc vng nh A v B c cp pht vi ba phng php khc nhau.
Vi cp pht tnh, hai cp pht xut hin trong b nh t khi h thng c khi
ng n khi h thng c tt. B nh c dnh ring cho hai cp pht v
khng th c s dng cho bt c chng trnh no khc.
Vi cp pht ng, th b nh cho cc cp pht khng c dnh ring cho
chng, m vng nh cng c th c s dng bi cc cp pht khc. Khi b
nh c cp pht ng t mt vng b nh tnh, th cc vng b nh c cp
pht tnh. Cc cp pht tnh ny sau s c chia thnh cc phn on c nh
v kch thc. B nh c th c cp pht t cc phn on c kch thc c
nh ny. Sau khi mt phn on c cp pht, n ch c th c s dng
32

bi chng trnh c cp pht n. Khi chng trnh thc hin xong vi phn
on, chng trnh s tr li phn on n vng b nh. B cp pht b nh nh
du s phn on l nhn ri v c th cp n ti mt chng trnh khc ngh
ly n.
Cp pht ng t mt vng lu tr c bit Heap phc tp hn cp pht
ng t mt vng nh. Vi cp pht ng t mt vng lu tr c bit Heap, b
nh c cp pht l t mt phn ca b nh c gi l Heap. Bt k kch thc
no ca b nh c c th c cp pht t Heap, min l c Byte trng lin
tip trn Heap. Mi ln mt phn no ca Heap c cp pht, phn ny ca b
nh khng th c di chuyn hoc c cp pht bi chng trnh khc. Khi
chng trnh thc hin xong vi b nh ca n, n tr li b nh cho Heap.

Hnh 2.14. Vn vi cp pht ng Heap: cp pht cho C khng th c cp


pht, thm ch nu c b nh trn Heap, bi v b nh b phn mnh.
Li ch ca vic cp pht ng Heap l cc phn on b nh c kch thc
bt k c th c cp pht. Ci gi cho cho u im ny l Heap c th b phn
mnh do b nh khng th c cp pht t Heap, ngay c khi c s Byte
nhn ri cn li. iu ny c minh ha trong hnh 2.14, ni cp pht b nh
cho C khng th c cp pht bi v khng c Byte lin tip li cn li trn
Heap. Thm ch c khi s lng cc Byte nhn ri trn Heap ln hn kch thc
cp pht cho C, b nh c th khng c cp pht do s phn mnh.
Bi v cc vn v phn mnh trong cp pht Heap, nn hu ht cc nt
cm bin s dng cp pht tnh cho hu ht cc mc ch v s dng vic cp pht
vng nh ng khi cp pht b nh ng l cn thit. Bi v cc nt cm bin
thng c thit k cho mt nhim v duy nht, nn cp pht tnh thng l mt
chin lc cp pht b nh. Nhng bi v khi lng cng vic c th thay i,
nn cng cn thit mt lng nht nh cc cp pht ng.

33

2.8. Ci t v thc hnh vi Contiki


2.8.1. Ci t Instant-Contiki
Bc 1: Download v gii nn cc phn mm cn thit.
- Download VMware ti a ch: http://www.vmware.com/download/player/
- Download Instant Contiki ti a ch:
http://www.sics.se/contiki/instant-contiki.html
- Gii nn Contiki.
Bc 2: Ci t cc phn mm cn thit.
- Ci t VMware.
Bc 3: M Contiki-Instant bng VMware.
- Chy VMware

Hnh 2.15. Giao din VMware Player.


- M Instant-Contiki: Chn Open v chn ng dn n th mc Contiki va
gii nn. Chn Instant-Contiki

34

Hnh 2.16. Chn ng dn n Instant-Contiki.


- in username l user ri n enter .Mn hnh ng nhp hin ln:

Hnh 2.17. Giao din ng nhp username


- in password l user ri n enter .

Hnh 2.18. Giao din nhp Password


- Giao din ca Instant-Contiki c ci trn Ubuntu.
35

Hnh 2.19. Giao din Instant-Contiki c ci trn Ubuntu.


2.8.2. Chng trnh iu khin LED trn Tmote Sky
Tmote Sky l mt nn tng phn cng cho nt cc i tng thng minh
ca hng Sentilla. Nn tng phn cng ny c gi lp trn cng c m phng
Cooja. Trong phn ny, em thc hin vit mt chng trnh n gin iu
khin 3 LED trn Tmote Sky. Di y l on m chng trnh:
#include "contiki.h"
#include "dev/leds.h"
/*---------------------------------------------------------------------------*/
PROCESS(blink_process, "Blink");
AUTOSTART_PROCESSES(&blink_process);
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(blink_process, ev, data)
{
PROCESS_EXITHANDLER(goto exit;)
PROCESS_BEGIN();
while(1) {
static struct etimer et;
etimer_set(&et, CLOCK_SECOND);
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
leds_on(LEDS_ALL);
etimer_set(&et, CLOCK_SECOND);
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
leds_off(LEDS_ALL);
}
exit:
leds_off(LEDS_ALL);
PROCESS_END();
36

Hnh 2.20. Kt qu m phng vi Cooja.

Chng 3. CC MODULE TRONG H IU HNH CONTIKI

- Tham kho ti liu: Contiki2.x Reference Manual.

37

Chng 4. XY DNG CHNG TRNH


NG DNG VI CONTIKI
4.1. Gii thiu v cng c m phng Cooja

[edit] The COOJA Simulator


The section gives a high-level overview of sensor network simulations in COOJA. This
information is not strictly needed for using COOJA, but may help users to more easily
understand problems, limitations, and features in the simulator.

[edit] Contiki level: the Contiki Mote Type


A simulated Contiki Mote in COOJA is an actual compiled and executing Contiki
system. The system is controlled and analyzed by COOJA. This is performed by
compiling Contiki for the native platform as a shared library, and loading the library into
Java using Java Native Interfaces (JNI). Several different Contiki libraries can be
compiled and loaded in the same COOJA simulation, representing different kind of
sensor nodes (heterogeneous networks). COOJA controls and analyzes a Contiki system
via a few functions. For instance, the simulator informs the Contiki system to handle an
event, or fetches the entire Contiki system memory for analysis. This approach gives the
simulator full control of simulated systems. Unfortunately, using JNI also has some
annoying side-effects. The most significant is the dependency of external tools such as
compilers and linkers and their run-time arguments. COOJA was originally developed
for Cygwin/Windows and Linux platform, but has later been ported to MacOS.

[edit] Getting started


Java version 1.6 or later is required to run COOJA. We recommend using the latest
version from Sun. In addition, the build tool ant is also required for building COOJA. For
Windows users, we recommend using Cygwin. Add the Cygwin binaries path (for
38

example c:\cygwin\bin) to your PATH environmental variable. To compile and start


COOJA:

**> cd contiki-2.x/tools/cooja**
**> ant run**

COOJA builds and the simulator is started. However, before you can simulate a Contiki
system, you need to configure COOJA to correctly interface your toolchain.

Open //Menu >// //Settings > External tools paths//

This dialog displays your current COOJA configuration: compiler paths and arguments, a
bunch of regular expressions used to parse information from these tools, etc. **These
settings are stored in your home directory: .cooja.user.properties**, such as in
///home/myuser// or //C:\Documents And Settings\myuser//.

[edit] Configuration Wizard


(This wizard replaces the old JNI tests in /tools/cooja/examples/jni_tests.) The
configuration wizard helps configuring COOJA for using JNI, a challenging task on
many systems. The wizard consists of 4 steps and tests compiling, linking, loading
libraries, analyzing library memory, and controlling library execution.

Open //Menu >// //Settings > Compiler configuration wizard//

Complete all 4 steps. Note that you may have to change the recommended settings. Any
changes can later be reviewed in the //External tools paths// dialog

[edit] Create a Hello World simulation


After completing the configuration wizard, we are now ready to create a simulation.

Open //File > New simulation//, and click //Create//

A simulation without motes and using the default parameters is created. Before adding
motes to the simulation, we first need to create a mote type. The mote type determines
the type of sensor hardware and which Contiki applications are to be simulated.

Open //Mote Types > Create mote type > Contiki Mote Type//

A dialog allowing you to configure the new mote type appears.

Enter a suitable description: "My first hello world mote type"


Click Browse, and select the Contiki Hello World application**: hello-world.c**
Compile the Contiki shared library by clicking **Compile**
When the compilation finishes, load the library and create the mote type by
clicking **Create**.

We have now added a mote type, however, the simulation does not yet contain any
simulated motes.
39

Enter **10** and click **Create and Add**

You may later add further motes of this type by menu //Menu > Motes > Add motes of
type >// //My first hello world mote type//. A few plugins are started: a control panel for
starting and pausing the simulation, a visualizer that shows the node positions, and a log
listener showing printouts of all simulated nodes.

Press **Start** (or CTRL+S) in the **Control Panel** plugin to start simulating.

[edit] Save and load simulations


Cooja allows for saving and loading simulation configurations. A simulation
configuration contains the simulated modes and mote types, radio medium configuration,
active plugins, etc.
Note that only the configuration, not the state of the simulation is saved. Hence, when a
simulation is loaded, the simulation will start over from time 0.
To save the current simulation:

Open //Menu >// //File > Save simulation//


Enter suitable name. Configuration files are stored with the file extension
**.csc**

To load a simulation:

Open //Menu >// //File > Open simulation > Browse...//


Select configuration file to load.

The simulation is loaded, and the plugins will appear after a while. Loading a simulation
with several mote types may take some time, since Contiki is recompiled in the
background.
A similar functionality as saving and loading simulation, is **reloading** a simulation.
To reload the current simulation:

Open //Menu >// //File > Reload simulation > same random seed//

[edit] COOJA configs for Contiki development: sharing simulation


configs
When developing Contiki applications, you should normally keep all your code in a
project directory. Your project directory may be a subfolder of Contiki (i.e. //contiki2.x/examples/myproject///), or external to Contiki (i.e. ///home/user/mycontikiproject//).
COOJA's leverages the Contiki project directories by storing any simulation's external
file references (such as to Contiki applications) relative to the directory where you save
the simulation configuration. If you save a COOJA configuration in your project
directory, any references to Contiki code residing in that directory will hence be stored as
portable relative paths. This feature enables moving and sharing project directories, for
example committing Contiki projects to CVS.
40

Example:**

Contiki path: ///home/user/contiki-2.x// Contiki project path:


///home/user/mycontikiproject// Contiki application:
///home/user/mycontikiproject/myapp.c//

Create a COOJA simulation, compile //myapp.c// and finally save the simulation
configuration **in the project directory**.

COOJA config: ///home/user/mycontikiproject/mysimconfig.csc//


The Contiki application path will be stored as "[CONFIG]/myapp.c" i.e. relative where
the configuration file is stored.

[edit] COOJA configs for Contiki development: simulation quickstart


It is also possible to quickstart COOJA, instead of starting COOJA from the
///tools/cooja/// directory.
To quickstart COOJA from a Contiki project directory:

///home/user/mycontikiproject///> **make myapp.cooja TARGET=cooja**

///home/user/mycontikiproject///> **make mysimconfig.csc TARGET=cooja**

or

[edit] Feature requests, bug reporting, and questions


Questions and requests should normally be posted to the main Contiki developers
mailing list: contiki-developers@lists.sourceforge.net. See the Contiki website for
information of how to subscribe to this list. You may also mail me directly, Fredrik
sterlind, fros@sics.se.

4.2. Hng dn s dng Cooja

Get started with the Cooja simulator


From ContikiWiki
Jump to: navigation, search
Cooja is the Contiki network simulator. With Cooja, it is possible to run Contiki systems
without access to any actual hardware. This tutorial will show you how you can use
Contiki's simulator Cooja to run two example simulations and how to set up your own
simulation.
Before doing this tutorial, you should Install Instant Contiki.

41

Contents
[hide]

1 Step 1: Start Cooja


2 Step 2: Run a Hello, World example
3 Step 3: Run a data collection example

4 Summary

[edit] Step 1: Start Cooja


First Start Instant Contiki.
To start Cooja, double-click on the "Run Cooja" icon to the right on the screen. This will
bring up a terminal window with some text scrolling by. The Cooja Java code may need
to be compiled, which may take a few seconds. After a few seconds the Cooja window
appears. Maximize the window by double-clicking on the title bar. The screen should
now look like this:

[edit] Step 2: Run a Hello, World example


This first example shows how to open one of the existing simulation examples in the
Contiki code. We begin with the simple Hello, World example. This example has a small
network of two nodes. The nodes only print out a Hello, World message and does
nothing more. To open the example, go to the Open Simulation menu item on the File
menu:

42

Click on the Browse item, and a file dialog box appears. Go to the contiki2.x/examples/hello-world directory and open the hello-world-example.csc file:

Opening the simulation will cause Contiki to be compiled. The compilation output is
shown in a dialog box on the screen:

43

There may be a number of compilation warnings displayed. They can be ignored by


clicking the Hide compilation warnings button. Close the dialog by clicking the close
button:

Start the simulation by clicking the Start button:

44

After a few seconds, the two nodes have started and printed out their Hello World
message. The simulation can now be stopped by pressing the Pause button.

Congratulations! You have just compiled and simulated your first Contiki system!

45

[edit] Step 3: Run a data collection example


Data collection is the most commonly used sensor network mechanism. With data
collection, nodes report data to a sink node. The Contiki distribution contains a quickstart data collection example that does all the collection for you.
Go to the File menu and choose the Open simulation menu item, and the Browse item.
Open the example-collect.csc file in the contiki-2.x/examples/rime directory:

Wait for the compilation to finish. The screen now shows the data collection example:

46

Click the Start button in the Control Panel window. See the collection network form in
the Simulation Visualizer.

47

4.3. Cc bc xy dng ng dng u tin


This tutorial shows how to develop a simple Contiki program and how to set up a Contiki
project. We go through how to create a project directory, write a simple Contiki
application, compile and run it in the MSPsim emulator, and on a Tmote Sky mote. If
you don't have a Tmote Sky mote available, it is enough to read how to run the
application in emulation.
In its simplest form, a Contiki project is a C source file and a Makefile. The C source file
contains the program code whereas the Makefile contains the rules for compiling the
program code into a Contiki executable.
We assume that we are using Instant Contiki and that we have already logged into the
system.

48

Contents
[hide]

1 Step 1: Create a project directory


2 Step 2: Create the Makefile
3 Step 3: Create the program file
4 Step 4: Set the default target
5 Step 5: Compile the project
6 Step 6: Test the project in MSPsim

7 Step 7: Run the project on Tmote Sky hardware

[edit] Step 1: Create a project directory


Each Contiki project resides in its own project directory. We first create the directory in a
convenient location. Open a terminal by clicking on the terminal icon on the menu bar at
the top of the screen.

Create two directories: one for holding Contiki projects, and one for holding the Hello,
World project. Do this by issuing the following commands (if you choose to use different
directories change the paths accordingly):
mkdir projects
cd projects
mkdir hello-world-project
cd hello-world-project

49

[edit] Step 2: Create the Makefile


Once we have created our project directory, we can create the Makefile that will ensure
the program is compiled correctly. Creating the Makefile can be done in any of the
available editors (gedit, vi, emacs, ). In this example, we use gedit. Issue the command
gedit Makefile &

50

We type the following text into the Makefile:


CONTIKI=/home/user/contiki-2.x
include $(CONTIKI)/Makefile.include

Save the file by clicking on the Save button. The Makefile will include the Contiki Make
structure and automatically compile your project. We can now start writing our first
program.

51

[edit] Step 3: Create the program file


We have now finished creating the Makefile. Next, we create out main program file by
creating a new document called "hello-world.c". If you are using gedit, click on the New
document menu item in the File menu.

Now we have to populate our program file by typing the following:


#include "contiki.h"
PROCESS(hello_world_process, "Hello world process");
AUTOSTART_PROCESSES(&hello_world_process);
PROCESS_THREAD(hello_world_process, ev, data)
{
PROCESS_BEGIN();
printf("Hello, world!\n");
PROCESS_END();
}

We will briefly outline what this actually does:

The first line includes the Contiki C header. This is needed to include all the
relevant Contiki definitions and libraries.

52

The second line declares a Contiki process. This process has a variable name
(hello_world_process), and a string name ("Hello world process"). The string
name is used in debugging and for the Contiki shell's ps command.

The third line tells Contiki that the hello_world_process should be automatically
started when Contiki boots.

The fourth line defines the hello_world_process. The ev and data arguments to
the PROCESS_THREAD() macro are the variable names that hold the event
number and the event data for subsequent events that this process may receive.

The process itself is defined between the PROCESS_BEGIN() and


PROCESS_END() macros. In this case, the process only prints out the hello,
world message and exits.

This should all look somewhat like this:

We save this as hello-world.c:

53

[edit] Step 4: Set the default target


We switch to the terminal window. We first set the default platform for this project to the
sky target by issuing the command
make TARGET=sky savetarget

54

[edit] Step 5: Compile the project


Now we can compile our new project for the first time. We do this by issuing the
command
make hello-world

This will cause the entire Contiki system to be compiled and a lot of compilation output
to be produced in the terminal window. When compilation has finished, the terminal
window looks like this:

55

[edit] Step 6: Test the project in MSPsim


We can now run the Hello, world program in MSPsim by running
make hello-world.mspsim

This brings up a number of windows. You may need to rearrange the windows to see
what is going on:

56

The USART1 Port Output window shows the output from the serial port of the mote. We
see the Contiki boot-up messages as well as our Hello, world message.
The SkyGui window shows the Tmote Sky mote. The reset and user buttons can be
pressed by clicking on them. We press the reset button to see the output:

The boot-up messages and our Hello, World message shows up again in the serial port
window.
We stop the simulation by bringing up the terminal window, hold the Ctrl key, and press
the C key.

57

[edit] Step 7: Run the project on Tmote Sky hardware


Insert a Tmote Sky mote into the USB port of the PC. We now have to configure
VMware Player to access the Tmote Sky. This is done through the Virtual Machine menu
as shown below:

The Tmote Sky should now be accessible from within Instant Contiki. Test this by
running
make sky-motelist

If the Tmote Sky shows up, it is possible to reprogram it with the Hello, World
application:
58

make hello-world.upload

This will upload Contiki and the Hello, World program to the Tmote Sky mote.
When the programming is complete, Contiki and the Hello, world program should now
be running on the Tmote Sky. See the output of the Tmote Sky by running
make login

In VMware garbage characters may sometimes appear at this point appear:

59

To see the Hello, world program in action, we press the reset button on the Tmote Sky.
The following output should appear:

Congratulations! A complete Contiki project now runs on your Tmote Sky mote!
Hold the Ctrl key and press C to get back to the prompt.

4.4. V d lm vic vi Shell trong Contiki

Example-Shell Guide
From ContikiWiki
Jump to: navigation, search
TODO: Cross-check for contiki 2.5 release
The following is an extract from the Contiki tutorial given at the ACM/IEEE conference
on Information Processing in Sensor Networks (IPSN) in April 2009.

[edit] Contiki Mote Shell


The Contiki shell is an interactive on-mote shell that provides a set of commands for
interacting with the system. The shell can be accessed either over a serial USB
connection or over a network using Telnet. In this tutorial, we first run the shell over a
USB serial connection.
First, compile and upload the shell:
60

cd
cd contiki-2.x
cd examples
cd sky-shell
make sky-shell.upload

Wait for the compilation and uploading to finish. To connect to the shell over the USB
port, run:
make login

Press the return key to get a prompt. (We have found that with Instant Contiki running in
VMWare, garbage characters are sometimes printed out when connecting. They can be
safely ignored.) Next, we try a few shell commands. To get a list of available commands,
run:
help

Try a bunch of other commands:


help
sense | senseconv
power | powerconv
ls
format
echo test | write file
ls
read file
nodeid
blink 10
reboot
repeat 2 2 { echo again } &
ps

The power command prints out the current power profile from Contiki's software-based
power profiler. To print out the power profile in decimal digits, run:
power | binprint

The output will look something like: 12 236 0 37421 0 4 0 380 0 0 0 380 0
The numbers that the power command outputs are:
1. The number of data items that follow, to make automatic parsing of the output
easier
2. CPU low-power mode time, least significant 16 bits
3. CPU low-power mode time, most significant 16 bits
4. CPU active mode time, least significant 16 bits
5. CPU active mode time, most significant 16 bits
6. Radio transmission time, least significant 16 bits
7. Radio transmission time, most significant 16 bits
8. Radio listen time, least significant 16 bits
9. Radio listen time, most significant 16 bits
10. Radio transmission time in idle listening, least significant 16 bits
11. Radio transmission time in idle listening, most significant 16 bits
61

12. Radio listen time in idle listening, least significant 16 bits


13. Radio listen time in idle listening, most significant 16 bits
The output of the power command can be used to compute an estimate of the mote's
power consumption by multiplying the time with pre-measured current draw metrics
[11]. Because the power command only measures the time during which the peripherals
are switched on, the power consumption estimate is not affected by environmental noise
such as temperature differences nor by noise due to subtle differences between different
versions of hardware.

4.5. Giao thc thu thp d liu trn Contiki

Simple Contiki Data Collection on the Tmote Sky


From ContikiWiki
Jump to: navigation, search
This tutorial shows how to collect sensor data using Contiki's built-in data collection
algorithm. The Contiki data collection is as simple as it gets if you simply want to collect
data without having to do any programming or worry about networking.
This tutorial shows how to run CollectView under Instant Contiki, but CollectView runs
under native Windows and Linux too. Download it and try it out!

Contents
[hide]

1 Run Contiki on the Tmote Sky


2 Start the CollectView program
3 Upload Contiki to the Tmote Sky motes
4 Start the data collection network
5 View the collected data

6 Summary

[edit] Run Contiki on the Tmote Sky


If you have a few Tmote Skys around, you can quickly use Contiki to collect sensor data
from them via the Contiki CollectView program.

[edit] Start the CollectView program


In Instant Contiki, click on the Terminal icon. In the terminal window, enter the
command
cd Desktop/contiki-collect-sky-2.5.rc1/

62

In this directory, run the command


java -jar collect-demo.jar

63

This opens the CollectView application. If there are no Tmote Sky motes connected to
the PC, a dialog will be displayed. Close this with its OK button.

[edit] Upload Contiki to the Tmote Sky motes


Our first step is to upload Contiki onto your Tmote Skys. The CollectView program can
upload Contiki in parallel to all motes connected to the PC.
Plug in your Tmote Sky motes into the USB ports of your PC. A USB hub can be used to
increase the number of available USB ports.
Next, we need to hook the motes into Instant Contiki. We do this in the VMware Virtual
Machine menu:

Connect all motes to Instant Contiki.


64

Now we use CollectView to upload Contiki to all connected motes. Click the "Program
Nodes..." button:

You will now be asked whether you want to program the nodes. Obviously you do, so
click the Yes button:

65

The uploading progress is shown in the window that opens.

Click the Close button when programming has finished.

66

If you need to program more motes, repeat the process. When all motes have been
programmed, remove all motes except one.

[edit] Start the data collection network


After having programmed all the nodes, we will now connect to the nodes via the serial
connection (via the node which is still plugged into your computer). After that we will
instruct the network what exactly we want it to do and watch Contiki's magic unfold.
So lets get started. At first, click the Connect to serial button. This will connect your PC
to the node and allow you to give commands to the node as well as receive status updates
from the node itself. The "Connect" button will change to a "Disconnect" button once
successfully connected.

Once we have connected to the node, we can click on the "Start collect" button. This will
instruct the nodes to form a data collection network, with the mote connected to the USB
port as the sink.

67

Click the "Send command to nodes" button. This sends a command to the nodes in the
network that will cause them to periodically send sensor data to the sink. This data will
be picked up by the CollectView program and displayed.

68

[edit] View the collected data


Your network should now be forming a data collection tree and data should start arriving
at the sink. We will now guide you through the information that is being collected, which
is nicely displayed in some of the tabs.
After a minute or so, a number of node IDs should have showed up in the leftmost
column. These are the nodes that have reported data to the sink, with time all the nodes
should be displayed if the radio interference isn't too outrageous (WiFi sometimes
overpower these poor little nodes).

Click on the "Network Graph" tab. This shows the structure of the collection network.
The nodes are moving around, so it is a good idea to fix the position of the sink node.
The sink node cna be identified by looking to what node the arrows are pointing. Right
click on the node and select the "Fixed node position" menu item to fix its position. To
make it easier to right click on the node, it might be a good idea to uncheck the "Update
layout" menu item first, as this will stop the movement of the nodes.

69

The "Node info" tab shows a table with information for each node. Here you can see how
many packages have been received, how many hops nodes are away amongst other data.

70

The "Sensors" tab shows the sensor data from the network.

The "Power" tab shows the power consumption of the motes.

71

The "Network" tab shows the status of the network.

4.6. Giao thc RPL trn Contiki

Setting up a Low-Power IPv6/RPL Network


From ContikiWiki
Jump to: navigation, search
One of the defining features of Contiki is that it natively supports the Internet Protocol.
This tutorial shows how to set up a Contiki low-power IPv6 network. We will use the
Cooja network simulator, but the principles are the same for a network with real
hardware.
For simplicity, we use Instant Contiki as the development environment.

72

Contents
[hide]

1 The easy way: load a ready-made simulation


o 1.1 Start Cooja and open the simulation
o 1.2 Start the simulation
o 1.3 View the data from the network
2 Set up your own simulation
o 2.1 Create a new simulation
o 2.2 Create the sink node
o 2.3 Create sender nodes
o 2.4 Show mote types in simulation visualizer
o 2.5 Start the CollectView program
o 2.6 Start the simulation
o

2.7 View the data

[edit] The easy way: load a ready-made simulation


Before going through the entire process, we will show easy way: loading an already
existing simulation in Cooja.

[edit] Start Cooja and open the simulation


Start Cooja by double-clicking on the Run Cooja icon.

73

In Cooja, open the File menu, the Open simulation menu item, and click on Browse

Go to the directory contiki-2.x/examples/ipv6/rpl-collect and open the file collect-treedense-noloss.csc

74

[edit] Start the simulation


After Contiki has been compiled and the simulation has loaded, the CollectView window
will appear on top of the Cooja window. Click on the Cooja window to bring it to the
front.
This simulation is a 25 node network, running IPv6 with RPL routing, where one node is
the sink node to which the others periodically send sensor data.

Click the Start button to start the simulation.

75

[edit] View the data from the network


After the simulation time has reached some 70000 ms, data will begin to appear at the
sink node. The sink node prints out the received data on its serial port. The CollectView
program listens to this (emulated) serial port and displays the data, along with
information about the network.
Bring up the CollectView window to see the data. Click the Network Graph tab to see the
structure of the IPv6/RPL network. Right-click on the sink node (called 1.1) and click on
the Fixed Node Position menu item to fix its position. It is helpful to first uncheck the
Update Layout menu item this will cause the nodes to stop moving around.

76

Click on the Network tab to explore the parameters in the network. Click the <All> item
on the top left to select all nodes.

77

The Node Info tab has more information about the nodes.

The Power tab shows the power consumption of the nodes in the network.

78

[edit] Set up your own simulation


Now that we know how a running simulation looks like, we can set up our own. We will
use the same example C code as in the previous simulation, but we will set up the
simulation ourselves.

[edit] Create a new simulation


Close the Cooja window that we previously opened. Open a new Cooja.
When Cooja has started, select the New simulation menu item on the File menu.

79

Create a new simulation. Give it a nice name.

80

[edit] Create the sink node


We now create the sink node.
When the new simulation has opened, click on the Mote Types menu, select the Create
mote type menu item, and the Sky Mote Type item.

Give the mote type a name, and click on the Browse button.

81

Go to the directory contiki-2.x/examples/ipv6/rpl-collect and select the udp-sink.c file.


This file contains the code for the sink node.

Click the Compile button to compile the sink code.

82

When the Compilation is complete, the Compile button has changed into a Create button.
Click this button.
Create one sink node.

[edit] Create sender nodes


Next, we create the sender nodes. We create a new mote type for this. We use the Sky
Mote Type as before.

83

The sender node uses the udp-sender.c file from the same directory as the sink node.
Click the Compile and Create buttons.

Create a few nodes say, 8.

84

[edit] Show mote types in simulation visualizer


In the Simulation Visualizer window, open the visualizer skin menu. Select Mote IDs
and Mote Type. This will show the node ID of the nodes in the window and will color
the nodes differently depending on what mote type they are. In this example, we have
two mote types, one sink mote type and one sender mote type.

85

[edit] Start the CollectView program


Right click on the sink node. The sink node has node ID 1 and is green. Click the Open
mote plugin menu. Select the Collect View menu item.

This brings up the CollectView window.

86

[edit] Start the simulation


Click on the Cooja window in the background and start the simulation.

[edit] View the data


Let the simulation run for 100000 ms or so, then bring up the CollectView window
again. The sensors should now have begun reporting data. The Node Info tab has
information about the nodes. As before, explore the other tabs as well.

87

4.7 Giao thc CoAP trn Contiki

REST-Example Guide
From ContikiWiki
Jump to: navigation, search
Open a terminal and go to "<CONTIKI_HOME>/examples/rest-example/" directory.
MAIN EXAMPLE: rest-server-example.c : A RESTful server example showing how to
use the REST layer to develop server-side applications (possible to run it over either
COAP or HTTP) To use COAP as the underlying application protocol, one should define
WITH_COAP = 1 in rest-example/Makefile. Otherwise, HTTP is used. Look at the
source code to see which resources are available. (check the RESOURCE macros in the
code). Each resource has a handler function which is called by the REST layer to serve
the request. (i.e. "helloworld" resource has a handler function named
"helloworld_handler" which is called when a web service request is received for
"helloworld" resource.)
To run REST examples in COOJA under Linux

Accessing the server from outside: 1. Start COOJA and load the simulation "rest-serverexample.csc" by the following command.
make TARGET=cooja rest-server-example.csc

2. After loading the COOJA file, open another another terminal pointing to the same
directory and connect to the COOJA simulation using tunslip6:
make connect-router-cooja

3. You need to use a COAP or HTTP client to interact with the COOJA nodes running
REST code. In this setting, two servers are available: IP addresses are
aaaa::0212:7402:0002:0202 and aaaa::0212:7403:0003:0303. COAP uses 61616,
whereas HTTP uses 8080 port in default configuration. First, ping the COOJA nodes to
test the connectivity.
ping6 aaaa::0212:7402:0002:0202
ping6 aaaa::0212:7403:0003:0303

HTTP Examples You can use curl as an http client to interact with the COOJA motes
running REST code.
curl -H "User-Agent: curl" aaaa::0212:7402:0002:0202:8080/helloworld
#get helloworld plain text
curl -H "User-Agent: curl" aaaa::0212:7402:0002:0202:8080/led?
color=green -d mode=off -i #turn off the green led
curl -H "User-Agent: curl" aaaa::0212:7402:0002:0202:8080/.wellknown/core -i

88

curl -X POST -H "User-Agent: curl"


aaaa::0212:7402:0002:0202:8080/helloworld #method not allowed

COAP Examples You should run a COAP client on your computer. You can use the
URLs and methods provided above in HTTP examples to test the COAP Server.
Accessing the server inside the sensor network: (Note: Provided only for COAP
implementation) Start COOJA and load the simulation "coap-client-server-example.csc"
by the following command.
make TARGET=cooja coap-client-server-example.csc

coap-client-server-example.csc : Runs rest-server-example.c as the server (over COAP)


(IP:aaaa::0212:7401:0001:0101) in one node and coap-client-example.c as the client (IP:
aaaa::0212:7402:0002:0202) in another node. Client periodically accesses resources of
server and prints the payload.
Note: If the generated binary is bigger than the MOTE code size, then you will get a
"region text is full" error. Right now, REST+HTTP example uses (Contiki +
ContikiMAC + uIPv6 + RPL + HTTP Server + REST Layer) which does not fit in Tmote
Sky memory. To save same code space and make the example fit, you can define static
routes rather than using RPL or use nullrdc rather than ContikiMAC.
To run REST server on real nodes under Linux

1. Program the nodes with the rest-server-example


make TARGET=sky rest-server-example.upload

2. Disconnect the nodes and program one node with the RPL border router
(cd ../ipv6/rpl-border-router && make TARGET=sky border-router.upload)

3. Connect to the border router using tunslip6: [Once tunslip6 has been built it can be
invoked directly with useful debugging switches, $CONTIKI/tools/tunslip6 --help]
make connect-router

4. Reconnect the motes, reboot them and note their IP addresses.


5. Test the connectivity by pinging them.
ping6 <IPv6 Address of the MOTE>

5. Remaining parts are the same with the COOJA example. (i.e. if it is a COAP Server, it
is available at <NODE_IP_ADDR>:61616)

TI LIU THAM KHO

89

[1]. Jean-Philippe Vasseur, Adam Dunkels. Interconnecting Smart Objects with


IP: the next Internet. Morgan Kaufmann Publishers, 2010.
[2]. Abeill J, Durvy M, Hui J, Dawson-Haggerty S. Lightweight IPv6
Stacks for Smart Objects: the Experience of Three Independent and
Interoperable Implementations; January 2009. IPSO Alliance White Paper 2.
[3]. Adam Dunkels, Bjrn Grnvall, and Thiemo Voigt. Contiki - a lightweight
and flexible operating system for tiny networked sensors. In Proceedings of the
First IEEE Workshop on Embedded Networked Sensors (Emnets-I), Tampa,
Florida, USA, November 2004.
[4]. Tmote Sky. [Online]. Available:
http://www.bandwavetech.com/download/tmote-sky-datasheet.pdf
[5]. http://www.sics.se/contiki/.

90

You might also like