系统开发语言nesC

TinyOS最初是用汇编和C语言编写的,在实现TinyOS的基于时间和组件的执行模型时,为了减少编程时的代码量就需要使用大量的宏定义。而大量使用宏定义使得TinyOS组件化的开发显得很麻烦。

因此,开发人员设计出nesC语言作为无线传感器网络的嵌入式操作系统的编程语言,它是完全贴切于无线传感器网络操作系统需求的编程语言,它克服了C语言的很多缺点来提高代码效率和代码的健壮性。nesC语言具有类似于C语言的语法,但支持TinyOS的并发模型,同时具有组件化机制,能够与其他组件连接在一起从而形成一个鲁棒性很好的嵌入式系统。

nesC定义了许多在TinyOS中所表达的重要概念:

(1)nesC应用程序要建立在定义良好、具有双向接口的组件之上,恰好体现了TinyOS的完全组件特性。

(2)nesC定义了并发模型,该模型时基于任务(task)及硬件事件句柄(hardware event handler),能更好地实现TinyOS的事件驱动机制。

nesC的组件模型如图所示。

图  nesC的组件模型

1、接口(interface)

在nesC双向组件模型中,组件功能的提供者和调用者双方都必须规定统一的调用规范(函数),这些规范的集合我们可以使用接口来表示,因此,接口也可以称为函数原型的集合。

接口中的函数原型与一般C语言的函数又有所区别,分为命令(command)和事件(event)两种,命令是由提供该接口的组件所实现的函数,事件在使用该接口的组件中实现。高层组件向底层组件发出命令,启动底层组件的功能;底层组件完成相应的功能后向高层组件报告事件。例如:

interface AMSend{

commanderror_t send(message_t* msg, uint8_t len);

eventvoid sendDone(message_t* msg, error_t error);

}

在该接口AMSend中,定义了一个命令send和一个事件sendDone。nesC中对调用命令command用关键字call作为前缀,在通知事件时,使用关键字signal来完成对事件的通知。假如上层路由组件RouteEngineP需要调用底层ActiveMessageC提供的AMSend接口来发送路由更新信息,那么,在RouterEngineP中需要使用语句
call AMSend.send(msg, len) 来发送,当底层组件通过射频把该信息发送成功后,会用语句 signalAMSend.sendDone(msg, SUCCESS) 通知事件的完成,于是RouteEngineP中的Send.sendDone 事件就被调用。

2. 组件(components)

任何一个nesC应用程序都是由一个或多个组件链接起来,从而形成一个可执行程序的。组件提供(provides)并使用(uses)接口。在nesC语言中,有两种类型的组件,分别称为模块(module)和配置(configuration)。其中,模块实现具体逻辑功能,包括提供和使用的接口,以及实现提供接口的命令(command)和使用接口的事件(event);配置则是用来将一系列组件装配起来的特殊组件,它将内部各个组件所使用的接口与其它组件提供的接口连接在一起。每个nesC应用程序都由一个最顶层的配置所描述,其内容就是将该应用程序所有用到的组件连接起来,形成一个有机整体。

3、连接(wiring)

配置将内部的各组件对应的接口连接在一起,这个操作就是连接(wiring),它将接口的提供者与接口的使用者关联起来。连接操作使用“->”号来表示,其一般意义可以理解为“user to provider”,即箭头从调用者到提供者。

下面给出一个组件及连接的例子:

module Blink{ // 模块组件

usesinterface Timer<TMilli> as Timer0; // 使用的带参数的接口,TMilli表示使用毫秒

usesinterface Leds;                 //定时器

usesinterface Boot;

}

implementation {

eventvoid Boot. booted(){  // 主函数启动结束,通知事件booted

callTimer0.startPeriodic(1000); //调用命令启动定时器

}

eventvoid Timer0.fired(){ // 定时器结束,通知事件fired

callLeds.led0Toggle(); // 调用Led接口中的Led0Toggle使led灯闪一下

}

}

configuration BlinkAppC{// 配置组件, 由于是最顶层的配置,所以不使用也不提供接口

}

implementation{

componentsMainC, BlinkC, LedsC; // 声明组件

componentsnew TimerMilliC() as Timer; // 实例化通用(generic)组件

BlinkC.Boot-> MainC.Boot;  // 连接

BlinkC.Timer0-> Timer.Timer0;

BlinkC.Leds-> LedsC;

}

该应用程序实现的功能就是开启一个定时器进行周期性的定时,定时到以后LED指示灯就闪烁一次。其中,BlinkC是模块组件,它实现了逻辑功能计数、LED灯闪烁功能,BlinkAppC是配置,将BlinkC使用的接口Timer0、Boot、Leds与接口的提供者TimerMilliC、MainC、LedsC连接起来。

此外,nesC语言还提供了task支持TinyOS的并发模型。

时间: 2024-08-26 17:51:11

系统开发语言nesC的相关文章

阳宇宸:WEB系统开发语言优劣比较

全面比较ASP.JSP.PHP .Perl..NET等WEB开发语言的优劣 ASP全名Active Server Pages,是一个WEB服务器端的开发环境,利用它可以产生和执行动态的.互动的.高性能的WEB服务应用程序.ASP采用脚本语言VBScript(Java script)作为自己的开发语言. PHP是一种跨平台的服务器端的嵌入式脚本语言.它大量地借用C,Java和Perl语言的语法, 并耦合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面.它支持目前绝大多数数据库.还有一点,

微领地小蜜app模式系统开发详解

如今企业竞争的最高境界, 不再是产品的竞争.人才的竞争.营销的竞争-- 而是一种商业模式(即赢利模式)的竞争. 微领地小蜜软件,微领地小蜜系统,小蜜APP,微领地小蜜平台,微领地小蜜开发公司,微领地小蜜服务模式,微领地小蜜商圈.O2O.C2B.B2C.F2C.B2B.C2N.C2C等微商城.App.手机网页.PC商城.小程序,微商管理系统.一物一码.防伪防窜.扫码红包.质量追溯.分销.全返.分红.拼团.互联网+直播+定制服务·系统开发提供中心. 回首过去,创新与发展裹带着机遇和挑战,微领地小蜜在

基于C/S架构的3D对战网络游戏C++框架 _05搭建系统开发环境与Boost智能指针、内存池初步了解

本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): 1.实现基本通信框架,包括对游戏的需求分析.设计及开发环境和通信框架的搭建: 2.实现网络底层操作,包括创建线程池.序列化网络包等: 3.实战演练,实现类似于CS反恐精英的3D对战网络游戏: 技术要点:C++面向对象思想.网络编程.Qt界面开发.Qt控件知识.Boost智能指针.STL算法.STL.

乐芝麻网教系统开发说明

一.系统概述: 1.乐芝麻网教系统(目前已有PC电脑版与手机客户端版)是套集学习.教育.培训.考试.调查.门户.互动等多功能于一体的网络培训管理的标准化平台,作为乐芝麻科技的核心产品,是依托公司团队多年的行业经验,融合了众多领导型组织用户的应用需求和推广经验,面向期望建立学习型组织提供完整的人才培养与学习管理系统.产品遵循ISO10015国际培训标准流程设计,基于国际平台标准(SCORM2004)开发.让用户体验到标准化的力量和标准化适用性,并坚持技术服务于应用,应用创造价值的指导思想 2.系统

哪有python开发语言入门教程免费下载?

人工智能时代,如果不想被机器人取代,最应该掌握的是编程.Python作为连续10年最受欢迎的编程语言,不但能开发Google .豆瓣等大型网站,还是人工智能领域的第一语言.那么,我猜你想问哪里有python开发语言入门教程. 千锋Python基础教程:http://pan.baidu.com/s/1qYTZiNE Python课程教学高手晋级视频总目录:http://pan.baidu.com/s/1hrXwY8k Python课程windows知识点:http://pan.baidu.com/

结构化系统开发和面向对象开发方法

结构化系统开发方法: 系统分析员.软件工程师.程序员以及最终用户按照用户至上的原则,自顶向下分析与设计和自底向上逐步实施的建立计算机信息系统的一个过程,是组织.管理和控制信息系统开发过程的一种基本框架. 三部分:管理策略部分:强调系统开发的规划.进程安排.评估.监控和反馈.开发策略部分:任务分解结构:WBS优先级结构.开发经验.开发标准. 开发过程分为:系统规划阶段.系统分析阶段.系统设计阶段.系统实施阶段.系统运行与维护阶段结构化开发早期的程序开发,如C语言,都是用结构化开发方法. 面向对象开

短信猫二次开发接口支持任何一种开发语言性能稳定

此款短信猫二次开发接口基于数据库开发方式支持任一种开发语言对短信猫开发,兼容性强.开发简单方便.灵活.稳定.可以快速地使您的应用系统实现短信功能,多种接口方式供二次开发时选择,系统具备良好的可扩展性.企事业单位通过此款短信猫二次开发接口方式实现短信功能,既实现了资源的共享和有效使用,便于企业对进出信息的管理.监控和统计,同时为以后短信功能的扩展提供了便利. 短信猫二次开发接口软件运行界面如图: 在该方案中,考虑到银行是对信息安全性要求很高的行业,采用短信猫作为短信收发设备,避免了常用的通过移动互

幼谈苹果新开发语言:Swift和苹果的用心

今天是个值得纪念的日子:由于苹果的WWDC大会.苹果的每次WWDC(全球开发人员大会)举行都让我们像打了肾上腺素这么兴奋.幸福.惊叹.震撼.深思. 今年也不例外,最关键的是苹果带来了它的一门新开发语言:Swift. 霎时间风起云涌,短短几个小时互联网界掀起了一股谈论Swift的小高潮,假设你不知道Swift,你会觉得这是一件非常丢脸的事情,粑粑. 为了不至于太落后受歧视,我今天也来简单谈谈Swift(不知道为何,国内把它称为雨燕.别这样好吗?这让我想起了 长安铃木的Swift 雨燕汽车) 一.全

【转载】谷歌酝酿将苹果Swift作为安卓APP主要开发语言

TNW中文站 4月8日报道 安卓操作系统的软件开发语言是Java,而在过去几年中,有关Java的版权,谷歌(微博)和甲骨文之间发生了长期的诉讼.最新外媒消息称,谷歌正在考虑将苹果开发的Swift作为未来安卓软件开发的“一级”语言,此外Facebook.Uber等公司也开始越来越重视Swift的使用. 据美国科技新闻网站TheNextWeb引述知情人士报道,此前苹果Swift转变为开放源码语言,而谷歌.Facebook.和Uber三家公司的代表曾经在英国伦敦开会,专门讨论Swift语言,谷歌决定逐