ZIGBEE协议栈OSAL运行机理和任务添加.ppt

ZIGBEE协议栈OSAL运行机理和任务添加.ppt

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ZIGBEE协议栈OSAL运行机理及任务添加 授课内容 OSAL的调度机制 OSAL任务添加 OSAL的简介 OSAL是一种支持多任务运行的系统资源分配机制。 OSAL与标准的操作系统有一定的区别,它实现了类似操作系统的功能,如:任务切换、提供了内存管理功能等,但OSAL并不是真正意义的操作系统。 OSAL的调度机制 OSAL的调度机制可分为三部分: 一、任务调度 二、时间管理 三、原语通信 任务调度 协议栈的每一层都设计了一个事件处理函数,用来处理与这一层操作相关的各种事件。 ZigBee协议栈的实时性要求不高,所以OSAL采用了轮询任务调度队列的方法来进行任务调度管理。 OSAL采用一个链表结构来管理协议栈各层相应的任务。 任务调度 OSAL 任务1 任务1处理函数 任务2 任务2处理函数 任务n处理函数 任务n …... …... OSAL的工作原理示意图 任务调度:链表中数据结构 typedef void (*pTaskInitFn)(unsigned char task_id)?; //指向任务初始化函数 typedef void (*pTaskEventHandlerFn)(usigned char task_id unsigned short event_flag);? //指向事件处理函数 typedef struct osalTaskRec { ? struct osalTaskRec????????? *next;????????????????????????? //指向链表中下一个结构体 ? pTaskInitFn?????????????????????? pfnInit;???????????????????????? //指向相关层任务初始化函数 ? pTaskEventHandlerFn???? pfnEventProcessor; ? //指向相关层事件处理函数 ? byte?????????????????????????????????? ?taskID;???????????????????????? //对应当前任务ID ? byte???????????????????????????????? ?? taskPriority;??????????????? //当前任务优先级 ? uint16???????????????????????????????? events;?????????????????????? //需要被处理的事件 } osalTaskRec_t;? //链表中的每一项数据结构 上面是链表中每一项数据结构,与任务链表有关的主要操作有:添加任务到列表、获取下一个任务、根据taskID查找相应的任务。 任务调度 在任务管理列表添加任务 获取下一个活动任务 根据taskID查找任务 系统主循环函数 设置事件发生的标志 时间管理 协议栈中每层都有事件发生,这些事件发生的时间顺序不同。 OSAL调度程序设计了与时间管理相关的函数,用来各种不同的要被处理的事件。 ?对事件进行时间管理,OSAL采用了链表的方式进行,有时发生一个要被处理的事件,就启动一个逻辑上的定时器,并将此定时器添加到链表当中。 原语通信 原语的操作往往需要逐层调用下层函数并根据下层返回的结果来进行进一步的操作。 OSAL调度程序用两个相关的函数来完成这个过程: 1、向目标任务发送消息的函数 extern byte osal_msg_send(byte destination_task, byte *msg_ptr,byte len); 2消息提取函数 typedef struct { ??? byte task_id; ??? byte dst_task_id; ??? byte send_len; }osal_msg_rec_header_t; ? typedef struct { ??? osal_msg_rec_header_t? hdr; ??? byte *msg_ptr; }osal_msg_received_t;????? //消息结构(上面结构体包含在里面) ? extern osal_msg_received_t?? osal_rcvd;? //全局变量 ? exte

文档评论(0)

aa15090828118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档