ZIGBEE协议栈OSAL运行机理及任务添加.docx

  1. 1、本文档共20页,可阅读全部内容。
  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 OSAL的工作原理示意图 任务调度:链表中数据结构 typedef void (*pTasklnitFn)(unsigned char task_id); 〃指向任务初始化函数 typedef void (*pTaskEventHandlerFn)(usigned char taskjd unsigned short event_flag) ; 旨向事件处理函数 typedef struct osalTaskRec 上面是链表中每一项数据结构,与任务链表有 关的主要操作有:添加任务到列表、获取下一 个任务、根据taskID查找相应的任务。 uintl6 } osalTaskRec_t; eve nts; 〃需要被处理的事件 〃链表中的每一项数据结构 任务调度 根据taskID查找任务 系统主循环函数 设置事件发生的标志 时间管理 ?协议栈中每层都有事件发生,这些事件发生的 时间顺序不同。 OSAL调度程序设计了与时间管理相关的函数,用 来各种不同的要被处理的事件。 ?对事件进行时间管理,OSAL采用了链表的方 式进行,有时发生一个要被处理的事件,就启 动一个逻辑上的定时器,并将此定时器添加到 链表当中。 原语通信 edef struct 程:byte task_id; byte dst_task_id; 程: 0 byte send Jen; }osal_msg_rec_header_t; typedef struct { osal_msg_rec_header_t hdr; byte *msg_ptr; }osaLmsg_receivedJ; 〃消息结构(上面结构体包含在里 extern osal_msg_received_t osal_rcvd; 〃全局变量 extern osal_msg_received_t *osal_msg_receive(byte tack irl\- ~ ~ OSAL OSAL添加新任务 添加新任务只要对两个函数进行编程: ?1、新任务初始化函数 ?2、新任务的事件处理函数 后:const pTaskEventHandlenFn tasksArr[] = { macEventLoop, nwk_event_loop; 后: const pTaskEventHandlenFn tasksArr[] = { macEventLoop, nwk_event_loop; Hal_ProcessExent; #if defind(MT_TASK) MT_ProcessEvevt; #endif APS_event_loop; #if defined (ZIGBEE.FRAGMENTATION) APSF_ProcessEvent; #endif ZDApp_event_loop, #if defind(ZIGBEE_FREQ_AGILITY)|| defined (ZIGBELPANID_CO NFLI CT) ZDNwkMgr_event_loop; #endif Gen ericApp_ProcessEvent }; □事件处理函数的地址加入tasksAr叩数组, 代码: Const pTaskExentHandlerFn taskArr[] = { macEve ntLoop; n wk_eve nt_ loop; Hal_ProcessEve nt; #if defind(MT_task) MT_ProcessEvent; #endif APS_eve nt_ loop; #if defined (ZIGBEE_FRAGMENTATION) APSF_ProcessEvent; #endif ZDApp_eve nt_loop; #if defind (ZIGBEE_FREQ_AGILITY)||defined(ZIGBEE_PANID_CONFLICT) ZDNwkMgr_eve nt」o op『 #endif Genen

文档评论(0)

157****5685 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档