40
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ - VIỄN THÔNG ĐỒ ÁN I THIẾT KẾ PHẦM MỀM Đề tài: LÀM QUEN VỚI HỆ ĐIỀU HÀNH CONTIKI TRÊN KIT MSP430G2553 Sinh viên thực hiện: TRẦN TRUNG HIẾU Lớp ĐT10 – K57 Giảng viên hướng dẫn: THS. NGUYỄN NAM PHONG

Temp_baocao.doc

Embed Size (px)

Citation preview

Hng dn cch trnh by v vit lun vn

TRNG I HC BCH KHOA H NI

VIN IN T - VIN THNG

N ITHIT K PHM MM ti:

LM QUEN VI H IU HNH CONTIKI TRN KIT MSP430G2553

Sinh vin thc hin: TRN TRUNG HIU

Lp T10 K57

Ging vin hng dn: THS. NGUYN NAM PHONGH Ni, 6-2015

MC LC1MC LC

2M u

2Phn 1. Gii thiu v h iu hnh Contiki v kit lunchpad MSP430

21.1 H iu hnh Contiki

21.1.1 Tng quan v lch s pht trin

31.1.2 c im ca h iu hnh Contiki

31.2 Kit MSP430G2553

31.2.1 Tng quan

51.2.2 Cu trc

61.2.3 Kt ni UART

71.3 Ci t v np code ln Kit

71.3.1 Ci t Contiki

81.3.2Ci t eclip

81.3.3 Ci contiki launchpad v cc trnh bin dch

10Phn 2. T chc v h thng Contiki

102.1 Process Contiki

102.1.1 The Structure of a Process

112.1.1.1 The Process Control Block

112.1.1.2 The Process Thread

122.1.2 Protothreads

122.1.3 Protothreads in Processes

132.1.4 Events

142.1.4.1 Asynchronous Events

142.1.4.2 Synchronous Events

142.1.4.3 Polling

142.1.5 The Process Scheduler

152.1.5.1 Starting Processes

152.1.5.2 Exiting and Killing Processes

152.1.5.3 Autostarting Processes

152.2 Timer

152.2.1 The Contiki Timer Modules

162.2.2 The Clock Module

162.2.3 The Timer Library

172.3 Input and output

172.3.1 Serial Communication

182.1.2 LEDs

20Phn 3. Gii thch code mu v bi tp

203.1 Code mu

203.1.1 Blink example

223.1.2 Button example

233.2 Bi tp

233.2.1 S dng cc cu trc tun t, lp, r nhnh

253.2.2 iu khin leds bng tp lnh thng qua uart

DANH MC HNH V

M ui vi ngnh in t truyn thng ni chung v in t ni ring th vic lp trnh cho vi x l l v cng quan trng. Cc phong cch lp trnh c s b hn ch nhiu bi tnh song song ca chng trnh. Do , n s nghin cu mt cch lp trnh mi cho vi x l s dng h iu hnh contiki. n gin v thun li cho qu trnh lm vic cng nh s lin mch cho cc n sau ny, chng ta s dng mch m phng l kit MSP430G2533 ca TI.

Do thi gian thc hin v kin thc cn hn ch nn cn nhiu sai st trong qu trnh thc hin ti, rt mong c s b sung ng gp ca cc thy c v cc bn.

Chng em xin chn trng cm n thy Nguyn Nam Phong v anh Nguyn Vn Giang nhit tnh hng dn chng em sut qu trnh hc tp.Phn 1. Gii thiu v h iu hnh Contiki v kit lunchpad MSP4301.1 H iu hnh Contiki

1.1.1 Tng quan v lch s pht trinH iu hnh contiki l h iu hnh m ngun m, c nghin cu, thit k vpht trin bi mt nhm cc nh pht trin t vin khoa hc my tnh Thy in, nging 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 hnhContiki c thit k cho cc vi iu khin c b nh nh, vi thng s 2KB RAM v40KB ROM. Nh , Contiki c s dng cho cc h thng nhng v cc ng dngtrong mng cm bin khng dy. Contiki bt u c nghin cu t nm 2001 v phthnh phin bn u tin Contiki 1.0 nm 2003. Phin bn hin nay ca Contiki l 2.4, vi nhiu thay i,b sung v pht trin vt bc. Trong thc t, Contiki c ng dng trong nhiu dn 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 mhnh uIP c pht hnh nm 2001 c s dng trong h thng ng dng ca hngtrm cng ty trong cc lnh vc hng hi, thng tin v tinh, khai thc du m,;M hnhProtothreads c cng b ln u tin nm 2005, n nay c s dng trong nhiung dng nh b gii m k thut s v thit b cm bin rung khng dy.1.1.2 c im ca h iu hnh ContikiContiki OS c lp trnh bng ngn ng C, hot ng da trn c ch event driven v c nhng c im ph hp vi cc h thng nhng v mng cm bin khng dy: Contiki c chia thnh nhiu modul hot ng c lp. Nh cc ng dng c th s dng cc modul mt cch lih ng v ch load nhng modul 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 cm bin thng qua uIP stack c xy dng da trn nn TCP/IP

C nhng modul 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 khia nhng giao thc mi.1.2 Kit MSP430G25531.2.1 Tng quan Cc dng vi iu khin msp430 ny do hng TI ( Texas Instruments) sn xut, ngoi ra th TI cn sn xut v cung cp nhiu linh kin in t v cc module khc, tm hiu th cc bn c th tham kho a ch :www.ti.com bit r hn. Vi iu khin( Micro controller unit MCU ) l n v x l nh, n c tch hp ton b cc b nh nh ROM , RAM , cc port truy xut , giao tip ngoi vi trc tip trn 1 con chip ht sc nh gn. c thit k da trn cu trcVON-NEUMAN, c im ca cu trc ny l ch c duy nht 1 bus gia CPU v b nh (data v chng trnh) , do m chng phi c rng bit tng t nhau.MSP430 c mt s phinbn nh: MSP430x1xx, MSP430x2xx, MSP430x3xx,MSP430x4xx, MSP430x5xx. Di y l nhng c im tng qut ca h vi iu khin MSP430: + Cu trc s dng ngun thp gip ko di tui th ca Pin Duy tr 0.1A dng nui RAM. Ch 0.8A real-time clock. 250 A/ MIPS.+ B tng t hiu sut cao cho cc php o chnh xc

12 bit hoc 10 bit ADC-200 kskp, cm bin nhit , Vref. 12 bit DAC.+B gim st in p ngun.16 bit RISC CPU cho php c nhiu ng dng, th hin mt phn kch thc Code lp trnh. Thanh ghi ln nn loi tr c trng hp tt nghn tp tin khi ang lm vic. Thit k nh gn lm gim lng tiu th in v gim gi thnh. Ti u ha cho nhng chng trnh ngn ng bc cao nh C, C++ C 7 ch nh a ch. Kh nng ngt theo vc t ln.+ Trong lp trnh cho b nh Flash cho php thay i Code mt cch linh hot, phm vi rng, b nh Flash cn c th lu li nh nht k ca d liu.

1.2.2 Cu trc

Hnh 1.1 Hnh minh ha kit LaunchPad Rev.1.1 (bn n nh hin ti l Rev.1.5)

Mt kit LaunchPad gm hai thnh phn, vi GND c ph chung: - Na trn: L phn mch np theo chun spy-bi-wire Jtag (2 dy), kt hp vi chuyn i giao tip UART vi my tnh. Trn cng l u USBmini ni vi my tnh, pha di l hng Header ni ra i tng cn giao tip, bao gm cc chn:

TXD,RXD: phc v giao tip UART vi my tnh. RST,TEST: phc v np v debug (sa li) theo chun spy-bi-wire Jtag.

VCC: cp ngun 3V3 cho i tng (thng l na di LaunchPad).

Hnh1.2 Cc chn c bn

- Na di: l mt mch pht trin MSP430 n gin, bao gm:

Socket cm MSP430 (thng gn sn chip MSP430G2553), Pad hn thch anh, Nt nhn Reset chip. Nt nhn gn vo P1.3, hai Led hin th c jumper gn vo P1.0 v P1.6. Hai hng header kt ni hai hng chn ca chip ra ngoi, mt hng header ngunGND-GND-VCC ly ngun 3V3 trn LaunchPad.1.2.3 Kt ni UARTUART(Universal Asynchronous Receive/Transmit) Truyn nhn d liu khng ng b . y l mt trong nhng giao thc truyn thong ph bin trong cc dng vi iu khin .

Kt ni phn cng c bn :

Hnh 1.3 Cu trc khung truyn/nhn

Hnh 1.4 Khung truyn nhn d liu

s dng c ch ny, ta phi thay i chn cm jump nh hnh sau:

Hnh 1.5 Tinh chnh jump ch UART1.3 Ci t v np code ln Kit 1.3.1 Ci t Contiki Step 1: Install Ubuntu- Nn ci bn Ubuntu mi nht l Ubuntu 14.04 64bit - Link hng dn: http://topthuthuat.com/thu-thuat-ubuntu/cach-cai-dat-dual-song-song-ubuntu-va-window-7-8 - Lu : Lm ng theo cc bc. Nu lm sai c th dn ti tnh trng Ubuntu ci ln Windows. Step 2: Install GIT: GIT l phn mm qun l m ngun M Terminal ln: Ctrl+Alt+T sudo apt-get update sudo install git Step 3: Install CONTIKI t Git Clone git clone https://github.com/contiki-os/contiki.git1.3.2 Ci t eclip Step 1: Install Java 8 on Ubuntu sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java8-installer Step 2: Download Eclipse Lunar

http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/luna/SR1a/eclipse-cpp-luna-SR1a-linux-gtk.tar.gz Step 3: Gii nn v s dng - Khi ng Eclipse - Import Contiki vo Eclipse: Chn Project/Import... Chn Browse v chn th mc contiki. Nhn Finish1.3.3 Ci contiki launchpad v cc trnh bin dch Step 1: Install Build Dependencies sudo apt-get install subversion gcc-4.4 texinfo patch \ libncurses5-dev zlibc zlib1g-dev libx11-dev libusb-dev \ libreadline6-dev Step 2: Install Compiler MSPDebug tar xvfz mspdebug-0.9.tar.gz cd mspdebug-0.9 makesudo make install Step 3: Install MSP-GCC sudo apt-get install gcc-msp430 Step 4: Download Contiki for Launchpad git clone git://github.com/msloth/contiki-launchpad.git Step 5: Make a example cd contiki-launchpad/example/blink make cleanmakemake blink.upload

Phn 2. T chc v h thng Contiki 2.1 Process ContikiCode trong Contiki c chia lm mt trong hai loi: Cooperative code: on code ny s chy tun t, code trc hon thnh th n mi thc hin. Preemptive code: on m ny c dng ngt hoc khi s dng real-time timers.

Hnh 2.1 Cc loi code processesTt c cc chng trnh trong contiki c gi l processes. Mi processes thng c bt u khi khi ng h thng, mt modul c np vo thng. V n s chy khi mt s kin no xy ra, chng hn nh timer x, mt iu kin t bn ngoi,

2.1.1 The Structure of a Process

Contiki process bao gm 2 phn: Process control block v Process thread. Process control block c lu tr trong RAM, cha cc thng tin tc thi nh: tn, trng thi, con tr. Process Thread l on m v c lu tr trong ROM.2.1.1.1 The Process Control Block

Process Control Block cha thng tin v mi process, chng hn nh trng thi, con tr, v tn m t. Khi ny ch c s dng bi kernel v khng bao gi c truy cp trc tip bng process.Cu trc bn trong ca Process Control Block:

struct process {

struct process *next;

const char *name;

int (* thread)(struct pt *,

process_event_t,

process_data_t);

struct pt pt;

unsigned char state, needspoll;

};

Trong trng u tin, next, tr ti Process Control Block k tip trong danh sch cc process c khi to. Trng name tr ti tn m t process. Trng thread, l mt con tr, tr n process thread. Trng pt gi trng thi ca protothread trong process thread. Trng state v needspoll l c gip gi trng thi ca process. Cc c needspoll c thit lp bi hm process_poll() khi process c hi.

Qu trnh phc tp trn c s dng trc tip thng qua lnh:

PROCESS(name, "strname");

Example PROCESS(hello_world_process, "Hello world process");2.1.1.2 The Process Thread Process Thread l code ca process. Cu trc ca nh sau:PROCESS_THREAD(name, ev, data)

{

PROCESS_BEGIN();

// code

PROCESS_END();

}

Example

PROCESS_THREAD(hello_world_process, ev, data)

{

PROCESS_BEGIN();

printf("Hello, world\n");

PROCESS_END();

}

2.1.2 ProtothreadsProtothreads l mt cu trc code cho php h thng chy cc hot ng khc khi i mt iu g xy ra. Protothreads y khai thc trc tip trong h iu hnh contiki, ngoi ra n c s dng tt trong cc lnh vc khc. Protothread cho php s dng cc hm c trong C ging nh trong threads m khng b trn b nh. N gim dung lng b nh v l iu rt quan trng trong cc h thng c b nh khim tn s dng Contiki.

Protothread l 1 hm C. Hm ny bt u v kt thc bi 2 lnh PT_BEGIN() vPT_END().Bn cht khi thc hin chng trnh trong protothread: struct pt { lc_t lc };

#define PT_WAITING 0 #define PT_EXITED 1 #define PT_ENDED 2 #define PT_INIT(pt) LC_INIT(pt->lc)

#define PT_BEGIN(pt) LC_RESUME(pt->lc)

#define PT_END(pt) LC_END(pt->lc); \

return PT_ENDED

#define PT_WAIT_UNTIL(pt, c) LC_SET(pt->lc); \

if(!(c)) \

return PT_WAITING

#define PT_EXIT(pt) return PT_EXITED

Local continuations implemented with the C switch statement: typedef unsigned short lc_t;

#define LC_INIT(c) c = 0 #define LC_RESUME(c) switch(c) { case 0:

#define LC_SET(c) c = __LINE__; case __LINE__:

#define LC_END(c) }

2.1.3 Protothreads in Processes

Trong Contiki, protothread c s dng di nhng cu lnh ring, c phn khc bit so vi nguyn bn trn.Cc hm trong Contiki processes:

PROCESS_BEGIN(); // Khai bo bt u process' protothread. PROCESS_END(); // Khai bo kt thc process' protothread. PROCESS_EXIT(); // Thot ra khi the process. PROCESS_WAIT_EVENT(); // i 1 event no . PROCESS_WAIT_EVENT_UNTIL(c); // i 1 event no nhng c iu kinPROCESS_YIELD(); // Ging PROCESS_WAIT_EVENT().Khc ch n m bo s chy t nht 1 ln, process khng kt thc trong 1 vng lp v hn chim CPUPROCESS_WAIT_UNTIL(c); // Ch 1 iu kin, c th khng thuc hinPROCESS_PAUSE(c); // Tm dng process ang thc hin2.1.4 Events

Trong Contiki, mi process khi chy s nhn 1 event. C 2 loi event: asynchronous events(s kin ng b) and synchronous events(s kin khng ng b).

Hnh 2.2 M t s kin khng ng b

Khi mt s kin khng ng b c gi, s kin c t vo kernel's event queue(hng i s kin) v chuyn tip n mt process vo thi gian sau .

Hnh 2.3. M t s kin ng b

Khi mt s kin ng b c gi, s kin ngay lp tc c chuyn cho process. 2.1.4.1 Asynchronous Events

Asynchronous events c chuyn tip n process sau khi c gi i. Gia khong thi gian gi i v c chuyn tip, n nm hng i s kin trong Contiki kernel.

Process nhn event c th l mt process c th, hoc tt c cc process ang chy. Nu l 1 process c th, kernel s gi n ln n cung cp s kin. Nu l nhiu process, kernel s tun t cung cp cc s kin ging nhau cho tt c cc processs, ci ny n ci khc. Asynchronous events c gi i bng hmprocess_post(). u tin hm kim tra kch c ca hng i lnh. Nu cn trng s a vo, nu ht ch s bo li.2.1.4.2 Synchronous Events

Khc vi Asynchronous events, synchronous events c gi trc tip n mt process c th. Do , process ny c gi trc tip v s khng c nhn event tip theo cho n khi x l xong event ny.2.1.4.3 Polling

Mt yu cu poll c thc hin bng hm process_poll(). Khi thc hin yu cu ny, process s c u tin thc hin nhanh nht c th.

Polling l cch process chy t mt ngt. Hm process_poll()ch c s dng trong thn ca mt protothread, n an ton dng preemptive mode.

2.1.5 The Process Scheduler

Mc tiu ca process scheduler l gi process ln chy khi c php. Qu trnh ny c thc hin bng cch gi hm thc hin Process Thread. Process scheduler c gi l p ng vi mt s kin c gi ti n, hoc mt yu cu poll.Trong qu trnh gi, mt con tr cha xc nh s c duyt. Con tr c cung cp bi lnh gi c th ly gi tr NULL ng vi vic khng c d liu c duyt. Khi dng poll, mc nh khng c d liu c duyt.2.1.5.1 Starting Processes

Hmprocess_start(). Mc tiu ca hm l thit lp cu trc iu khin process, thm process vo danh sch thc thi ca kernel, v gi code ci t process ln. Khi hmprocess_start()c gi, process s bt u.u tin, hm s kim tra xem process c bt u cha, nu chy ri th hon thnh. Nu process cha c bt u, process s c t vo danh sch khi ng, trng thi ca process c thit lp PROCESS_STATE_RUNNINGv protothread c ci t bng PT_INIT().Cui cng, process gi mt synchronous event,PROCESS_EVENT_INIT. ng thi con tr s i ti process cn khi ng km theo d liu. Tuy nhin, thng thng d liu c gi km theo l NULL. Process cn khi ng s c kernel gi ln nhn synchronous event.2.1.5.2 Exiting and Killing Processes

Thot ra khi process c hai cch: T thot ra: khi chng trnh tm n dng PROCESS_END(). Thot ra bi 1 chng trnh khc PROCESS_EXIT()Khi mt chng trnh c thot, kernel s gi thng bo thot ca process cn thot cho tt c cc process khc ang s dng n

2.1.5.3 Autostarting Processes

Contiki cung cp mt c ch gip t ng bt u mt process ch nh trc khi h thng khi ng. 2.2 Timer2.2.1 The Contiki Timer ModulesContiki c mt m-un clock v nhiu m-un timer: timer, stimer, ctimer, etimer, and rtimer. Cc m-un khc nhau thc hin cc cng vic khc nhau.M-un clock cung cp cc hm iu khin thi gian ca h thng cng nh chn CPU trong mt khong thi gian ngn.Timer v stimer cung cp cu trc n gin nht v thi gian v c s dng kim tra mt khong thi gian qua. Cc ng dng cn timer nu n kt thc. S khc bit gia chng l n v thi gian: timer s dng clock h thng, stimer s dng giy. Khng ging vi cc timer khc, timer v stimer c th s dng an ton t ngt.Th vin etimer cung cp event timers v s dng ln lch chy cho cc process contiki sau mt khong thi gian. 2.2.2 The Clock Module

Clock module cung cp hm iu khin thi gian ca h thng. The API for the Contiki clock module gm nhng hm sau:

Hmclock_time() tr v thi gian hin ti trong clock. S clock mi giy ph thuc vo nn tng phn cng v xc nh bi hng s CLOCK_SECOND.Clock module c 2 hm chn CPU:clock_delay(), v clock_wait()Hmclock_init()c gi trong sut qu trnh h thng ci clock moduleThe Clock Module API:

clock_time_t clock_time(); // Get the system time. unsigned long clock_seconds(); // Get the system time in seconds. void clock_delay(unsigned int delay); // Delay the CPU. void clock_wait(int delay); // Delay the CPU for a number of clock ticks. void clock_init(void); // Initialize the clock module. CLOCK_SECOND; // The number of ticks per second. 2.2.3 The Timer Library

Th vin Contiki timer cung cp cc hm tinh chnh, khi ng li timer, v kim tra timer kt thc cha. Mt ng dng phi c kim tra timers kt thc cha bng tay, n khng c lm t ng. Cc th vin timer s dng clock_time() c c thi gian hin ti ca h thng.

Mt timer c khi bo bng struc timer v truy cp thng qua a ch con tr.

The Timer Library API:void timer_set(struct timer *t, clock_time_t interval); // Khi to timervoid timer_reset(struct timer *t); // khi ng li timer expiredvoid timer_restart(struct timer *t); // khoi ng li timer hin ti int timer_expired(struct timer *t); // kim tra timer expired clock_time_t timer_remaining(struct timer *t); // tr v gi tr cn li tnh n khi timer expired.The Etimer Library API:void etimer_set(struct etimer *t, clock_time_t interval); // Start the timer.void etimer_reset(struct etimer *t); // Restart the timer from the previous expiration time.void etimer_restart(struct etimer *t); // Restart the timer from current time. void etimer_stop(struct etimer *t); // Stop the timer. int etimer_expired(struct etimer *t); // Check if the timer has expired. int etimer_pending(); // Check if there are any non-expired event timers.clock_time_t etimer_next_expiration_time(); // Get the next event timer expiration time.void etimer_request_poll(); // Inform the etimer library that the system clock has 2.3 Input and outputCc loi thit b I/O c sn ngi lp trnh ph thuc nhiu vo nn tng phn cng s dng. Contiki cung cp 2 giao din c bn: serial I/O v LEDs. Serial output c h tr bi API ca C print, trong khi serial input ph thuc vo c ch ring ca Contiki. LEDs API, cung cp cc lnh s dng thuc tnh ca LEDs.2.3.1 Serial Communication

The serial I/O APIint printf(const char *format, ...); // in ra mt chui *format. int putchar(int c); // in mt k t n.PrintingS dng printf() ging nh trong C

Receiving

Contiki c giao tip c bn c xc nh trong core/dev/serial-line.hHm serial_line_init() phi c gi ln trc khi gi serial_line_process serial_line_processc thm vo process_list.

Hnh 2.4. Qu trnh nhn d liu qua uart

Mt ngt s c pht ra khi c mt k t c c t serial port. Qu trnh iu khin ngt gi serial_line_input_byte, n chim b nh m cho n khi dng k t mi c nhn. Sau khi nhn c xu k t hon chnh, chng ta s pht mt event cho tt c cc process.

Serial_line_input_byte() l hm callback, n nhn bytes u vo. Hm ny ghi vo b nh m cho n khi mt dng ngt c nhn, sau n gi hm serial_line_process. Kch thc ca b nh m cho serial lines c th iu chnh thng qua tham s SERIAL_LINE_CONF_BUFSIZE, v mc nh l 80bytes. Nu dng ln hn c nhn, (ch c SERIAL_LINE_CONF_BUFSIZE-1) bytes v 1 nil byte s c cho qua vo serial_line_process. serial_line_processtruyn m serial_line_event_message()ti tt c cc process trong h thng.

Serial line driver c 2 hm iu khin u vo: IGNORE_CHAR(c) c chc nng nh mt b lc n gin, n tr v gi tr ng nu l k t c. Cn khng s chuyn m ascii ca k t mi n b nh m v gi seral_line_process ln. 2.1.2 LEDs

LEDs n gin nhng l cng c quan trng giao tip vi ngi dng hoc debug chng trnh. LEDs API c th hin di yThe LEDs APIvoid leds_init(void); // Khi to s dng LEDs. unsigned char leds_get(void); // Ly trng thi leds. void leds_on(unsigned char ledv); // bt LEDs. void leds_off(unsigned char ledv); // tt LEDs. void leds_toggle(unsigned char ledv); // i trng thi LEDs. void leds_invert(unsigned char ledv); // i trng thi LEDs. Cc led c ly bng hm leds_get(). Hm ny tr v LED vector kiu unsigned char, trong 1 bit i din cho mu ca LED.LED identifiers for use in LED vectors. #define LEDS_GREEN 1 #define LEDS_YELLOW 2 #define LEDS_RED 4 #define LEDS_ALL 7Phn 3. Gii thch code mu v bi tp3.1 Code mu 3.1.1 Blink example1. #include

2. #include "contiki.h" // thu vien contiki3. #include "dev/leds.h" // thu vien leds4. /* ----------------Khoi tao process control block---------------- */

5. PROCESS(red_process, "Red light process");

6. PROCESS(blink_process, "Blink");

7. AUTOSTART_PROCESSES(&blink_process);

8. /*----------------------------------------------------------------*/

9. /* This process is started from the other process and blinks an LED fast.

10. */

11. static struct etimer etr; 12. PROCESS_THREAD(red_process, ev, data)

13. {

14. PROCESS_POLLHANDLER();

15. PROCESS_EXITHANDLER();

16. PROCESS_BEGIN();

17. while(1) {

18. leds_toggle(LEDS_RED);

19. etimer_set(&etr, CLOCK_SECOND/8);

20. PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&etr));

21. }

22. PROCESS_END();

23. }

24. /*----------------------------------------------------------------*/

25. /* this process starts another process and then periodically blinks an LED */

26. static struct etimer et;

27. PROCESS_THREAD(blink_process, ev, data)

28. {

29. PROCESS_BEGIN();

30. etimer_set(&et, CLOCK_SECOND);

31. PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));

32. process_start(&red_process, NULL);

33. while(1) {

34. /* unnecessary, messy but wanted sth else than what the red process

a. is doing so instead of just toggling, turn on when even seconds and

b. turn off on uneven seconds.

35. */

36. if(clock_seconds() & 1) { 37. leds_on(LEDS_GREEN);

38. } else {

39. leds_off(LEDS_GREEN);

40. }

41. etimer_set(&et, CLOCK_SECOND);

42. PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));

43. }

44. PROCESS_END();

45. }

46. /*---------------------------------------------------------------------*/

M u mt chng trnh, 3 dng u tin, chng ta khai bo cc th vin s dng. dng 5, 6, ta khi to cc process control block. Mi process c bin tn process v phn m t. trong v d ny, tn l red_process v m t l Red light process. Sau khi khi to, bin tn process c th dc s dng cho cc hm khc.

dng 7, ta bt gp cu trc AUTOSTART_PROCESSES(), n s ln danh sch cc chng trnh c php t ng khi chy khi h thng c bt hoc ngay sau khi code c np, trong v d ny l blink_process.Dng 12 khai bo process thread, n bao gm bin tn( c khi to dng 5), ngoi ra tn cu event l bin ev, v data.

Dng 16 v 22 l thnh phn c bn ca process thread, cp hm PROCESS_BEGIN() v PROCESS_END(). gia cp hm ny l chng trnh chnh.Dng 17 bt u mt vng lp v hn, tuy nhin trn thc t, Contiki khng chy vng lp v hn, m n s dng i event. Trong vng lp chng ta gp cc hm o trng thi led, leds_toggle() v set etimer, etimer_set(). Khi gp lnh lt trng thi, led ang tt s sng. N sng n bao gi? Vn ny c gii quyt bng vic kim sot thng qua qu trnh chn CPU bng bin etimer c khai bo dng 11. etr c set vi gi tr CLOCK_SECOND/8, sau l lnh i c iu kin PROCESS_WAIT_EVENT_UNTIL(). Ch cn ht thi gian c set, etimer_expired(&etr)=1, iu kin ng, chng trnh s quay v u vng lp, v led ang sng s tt. Qu trnh ny lp li lin tc lm led nhy vi chu k 1/8s.T dng 26 n 45 tng t l chng trnh nhy led xanh.

Trong dng 30 n 32, chng ta s i 1s ri gi chng trnh nhy led ln.

dng 36 n 40 l 1 c ch nhy khc, y ta kim tra clock_seconds(), s giy hm m c l l s sng led xanh, cn chn s tt.

Thc hin chng trnh: Ban u chng trnh s t chy vo blink_process. n dng 32 th led c gi v n nhy vi chu k 1/8s. Led xanh c nhy vi chu k 1s.3.1.2 Button example1. #include

2. #include "contiki.h"

3. #include "dev/leds.h"

4. #include "dev/button.h"

5. /* --------------------------------------------------------------- */

6. PROCESS(button_process, "Button process");

7. PROCESS(blink_process, "Blink process");

8. AUTOSTART_PROCESSES(&blink_process, &button_process);

9. /*----------------------------------------------------------------*/

10. static struct etimer etr;

11. PROCESS_THREAD(button_process, ev, data)

12. {

13. PROCESS_POLLHANDLER();

14. PROCESS_EXITHANDLER();

15. PROCESS_BEGIN();

16. static uint8_t btnpresses = 0;

17. while(1) {

18. PROCESS_WAIT_EVENT_UNTIL(ev == button_event);

19. leds_toggle(LEDS_RED);

20. btnpresses++;

21. if(btnpresses == 5) {

22. process_exit(&blink_process);

23. }

24. }

25. PROCESS_END();

26. }

27. /*-----------------------------------------------------------------*/

28. /* this process periodically blinks an LED */

29. static struct etimer et;

30. PROCESS_THREAD(blink_process, ev, data)

31. {

32. PROCESS_BEGIN();

33. while(1) {

34. leds_toggle(LEDS_GREEN);

35. etimer_set(&et, CLOCK_SECOND/8);

36. PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));

37. }

38. PROCESS_END();

39. }

40. /*------------------------------------------------------------------*/

Chng trnh minh ho cho vic iu khin phm bm, khi bm th led sng tt theo cc ln bm, n ln th 5 th thot blink_process nu phm c bm li. Process blink ny c phn tch v d pha trn, y ta ch xem xt n process button.Dng 18, cho ta thy mi ln nt c bm, iu kin ng, chng trnh chuyn n dng 19, led s c lt trng thi.

Dng 16, bin btnpresses c khai bo vi gi tr mc nh bng 0, y l s bin lu tr s ln bm phm, bi dng 20 ta thy mi ln bm phm btnpresses s c tng ln 1 n v.Trong vng lp, chng trnh i n khi phm c bm mi bt u thc hin. u tin led s c lt sng thi(ang tt s sng ln). Nu bm n ln th 5 th s thot chng trnh nhy led xanh.

3.2 Bi tp

3.2.1 S dng cc cu trc tun t, lp, r nhnhCu trc tun t c th hin trong cc v d phn trn, thm ch trong button example ta cng bt gp cu trc lp. Tuy nhin hiu r hn v lp ta thc hin bi ton sau:Ban u 2 led u tt, khi nhn nt th 2 n nhy vi chu k khc nhau, bm thm 5 ln na n tt, bm tip thm 5 ln na n xanh tt.

1. /*Code minh hoa re nhanh thong qua nut bam*/

2. #include

3. #include "contiki.h"

4. #include "dev/leds.h"

5. #include "dev/button.h"

6. //khai bao ca thu vien

7. PROCESS(button_process, "Button process");

8. PROCESS(red_process, "Red light process");

9. PROCESS(green_process, "Green process");

10. AUTOSTART_PROCESSES(&button_process);

11. // khoi tao cac process va chon process bat dau

12. static struct etimer etr;

13. PROCESS_THREAD(button_process, ev, data)

14. {

15. PROCESS_POLLHANDLER();

16. PROCESS_EXITHANDLER();

17. PROCESS_BEGIN();

18. static uint8_t btnpresses = 0; // khoi tao bien dem so lan bam

19. while(1) {

20. PROCESS_WAIT_EVENT_UNTIL(ev == button_event);

21. btnpresses++; // moi khi nut dc bam btnpresses tang them 1

22. // neu bam nut lan thu nht thi se khoi dong 2 chuong trinh nhay led

23. if(btnpresses == 1) {

24. process_start(&red_process, NULL);

25. process_start(&green_process, NULL);

26. }

27. // nut dc bam them 5 lan thi thoat ra va tat led do

28. if(btnpresses == 6) {

29. process_exit(&red_process);

30. leds_off(LEDS_RED);

31. }

//nut duoc bam them 5 lan nua thi thoat ra va tat led xanh

32. if(btnpresses == 11) {

33. process_exit(&green_process);

34. leds_off(LEDS_GREEN);

35. }

36. }

37. PROCESS_END();

38. }

39. /********Process nhay led do =*********/

40. static struct etimer etr;

41. PROCESS_THREAD(red_process, ev, data) /

42. {

43. PROCESS_BEGIN();

44. while(1) {

45. leds_toggle(LEDS_RED);

46. etimer_set(&etr, CLOCK_SECOND/2);

47. PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&etr));

48. }

49. PROCESS_END();

50. }

51. /*-----------Process nhay led xanh-----------*/

52. static struct etimer et;

53. PROCESS_THREAD(green_process, ev, data)

54. {

55. PROCESS_BEGIN();

56. while(1) {

57. leds_toggle(LEDS_GREEN);

58. etimer_set(&et, CLOCK_SECOND/4);

59. PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));

60. }

61. PROCESS_END();

62. }

minh ho cho cu trc lp, ta xt bi ton sau: Khi code c np vo, led sng trong 3s ri n led xanh sng trong 1s. Qu trnh ny c lp i lp li.1. /*

2. *Chuong trinh chay led do sang trong 3s sau do led xanh sang trong 1 s

3. *Qua trinh nay duoc lap lai tuan hoan

4. */

5. #include

6. #include "contiki.h"

7. #include "dev/leds.h"

8. /* ------------------------------------------------------- */

9. PROCESS(red_process, "Red light process");

10. PROCESS(green_process, "Green light process");

11. AUTOSTART_PROCESSES(&green_process);

12. /*------------------------------------------------*/

13. /* Chuong trinh chay vao red_process truoc*/

14. static struct etimer etr; // khai bao etr la bien etimer

15. PROCESS_THREAD(red_process, ev, data) {

16. PROCESS_BEGIN();

17. leds_on(LEDS_RED); // sang led do

18. etimer_set(&etr, CLOCK_SECOND*3); // cho sang trong 3s

19. PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&etr));

20. leds_off(LEDS_RED); // tat led do

21. process_start(&green_process, NULL); // chay green_process

22. PROCESS_END();

23. }

24. /*-----------------------Chuong trinh nhay led xanh---------------*/

25. static struct etimer et;

26. PROCESS_THREAD(green_process, ev, data)

27. {

28. PROCESS_BEGIN();

29. leds_on(LEDS_GREEN); // sang led xanh

30. etimer_set(&et, CLOCK_SECOND);// cho sang trong 1s

31. PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));

32. leds_off(LEDS_GREEN); // tat led xanh

33. process_start(&red_process, NULL); // chay ctrinh led do

34. PROCESS_END();

35. }3.2.2 iu khin leds bng tp lnh thng qua uartS dng HH contiki, vit code cho kit launchpad thc hin nhim v. Kit launchpad kt ni vi PC thng qua cng UART nhn lnh iu khin t PC qua terminal. Tp lnh c quy nh:

redx (trong x l 1 s nguyn bt k) : led s nhy vi chu k x(ms)

offred: led tt

greenon: led xanh sng

grennoff: led xanh tt

Khi truyn xong lnh th kit bo v: truyn xong lnh:Phn tch bi ton: Chng ta bit khi mt chui k t c truyn thnh cng vo kit, gi tr s c lu li trong mt xu k t. bi ton cn ly ra gi tr x khi nhp lnh redx nn chng ta cn mt on chng trnh thc hin vic tch gi tr nguyn ca x ra t xu redx. tng thc hin l ta s to ra mt mang lu tr cc ch s trong redx, sau chuyn mng v s nguyn bng hm atoi().Vn cn li l nhy led v truyn thng tin phn hi t kit u c phn tch cc v d trc . Ta cng thc hin ho tng.Code:

/*

Giao tiep uart: pc vs kip msp430

redx: nhay led do voi chu ki x

greenon: sang led xanh

greenoff: tat led xanh

offred: tat led do

Kit sau khi nhan duoc tin hieu tra ve: Da truyen xong lenh:

*/

#include "contiki.h"

#include // thu vien dung cho serial output: printf()

#include // thu vien su dung ham cua xau ki tu

#include "dev/leds.h" // thu vien su dung led

#include "dev/serial-line.h" // thu vien quan ly dong lenh nhan: serial input

#include // thu vien chua ham tinh toan gia tri cho x

#include // thu vien chua ham chuyen doi xau

#include

/*--------------Khoi tao process control block---------------------*/

PROCESS(serial_read_process, "Serial Reader"); // process doc lenh input

PROCESS(red_process, "Red blink");// // process nhay led do

AUTOSTART_PROCESSES(&serial_read_process); // thiet lap process khoi dong

/*--------------------------------------------------------------------------*/

/* process doi den khi nhan duoc du lieu input va tra ve ket qua thong bao

* neu go cac tap lenh quy uoc, chuong trinh se chay theo yeu cau

*/

int a; // khai bao bien a, su dung de luu gtri x trong lenh redx

static struct etimer etr; // khai bao bien etr kieu etimer kiem soat thoi gian chay

/*----khoi tao process thread chua code chinh------*/

PROCESS_THREAD(serial_read_process, ev, data)

{

PROCESS_BEGIN(); //cau lenh bat dau process

printf("Xin moi ban nhap lenh\n"); // dong lenh duoc in ra khi khoi dong

while (1) {

char* buf; // khai bao bo dem, luu tru du lieu input

char b[10]; // mang b la mang chua chu so tach tu input

int i, j; // bien chay i,j de quet phan tu

PROCESS_WAIT_EVENT_UNTIL(ev == serial_line_event_message); // chuong trinh doi cho den khi co du lieu dc truyen vao

buf = data; // luu tru data vao mang buf

if(!strncmp(buf, "red", 3)) {

/*neu lenh go vao co dang redx se thuc hien chuyen doi*/

char cpy [100]; // khai bao mang cpy

strcpy(cpy, data); // copy du lieu tu data vao mang cpy

i=0;

j=0; // khoi tao bien dem

for (i = 0; i < strlen(cpy); i++) { //thuc hien quet ki tu

if (isdigit(cpy[i])) { // neu gap phai ki tu chu so

b[j] = cpy[i]; // copy sang mang b

j++;

}

b[j]=NULL;// xoa mang b de chuan bi cho lenh tiep theo

}

a= atoi(b); // chuyen mang b tu ki tu sang so nguyen

process_start(&red_process,NULL); // chay chuong trinh nhay led do

} else if (!strncmp(buf, "greenon", 7)) {

leds_on(LEDS_GREEN);// bat led xanh

} else if (!strncmp(buf, "greenoff", 8)) {

leds_off(LEDS_GREEN); // tat led xanh

} else if (!strncmp(buf, "offred", 6)) {

process_exit(&red_process); // thoai khoi process nhay led

leds_off(LEDS_RED); // tat led do

}

printf("\n Da truyen xong lenh: %s\n", buf); // Truyen ve pc thong bao

}

PROCESS_END(); // ket thuc hoat dong cua process

}

/*--------------------------------------*/

/* led do nhay voi chu ki phu thuoc vao x trong redx

*/

static struct etimer etr;

PROCESS_THREAD(red_process, ev, data)

{

PROCESS_POLLHANDLER();

PROCESS_EXITHANDLER();

PROCESS_BEGIN();

while(1) {

leds_toggle(LEDS_RED); // doi trang thai led do

etimer_set(&etr, (CLOCK_SECOND*a)/1000); // thiet lap chu ki nhay= ams

PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&etr)); // doi den khi etr expired thi lap

}

PROCESS_END();

}

Sau khi np code vo kit, chng ta s dng lnh make login ng nhp vo kit. Tuy nhin lnh ny gp li trn ubuntu. Do , ta s kim tra kt qu bng phn mm hercules trn mi trng windown. Hng dn s dng phn mm ny c th tham kho a ch: http://smart-techvn.com/6724-hoc-msp430-voi-kit-msp430-launchpad-bai-5-uart.htmlKt qu thu c trn mn hnh hin th Hnh 3.1 Kt qu trn giao din PAGE 3