网站大量收购独家精品文档,联系QQ:2885784924

z-stack中添加新任务.pdf

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
z-stack中添加新任务

TI Z-stack 协议栈学习-添加新任务 1.Zstack 中如何实现自己的任务 /blog/static/1940851920097710392587/ 在Zstack(TI 的Zigbee 协议栈)中,对于每个用户自己新建立的任务通常需要两个 相关的处理函数,包括: (1).用于初始化的函数,如:SampleApp_Init(), 这个函数是在osalInitTasks() 这个osal(Zstack 中自带的小操作系统)中去调用的,其目的就是把一些用户自己 写的任务中的一些变量,网络模式,网络终端类型等进行初始化; (2).用于引起该任务状态变化的事件发生后所需要执行的事件处理函数,如: SampleApp_ProcessEvent(),这个函数是首先在const pTaskEventHandlerFn tasksArr[ ] 中进行设置(绑定),然后在osalInitTasks()中如果发生事件进行调用绑 定的事件处理函数. 下面分3 个部分分析. 1.用户自己设计的任务代码在Zstack 中的调用过程 (1).main() 执行(在ZMain.c 中) main() osal_init_system() (2). osal_init_system()调用osalInitTasks(), (在OSAL.c 中) osal_init_system() osalInitTasks() (3). osalInitTasks()调用SampleApp_Init() , (在OSAL_SampleApp.c 中) osalInitTasks() SampleApp_Init() 在osalInitTasks() 中实现了多个任务初始化的设置,其中macTaskInit( taskID++ ) 到ZDApp_Init( taskID++ ) 的几行代码表示对于几个系统运行初始化任务的调用, 而用户自己实现的SampleApp_Init()在最后,这里taskID 随着任务的增加也随之 递增.所以用户自己实现的任务的初始化操作应该在osalInitTasks()中增加. void osalInitTasks( void ) { uint8 taskID = 0; //这里很重要, 调用osal_mem_alloc()为当前OSAL 中的各任务分配存储空间(实 际上是一个任//务数组),并用tasksEvents 指向该任务数组(任务队列). tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt); osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt)); //将taskSEvents 所指向的空间清零 macTaskInit( taskID++ ); nwk_init( taskID++ ); Hal_Init( taskID++ ); #if defined( MT_TASK ) MT_TaskInit( taskID++ ); #endif APS_Init( taskID++ ); ZDApp_Init( taskID++ ); SampleApp_Init( taskID ); //用户自己需要添加的任务 } 2.任务处理调用的重要数据结构 这里要解释一下,在Zstack 里,对于同一个任务可能有多种事件发生,那么需要执 行不同的事件处理,为了方便,对于每个任务的事件处理函数都统一在一个事件处 理函数中实现,然后根据任务的ID 号(task_id)和该任务的具体事件(events)调用 某个任务的事件处理函数,进入了该任务的事件处理函数之后,再根据events 再 来判别是该任务的哪一种事件发生,进而执行相应的事件处 理.pTaskEventHandlerFn 是一个指向函数(事件处理函数)的指针,这里实现的 每一个数组元素各对应于一个任务的事件处理函数,比如 SampleApp_ProcessEvent 对于用户自行实现的事件处理函数uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events ),所以这里如果我们实 现了一个任务,还需要把实现的该任务的事件处理函数在这里添加. const pTaskEventHandlerFn tasksArr[] = { macEventLoop, nwk_event_loop, Hal_

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档