光照信息采集系统设计与开发_第1页
光照信息采集系统设计与开发_第2页
光照信息采集系统设计与开发_第3页
光照信息采集系统设计与开发_第4页
光照信息采集系统设计与开发_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

光照信息采集系统设计与开发摘要:研究在光照的环境下,用CC2530模块对光照强度信息进行采集,光照信息采集是我们日常生活中必不可少的一项工程,它涉及到了我们生活中的方方面面,在农业,工业,医疗等方面都起到了很大的作用,帮助了人们处理了一些需要利用到光方面的各种难题,可以很方便,快速,实时的获得光照强度信息,人们利用这样的信息可以准确的做出判断,例如能够让农产品再最适的光照强度里成长。本次系统使用了C语言进行语言开发环境,利用Zigbee协议栈,设计一套光照信息采集系统。该系统用到的软件为IAR,能够对代码进行编程和调试操作,将代码下载到CC2530模块。系统管理员能够在上位机获取到光照信息强度的信息,同时也可以对代码功能进行适当的增加,以满足使用需求。关键词:光照信息采集;C语言;IAR;CC2530DesignanddevelopmentoflightinformationacquisitionsystemAbstract:inthelightenvironment,CC2530moduleisusedtocollectthelightintensityinformation.Thelightinformationcollectionisanessentialprojectinourdailylife.Itinvolvesallaspectsofourlife,playsagreatroleinagriculture,industry,medicaltreatmentandotheraspects,andhelpspeopledealwithsomeproblemsthatneedtousethelightItisveryconvenient,fastandreal-timetoobtainthelightintensityinformation.Peoplecanmakeaccuratejudgmentsbyusingthisinformation,forexample,itcanmakeagriculturalproductsgrowinthemostappropriatelightintensity.ThissystemusesClanguageforlanguagedevelopmentenvironment,usingZigBeeprotocolstack,designasetoflightinginformationcollectionsystem.ThesoftwareusedinthesystemisIAR,whichcanprogramanddebugthecodeanddownloadthecodetoCC2530module.Thesystemadministratorcangettheinformationofilluminationinformationintensityontheuppercomputer,andcanalsoincreasethecodefunctiontomeettheuserequirements.Keywords:lightinformationcollection;Clanguage;IAR;CC2530目录TOC\o"1-2"\h\u7304第一章绪论 第一章绪论 前言科技发展迅速,生活质量的不断提高,越来越多的人意识到光照对于人体、植物、对于生活中方方面面的影响和作用。光照强度就是对光照的一个更深入的探索,我们会对光照强度进行监测,例如生产车间,农业种植,机房照明,楼宇自控,交通灯等。在这些场合,我们都会利用光传感器对光照进行监测。人们可以利用这样的一个设计,不需要到实地监测,在上位机就能够获取光照的信息,在许多人们监测不到的地方,通过这样的一种技术,能够保障人们的安全。科技发展迅速,这是在我们生活中很有必要的,相信越来越多的地方,会使用这样的技术完成对光照强度的采集。人们将获取到了的光照信息,就可以利用光照信息来做应该处于这样的光照环境的一些实践。光照强度不再仅仅是光照太亮以及光照太暗等等一系列的代名词,而是拥有更深层次的含义,尤其是在科学研究领,。我们会对光照的强暗进行精确的判断。此次实验是基于ZigBee无线通信技术进行的,发送模块监测采集光照强度,发送给接收模块,接收模块将采集到的信息上传给上位机。ZigBee是一种新型的无线通信技术,它的通讯优点是稳定,速度快,便捷。在开发过程中会用到ZigBee技术,需要对协调器,终端设备进行编程,这不仅会使用到我们学习到的C语言知识,还要更加的了解各个模块之间的通信特点。本系统的开发会涉及到物理层,网络层,应用层相关的知识,每隔一段时间就会采集光照强度信息,提高效率,更好的能为用户服务。此次实验是一个典型的单播通信传输的实验,通信方式简单,技术便捷,利用ZigBee网络和光照传感器,使用CC2530模块,不用任何的数据线实现监测。配置发送模块监测光照强度,光传感器将采集到的数据传送给发送模块,发送模块在已经构建好的ZigBee网络的基础上,再将获得到的信息传递给接收模块,最后通过串口将数据传到上位机,实现在远端就能够获取光照强度信息。目前的光传感器基本上都是通过数据线与显示器连接起,并没有采用ZigBee这样的一个无线通信技术。光传感器如果较多,数据线需要的数量也会更多,这样不便于布置,会占用较多的资源。假如采用基于ZigBee的无限传输技术,就会很好的避开这样的问题,并且会节省材料,有益于降低成本。第二章系统开发环境2.1C语言概述C语言作为计算机编程语言,虽然是面向对象,不过与C++、Java等面向对象编程语言是不一样的。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、只产生很少的机器码以及不需要任何运行环境支持便能运行的编程语言。在描述问题方面,它比汇编语言快速、效率高、可读性好、能进行调试、修改和移植,在代码质量方面,与汇编语言相同。C语言普遍只比汇编语言代码生成的目标程序效率低10%~20%。因此,C语言能够编写系统软件。就目前而言,在编程方面里,C语言的运用的范围之大,它囊括了高级语言以及汇编语言的优点,与其它编程语言相比较而言具有较大优势。计算机系统设计和应用程序编写是C语言应用的两大板块。同时,C语言的适应能力较强,在许多计算机操作系统中都能够得到适用,且效率显著。

冯.诺依曼在1945年提出了现代计算机的若干思想,被后人称为冯.诺依曼思想,这是计算机发展史上的里程碑。自1945年至今大多采用其结构,因此冯.诺依曼被称为计算机之父。他的体系结构计算机由运算器、控制器、存储器、输入设备、输出设备五大部件构成。C语言拥有一套完整的理论体系经过了漫长的发展历史,在编程语言中具有举足轻重的地位。2.2IAR介绍IARSystems是全球领先的嵌入式系统开发工具和服务的供应商。公司成立于1983年,提供的产品和服务涉及到嵌入式系统的设计、开发和测试的每一个阶段,包括:带有C/C++编译器和调试器的集成开发环境(IDE)、实时操作系统和中间件、开发套件、硬件仿真器以及状态机建模工具。2.3ZigBee技术概述ZigBee是IEEE802.15.4协议的代名词。ZigBee技术是一种短距离、低复杂度、低功耗、低数据速率、低成本的双向无线通信技术或无线网络技术,是一组基于IEEE802.15.4无线标准研制开发的组网、安全和应用软件方面的通信技术。ZigBee联盟于2005年公布了第一份ZigBee规范“ZigBeeSpecificationV1.0”。ZigBee协议规范使用了IEEE802.15.4定义的物理层(PHY)和媒体介质访问层(MAC),并在此基础上定义了网络层(NWK)和应用层(APL)2.3.1ZigBee技术优缺点由于ZigBee采用的是IEEE802.15.4的协议,属于一种低速率无线个人局域网,因为其简单的网络结构,这种网络结构简单、成本低廉、具有有限的功率和灵活的吞吐量。并且低速率无线个人局域网的主要目标是实现安装容易、数据传输可靠、短距离通信、极低的成本、合理的电池寿命、并且拥有一个简单而且灵活的网络通信协议。在LR-WPAN网络下,具有以下几种特点:可以在速率分别为250kb/s,40kb/s,20kb/s三种传输速率。支持星型以及点对点两种网络拓扑结构。拥有16位短地址或者64位扩展地址。支持冲突避免载波多路侦听技术(carriersensemultipleaccesswithcollisionavoidance,CSMA-CA)。用于可靠传输的全应答协议。低功耗。能量监测(EnergyDetection,ED)。链路质量指标(LinkQualityIndication,LQI)。在2450MHz频带内定义了16个通道;在915MHz频带内定义了10个通道;在868MHz频带内定义了1个通道。为了使供应商能够提供最低可能功耗的设备,IEEE(instituteofElectricalandELectronicsEngineers,电气及电子工程师)定义了两种不同类型的设备:一种是完整功能设备(full,functionaldevice,FFD),另一种是简化功能设备(reducedfunctionaldevice,RFD)。2.3.2ZigBee网络配置ZigBee网络的形成离不开一些设备的支持,按照功能来划分有全功能设备FFD(FullfunctionDevice)和精简功能设备RFD(ReducedfunctionDevice)。全功能设备是具有转发与路由能力的节点。它拥有足够的存储空间来存放路由信息,其处理能力相对较强。FFD可作为协调器、路由器、终端设备,支持任何拓扑结构。精简功能设备(RFD)只能接收和发送信号,其内存小、功耗低、在网络中作终端使用。2.3.3ZigBee工作模式ZigBee具有两种工作模式,分为信标和非信标两种模式。信标模式能够最大限度的节约能源消耗,使得所有的网络设备同步工作和同步休眠;非信标模式下,协调器和路由器会一直处于工作状态。 2.4本实验ZStack协议栈工作原理本实验会使用到ZStack协议栈相关的代码,以下是对光照采集过程的概述。我们将光照采集模块作为终端,用于采集光照强度信息,同时会使用到光照传感器。对于终端而言,需要对其网络进行一个初始化的过程,通过设置PANID,这里的PANID是指,该终端需要加入到一个这样的网络当中,本次实验属于单播,所以是需要加入到一个指定的网络。终端在网络层,需要对网络地址进行一个设置,网络地址由两个字节构成。当连接上电源时,终端就会发出信标请求帧,发现周围是否有网络能够加入,假如有一个PANID与已经设置好的PANID相同时,说明光照采集模块已经加入到该网络当中。对于协调器而言,当协调器连接到电源时的初始化操作就是创建一个确定好的PANID网络,并且该协调器的网络层地址只能为0x0000。入网时,协调器模块会发出网络连接状态帧,表明协调器已经稳定工作。协调器和终端入网操作结束后,就是光照采集的一个循环往复的过程,涉及到用户任务,事件以及轮询过程。对于终端,系统会分配给该模块一个taskid,一个taskid里有任务处理事件,在本实验使用到的任务处理时间就是光照的采集,应用层里有任务事件的变量,在ZigBee协议中,协议本身已经定义了大部分内容。在基于ZigBee协议的应用开发中,用户只需要实现应用程序框架即可。从ZigBee的协议架构图中我们也可以看到,其中的应用程序框架中包含了最多的240个应用程序对象,如果我们把一个应用程序对象看做为一个任务的话,那么应用程序框架将包含一个支持多任务的资源分配机制。于是OSAL便有了存在的必要性,它正是Z-Stack为了实现这样一个机制而存在的。OSAL主要是这样一种任务分配资源的机制,从而形成了一个简单多任务的操作系统。首先,osal初始化系统,包括软件系统初始化和资源初始化.其中软件系统初始化就是初始化一些变量,比如osal重要的组成部分任务表,任务结构体和序列号。资源初始化主要包括内存,中断,NV等各种设备模块资源。这就和我们嵌入式系统中的RTOS操作系统μC/OS-II有了很大的相似处。μC/OS-II中也是通过建立任务把一个问题进行分解,任务之间可以通过消息队列的方式进行通信。接着,osal通过osal_add_task添加任务到任务表中,形成一个任务链表。这个任务链表是以任务的优先级先后排序的。优先级高的排在前,低者排于后最后,开始运行系统,系统是以一个死循环的形式工作的.在循环体当中不断地检测各个任务,看是否要运行等,所以这样光传感器模块就能够不断的执行采集光照强度信息这个任务,对于协调器而言同样如此,协调器的任务处理事件当中,不断的将接收到的光照传感器采集到的数据通过串口传输给上位机。第三章材料与方法3.1材料的选择市面上用于Zigbee编程模块有多种,不过本次实验采用的是以CC2530作为模块,将数据代码下载到其中。考虑到的原因主要是使用的模块必须要有稳定、抗干扰能力强,方便小巧的特点。同时耗费不能过大,不管是在能源方面还是在购买方面,都应该实际一点。CC2530作为用于解决使用IEEE802.15.4协议的ZigBee和RF4CE应用的一个真正的片上系统。它能用最少的资源做到网络节点的连接。CC2530有RF收发器同样具有的功能并且比它的功能更加的强大,含有8051CPU。8051CPU结构有四个不同的存储空间,并且还有用一个单独的存储空间用于程序的存储以及数据的存储。分别为CODE(只读存储空间),DATA(读/写存储空间),XDATA(读/写存储空间),SFR(读/写存储空间),这四个存储空间在8051结构中是分开的,但在设备中有部分重叠,以减轻DMA传输和硬件调试操作的负担。CC2530的四种不同的缓存可以让它工作在不同的模式中,所以适合较低功耗的系统。CC2530具有低功耗的优点,采用CC2530来作为核心模块是一个不错的选择。光敏电阻方面,使用的是光敏电阻5539来进行光照的检测,光敏电阻是一种半导体材料制成的电阻,电阻的大小随着光照强度的改变而改变。我们可以利用这样的一个特性,制成受光面积不同的电阻,这样变化的大小就能够控制光照强度随着电阻变化而变化的范围幅度。而光敏电阻5539就是光敏电阻中的其中一种,它的阻值随着光照强度的增强电阻越来越大。上位机可采用Windows系统的电脑,它能兼容IAR软件,串口,以及帧的抓包软件等。相关参数:CC2530核心模块工作电压:2V-3.6VZigBee使用IEEE802.15.4通讯协议,以及2.4Ghz的频段编写语言:C语言独立的光传感器电源无限传输距离:80米以内3.2模块间数据传输方式目前为止,模块之间的传输方案有串口传输以及ZigBee技术传输。串口传输适用于较短距离传输,传输的过程简单、方便、速度快,由于此次实验的前提是无线数据传输,所以就放弃了串口传输。ZigBee是一种提供控制或传感器等电子元器件之间无线连接的无线通信技术,能够通过使数千个微小的ZigBee模块之间相互协调从而实现通信,这些ZigBee模块自身的耗能很少,并且能够以接力一样的方式通过无线电波将数据从一个ZigBee模块传到另一个ZigBee模块,所以能够在传输距离比较远的时候,通过多个ZigBee模块进行数据传输。而且ZigBee技术的通信效率也是非常之高的,这样的优点正好适合于本次实验对于光照传感器无线传输光照数据的要求。3.3功能概述本实验需要实现的功能就是在远程的CC2530模块上采集光照强度的信息,将采集到的数据通过Zigbee网络,把数据传输给协调器,再通过协调器传给上位机。对于CC2530模块而言,每一个模块里代码功能的不同就有了协调器和终端的说法。终端是通过分配一个taskid,这个taskid里有任务处理的函数。通过轮询机制,会不断执行任务处理函数。同时,在任务处理函数里就有一个叫CollectLight的函数需要执行。具体代码如下:voidCollectLight(void){uint16adval;//AD采集值uint8len,buf[5];adval=HalAdcRead(HAL_ADC_CHN_AIN6,HAL_ADC_RESOLUTION_10);//读AD值len=uitoa(buf,adval);//AD值转换成ASCII并存入数组buf中//发送buf中的数据,数据长度为lenAF_DataRequest(&SampleApp_DstAddr,&SampleApp_epDesc,//414改SAMPLEAPP_PERIODIC_CLUSTERID,//415len,//416改(uint8*)buf,//417改&SampleApp_TransID,//418AF_DISCV_ROUTE,//419AF_DEFAULT_RADIUS);//420改}这是一个光照采集的函数,定义了一个名字为adval的无符号整型,将光照信息通过数模转换的方式,转换为ASCII保存在了数组buf中,同时把数据传给指定的目的地址,以及端口地址和簇地址。这样一来就把采集到的数据传输给了协调器。对于协调器而言,它是通过串口的形式,把数据传输给了上位机。协调器同样有一个taskid,它的任务就是不断的接收数据具体代码如下:voidSampleApp_MessageMSGCB(afIncomingMSGPacket_t*pkt)//387{//388uint8*buf;switch(pkt->clusterId)//391{//392caseSAMPLEAPP_PERIODIC_CLUSTERID://393buf=pkt->cmd.Data;HalUARTWrite(0,"\r\n节点上的光照度:",osal_strlen("节点上的光照度:")+2);HalUARTWrite(0,buf,pkt->cmd.DataLength);HalUARTWrite(0,"\r\n",2);break;//394}//400}这是一个接收消息的一个函数,其中HalUARTWrite这个函数就是串口显示的函数,同样也是通过轮询机制,不断的处理任务事件,任务事件下包含了这个接收消息的函数,这样就能够在接收消息的同时将数据信息通过串口的方式在上位机上显示。本次实验终端使用到的协调器模块上的光照传感器的介绍如下:光敏电阻5539亮电阻为50-100Luxk欧姆暗电阻为5M欧姆光谱峰值为540nm最大电压150vdc最大功耗为100mw环境温度为-30至+70上升时响应时间为20下降时响应时间为30照度电阻特性为53.4ZigBee网络拓扑结构ZigBee网络支持星状、树状和网状三种网络拓扑结构,如下图所示,分别依次是星状网络,树(簇)状网络和网状网络。星状星状网状网状簇状簇状星状网络由一个PAN协调器和多个终端设备组成,只存在PAN协调器与终端的通讯,终端设备间的通讯都需通过PAN协调器的转发。树状网络由一个协调器和一个或多个星状结构连接而成,设备除了能与自己的父节点或子节点进行点对点直接通讯外,其他只能通过树状路由完成消息传输。网状网络是树状网络基础上实现的,与树状网络不同的是,它允许网络中所有具有路由功能的节点直接互连,由路由器中的路由表实现消息的网状路由。该拓扑的优点是减少了消息延时,增强了可靠性,缺点是需要更多的存储空间开销。终端(发送模块)协调器(接收模块)本实验模块模型终端(发送模块)协调器(接收模块)光照上位机光照上位机第四章代码和硬件分析4.1ZigBee节点硬件设计采用一个光传感器连接一个CC2530核心模块同时配置单独的独立电源,实现多点监测,通过ZigBee网络在不同节点的位置进行数据传递,实现数据的流通,同时配置接收模块,将收集到的信息传输给上位机。其中可使用多个路由器进行无线网络数据的中间传输,同时构建一个小型的局域网,对CC2530芯片进行编程。在电脑上打开IAR编程系统,因为用于光照采集的协调器和终端设备不是本身就有功能,而是在CC2530模块上通过代码赋予不同的功能。本实验采用的是单播的方式进行通信,通信方式较为简单。两个模块之间通过模块进行数据传输,两个模块需要对端口进行配置,也要有簇命令。发送模块需要有对事件处理的任务处理函数,任务处理函数会采集光照强度信息,每隔一段时间就会采集一次。接收模块需要设置串口,也有任务处理函数,每隔一段时间就会接收来自发送模块的信息,将获得的光照强度信息发送给上位机。4.2协调器节点重要代码(接收模块)Zstack协议栈会给协调器分配一个PANID用于无限局域网的启动,其他设备想要加入该网络的话,它们PANID必须相同才能加入到相同的网络当中。启动时,默认网络ID为0x0000。接收终端节点发来的光照信息(5字节的ASCII码),然后通过串口发送至计算机中显示。任务处理函数uint16SampleApp_ProcessEvent(uint8task_id,uint16events){afIncomingMSGPacket_t*MSGpkt; //定义指向接收消息的指针(void)task_id; //未引参数task_id;If(events&SYS_EVENT_MSG) //判断是否为系统事件{MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(SampleApp_TaskID);//从消息队列中取消息While(MSGpkt) //有消息?{switch(MSGPKT->hdr.event)//判断消息中的事件域{ caseAF_INCOMING_MSG_CMD;//端口收到消息SampleApp_MessageMSGCB(MSGpkt);//break;//在此处可添加系统事件的其他子事件处理default;break;}osal_msg_deallocate((uint8*)MSGpkt); //释放消息所占存储空间MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(SampleApp_TaskID);//再从消息队列中取消息}return(event^SYS_EVENT_MSG);//返回未处理事件}return0;//丢弃未知事件}这段代码为任务处理函数的核心代码,具体分析如下:接收模块有一个taskid,一个taskid包含了任务处理的函数,该段代码就是接收模块收集数据会执行的一段代码。首先该段代码就定义了一个接收消息的指针,然后作了个if的判断,event和SYS_EVENT_MSG作了一个与的操作,就是表示这个事件与定义的事件是否相同,如果相同就在消息队列中取消息。这里有一个osal_msg_receive的方法,这个方法的功能是任务调用这个函数来接收消息。消息处理完毕后,发送消息的任务必须调用osal_msg_deallocate()收回缓冲区。一个任务接收一个命令信息是,调用该函数。原型:byte*osal_msg_receive(bytetask_id)参数:task_id

:消息发送者的任务标识。返回值:指向消息所存放的缓冲区指针,如果没有收到消息将返回NULL。接下来就是一个while循环,该循环判断的是如果有消息接收到的话,再进行一个循环,判断是哪一种事件域。端口收到消息后,执行一个SampleApp_MessageMSGCB(MSGpkt)的函数,这个函数功能就是光照信息接收,将信息通过串口传给上位机。然后释放消息所占用的存储空间,继续执行接收消息队列的操作,返回未处理事件,丢弃未知事件。4.3终端节点重要代码(发送模块)采集环境的光照数据voidSampleApp_Init(uint8task_id){ halUARTCfg_tUartConfig;//定义串口配置变量SampleApp_TaskID=task_id;//应用任务(全局变量)初始化SampleApp_NwkState=DEV_INIT;//网络状态初始化SampleApp_TransID=0;//传输ID号初始化//初始化消息发送的目的地址SampleApp_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;//改单播发送SampleApp_DstAddr.endPoint=SAMPLEAPP_ENDPOINT;//改目的地的端口SampleApp_DstAddr.addr.shortAddr=0x0000;//改目的地:协调器//应用端口初始化SampleApp_epDesc.endPoint=SAMPLEAPP_ENDPOINT;//端口号SampleApp_epDesc.task_id=&SampleApp_TaskID;//任务号SampleApp_epDesc.simpleDesc//端口的其他描述=(SimpleDescriptionFormat_t*)&SampleApp_SimpleDesc;//SampleApp_epDesc.latencyReq=noLatencyReqs;//端口的延迟响应afRegister(&SampleApp_epDesc);//端口注册//ADC口配置APCFG|=1<<6;//加配置模拟口:P06为模拟输入口HalAdcInit();//加初始化ADCHalAdcSetReference(HAL_ADC_REF_AVDD);//加设置ADC的参考电压}发送模块需要发送数据给接收模块就需要定义端口和任务ID以及对网络状态进行初始化,SampleApp_DstAddr.addrMode=(afAddrMode_t)Addr16Bit这串代码的意思是将发送消息的方式设置成单播,在数据发送过去后,需要哪一个端口处理消息就会使用到SampleApp_DstAddr.endPoint=SAMPLEAPP_ENDPOINT这样的一个设定,指定一个端口,这个端口就处理消息。此外将目标端的网关短地址设置为0x0000。SampleApp_epDesc.endPointSampleApp_epDesc.task_id这是一个结构体,设置指定端口号,绑定taskid,这里的设置端口和绑定taskid这两者的对象都是发送模块。还需要对端口进行一个延迟响应,最后就是对端口就行一个注册。注册完成才能够使用已经配置好的端口,然后就是数模转换的初始化。任务事件处理函数uint16SampleApp_ProcessEvent(uint8task_id,uint16events)//{afIncomingMSGPacket_t*MSGpkt;//定义指向接收消息的指针(void)task_id;//未引参数task_idif(events&SYS_EVENT_MSG)//判断是否为系统事件{MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(SampleApp_TaskID);//255从消息队列中取消息while(MSGpkt)//有消息?{switch(MSGpkt->hdr.event)//判断消息中的事件域{caseZDO_STATE_CHANGE://ZDO的状态变化事件SampleApp_NwkState=(devStates_t)(MSGpkt->hdr.status);//读设备状态if((SampleApp_NwkState==DEV_ROUTER)//若为路由器||(SampleApp_NwkState==DEV_END_DEVICE))//或终端节点{osal_set_event(SampleApp_TaskID,USER_LIGHT_GATH_EVT);//加}break;//在此处可添加系统事件的其他子事件处理default:break;}osal_msg_deallocate((uint8*)MSGpkt);//释放消息所占存储空间MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(SampleApp_TaskID);//再从消息队列中取消息}return(events^SYS_EVENT_MSG);//返回未处理的事件}//用户事件处理if(events&USER_LIGHT_GATH_EVT){CollectLight();//采集光照度//再次触发用户事件osal_start_timerEx(SampleApp_TaskID,USER_LIGHT_GATH_EVT,//311过1s后再设置事件1000);return(events^USER_LIGHT_GATH_EVT);//改返回未处理完毕的事件}return0;//丢弃未知事件}这段代码是发送模块的任务处理函数,首先一进函数就定义了一个接收消息指针,然后使用if进行了一个判断,判断这个事件是否是系统事件,如果是就向消息队列里面把消息取出,然后也进行了一个while循环,如果有消息就会进入循环体,switch判断事件域如果是终端或者路由器的话就执行osal_set_event(SampleApp_TaskID,USER_LIGHT_GATH_EVT)这一段代码,可以查到这段代码函数是uint8osal_set_event(uint8task_id,uint16event_flag){if(task_id<tasksCnt){halIntState_tintState;HAL_ENTER_CRITICAL_SECTION(intState);//Holdoffinterruptsta

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论