物联网作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Nesc概况
一、简介
1 结构和内容的分离: 程序由组件构成, 它们装配在一起 (" 配线 ") 构成完整程序. 组件定义两类域, 一类用于它们的描述 ( 包含它们的接口请求名称) ,另一类用于它们的补充。组件内部存在作业形式的协作。控制线程可以通过它的接口进入一个组件。这些线程产生于一件作业或硬件中断。
2 根据接口的设置说明组件功能。接口可以由组件提供或使用。被提供的接口表现它为使用者提供的功能,被使用的接口表现使用者完成它的作业所需要的功能。
3 接口有双向性: 它们叙述一组接口供给者 (指令)提供的函数和一组被接口的使用者(事件)实现的函数。这允许一个单一的接口能够表现组件之间复杂的交互作用 (举例来说.,当某一事件在一个回调之前发生时,对一些事件的兴趣登记)。这是危险的,因为 TinyOS 中所有的长指令 (举例来说. 发送包)是非中断的; 他们的完成由一个事件( 发送完成)标志。通过叙述接口,一个组件不能调用发送指令除非它提供 sendDone 事件的实现。通常指令向下调用,比如,从应用组件到那些比较靠近硬件的调用,而事件则向上调用。特定的原始事件与1 结构和内容的分离: 程序由组件构成, 它们装配在一起 (" 配线 ") 构成完整程序. 组件定义两类域, 一类用于它们的描述 ( 包含它们的接口请求名称) ,另一类用于它们的补充。组件内部存在作业形式的协作。控制线程可以通过它的接口进入一个组件。这些线程产生于一件作业或硬件中断。
2 根据接口的设置说明组件功能。接口可以由组件提供或使用。被提供的接口表现它为使用者提供的功能,被使用的接口表现使用者完成它的作业所需要的功能。
3 接口有双向性: 它们叙述一组接口供给者 (指令)提供的函数和一组被接口的使用者(事件)实现的函数。这允许一个单一的接口能够表现组件之间复杂的交互作用 (举例来说.,当某一事件在一个回调之前发生时,对一些事件的兴趣登记)。这是危险的,因为 TinyOS 中所有的长指令 (举例来说. 发送包)是非中断的; 他们的完成由一个事件( 发送完成)标志。通过叙述接口,一个组件不能调用发送指令除非它提供 sendDone 事件的实现。通常指令向下调用,比如,从应用组件到那些比较靠近硬件的调用,而事件则向上调用。特定的原始事件与硬件中断是关联的 (这种关联是由系统决定的,因此在本参考手册中不作进一步描述)。
4 组件通过接口彼此静态地相连。这增加运行时效率,支持 rubust 设计, 而且允许更好的程序静态分析。
5 nesC基于由编译器生成完整程序代码的需求设计。这考虑到较好的代码重用和分析。这方面的一例子是 nesC 的编译-时间数据竞争监视器。
6 nesC 的协作模型基于一旦开始直至完成作业 , 并且中断源可以彼此打断作业. nesC 编译器标记由中断源引起的潜在的数据竞争。
中断是关联的 (这种关联是由系统决定的,因此在本参考手册中不作进一步描述)。
4 组件通过接口彼此静态地相连。这增加运行时效率,支持 rubust 设计, 而且允许更好的程序静态分析。
5 nesC基于由编译器生成完整程序代码的需求设计。这考虑到较好的代码重用和分析。这方面的一例子是 nesC 的编译-时间数据竞争监视器。
6 nesC 的协作模型基于一旦开始直至完成作业 , 并且中断源可以彼此打断作业. nesC 编译器标记由中断源引起的潜在的数据竞争。
二、语言背景编辑
nesc是一种扩展C的编程语言,主要用于传感器网络的编程开发,加州大学伯克利分校研发人员为这个平台开发出微型操作系统TinyOS和编程语言nesC,同时国内外很多大学和机构利用这一平台进行相关问题的研究。
三、使用环境编辑
nesc主要用在Tinyos中,tinyos也是由nesc编写完成的。TinyOS操作系统就是为用户提供一个良好的用户接口。基于以上分析,研发人员在无线传感器节点处理能力和存储能力有限情况下设计一种新型的嵌入式系统TinyOS,具有更强的网络处理和资源收集能力,满足无线传感器网络的要求。为满足无线传感器网络的要求,研究人员在TinyOS中引入4种技术:轻线程、主动消息、事件驱动和组件化编程。轻线程主要是针对节点并发操作可能比较频繁,且线程比较短,传统的进程/线程调度无法满足(使用传统调度算法会产生大量能量用在无效的进程互换过程中)的问题提出的。
四、主要特性描述编辑
由于传感器网络的自身特点,面向其的开发语言也有其相应的特点。主动消息是并行计算机中的概念。在发送消息的同时传送处理这个消息的相应处理函数ID和处理数据,接收方得到消息后可立即进行处理,从而减少通信量。整个系统的运行是因为事件驱动而运行的,没有事件发生时,微处理器进入睡眠状态,从而可以达到节能的目的。组件就是对软硬件进行功能抽象。整个系统是由组件构成的,通过组件提高软件重用度和兼容性,程序员只关心组件的功能和自己的业务逻辑,而不必关心组件的具体实现,从而提高编程效率。
五、语法介绍编辑
接口
nesC 的接口有双向性: 它们描述一个多功能的两组件(供给者和使用者)之间的交互渠道.。接口叙述一组叫做指令的, 被接口的供给者实现的,被命名的功能和一组叫做事件的, 被接口的使用者实现.的,被命名的功能。
本节解释接口如何被指定, 第5 节解释组件如何描述它们提供和使用的接口, 第6 节解释在C代码中指令和事件如何被调用和实现,而第7 节解释组件接口如何被一起联编.
接口被接口类型指定,如下:
nesC-file:
includes-listopt interface
. . .
interface:
interface identifier { declaration-list }
storage-class-specifier: also one of
command event async
这声明接口类型标识符. 这一标识符有全局的作用范围并且属于分开的命名空间,组件和接口类型命名空间。如此所有接口类型都有清楚的名字以区别于其它接口和所有组件, 同时能不和一般的C的声明发生任何冲突。
声明列表中,每个接口类型都有一个分开的声明范围。声明列表必须由有指令或事件存储类型的功能描述组成( 否则, 会发生编译-时间错误). 可选的async关键字指出指令或事件能在一个中断处理者中被运行。
通过包含列表,一个接口能可选择地包括C 文件(见第9节)。
一个简单的接口如下:
interface SendMsg {
command result_t send(uint16_t address, uint8_t length, TOS_MsgPtr msg);
event result_t sendDone(TOS_MsgPtr msg, result_t success);
}
SendMsg 接口类型提供者必须实现发送指令, 而使用者必须实现sendDone 事件.
组件说明
一个nesC 组件或是一个模块(第6 节) 或一个结构(第7 节):
nesC-file:
includes-listopt module
includes-listopt configuration