版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 1 1第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 6.1 無線傳感器網(wǎng)絡(luò)操作系統(tǒng)概述6.2 TinyOS操作系統(tǒng)6.3 無線傳感器網(wǎng)絡(luò)實驗平臺第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 2 26.1 無線傳感器網(wǎng)絡(luò)操作系統(tǒng)概述無線傳感器網(wǎng)絡(luò)操作系統(tǒng)概述在某種程度上可以將傳感器網(wǎng)絡(luò)看做一種由大量微型、廉價、能量有限的多功能傳感器節(jié)點組成的、可協(xié)同工作的、面向分布式自組織網(wǎng)絡(luò)的計算機系統(tǒng)。因此,針對傳感器網(wǎng)絡(luò)應(yīng)用多樣、硬件功能有限、資源有限、節(jié)點微型化和分布式多協(xié)作等特點,研究和設(shè)計新的基于傳感器網(wǎng)絡(luò)的操作系統(tǒng)就成為當(dāng)前提高無線傳感器網(wǎng)絡(luò)性能
2、的一個重要課題。當(dāng)前,有些研究人員認(rèn)為傳感器網(wǎng)絡(luò)的硬件很簡單,沒有必要設(shè)計一個專門的操作系統(tǒng),可以直接在硬件上設(shè)計應(yīng)用程序。這種觀點在實際應(yīng)用中會碰到很多問題。首先就是面向第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 3 3傳感器網(wǎng)絡(luò)的應(yīng)用開發(fā)難度會加大,應(yīng)用開發(fā)人員不得不直接面對硬件進行編程,無法得到像傳統(tǒng)操作系統(tǒng)那樣的豐富服務(wù);其次是軟件的重用性差,程序員無法繼承已有的軟件成果,降低了開發(fā)效率,增加了開發(fā)成本。另外,一些設(shè)計人員認(rèn)為,可以直接使用現(xiàn)有的嵌入式操作系統(tǒng),如VxWorks、WinCE、Linux、QNX等。這些系統(tǒng)中有基于微內(nèi)核架構(gòu)的嵌入式操作系統(tǒng),如VxWorks、QNX等
3、,也有基于單體內(nèi)核架構(gòu)的嵌入式操作系統(tǒng),如Linux等。由于這些操作系統(tǒng)主要面向嵌入式領(lǐng)域相對復(fù)雜的應(yīng)用,其功能也比較復(fù)雜,如它們可提供內(nèi)存動態(tài)分配、虛擬內(nèi)存實時性支持、文件系統(tǒng)支持等,但是系統(tǒng)代碼尺寸相對較大。而傳感器網(wǎng)絡(luò)的硬件等資源極為有限,上述操作系統(tǒng)很難在無線傳感器網(wǎng)絡(luò)這樣的硬件資源上高效運行。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 4 4隨著無線傳感器網(wǎng)絡(luò)的深入發(fā)展,目前已經(jīng)出現(xiàn)了多種適合于無線傳感器網(wǎng)絡(luò)應(yīng)用的操作系統(tǒng),如TinyOS、MantisOS和SOS。本書只對TinyOS操作系統(tǒng)進行簡單介紹。 第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 5 56.2 TinyO
4、S操作系統(tǒng)操作系統(tǒng)TinyOS是一個典型的無線傳感器網(wǎng)絡(luò)操作系統(tǒng),能夠很好地滿足無線傳感器網(wǎng)絡(luò)操作的要求。TinyOS是由加州大學(xué)伯克利分校開發(fā)的一個開源的嵌入式操作系統(tǒng)。它采用一種基于組件(Component-based)的開發(fā)方式,能夠快速實現(xiàn)各種應(yīng)用。TinyOS的程序核心往往都很小(一般來說核心代碼和數(shù)據(jù)大概為400B),這樣能夠突破傳感器存儲資源少的限制,讓TinyOS有效運行在無線傳感器網(wǎng)絡(luò)上。它還提供一系列可重用的組件,可以簡單方便地編制程序,用來獲取和處理傳感器的數(shù)據(jù)并通過無線電來傳輸信息。一個應(yīng)用程序可以使用這些組件,方法是通過連接配置文件第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建
5、及應(yīng)用實踐 6 6(Configuration)將各種組件連接(Wiring)起來,以完成它所需要的功能。系統(tǒng)采用事件驅(qū)動的工作模式采用事件觸發(fā)去喚醒傳感器工作。TinyOS操作系統(tǒng)、庫程序和應(yīng)用服務(wù)程序均是用nesC語言編寫的,TinyOS的很多特性,如并發(fā)模型、組件結(jié)構(gòu)等都是由nesC語言體現(xiàn)的。nesC是一種開發(fā)組件式結(jié)構(gòu)程序的語言,采用C語法風(fēng)格的語言,其語法是對標(biāo)準(zhǔn)C語法的擴展。nesC支持TinyOS的并發(fā)模型,也使得組織、命名和連接組件成為健壯的嵌入式網(wǎng)絡(luò)系統(tǒng)的機制。 第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 7 7TinyOS2.x支持eyesIFX、intelmote2
6、、mica2、mica2dot、mlcaz、shimmer、telosb、tinynode等平臺。TinyOS 集成開發(fā)環(huán)境(IDE)種類有:eclipse(集成開發(fā)環(huán)境)、TOSSIM(TinyOS Simultor)、IAR Embedded Workbench、TI公司提供的開發(fā)工具(支持MCU的有CC2530、MSP430、TMS470、C2000等處理器)、ATMEL AVR Studio集成開發(fā)環(huán)境和AVR單片機C語言編譯器等。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 8 86.2.1 Ubuntu下下TinyOS2.x環(huán)境的搭建環(huán)境的搭建1在在Ubuntu10.04下添加下
7、添加TinyOS資源資源Ubuntu10.04下TinyOS2.x環(huán)境的搭建所需的軟件如下:(1) Ubuntu版本:10.04;(2) Eclipse版本:3.6;(3) TinyOS版本:2.1.1。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 9 9在Ubuntu10.04下添加TinyOS的步驟如下:(1) 配置source源,修改/ect/apt/sources.list文件,添加一行:$ deb http:/TinyOS./TinyOS/dist/ubuntu lucid main具體命令如下:$ sudo gedit /ect/apt/sources.l
8、ist$deb http:/TinyOS./TinyOS/dist/ubuntu lucid main其中,lucid是ubuntu10.04系統(tǒng)版本的代號。(2) 更新源目錄的包的列表,命令如下:$sudo apt-get update第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 10 10(3) 安裝tinyOS最新版及其相關(guān)工具。在命令行下運行下列命令:$sudo apt-get install TinyOS 很有可能會提示在幾個版本中選擇,可選擇其中一個版本,然后重新執(zhí)行如下命令:$sudo apt-get install TinyOS-2.1.1(4) 進入
9、/opt/tinyOS2.1.1目錄下,修改tinyOS.sh文件,將CLASSPATH一行修改為:CLASSPATH=$CLASSPATH:$TOSROOT/support/sdk/java:$TOSROOT/support/sdk/java/TinyOS.jar第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 11 11(5) 進入/home/yourname目錄,在當(dāng)前目錄下.bashrc文件中添加以下內(nèi)容來進行開發(fā)環(huán)境的配置。執(zhí)行命令:$sudo gedit /.bashrc增加下面兩行:source /opt/TinyOS-2.1.1/TinyOS.shexport CLASSPATH
10、=$TOSROOT/support/sdk/java/TinyOS.jar:.第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 12 12(6) 執(zhí)行如下更新命令:$source ./bashrc$sudo tos-install-jni當(dāng)上述配置完畢后,運行以下命令檢查環(huán)境配置情況:$tos-check-env(7) 安裝g+。執(zhí)行如下命令,可完成g+的安裝。$sudo apt-get install g+$sudo apt-get install python2.6-dev第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 13 13(8) 測試。用下列命令可測試配置是否成功:$cd /opt/
11、TinyOS-2.1.1/apps/Blink$make telosb如果要仿真,則需要修改/opt/TinyOS-2.1.1/support/make/sim.extra文件。首先執(zhí)行命令:$gedit /opt/TinyOS-2.1.1/support/make/sim.extra然后修改python的版本為:PYTHON_VERSION=2.6再重新運行:make micaz sim若出現(xiàn)了提示:* Successfully built micaz TOSSIM library則表示構(gòu)建了TOSSIM庫。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 14 142安裝安裝Eclipse和
12、和Yeti插件插件1) 安裝Eclipse3.5可在終端里直接輸入:sudo apt-get install eclipse具體安裝步驟如下:(1) 下載eclipse3.6 for Linux的版本:http:/ 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 15 15(2) 解壓縮安裝包,放置相應(yīng)安裝目錄。執(zhí)行如下命令:cd /home/frankwoo/Downloadstar -zxvf eclipse-SDK-3.6-linux-gtk.tar.gzmv eclipse /usr/share(3) 創(chuàng)建ubuntu的eclipse菜單,執(zhí)行如下命令:gedit /usr/share/app
13、lications/Eclipse36.desktop添加內(nèi)容: Desktop EntryName=Eclipse第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 16 16Comment=Eclipse IDEExec=/usr/share/eclipse/eclipseIcon=/usr/share/eclipse/icon.xpmTerminal=falseType=ApplicationCategories=Application;Development;然后保存關(guān)閉。至此,Ubuntu上Eclipse3.6的安裝完成。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 17 172) 安
14、裝插件安裝必要的插件,以免在安裝Yeti時出現(xiàn)提示缺少組件。具體步驟如下:(1) 安裝GEF插件。選擇ecllipse的help菜單下的install new software子選項,再選擇add,然后在 name中輸入GEF,在location中輸入/tools/gef/updates/releases/直接選上最后一個,然后單擊next,再選擇accept all直至完成“finish”,最后重新啟動。(2)安裝CDT插件。在name處輸入CDT,在location處輸入/tools/c
15、dt/releases/helios第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 18 18(3) 安裝Yeti插件。選擇ecllipse的help菜單下的install new software子選項,再選擇add,然后在name中輸入Yeti2,在location中輸入http:/tos-ide.ethz.ch/update/site.xml。然后單擊下一步“next”,等待更新。安裝完畢后可設(shè)置環(huán)境變量,如下:Window-Preferences-TinyOS-Environments檢查各個目錄,單擊Apply,若出現(xiàn)OK,則設(shè)置完畢。3檢查檢查TinyOS的安裝的安裝TinyOS-
16、Check Installation至此,TinyOS環(huán)境搭建完畢。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 19 196.2.2 NesC語言和語言和TinyOS的組件的組件1NesC語言的使用環(huán)境語言的使用環(huán)境NesC是一種擴展C的編程語言,主要用于傳感器網(wǎng)絡(luò)的編程開發(fā),加州大學(xué)伯克利分校研發(fā)人員為這個平臺開發(fā)了微型操作系統(tǒng)TinyOS和編程語言NesC,同時國內(nèi)外很多大學(xué)和機構(gòu)利用這一平臺進行了相關(guān)問題的研究。NesC主要用在TinyOS中,TinyOS也是由NesC編寫完成的。TinyOS操作系統(tǒng)就是為用戶提供一個良好的用戶接口。基于以上分析,研發(fā)人員在無線傳感器節(jié)點處理能力和存
17、儲能力有限的情況下設(shè)計了一種新型的嵌入式系統(tǒng)TinyOS,具有更強的網(wǎng)絡(luò)處理和資源收集能力,可滿足無線傳感器網(wǎng)絡(luò)的要求。為滿足無線傳感器網(wǎng)絡(luò)的要求,研究人員在TinyOS中引入了四種技術(shù):輕線程、主動消息、事件驅(qū)動和組件化編程。輕線程主要是針對節(jié)點并發(fā)操作可能比較頻繁,且線程比較短,傳統(tǒng)的進程/線程調(diào)度無法滿足(使用傳統(tǒng)調(diào)度算法會產(chǎn)生大量能量用在無效的進程互換過程中)的問題提出的。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 20202NesC語言的主要特性語言的主要特性由于傳感器網(wǎng)絡(luò)的自身特點,面向它的開發(fā)語言也有其相應(yīng)的特點。主動消息是并行計算機中的概念。在發(fā)送消息的同時傳送處理這個消息
18、的相應(yīng)處理函數(shù)ID和處理數(shù)據(jù),接收方得到消息后可立即進行處理,從而可減少通信量。整個系統(tǒng)的運行是因為事件驅(qū)動而運行的,沒有事件發(fā)生時,微處理器進入睡眠狀態(tài),從而可以達到節(jié)能的目的。組件就是對軟硬件進行功能抽象。整個系統(tǒng)是由組件構(gòu)成的,組件可提高軟件重用度和兼容性,程序員只關(guān)心組件的功能和自己的業(yè)務(wù)邏輯,而不必關(guān)心組件的具體實現(xiàn),從而可提高編程效率。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 21 213TinyOS的組件模型的組件模型1) 接口(Interface)nesC的接口有雙向性,是提供者組件和使用者組件之間的多功能交互通道。接口提供者實現(xiàn)了接口的一組功能函數(shù),稱為命令;接口使用者
19、需要實現(xiàn)的一組功能函數(shù)稱為事件。對于一個組件而言,如果它要使用某個接口中的命令,它必須實現(xiàn)這個接口的事件。接口由interface類型定義,interface的語法定義如下:nesC-file:includes-listopt erface:第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 2222interface identifier declaration-list storage-class-specifier: also one ofcommand event async聲明列表中,每個接口類型都有一個聲明范圍。聲明列表必須由command或event存儲類(
20、Storage Class)的功能描述組成,否則會發(fā)生編譯時錯誤??蛇x的async關(guān)鍵字指出命令或事件能在一個中斷處理程序(Interface Handler)中執(zhí)行。通過包含列表(Includes-list),一個接口能可選擇地包括C文件。簡單的接口定義例子如下:第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 2323interface SendMsg command result_t send(uint16_t address, uint8_t length, TOS_MsgPtr msg);event result_t sendDone (TOS_MsgPtr msg, result_t
21、 success)j從上面的定義可以看出,接口SendMsg包括了一個命令send和一個事件sendDone。提供接口SendMsg的組件必須實現(xiàn)send命令,而使用該接口的組件必須實現(xiàn)sendDone事件。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 24242) 組件(Component)任何一個nesC應(yīng)用程序都是由一個或多個組件連接起來的,從而形成了一個完整的可執(zhí)行程序。在nesC中有兩種類型的組件,分別稱為模塊和配置。模塊提供應(yīng)用程序代碼,實現(xiàn)一個或多個接口;配置則是用來將其他組件裝配起來的組件,將各個組件所使用的接口與其他組件提供的接口連接在一起,這種行為稱為連接(Wiring)
22、。每個nesC應(yīng)用程序都由一個頂級配置所描述,其內(nèi)容就是將該應(yīng)用程序所用到的所有組件連接起來,形成一個有機整體。組件的語法定義如下:第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 2525nesC-file:includes-listopt moduleincludes-listopt configuration.module:module identifier specification module-implementationconfiguration:configuration identifier specification configuration-implementation組
23、件名由標(biāo)識符(Identifier)定義。該標(biāo)識符是全局性的,且屬于組件和接口類型命名空間。一個組件可以有兩種作用域:一個規(guī)范(Specification)作用域,屬于C的全局作用域;一個實現(xiàn)(Implementation)作用域,屬于規(guī)范作用域。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 2626通過包含列表,一個組件能可選擇地包括C文件。規(guī)范列出了該組件所提供或使用的規(guī)范元素(接口實例、命令或事件)。就如前面所述,一個組件必須實現(xiàn)它提供接口的命令和它使用的接口事件。一般情況下,命令向下調(diào)用硬件組件,而事件向上調(diào)用應(yīng)用組件。組件間的交互只能通過組件的規(guī)范元素來溝通。每種規(guī)范元素有一個名字
24、(接口實例名、命令名或事件名)。這些名字屬于每個組件特有的規(guī)范作用域的變量命名空間。規(guī)范的語法定義如下:第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 2727specification:uses-provides-list uses-provides-list:uses-providesuses-provides-list uses-providesuses-provides:uses specification-element-listprovides specification-element-listspecification-element-list:specification-el
25、ement specification-elements specification-elements:specification-elementspecification-elements specification-element第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 2828一個組件規(guī)范可以有多個uses和provides指令。多個uses和provides指令的規(guī)范元素可以通過使用“”和“)”符號在一個uses或provides命令中指定。例如,下面兩個定義是等價的:module A1 module A1 uses interface X; uses uses interfac
26、e Y; interface X; . interface Y; .第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 2929一個接口實例描述如下:specification-element:interface renamed-identifier parametersopt.renamed-identifier:identifieridentifier as identifierinterface-parameters: parameter-type-list第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 3030接口實例聲明的完整語法是interface X as Y,這里可以明確地定義Y作
27、為接口的名字。interface X是interface X as X的一個簡寫形式。如果接口參數(shù)(Interface-parameters)被省略,那么interface X as Y聲明了對應(yīng)該組件的單一接口的一個簡單的接口實例。如果給出了接口參數(shù)(如interface SendMsguint8_t id),那么這就是一個參數(shù)化的接口實例聲明,對應(yīng)該組件的多個接口中的一個(每個接口對應(yīng)不同參數(shù)值,因為8位整數(shù)可以表示256個值,所以interface SendMsguint8_t id中可以聲明256個SendMsg類型的接口)。參數(shù)化接口的參數(shù)類型必須是整型(這里枚舉類型是不允許的)。第
28、6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 31 31指令或事件能通過一個聲明了指令或事件及存儲類型的標(biāo)準(zhǔn)的C函數(shù)作為規(guī)格元素直接地被包含:specification-element:declaration.storage-class-specifier: also one ofcommand event async如果該聲明不是帶有指令或事件存儲類型的函數(shù)聲明,則會產(chǎn)生編譯時錯誤。作為接口實例, 如果沒有指定接口參數(shù),指令(事件)就是簡單的指令(簡單的事件);如果接口參數(shù)是指定的,就是參數(shù)化指令(參數(shù)事件)。接口參數(shù)被放置在一般的函數(shù)參數(shù)列表之前,例如:第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建
29、及應(yīng)用實踐 3232command void senduint8 t id(int x):direct-declarator: alsodirect-declarator interface-parameters ( parameter-type-list ).注意:接口參數(shù)只允許在組件說明中的指令或事件上使用,而不允許在接口類型中使用。下面是一個完整的規(guī)格例子:configuration GenericComm provides interface StdControl as Control;/該接口以當(dāng)前消息序號作參數(shù)interface SendMsguint8_t id;第6章 無線傳感
30、器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 3333interface ReceiveMsguint8_t id;uses /發(fā)送完成之后為組件作標(biāo)記/重試失敗的發(fā)送event result_t sendDone(); .在這個例子中,提供了簡單的接口實例類型StdControl的控制,提供了接口類型 SendMsg和ReceiveMsg的參數(shù)實例,參數(shù)實例分別為SendMsg和ReceiveMsg,使用了事件sendDone。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 34343) 模塊(Module)模塊使用C語言實現(xiàn)組件規(guī)范,其定義如下:module-implementation:impleme
31、ntation translation-unit )其中,translation-unit是一連串的C語言聲明和定義。模塊中的translation-unit的頂層聲明屬于模塊的組件實現(xiàn)作用域。這些聲明的范圍可以是任意的標(biāo)準(zhǔn)C語言的聲明或定義、任務(wù)聲明或定義、命令或事件的實現(xiàn)。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 3535下面的C語言語法定義了這些命令和事件的實現(xiàn):storage-class-specifier: also one ofcommand event asyncdeclaration-specifiers: alsodefault declaration-specifie
32、rsdirect-declarator: alsoidentifier.identifierdirect-declarator interface-parameters (parameter-type-list )筒單命令或事件的實現(xiàn)需要滿足具有command或event存儲類的C語言函數(shù)定義的語法。另外,如果在命令或事件的聲明中包含了async關(guān)鍵字,那么在實現(xiàn)中必須包含async。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 36364) 調(diào)用命令(Calling Commands)和觸發(fā)事件(Signaling Events)下面的C語法的擴展語法定義了調(diào)用命令和觸發(fā)事件:postfi
33、x-expression:postfix-expression argument-expression-list call-kindopt primary ( argument-expression-listopt ).call-kind: one ofcall signal post使用can a()調(diào)用一個簡單的命令a,使用signal a()來觸發(fā)一件簡單的事件a。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 3737例如,在模塊中使用接口Send的SendMsg類型:call Send.send(l,sizeof(Message),&msgl)對于類型為t1, , tn的接口
34、參數(shù)的參數(shù)化命令a(或事件a),可以使用call ael()來調(diào)用,也可以使用signal ael,en()來觸發(fā)事件。接口參數(shù)表達式ei必須匹配類型ti;實際的接口參數(shù)值映射到ti。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 38385) 原子(Atomic)的陳述nesC使用“原子”指出該段代碼“不可被打斷”。原子的語法如下:atomic-stmt:atomic statement下面是一個簡單的例子:bool busy; /全局變量void f() bool available; atomic favailable= !busy; busy=TRUE; if (available)
35、do_something; atomic busy=FALSE;第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 3939原子的區(qū)段應(yīng)該很短,雖然這常常并不是必需的??刂浦荒堋罢5亍绷魅牖蛄鞒鲈拥年愂?;任何goto、return、break或continue跳轉(zhuǎn)入或轉(zhuǎn)出一原子陳述都是錯誤的。返回陳述決不允許進入原子陳述。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 40406) 配置(Configuration)配置通過連接一些其他組件來實現(xiàn)一個組件的規(guī)范。配置的語法如下:configuration-implementation:implementation component-list印
36、t connection-list connection-list中列出用來構(gòu)成配置的組件,connection-list指出這些組件是如何相連接以及如何與配置規(guī)范連接在一起的。這里把配置規(guī)范中的規(guī)范元素稱為外部(External)規(guī)范元素,而把在配置的組件中的規(guī)范元素稱為內(nèi)部(Internal)規(guī)范元素。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 41 417) 包含組件組件列表列出用來建立這一結(jié)構(gòu)的組件。在結(jié)構(gòu)里這些組件可隨意地重命名,使用共同外形規(guī)格元素,或簡單地改變組件結(jié)構(gòu)從而避免名稱沖突。為避免改變配置,為組件選擇的名字屬于成分的實現(xiàn)域。包含組件列表的語法如下:component
37、-list:componentscomponent-list componentscomponents:components component-line;第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 4242 component-line:renamed-identifiercomponent-line, renamed-identifierrenamed-identifier:identifieridentifier as identifier如果兩個組件使用as而導(dǎo)致重名,則會產(chǎn)生編譯時錯誤(如components X、Y as X)。一個組件始終只能有一個實例,如果在兩個不同的配置中
38、都使用了組件K,或者在同一配置中使用兩次組件K,在程序中仍然只有K(及它的變量)的一個實例。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 43438) 連接(Wiring)連接用來把規(guī)范元素(接口、命令和事件)聯(lián)系在一起。由于連接的內(nèi)容比較復(fù)雜,讀者可以參考nesC給出的應(yīng)用示例中的源代碼進行對照閱讀。連接的語法定義如下:connection-list:connectionconnection-list connectionconnection:endpoint=endpointendpointendpoint2;是一種包含兩個內(nèi)部規(guī)范元素的連接。這樣經(jīng)常把endpoint1定義的被使用的規(guī)
39、范元素連接到endpoint2定義的被提供的規(guī)范元素上。(3) endpoint1endpoint1。這三種連接中,指定的兩個規(guī)范元素必須是相容的,即它們必須都是命令、事件或接口實例。同時,如果它們都是命令(或事件),則它們必須有相同的函數(shù)特征。如果它們都是接口實例,則它們必須有相同的接口類型。如果這些條件不能滿足,就會發(fā)生編譯時錯誤。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 4747如果一個端點是參數(shù)化的,則另一個必須也是參數(shù)化的,并且必須有相同的參數(shù)類型;否則就會發(fā)生編譯時錯誤。同一規(guī)范元素可能會被多次連接,例如:configuration C rovides interface X
40、jimplementation components C1, C2;X= C1.X;X= C2.X;第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 4848在這個例子中,多次連接將會導(dǎo)致接口X的事件多次被觸發(fā)(扇入),當(dāng)接口X中的命令被調(diào)用時,會導(dǎo)致多個函數(shù)被執(zhí)行(扇出)。注意:當(dāng)兩個配置獨立地連接同一接口時,也會發(fā)生多重連接。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 49496.3 無線傳感器網(wǎng)絡(luò)實驗平臺無線傳感器網(wǎng)絡(luò)實驗平臺6.3.1 無線傳感器網(wǎng)絡(luò)實驗平臺簡介無線傳感器網(wǎng)絡(luò)實驗平臺簡介 圖圖6.1 節(jié)點柜節(jié)點柜本節(jié)主要介紹GreenOrbs無線傳感器網(wǎng)絡(luò)實驗平臺,該實驗平臺將節(jié)點固
41、定在有機玻璃面板上的滑動槽中,每個節(jié)點通過面板上的USB接口和USB Hub相連。多級USB Hub和電腦相連,實驗人員能夠直接訪問所有節(jié)點進行程序燒錄、參數(shù)配置和數(shù)據(jù)獲取。有機玻璃面板可以懸掛在墻壁上或者安放在實驗平臺附帶的金屬支架上。多個面板可以自由組合,方便運輸和網(wǎng)絡(luò)規(guī)模的擴充。實驗平臺的節(jié)點柜如圖6.1所示。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 5050圖6.1 節(jié)點柜第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 51 51GreenOrbs無線傳感器網(wǎng)絡(luò)實驗平臺的設(shè)計目標(biāo)是為大規(guī)模自組織網(wǎng)絡(luò)的協(xié)議及應(yīng)用開發(fā)提供便利的測試環(huán)境,同時可作為物聯(lián)網(wǎng)相關(guān)課程的教學(xué)實驗系統(tǒng)。1功能
42、特點功能特點GreenOrbs無線傳感器網(wǎng)絡(luò)實驗平臺的功能特點如下:(1) 網(wǎng)絡(luò)規(guī)??蓜討B(tài)調(diào)整,實驗人員可根據(jù)實驗要求靈活快捷地增加和減少節(jié)點數(shù)量,目前可支持多達150個節(jié)點的傳感器節(jié)點矩陣。(2) 實驗平臺支持程序的自動批量燒錄,可為實驗提供很大的便利。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 5252(3) 實驗平臺具備節(jié)點位置自動識別功能,實驗人員可對指定位置節(jié)點進行操作。(4) 實驗平臺為節(jié)點提供了電池和USB接口兩種供電方式。(5) 實驗平臺可對網(wǎng)絡(luò)拓?fù)溥M行在線控制。(6) 除無線通信之外,實驗平臺能方便地通過USB接口獲取節(jié)點數(shù)據(jù),為程序調(diào)試和其他科研教學(xué)活動提供了強有力的支
43、持。(7) GreenOrbs物聯(lián)網(wǎng)實驗室解決方案提供了豐富的軟件工具和高效的開發(fā)測試環(huán)境,可顯著加快傳感器網(wǎng)絡(luò)通信協(xié)議開發(fā)、系統(tǒng)設(shè)計和應(yīng)用研究進程。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 5353(8) GreenOrbs物聯(lián)網(wǎng)實驗室解決方案附帶一系列無線傳感網(wǎng)絡(luò)的實例、演示程序和開發(fā)教程,可為物聯(lián)網(wǎng)相關(guān)課程的教學(xué)工作提供幫助。(9)GreenOrbs物聯(lián)網(wǎng)實驗室解決方案從物聯(lián)網(wǎng)四層結(jié)構(gòu)對高校物聯(lián)網(wǎng)實驗室建設(shè)給出了合理性的建議,采用“層階式”教學(xué)方式,強調(diào)學(xué)生的設(shè)計、創(chuàng)新及實踐能力,培養(yǎng)物聯(lián)網(wǎng)工程專業(yè)的高級人才。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 54542平臺方案平臺方
44、案GreenOrbs無線傳感器網(wǎng)絡(luò)實驗平臺支持多達150個節(jié)點的1510矩陣。所有節(jié)點固定在一塊3m4.5m有機玻璃上,通過USB線連接到一臺PC。節(jié)點間水平和垂直距離均為20cm。節(jié)點數(shù)量和網(wǎng)絡(luò)拓?fù)淇梢愿鶕?jù)實驗需求動態(tài)調(diào)整。GreenOrbs實驗平臺服務(wù)器端采用開源的Linux操作系統(tǒng),用戶能夠根據(jù)自己的需求選用大量的開源軟件或者根據(jù)自己的需求自由開發(fā)新的工具。節(jié)點采用TinyOS 2.x和NesC 編譯工具。TinyOS是為傳感器網(wǎng)絡(luò)節(jié)點而設(shè)計的一個事件驅(qū)動的操作系統(tǒng)。NesC是對C 的擴展,它基于體現(xiàn)TinyOS的結(jié)構(gòu)化概念和執(zhí)行模型而設(shè)計。GreenOrbs實驗平臺支持現(xiàn)有的大量Tin
45、yOS和NesC開發(fā)工具。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 5555GreenOrbs實驗平臺提供自動、靈活的節(jié)點軟件批量并行燒錄工具。該工具能自動識別各個節(jié)點在平臺上的物理位置并自動實現(xiàn)和管理節(jié)點ID與物理位置之間的映射關(guān)系。在代碼燒錄過程中,可以根據(jù)需求對任意指定的多個節(jié)點并行燒入不同的代碼,極大地縮短軟件燒錄時間。GreenOrbs實驗平臺支持實時的大批量實驗數(shù)據(jù)收集。在實驗過程中,傳感器節(jié)點產(chǎn)生的各種實驗和監(jiān)控數(shù)據(jù)能夠通過USB端口將實驗數(shù)據(jù)實時發(fā)送到PC端。在PC端,GreenOrbs實驗平臺能夠自動地將節(jié)點產(chǎn)生的數(shù)據(jù)按照實驗要求存儲在PC中。在試驗過程中,研究人員能夠
46、隨時分析實驗數(shù)據(jù)和了解試驗進展。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 56561) 硬件方案GreenOrbs實驗平臺主要選用如下硬件模塊: GF-100傳感器節(jié)點(基本模塊); GF-103傳感器節(jié)點(基本模塊、溫濕度傳感器、光照傳感器、GPS); GF-103E傳感器節(jié)點(基本模塊、溫濕度傳感器、光照傳感器、GPS、封裝套件); GC-203E傳感器節(jié)點(基本模塊、增強處理模塊、溫濕度傳感器、光照傳感器、CO2傳感器); 實驗床及平臺支持移動裝置; 基站。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 57572) 軟件方案Green Orbs實驗平臺主要選配如下軟件模塊: Li
47、nux下的TinyOS開發(fā)環(huán)境; 實驗平臺驅(qū)動配置軟件工具包; 實驗平臺工具軟件套裝(包括傳感器自動定位和程序燒錄工具,支持定點燒錄和批量燒錄); 物聯(lián)網(wǎng)示范系統(tǒng)演示軟件套裝; 傳感器網(wǎng)絡(luò)實驗數(shù)據(jù)分析和演示工具; 物聯(lián)網(wǎng)和傳感器網(wǎng)絡(luò)實驗課程教學(xué)管理軟件。3) 傳感器節(jié)點傳感器節(jié)點GF-103/GF-103E、GC-203E的主要技術(shù)性能指標(biāo)如表6.1所示。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 5858表表6.1 傳感器節(jié)點的主要技術(shù)性能指標(biāo)傳感器節(jié)點的主要技術(shù)性能指標(biāo) 第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 59596.3.2 TinyOS操作系統(tǒng)在無線傳感器網(wǎng)絡(luò)中的應(yīng)用實踐
48、操作系統(tǒng)在無線傳感器網(wǎng)絡(luò)中的應(yīng)用實踐1簡單簡單TinyOS程序程序通過設(shè)計實現(xiàn)單個傳感器節(jié)點程序的LED亮燈的程序,初步了解如何編譯及燒錄簡單嵌入式NesC程序,并了解典型NesC的程序結(jié)構(gòu)及語法。1) 編譯及運行示例程序首先,將telosb節(jié)點連接到PC的USB接口后,運行以下命令查看連接情況:$ motelistReference Device Description- - -M4AP1122 /dev/ttyUSB0 Sentilla tmote sky第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 6060這表示telosb節(jié)點成功連接到PC,并且設(shè)備端口號為/dev/ttyUSB0。
49、運行以下編譯燒錄命令:$make telosb install如果沒有提示錯誤,并且節(jié)點上的LED開始有規(guī)律地閃爍,那么表示程序編譯并且燒錄成功。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 61 612) 程序結(jié)構(gòu)說明每一個nesC程序都是由若干組件(Component)組成的。組件有兩種類型,一種是模塊(Module),另一種是配置(Configuration)。配置文件的作用是表明組件之間的關(guān)系。模塊文件的作用是將程序的具體實現(xiàn)放在其中。此外,每個程序都需要一個頂層的配置文件,它是用程序名命名的。例1 示例Blink程序:程序由一個模塊文件(BlinkC.nc)和一個配置文件(Blin
50、kAppC.nc) 兩個組件組成。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 6262下面是BlinkAppC.nc的源代碼:configuration BlinkAppC implementation components MainC, BlinkC, LedsC; components new TimerMilliC() as Timer0;components new TimerMilliC() as Timer1; components new TimerMilliC() as Timer2; BlinkC - MainC.Boot; BlinkC.Timer0 - Timer0;
51、 BlinkC.Timer1 - Timer1; BlinkC.Timer2 - Timer2; BlinkC.Leds - LedsC; 第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 6363這表明這是一個名為BlinkAppC的配置。在implementation關(guān)鍵字后面的括號內(nèi)是配置的具體實現(xiàn)。components關(guān)鍵字后面表明了這個配置文件所引用的組件,在這里分別是Main、BlinkC、LedsC以及三個TimerMilliC組件。最后五行表明了各組件間的Provider和User的關(guān)系。A-B表示了一種關(guān)系,其中A為使用方(User),而B為提供方(Provider)。命令(C
52、ommand)是接口提供方已經(jīng)實現(xiàn)的函數(shù)。事件(Event)是需要接口使用方實現(xiàn)的函數(shù)。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 6464BlinkC.nc的源代碼:module BlinkC uses interface Timer as Timer0; uses interface Timer as Timer1; uses interface Timer as Timer2; uses interface Leds; uses interface Boot; implementation / implementation code omitted 第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)
53、建及應(yīng)用實踐 6565第一行內(nèi)容表明這是一個名為BlinkC的module,而后括號中的內(nèi)容表明了該module使用的接口(interface)。注意:這個module沒有提供接口。由于使用方必須實現(xiàn)接口中的event函數(shù),因此我們可以看到該文件中的implement中包含了初始化Boot.booted,以及三個Timer時的event函數(shù)的具體實現(xiàn)。在每個Timer的觸發(fā)event函數(shù)內(nèi)容中寫明了其需要觸發(fā)的內(nèi)容。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 66662TinyOS執(zhí)行模型執(zhí)行模型典型的傳感器節(jié)點程序可能同時包含同步處理與異步處理過程。本小節(jié)通過介紹TinyOS的執(zhí)行模型來
54、實現(xiàn)程序的異步處理。1) 同步及異步處理原理前面的程序都是同步運行處理,只單一地執(zhí)行上下文,是非搶占式的方式。同步運行處理有利于TinyOS的調(diào)度,在使得RAM使用最小化的同時讓同步代碼盡可能地簡單。缺點是從開始運行一直占用CPU直到運行完畢為止,期間其他同步代碼沒有任何運行的機會,從而嚴(yán)重影響系統(tǒng)的響應(yīng)性。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 6767非搶占式的同步代碼在大計算量的情況下可能會遇到一些問題,因此,就需要將大計算量的代碼分割成若干小的部分,每次只執(zhí)行一小部分,并且當(dāng)一個組件需要做某件事情時,可以稍后再做。在TinyOS中,對計算進行延遲,直到計算所需要的條件都滿足時再
55、開始任務(wù)(Task)是應(yīng)用程序中通用的“后臺”處理方式。一個任務(wù)就是一個函數(shù),它告訴TinyOS可以在稍晚時候進行運算,而不是立刻執(zhí)行。在傳統(tǒng)操作系統(tǒng)(Linux)中與之最接近的概念是中斷閥門和延遲程序調(diào)用。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 68682) 同步阻塞例子說明例2 BlinkTask1例子。event void Timer0.fired() uint32_t i; dbg(“BlinkC”, “Timer 0 fired %s.n”,sim_time_string(); for(i=0;inodeid = TOS_NODE_ID; btrpkt-counter = c
56、ounter; if (call AMSend.send(AM_BROADCAST_ADDR, &pkt, sizeof(BlinkToRadioMsg)=SUCCESS) busy = TRUE; 第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 8282消息發(fā)送完畢后,清除忙標(biāo)志位:event void AMSend.sendDone(message_t* msg, error_t error) if (&pkt = msg) busy = FALSE; 要為每個提供接口的組件添加組件聲明,其中AM_BLINKTORADIO參數(shù)表明AMSenderC的AM類型。在頭文件中有定
57、義:implementation . components ActiveMessageC; components new AMSenderC(AM_BLINKTORADIO); . 第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 8383然后,將接口的提供方和使用方連接起來:implementation . App.Packet - AMSenderC; App.AMPacket - AMSenderC; App.AMSend - AMSenderC; App.AMControl - ActiveMessageC; 第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 84843) 消息接收接收到消
58、息后,首先解析出消息中的計數(shù)器,然后計數(shù)器按照這個計數(shù)值的低三位亮燈,具體過程如下:(1) 接口聲明。使用Receive接口來接收包。在BlinkToRadioC.nc文件中添加以下聲明: module BlinkToRadioC . uses interface Receive; 第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 8585(2) 接收邏輯。接收邏輯實現(xiàn)接口Receive.receive事件處理。event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) if (len = sizeof
59、(BlinkToRadioMsg) BlinkToRadioMsg* btrpkt = (BlinkToRadioMsg*)payload; call Leds.set(btrpkt-counter); return msg; 第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 8686(3) 組件聲明。添加Receive接口對應(yīng)的組件聲明:implementation . components new AMReceiverC(AM_BLINKTORADIO); . 4) 程序測試分別使用make telosb install,1和make telosb install,2燒錄兩個節(jié)點。通電后查看
60、效果。當(dāng)按住某一個節(jié)點的RESET鍵時,另一個節(jié)點的讀數(shù)應(yīng)當(dāng)停止。第6章 無線傳感器網(wǎng)絡(luò)開發(fā)環(huán)境的構(gòu)建及應(yīng)用實踐 87874PC串口通信串口通信通過串口連接,PC可以從網(wǎng)絡(luò)搜集其他節(jié)點的數(shù)據(jù),也可以發(fā)送數(shù)據(jù)或者命令到節(jié)點,實現(xiàn)節(jié)點和PC間的串口雙向通信,因此,串口通信編程是無線傳感器網(wǎng)絡(luò)中的重要內(nèi)容。下面介紹使用MIG工具和SerialForwarder修改BlinkToRadio程序,使用MsgReader讀取MIG創(chuàng)建的BlinkToRadioMsg的Java對象內(nèi)容。1) TestSerial例子程序節(jié)點與PC之間的通信在TinyOS中被抽象為數(shù)據(jù)包源(Packet Source)。一個數(shù)據(jù)包源就是一種與節(jié)點
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 填報志愿合同書范本
- 削鉛筆機產(chǎn)品供應(yīng)鏈分析
- 女式開襟短上衣產(chǎn)品供應(yīng)鏈分析
- 多元文化節(jié)慶行業(yè)營銷策略方案
- 5G智能水務(wù)行業(yè)相關(guān)項目經(jīng)營管理報告
- 4.3誠實守信 (課件) -2024-2025學(xué)年統(tǒng)編版道德與法治 八年級 上冊
- 磁鐵市場分析及投資價值研究報告
- 2.2合理利用網(wǎng)絡(luò)(1) (課件) -2024-2025學(xué)年統(tǒng)編版道德與法治 八年級 上冊
- 智能手機用穩(wěn)定器產(chǎn)品供應(yīng)鏈分析
- 錄像帶發(fā)行行業(yè)相關(guān)項目經(jīng)營管理報告
- 《汽車檢測與診斷技術(shù)》教學(xué)設(shè)計教案
- 電氣工程及其自動化職業(yè)規(guī)劃課件
- 人工智能驅(qū)動的智能教育教學(xué)平臺服務(wù)合同
- GB/T 19228.1-2024不銹鋼卡壓式管件組件第1部分:卡壓式管件
- 第四單元基礎(chǔ)測試卷-2024-2025學(xué)年統(tǒng)編版語文六年級上冊
- 單位消防安全管理制度
- 地理氣溫的變化與分布課件-2024-2025學(xué)年七年級地理上學(xué)期(2024)人教版
- 人教版2024七年級上冊英語各單元單詞短語句型匯編
- 2024年人教版九年級英語單詞默寫單(微調(diào)版)
- 2024屆高考專題復(fù)習(xí):思辨類作文專題復(fù)習(xí)
- 人教版小學(xué)英語單詞表(完整版)
評論
0/150
提交評論