當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] TinyOS系統(tǒng)以其組件結(jié)構(gòu)模型、事件驅(qū)動(dòng)、并發(fā)型等優(yōu)點(diǎn)成為目前最受關(guān)注的無線傳感器網(wǎng)絡(luò)操作系統(tǒng)。但TinyOS不支持STM32和CC2 520芯片。因此在分析TinyOS基本原理、NesC編程語言實(shí)現(xiàn)機(jī)制及其編譯過程的

TinyOS系統(tǒng)以其組件結(jié)構(gòu)模型、事件驅(qū)動(dòng)、并發(fā)型等優(yōu)點(diǎn)成為目前最受關(guān)注的無線傳感器網(wǎng)絡(luò)操作系統(tǒng)。但TinyOS不支持STM32和CC2 520芯片。因此在分析TinyOS基本原理、NesC編程語言實(shí)現(xiàn)機(jī)制及其編譯過程的基礎(chǔ)上,介紹了基于STM32和CC2520TinyOS移植方法,完成了STM32的I/O組件、Timer組件、USART組件、SPI組件和CC2520芯片驅(qū)動(dòng)的移植。在實(shí)現(xiàn)CC2520的基本通信功能基礎(chǔ)上,實(shí)現(xiàn)簡(jiǎn)單MAC協(xié)議。最后測(cè)試了各組件的移植效果。實(shí)驗(yàn)測(cè)試結(jié)果表明,節(jié)點(diǎn)可以穩(wěn)定可靠地通信。


無線傳感器網(wǎng)絡(luò)(Wireless Sensor Network,WSN)是一種應(yīng)用相關(guān)的網(wǎng)絡(luò)。需要對(duì)某些操作系統(tǒng)進(jìn)行移植。本文采用TinyOS作為軟件平臺(tái),成功移植了Radio、Timer、USART、SPI和General I/O等5個(gè)底層模塊。測(cè)試結(jié)果表明,移植的5個(gè)底層模塊能夠正常工作。

1 MCU和無線模塊介紹

STM32系列按性能分成兩個(gè)系列:STM32F103“增強(qiáng)型”系列和STM32F101“基本型”系列,時(shí)鐘頻率達(dá)到72 MHz,是同類產(chǎn)品中性能最高的產(chǎn)品。本項(xiàng)目采用芯片STM32F103RBT6。CC2520選用第二代ZigBee/IEEE 802.15.4無線電頻率(RF)收發(fā)器。

2 TinyOS操作系統(tǒng)和NesC分析

2.1 NesC介紹

NesC是專門為網(wǎng)絡(luò)嵌入式系統(tǒng)設(shè)計(jì)的編程語言,是對(duì)C的擴(kuò)展,它基于TinyOS的結(jié)構(gòu)化概念和執(zhí)行模型而設(shè)計(jì)。主要編程模式包括:事件驅(qū)動(dòng)、彈性并發(fā)型和面向組件程序設(shè)計(jì)等。NesC編譯器進(jìn)行數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)(提高可靠性)、積極的函數(shù)內(nèi)聯(lián)(降低資源消耗)等整體程序分析,簡(jiǎn)化了應(yīng)用程序的開發(fā)。

2.2 TinyOS分析

TinyOS(Tiny MICro Threading Operating System)是由加州大學(xué)伯克利分校開發(fā)的開源的傳感器網(wǎng)絡(luò)操作系統(tǒng),其本身是由NesC語言編寫。TinyOS的組件模型體系結(jié)構(gòu)如圖1所示。上層組件對(duì)下層組件發(fā)命令,下層組件向上層組件發(fā)信號(hào)通知事件,最底層的硬件抽象組件直接和硬件打交道。

TinyOS的硬件抽象層通常是3級(jí)抽象結(jié)構(gòu),稱作HAA(Hardware Abstraction Architecture)。整個(gè)硬件抽象層分為硬件表示層(HPL)、硬件適配層(HAL)和硬件接口層(HIL)。

硬件表示層(Hardware Presentation Layer,HPL)是對(duì)硬件平臺(tái)的功能性描述,主要通過存儲(chǔ)單元和I/O映射端口訪問硬件和通過硬件中斷來實(shí)現(xiàn)以下功能:能量管理、控制硬件、硬件中斷開閉、提供硬件中斷服務(wù)程序等。

在HPL上的是硬件適配層(Hardware Adaptation Layer,HAL),該層是整個(gè)硬件抽象層的核心,利用HPL提供的原始接口建立硬件描述資源,并通過狀態(tài)來反映硬件的使用情況以實(shí)現(xiàn)對(duì)硬件的仲裁控制,提高系統(tǒng)性能。

硬件抽象層的最高層是硬件接口層(Hardware Interface Layer,HIL),該層把HAL層提供的接口轉(zhuǎn)換成硬件獨(dú)立的接口,隱藏了平臺(tái)之間的差異,并向上層提供統(tǒng)一的硬件API接口。

3 基于STM32和CC2520平臺(tái)的TinyOS實(shí)現(xiàn)

由上文所述,將TinyOS移植到STM32核處理器和CC2520上的關(guān)鍵問題是硬件抽象層組件的定制和編譯器工具鏈的配置?;赥inyOS開源代碼的約定,主要修改代碼放置在/tos/Chips/STM32和tos/platforms/STM32p103。

3. 1 修改芯片文件

每個(gè)芯片都通過多個(gè)接口或組件提供它所實(shí)現(xiàn)的功能,這些接口或組件組成芯片的驅(qū)動(dòng)。將芯片的結(jié)構(gòu)抽象文件放于tos/chips。如果芯片有子系統(tǒng)則建立子目錄,如:tos/chips/STM32/timer。需要改寫的TinyOS和MCU相關(guān)模塊如下所述。

3.1.1 STM32核處理器

為了同其他外圍設(shè)備的驅(qū)動(dòng)分開,需要在MCU相關(guān)的文件中增加兩個(gè)定義;原子操作的開始和結(jié)束,在頭文件hardware.h中定義;低功耗工作模式,由組件MCUSleepC定義。具體可以參考其他MCU文件編寫。

TinyOS通過一些接口管理MCU的狀態(tài),決定MCU何時(shí)進(jìn)入低功耗狀態(tài)。MCUSleepC組件向上層提供McuSleep和McuPowerState接口。TinyOS調(diào)度器在原子操作中調(diào)用McuSleep.sleep(),保證在進(jìn)入低功耗狀態(tài)前處于開中斷狀態(tài)。在sleep狀態(tài),可以關(guān)閉一些高耗能的模塊,比如:高頻時(shí)鐘、PLL等。

3. 1.2 修改I/O、LED燈、Timer、USART、SPI組件

(1)通用I/O接口

HIL層組件通過3個(gè)接口描述MCU可以控制的通用輸入輸出引腳。General I/O接口描述輸入輸出引腳被清零或置位狀態(tài)、設(shè)置為輸入或輸出模式。GpioInterrupt接口描述單個(gè)引腳觸發(fā)的中斷,可以對(duì)每一個(gè)引腳分別配置為上升沿觸發(fā)或者下降沿觸發(fā)中斷。GpioCapture接口描述捕獲單個(gè)引腳發(fā)生的事件,可以對(duì)每一個(gè)引腳分別配置為上升沿觸發(fā)或者下降沿觸發(fā)。


(2)LED燈

TinyOS最多可獨(dú)立支持平臺(tái)上3個(gè)LED燈。TinyOS通過PlatformLedsC組件直接訪問3個(gè)LED燈,LedC和LedP組件再通過裝配PlatformLedsC組件,向上層組件提供Led接口,相當(dāng)于General I/O接口的使用。在PlatformLedsC組件中,可以對(duì)每種開發(fā)板指定相應(yīng)的LED引腳。

(3)Timer

MCU時(shí)鐘通常有3種常見的功能:控制、時(shí)鐘/計(jì)數(shù)器、觸發(fā)。將與MCU時(shí)鐘相關(guān)的文件放到Chips/STM32/timer。時(shí)鐘的通用功能通過一系列的接口定義實(shí)現(xiàn):

(4)USART

節(jié)點(diǎn)可以通過USART與PC通信,將與USART相關(guān)文件放于chips/STM32/UART。本文只通過HplSTM32UartNoDMAP組件的STM32Uart1C配件實(shí)現(xiàn)了簡(jiǎn)單的USART功能。串口的初始化包括:波特率、字長(zhǎng)、奇偶校驗(yàn)位、流控制、打開串口時(shí)鐘和配置串口發(fā)送接收引腳等。

(5)SPI

由于CC2520通過SPI接口和MCU通信,所以必須實(shí)現(xiàn)SPI接口。SPI的初始化包括:時(shí)鐘信號(hào)的相位和極性、NSS模式、數(shù)據(jù)幀格式、主從模式等。

3.2 CC2520驅(qū)動(dòng)

在tos/chips/cc2520中,定義與CC2520芯片相關(guān)的組件,這里面的組件直接對(duì)芯片進(jìn)行操作。在tos/platforms/cc2520文件夾中定義CC2520和MCU交互的接口。CC2520通過SPI接口與STM32完成設(shè)置和收發(fā)數(shù)據(jù)兩方面的任務(wù)。

CC2520工作流程如下:應(yīng)用程序中使用SplitControl接口,該接口最終連接到CCDriverLayerP上,在SOFtwareInit.init中對(duì)CC2520使用的和MCU相連的引腳進(jìn)行初始配置。

首先,復(fù)位CC2520,并且關(guān)閉電壓調(diào)整器,根據(jù)Datasheet,延時(shí)1100 μs,延時(shí)通過接口BusyWait。延時(shí)完成后,開啟電壓調(diào)整器,并延時(shí)200μs后使能CC2520。完成后,申請(qǐng)SPI資源,該資源接口連接在CC2520DriverLayerP上,資源申請(qǐng)?jiān)试S后,在CC25 20DriverLayerP中捕獲到SpiResource.granted事件,然后開始通過SPI接口初始化CC2520,調(diào)用startOscillator。之后,調(diào)用initRadio對(duì)CC2520的寄存器進(jìn)行相應(yīng)配置。

而在接收模式時(shí),CC2520收到物理幀的SFD字段后,會(huì)在SFD引腳輸出高電平,直到接收完該幀。如果啟用了地址識(shí)別,在地址識(shí)別后,SFD引腳立即轉(zhuǎn)為輸出低電平。FIFO和FIFOP引腳標(biāo)識(shí)FIFO緩存區(qū)的狀態(tài)。如果接收FIFO緩存區(qū)有數(shù)據(jù),F(xiàn)IFO引腳輸出高電平;如果接收FIFO緩沖區(qū)為空,F(xiàn)IFO引腳輸出低電平。TinyOS無線模塊組織架構(gòu)圖如圖2所示。

3.3 修改平臺(tái)文件

在tos/platforms下放置平臺(tái)相關(guān)文件,將物理驅(qū)動(dòng)相關(guān)的組件連接起來組成具體平臺(tái)。創(chuàng)建一個(gè)平臺(tái)需要完成5個(gè)部分:

①“.platform”文件告知編譯系統(tǒng)驅(qū)動(dòng)文件的位置,由一系列的包含路徑和NesC的參數(shù)組成。ncc將“.platform”文件當(dāng)作perl腳本讀出,并將參數(shù)傳遞到NesC預(yù)編譯器。

②平臺(tái)導(dǎo)入程序PlatformP/PlatformC,通過調(diào)用兩個(gè)初始化接口platformC.Init和MainC.softwarelnit來激活MCU、傳感器和射頻等硬件模塊及相關(guān)軟件。platformC.Init通常完成時(shí)鐘校準(zhǔn)和引腳設(shè)置,保證硬件在可操作狀態(tài)。

③與硬件具體功能相關(guān)的頭文件“hardware.h”和將芯片與平臺(tái)結(jié)合的具體代碼?!癶ardware.h”包含了其他硬件子系統(tǒng)的頭文件,并被主文件“MainC.nc”所包含。

④修改鏈接腳本文件,仿照其他平臺(tái)文件在tos/platforms文件夾下建立tos.x文件,設(shè)置rom和ram的起始地址和大小。設(shè)置中斷向量表、代碼段、數(shù)據(jù)段、非初始化數(shù)據(jù)段和其他段的放置位置。

⑤定義中斷向量表,在tos/platforms/STM32-p103/vectors文件夾下新建STM32-vector.c文件,用于放置中斷向量表,按照STM32提供的中斷配置中斷向量表,并初始化默認(rèn)中斷處理函數(shù),實(shí)際應(yīng)用中這些中斷處理函數(shù)可以在其他文件中重定義。比如時(shí)鐘中斷處理函數(shù)在McuSleepC.nc中重定義。

3.4 修改編譯工具鏈

3.4.1 配置交叉開發(fā)工具鏈

STM32支持的編譯器有很多,比如:ARM—NONE—EABI—GCC、KEIL、IAR等。本文采用ARM—NONE—EABI—GCC編譯器。NesC程序的編譯主要分兩步,首先調(diào)用ncc編譯器把NesC預(yù)編譯成C文件(即預(yù)編譯過程);然后通過一個(gè)腳本程序,將經(jīng)過NesC預(yù)編譯生成的TinyOS應(yīng)用程序轉(zhuǎn)換成可以下載到開發(fā)板的hex格式文件;最后送入J—Flash ARM下載器下載到硬件。修改后的編譯工具鏈如圖3所示。


下面對(duì)這個(gè)過程進(jìn)行詳細(xì)的介紹。
第一步:源組件文件(.nc源文件)的分析和轉(zhuǎn)換,在這個(gè)階段調(diào)用TinyOS自帶的編譯器ncc,對(duì).nc源文件進(jìn)行文法、語法分析,檢測(cè)共享數(shù)據(jù)緩沖區(qū)等。再根據(jù)各個(gè)組件和接口對(duì)其使用的函數(shù)和變量進(jìn)行名字?jǐn)U展,使其具有全局唯一性。最后把所有的函數(shù)和變量都整合到一個(gè)主函數(shù)main()中,并生成相應(yīng)的app.c文件。此時(shí)生成的已經(jīng)是普通的C語言程序。以上這個(gè)替換過程是由ncc的核心程序nescl.exe完成的。
第二步:在生成app.c文件后,ncc調(diào)用arm—none—eabi—gcc的交叉編譯器工具對(duì)該C文件進(jìn)行編譯、鏈接生成可執(zhí)行文件main.exe,然后通過arm—none—eabi—objcopy工具轉(zhuǎn)換成main.hex,以便最后下載到STM32平臺(tái)上運(yùn)行調(diào)試。
3.4.2 定制編譯環(huán)境
為使編譯系統(tǒng)能夠?qū)ふ业骄幾g平臺(tái),在工程主文件夾下增加環(huán)境定制文件“setup.sh”,定制工程目錄、編譯工具、解釋工具等路徑。在/support/make目錄增加“STM32-p103.target”文件。定制STM32的MAKE系統(tǒng)。在make文件中指定用arm—none—eabi—gcc為編譯器,arm-none-eabi-objcopy為輸出格式轉(zhuǎn)換器。
以一個(gè)簡(jiǎn)單的應(yīng)用程序radioCountTOLEDs為例,在STM32平臺(tái)上編譯的結(jié)果如圖4所示。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉