版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、.OSAL的工作原理 ZigBee 協(xié)議棧依據(jù) IEEE 802.15.4 標準和 ZigBee 協(xié)議規(guī)范。ZigBee 網(wǎng)絡中的各種操作需要 ,利用協(xié)議棧各層所提供的原語操作來共同完成。原語操作的實現(xiàn)過程往往需要向下一層發(fā)起一 個原語操作并且通過下層返回的操作結果來判斷出下一條要執(zhí)行的原語操作。IEEE 802 15 4 標準和 ZigBee 協(xié)議規(guī)范中定義的各層原語操作多達數(shù)十條,原語的操作過程也比較復雜,它 已經(jīng)不是一個簡單的單任務軟件。對于這樣一個復雜的嵌入式通信軟件來說,其實現(xiàn)通常需要 依靠嵌入式操作系統(tǒng)來完成。 挪威半導體公司 Chipcon( 目前已經(jīng)被TI 公司收購)作為業(yè)界領
2、先的 ZigBee 一站式方案供應 商,在推出其 CC2530 開發(fā)平臺時,也向用戶提供了自己的 ZigBee 協(xié)議棧軟件-Z-Stack 。這是 一款業(yè)界領先的商業(yè)級協(xié)議棧,使用 CC2530 射頻芯片,可以使用戶很容易的開發(fā)出具體的應 用程序來。Z-Stack 使用瑞典公司 IAR 開發(fā)的 IAR Embedded Workbench for MCS 51 作為它的 集成開發(fā)環(huán)境。Chipcon 公司為自己設計的 Z-Stack 協(xié)議棧中提供了一個名為操作系統(tǒng)抽象層 OSAL 的協(xié)議棧調(diào)度程序。對于用戶來說,除了能夠看到這個調(diào)度程序外,其它任何協(xié)議棧操 作的具體實現(xiàn)細節(jié)都被封裝在庫代碼中。
3、用戶在進行具體的應用開發(fā)時只能夠通過調(diào)用API 接 口來進行,而無權知道 Zig,Bee 協(xié)議棧實現(xiàn)的具體細節(jié)。 Z-Stack1.4.3及以后的版本中引入了一個OSAL(Operating System Abstraction Layer 操作系統(tǒng)抽象層),但在我們整個的ZigBee協(xié)議棧的結構圖中,我并沒有能夠發(fā)現(xiàn)這個層在哪個位置。但是整個的協(xié)議棧都要在OS的基礎上才能運行。OSAL和我們通常所說的RTOS,pc上的操作系統(tǒng)還是有很大的不同,ZigBee2006中只是利用了操作系統(tǒng)的概念和思想,利用OS把Z-Stack軟件組件從特殊的處理過程相分離,并將軟件成分保護了起來。它提供了如下的管
4、理功能:任務的注冊、初始化、開始 任務間的消息交換 任務同步 中斷處理 時間管理 內(nèi)存分配OSAL主要是這樣一種機制,一種任務分配資源的機制,從而形成了一個簡單多任務的操作系統(tǒng)。首先,osal初始化系統(tǒng),包括軟件系統(tǒng)初始化和資源初始化其中軟件系統(tǒng)初始化就是初始化一些變量,比如osal重要的組成部分任務表,任務結構體和序列號資源初始化主要包括內(nèi)存,中斷,等各種設備模塊資源這就和我們嵌入式系統(tǒng)中的RTOS操作系統(tǒng)C/OS-II有了很大的相似處。C/OS-II中也是通過建立任務把一個問題進行分解,任務之間可以通過消息隊列的方式進行通信。 接著,osal通過osal_add_task添加任務到任務表中
5、,形成一個任務鏈表這個任務鏈表是以任務的優(yōu)先級先后排序的優(yōu)先級高的排在前,低者排于后 最后,開始運行系統(tǒng),系統(tǒng)是以一個死循環(huán)的形式工作的在循環(huán)體當中不斷地檢測各個任務,看是否要運行等這就相當于我們平時用的linux和window等多任務系統(tǒng),把分成個時間片(有多少任務就分成多少時間片),只要處理頻率高,就相當于多任務同時運行了。下面我們來結合sampleAPP來說明一下OSAL的具體工作情況。 Sample Application是ZStack協(xié)議棧提供的一個非常簡單的演示實例,實例中的每個設備都可以發(fā)送和接收兩種信息:周期信息和閃爍信息。周期信息-當設備加入該網(wǎng)絡后,所有設備每隔 5S(加上
6、一個隨機數(shù),毫秒mS為單位)發(fā)送一個周期信息,該信息的數(shù)據(jù)載荷為發(fā)送信息的次數(shù)。閃爍信息-通過按下按鍵 SW1發(fā)送一個控制LED燈閃爍的廣播信息,該廣播信息只針對組 1 內(nèi)的所有設備。所有設備初始化都被加入組 1,所以網(wǎng)絡一旦建立完成便可執(zhí)行LED燈閃爍實驗。可以通過按下設備的 SW2 退出組 1,如果設備退出組1則不再接收來自組1的消息,其按鍵SW1發(fā)送的消息也不再控制組1LED燈的閃爍。通過再次按下 SW2 便可讓設備再次加入到組1,從而又可以接受來自組1的消息,其SW1也可以控制組1內(nèi)設備的LED燈閃爍了。當設備接收到閃爍信息會閃爍LED燈,而當接收到周期信息時協(xié)議棧沒有提供具體的實驗現(xiàn)
7、象,留給了用戶自行處理,可以根據(jù)實際需要自行更改實驗代碼。在該工程中使用了兩個按鍵SW1和SW2。即ZStack協(xié)議棧中的HAL_KEY_SW_1和HAL_KEY_SW_2。同時工程中也定義了一個事件用來處理周期信息事件,即SAMPLEAPP_SEND_PERIODIC_MSG_EVTSampleApp.h。二、一般工程說明: 在學習ZStack協(xié)議棧的時候我們要把握一個重點就是事件的產(chǎn)生和事件的處理。任務的初始化為事件的產(chǎn)生制造了“溫床”,是事件產(chǎn)生的前提,任何工程都需要先初始化。當有事件產(chǎn)生OS就會調(diào)用相應的處理函數(shù)進行處理。在OS循環(huán)那一節(jié)我們可以看到在任務初始化的最后一項就是應用層的初
8、始化,而在指向處理函數(shù)的指針數(shù)組中最后一項是對應的應用層的處理函數(shù)。應用層相關事件會由應用層處理函數(shù)進行處理。每一層都是相互對應,各司其職。程序執(zhí)行流程如下:ZMain.c的main()-osal.c的osal_init_system()-OSAL_SampleApp.c的osalInitTasks()之后分兩部分執(zhí)行-首先執(zhí)行SampleApp.c的SampleApp_Init(),接著執(zhí)行osal.c中的事件循環(huán),不停的執(zhí)行SampleApp_ProcessEvent(),進行應用層事件檢測。兩個關鍵函數(shù)1.SampleApp_Init2.SampleApp_ProcessEvent具體代
9、碼如下:SampleApp_initvoid SampleApp_Init( uint8 task_id )/osal應用層的任務ID賦值SampleApp_TaskID = task_id;/設備狀態(tài)設定為ZDO層中定義的初始化狀態(tài)SampleApp_NwkState = DEV_INIT;/定義消息IDSampleApp_TransID = 0;/后面的demo例子中用到這個編譯選項#if defined ( SOFT_START )/如果選擇了SOFT編譯選項,則作為協(xié)調(diào)器啟動 zgDeviceLogicalType = ZG_DEVICETYPE_COORDINATOR;#endif
10、/ SOFT_START/如果定義了HOLD_AUTO_START選項,則調(diào)用層的ZDOInitDevice,按照默認順/序網(wǎng)絡中的第一個設備作為協(xié)調(diào)器,其他的設備作為子設備#if defined ( HOLD_AUTO_START )ZDOInitDevice(0);#endif/定義廣播地址/地址模式SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast;/指定端點號SampleApp_Periodic_DstAddr.endPoint = SAMPLEAPP_ENDPOINT/指定目的網(wǎng)絡地址為廣播地址Sampl
11、eApp_Periodic_DstAddr.addr.shortAddr = 0xFFFF;/ 設定flash中命令即按鍵命令要發(fā)送的目的地址SampleApp_Flash_DstAddr.addrMode = (afAddrMode_t)afAddrGroup;SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;SampleApp_Flash_DstAddr.addr.shortAddr = SAMPLEAPP_FLASH_GROUP;/ 定義本設備用來通信的APS層端點描述符/端點號SampleApp_epDesc.endPoint
12、= SAMPLEAPP_ENDPOINT;/任務IDSampleApp_epDesc.task_id = &SampleApp_TaskID;/簡單描述符SampleApp_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc;/延時策略SampleApp_epDesc.latencyReq = noLatencyReqs;/ 向AF層注冊端點描述符afRegister( &SampleApp_epDesc );/ 向osal層注冊按鍵消息RegisterForKeys( SampleApp_TaskID
13、);/ 設定一個新的組/組號SampleApp_Group.ID = 0x0003;/設定組名osal_memcpy( SampleApp_G, Group 3, 7 );/把該組添加到網(wǎng)絡中aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );#if defined ( LCD_SUPPORTED )/如果選擇了LCD_SUPPORTED編譯選項,會打印一串字符Print8(HAL_LCD_LINE_2,20,SampleApp,1);#endifuint16 SampleApp_ProcessEvent( uint8 t
14、ask_id, uint16 events )/定義應用層數(shù)據(jù)包afIncomingMSGPacket_t *MSGpkt;/判斷osal層的消息類型/如果系統(tǒng)消息到來if ( events & SYS_EVENT_MSG ) /接收數(shù)據(jù)包 MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive(SampleApp_TaskID ); /如果數(shù)據(jù)包不為空 while ( MSGpkt ) /判斷消息類型 switch ( MSGpkt-hdr.event ) / 如果是按鍵消息 case KEY_CHANGE: /調(diào)用按鍵處理函數(shù) SampleAp
15、p_HandleKeys( (keyChange_t *)MSGpkt)-state,(keyChange_t *)MSGpkt)-keys ); break; / 如果是別的組設備周期發(fā)送的消息 case AF_INCOMING_MSG_CMD: /調(diào)用對周期消息的處理函數(shù) SampleApp_MessageMSGCB( MSGpkt ); break; / 如果是設備狀態(tài)變換的命令 case ZDO_STATE_CHANGE: /獲取設備狀態(tài) SampleApp_NwkState = (devStates_t)(MSGpkt-hdr.status); /如果是三種狀態(tài)之一 if ( (Sa
16、mpleApp_NwkState = DEV_ZB_COORD) | (SampleApp_NwkState = DEV_ROUTER) | (SampleApp_NwkState = DEV_END_DEVICE) ) / 按正常間隔啟動一個定時器 osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); else /設備不在網(wǎng)絡中的不做任何處理 / Device is no longer in the network break;
17、 default: break; / 釋放消息占用的存儲區(qū) osal_msg_deallocate( (uint8 *)MSGpkt ); / 判斷操作系統(tǒng)層是否有未處理的數(shù)據(jù)包,繼續(xù)處理緩沖區(qū)中的包 MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive(SampleApp_TaskID ); /判斷是否有未處理的系統(tǒng)消息,有則接收數(shù)據(jù)包,放到緩沖區(qū)一個個處理 return (events SYS_EVENT_MSG);/ 判斷是否有定時消息if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT ) / 定時時間到發(fā)送一個消息 SampleApp_SendPeriodicMessage(); / 重新啟動定時器 osal_start_timerEx( SampleApp_TaskID,SAMPLEAPP_SEND_PE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年小學體育教師年度工作總結
- 民航安全考試題庫及答案解析
- 2025年企業(yè)人力資源管理師三級考試題及答案
- 幼兒園食品安全事故應急演練活動方案兩篇
- 求職與面試技巧實訓報告
- 建設工程施工合同糾紛要素式起訴狀模板律師日常使用版
- 建設工程施工合同糾紛要素式起訴狀模板多場景適配
- 2026 年專用型離婚協(xié)議書制式模板
- 2026 年無子女離婚協(xié)議書合規(guī)版
- 用戶增長2026年裂變策略
- 《認識時鐘》大班數(shù)學教案
- 攜程推廣模式方案
- THHPA 001-2024 盆底康復管理質(zhì)量評價指標體系
- JGT138-2010 建筑玻璃點支承裝置
- 垃圾清運服務投標方案(技術方案)
- 顱鼻眶溝通惡性腫瘤的治療及護理
- 光速測量實驗講義
- 斷橋鋁合金門窗施工組織設計
- 新蘇教版六年級科學上冊第一單元《物質(zhì)的變化》全部教案
- 四川山體滑坡地質(zhì)勘察報告
- 工程結算書(設備及安裝類)
評論
0/150
提交評論