版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第二章 TinyOS入門 1. 目錄結(jié)構(gòu) Cygwin 的目錄結(jié)構(gòu) 。 Cygwin 提供了一個在Windows下的shell 環(huán)境和開發(fā)TinyOS 時用到的大多數(shù)UNIX 工具。 TinyOS 的目錄結(jié)構(gòu) TinyOS 是安裝在opt路徑里面, TinyOS 主要包括apps、supports 和tos 三個文件夾。12 2.常用命令與快捷鍵 2.1基本命令342.2操作TinyOS 應(yīng)用程序的基本命令56 3.快捷鍵784.入門操作 介紹TinyOS系統(tǒng)的一些基本概念:組件(components),模塊(modules),配件 (configurations)和接口( interface
2、s)。 如何編譯和安裝一個TinyOS程序在一個mote(塵埃)節(jié)點(diǎn)上。 以Blink為例介紹一個簡單的應(yīng)用程序是如何組建起來的。 運(yùn)行環(huán)境:TinyOS 2.1 + Cygwin (Windows XP) Cygwin在Windows下提供一個類似Linux的環(huán)境9一、編譯和安裝 作為一開始的學(xué)習(xí),先來編譯一個非常簡單的程序 Blink。若沒有硬件節(jié)點(diǎn),可以用TinyOS的TOSSIM仿真平臺進(jìn)行編譯運(yùn)行。 編譯TinyOS程序使用make命令,TinyOS系統(tǒng)有一個強(qiáng)大的擴(kuò)展性很強(qiáng)的make 系統(tǒng),位于 tinyos-2.x/support/make目錄中。 先運(yùn)行如下命令檢查環(huán)境是否正確
3、配置。 $ tos-check-env如有錯誤警告,根據(jù)提示檢查環(huán)境搭建的步驟。10一、編譯和安裝 接下來要檢查TinyOS系統(tǒng)是否正常啟用。 $ printenv MAKERULES Make命令編譯TinyOS應(yīng)用程序的方法是:在應(yīng)用程序的文件夾下運(yùn)行: make platform 。如 make zigbex。 TOSSIM仿真編譯則為: make platform sim 。如 make micaz sim。111.1 確認(rèn) nesc語言的ncc編譯器的版本 nesC語言是TinyOS使用的語言,而ncc是對gcc的擴(kuò)展,專門用來編譯nesC應(yīng)用程序。 可輸入 which ncc來查看
4、系統(tǒng)調(diào)用的是哪個ncc編譯器,會跳出該ncc的文件位置,再輸入該文件目錄的 -version選項(xiàng)命令,得到其版本號。 nesC 是對C 的擴(kuò)展和修改,ncc 是nesC 的編譯器,它是gcc 的修改和補(bǔ)充。ncc 先把nesC 預(yù)編譯成C 文件,再通過交叉編譯器把C 文件編譯成可執(zhí)行文件。13二、組件和接口 TinyOS程序代碼是用nesC語言編寫的,這是C語言擴(kuò)展了一些組件和并發(fā)特征后的語言。 一個nesC語言編寫的程序由一個或多個組件構(gòu)成或連接而成。 一個組件(component)由兩部分組成:一個是規(guī)范說明,包含要用接口的名字;另一部分是它們的實(shí)現(xiàn)。 一個組件可以提供接口(interfa
5、ce),也可以使用接口。提供的接口描述了該組件提供給上一層調(diào)用者的功能,而使用的接口則表示了該組件本身工作時需要的功能。14二、組件和接口 接口是雙向的:提供或使用。 接口指定了一組命令(command),其職能由接口的提供者實(shí)現(xiàn)。還指定了一組事件( event),其職能由該接口的使用者實(shí)現(xiàn)。 也就是說,提供了接口的組件必須實(shí)現(xiàn)該接口的命令函數(shù);而使用了某接口的組件必須實(shí)現(xiàn)該接口的事件函數(shù)。 如果一個組件調(diào)用了( call)的一個接口命令 ,必須實(shí)現(xiàn)該接口的事件。 一個組件可以使用( use)或提供( provide)多個接口或者同一接口的多個實(shí)例。15組件模型Component M1 pro
6、vides interface P1; interface P2; uses interface U1; interface U2; implementation /實(shí)現(xiàn)部分 組件的實(shí)現(xiàn)(implementation)作用域,對于模塊來說該部分是程序功能的代碼實(shí)現(xiàn)部分,它實(shí)現(xiàn)了所提供的接口中的命令和使用的接口中的事件;對于配件來說該部分用于將接口的使用組件和提供組件之間連接起來組成一個程序。組件(模塊或配件)的規(guī)范(specification)作用域。組件根據(jù)功能需要可以聲明所使用和提供的接口,也可以不提供(或)使用任何接口。component代表 module或configuration組件
7、標(biāo)識符(identifier)P1:接口標(biāo)識符(名字),模塊M1必須實(shí)現(xiàn)它所提供接口的命令(command)。U1:接口標(biāo)識符,模塊M1必須實(shí)現(xiàn)它所使用的接口中事件(event)。16 接口的特點(diǎn):接口的特點(diǎn): Provides未必一定有組件使用,但未必一定有組件使用,但uses一定要有人提供,否則編一定要有人提供,否則編譯會提示出錯。在動態(tài)組件配置語言中譯會提示出錯。在動態(tài)組件配置語言中uses也可以動態(tài)配置。也可以動態(tài)配置。 接口可以連接多個同樣的接口,叫做多扇入接口可以連接多個同樣的接口,叫做多扇入/扇出。扇出。 一個一個module可以同時提供一組相同的接口,又稱參數(shù)化接口,可以同時提
8、供一組相同的接口,又稱參數(shù)化接口,表明該表明該Module可提供多份同類資源,能夠同時給多個組件分享??商峁┒喾萃愘Y源,能夠同時給多個組件分享。interface Send command error_t send(message_t* msg, uint8_t len);command error_t cancel(message_t* msg);event void sendDone(message_t* msg, error_t error);command uint8_t maxPayloadLength();command void* getPayload(message_t* m
9、sg);command:命令關(guān)鍵字interface:接口關(guān)鍵字event:事件關(guān)鍵字17二、組件和接口 概述 TinyOS操作系統(tǒng)、庫和程序服務(wù)程序是用nesC寫的。 nesC是一種用于開發(fā)組件式結(jié)構(gòu)程序的語言。 nesC是一種C語法風(fēng)格的語言,但是支持TinyOS的并發(fā)模型,以及組織、命名和連接組件成為嵌入式網(wǎng)絡(luò)系統(tǒng)的機(jī)制。 nesC應(yīng)用程序由有良好定義的雙向接口的組件構(gòu)建; nesC把組件化/模塊化的思想和TinyOS基于事件驅(qū)動的執(zhí)行模型結(jié)合起來。 規(guī)范 nesC應(yīng)用程序由一個或多個組件連接而成。 一個組件可以提供或使用接口: 組件中command接口由組件本身實(shí)現(xiàn); 組件中event
10、接口由調(diào)用者實(shí)現(xiàn); 接口是雙向的,調(diào)用command接口必須實(shí)現(xiàn)其event接口。182.1 配件和模塊 組件有兩種:配件和模塊。 模塊(module):提供一個或多個接口的實(shí)現(xiàn)。 配件(configuration):把其他的組件裝配起來,連接組件使用的接口到其提供者。 每個nesC應(yīng)用程序都必須有且只有一個頂層配件(top-level configuration)連接內(nèi)部組件。 之所以區(qū)別設(shè)計(jì)模塊與配件,是為了讓系統(tǒng)設(shè)計(jì)者在構(gòu)建應(yīng)用程序的時候可以脫離現(xiàn)有的實(shí)現(xiàn)。例如:設(shè)計(jì)者可以提供配件,只是簡單地把一個或多個模塊連接起來,而不涉及其中具體的工作。同樣地,另一個開發(fā)者負(fù)責(zé)提供一組模塊庫,這些模
11、塊可以普遍使用到眾多應(yīng)用中。19三、例子程序Blink Blink是一個基本的應(yīng)用程序,它通過開啟定時器來實(shí)現(xiàn)周期性地切換LED燈。 其文件位置為/opt/tinyos-2.x/apps/Blink。 編譯下載到節(jié)點(diǎn)上,可以看到,該應(yīng)用程序在節(jié)點(diǎn)的3個LED燈上顯示了一個計(jì)數(shù)器。它只是簡單的以4Hz的頻率開關(guān)LED0,以2Hz開關(guān)LED1,以1HZ開關(guān)LED2。其效果就是: 每兩秒3個LED顯示了二進(jìn)制計(jì)數(shù)從0到7。 Blink程序由兩個文件組成:模塊文件(BlinkC.nc)和 配件文件(BlinkAppC.nc)。記住:所有程序都需要一個頂層配件,通常是以應(yīng)用程序的名字命名。BlinkAp
12、pC就是Blink程序的配件,也是nesC編譯器產(chǎn)生可執(zhí)行文件的源頭。而BlinkC則提供Blink程序的邏輯實(shí)現(xiàn)。BlinkAppC是用來連接BlinkC模塊和Blink所需的其他功能組件。注意: 頂層配件不提供和使用任何接口。當(dāng)配件不是頂層配件是,在關(guān)鍵字configuration 后面的花括號之間可以包括如下語句:關(guān)鍵字provides 指出配件要提供給其他組件調(diào)用的接口;關(guān)鍵字uses指出配件要使用的其他組件。具體的配件實(shí)現(xiàn)是在關(guān)鍵字implementation 后的花括號中完成的,關(guān)鍵字components 指出配件所用到的組件。213.1 源文件命名的一些注意文件名文件類型Foo.
13、nc接口文件Foo.h頭文件FooC.nc公共組件(配件或模塊)FooP.nc私有組件(配件或模塊) 雖然可以給應(yīng)用程序中的模塊和配件取任意的名稱,但為了簡便,建議在編寫代碼時使用如上表所示的統(tǒng)一的命名格式。 223.2 BlinkAppC.ncconfiguration BlinkAppC / 這里一般由uses 和 provides 從句來說明使用到的和提供的接口,除了頂層配件,模塊和配件多可以使用和提供接口 Implementation /實(shí)現(xiàn)部分 components MainC, BlinkC, LedsC; /BlinkC是編寫的模塊 components new TimerMil
14、liC() as Timer0; /as命名別名方便識別 components new TimerMilliC() as Timer1; /同一組件不同實(shí)例 components new TimerMilliC() as Timer2; /components指定了這個配件用到的組件components BlinkC - MainC.Boot;/ BlinkC.Boot - MainC.Boot BlinkC.Timer0 - Timer0;/BlinkC.Timer0 - Timer0.Timer0 BlinkC.Timer1 - Timer1;/ -是連接的意思 BlinkC.Timer2
15、 - Timer2;/ -是一種包含兩個內(nèi)部規(guī)范元素的連接 BlinkC.Leds - LedsC;/BlinkC.Leds - LedsC.Leds /也就是把負(fù)責(zé)實(shí)現(xiàn)應(yīng)用部分的模塊BlinkC與系統(tǒng)的組件庫連接起來 /記住, BlinkAppC 和 BlinkC 組件是不一樣的。更確切的說, BlinkAppC 是由 Blinkc 組件連同 mainc ,ledsc 和3個 timer定時器一起組成的。233.3 BlinkC.ncmodule BlinkC () uses interface Timer as Timer0; /定義使用到的接口 /Timer1、Timer2的定義同上 u
16、ses interface Leds; uses interface Boot; /BlinkC 可以調(diào)用這些它使用的接口的任何命令,但必須實(shí)現(xiàn)這些接口的所有事件 event implementation event void Boot.booted() call Timer0.startPeriodic( 250 ); /250ms周期性觸發(fā) call Timer1.startPeriodic( 500 ); call Timer2.startPeriodic( 1000 ); event void Timer0.fired() dbg(“BlinkC”, “Timer 0 fired %s
17、.n”, sim_time_string(); call Leds.led0Toggle();/led0燈切換滅-亮狀態(tài) /Timer1、Timer2的fired()事件函數(shù)同上243.4 接口連接 nesC使用 箭頭 來綁定一個接口到另一個接口,但一定要是同一類接口。 例如 A - B 意為 A連接到B。 A 是接口的使用者( user) ,而 B是接口的提供者( provider)。完整的 表達(dá)式應(yīng)該為: A. a - B. b 這意味著, 組件A的接口a 連接到 組件B的接口 b。 當(dāng)一個組件使用或者提供同一個接口的多個不同實(shí)例時,設(shè)置別名就非常有必要了。如 BlinkC 中的 time
18、r0, timer1, timer2。253.4 接口連接 當(dāng)一個組件只含有一個接口的時候,就可以省略接口的名字了。如 BlinAppC中Blinkc.leds ledsC 。 就省略了 LedsC組件中包含的接口leds。其等同于:Blinkc.leds ledsC.leds 。 由于 BlinkC組件中僅僅含有一個leds的接口實(shí)例,那也同樣等同于:Blinkc ledsC.leds 。 同樣地,TimerMilliC 組件只提供了單一的 timer 接口實(shí)例,也不必包含在下面的連接里:BlinkC.Timer0 - Timer0 連接的箭頭是 可以對稱倒反的。如 Timer0 Timer
19、0為了方便閱讀,大多數(shù)連接的箭頭還是 從左到右的。263.5 MainC.nc#include hardware.hconfiguration MainC provides interface Boot;/提供接口Boot uses interface Init as SoftwareInit;implementation components PlatformC, RealMainP, TinySchedulerC; RealMainP.Scheduler - TinySchedulerC; RealMainP.PlatformInit - PlatformC; SoftwareInit =
20、 RealMainP.SoftwareInit; Boot = RealMainP; /RealMainP使用SoftwareInit接口,提供Boot接口Blink這里的“=”是一種包含一個外部規(guī)范元素的連接。這種連接可以有效地使兩個規(guī)范元素等價,如S1=S2,但是這種等價必須滿足下面的條件之一:S1內(nèi)部,S2外部(或者相反),且S1和S2是同時被提供的或同時被使用的。S1和S2都是外部的,而且一個是被提供,一個是被使用。283.6 LedsC & TimerMilliCconfiguration LedsC provides interface Leds;implementation .generic configuration TimerMilliC() provides interface Timer;implementation Blink29四、圖形化文檔說明 精心設(shè)計(jì)的TinyOS 系統(tǒng)通常有很多層的配置,每一層都簡單地提取了抽象概念,以很少的可執(zhí)行代碼來實(shí)現(xiàn)復(fù)雜的配置。 要想到達(dá)底層的模塊,或者操縱各個層,使用文本編輯器是很費(fèi)力的。幸好,TinyOS 和nesC有一個名為 nesdoc的輔
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 意式咖啡課程設(shè)計(jì)
- 直面矛盾心理課程設(shè)計(jì)
- 班會主題早戀課程設(shè)計(jì)
- 穩(wěn)壓電源設(shè)計(jì)課程設(shè)計(jì)
- 瑜伽館線上直播課程設(shè)計(jì)
- 管殼式冷卻器的課程設(shè)計(jì)
- 種植扁豆生成課程設(shè)計(jì)
- 白瓷影像技術(shù)課程設(shè)計(jì)
- 查詢專輯歌手課程設(shè)計(jì)
- 紙漿畫課程設(shè)計(jì)
- 期末測試卷(一)2024-2025學(xué)年 人教版PEP英語五年級上冊(含答案含聽力原文無聽力音頻)
- 漢服娃衣創(chuàng)意設(shè)計(jì)與制作智慧樹知到期末考試答案章節(jié)答案2024年四川文化產(chǎn)業(yè)職業(yè)學(xué)院
- (高清版)通風(fēng)管道技術(shù)規(guī)程JGJ_T 141-2017
- 機(jī)制砂檢測報告
- 省教育廳檢查組接待方案
- 變壓器停、送電操作步驟與注意事項(xiàng)
- 氣動潛孔錘施工方案
- 風(fēng)電項(xiàng)目監(jiān)理大綱附錄風(fēng)電工程設(shè)備監(jiān)理項(xiàng)目表
- 云南省教育科學(xué)規(guī)劃課題開題報告 - 云南省教育科學(xué)研究院
- 二年級上,數(shù)學(xué),3個兩位數(shù)加減,80題,(豎式計(jì)算)
- 人民法院涉訴信訪案件終結(jié)辦法
評論
0/150
提交評論