预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共29页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Zigbee协议栈学习之串口透明传输实验(SerialApp)流程分析 第一个功能:协调器的组网,终端设备和路由设备发现网络以及加入网络 //第一步:Z-Stack由main()函数开始执行,main()函数共做了2件事:一是系统初始化,另外一件是开 始执行轮转查询式操作系统 intmain(void) { ....... //Initializetheoperatingsystem osal_init_system();//第二步,操作系统初始化 ...... osal_start_system();//初始化完系统任务事件后,正式开始执行操作系统 ...... } //第二步,进入osal_init_system()函数,执行操作系统初始化 uint8osal_init_system(void)//初始化操作系统,其中最重要的是,初始化操作系统的任务 { //InitializetheMemoryAllocationSystem osal_mem_init(); //Initializethemessagequeue osal_qHead=NULL; //Initializethetimers osalTimerInit(); //InitializethePowerManagementSystem osal_pwrmgr_init(); //Initializethesystemtasks. osalInitTasks();//第三步,执行操作系统任务初始化函数 //Setupefficientsearchforthefirstfreeblockofheap. osal_mem_kick(); return(SUCCESS); } //第三步,进入osalInitTasks()函数,执行操作系统任务初始化 voidosalInitTasks(void)//第三步,初始化操作系统任务 { uint8taskID=0; tasksEvents=(uint16*)osal_mem_alloc(sizeof(uint16)*tasksCnt); osal_memset(tasksEvents,0,(sizeof(uint16)*tasksCnt)); //任务优先级由高向低依次排列,高优先级对应taskID的值反而小 macTaskInit(taskID++);//不需要用户考虑 nwk_init(taskID++);//不需要用户考虑 Hal_Init(taskID++);//硬件抽象层初始化,需要我们考虑 #ifdefined(MT_TASK) MT_TaskInit(taskID++); #endif APS_Init(taskID++);//不需要用户考虑 #ifdefined(ZIGBEE_FRAGMENTATION) APSF_Init(taskID++); #endif ZDApp_Init(taskID++);//第四步,ZDApp层,初始化,执行ZDApp_init函数后,如果是协调器将建立网络, 如果是终端设备将加入网络。 #ifdefined(ZIGBEE_FREQ_AGILITY)||defined(ZIGBEE_PANID_CONFLICT) ZDNwkMgr_Init(taskID++); #endif SerialApp_Init(taskID);//应用层SerialApp层初始化,需要用户考虑在此处设置了一个按键触发事件, //当有按键按下的时候,产生一个系统消息 } //第四步,进入ZDApp_init()函数,执行ZDApp层初始化 //Thefirststep voidZDApp_Init(uint8task_id)//Thefirststep,ZDApp层初始化。 { //SavethetaskID ZDAppTaskID=task_id; //InitializetheZDOglobaldeviceshortaddressstorage ZDAppNwkAddr.addrMode=Addr16Bit; ZDAppNwkAddr.addr.shortAddr=INVALID_NODE_ADDR; (void)NLME_GetExtAddr();//LoadthesaveExtAddrpointer. //Checkformanual"HoldAutoStart" ZDAppCheckForHoldKey(); //InitializeZDOitemsandsetupthedevice-typeofdevicetocreate. ZDO_Init(); //RegistertheendpointdescriptionwiththeAF //Thist