




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第4章 平 臺 移 植,4.1 移植概述 4.2 make系統(tǒng) 4.3 support目錄 4.4 tos目錄 4.5 doc目錄 4.6 apps目錄,4.1 移植概述4.1.1 名詞概念在具體移植之前,需要了解以下名詞的概念:平臺(platform):是硬件設(shè)備以及運(yùn)行在硬件設(shè)備上的可以給用戶提供二次開發(fā)功能的軟件和硬件總稱。發(fā)布平臺:可以壓縮打包的整個(gè)目錄文件總稱,有時(shí)也簡稱為平臺,用戶解壓或直接復(fù)制后,在安裝有TinyOS的系統(tǒng)下即可以進(jìn)行TinyOS應(yīng)用程序開發(fā)。硬件平臺:發(fā)布平臺所支持的硬件總稱,包括核心CPU和芯片外圍的硬件資源。芯片(MCU):硬件平臺的核心CPU,如CC253
2、0。,nesC編譯器:TinyOS提供的可以把nc文件編譯成C語言文件的工具程序。編譯工具鏈:也稱為make系統(tǒng),是make工具、Makefile腳本文件、nesC編譯器等共工具的總稱。Makefile:包括直接以Makefile文件命名以及Makefile格式的可以被make工具解析執(zhí)行的腳本文件總稱。本地編譯器:可以將C文件編譯成硬件平臺可執(zhí)行代碼的工具,一般由芯片廠商提供。程序燒寫器:將可執(zhí)行代碼下載至硬件平臺的工具,一般由芯片廠商提供。以上概念之間的關(guān)系如圖4-1所示。從圖4-1可以看出,本地編譯器和程序燒寫器一般不包含在平臺中,一般是由芯片廠商或第三方廠商提供,如本書使用的IAR F
3、or 51是由IAR Systems公司提供的。,圖4-1 與TinyOS移植相關(guān)的概念,4.1.2 平臺目錄官方推薦使用“新的目錄”作為新平臺的發(fā)布目錄(調(diào)試和發(fā)布安裝都在Linux系統(tǒng)的“/opt/”目錄下),并且參考TinyOS原來的目錄建立發(fā)布目錄。用戶在新平臺上進(jìn)行開發(fā),其實(shí)就是在這個(gè)發(fā)布目錄下工作。一般情況下,一個(gè)新平臺的目錄結(jié)構(gòu)及必要的文件如圖4-2所示。,圖4-2 新平臺目錄結(jié)構(gòu)及必要的文件,4.1.3 平臺建立實(shí)例1. 建立cctinyos目錄在windows下打開cygwin的安裝目錄,然后在“cygwinopt”目錄下建立cctinyos目錄(這里以平臺名作為發(fā)布目錄名)
4、,結(jié)果如圖4-3所示。2. 建立平臺目錄框架在“cctinyos”目錄下分別建立“apps、doc、support、tos”子目錄,結(jié)果如圖4-4所示。,圖4-3 建立cctinyos目錄,圖4-4 cctinyos平臺目錄框架,4.2 make系統(tǒng)TinyOS程序的編譯使用的是make工具,make工具通過解析Makefile文件(以及符合Makefile格式的腳本文件)查找參與編譯的文件并調(diào)用nesC編譯器,并進(jìn)一步調(diào)用本地編譯器和燒寫器完成TinyOS程序的編譯鏈接和下載執(zhí)行工作(關(guān)于make工具及Makefile文件的編寫方法請參考相關(guān)教材或參考本書系列教材Linux操作系統(tǒng)教程)。本
5、小節(jié)淺析TinyOS的make系統(tǒng)工作原理,以便于理解TinyOS的移植過程。4.2.1 make工作流程TinyOS的make系統(tǒng)的工作流程如圖4-5所示。,圖4-5 make工作流程,上述編譯過程涉及到以下幾個(gè)重要文件:Makefile文件:位于當(dāng)前應(yīng)用程序目錄下,是make工具首先要解析執(zhí)行的文件。Makerules文件:TinyOS系統(tǒng)提供的系統(tǒng)Makefile文件,一般位于“tinyos-2.x/support/ make/”目錄內(nèi)。平臺名.target文件:位于發(fā)布平臺目錄的“support/make/”目錄下,以平臺名命名的文件(如cc2530.target),用于建立與平臺相關(guān)
6、的變量,并且提供平臺名和編譯生成目標(biāo)。,芯片名.rules文件:位于發(fā)布平臺目錄的“support/make/芯片名/”目錄下,是make工具要解析執(zhí)行的主要用戶級Makefile文件,具體實(shí)現(xiàn)真正的編譯調(diào)用和程序燒寫、下載調(diào)用。.platform文件:位于發(fā)布平臺目錄的“tos/platform/芯片名/”目錄下,用于指定要參與編譯的TinyOS和發(fā)布平臺目錄,文件內(nèi)容包含類似于C語言下的“#include”預(yù)處理語句。,4.2.2 系統(tǒng)環(huán)境變量1. MAKERULES變量根據(jù)前述make系統(tǒng)工作流程可知,所有的TinyOS應(yīng)用程序目錄下都必須有一個(gè)Makefile文件。該文件由命令行的“m
7、ake 平臺名”命令觸發(fā)make工具解析執(zhí)行,其內(nèi)容一般如代碼4-1所示?!敬a4-1】 MakefileCOMPONENT=頂層配件名include $(MAKERULES)其中,TinyOS規(guī)定,變量“MAKERULES”是由用戶作為環(huán)境變量定義,并且指向TinyOS系統(tǒng)提供的Makerules文件。,2. 環(huán)境變量設(shè)置腳本一般情況下,為方便用戶使用,在平臺目錄下提供一個(gè)shell腳本文件,在該文件中定義類似“MAKERULES”的環(huán)境變量。該shell腳本文件在Linux系統(tǒng)啟動(或Cygwin啟動)時(shí)由Linux系統(tǒng)自動調(diào)用,以自動為TinyOS系統(tǒng)設(shè)置好相應(yīng)的環(huán)境變量。腳本文件中至少
8、要定義以下三個(gè)變量:TOSDIR:指向官方TinyOS安裝目錄,如“/opt/tinyos-2.x”。TOSMAKE_PATH:指向發(fā)布平臺的“support/make”目錄,如“/opt/mytinyos/ supprot/make”。MAKERULES:指向官方TinyOS安裝目錄下的“Makerules”文件,如“/opt/tinyos-2.x/ support/make/Makerules”。以下shell腳本文件是本書配套平臺mytinyos的環(huán)境變量腳本,如示例4-1所示。,【示例4-1】 myenv.sh# tinyos envsexport TOSROOT=/opt/tinyo
9、s-2.xexport DHROOT=/opt/mytinyosexport TOSMAKE_PATH=$TOSMAKEPATH $DHROOT/support/makeif ! -d $TOSROOT ; then echo TOSROOT $TOSROOT does not exist, FAIL exit 1else echo TOSROOT=$TOSROOT fi,export TOSDIR=$TOSROOT/tosexport MAKERULES=$TOSROOT/support/make/Makerules#顯示設(shè)置好的環(huán)境變量echo TOSDIR=$TOSDIRecho MAK
10、ERULES=$MAKERULESecho TOSMAKE_PATH=$TOSMAKE_PATH#告訴用戶,設(shè)置完畢echo Set mytinyos env SUCCESS!,3. 自動運(yùn)行腳本為了讓建立好的shell腳本文件隨系統(tǒng)啟動時(shí)自動運(yùn)行,可以在Linux系統(tǒng)的啟動腳本中增加命令進(jìn)行運(yùn)行。對于Cygwin,可以在其“/home/用戶名/.bashrc”腳本中增加命令,如圖4-6所示。,圖4-6 增加命令以自動運(yùn)行腳本,然后,當(dāng)啟動Cygwin時(shí)可以看到如圖4-7所示信息。,圖4-7 cygwin啟動時(shí)的顯示信息,4.2.3 啟動腳本實(shí)例本小節(jié)內(nèi)容用于實(shí)現(xiàn)任務(wù)描述4.D.2,在4.D.
11、1的基礎(chǔ)上,建立cctinyos平臺的啟動腳本文件,并設(shè)置為自動啟動。1. 建立啟動腳本文件參考前述mytinyos平臺的腳本文件,建立cctinyos平臺的環(huán)境變量設(shè)置腳本文件,并保存于“opt/cctinyos/”目錄下。其內(nèi)容如描述4.D.2 cctinyos.env所示。,【描述4.D.2】 cctinyos.env# Script to set cctinyos env then echo TOSROOT $TOSROOT does not exist, FAIL exit 1else echo TOSROOT=$TOSROOT fiexport TOSDIR=$TOSROOT/to
12、sexport MAKERULES=$TOSROOT/support/make/Makerulesecho TOSDIR=$TOSDIRecho MAKERULES=$MAKERULESecho TOSMAKE_PATH=$TOSMAKE_PATHecho Set cctinyos env SUCCESS!,2. 設(shè)置為自動運(yùn)行修改Cygwin下的“/home/administrator/.bashrc”的腳本文件,在文件的末尾修改內(nèi)容如描述4.D.2 .bashrc所示?!久枋?.D.2】 .bashrc#注釋掉以下兩行#source /opt/mytinyos/myenv.sh#cd /o
13、pt/mytinyos/apps#添加以下兩行代碼source /opt/cctinyos/cctinyos.envcd /opt/cctinyos/apps,3. 重新啟動cygwin運(yùn)行結(jié)果如圖4-8所示。,圖4-8 cctinyos啟動,4.3 support目錄“平臺目錄名/support/”目錄用于存放為編譯工具鏈提供支持的編譯腳本文件。一般情況它只有一個(gè)make子目錄,按照官方要求make目錄有以下兩部分內(nèi)容:“平臺名.target”文件。以平臺的芯片命名的子目錄。,4.3.1 平臺名.target文件“平臺名.target”簡稱為“.target”文件,按照官方要求,其為固定格式
14、的Makefile腳本,如代碼4-2所示?!敬a4-2】 平臺名.target文件PLATFORM = 平臺名ifdef PLATFORMPFLAGS += -D_$(PLATFORM)_=1endif$(call TOSMake_include_platform,芯片名)平臺目標(biāo): $(BUILD_DEPS):,其中,上述代碼中的黑體字由用戶根據(jù)需要替換為自己平臺的內(nèi)容:平臺名:也稱為平臺代號,賦值給PLATFORM變量,該變量可以在后面所講的“芯片名.rules”文件中引用。芯片名:是平臺所運(yùn)行的MCU名稱,注意它的名字一定要與下面要講的芯片目錄名字一致。平臺目標(biāo):是make工具要生成的最
15、終目標(biāo),一般與“平臺名”一致。另外:BUILD_DEPS:是平臺目標(biāo)的依賴,該變量可以被后面的.rules、docs.extra和install.extra文件定義,以提供給make系統(tǒng)靈活實(shí)現(xiàn)用戶的目標(biāo)(nesC編譯、本地編譯、程序燒寫等)。,“.target”文件定義好后,將對用戶在新平臺上使用make工具編譯程序時(shí)產(chǎn)生以下兩個(gè)直接影響:調(diào)用make工具編譯程序時(shí)的命令要使用“make 平臺目標(biāo)”。make工具調(diào)用相關(guān)腳本自動尋找“芯片名”目錄下的“芯片名.rules”文件并解析執(zhí)行。例如,建立以CC2530為平臺名,芯片名也為CC2530的.target文件,則名字是cc2530.tar
16、get,且內(nèi)容如示例4-2所示。,【示例4-2】 cc2530.targetPLATFORM = cc2530ifdef PLATFORMPFLAGS += -D_$(PLATFORM)_=1endif$(call TOSMake_include_platform,cc2530)cc2530: $(BUILD_DEPS):,4.3.2 芯片目錄芯片目錄為make工具提供詳細(xì)的編譯規(guī)則。根據(jù)上述內(nèi)容可知,芯片目錄的名字要與.target文件中的“芯片名”一致,且主要含以下文件:“芯片名.rules”文件:是make工具要調(diào)用的主要編譯腳本,該文件實(shí)際調(diào)用nesC的編譯器對nesC程序進(jìn)行編譯。d
17、ocs.extra文件:用于提供對“make 平臺名 docs”命令的支持,以生成可視化組件視圖。若沒有該文件,make工具根據(jù)系統(tǒng)提供的腳本自動調(diào)用系統(tǒng)目錄下的docs.extra文件。insall.extra文件:用于提供對“make 平臺名 install”的支持,以實(shí)現(xiàn)自動將生成的nesC程序編譯成硬件平臺二進(jìn)制可執(zhí)行代碼,并下載至目標(biāo)平臺內(nèi)。其他腳本文件:一般是.rules文件調(diào)用的其他輔助腳本。,4.3.3 芯片名.rules文件1. .rules文件的內(nèi)容“芯片名.rules”文件簡稱“.rules”文件,本質(zhì)上是一個(gè)Makefile文件腳本,被前述“平臺名.target”文件調(diào)
18、用而后由make解析執(zhí)行。它主要完成以下工作:定義指向“參與編譯的路徑”變量以傳遞給nesC編譯器,讓編譯器可以找到程序所用的合適的組件和接口。調(diào)用nesC編譯器編譯nesC程序?yàn)镃程序。調(diào)用平臺硬件所需要的本地C語言編譯器編譯硬件可執(zhí)行的二進(jìn)制代碼。調(diào)用平臺硬件所需要的燒寫程序?qū)⒖芍付ㄐ写a下載至硬件。本書配套平臺mytinyos的cc2530.rules的文件內(nèi)容如示例4-3所示。,【示例4-3】 cc2530.rules#-*-Makefile-*- vim:syntax=make# In order to exclude /usr/lib/ncc/, directly call to
19、nesc1# 定義變量NCC = /usr/lib/ncc/nesc1LIBS = -lmBUILDDIR ?= build/$(PLATFORM)APP_C ?= $(BUILDDIR)/app.cIAR_C ?= $(BUILDDIR)/app-iar.cCC2530_MAKEDIR ?= $(DHROOT)/support/make/cc2530CC2530_PLATFORMDIR ?= $(DHROOT)/tos/platforms/cc2530,#定義BUILD_DEPS變量,與CC2530.target文件中目標(biāo)依賴聯(lián)系起來ifndef BUILD_DEPS ifeq ($(fil
20、ter $(BUILDLESS_DEPS),$(GOALS),) BUILD_DEPS = exe endifendif#為nesC編譯器的參數(shù)指定路徑值PFLAGS += -I$(CC2530_PLATFORMDIR)PFLAGS += -I$(CC2530_MAKEDIR)/incPFLAGS += -I$(CC2530_PLATFORMDIR)/preinc,#為nesC編譯器的參數(shù)指定路徑值CFLAGS+= -U_BLOCKS_CFLAGS+= -fnesc-include=deputy_nodeputy -fnesc-include=nesc_nx -fnesc-include=to
21、sCFLAGS+= -fnesc-separator=_ -DNESC=134 -Wnesc-all#調(diào)用perl腳本引入要參與編譯的系統(tǒng)路徑CFLAGS+=$(shell perl $(CC2530_MAKEDIR)/nescarg.pl),上述腳本代碼涉及到以下幾個(gè)make目標(biāo):tosimage:依賴于exe和imgprog目標(biāo)實(shí)現(xiàn)程序編譯和下載。exe:依賴于exe0目標(biāo)實(shí)現(xiàn)程序nesC程序編譯。exe0:通過(依賴于)builddir目標(biāo)實(shí)現(xiàn)編譯目錄的建立,并且通過命令實(shí)現(xiàn)nesC程序編譯。builddir:建立編譯目錄。imgprog:本地編譯,且下載程序至硬件。以上目標(biāo)中,exe0
22、、builddir和impprog是基本目標(biāo),tosimage和exe是通過基本目標(biāo)實(shí)現(xiàn)自己。這種目標(biāo)的嵌套機(jī)制,可以靈活的實(shí)現(xiàn)組合功能。,2. 輔助腳本文件從上述代碼可以看出,cc2530.rules文件引入以下兩個(gè)新的腳本文件:nescarg.pl:perl腳本,分析處理.platform文件以引入nesC指向系統(tǒng)目錄的編譯路徑。iar.py:python腳本,主要處理nesC編譯形成的C語言文件中不符合C語言語法的注釋。關(guān)于perl和python腳本的編寫請參考相關(guān)資料。,3. nesC編譯器按照TinyOS官方的推薦,nesC編譯器主要是“/usr/bin”目錄下的ncc和nescc兩
23、個(gè)程序。用戶在使用的時(shí)候應(yīng)該使用ncc,然后ncc的部分編譯工作通過調(diào)用nescc完成。需要注意的是,上述代碼中用到的nesC編譯器是“/usr/lib/ncc”目錄下的nesc1程序。原因是本書用到的本地編譯器是IAR,而ncc編譯器將產(chǎn)生一些IAR不支持的數(shù)據(jù)類型(如64位)和零長度的數(shù)組等。,4.3.4 docs.extra文件1. nesdoc命令“docs.extra”文件的主要內(nèi)容就是調(diào)用nesdoc程序?yàn)槌绦蛏煽梢暬晥D,關(guān)于nesdoc命令的使用可以在cygwin的命令行上運(yùn)行“man nesdoc”命令查看其使用說明,如圖4-9所示。,圖4-9 nesdoc的使用說明,2.
24、 docs.extra文件內(nèi)容在docs.extra文件中要通過重新定義BUILD_DEPS變量作為新的make目標(biāo)(與CC2530.target文件中目標(biāo)依賴聯(lián)系起來),并且在新目標(biāo)的命令中調(diào)用nesdoc。本書配套平臺mytinyos的docs.extra的文件內(nèi)容如示例4-4所示。,當(dāng)用戶在應(yīng)用程序目錄下使用“make 平臺名 docs”命令時(shí),通過Makerules和. target文件最終執(zhí)行docs.extra文件中的上述nesdoc命令為程序生成一系列的.html文件(位于平臺目錄下的“doc/nesdoc/應(yīng)用程序名”目錄內(nèi)),用瀏覽器打開目錄下的“index.html”文件即
25、可瀏覽程序的可視化組件視圖。注意,由于該文件重新定義了“BUILD_DEPS”變量且指向了本文件中的docsx_目標(biāo),因此make系統(tǒng)將不再解析執(zhí)行cc2530.rules。,4.3.5 install.extra文件與“docs.extra”腳本類似,“install.extra”文件也要通過重新定義BUILD_DEPS變量作為新的make目標(biāo)(與CC2530.target文件中目標(biāo)依賴聯(lián)系起來),以實(shí)現(xiàn)nesC程序本地編譯以及下載。本書配套平臺mytinyos的install.extra的文件內(nèi)容如示例4-5所示。【示例4-5】 install.extra#-*Makefile-*- vi
26、m:syntax=makeBUILD_DEPS = tosimage注意,上述“tosimage”指向了本文件中沒有的“tosimage”目標(biāo),make系統(tǒng)自動尋找到前述cc2530.rules中的“tosimage”目標(biāo)。,4.3.6 移植實(shí)例本小節(jié)內(nèi)容用于實(shí)現(xiàn)任務(wù)描述4.D.3,在4.D.2的基礎(chǔ)上,建立cctinyos平臺support目錄里的內(nèi)容,要求基于芯片CC2530。1. 建立support目錄的子目錄在“opt/cctinyos/support/”目錄下建立“make/cc2530”子目錄,結(jié)果如圖4-10所示。,圖4-10 support子目錄建立,2. 建立cctinyos
27、.target文件在“opt/cctinyos/support/make/”目錄下建立cctinyos.target文件,其內(nèi)容如描述4.D.3 cctinyos.target所示。,【描述4.D.3】 cctinyos.target#cctinyos.target PLATFORM = cctinyosifdef PLATFORMPFLAGS += -D_$(PLATFORM)_=1endif$(call TOSMake_include_platform,cc2530)cctinyos: $(BUILD_DEPS):,3. 使用null程序測試.target文件官方推薦用戶在移植過程中使用n
28、ull程序簡單測試移植成功與否,該程序位于TinyOS的安裝目錄下的“apps”目錄下。將“opt/tinyos-2.x/apps/”下的“null”目錄復(fù)制到“opt/cctinyos/apps/”目錄下,然后在Cygwin命令行上運(yùn)行描述4.D.3編譯null程序所示命令。【描述4.D.3】 編譯null程序$ cd null $ make cctinyos指令執(zhí)行結(jié)果如果沒有錯(cuò)誤提示,則表明上述操作步驟是成功的,如圖4-11所示。,圖4-11 編譯null程序,4. 建立cc2530.rules文件將“mytinyos/support/make/cc2530/”目錄下的cc2530.ru
29、les文件拷貝到“cctinyos/ support/make/cc2530/”目錄下,文件內(nèi)容如描述4.D.3 cc2530.rules所示,其中黑體加粗的部分是針對cctinyos平臺的修改。,【描述4.D.3】 cc2530.rules#-*-Makefile-*- vim:syntax=make# In order to exclude /usr/lib/ncc/, directly call to nesc1# (lots of IAR-NOT-SUPPORTED typedefs there, such as 64bit types, zero-length array etc.)
30、, # NCC = /usr/lib/ncc/nesc1LIBS = -lmBUILDDIR ?= build/$(PLATFORM)APP_C ?= $(BUILDDIR)/app.cIAR_C ?= $(BUILDDIR)/app-iar.cCC2530_MAKEDIR ?= $(CCROOT)/support/make/cc2530,CC2530_PLATFORMDIR ?= $(CCROOT)/tos/platforms/cc2530#本地編譯器路徑:注意要與本機(jī)IAR的安裝位置一致MCS51_IAR_PATH=/cygdrive/d/Program Files/IAR Systems
31、/Embedded Workbench 6.0 Evaluation/common/bin#燒寫器路徑:注意要與本機(jī)IAR的安裝位置一致RFPROG_PATH=/cygdrive/C/Program Files/Texas Instruments/SmartRF Flash Programmer,5. 建立輔助腳本文件拷貝“mytinyos/support/make/cc2530/”目錄下以下文件到“cctinyos/support/make/ cc2530/”目錄內(nèi):doc.extra:不是必須的,如果不需要對“make 平臺名 docs”命令提供支持,可以不提供該擴(kuò)展腳本。本例不提供該腳本
32、。iar.py:一般需要編寫此類文件,用于處理nesC編譯形成的C語言文件中不符合C語言語法的注釋。nescarg.pl:本例與mytinos平臺一樣使用的“nesc1”編譯器而不是傳統(tǒng)的“ncc”編譯器程序,所以需要此類文件輔助找到“.platform”文件。,install.extra:不是必須的,如果不需要將nesC程序下載到硬件平臺上,可以不提供該擴(kuò)展腳本。本例建議提供該腳本。Iar_TinyOS_Project.eww、Iar_TinyOS_Project.ewp:這兩個(gè)文件用于為用戶提供IAR工程模板實(shí)現(xiàn)本地化編譯。inc目錄:此目錄是C語言庫頭文件,一般要提供給用戶。其中,“ne
33、scarg.pl”文件需要稍加修改,代碼如描述4.D.3 nescarg.pl所示(黑體加粗后代碼是修改之后的)。,【描述4.D.3】 nescarg.pl#!/usr/bin/perl$TOSDIR = $ENV“TOSDIR” if defined($ENV“TOSDIR”);$CCROOT = $ENV“CCROOT” if defined($ENV“CCROOT”);$platform_dir = “$CCROOT/tos”;$platform_dh = “$CCROOT/tos/platforms/cc2530/.platform” ;$target=“cctinyos”;.,6.
34、測試移植結(jié)果繼續(xù)使用null程序測試移植結(jié)果,命令執(zhí)行情況如圖4-12所示。從圖4-12可以看出,“cc2530.rules”文件被make系統(tǒng)找到并解釋執(zhí)行,如“mkdir p build/cctinyos”命令已經(jīng)執(zhí)行,并且提示“platform.h”和“hardware.h”文件未找到(這兩個(gè)文件將在后面的例子中進(jìn)行移植)。,圖4-12 測試移植結(jié)果,4.4 tos目錄4.4.1 platforms目錄“tos/platforms/”目錄下存放的是平臺代碼,該目錄下的每個(gè)子目錄對應(yīng)一個(gè)硬件平臺,如果發(fā)布的平臺要同時(shí)對CC2530和CC2430提供支持,則該目錄下要分別建立CC2530和C
35、C2430子目錄。在移植時(shí)要把相應(yīng)硬件平臺的代碼放在該子目錄下,以便前述的.rules文件可以尋找到目錄下的代碼參與編譯。下面通過官方規(guī)定的組成平臺代碼的文件來了解一下平臺代碼的含義。平臺代碼至少要有以下文件組成:“.platform”文件:指定nesC編譯器要搜索的芯片驅(qū)動、射頻驅(qū)動、傳感器、網(wǎng)絡(luò)驅(qū)動等目錄,以及為TinyOS的任務(wù)調(diào)度器指定要使用的組件。,PlatformP.nc/PaltformC.nc組件文件:提供初始化接口,以初始化芯片、射頻、傳感器等。hardware.h文件:被tos/system/MainC.nc文件包含,用于定義一些與芯片相關(guān)的宏。platform.h文件:被
36、tos.h文件包含,主要用于定義實(shí)現(xiàn)系統(tǒng)啟動的“platform _bootstrap”宏。其他平臺文件:如ActiveMessageC(射頻收發(fā))、PlatformLedsC(LED控制)等組件。,1. .platform文件“.platform”文件只有擴(kuò)展名,該文件一般為固定格式(perl腳本),內(nèi)容由用戶根據(jù)需要修改。本書配套平臺mytinyos的“.platform”文件內(nèi)容如示例4-6所示?!臼纠?-6】 .platform# vim:syntax=perl#為nesC編譯器指定搜索路徑push( includes, qw(,%P/chips/cc2530 %P/chips/cc2
37、530/radio %P/chips/cc2530/timer %P/chips/cc2530/uart %P/chips/cc2530/net %P/chips/cc2530/net/types %P/chips/cc2530/net/interfaces %P/lib/rfxlink/layers %P/lib/rfxlink/util %P/lib/net/dh %P/lib/timer %P/lib/serial %P/lib/net %P/lib/net/ctp %P/lib/net/4bitle,%T/interfaces %T/types %T/system) );opts =
38、qw( -fnesc-no-debug);#通過命令行參數(shù)“-fnesc-scheduler”指定調(diào)度器要使用的組件(一般不需要修改)push opts,-fnesc-scheduler=TinySchedulerC,TinySchedulerC.TaskBasic,TaskBasic,TaskBasic,runTask,postTask if !$with_scheduler_flag;,上述代碼被前述“nescarg.pl”腳本解析,其中“%T”指TinyOS的安裝目錄(tinyos-2.x/tos);“%P”指“發(fā)布平臺/tos”目錄。用戶根據(jù)需要(如新增驅(qū)動目錄等)編輯上述形如“%P/
39、chips/cc2530”的目錄條。,2. PlatformP.nc/PaltformC.nc組件文件PlatformP和PlatformC組件提供Init接口的實(shí)現(xiàn),負(fù)責(zé)將系統(tǒng)啟動到可用狀態(tài),具體內(nèi)容一般包括時(shí)鐘校準(zhǔn)、I/O初始化或發(fā)布平臺特別要求的其他初始化工作等。PlatformC,是配件,用于輸出Init接口以供系統(tǒng)啟動代碼(RealMainP模塊)調(diào)用。PlatformP,是模塊,具體實(shí)現(xiàn)Init接口。本書配套平臺mytinyos的PlatformP和PlatformC組件代碼如示例4-7所示。,【示例4-7】 PlatformP.nc、PlatformC.nc/* * Platfo
40、rmC.nc */configuration PlatformC provides interface Init;implementation components PlatformP; Init = PlatformP.Init;,/* * PlatformP.nc */#include “cc2530.h”module PlatformP provides interface Init;implementation command error_t Init.init() return SUCCESS; ,3. hardware.h文件“hardware.h”文件一般通過包含一個(gè)芯片特定的頭
41、文件(如cc2530hardware.h文件,移植時(shí)需要用戶來實(shí)現(xiàn)),以定義一些與芯片相關(guān)的宏。本書配套平臺mytinyos的“hardware.h”文件代碼如示例4-8所示。,【示例4-8】 hardware.h#ifndef HARDWARE_H#define HARDWARE_H#include “cc2530hardware.h”#ifndef MHZ #define MHZ 16#endif,#ifndef PLATFORM_BAUDRATEenum PLATFORM_BAUDRATE = 57600L;#endif#endif,4. platform.h文件一般情況下,“platf
42、orm.h”文件首先包含芯片特定的頭文件,然后實(shí)現(xiàn)“platform_bootstrap”宏定義,該宏被系統(tǒng)的RealMainP模塊調(diào)用以啟動平臺。本書配套平臺mytinyos的“platform.h”文件代碼如示例4-9所示。,【示例4-9】 platform.h#include “stdio.h”#include “cc2530hardware.h”/* set clock to 32MHz */#define platform_bootstrap() CLKCONCMD = 0 x00; while (CLKCONSTA != 0 x00);,5. 其他平臺代碼主要是指一些與硬件接口層(HIL層)代碼,例如ActiveMessageC和PlatformLedsC組件等。,4.4.2 chips目錄“tos/chips/”目錄下按照芯片類型組織目錄存放芯片的驅(qū)動程序,如圖4-13所示是在Editplus軟件下看到的本書配
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 業(yè)主租賃車位合同范例
- 隧道爆炸施工方案
- 加盟店品牌授權(quán)合同范例
- 乙方終止房屋合同范例
- 基于多視角的人體三維重建及動作識別算法研究
- 水稻種子低溫萌發(fā)的QTL定位
- 中韓貿(mào)易合同范例
- 鄉(xiāng)鎮(zhèn)家具安裝合同范本
- 蘭溪裝飾合同范例
- 內(nèi)衣加盟合同范例
- 主要河流南、北方河流的不同特征主要湖泊
- 行進(jìn)間接單手低手投籃說課稿
- 寺院管理框架結(jié)構(gòu)圖PPT課件
- 單考單招數(shù)學(xué)公式總結(jié)
- 三打白骨精英文話劇劇本(原創(chuàng))
- 2019第五版新版PFMEA 注塑實(shí)例
- 李雁鳴循環(huán)理論
- 釩電池項(xiàng)目財(cái)務(wù)數(shù)據(jù)分析(范文模板)
- 電暈水測試液配方
- 日處理300t鮮奶的脫脂奶粉生產(chǎn)車間
- 工業(yè)鍋爐水處理系統(tǒng)調(diào)試報(bào)告
評論
0/150
提交評論