项目三了解无线传感器协议栈

上传人:re****.1 文档编号:593254594 上传时间:2024-09-24 格式:PPT 页数:56 大小:224.50KB
返回 下载 相关 举报
项目三了解无线传感器协议栈_第1页
第1页 / 共56页
项目三了解无线传感器协议栈_第2页
第2页 / 共56页
项目三了解无线传感器协议栈_第3页
第3页 / 共56页
项目三了解无线传感器协议栈_第4页
第4页 / 共56页
项目三了解无线传感器协议栈_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《项目三了解无线传感器协议栈》由会员分享,可在线阅读,更多相关《项目三了解无线传感器协议栈(56页珍藏版)》请在金锄头文库上搜索。

1、项目三了解ZigBee无线传感器网络协议栈知识目标:1.掌握zigbee无线传感器网络的协议栈和协议的区别等知识。2.掌握Z-Stack协议栈的OSAL分配机制。3.了解Z-Stack协议栈的OSAL运行机制。4.掌握Z-Stack协议栈的OSAL常用函数。项目三了解ZigBee无线传感器网络协议栈技能目标:1.掌握Z-Stack协议栈的运行机制。2.掌握Z-Stack协议栈中OSAL的添加新任务的方法。项目三了解ZigBee无线传感器网络协议栈在实际zigbee无线传感器网络工程的开发过程中:首先借助TI提供的协议栈中例程SampleApp,接着根据需要完成的功能,查看支持Z-Stack协议

2、栈的硬件电路图,再查阅数据手册(CC2530的数据手册、Z-Stack协议栈说明、Z-Stack协议栈API函数使用说明等)文件,然后再进行协议栈的修改。最后,还需要烧录器下载到相应的硬件,实现zigbee无线传感器网络的组建和开发。设计思路3.1.1协议与协议栈协议定义的是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据收发;议栈是协议的具体实现形式。通俗的理解为代码实现的函数库,以便于开发人员调用。3.1Z-Stack协议栈3.1.1协议与协议栈协议栈是指网络中各层协议的总和,一套协议的规范。其形象地反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议。

3、使用最广泛的是因特网协议栈,由上到下的协议分别是:应用层(Http、Telnet、DNS、Email等),运输层(TCP、UDP),网络层(IP),链路层(WI-FI、以太网、令牌环、FDDI等)。3.1Z-Stack协议栈3.1.1协议与协议栈3.1Z-Stack协议栈3.1.1协议与协议栈Zigbee协议栈开发的基本思路如下。借助TI提供的协议栈中例程SampleApp进行二次开发,用户不需要深入研究复杂的zigbee协议栈,这样可以减轻开发者的工作量。Zigbee无线传感器网络中数据采集,只需要用户在应用层加入传感器的读取函数和添加头文件即可实现。如果考虑节能,可以根据数据采集周期(zi

4、gbee协议栈例程中已开发了定时程序)进行定时,定时时间到就唤醒zigbee终端节点,终端节点唤醒后,自动采集传感器数据,然后将数据发送给路由器或者直接发给协调器,即监测节点定时汇报监测数据。协调器(网关)根据下发的控制命令,将控制信息转发到具体的节点,即控制节点等待控制命令下发。3.1Z-Stack协议栈3.1.2使用Z-Stack协议栈传输SampleApp.c中定义了发送函数中定义了发送函数staticvoidSampleApp_SendTheMessage(void)。该函数通过。该函数通过调用调用AF_DataRequest来发送数据。该函数定义在来发送数据。该函数定义在Profil

5、e目录下的目录下的AF.c文件中。文件中。3.1Z-Stack协议栈3.1.2使用Z-Stack协议栈传输*dstAddr:发送目的地址端点地址(端点号)和传送模式。:发送目的地址端点地址(端点号)和传送模式。*srcEP:源:源(答复或确认答复或确认)终端的描述(比如操作系统中任务终端的描述(比如操作系统中任务ID等)源等)源EP。cID:被:被Profile指定的有效的集群号。指定的有效的集群号。len:发送数据长度。:发送数据长度。*buf:指向存放发送数据的缓冲区的指针。:指向存放发送数据的缓冲区的指针。*transID:任务:任务ID号。号。options:有效位掩码的发送选项。有效

6、位掩码的发送选项。Radius:发送跳数,通常设置为:发送跳数,通常设置为AF_DEFAULT_RADIUS。3.1Z-Stack协议栈3.2.1物理层物理层(PHY)定义了无线信道和MAC子层之间的接口,提供物理层数据服务和物理层管理服务,主要是在驱动程序的基础上,实现数据传输和管理。物理层数据服务从无线物理信道上收发数据,管理服务包括信道能量监测(ED)、链接质量指示(LQI)、载波检测(CS)和空闲信道评估(CCA)等,维护一个由物理层相关数据组成的数据库。3.2zigbee无线传感器网络功能层简介质访问控制层介质访问控制层(MAC)提供点对点通信的数据确认(Per-hopAcknowl

7、edgments)以及一些用于网络发现和网络形成的命令,但是介质访问控制层不支持多跳(Multi-hop)、网型网络(Mesh)等概念3.2zigbee无线传感器网络功能层简介网络层网络层(NWK)主要负责设备加入和退出网络、路由管理,在设备之间发现和维护路由,发现邻设备,存储邻设备信息等。3.2zigbee无线传感器网络功能层简介网络层网络层(NWK)主要负责设备加入和退出网络、路由管理,在设备之间发现和维护路由,发现邻设备,存储邻设备信息等。1.地址类型2.网络地址分配3.Z-Stack寻址4.路由5.安全3.2zigbee无线传感器网络功能层简介应用层应用层主要包括应用支持子层(APS)

8、和Zigbee设备对象(ZDO)。其中,APS负责维护和绑定表、在绑定设备之间传送消息;而ZDO定义设备在网络中的角色,发起和响应绑定请求,在网络设备之间建立安全机制。3.2zigbee无线传感器网络功能层简介3.3.1OSAL基础知识1资源(Resource)2共享资源(SharedResource)3任务(Task)4多任务运行(Muti-TaskRunning)5内核(Kernel)6互斥(MutualExclusion)7消息队列(MessageQueue)3.3OSAL多任务分配机制3.3.1OSAL基础知识1资源(Resource)2共享资源(SharedResource)3任务(

9、Task)4多任务运行(Muti-TaskRunning)5内核(Kernel)6互斥(MutualExclusion)7消息队列(MessageQueue)3.3OSAL多任务分配机制3.3.2OSAL简介Z-stack是TI公司开发的zigbee协议栈,并经过zigbee联盟认可而被全球众多开发商所广泛采用。Z-Stack采用基于一个轮转查询式操作系统,帮助程序员方便地开发一套zigbee系统。3.3OSAL多任务分配机制3.3.2OSAL简介3.3OSAL多任务分配机制3.3.2OSAL简介一般情况下,用户只需额外添加3个文件就可以完成一个项目,一个是主控文件,存放具体的任务事件处理函数

10、(例如SampleApp_ProcessEvent或GenericApp_ProcessEvent);一个是这个主控文件的头文件(例如SampleApp.h),另外一个是操作系统接口文件(例如OSAL_SampleApp.c),该文件主要存放任务数组tasksArr,任务数组的具体内容为每个任务的相应的处理函数指针。3.3OSAL多任务分配机制3.3.2OSAL简介“数据实体接口”的目标是向上层提供所需的常规数据服务;“管理实体接口”的目标是向上层提供访问内部层的参数、配置和管理数据服务。物理层和媒体接入控制子层均属于标准,而标准与网络/安全层、应用层一起,构成了zigbee协议栈。3.3OS

11、AL多任务分配机制3.3.3协议栈软件架构整个Z-Stack的主要工作流程大致分为系统启动、驱动初始化、OSAL初始化和启动、进入任务轮询几个阶段。3.3OSAL多任务分配机制3.3.3协议栈软件架构3.3OSAL多任务分配机制3.3.3协议栈软件架构系统上电后,通过执行ZMain文件夹中ZMain.c的main()函数实现硬件的初始化。关总中断osal_int_disable(INTS_ALL);初始化板上硬件设置HAL_BOARD_INIT();检查工作电压状态zmain_vdd_check();初始化I/O口InitBoard(OB_COLD);初始化HAL层驱动HalDriverIni

12、t();初始化非易失性存储器sal_nv_init(NULL);初始化MAC层ZMacInit();分配64位地址zmain_ext_addr();初始化Zstack的全局变量并初始化必要的NV项目zgInit();初始化操作系统osal_init_system();使能全局中断osal_int_enable(INTS_ALL);初始化后续硬件InitBoard(OB_READY);显示必要的硬件信息zmain_dev_info();最后进入操作系统调度osal_start_system()。3.3OSAL多任务分配机制此例程的默认路径为C:TexasInstrumentsZStack-CC2

13、530-2.3.0-1.4.0ProjectszstackSamplesSampleAppCC2530DB下找到SampleApp.eww。在右侧工作空间窗口打开App文件夹,我们可以看到5个文件,分别是“SampleApp.c”、“SampleApp.h”、“OSAL_SampleApp.c”、“SampleAppHw.c”、“SampleAppHw.h”。整个程序所实现的功能都在这5个文件当中。3.4OSAL运行机制运行机制。3.4OSAL运行机制tasksCnt该变量保存了任务数,其声明为该变量保存了任务数,其声明为constuint8tasksCnt,其中,其中uint8的定义为的定义

14、为typedefunsignedcharuint8。tasksCnt变量的定义在变量的定义在OSALSampleApp.c文件中。文件中。tasksEvents该变量是一个指针,指向了事件表的首地址,其声明为该变量是一个指针,指向了事件表的首地址,其声明为uint16*tasksEvents,其中,其中uint16的定义为的定义为typedefunsignedshortuint16。tasksEvents是一个指针数组,只是在是一个指针数组,只是在OSAL_SampleApp.c文件进行定义。文件进行定义。tasksArr该变量是一个数组,该数组的每一项都是一个函数指针,指向了事件的处理函数,

15、其声明为该变量是一个数组,该数组的每一项都是一个函数指针,指向了事件的处理函数,其声明为pTaskEventHandlerFntasksArr,其中,其中pTaskEventHandlerFn的定义为的定义为typedefunsignedshort(*pTaskEventHandlerFn)(unsignedchartask_id,unsignedshortevent)。变量。变量pTaskEventHandlerFn的的定义定义OSAL_Tasks.h文件中。文件中。3.4OSAL运行机制OSAL调度机制如下。调度机制如下。入口程序为入口程序为Zmain.c;执行执行main()主程序;主程

16、序;任务调度初始化任务调度初始化osal_init_system();默认启动了默认启动了osalInitTasks(),最多,最多9个任务,添加到队列,序号个任务,添加到队列,序号08;最后通过调用最后通过调用SampleApp_Init()实现用户自定义任务的初始化(用户根据项实现用户自定义任务的初始化(用户根据项目需要修改该函数)。目需要修改该函数)。3.4OSAL运行机制3.4.1OSAL任务启动和初始化任务启动和初始化任何任何OSAL任务的工作必须分为两步:一是进行任务初始化;二是处理任务事任务的工作必须分为两步:一是进行任务初始化;二是处理任务事件。件。3.4OSAL运行机制开始系

17、统初始化执行操作系统3.4.1OSAL任务启动和初始化任务启动和初始化任务初始化主要步骤如下。初始化应用服务变量constpTaskEventHandlerFntasksArr数组定义系统提供的应用服务和用户服务变量,如MAC层服务macEventLoop、用户服务SampleApp_ProcessEvent等。分配任务ID和分配堆栈内存voidosalInitTasks(void)主要功能是通过调用osal_mem_alloc()函数给各个任务分配内存空间,给各个已定义任务指定唯一的标识号。在AF层注册应用对象通过填入endPointDesc_t数据格式的EndPoint变量,调用afReg

18、ister()在AF层注册EndPoint应用对象。通过在AF层注册应用对象的信息,告知系统afAddrType_t地址类型数据包的路由端点,例如用于发送周期信息的SampleApp_Periodic_DstAddr和发送LED闪烁指令的SampleApp_Flash_DstAddr。注册相应的OSAL或者HAL系统服务在协议栈中,Z-Stack提供键盘响应和串口活动响应两种系统服务,但是任何Z-Stask任务均不自行注册系统服务,两者均需要由用户应用程序注册。值得注意的是,有且仅有一个OSALTask可以注册服务。例如注册键盘活动响应可调用RegisterForKeys()函数。处理任务事件

19、处理任务事件通过创建“ApplicationName”_ProcessEvent()函数处理。一个OSAL任务可以响应16个事件,除了协议栈默认的强制事件(MandatoryEvents)之外还可以再定义15个事件。3.4OSAL运行机制3.4.1OSAL任务启动和初始化任务启动和初始化SYS_EVENT_MSG(0x8000)是强制事件。该事件主要用来发送全局的系统信息,包括以下信息。AF_DATA_CONFIRM_CMD:该信息用来指示通过唤醒AFDataRequest()函数发送的数据请求信息的情况。AF_INCOMING_MSG_CMD:用来指示接收到的AF信息。KEY_CHANGE:

20、用来确认按键动作。ZDO_NEW_DSTADDR:用来指示自动匹配请求。ZDO_STATE_CHANGE:用来指示网络状态的变化。3.4OSAL运行机制3.4.2OSAL任务的执行任务的执行osal_start_system();/运行系统OSAL.c,进入系统调度,无返回osal_start_system();/此函数是任务系统的主循环函数,它将轮询所有任务事件然后调用相关的任务处理函数,没有任务时将进入休眠状态。3.4OSAL运行机制事件表和函数表的关系事件表和函数表的关系3.4OSAL运行机制tasksEvents0macEventsLooptasksEvents1nwk_events_

21、loopHal_ProcessEventtasksEvents2tasksEvents3tasksEvents4tasksEvents5tasksEvents6tasksEvents7tasksEvents8MT_ProcessEventAPS_event_loopAPSF_ProcessEventZDApp_event_loopZDNwkMgr_event_loopSampleApp_ProcessEventtasksEventtasksArr0tasksArr1tasksArr2tasksArr3tasksArr4tasksArr5tasksArr6tasksArr7tasksArr8ta

22、skArr这个数组里存放了所有任务的事件处理函数的地址,在这里事件处理函数就代表了任务本身,也就是说事件处理函数标识了与其对应的任务。tasksCnt这个变量保存了当前的任务个数,最大任务数量为9。tasksEvents是一个指向数组的指针,此数组保存了当前任务的状态。OSAL每个任务可以有16个事件,其中SYS_EVENT_MSG定义为0x8000,为系统事件,用户可以定义剩余的15个事件。3.4OSAL运行机制其中,任务处理函数具体如下。macEventLoop,/MAC层任务处理函数nwk_event_loop,/网络层任务处理函数Hal_ProcessEvent,/硬件抽象层任务处理函

23、数MT_ProcessEvent,/监控任务处理函数可选(透过编译选项MT_TASK来决定是否编译该任务处理函数,一般情况下该功能通过串行端口通信来交换实现)APS_event_loop,/应用支持子层任务处理函数,用户不用修改APSF_ProcessEvent,/应用支持子层消息分割任务处理函数(用户编译选项ZIGBEE_FRAGMENTATION来决定是否启动zigbee消息分割功能)ZDApp_event_loop,/设备应用层任务处理函数,用户可以根据需要修改ZDNwkMgr_event_loop,/网络管理层任务处理函数(用户可透过编译选项ZIGBEE_FREQ_AGILITY或ZI

24、GBEE_PANID_CONFIG来实现该功能)SampleApp_ProcessEvent,/用户应用层任务处理函数,用户自己编写。3.4OSAL运行机制3.4.3OSAL的事件传递机制的事件传递机制从天线接收到数据后,会产生从天线接收到数据后,会产生AF_INCOMING_MSG_CMD消息,但是任务的事件处理消息,但是任务的事件处理函数在处理这个事件的时候,还需要得到所接收到的数据。函数在处理这个事件的时候,还需要得到所接收到的数据。因此,这就需要将事件和数据封装成一个消息,将消息发送到消息队列,然后在事件处因此,这就需要将事件和数据封装成一个消息,将消息发送到消息队列,然后在事件处理函

25、数中就可以使用理函数中就可以使用osal_msg_receive,从消息队列中得到该消息,即,从消息队列中得到该消息,即MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(SampleicApp_TaskID);3.4OSAL运行机制3.4.3OSAL的事件传递机制的事件传递机制3.4OSAL运行机制用户自定义的消息uint8 dest_iduint16 lenvoid *next用户自定义的消息uint8 dest_iduint16 lenvoid *nextuint8 dest_iduint16 lenvoid *next用户自定义的消息3.4.

26、3OSAL的事件传递机制的事件传递机制(1)协调器从没有网络到组建起网络,触发网络状态变更事件ZDO_STATE_CHANGE。(2)路由/节点从没有接入网络到接入网络,触发网络状态变更事件ZDO_STATE_CHANGE。3.4OSAL运行机制3.4.3OSAL的事件传递机制的事件传递机制caseZDO_STATE_CHANGE:SampleApp_NwkState=(devStates_t)(MSGpkt-hdr.status);if(SampleApp_NwkState=DEV_ZB_COORD)|(SampleApp_NwkState=DEV_ROUTER)|(SampleApp_Nw

27、kState=DEV_END_DEVICE)/Startsendingtheperiodicmessageinaregularinterval.3.4OSAL运行机制3.4.3OSAL的事件传递机制的事件传递机制这个表示默认启动第2个事件SAMPLEAPP_SEND_PERIODIC_MSG_EVT。osal_start_timerEx(SampleApp_TaskID,SAMPLEAPP_SEND_PERIODIC_MSG_EVT,SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT);/5s定时事件else/Deviceisnolongerinthenetworkbrea

28、k;3.4OSAL运行机制3.4.4OSAL添加新任务添加新任务在Z-Stack中,对于每个用户自己新建立的任务通常需要2个相关的处理函数,具体如下。(1)新任务的初始化函数例如:SampleApp_Init(),这个函数是在osalInitTasks()这个OSAL(Z-Stack中自带的小操作系统)中去调用的,其目的就是把一些用户自己写的任务中的一些变量、网络模式、网络终端类型等进行初始化,并且自动给每个任务分配一个ID。(2)新任务的事件处理函数例如:SampleApp_ProcessEvent(),这个函数是首先在constpTaskEventHandlerFntasksArr中进行设

29、置,然后在osalInitTasks()中如果发生事件进行调用绑定的事件处理函数。3.4OSAL运行机制3.4.4OSAL添加新任务添加新任务1用户自己设计的任务代码在Z-Stack中的调用过程首先执行main()(在ZMain.c文件中)主程序,接着执行osal_init_system()。接着在osal_init_system()调用osalInitTasks()(在OSAL.c文件中)。最后在osalInitTasks()中调用SampleApp_Init()(在OSAL_SampleApp.c文件中)。在osalInitTasks()中实现了多个任务初始化的设置,其中macTaskIn

30、it(taskID+)到ZDApp_Init(taskID+)的几行代码表示对于几个系统运行初始化任务的调用,而用户自己实现的SampleApp_Init()在最后,这里taskID随着任务的增加也随之递增。所以用户自己实现的任务的初始化操作应该在osalInitTasks()中增加。3.4OSAL运行机制3.4.4OSAL添加新任务添加新任务2任务处理调用的重要数据结构这里要解释一下,在Z-Stack里,对于同一个任务可能有多种事件发生,那么需要执行不同的事件处理,为了方便,对于每个任务的事件处理函数都统一在一个处理函数中实现,然后根据任务的ID号(task_id)和该任务的具体事件(eve

31、nts)调用某个任务的总事件处理函数,进入了该任务的总事件处理函数之后,再根据events再来判别是该任务的哪一种事件发生,进而执行相应的事件处理。3.4OSAL运行机制3.4.4OSAL添加新任务添加新任务OSAL将硬件的管理也作为一个任务来处理。那么我们很自然地去寻找Hal_ProcessEvent这个事件处理函数,看看它究竟是如何管理硬件资源的。3.4OSAL运行机制3.4.5事件的捕获事件的捕获3对于不同事件发生后的任务处理函数的调用osal_start_system()很重要,决定了当某个任务的事件发生后调用对应的事件处理函数。对应调用第idx个任务的事件处理函数,用events说明

32、是什么事件。events=(tasksArridx)(idx,events);用户自定义功能在taskApp.c文件中利用AddTask_Event()函数实现3.4OSAL运行机制1消息管理消息管理API消息管理消息管理API主要用于处理任务间消息的交换,主要包括任务分配消息缓存、释放消息缓存、接收消息和收送消息等主要用于处理任务间消息的交换,主要包括任务分配消息缓存、释放消息缓存、接收消息和收送消息等API函数。函数。osal_msg_allocate()函数原型:uint8*osal_msg_allocate(uint16len)。功能描述:为消息分配缓存空间。osal_msg_deal

33、locate()函数原型:uint8*osal_msg_allocate(uint8*msg_ptr)。功能描述:释放消息的缓存空间。osal_msg_send()函数原型:uint8osal_msg_send(uint8destination_task,uint8*msg_ptr)。功能描述:一个任务发送消息到消息队列。osal_msg_receive()函数原型:uint8*osal_msg_receive(uint8task_id)。功能描述:一个任务从消息队列接收属于自己的消息。3.5OSAL应用编程接口2任务同步任务同步API任务同步API主要用于任务间的同步,允许一个任务等待某个事

34、件的发生。osal_set_event()函数原型:uint8osal_set_event(uint8task_id,uint16event_flag)。功能描述:运行一个任务时设置某一事件同时发生。3.5OSAL应用编程接口3时间管理时间管理API时间管理时间管理API用于开启和关闭定时器,定时时间一般为毫秒级定时,使用该用于开启和关闭定时器,定时时间一般为毫秒级定时,使用该API,用户不必关心底层定时,用户不必关心底层定时器是如何初始化的,只需要调用即可,在器是如何初始化的,只需要调用即可,在Zigbee协议栈物理层已经将定时器初始化了。协议栈物理层已经将定时器初始化了。osal_star

35、t_timerEx()函数原型:函数原型:uint8osal_start_timerEx(uint8task_id,uint16event_id,uint16timeout_value)。功能描述:设置一个定时器时间,定时时间到后,相应的事件被设置。功能描述:设置一个定时器时间,定时时间到后,相应的事件被设置。osal_stop_timerEx()函数原型:函数原型:uint8osal_stop_timerEx(uint8task_id,uint16event_id)。功能描述:停止已经启动的定时器。功能描述:停止已经启动的定时器。3.4OSAL运行机制4中断管理中断管理API中断管理API主

36、要用于控制中断的开启与关闭。一般很少使用。3.4OSAL运行机制5任务管理任务管理API任务管理API主要是对OSAL进行初始化和启动。osal_init_system()函数原型:uint8osal_start_system(void)。功能描述:初始化OSAL,该函数是第一个被调用的OSAL函数。osal_start_system()函数原型:uint8osal_start_system(void)。功能描述:该函数包含一个无限函数,它将查询所有的任务事件,如果有事件发生,则调用相应的事件处理函数,处理完该事件后,返回主循环继续检测是否有事件发生,如果开启了节能模式,则没有事件发生时,该函

37、数将使处理器进入休眠模式,以降低系统功耗。3.4OSAL运行机制6内存管理内存管理API内存管理API用于在堆栈上分配缓冲区。注意的是以下两个API函数必须成对使用,防止产生内存泄漏。osal_mem_alloc()函数原型:uint8osal_mem_alloc(uint16size)。功能描述:在堆栈上分配指定大小的缓冲区。osal_mem_free()函数原型:uint8osal_mem_free(void*ptr)。功能描述:释放使用osal_mem_alloc()分配的缓冲区。3.4OSAL运行机制8非易失性闪存管理非易失性闪存管理API非易失性闪存(Non-VolatileMemo

38、ry,NV)管理API主要添加了对非易失性闪存的管理函数,一般这里的非易失性闪存指的是系统Flash存储器(也可以是E2PROM),每个NV条目分配唯一的ID号。osal_nv_item_init()函数原型:byteosal_nv_item_init(uint16id,uint16len,void*buf)。功能描述:初始化NV条目,该函数检查是否存在NV条目,如果不存在,它将创建并初始化该条目。如果该条目存在,每次调用osal_nv_read()osal_nv_write()。osal_nv_read()函数原型:byteosal_nv_read(uint16id,uint16offset

39、,void*buf)。功能描述:从NV条目中读取数据;可以读取整个条目的数据,也可以读取部分数据。osal_nv_write()函数原型:uint8osal_nv_write(uint16id,uint16offset,uint16len,void*buf)。功能描述:写数据到NV条目。3.4OSAL运行机制1组网成功测试组网成功测试利用ZDO_STATE_CHANGE实现组网成功点灯功能,程序代码如下。int16SampleApp_ProcessEvent(uint8task_id,uint16events)afIncomingMSGPacket_t*MSGpkt;caseZDO_STATE

40、_CHANGE:SampleApp_NwkState=(devStates_t)(MSGpkt-hdr.status);if(SampleApp_NwkState=DEV_ZB_COORD)|(SampleApp_NwkState=DEV_ROUTER)|(SampleApp_NwkState=DEV_END_DEVICE)/点灯?P1SEL&=0x3;P1DIR|=0x3;/定义P10、P11为输出P1_0=1;/Startsendingtheperiodicmessageinaregularinterval.osal_start_timerEx(SampleApp_TaskID,SAMPL

41、EAPP_SEND_PERIODIC_MSG_EVT,SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT);3.5OSAL应用编程2定时事件测试定时事件测试利用SAMPLEAPP_SEND_PERIODIC_MSG_EVT实现LED灯的定时翻转功能,其程序代码如下。uint16SampleApp_ProcessEvent(uint8task_id,uint16events)afIncomingMSGPacket_t*MSGpkt;(void)task_id;/Intentionallyunreferencedparameterif(events&SYS_EVENT_MSG)

42、.default:break;if(events&SAMPLEAPP_SEND_PERIODIC_MSG_EVT)P1_0=1;/反转灯测试定时事件的到来3.5OSAL应用编程1协议定义的是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据收发;协议栈是协议的具体实现形式。2afStatus_tAF_DataRequest(afAddrType_t*dstAddr,endPointDesc_t*srcEP,uint16cID,uint16len,uint8*buf,uint8*transID,uint8options,uint8radius)用户调用该函数即可实现数据的无线发送。3T

43、askArr这个数组里存放了所有任务的事件处理函数的地址,在这里事件处理函数就代表了任务本身,也就是说事件处理函数标识了与其对应的任务。tasksCnt这个变量保存了当前的任务个数,最大任务数量为9。4tasksEvents是一个指向数组的指针,此数组保存了当前任务的状态。OSAL每个任务可以有16个事件,其中SYS_EVENT_MSG定义为0x8000,为系统事件,用户可以定义剩余的15个事件。5在Z-Stack中,对于每个用户自己新建立的任务通常需要两个相关的处理函数,包括新任务的初始化函数和新任务的事件处理函数。小结Thanks物联网应用的精彩未来有待你的参与物联网应用的精彩未来有待你的参与

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号