- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
任务11_基于z-stack的串口通信
实训原理 ⑤ 第16行和20行都是使用异或运算,返回未处理的事件。例如:此时events=0x0005,则进入SampleApp_ProcessEvent()函数后,第3行if语句无效,则会跳到第18行if语句,SAMPLEAPP_SEND_PERIODIC_MSG_EVT的值为0x0001,则events^0x0001=0x00004。即第20行会返回0x0004。可见异或运算可以将处理完的事件清除掉,仅留下未处理的事件。 ⑥ SYS_EVENT_MSG与AF_INCOMING_MSG_CMD有什么内在关系? 实训原理 在ZigBee协议栈中,事件可以是用户定义的事件,也可以是协议栈内部已经定义的事件,SYS_EVENT_MSG就是协议栈内部定义的事件之一,SYS_EVENT_MSG定义如下: #define SYS_EVENT_MSG 0x8000 由于协议栈定的事件为系统强制事件(Mandatory Events),SYS_EVENT_MSG是一个事件集合,主要包括以下几个事件: (1)AF_INCOMING_MSG_CMD:表示收到了一个新的无线数据事件。 实训原理 (2)ZDO_STATE_CHANGE:表示当网络状态发生变化时,会产生该事件。如节点加入网络时,该事件就有效,还可以进一步判断加入的设备是协调器、路由器或终端。 (3)KEY_CHANGE:表示按键事件。 (4)ZDO_CB_MSG:表示每一个注册的ZDO响应消息。 (5)AF_DATA_CONFIRM_CMD:调用AF_DataRequest( )发送数据时,有时需要确认信息,该事件与此有关。 到此,将OSAL的运行机制总结以下几点: 实训原理 ■ OSAL是一种基于事件驱动的任务轮询式操作系统,事件有效才调用相应任务的事件处理函数。 ■ 通过不断地查询事件表(tasksEvents[idx]),判断是否有事件发生,如果有则查找函数表(tasksArr[idx]),调用本应事件处理函数。 ■ 事件表是用数组来表示,数组的每个元素对应用一个任务的事件,一般用户定义的事件最好是每一位二进制数表示一个事件,那么一个任务最多可以有16个事件(因为events 是uint16类型)。例如:0x01表示串口接收新数据,0x02表示读取温度数据,0x04表示读取湿度数据等,但是不用0x03、0xFE等数值表示事件。 实训原理 ■ 函数表是用指针数组来表示,数组的每个元素是相应任务的事件处理函数的首地址(函数指针)。 11. 3 OSAL消息队列 通常某些事件的发生,双伴随着一些附加数据的产生,这就需要将事件和数据封装成一个消息,将消息发送到消息队列中,然后使用osal_msg_receive( SampleApp_TaskID )函数从消息队列中得到消息。 OSAL维护一个消息队列,每个消息都会被放入该消息队列中,每个消息都包括一个消息头osal_msg_hdr_t和用户自定义的消息。在OSAL.h中osal_msg_hdr_t结构体的定义为: 实训原理 typedef struct { void *next; uint16 len; uint8 dest_id; } osal_msg_hdr_t; 11.4 OSAL添加新任务和事件 在ZigBee协议栈应用程序开发时,经常添加新的任务及其对应的事件,方法如下: ■ 在任务的函数表中添加新任务。 ■ 编写新任务的初始化函数。 实训原理 ■ 定义新任务全局变量和事件。 ■ 编写新任务的事件处理函数。 1. 在任务的函数表中添加新任务 在OSAL_SampleApp.c文件中,找到任务的函数表代码。 说明:在数组tasksArr[]的最后添加第16行代码,这是新任务的事件处理函数名。 2. 编写新任务的初始化函数 在OSAL_SampleApp.c文件中,找到任务初始化函数。 实训原理 说明:将新任务的初始化函数添加在osalInitTasks( void )函数的最后,如第19行代码。值得注意的是任务的函数表tasksArr[]中的元素(事件处理函数名)排列顺序与任务的初始化函数osalInitTasks( void )中的任务初始化子函数排列顺序是一一对应的,不允许错位。变量taskID是任务编号,有非常严格的自上到下的递增,最后的一个任务的taskID值不需要++,因为接下没有任务。 实训原理 3. 定义新任务全局变量和事件 为了保证osalInitTasks( void )函数能分配到任务ID,必须给每个任务定义一个全局变量。所以在SampleApp.c文件中,定义了uint8 SampleApp_TaskID变量,并在void SampleApp_Init( ta
您可能关注的文档
最近下载
- 清洁生产与循环经济.pptx VIP
- HF75过氧化氢消毒液产品技术标准2023年.docx VIP
- 66kV及以下架空电力线路设计规范解读.pdf VIP
- 职教高考教程数学冲刺复习001集合与不等式.pptx VIP
- 人教版五年级语文(上册)写字表课文同步正楷练字帖.pdf VIP
- 蔬菜西甜瓜种子生产技术 番茄种子生产技术、蔬菜西甜瓜种子生产技术 番茄品种类型.pptx VIP
- 深度解读《66kV及以下架空电力线路设计规范》GB 50061-2010.pptx VIP
- 林场基本情况-国有河南卢氏东湾林场-国家林业局.DOC VIP
- 复合材料发展史.pptx VIP
- 2018年初级经济师经济基础知识试题:第八章含答案.docx VIP
文档评论(0)