色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 快速了解ZigBee的協(xié)議棧

快速了解ZigBee的協(xié)議棧 時(shí)間:2018-09-25      來(lái)源:未知

帶大家來(lái)一起快速的看懂ZigBee的協(xié)議棧的運(yùn)行流程。

1.讀任何程序都需要從main函數(shù)入手,那我們先來(lái)看Zmain.c中的main函數(shù)。

問(wèn)題:在main中我們會(huì)看到很多的函數(shù),我們究竟要看哪個(gè)函數(shù)呢?

回答:這么多的函數(shù)中其實(shí)我們只需要關(guān)注osal_init_system()和osal_start_system()兩個(gè)函數(shù)就可以了。我們?cè)诰幊痰臅r(shí)候其實(shí)也只會(huì)關(guān)系到這兩個(gè)函數(shù)。

2.我們跟蹤(把光標(biāo)放在這個(gè)函數(shù)上點(diǎn)右鍵,再點(diǎn)擊go to define)osal_init_system()這個(gè)函數(shù),發(fā)現(xiàn)它在OSAL.c文件中。

問(wèn)題:在這個(gè)函數(shù)中有遇到了很多函數(shù),那我們又要關(guān)注那些函數(shù)呢?

回答:這個(gè)函數(shù)中我們只需要關(guān)注osalInitTasks()函數(shù)就可以了,這其實(shí)就是把每個(gè)事件作為每個(gè)任務(wù)。

3.我們跟蹤osalInitTasks()這個(gè)函數(shù),發(fā)現(xiàn)在OSAL_SampleApp.c中。其他的函數(shù)先不管。

在這個(gè)函數(shù)我們可以看到我們的任務(wù)編號(hào)是從0開始的,然后每添加一個(gè)任務(wù)任務(wù)編號(hào)(taskID++)就加一,并且為任務(wù)分配內(nèi)存。如下:

uint8 taskID = 0;

tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);

osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));

在這個(gè)函數(shù)中需要我們特別關(guān)注的是SampleApp_Init(taskID)這個(gè)函數(shù),因?yàn)槲覀冊(cè)诰幊痰臅r(shí)候這個(gè)函數(shù)是需要我們程序員去編寫的,這個(gè)事協(xié)議棧提供的編程接口。

4.同樣我們跟蹤這個(gè)函數(shù)SampleApp_Init(taskID),發(fā)現(xiàn)它在SampleApp.c中(這個(gè)函數(shù)很重要)。在這個(gè)函數(shù)中我們看到需要我們?nèi)ヅ渲靡恍┬畔ⅲ绱诓ㄌ芈省⒘骺氐鹊取?/p>

uartConfig.callBackFunc = Serial_CallBack;

這需要我們來(lái)定義串口回調(diào)函數(shù)來(lái)無(wú)線發(fā)送數(shù)據(jù)。

5.現(xiàn)在系統(tǒng)的初始化已經(jīng)做好了,遇到SampleApp_Init()函數(shù)的return后一步一步的返回。

6.返回到main函數(shù)后,我們?cè)賮?lái)看osal_start_system()函數(shù),注意這個(gè)函數(shù)一但進(jìn)去之后,此函數(shù)就不會(huì)再返回。我們跟蹤這個(gè)函數(shù),發(fā)現(xiàn)它在OSAL.c中。

do {

if (tasksEvents[idx]) // Task is highest priority that is ready.

{

break;

}

} while (++idx < tasksCnt);

注意這段邏輯,這是把任務(wù)中優(yōu)先級(jí)高的選出來(lái)。

events = tasksEvents[idx];//把優(yōu)先級(jí)高的選出來(lái)賦值給事件來(lái)處理。

這里我們需要來(lái)看一個(gè)數(shù)組:

const pTaskEventHandlerFn tasksArr[] = {

macEventLoop,

nwk_event_loop,

Hal_ProcessEvent,

#if defined( MT_TASK )

MT_ProcessEvent,

#endif

APS_event_loop,

#if defined ( ZIGBEE_FRAGMENTATION )

APSF_ProcessEvent,

#endif

ZDApp_event_loop,

#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )

ZDNwkMgr_event_loop,

#endif

SampleApp_ProcessEvent

};

我們知道這些都是事件處理函數(shù)。問(wèn)題又來(lái)了,這么多我們應(yīng)該看和用哪一個(gè)呢?

協(xié)議棧給用戶提供的函數(shù)編程接口是SampleApp_ProcessEvent這個(gè)函數(shù)。

然而怎么調(diào)用到這個(gè)函數(shù)呢?看下面的代碼。

events = (tasksArr[idx])( idx, events );//這是是一個(gè)函數(shù)指針的應(yīng)用。自己補(bǔ)C語(yǔ)言,這里不贅述。

7.既然是這樣我們就要跟蹤SampleApp_ProcessEvent()這個(gè)函數(shù),發(fā)現(xiàn)它在SampleApp.c中。

case AF_INCOMING_MSG_CMD:

SampleApp_MessageMSGCB( MSGpkt );

break;

這是我們需要關(guān)注的case,這個(gè)就是接受到數(shù)據(jù)的時(shí)候讀出無(wú)線發(fā)過(guò)來(lái)的數(shù)據(jù)。SampleApp_MessageMSGCB( MSGpkt );這個(gè)函數(shù)就需要程序員進(jìn)行編寫。所以這個(gè)函數(shù)也非常的重要。

這就是協(xié)議棧的大體運(yùn)行過(guò)程,當(dāng)然這些還很淺顯,還沒(méi)有討論一些深層次的內(nèi)容,并且有些地方寫得不合適的地方,希望大家指正,這里我表示萬(wàn)分的感激。

上一篇:Git入門之Git實(shí)例操作

下一篇:談?wù)刢ss的繼承性

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 精品调教chinesegay| 色偷偷偷亚洲综合网另类| 欧美久久精品一级黑人c片| 国产精品久久久亚洲| 日韩在线中文视频| 成人信息集中地欧美| 午夜精品在线视频| 中文字幕日韩有码| 91久久久久久久久久久| 91国内在线视频| 久久99热这里只有精品国产 | 国产欧美日韩免费| 欧美精品18videos性欧| 色七七影院综合| 亚洲精品www久久久| 国产精品视频白浆免费视频| 欧美激情一区二区三区成人| 久久久国产影院| 国产一区二区三区在线看 | 国产精品揄拍500视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲午夜激情免费视频| 亚洲福利影片在线| 国产精品网红直播| 欧美在线播放视频| 欧美激情一二三| 欧美日韩国产综合新一区| 最好看的2019年中文视频| 亚洲免费av网址| 日韩精品在线看| 亚洲free性xxxx护士hd| 国产精品国产三级国产aⅴ9色 | 欧美日韩亚洲激情| 久久亚洲精品小早川怜子66| 国产亚洲人成a一在线v站| 精品中文字幕久久久久久| 亚洲国产日韩一区| 亚洲高清在线观看| 亚洲精品国产精品国产自| 亚洲已满18点击进入在线看片| 91精品久久久久久久久久久久久|