欢迎来到天天文库
浏览记录
ID:45079945
大小:950.50 KB
页数:17页
时间:2019-11-09
《ZIGBEE协议栈OSAL运行机理及任务添加》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、ZIGBEE协议栈OSAL运行机理及任务添加授课内容OSAL的调度机制OSAL任务添加OSAL的简介OSAL是一种支持多任务运行的系统资源分配机制。OSAL与标准的操作系统有一定的区别,它实现了类似操作系统的功能,如:任务切换、提供了内存管理功能等,但OSAL并不是真正意义的操作系统。OSAL的调度机制OSAL的调度机制可分为三部分:一、任务调度二、时间管理三、原语通信任务调度协议栈的每一层都设计了一个事件处理函数,用来处理与这一层操作相关的各种事件。ZigBee协议栈的实时性要求不高,所以OSAL采用了轮询任务调度队列的方法来进行任务调度管理。OSAL采用一个链表结构来管理协议栈各层
2、相应的任务。任务调度OSAL任务1任务1处理函数任务2任务2处理函数任务n处理函数任务n…...…...OSAL的工作原理示意图任务调度:链表中数据结构typedefvoid(*pTaskInitFn)(unsignedchartask_id);//指向任务初始化函数typedefvoid(*pTaskEventHandlerFn)(usignedchartask_idunsignedshortevent_flag);//指向事件处理函数typedefstructosalTaskRec{ structosalTaskRec *next;
3、 //指向链表中下一个结构体pTaskInitFn pfnInit; //指向相关层任务初始化函数pTaskEventHandlerFn pfnEventProcessor; //指向相关层事件处理函数byte taskID; //对应当前任务ID byte taskPriority;
4、 //当前任务优先级uint16 events; //需要被处理的事件}osalTaskRec_t; //链表中的每一项数据结构上面是链表中每一项数据结构,与任务链表有关的主要操作有:添加任务到列表、获取下一个任务、根据taskID查找相应的任务。任务调度在任务管理列表添加任务获取下一个活动任务根据taskID查找任务系统主循环函数设置事件发生的标志时间管理协议栈中每层都有事件发生,这些事件发生的时间顺序不同。OSAL调度程序设计了与时间管理相关的函数,用来各种不同的
5、要被处理的事件。对事件进行时间管理,OSAL采用了链表的方式进行,有时发生一个要被处理的事件,就启动一个逻辑上的定时器,并将此定时器添加到链表当中。原语通信原语的操作往往需要逐层调用下层函数并根据下层返回的结果来进行进一步的操作。OSAL调度程序用两个相关的函数来完成这个过程:1、向目标任务发送消息的函数externbyteosal_msg_send(bytedestination_task,byte*msg_ptr,bytelen);2消息提取函数typedefstruct{bytetask_id;bytedst_task_id;bytesend_len;}osal_msg_rec_
6、header_t;typedefstruct{osal_msg_rec_header_t hdr;byte*msg_ptr;}osal_msg_received_t; //消息结构(上面结构体包含在里面)externosal_msg_received_t osal_rcvd; //全局变量externosal_msg_received_t *osal_msg_receive(bytetask_id);//接收任务OSAL添加新任务添加新任务只要对两个函数进行编程:1、新任务初始化函数2、新任务的事件处理函数OSAL添加新任务constpTaskEventHandlenFn
7、tasksArr[]={macEventLoop,nwk_event_loop;Hal_ProcessExent;#ifdefind(MT_TASK)MT_ProcessEvevt;#endifAPS_event_loop;#ifdefined(ZIGBEE_FRAGMENTATION)APSF_ProcessEvent;#endifZDApp_event_loop,#ifdefind(ZIGBEE_FREQ_AGILITY)
8、
9、defined
此文档下载收益归作者所有