90
LỜI NÓI ĐẦU Các đối tượng thông minh thường là các thiết bị đơn giản, nhỏ gọn, giá thành thấp, sử dụng nguồn năng lượng hạn chế (pin), có thời gian hoạt động lâu dài. Một trong những đặc điểm nổi bật của một nút mạng các đối tượng thông minh là sự hạn chế về năng lực tính toán, nguồn năng lượng cung cấp, và giá thành sản xuất. Mặc dù phần cứng đơn giản nhưng các đối tượng thông minh đã và đang được ứng dụng rộng rãi trong đời sống. Việc hỗ trợ cơ sở hạ tầng cho các ứng dụng mạng các đối tượng thông minh trên hệ điều hành ngày càng trở nên quan trọng. Bản chất, hệ điều hành là cầu nối giữa phần cứng đơn giản với phần ứng dụng phức tạp. Hệ điều hành cho mạng các đối tượng thông minh đóng vai trò trung tâm trong việc xây dựng các ứng dụng phân tán với khả năng mở rộng, có độ tin cậy và hiệu quả cao. Qua nhiều năm, chúng ta đã thấy xuất hiện nhiều hệ điều hành khác nhau nhằm dễ dàng cho việc phát triển các ứng dụng mạng với các đối tượng thông minh. Các chức năng cơ bản của hệ điều hành bao gồm việc trừu tượng hóa tài nguyên cho các thiết bị phần cứng khác nhau, quản lý ngắt và lập lịch các nhiệm vụ, điều khiển đồng thời, và hỗ trợ mạng. Dựa trên các dịch vụ được cung cấp bởi hệ điều hành, những người lập trình ứng dụng có thể thuận tiện sử dụng các giao diện lập trình ứng dụng mức cao độc lập với phần cứng lớp dưới. Hệ điều hành Contiki là hệ điều hành mã nguồn mở, được nghiên cứu, thiết kế và phát triển bởi một nhóm các nhà phát triển từ viện khoa học máy tính Thụy Điển, người đứng đầu là Adam Dunkels. Nhóm phát triển Contiki gồm nhiều thành viên đến từ SICS, CISCO, cùng nhiều tổ chức và các trường đại học khác trên thế giới. Hệ điều hành Contiki được thiết kế cho các vi điều khiển có bộ nhớ nhỏ, với thông số 2KB RAM và 40KB ROM. Nhờ đó, Contiki được sử dụng rộng rãi cho các đối tượng thông minh. Nội dung bài giảng này gồm 4 chương: Chương 1: Tổng quan về hệ điều hành nhúng cho các đối tượng thông minh. Chương này khảo sát các hệ điều hành hiện có từ đó đưa ra những so sánh và những hướng nghiên cứu trong tương lai đối với các hệ điều hành này. Chương 2: Giới thiệu về hệ điều hành Contiki. Chương này giới thiệu tổng quan về hệ điều hành Contiki bao gồm lịch sử hình thành và phát triển, các đặc điểm chính, kỹ thuật lập trình trên hệ điều hành Contiki, vấn đề quản lý bộ nhớ, các bước cài đặt môi trường phát triển ứng dụng với Contiki trên Ubuntu. 1

Tv Ict Bka Simulation Rpl

Embed Size (px)

DESCRIPTION

Tai nang bka

Citation preview

  • 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

    2

  • 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

    3

  • Chng 1. TNG QUAN V H IU HNH CHO MNG CC I TNG THNG MINH

    1.1. Gii thiu v cc i tng thng minhCc 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.

    4

  • 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

    5

  • 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.

    6

  • 1.2. H iu hnh nhng cho cc i tng thng minh1.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

    7

  • 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-to-

    completion (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 ContikiH 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 ContikiBt 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 ContikiH 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 ContikiContiki 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 ContikiContiki 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 Event-

    27

  • 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 Contiki2.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. //contiki-2.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

  • o 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**

    or

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

    [edit] Feature requests, bug reporting, and questions

    Questions and requests should normally be posted to the main Contiki developers mailing list: [email protected]. See the Contiki website for information of how to subscribe to this list. You may also mail me directly, Fredrik sterlind, [email protected].

    4.2. Hng dn s dng Cooja

    Get started with the Cooja simulatorFrom ContikiWikiJump 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 contiki-2.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 quick-start 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 projectscd projectsmkdir hello-world-projectcd 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.xinclude $(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 GuideFrom ContikiWikiJump 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 SkyFrom ContikiWikiJump 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 NetworkFrom ContikiWikiJump 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-tree-dense-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 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 GuideFrom ContikiWikiJump to: navigation, search

    Open a terminal and go to "/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-server-example.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/.well-known/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

    5. Remaining parts are the same with the COOJA example. (i.e. if it is a COAP Server, it is available at :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

    LI NI UMC LCChng 1. TNG QUAN V H IU HNH CHO MNG CC I TNG THNG MINH1.1. Gii thiu v cc i tng thng minh1.2. H iu hnh nhng cho cc i tng thng minh1.2.1. Chc nng ca h iu hnh1.2.2. Nhng thch thc nh hng n vic thit k h iu hnh1.2.3. Cc thnh phn c bn ca mt h iu hnh1.2.4. Kho st mt s h iu hnh1.2.5. Tiu ch phn loi h iu hnh1.2.6. Mt s vn cn tip tc nghin cu

    Chng 2. H IU HNH CONTIKI 2.1. Gii thiu v h iu hnh Contiki2.2. Cu trc h iu hnh Contiki2.3. Kin trc phn lp h iu hnh Contiki2.4. Ngn xp truyn thng trong h iu hnh Contiki2.4.1. Ngn xp uIP 2.4.2. Ngn xp RIME

    2.5. K thut lp trnh trn h iu hnh Contiki2.5.1. Lp trnh Event-driven2.5.2. Lp trnh Multi-threaded2.5.3. Lp trnh Prothreads2.5.4. So snh ba m hnh lp trnh trong Contiki2.6. Hot ng nh thi trong Contiki2.7. Qun l b nh

    2.8. Ci t v thc hnh vi Contiki2.8.1. Ci t Instant-Contiki2.8.2. Chng trnh iu khin LED trn Tmote Sky

    Chng 3. CC MODULE TRONG H IU HNH CONTIKIChng 4. XY DNG CHNG TRNH NG DNG VI CONTIKI4.1. Gii thiu v cng c m phng Cooja

    [edit] The COOJA Simulator[edit] Contiki level: the Contiki Mote Type

    [edit] Getting started[edit] Configuration Wizard[edit] Create a Hello World simulation[edit] Save and load simulations[edit] COOJA configs for Contiki development: sharing simulation configs[edit] COOJA configs for Contiki development: simulation quickstart

    [edit] Feature requests, bug reporting, and questions4.2. Hng dn s dng Cooja

    Get started with the Cooja simulatorFrom ContikiWikiContents[edit] Step 1: Start Cooja[edit] Step 2: Ru