無(wú)線傳感器網(wǎng)絡(luò)課件:Contiki操作系統(tǒng)_第1頁(yè)
無(wú)線傳感器網(wǎng)絡(luò)課件:Contiki操作系統(tǒng)_第2頁(yè)
無(wú)線傳感器網(wǎng)絡(luò)課件:Contiki操作系統(tǒng)_第3頁(yè)
無(wú)線傳感器網(wǎng)絡(luò)課件:Contiki操作系統(tǒng)_第4頁(yè)
無(wú)線傳感器網(wǎng)絡(luò)課件:Contiki操作系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Contiki操作系統(tǒng)2.1概述2.2特點(diǎn)2.3安裝2.4Contiki目錄結(jié)構(gòu)2.5Contiki操作系統(tǒng)運(yùn)行原理2.6Cooja仿真工具舉例

2.1概述

Contiki操作系統(tǒng)是一個(gè)開(kāi)源的、高度可移植的多任務(wù)操作系統(tǒng),適用于互聯(lián)網(wǎng)嵌入式系統(tǒng)和無(wú)線傳感器網(wǎng)絡(luò),完全采用C語(yǔ)言開(kāi)發(fā),可移植性好,對(duì)硬件要求極低,能夠運(yùn)行在各種類型的微處理器及電腦上。Contiki是開(kāi)源操作系統(tǒng),適用于BSD協(xié)議,即可以任意修改和發(fā)布,無(wú)需任何版權(quán)費(fèi)用,因此已經(jīng)應(yīng)用在許多項(xiàng)目中。Contiki操作系統(tǒng)還提供了可選的任務(wù)搶占機(jī)制,基于事件和消息傳遞的進(jìn)程間通信機(jī)制。Contiki操作系統(tǒng)內(nèi)部集成了兩種類型的無(wú)線傳感器網(wǎng)絡(luò)協(xié)議棧:uIP和Rime。

2.2特點(diǎn)

Contiki操作系統(tǒng)因具有以下特點(diǎn)而適合于無(wú)線傳感器網(wǎng)絡(luò)。1.事件驅(qū)動(dòng)(Event-driven)的多任務(wù)內(nèi)核Contiki操作系統(tǒng)基于事件驅(qū)動(dòng)模型,即多個(gè)任務(wù)共享同一個(gè)棧(stack),而uCOS、FreeRTOS、Linux等系統(tǒng)則是每個(gè)任務(wù)分別占用獨(dú)立棧。2.低功耗無(wú)線傳感器網(wǎng)絡(luò)協(xié)議棧Contiki操作系統(tǒng)提供完整的IP網(wǎng)絡(luò)和低功耗無(wú)線網(wǎng)絡(luò)協(xié)議棧,對(duì)于IP協(xié)議棧,支持IPv4和IPv6兩個(gè)版本,IPv6還包括6LoWPAN幀頭壓縮適配器,ROLLRPL無(wú)線網(wǎng)絡(luò)組網(wǎng)路由協(xié)議、CoRE/CoAP應(yīng)用層協(xié)議,還包括一些簡(jiǎn)化的Web工具,如Telnet、Http和Web服務(wù)等。3.集成無(wú)線傳感器網(wǎng)絡(luò)仿真工具Contiki操作系統(tǒng)提供了無(wú)線傳感器網(wǎng)絡(luò)仿真工具Cooja,可以在該仿真環(huán)境下研究無(wú)線傳感器網(wǎng)絡(luò)協(xié)議。仿真測(cè)試后,下載協(xié)議程序到節(jié)點(diǎn)上進(jìn)行實(shí)際測(cè)試,有利于發(fā)現(xiàn)問(wèn)題,減少調(diào)試工作量。4.集成Shell命令行調(diào)試工具無(wú)線傳感器網(wǎng)絡(luò)中節(jié)點(diǎn)數(shù)量多,節(jié)點(diǎn)的運(yùn)行維護(hù)是一個(gè)難題,Contiki操作系統(tǒng)提供多種交互方式?;谖谋镜拿钚薪涌谑穷愃朴赨nix命令行的Shell工具,用戶通過(guò)串口輸入命令可以查看和配置傳感器節(jié)點(diǎn)的信息,控制其運(yùn)行狀態(tài),是部署、維護(hù)中實(shí)用而有效的工具。5.基于Flash的小型文件系統(tǒng)CFSContiki操作系統(tǒng)實(shí)現(xiàn)了一個(gè)簡(jiǎn)單、小巧和易于使用的文件系統(tǒng),稱為CoffeeFileSystem(CFS),它是基于Flash的文件系統(tǒng),用于在資源受限的節(jié)點(diǎn)上存儲(chǔ)數(shù)據(jù)和程序。6.集成功耗分析工具Contiki操作系統(tǒng)提供了一種基于軟件的能量分析工具,能夠自動(dòng)記錄每個(gè)傳感器節(jié)點(diǎn)的工作狀態(tài)、時(shí)間,并計(jì)算出能量消耗,在不需要額外硬件或儀器的情況下完成對(duì)網(wǎng)絡(luò)級(jí)別的能耗分析。Contiki操作系統(tǒng)的能耗分析機(jī)制既可用于評(píng)價(jià)傳感器網(wǎng)絡(luò)協(xié)議,也可用于估算傳感器網(wǎng)絡(luò)的生命周期。7.開(kāi)源免費(fèi)Contiki操作系統(tǒng)采用BSD授權(quán)協(xié)議,用戶可以下載代碼用于科研和商業(yè)用途,并且可以任意修改代碼,無(wú)需任何專利以及版權(quán)費(fèi)用,是徹底的開(kāi)源軟件。盡管是開(kāi)源軟件,但是Contiki操作系統(tǒng)的開(kāi)發(fā)十分活躍,一直在持續(xù)不斷的更新和改進(jìn)之中。

2.3安裝

目前,Contiki操作系統(tǒng)開(kāi)發(fā)小組將Contiki源碼托管到github中。為了方便開(kāi)發(fā),我們需要將Contiki操作系統(tǒng)的源碼部署到本地。Cotniki源碼默認(rèn)環(huán)境為L(zhǎng)inux操作系統(tǒng),本節(jié)還將介紹在Windows系統(tǒng)下的環(huán)境部署。2.3.2Windows系統(tǒng)下Contiki安裝Windows操作系統(tǒng)是目前使用最廣泛,也是人們最熟悉的操作系統(tǒng)之一。將Contiki部署在Windows系統(tǒng)下將大大減小Contiki開(kāi)發(fā)的難度。本小節(jié)將介紹如何在Windows下使用IARfor8051集成開(kāi)發(fā)工具配置部署Contiki操作系統(tǒng)開(kāi)發(fā)環(huán)境。2.3.3Cooja仿真工具Cooja是無(wú)線傳感器網(wǎng)絡(luò)仿真工具,能夠在電腦上進(jìn)行協(xié)議仿真,進(jìn)入/cooja目錄即可啟動(dòng)Cooja。首次啟動(dòng)Cooja時(shí),需要安裝相應(yīng)的軟件,按照提示進(jìn)行安裝,安裝完成后重新運(yùn)行命令即可。

2.4Contiki目錄結(jié)構(gòu)

Contiki安裝完成以后,用資源管理器打開(kāi)contiki的目錄,可以看到Contiki操作系統(tǒng)源碼的目錄結(jié)構(gòu)。1.core文件夾core文件夾是Contiki操作系統(tǒng)的核心代碼目錄,包含了Contiki中與硬件無(wú)關(guān)的代碼、網(wǎng)絡(luò)協(xié)議棧、硬件驅(qū)動(dòng)程序的頭文件等。1)?sys文件夾sys文件夾包含Contiki操作系統(tǒng)內(nèi)核的所有代碼,用于實(shí)現(xiàn)任務(wù)調(diào)度、事件驅(qū)動(dòng)、定時(shí)器等相關(guān)功能,是操作系統(tǒng)的核心文件。2)?net文件夾net文件夾包含了一系列的文件,以及mac、rime、rpl三個(gè)子目錄,是Contiki中與網(wǎng)絡(luò)協(xié)議相關(guān)的代碼,包括IPv4、IPv6、6Lowpan、RPL等基于IP的網(wǎng)絡(luò)層代碼,以及MAC層協(xié)議。此外,Contiki還包含了rime協(xié)議棧。3)?cfs文件夾cfs文件夾是coffefilesystem的縮寫(xiě),是Contiki上的一個(gè)小型的基于Flash存儲(chǔ)器的文件系統(tǒng)。4)?ctk文件夾ctk文件夾是TheContikiToolkit的簡(jiǎn)寫(xiě),該目錄中的代碼為Contiki操作系統(tǒng)提供圖形化的操作界面。5)?dev文件夾dev文件夾包含了Contiki操作系統(tǒng)中一些常用的驅(qū)動(dòng)程序的頭文件定義,以及驅(qū)動(dòng)程序中與硬件無(wú)關(guān)的代碼,用戶移植Contiki時(shí)根據(jù)這些頭文件定義的api函數(shù)編寫(xiě)驅(qū)動(dòng)程序。6)?lib文件夾lib文件夾包含了Contiki操作系統(tǒng)以及其他程序用到的一些常用庫(kù)函數(shù)。7)?loader文件夾loader是一個(gè)小型動(dòng)態(tài)加載模塊,它允許用戶在需要的時(shí)候動(dòng)態(tài)加載應(yīng)用程序,從而提高靈活性。8)頭文件頭文件contiki.h包含Contiki相關(guān)的所有頭文件,contiki-lib.h包含了常用庫(kù)的頭文件,contiki-net.h包含了net相關(guān)的頭文件,contiki-verson.h包含了當(dāng)前Contiki的版本號(hào)字符串。2.cpu文件夾cpu文件夾包含了與微控制器移植相關(guān)的代碼,包括寄存器定義、Contiki內(nèi)核與硬件相關(guān)的代碼(如時(shí)鐘、定時(shí)器等)、微控制器的驅(qū)動(dòng)程序。3.platform文件夾platform文件夾包含與電路板相關(guān)的移植代碼和驅(qū)動(dòng)。電路板中包含核心微控制器,還包括各類外圍通信器件、傳感器器件。4.a(chǎn)pps文件夾apps文件夾包含了許多Contiki操作系統(tǒng)上的應(yīng)用程序。5.tools文件夾tools文件夾包含調(diào)試、開(kāi)發(fā)、下載等相關(guān)的各類程序。6.examples文件夾examples文件夾包含了許多Contiki編程示例代碼,用戶編程時(shí)可以參照這些程序,或者直接在這些代碼中進(jìn)行修改。7.regression-tests文件夾regression-tests文件夾包含了多個(gè)在Cooja下進(jìn)行仿真模擬的項(xiàng)目示例。

2.5Contiki操作系統(tǒng)運(yùn)行原理

Contiki操作系統(tǒng)是基于事件驅(qū)動(dòng)的,系統(tǒng)的運(yùn)行過(guò)程可以理解為不斷處理事件的過(guò)程。Contiki操作系統(tǒng)整個(gè)運(yùn)行通過(guò)事件觸發(fā)完成,一個(gè)事件綁定相應(yīng)的進(jìn)程。系統(tǒng)啟動(dòng)以后,首先執(zhí)行main()函數(shù),進(jìn)行硬件初始化,接著初始化進(jìn)程,然后啟動(dòng)系統(tǒng)進(jìn)程和指定的自啟動(dòng)進(jìn)程,最后,函數(shù)process_run()進(jìn)入處理事件的死循環(huán),首先遍歷執(zhí)行完所有高優(yōu)先級(jí)的進(jìn)程,然后轉(zhuǎn)去處理事件隊(duì)列中的事件,處理該事件之后,需先滿足高優(yōu)先級(jí)進(jìn)程才能轉(zhuǎn)去處理下一個(gè)事件。2.5.1ProtothreadContiki操作系統(tǒng)使用Protothread輕量級(jí)線程模型,即所有進(jìn)程共用一個(gè)棧。當(dāng)進(jìn)程數(shù)量很多的時(shí)候,由??臻g省下來(lái)的內(nèi)存是相當(dāng)可觀的。為了保存斷點(diǎn),Protothreads用一個(gè)2字節(jié)靜態(tài)變量存儲(chǔ)被中斷行,下一次該進(jìn)程獲得執(zhí)行權(quán)時(shí),進(jìn)入函數(shù)體后通過(guò)switch語(yǔ)句跳轉(zhuǎn)到上一次被中斷的地方。1.保存斷點(diǎn)Contiki操作系統(tǒng)保存斷點(diǎn)是通過(guò)保存行數(shù)來(lái)完成的,在被中斷的地方插入編譯器關(guān)鍵字_LINE_,編譯器便自動(dòng)記錄所中斷的行數(shù)。宏LC_SET包含語(yǔ)句case_LINE_,用于下次恢復(fù)斷點(diǎn),即下次通過(guò)switch語(yǔ)言便可跳轉(zhuǎn)到case的下一條語(yǔ)句。2.恢復(fù)斷點(diǎn)被中斷程序再次獲得執(zhí)行權(quán)時(shí),便從該進(jìn)程的函數(shù)執(zhí)行體調(diào)用,按照Contiki操作系統(tǒng)的編程規(guī)則替換,函數(shù)體的第一條語(yǔ)句便是PROCESS_BEGIN宏,該宏包含一條switch語(yǔ)句,用于跳轉(zhuǎn)到上一次被中斷的行,從而恢復(fù)執(zhí)行。2.5.2進(jìn)程控制塊Contiki操作系統(tǒng)用一個(gè)結(jié)構(gòu)體來(lái)描述整個(gè)進(jìn)程的細(xì)節(jié),使用鏈表將系統(tǒng)的所有進(jìn)程組織起來(lái)。Contiki操作系統(tǒng)定義了一個(gè)全局變量process_list作為進(jìn)程鏈表的表頭,還定義了一個(gè)全局變量process_current用于指向當(dāng)前進(jìn)程。成員變量next指向下一個(gè)進(jìn)程,最后一個(gè)進(jìn)程的next指向NULL。1.成員變量thread進(jìn)程的執(zhí)行體,即進(jìn)程執(zhí)行實(shí)際上是運(yùn)行該函數(shù)。2.成員變量ptContiki操作系統(tǒng)進(jìn)程是基于線程模型Protothreads的,所以進(jìn)程控制塊需要一個(gè)變量來(lái)記錄被中斷的行數(shù)。2.5.3進(jìn)程調(diào)度Contiki操作系統(tǒng)只有兩種優(yōu)先級(jí),由進(jìn)程控制塊中的變量needspoll標(biāo)識(shí),默認(rèn)值是0,即普通優(yōu)先級(jí)。要想將某個(gè)進(jìn)程設(shè)為更高優(yōu)先級(jí),可以在創(chuàng)建之初指定needspoll為1,或者運(yùn)行過(guò)程中通過(guò)設(shè)置該變量從而動(dòng)態(tài)提升其優(yōu)先級(jí)。在實(shí)際的調(diào)度中,優(yōu)先運(yùn)行最高優(yōu)先級(jí)的進(jìn)程,而后再去處理一個(gè)事件,隨后再運(yùn)行所有高優(yōu)先級(jí)的進(jìn)程。創(chuàng)建進(jìn)程(還未投入運(yùn)行)以及進(jìn)程退出(此時(shí)進(jìn)程還沒(méi)從進(jìn)程鏈表中刪除)時(shí),進(jìn)程狀態(tài)都為PROCESS_STATE_NONE。1.進(jìn)程初始化系統(tǒng)啟動(dòng)后需要先將進(jìn)程初始化,通常在主函數(shù)main()中調(diào)用函數(shù)process_init(),進(jìn)程初始化主要完成事件隊(duì)列和進(jìn)程鏈表初始化,將進(jìn)程鏈表頭指向NULL,當(dāng)前進(jìn)程也設(shè)為NULL。2.創(chuàng)建進(jìn)程創(chuàng)建進(jìn)程實(shí)際上是定義一個(gè)進(jìn)程控制塊和進(jìn)程執(zhí)行體的函數(shù),PROCESS宏實(shí)際上聲明了一個(gè)函數(shù)并定義了一個(gè)進(jìn)程控制塊,新創(chuàng)建的進(jìn)程next指針指向NULL,進(jìn)程名稱為Helloworld,進(jìn)程執(zhí)行體函數(shù)指針為process_thread_hello_world_process,保存行數(shù)的pt為0,狀態(tài)為0,優(yōu)先級(jí)標(biāo)記位needspoll也為0。PROCESS定義了結(jié)構(gòu)體并聲明了函數(shù),還需要實(shí)現(xiàn)該函數(shù),通過(guò)宏P(guān)ROCESS_THREAD來(lái)實(shí)現(xiàn)。宏P(guān)ROCESS_BEGIN包含switch(process_pt->lc)語(yǔ)句,這樣被中斷的進(jìn)程將再次獲得執(zhí)行并可通過(guò)switch語(yǔ)句跳轉(zhuǎn)到相應(yīng)的case,即被中斷的行。3.啟動(dòng)進(jìn)程函數(shù)process_start()用于啟動(dòng)一個(gè)進(jìn)程,首先判斷該進(jìn)程是否已經(jīng)在進(jìn)程鏈表中,然后將進(jìn)程加到鏈表,給該進(jìn)程發(fā)一個(gè)初始化事件PROCESS_EVENT_INIT。函數(shù)process_start()將進(jìn)程狀態(tài)設(shè)為PROCESS_STATE_RUNNING,并調(diào)用PT_INIT宏將保存斷點(diǎn)的變量設(shè)置為0,調(diào)用process_post_synch給進(jìn)程觸發(fā)一個(gè)同步事件。進(jìn)程運(yùn)行由call_process()函數(shù)實(shí)現(xiàn),call_process()函數(shù)首先進(jìn)行參數(shù)驗(yàn)證,即進(jìn)程處于運(yùn)行狀態(tài)并且進(jìn)程的函數(shù)體不為NULL,接著將進(jìn)程狀態(tài)設(shè)為PROCESS_STATE_CALLED,表示該進(jìn)程擁有執(zhí)行權(quán)。接下來(lái),運(yùn)行進(jìn)程函數(shù)體,根據(jù)返回值判斷進(jìn)程是否結(jié)束或者退出,若是則調(diào)用exit_process()將退出進(jìn)程,否則將進(jìn)程狀態(tài)設(shè)為PROCESS_STATE_RUNNING,繼續(xù)放在進(jìn)程鏈表。4.進(jìn)程退出進(jìn)程運(yùn)行完成或者收到退出的事件都會(huì)導(dǎo)致進(jìn)程退出。2.5.4事件調(diào)度Contiki操作系統(tǒng)將事件調(diào)度機(jī)制融入到線程Protothreads機(jī)制中,每個(gè)事件綁定一個(gè)進(jìn)程(廣播事件例外),進(jìn)程間的消息傳遞也是通過(guò)事件來(lái)傳遞的。Contiki操作系統(tǒng)用無(wú)符號(hào)字符來(lái)標(biāo)識(shí)事件,它定義了10個(gè)事件(0x80~0x8A),其他的供用戶使用。Contiki操作系統(tǒng)用一個(gè)全局的靜態(tài)數(shù)組存放事件,通過(guò)數(shù)組下標(biāo)可以快速訪問(wèn)事件。系統(tǒng)還定義了另外兩個(gè)全局靜態(tài)變量nevents和fevent,分別用于記錄未處理事件的總數(shù)和下一個(gè)待處理的位置。2.事件調(diào)度Contiki操作系統(tǒng)中的事件沒(méi)有優(yōu)先級(jí),采用先到先服務(wù)策略,每一次系統(tǒng)輪詢(process_run函數(shù))只處理一個(gè)事件。do_event()函數(shù)用于處理事件,首先取出該事件,更新總的未處理事件總數(shù)及下一個(gè)待處理事件的數(shù)組下標(biāo)。然后判斷事件是否為廣播事件,若是,先運(yùn)行高優(yōu)先級(jí)的進(jìn)程,然后再調(diào)用call_process()函數(shù)去處理事件。3.事件處理實(shí)際的事件處理是在進(jìn)程的函數(shù)體thread中進(jìn)行的,call_process()函數(shù)會(huì)調(diào)用thread()函數(shù)執(zhí)行該進(jìn)程。2.5.5定時(shí)器Contiki操作系統(tǒng)提供了5種定時(shí)器模型。(1)?timer:描述一段時(shí)間,以系統(tǒng)時(shí)鐘嘀嗒數(shù)為單位;(2)?stimer:描述一段時(shí)間,以秒為單位;(3)?ctim

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論