[导读]无线传感器网络中的nesC嵌入式编程语言
引 言
无线传感器网络是目前国内外研究的热点之一,它是由大量廉价的传感器节点组成,通过有线/无线通信方式自组织形成的网络系统,相互协作地感知周围的数据。由于无线传感器节点是一种典型的资源受限的嵌入式系统,需要一个微型的操作系统来组织和管理硬件,实现应用软件的功能。TinyOS是美国加州大学伯克利分校针对无线传感器网络而设计的一个基于事件驱动的微型操作系统,最初是用汇编和C语言实现的。由于C语言不能有效、方便地满足面向传感器网络的应用开发,其目标代码比较长,经进一步研究设计出了支持组件化的新型编程语言——nesC。其最大的特点是,将组件化/模块化思想和基于事件驱动的执行模型相结合。现TinyOS操作系统和基于TinyOS的应用程序都是用nesC语言编写的,大大提高了应用开发的方便性和应用执行的可靠性。本文以WSN为背景,通过一个基于TinyOS的灯闪烁实例——Blink,详细介绍nesC语言的结构以及用该语言如何实现组件化/模块化的应用程序,为深入研究TinyOS的应用开发提供一种实现方法。
1 nosC语言结构
nesC是C语言的扩展,精通C语言的程序员掌握这种语言相对比较快。与C语言的存储格式不同,用nesC语言编写的文件是以“.nc”为后缀。每个nc文件实现一个组件功能(组件化/模块化)。在nesC程序中,主要定义两种功能不同的组件——模块(module)和配件(configuration)。
模块主要用于描述组件的接口函数功能以及具体的实现过程,每个模块的具体执行都由4个相关部分组成:命令函数、事件函数、数据帧和一组执行线程。其中,命令函数是可直接执行,也可调用底层模块的命令,但必须有返回值,来表示命令是否完成。返回值有3种可能:成功(见BlinkM.nc代码部分)、失败、分步执行。事件函数是由硬件事件触发执行的,底层模块的事件函数跟硬件中断直接关联,包括外部事件、时钟事件、计数器事件。一个事件函数将事件信息放置在自己的数据帧中,后通过产生线程、触发上层模块的事件函数、调用底层模块的命令函数等方式进行相应处理,因此节点的硬件事件会触发两条可能的执行方向——模块间向上的事件函数调用和模块间向下的命令函数调用。
配件主要是描述组件不同接口的关系,完成各个组件接口之间的相互连接和调用。相关执行部分主要包含提供给其他组件的接口和配件要使用的接口的组件接口列表和如何将各个组件接口连接在一起的执行连接列表。
模块和配件的定义格式如下:
在模块中,关键字“implementation”必须包含实现模块提供和使用接口声明的全部命令和事件。在配件中,关键字“implementation”定义执行部分,连接用“->”、“=”、“<-”等符号表示,“->”表示位于左边的组件接口要调用位于右边的组件接口。
不管是模块还是配件,每个组件都包含了定义和实现两部分。被提供者和被使用者都是通过调用接口来实现各个接口的通信和函数的功能,不同的模块也可以实现相同的接口。接口可以是命令和事件,也可以是单独定义的一组命令。在应用程序中存在多个配置文件,并且配件之间存在一个层次关系,最上面的为顶层配件文件(每个应用程序必须有一个顶层配件),定义了Main组件接口与其他组件接口的连接方式以及各个接口间的调用关系。具体框架图可参见文献[6]中的关于nesC的一般结构。
2 nesC应用程序的分析
每一个nesC应用程序都是由一个或多个组件通过接口链接起来,并通过ncc/gcc编译生成一个完整的可执行程序。下面以TinyOS软件中的Blink应用程序为例,具体介绍nesC应用程序结构。[!--empirenews.page--]
Blink程序是一个简单的nesC应用程序。它的主要功能是每隔1 s的时间间隔亮一次,关闭系统时红灯亮。其程序主要包括3个子文件Blink.nc、BlinkM.nc和SingleTimer.nc。
(1)Blink.nc文件
这个文件为整个程序的顶层配件文件,关键字为configuration,通过“->”连接各个对应的接口。文件关键内容如下:
从上述代码中可看出,该配件使用了Main组件,定义了Main接口和其他组件的调用关系,是整个程序的主文件,每个nesC应用程序都必须包含一个顶层配置文件。
(2)BlinkM.nc文件
BlinkM.nc为模块文件,关键字为module、command,通过其调用StdControl接口中的3个命令“init,start,stop”连接接口,是实现Blink程序的具体功能。内容如下:
(3)SingleTimer.nc文件
SingleTimer.nc为一个配件文件,主要通过TimerC和StdControl组件接口实现与其他组件之间的调用关系,配件文件还定义了一个唯一时间参数化的接口Timer。下面给出部分伪代码:
注:程序中斜体字表示nesC语法中所用到的关键字。
将nesC编写的配件文件、模块文件通过接口联系起来就形成了图1所示的Blink组件接口的逻辑关系。从图中可清晰地看出在Blink程序中组件之间的调用关系,各配件文件(如SingleTimer和LedsC)以层次的形式连接,体现了nesC组件化/模块化的思想。
3 nesC程序的仿真
关于nesC应用程序的执行,在TinyOS上提供了一个可视化图形仿真器’Tinyviz,观测TinyOS应用程序具体功能的执行过程。以TinyOS系统自带的app应用文件Blink程序执行过程为例,其他基于TinyOS开发的应用程序软件调试、仿真均可用以下执行方法。
(1)运行环境
在PC机上安装TinyOS的运行平台,具体安装过程和安装Windows系统一样。 [!--empirenews.page--]
为了避免与pc机自身系统的冲突,可将安装包tinyos-1.1.0.exe(软件版本以实际仿真的版本为主,现升级到TinyOS-2.1)安装到指定路径(本仿真软件环境是安装在D:/盘下)。这个安装包已经包含了JAVA、Cygwin,TinyOS相关软件和相关的编译器,同时提供像mica、micaz等硬件驱动,针对不同硬件编译生成可执行文件下载。
(2)执行步骤
①打开生成的cygwin图标(Linux建立在Windows下的软件平台),在光标下进入仿真环境路径(安装在D盘下):
cygdrive/d/tinyos/cygwin/opt/…/tinyos/sim—寻找软件仿真路径。
②输入make,之后将生成一个执行脚本文件Tinyviz.jar。
③进入应用程序路径。在相同的路径下进入blink目录下。
④输入make pc—在PC机上对Blink程序进行编译、仿真,若有相关硬件,则输入硬件名称,如make micaz,在blink文件下会生成一个pc文件夹,里面包含了在pc机上blink主程序main.exe。
⑤打开blink/pc路径,输入:tinyviz - run main.exe10(10为传感器节点的仿真个数)。
利用可视化Tinyviz将调用接口使Blink程序执行的仿真结果通过图形显示出来,仿真结果如图2所示。最上面一层显示了整个程序仿真时间长度和仿真终止按键。图中每个节点的位置可以任意布置,仿真间隔时间也能自行设定。Blink程序的主要功能是每经过1 s的时间间隔,每个仿真节点上红灯会闪烁1次,如图中节点0红灯是灭的,节点6红灯是亮的。该图很清晰地将NesC编写的应用程序功能仿真出来,对具体代码的硬件化执行提供了实现方法。
4 总 结
通过对Blink程序的详细分析可以看出,用nesC编写的程序能很好地将组件化/模块化的思想应用到程序中,对于其他nesC应用程序编写也能调用各组件接口,代码量少,能快速建立程序中模块间的链接,减少执行任务和事件驱动时线程间不必要的资源消耗,其具体功能可通过仿真软件反映出来。掌握nesC的语法,可以大大地降低实现无线传感器网络操作系统和上层的应用程序的复杂度,为深入学习与研究TinyOS系统以及其上应用程序的设计提供了参考方法。
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
(全球TMT2022年10月17日讯)上海安势信息技术有限公司的清源SCA工具在腾讯成功部署。清源 SCA可进行代码片段识别、文件识别、组件识别、依赖识别和容器镜像扫描。清源SCA拥有海量数据储备,其中包含24万漏洞数...
关键字:
腾讯
组件
开源
互联网
上海2022年10月14日 /美通社/ -- 近日,上海安势信息技术有限公司的清源SCA工具在腾讯成功部署。 开源软件在促进全球的技术创新方面发挥着越来越重要的作用,企业越来越依赖开源软件来加速开发与创新,根据 Gar...
关键字:
开源
开源软件
组件
数据库
9月22日, 第三方检验检测认证机构DEKRA德凯在上海举行了可再生能源测试中心落成典礼。落成的DEKRA德凯上海可再生能源测试中心占地2600平方米,融合全球顶尖的光伏领域的专业检验检测技术团队,覆盖光伏产业从材料到零...
关键字:
可再生能源
光伏产业
零部件
组件
北京2022年9月13日 /美通社/ -- 随着数据的爆炸式增长和算力需求的急剧攀升,由开放计算引领的数据中心基础设施创新,正影响着越来越多的公司争相学习和效仿。在近日举行的OCP China Day 2022(开放计算...
关键字:
数据中心
边缘计算
组件
BSP
(全球TMT2022年9月6日讯)近日,软通动力信息技术(集团)股份有限公司与中国—东盟信息港股份有限公司达成生态合作伙伴框架协议,双方将基于各自在数字经济和数字产业中的资源优势,通过平台合作与资源共享的方式在业务领域...
关键字:
信息技术
数据管理
组件
数字平台
上海2022年9月5日 /美通社/ -- 2022年8月,第七届易贸生物产业大会(EBC)盛大落幕。本届大会聚焦分子诊断、抗体药物、细胞与基因治疗、mRNA等热门话题,汇聚了政府、学术、产业、投资等一线领域的科学家、学者...
关键字:
过滤器
集成
研发中心
组件
全新的自助服务解决方案,充分利用业界领先的AI和AR虚拟试妆技术优势,助力新兴美妆网店成功。 上海2022年8月22日 /美通社/ -- 全球领先的人工智能(AI)及增强现实(AR)美妆和时尚科技解决方案供应商——玩...
关键字:
移动
组件
AI
COM
德国慕尼黑2022年8月9日 /美通社/ -- 近日,TUV南德意志集团(以下简称“TUV南德”)推出两个新的认证标志 -- 燃料电池系统以及氢系统组件的认证。制造商通过使用...
关键字:
燃料电池
组件
电池系统
ISO
泰州2022年6月23日 /美通社/ -- 6月10日,中来光电与欧洲领先的太阳能解决方案供应商IBC SOLAR达成战略合作。IBC公司将在欧洲市场与中来光电合作销售中来N型双面高效组件。 中来光电授权IBC公司在欧...
关键字:
光电
分布式
组件
太阳能
(全球TMT2022年6月16日讯)日前,赛迪顾问(CCID)发布《2021-2022 年中国PaaS市场研究年度报告》,报告显示,浪潮凭借优异的市场表现和发展能力位居中国PaaS市场领导者阵营、aPaaS发展能力第一...
关键字:
PAAS
应用开发
组件
人工智能
(全球TMT2022年6月10日讯)近日,中国创新型网络产品及解决方案供应商浪潮网络,正式推出全新升级的智能数字化网络引擎DNE。全新的DNE借助"配置时光机2.0、动态资源调度、安全策略编排"三大创新特性,让网络运维...
关键字:
网络
数字化
智能数字
组件
广州2022年6月8日 /美通社/ -- 近日,PV Tech发布2022年第二季度组件制造商可融资性评级报告,天合光能以卓越的技术创新能力、产品价值、财务表现等绝对优势荣获AAA最高评级。与此同时,天合光能在彭博新能源...
关键字:
组件
TE
光伏组件
高功率
北京2022年5月19日 /美通社/ -- 近日,全球权威独立第三方光伏测试机构PVEL (PV Evolution Labs)发布了《2022年光伏组件可靠性计分卡》(PV Module Re...
关键字:
组件
BSP
光伏组件
ABS
常州2022年5月9日 /美通社/ -- 近日,2022年度德国红点设计大奖(Red Dot Design Award)正式揭晓,天合光能Vertex S系列产品凭借着先进的设计理念和卓越的产品体验,从60余个国家、近万...
关键字:
组件
分布式
工业设计
BSP
上海2022年4月26日 /美通社/ -- 2022年4月8日,蓝果集团的蓝沛®特殊医学用途脂肪组件配方食品(以下简称蓝沛®)正式获得国家市场监督管理总局颁发的特殊医学用途配方食品注册批件,批准文号为国食...
关键字:
组件
BSP
IC
卫星
摘要:随着新能源的蓬勃发展和光伏发电技术的越发成熟,光伏组件的功率最大化有了广泛的应用空间和巨大的发展潜力。鉴于此,在110kV百叟光伏电站组件上实际应用功率优化技术,采集数据,分析结果,为功率优化技术在组串式光伏组件中...
关键字:
光伏发电
组件
功率优化
深度解读全球光伏电站投资最优度电成本之道
摘要:涵盖5大机构、6个国家,一键智配工具升级为3.0版...
关键字:
组件
摘要:针对目前水环境污染状况的日益恶化的问题,采用无线传感器网络,通过节点传感器采集水环境中离子浓度、盐度、电导率、温度等参数来实现实时监测。传感器网络节点一跳或多跳方式自组织网络,汇聚节点将传感器网络节点采集的数据通过...
关键字:
无线传感器网络
汇聚节点
水环境
实时监测
摘要:无线传感器网络作为一种新兴的信息获取技术,是当前的研究热点。由于无线传感器网络节点能量有限,因此对其路由协议的研究成为重中之重。对近年来无线传感器网络路由协议进行归纳和分析,并基于分层路由协议提出一种均衡能量消耗的...
关键字:
无线传感器网络
路由协议
改进算法
能量消耗
摘 要:随着耕地与水资源的日益减少和人们对高质量水产品需求量的不断增大,越来越多的人们开始尝试推广工厂化 的高密度水产养殖方式。而目前尚欠缺一种适应于工厂化高密度水产养殖模式的高效、安全且经济适用的养殖场水体环境在 线监...
关键字:
无线传感器网络
工厂化水产养殖
水环境
实时监测