在ZigBee协议栈中增加新的任务
- 格式:doc
- 大小:26.50 KB
- 文档页数:2
NXP ZigBee如何增加自定义Cluster(shaozhong.liang)基本概念在ZigBee规范中有Profile, Cluster,Attribute,Endpoint等概念。
Profile用来规范ZigBee相关产品需要要满足那些要求。
ZigBee联盟则已经规范了一些Profile,如Home Automation(0x0104),Smart Energy(0x0109),Building Automation(0x0105)等。
其中Home Automation Profile就规定了智能家居都要做什么,HA Profile ID是0x0104。
在一个Profile的规范下,一个Cluster实际上是一组属性和命令的集合,是设备之间的一个通信接口。
Cluster并不是只存在单独某一个设备之上,而是联系两个设备的纽带。
因此,对于一个设备,有“Input Cluster”和“Output Cluster”之分。
也可以描述为一个Cluster包括Server 端和Client端。
一个Cluster被定义好之后,它包含的命令是固定的。
例如用于“控制器”和“开关”之间的一个Cluster,包含一条命令“Toggle”,含义是“改变开关状态”。
则该Cluster对于控制器而言是Output Cluster(发出“Toggle”命令),对于开关而言是Input Cluster(接收“Toggle”命令)。
智能家居HA下的一个调光器,操作这个调光器就需要一些命令,比如变亮,变暗,关灯,开灯这些,另外,这个调光器也会有一些Attribute 属性,比如当前的亮度,由亮变暗的时长。
HA Profile已经规定了调光器应该有哪些Cluster,如Color Control Cluster,Ballast Configuration Cluster 等。
每个Cluster 被分配一个唯一16位Cluster ID,从0xFC00开始是厂家自定义Cluster ID。
zigbee,协议栈,按键事件篇一:从Zigbee协议栈底层添加自己的按键配置本实验是基于ZStack-CC2530-2.5.1a版本的协议栈来进行实验的,整个实验需要改动hal_board_cfg.h、hal_board_cfg.h、hal_key.c、hal_key.h和自己定义的Coordinator.c这5个文件。
注意:添加自己的按键时尽量不要修改协议栈里面的按键程序,自己另行添加即可。
1、hal_key.h在/* Switches (keys) */下面添加自己的按键定义#define HAL_KEY_SW_8 0x80图1:----------------------------------------------------------------------------------------2、hal_board_cfg.h(转载于: 小龙文档网:zigbee,协议栈,按键事件) 在/* S6 */#define PUSH1_BV BV(1)#define PUSH1_SBIT P0_1#if defined (HAL_BOARD_CC2530EB_REV17)#define PUSH1_POLARITY ACTIVE_LOW#elif defined (HAL_BOARD_CC2530EB_REV13)#define PUSH1_POLARITY ACTIVE_LOW#else#error Unknown Board Indentifier#endif下面模仿/* S6 */下的程序定义自己的按键值:/* S8 */#define PUSH8_BVBV(4)//修改#define PUSH8_SBIT P0_4//修改#if defined (HAL_BOARD_CC2530EB_REV17)#define PUSH8_POLARITY ACTIVE_HIGH#elif defined (HAL_BOARD_CC2530EB_REV13)#define PUSH8_POLARITY ACTIVE_LOW#else#error Unknown Board Indentifier#endif图2:------------------------------------------------------------------------------------------------------------- 在/* ----------- Push Buttons ---------- */#define HAL_PUSH_BUTTON1() (PUSH1_POLARITY (PUSH1_SBIT)) #define HAL_PUSH_BUTTON2() (PUSH2_POLARITY (PUSH2_SBIT)) #define HAL_PUSH_BUTTON3() (0)#define HAL_PUSH_BUTTON4() (0)#define HAL_PUSH_BUTTON5() (0)#define HAL_PUSH_BUTTON6() (0)下定义自己的按键函数#define HAL_PUSH_BUTTON8() (PUSH8_POLARITY (PUSH8_SBIT)) 图3:---------------------------------------------------------------------------------------------------------------- hal_key.c在/* SW_6 is at P0.1 */#define HAL_KEY_SW_6_PORTP0#define HAL_KEY_SW_6_BIT BV(1)#define HAL_KEY_SW_6_SEL P0SEL#define HAL_KEY_SW_6_DIR P0DIR/* edge interrupt */#define HAL_KEY_SW_6_EDGEBIT BV(0)#define HAL_KEY_SW_6_EDGEHAL_KEY_FALLING_EDGE/* SW_6 interrupts */#define HAL_KEY_SW_6_IENIEN1 /* CPU interrupt mask register */#define HAL_KEY_SW_6_IENBITBV(5) /* Mask bit for all of Port_0 */#define HAL_KEY_SW_6_ICTL P0IEN /* Port Interrupt Control register */ #define HAL_KEY_SW_6_ICTLBIT BV(1) /* P0IEN - P0.1 enable/disable bit */ #define HAL_KEY_SW_6_PXIFG P0IFG /* Interrupt flag at source */下模仿/* SW_6 is at P0.1 */建立自己的按键函数#define HAL_KEY_SW_8_PORTP0#define HAL_KEY_SW_8_BIT BV(4) //修改#define HAL_KEY_SW_8_SEL P0SEL#define HAL_KEY_SW_8_DIR P0DIR/* edge interrupt */#define HAL_KEY_SW_8_EDGEBIT BV(0)#define HAL_KEY_SW_8_EDGE HAL_KEY_FALLING_EDGE/* SW_8 interrupts */#define HAL_KEY_SW_8_IENIEN1 /* CPU interruptmask register */#define HAL_KEY_SW_8_IENBITBV(5) /* Mask bit for all of Port_0 */#define HAL_KEY_SW_8_ICTL P0IEN /* Port Interrupt Control register */ #define HAL_KEY_SW_8_ICTLBIT BV(4)//修改#define HAL_KEY_SW_8_PXIFG P0IFG /* Interrupt flag at source */图4:------------------------------------------------------------------------------------------------------------- 注意:将void HalKeyPoll (void)中的// if ((HAL_KEY_JOY_MOVE_PORT & HAL_KEY_JOY_MOVE_BIT)) /* Key is active HIGH */ // {// keys = halGetJoyKeyInput();// }/* If interrupts are not enabled, previous key status and current key status* are compared to find out if a key has changed status.*/// if (!Hal_KeyIntEnable)// {// if (keys == halKeySavedKeys)// {/* Exit - since no keys have changed *///return;// }/* Store the current keys for comparation next time */// halKeySavedKeys = keys;// }// else// {/* Key interrupt handled here */// }图5:全部注释掉,因为它会对我们设定的按键产生干扰,具体情况我也不知道... 然后再在内模仿:if (HAL_PUSH_BUTTON1()){keys |= HAL_KEY_SW_6;}篇二:ZigBee系统事件ZIGBEE事件ZIGBEE事件有两类,系统定义事件和用户定义事件。
zigbee期末考试题目和答案一、单项选择题(每题2分,共20分)1. ZigBee协议栈中,负责设备发现和网络管理的是哪一层?A. 应用层B. 网络层C. 应用支持子层D. 物理层答案:B2. ZigBee网络中,一个网络最多可以有多少个节点?A. 65000B. 65535C. 32767D. 16383答案:A3. ZigBee协议中,以下哪个不是网络层提供的服务?A. 路由发现B. 数据传输C. 安全加密D. 错误检测答案:C4. ZigBee协议中,以下哪个是用于设备发现的命令?A. ZDO_NWK_ADDR_REQB. ZDO_ACTIVE_EP_REQC. ZDO_SIMPLE_DESC_REQD. ZDO_BIND_REQ答案:B5. ZigBee协议中,以下哪个不是ZigBee网络中的设备类型?A. 协调器B. 路由器C. 终端设备D. 网关答案:D6. ZigBee协议中,以下哪个是用于数据传输的命令?A. ZDO_NWK_ADDR_REQB. ZCL_READ_ATTR_REQC. ZCL_WRITE_ATTR_REQD. ZCL_REPORT_ATTR_REQ答案:B7. ZigBee协议中,以下哪个是用于安全通信的命令?A. ZDO_NWK_ADDR_REQB. ZCL_READ_ATTR_REQC. ZCL_WRITE_ATTR_REQD. ZDO_APPLY_SECUR_REQ答案:D8. ZigBee协议中,以下哪个不是ZigBee协议栈的应用层服务?A. 网络管理B. 配置服务C. 通用应用服务D. 物理层服务答案:D9. ZigBee协议中,以下哪个不是ZigBee协议栈的配置服务?A. 简单描述B. 主设备绑定C. 复杂描述D. 网络发现答案:C10. ZigBee协议中,以下哪个不是ZigBee协议栈的通用应用服务?A. 基本服务B. 网络服务C. 应用框架服务D. 安全服务答案:B二、多项选择题(每题3分,共15分)11. ZigBee协议栈中,以下哪些是网络层的功能?A. 路由发现B. 数据传输C. 安全加密D. 错误检测答案:A, B, D12. ZigBee协议中,以下哪些是ZigBee网络中的设备类型?A. 协调器B. 路由器C. 终端设备D. 网关答案:A, B, C13. ZigBee协议中,以下哪些是用于设备发现的命令?A. ZDO_NWK_ADDR_REQB. ZDO_ACTIVE_EP_REQC. ZDO_SIMPLE_DESC_REQD. ZDO_BIND_REQ答案:B, C14. ZigBee协议中,以下哪些是用于数据传输的命令?A. ZDO_NWK_ADDR_REQB. ZCL_READ_ATTR_REQC. ZCL_WRITE_ATTR_REQD. ZCL_REPORT_ATTR_REQ答案:B, C, D15. ZigBee协议中,以下哪些是ZigBee协议栈的应用层服务?A. 网络管理B. 配置服务C. 通用应用服务D. 物理层服务答案:A, B, C三、填空题(每题2分,共20分)16. ZigBee协议是基于________协议的高级应用层协议。
南开大学22春“物联网工程”《物联网通信技术》作业考核题库高频考点版(参考答案)一.综合考核(共50题)1.在802.11无线局域网中,所有站点完成发送后,必须等待一段很短的时间才能发送下一帧。
()A.正确B.错误参考答案:A2.下列在ZigBee技术中,各英文缩写与汉语解释对应错误的是()。
A.FFD-全功能设备B.RFD-简化功能设备C.MAC-应用层框架D.APS-应用支持子层参考答案:C3.ZigBee中每个协调器节点最多可连接()个节点。
A.255B.258C.254D.126参考答案:A4.802.11b的物理层工作频段在2.4G,最大速率可达()。
A.11MbpsB.54MbpsC.200MbpsD.600Mbps参考答案:A5.RFID电子标签与读写器之间通过耦合元件实现射频信号的非接触的空间耦合,其中电磁反向散射耦合方式的典型工作频率不包括()。
A.233MHzB.915MHzC.2.45GHzD.5.8GHz参考答案:A6.差分相移键控调制利用载波信号初始相位来表示所传输的码元。
()A.正确B.错误参考答案:B7.ZigBee的MAC层定义了4种帧结构为()。
A.信标帧、数据帧、管理帧、MAC命令帧B.信标帧、数据帧、确认帧、MAC命令帧C.信标帧、数据帧、CTS帧、MAC命令帧D.信标帧、数据帧、RTS帧、MAC命令帧参考答案:B8.RFID读写器中,对读写器和电子标签之间传输的数据进行加密和解密的部分是()。
A.射频接口B.逻辑控制单元C.天线#中间件参考答案:B9.蓝牙技术从()增加了带宽和连接数,支持双工模式,可以一边进行语音通信,一边进行文档传输。
C.V3.0D.V4.0参考答案:B10.ZigBee网络中新加入节点的短地址由()分配。
A.自己获取B.协调器节点C.路由器节点D.父节点参考答案:D11.E-UTRAN 空中接口协议栈的物理层负责处理编译码、调制解调、多天线映射等功能。
ZigBee协议栈任务处理分析笔记----(转载请注明出处774910**********)Everhu ai写于2011-11-17 弄了这么久Z i g Bee协议栈,今天终于有一点头绪了,基本上知道了整个系统任务怎么被添加,又是怎么被切换的一个过程。
下面就简单讲一讲这部分内容。
首先看的当然是main()函数,不过这个函数不是今天的重点,里面有我添加的注释,先就一笔带过吧。
int main( void ){// Turn off interr uptsosal_int_di sable( INTS_A LL );//关闭全局中断E A=0,初始化过程不响应任何中断// Initial izat i on for board relate d stuff such as LEDsHAL_BOARD_I NIT();//配置了时钟、L ED、串口// Make sure supply voltage is high enough to runzmain_vdd_ch eck();//检查电源电压// Initial ize stackmemoryzmain_ram_i nit();//初始化堆内存// Initial izeb oard I/O /初始化板子用到的IO口InitBo ard( OB_COL D );// Initial ze HAL driver sHalDri verIn i t();//初始化外设// Initial ize NV System//系统初始化osal_n v_init( NULL );// Initial izeb asic NV items//任务初始化zgInit();// Initial izet he MACZMacIn it();// Determi ne the extend ed addres s//确定长地址zmain_ext_a dd r();#ifnde f NONWK// Sincethe AF isn't a task, call it's initia lizat ion routin eafInit();#endif// Initial izet he operat in g systemosal_init_s ystem(); //系统初始化// Allowinterr uptsosal_int_en able( INTS_A L L );//使能中断// Finalb oardinitia l izat ion //后期初始化InitBo ard( OB_REA D Y ); //sd rest// Displa y inform ation about this device//显示设备信息zmain_d ev_i nfo();/* Displa y the device info on the LCD */#ifdef L CD_SU PP ORTEDzmain_lcd_i nit(); //显示信息#endif#ifdef WDT_IN_P M1/* If WDT is used, this is a good placeto enable it. */WatchD o gEnab le( WDTIMX ); //使用看门狗#endifosal_st art_syste m(); // No Return from here//正常情况下不返回// Should n't get herereturn( 0 );} // main()其中含有os al的都是与操作系统相关的。
zigbee协议栈2010-03-10 15:11zigbee协议栈结构由一些层构成,每个层都有一套特定的服务方法和上一层连接。
数据实体(data entity)提供数据的传输服务,而管理实体(managenmententity)提供所有的服务类型。
每个层的服务实体通过服务接入点(Service AccessPoint.SAP)和上一层相接,每个SAP提供大量服务方法来完成相应的操作。
ZigBee协议栈基于标准的OSI七层模型,但只是在相关的范围来定义一些相应层来完成特定的任务。
IEEE 802.15.4—2003标准定义了下面的两个层:物理层(PHY层)和媒介层(MAC层)。
ZigBee联盟在此基础上建立了网络层(NWK 层)以及应用层(APL层)的框架(framework)。
APL层又包括应用支持子层(Application Support Sub—layer,APS)、ZigBee的设备对象(ZigBee Device 0bjects。
ZD0)以及制造商定义的应用对象。
1物理层(PHY)IEEE802.15.4协议的物理层是协议的最底层,承担着和外界直接作用的任务。
它采用扩频通信的调制方式,控制RF收发器工作,信号传输距离约为50m(室内)或150m(室外)。
IEEE802.15.4.2003有两个PHY层,提供两个独立的频率段:868/915MHz 和2.4GHz。
868/915MHz频段包括欧洲使用的868MHz频段以及美国和澳大利亚使用的915MHz频段,2.4GHz频段世界通用。
2媒体访问控制层(MAC)MAC层遵循IEEE802.15.4协议,负责设备间无线数据链路的建立、维护和结束,确认模式的数据传送和接收,可选时隙,实现低延迟传输,支持各种网络拓扑结构,网络中每个设备为16位地址寻址。
它可完成对无线物理信道的接入过程管理,包括以下几方面:网络协调器(coordinator)产生网络信标、网络中设备与网络信标同步、完成PAN的入网和脱离网络过程、网络安全控制、利用CSMA—CA机制进行信道接入控制、处理和维持GTS(Guaranteed Time Slot)机制、在两个对等的MAC实体间提供可靠的链路连接。
6.1 Zigbee协议栈添加自己的任务实验对于IEEE 802.15.4定义的规范和zigbee联盟制定的规范,在Z-Stack2007/PRO整个协议栈中,对应的各层协议已经基本实现。
在此基础上,若想建立一个项目并添加一个任务,必须要对Z-Stack协议栈的运行流程及应用层的调用关系搞清楚。
这些知识,我们在前面的第四章已经基本讲述了。
下面我们以一个简单的例子,来讲述怎样添加自己的任务,并完成自己的事件。
该实验的功能是实现在一个zigbee网络中,当协调器节点建立网络之后,路由节点和终端节点打开并加入该网络,然后协调器节点的LED1灯、路由节点的LED2灯、终端节点的LED3灯同时闪烁。
我们将这个项目的名字设置为MyAppXD。
6.1.1 实验目的与器材1)实验目的◆学习如何利用Z-Stack2007/PRO创建自己的工程。
◆学习如何添加自己的任务并编写处理事件。
◆加深对Z-Stack2007/PRO协议栈的流程认识。
◆了解zigbee协议规范在Z-Stack中的体现。
2)实验器材◆3个CC2530开发套件(1个协调器套件,1个路由器套件,1个终端套件);◆PC电脑一台;◆协议栈开发环境:IAR 7.51A。
6.1.2 实验原理与步骤1)硬件介绍在本实验中,采用zigbee模块CC2530最小模块和带液晶低板组成一个设备。
试验中需要的3个设备,都是采用这种套件方式。
每个套件包括:一个CC2530最小模块(如图6-1-3所示),一个带液晶底板(如图6-1-2所示),一个CC2530仿真器(如图6-1-1所示),还有一个大头的USB下载线。
图6-1-1 CC2530/2430仿真器图6-1-2 整个CC2530开发模块图6-1-3 CC2530最小模块2)实验原理OSAL任务分配机制在基于ZigBee协议的应用开发中,用户只需要实现应用程序框架即可。
ZigBee协议栈框架包含了最多240个应用程序对象。
要试验的:1串口查看数据2用自己的温度传感器看3串口通信,该代码,发送自己想发的数据。
如果修改数据长度看路由代码。
修改路由代码弄串口这边原理。
两头拼。
要解决的问题:1温度采集代码2zigbee传输代码3串口传输数据代码4endpoint与任务的关系。
与按键串口服务关系。
已经解决的问题:1开发的流程2如何添加新任务3osal工作原理,任务调度机制。
难点:几个关键回调函数的理解关键点(总体规划):1、数据采集,这部分的关键是I-WIRE协议的理解。
传感器与51的通信问题。
自己必须先把这部分搞定,现在要解决这个问题,即在TI提供的协议栈的基础上开发自己的应用。
要弄懂温度,湿度,PH值传感器的工作原理,一般采用I-WIRE总线的协议。
2、将数据传输到协调器(控制节点),这部分关键是zigbee通信协议,要充分利用TI的Z-STACK 协议栈来进行二次开发。
主要关注数据的收发模块,数据的格式、特点。
3、数据从协调器传到PC,这部分关键是串口通信协议。
正确的将数据传到上位机。
4、PC控制显示界面,这部分关键是找到关键的API,然后取出自己想要的数据显示。
如果需要存储数据,要操纵数据库,选择数据库。
解决这几个问题这个项目就算完成了。
现在猜想:一、开发一个新的应用应该做什么呢?1获取模板标识符,簇标识符,设备标识符的相关信息,我要进一步了解这两个关键的概念。
2在1基础上我要能注册application,taskID,endpoint,以建立自己应用与操作系统交互。
这是一个关键的点。
二、必须弄懂传感器采集的原理,代码。
三、必须弄懂串口的原理,代码。
关键的概念1、PAN标识符,PAN ID2、模板标识符,profileID3、簇标识符,clusterID 8bit4、节点,ieee地址(扩展地址)网络地址(短地址)64bit/16bit5、端点,endpoint 8bit6、设备标识符,Device Description 16bit7、应用任务ID,taskID8、属性Attribute 16bit9、Taskevents envents 16bit申请到模板标识符后,可以为模板定义设备描述符、簇标识符、服务类型(KVP或MSG)属性(Attribute)。
专 业(班): 学 号: 姓 名: (本试题满分100分,考试时间100分钟)一、判断题(每空 1 分,共 20分)1.无线传感器网络英文是:Wireless Sensor Networks ,简称WSN 。
( )2.ZigBee 技术是一种近距离、低复杂度、低功耗、低速率、低成本的双向无线通信技术,它是基于IEEE802.15.4协议栈的,在工业、农业、医疗等领域应用非常广泛。
( ) 3.ZigBee 协议栈由物理层、介质访问控制层、网络层、安全层和应用层结成。
( ) 4.典型短距离无线通信技术包括红外数据传输、蓝牙、Wi-Fi 、NFC 、RFID 等。
( ) 5.CC2530是集IEEE802.15.4、ZigBee 、RF4CE 一体的片上系统,但没有8051内核。
( ) 6.在ZigBee 网络中存在三种逻辑设备类型:Coordinator (协调器)、Router (路由器)和EndDevice (终端设备)。
ZigBee 网络由多个协调器以及多个路由器和多个终端设备组成。
( )7.Basic RF layer 为双向无线通信提供了一个简单的协议,通过这个协议能够进行点对点的数据发送和接收。
( )8.在智能家居领域常见的传感器有温湿度、红外人体、烟雾、光强度等传感器。
( ) 9.建立IAR 开发环境:①新建工作区。
打开“IAR Embedded Workbench ”命令,启动IAR 软件;选择【File 】✂【New 】✂【Workspace …】命令。
②新建工程。
点击【Project 】✂【Creat New Project …】命令。
③新建文件。
点击菜单栏【File 】✂【New 】✂【File 】命令或点击工具栏“”图标,新建文件,并将文件保存在工程文件相同中径下。
( ) 10.CC2530芯片它拥有30个I/O 端口,分别由P0、P1和P2组成。
( ) 11.模拟传感器是将被测量的非电学量转换成模拟电信号。
基于ZigBee的无线红外防盗报警系统设计范国娟;范国卿【摘要】Using TI's single chip CC2430 and infrared sensor RE200B, this paper which is based on infrared anti-theft warning technology and ZigBee has finished the hardware design and software development of the wireless infrared anti-theft alarm system. It solved the problems that existed in the wireless alarm system nowadays such as false alarm, high cost and so on. The system has been proved its expected functions by debugging the circuit.%结合红外防盗报警和ZigBee技术这两大热点课题,利用TI公司的单芯片CC2430和RE200B红外传感器,完成了基于ZigBee技术无线红外防盗报警系统的硬件设计和软件开发,解决了现有无线报警系统存在的误报警,成本高等问题。
经过对系统的硬件软件电路调试,验证了系统预期的功能。
【期刊名称】《电子设计工程》【年(卷),期】2012(020)012【总页数】5页(P16-20)【关键词】无线红外防盗报警;ZigBee;CC2430;系统设计【作者】范国娟;范国卿【作者单位】山东传媒职业学院,山东济南250200;苏宁电器南京总部,江苏南京210005【正文语种】中文【中图分类】TP277目前报警系统的信号传输主要是有线和无线两种。
有线方式具有通讯可靠、抗干扰能力强、器件成本低等优点,适用于新建且可以在墙壁内预留连接线的建筑物,但是其机动性差、不便适应用户及产品的多变要求,对预留连接线的维护及更换难度高、费用大;无线方式可避免探头与主机之间的连接线影响室内装修,具有灵活、简洁的优点,需求日益扩大,越来越得到用户的认可,是发展趋势,但是容易受到干扰,传输稳定性和抗干扰性存在不足,价格较高。
在ZigBee协议栈中增加新的任务(实测成功)
在ZigBee协议栈中增加新的任务分为以下三步(看参考里程中
SampleApp_TaskID的执行方式):
1.在“SampleApp.c”中声明新添加任务TaskID,如
int8 MyApp_TaskID;
2.在“SampleApp.h”中增加该任务的初始化函数和任务处理函数的函数原型声
明,如
extern void MyApp_Init(uint8 task_id );
extern UINT16 MyApp_ProcessEvent( uint8 task_id, uint16 events );
3.在“SampleApp.c”文件中定义该任务的初始化函数和任务处理函数
void MyApp_Init( uint8 task_id )
{
MyApp_TaskID = task_id;
//如有需要再初始化一些自己的东西,
}
uint16 MyApp_ProcessEvednt( uint8 task_id, uint16 events )
{
P1_0=~P1_0; //led1翻转
osal_start_timerEx (MyApp_TaskID, 3, 250);//250ms后再次启动
return 0;
}
4.OSAL初始化时增加初始化任务,及对应的任务处理序列两小步。
4.1 增加初始化任务
假定增加任务名为“MyApp”的任务,在OSAL_SampleApp.c中找到以下函数(其实,该文件中仅有这一个函数):
void osalInitTasks( void )
{
……………
ZDApp_Init( taskID++ );
SampleApp_Init( taskID++ );
MyApp_Init( taskID ); //添加任务初始化函数
}
其中蓝色部分为修改添加的部分。
4.2 增加任务处理序列
任务的处理函数地址:
const pTaskEventHandlerFn tasksArr[] = {
……………..
ZDApp_event_loop,
SampleApp_ProcessEvent,
MyApp_Process //添加任务处理函数
};
这两个函数的顺序是对应的,否则会张冠李戴;
注:任务处理序列数组都是任务处理函数的名。
5.在合适的地方启动该任务
如在”SampleApp.c”中按键处理时增加
if ( keys & HAL_KEY_SW_3 )
osal_start_timerEx (MyApp_TaskID, 3, 250); //250ms后执行
附:-----------------------------------------
/*********************************************************************
* @fn osal_start_timerEx
*
* @brief
*
* This function is called to start a timer to expire in n mSecs.
* When the timer expires, the calling task will get the specified event.
*
* @param uint8 taskID - task id to set timer for
* @param uint16 event_id - event to be notified with
* @param UNINT16 timeout_value - in milliseconds.
*
* @return SUCCESS, or NO_TIMER_AVAIL.
*/。