欢迎来到天天文库
浏览记录
ID:14694108
大小:49.50 KB
页数:6页
时间:2018-07-29
《osal_init_tasks函数说明》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Osal_init_tasks函数说明此函数完成了任务ID的分配,以及所有任务的初始化,如果我们要加入自己的应用必须在这里加入自己的任务初始化函数,以使系统可以自动为任务分配一个ID号。如果是想要自己创建一个应用,那么必须首先实现两个东西,一是任务回调函数队列,另一个是系统任务初始化及ID分配。任务队列是一个pTaskEventHandleRFn结构的数组,只要把每个任务相关的回调函数按初始化队列中的顺序填到数组中就可以了,他们的实现一般是写在自己的应用源码里面。介绍一个例子(SimpleApp):constp
2、TaskEventHandlerFntasksArr[]={macEventLoop,nwk_event_loop,Hal_ProcessEvent,#ifdefined(MT_TASK)MT_ProcessEvent,#endifAPS_event_loop,ZDApp_event_loop,SAPI_ProcessEvent};voidosalInitTasks(void){uint8taskID=0;tasksEvents=(uint16*)osal_mem_alloc(sizeof(uint16)*ta
3、sksCnt);osal_memset(tasksEvents,0,(sizeof(uint16)*tasksCnt));macTaskInit(taskID++);nwk_init(taskID++);Hal_Init(taskID++);#ifdefined(MT_TASK)MT_TaskInit(taskID++);#endifAPS_Init(taskID++);ZDApp_Init(taskID++);SAPI_Init(taskID);}注意这里两个实体里面的顺序要一一对应!macTaskInit(
4、taskID++),nwk_init(taskID++),APS_Init(taskID++)定义在mac_api.h,nwk.h,APS.h中,但没有找到其实现,可能被打包在链接库文件里面了。voidHal_Init(uint8task_id){/*将系统分配的任务的ID传给变量*/Hal_TaskID=task_id;}//开始器件的启动【ZDApp.c】voidZDApp_Init(bytetask_id){uint8capabiliTIes;//保存系统分配的任务IDZDAppTaskID=task_i
5、d;//初始化ZDO全局的短地址,并配置成无效的一个地址ZDAppNwkAddr.addrMode=Addr16Bit;ZDAppNwkAddr.addr.shortAddr=INVALID_NODE_ADDR;//ZDAppNwkAddr为一个地址数据结构:addrMode只有几种:AddrNotPresent=0,AddrGroup=1,Addr16Bit=2,Addr64Bit=3,AddrBroADCast=15typedefstruct{union{uint16shortAddr;ZLongAddr_
6、textAddr;}addr;byteaddrMode;}zAddrType_t;(void)NLME_GetExtAddr();//这是个ZstackAPI,返回指向此器件64位地址的指针//检查"HoldAutoStart",如果启动的时候按着SW1,此函数就会设置设备的状态为:DEV_HOLDZDAppCheckForHoldKey();//初始化ZDO物件,并且设置设备ZDO_Init();//【ZDObject.c】voidZDO_Init(void){#ifdefined(REFLECTOR)//如
7、果器件定义的是“反射器”则需要定义个路由的设备结构,REFLECTOR是一个编译选项,如果定义了这个编译选项则使用“源绑定”,源绑定的定义有这样一句话IntheZigbee2006release,thebindingmechanismisimplementedinalldevicesandiscalledsourcebinding(在Zigbee2006中,绑定机制在所有的设备中实现,这就叫做源绑定),如果使用源绑定则绑表是存放在源设备中的,这样就不用为找绑定入口而先向协调器提交绑定请求,但是方面又增大了源节点
8、的开销,因为要为保存绑定表而开辟一段静态内存。默认是不使用源绑定。ZDO_EDBind=NULL;#endif//设置创建设备的类型ZDODeviceSetup();//根据设置的编译选项来调用不同的网络层管理函数//ZDO_COORDINATOR:设备作为协调器//SOFT_START:如果没有协调器则设备以协调器启动,否则以路由器启动//这里面的几个函数都做成了静态库了看不到源码!
此文档下载收益归作者所有