外文翻译.docx
《外文翻译.docx》由会员分享,可在线阅读,更多相关《外文翻译.docx(19页珍藏版)》请在冰点文库上搜索。
![外文翻译.docx](https://file1.bingdoc.com/fileroot1/2023-6/5/0aca3abc-ce5b-4e02-83a3-724d1cef5d35/0aca3abc-ce5b-4e02-83a3-724d1cef5d351.gif)
外文翻译
毕业设计英文文献翻译
姓名:
张彬彬
学号:
3100609076
指导老师:
马汉达
完成时间:
2014年03月18日
简介
这本书是关于在nesC语言写作TinyOS系统和应用程序。
这一章给出简要概述的TinyOS和它的用途。
TinyOS是开放源码项目,该项目一大批研究型大学和公司作出贡献。
主要的TinyOS网站,,已下载并安装TinyOS的编程环境的说明。
该网站有大量的有用信息,这本书并不涵盖,例如常见的硬件平台和如何在一个节点上安装代码。
1.1网络、嵌入式传感器
TinyOS被为了小、无线传感器上运行。
这些传感器网络有存在的可能使范围广泛的学科、领域和技术发生革命性变化。
最近的一个例子使用这些设备的
包括:
金门大桥的安全。
高速的加速度计对流动的收集同步数据和旧金山的金门大桥的组织结构内的振荡。
此数据允许维护人员大桥很容易观察响应事件如高风在一座桥的结构健康的或交通,以及快速评估[6]地震发生后可能造成的损害。
正在无线避免了需要安装和维护英里长的电线。
火山监测。
加速度计和麦克风观察地震事件上Reventador和在厄瓜多尔通古拉瓦火山。
本地节点进行比较时他们观察事件,以确定其地理位置和报告聚合数据到一个阵营几公里远使用远距离wirelesss的链接。
小的无线节点允许地质学家和geophysicsts安装密集、远程科学仪器[21]中获取数据回答不可接近环境有关的其它问题。
数据中心资源调配。
数据中心和企业计算系统需要大量的能源,到点,它们被放置在具有低功耗成本的地区。
大约50%的在这些系统中的能量将进入冷却,部分由于高度保守的冷却系统。
通过安装无线传感器跨机机架,数据中心可以自动感觉到哪些领域需要冷却和可以调整哪些计算机做工作和产生的热量[12]。
动态自适应这些因素能够极大地降低电力消耗,使IT基础架构变得更加高效和减少对环境的影响。
虽然这些三个应用程序域是只有一小片的传感器网络使用的位置,他们显示这些网络和大多数其他计算系统之间的关键区别。
第一,这些"传感器"需要网络运行无人值守很长一段时间。
第二,他们收集的数据和响应不可预知的环境。
最后,由于成本、部署简单和鲁棒性的原因,他们是无线。
这三个问题——长寿、预埋和无线通信——在一起,导致传感器要使用不同的方法比传统、有线,和以人为中心或以机器为中心的系统的网络。
传感器网络应用的多样性意味着有很多网络体系结构中,
图1.1:
一个典型的传感器网络体系结构。
修补程序的超低功率传感器运行nesC/TinyOS,通信网关节点通过数据接收器。
这些网关连接到较大互联网。
图1.2:
生产的MoteivTelos传感器。
节点的顶部有广播电台、传感器和电路USB连接器。
底部,不会显示,有的处理器和flash存储芯片。
天线是的一部分印制电路板(PCB)。
但占主导地位的部署部分往往遵循一个共同,图1.1[13、17、21]所示超低功耗传感器自组织形成特设路由网络的一个或多个数据接收器节点。
这些传感器接收器连接到网关,通常是几个数量级功能更强大比传感器:
网关运行Linux、Windows,或其他的多任务运行的嵌入的窗体系统。
网关有互联网连接,或者通过手机网络,远距离无线或甚至只是有线以太网。
能源问题占主导地位的传感器硬件和软件设计。
这些节点必须是无线的
小型、低成本和长期运行无人值守。
虽然它往往是可能提供大型电力
资源,例如大型太阳能电池板、定期更换电池或墙上的电源,向小数目
网关,做的上百个传感器到每一个是不可行的。
1.1.1解剖学研究传感器节点(Mote)
由于能源消耗确定传感器节点生存期,传感器节点通常称为motes,往往具有非常有限的计算和通信资源。
而不是一个正式的32位或以兆字节或千兆字节的RAM的64位CPU,他们有几个8位或16位微控制器字节的RAM。
而不是千兆赫,这些微控制器运行在1-10兆赫。
其低功耗收音机可以发送几十到几百千位每秒,而不是802.11的数万兆比特。
其结果是,软件需要效率很高,CPU周期和内存的使用。
图1.2显示了一个示例节点平台,Telos,其目的是为了便于实验和低功率操作。
它有带10kB的RAM和flash的48kBTIMSP43016位微控制器程序内存。
它的无线电TICC2420遵循IEEE802.15.4标准,可以发送达250kbps。
权力,收音机占据主导地位,系统:
AA电池一对,Telos可以上有收音机约4天。
持久的再比四天要求保持在深度睡眠中的节点状态的大多数醒的时候,只在必要时,和尽快睡着。
在这本书中讨论的其他微尘,从弓弩技术micaz是类似:
它有带4kB的RAM,128kB的flash程序存储器,AtmelATmega1288位微控制器使用相同CC2420射频芯片,也运行关闭AA电池一对,类似的电源消耗配置文件。
网络,部署后,收集的数据不间断的周、月或年。
作为安置传感器是本身非常特定于应用程序,它是罕见的网络,需要支持多个并发应用程序,甚至要求更多偶尔重新编程。
因此,不同于一般用途计算系统,强调运行时的灵活性和可组合性,传感器网络系统往往若要进行高度优化。
通常,为特定的应用程序选择本身的传感器套件:
volcaninc监测使用的加速度计和麦克风,,而数据中心资源调配使用温度传感器。
1.2TinyOS
TinyOS是一个轻量级的操作系统,专为低功耗的无线传感器。
TinyOS不同于大多数其他操作系统中,其设计的重点是超低低功耗操作。
而是一个成熟的处理器,比TinyOS被专为小型、低功耗的微控制器motes有。
此外,TinyOS有极具侵略性的制度和机制节省电源。
TinyOS使得构建传感器网络应用程序更加容易。
它提供了一组重要服务和
抽象,如遥感、通信、存储和计时器。
它定义了一个并发执行模型因此,开发人员可以构建可重用的服务和组件的应用程序,而无需担心不可预见的相互作用。
TinyOS运行在多个通用平台上,其中大部分很容易地支持添加新的传感器。
此外,TinyOS的结构便于合理地到端口到新的平台。
TinyOS应用程序和系统,以及操作系统本身,都写在nesC语言。
nesC是
C方言与功能,以减少RAM和代码大小,使重大优化,并帮助防止低级bug喜欢争用条件。
章2进入细节上如何nesC有显著区别其他类C语言和这本书的大部分是有关如何最佳使用这些功能来编写可靠、高效率代码。
1.2.1什么TinyOS提供
在较高水平,TinyOS提供了三件事,使写作系统和应用程序更容易:
•一个组件模型,定义了如何写小、可重用的代码片断和撰写他们成较大的抽象,
•一个并发执行模型,定义了组件如何交错以及其计算作为中断和非中断代码交互的方式
•应用程序编程接口(Api)、服务组件库和整体的一个组成部分简化编写新的应用程序和服务的结构。
图1.3:
示例应用程序体系结构。
应用程序代码使用计时器来定期,行事到传感器收集的数据和一个路由层将数据传送到一个接收器。
在nesC中的根基是组件模型。
它允许你写片断的可重用的代码,显式声明它们的依赖项。
例如,一般用户按钮组件,告诉你的时候坐在中断处理程序按下按钮。
组件模型允许按钮实现是独立的中断就是——例如,所以它可以使用许多不同的硬件平台上——而不需要复杂的回调或魔法函数的命名约定。
第2章和第章3描述基本组件模型。
并发执行模型使TinyOS支持需要在采取行动的许多组件同一时间,同时需要的RAM小。
第一,在TinyOS中的每个I/O调用是分相:
而不是直到块完成后,请求立即返回并调用方获取回调时在I/O完成。
因为堆栈不绑起来等待I/O调用来完成,TinyOS只需要一个堆栈,且不具有线程。
相反,章5引入了是轻量级的延迟的过程调用的任务。
任何组件可以后一项任务,其中TinyOS将在以后的某个时间运行。
因为低功率设备必须花上大部分的他们的时间睡着了,他们有CPU利用率低,所以在练习的任务倾向于运行后不久他们是过帐(在几毫秒之内)。
此外,因为任务不能抢占彼此,任务代码不需要担心数据争用。
低级中断代码(在高级的并发章中,讨论了第11章),可以具有种族条件当然:
nesC检测到可能的数据在编译时种族和警告你。
最后,TinyOS本身有一套Api的常见功能,如发送的数据包阅读传感器,并对事件的响应。
这些用途是洒的throughpout完整的书,并提交更详细的第6章和附录a。
除了编程接口,TinyOS还提供一个组件的结构和组件库。
例如,章12描述TinyOS的硬件抽象体系结构(HAA),它定义了如何建立,从低级硬件(例如收音机芯片)到(例如发送数据包)独立于硬件的抽象。
此组件结构的一部分包括资源锁,涵盖第11章中,启用自动低功耗操作,以及简化写作这种锁的组件库。
TinyOS本身在不断发展。
在TinyOS社会中,"工作组"的形式来解决内的OS,改善现有的服务和添加新的工程和设计问题。
这本书是因此真正的OS的快照时间。
如第12章讨论和附录一件礼物,TinyOS有一套标准,稳定的Api为核心的抽象概念,但这套始终如新扩大出现硬件和应用程序。
保持最新TinyOS的最佳方法是检查其web页和参加它的邮件列表。
该网站还涵盖先进的TinyOS和nesC功能,远远超出了这本书,包括二进制组件,无线范围重编程服务,调试工具和nesC的参考手册。
1.3示例应用程序
为了更好地了解传感器网络所面临的独特挑战,我们步行通过收集基本数据
应用程序。
定期运行此应用程序的节点醒、样品某些传感器和发送数据71.4。
编译和安装应用程序通过一个特设收藏树到数据接收器(如图1.1)。
作为网络必须最后一年,节点花99%的时间处于深度睡眠状态。
在能源方面,收音机到目前为止是节点的最昂贵部分。
持久一年需要告诉收音机处于低功耗状态。
低功率无线电实现技术是超出了的范围这本书,但实际结果就是数据包传输具有更高的滞后时间。
[14]
图1.3显示四个TinyOSApi应用程序使用:
低收音机,计时器的电源设置传感器和数据采集路由层。
当TinyOS告诉应用程序已启动该节点,应用程序代码在电台上配置的电源设置,并启动定期计时器。
每隔几分钟,此计时器触发和应用程序代码样本及其传感器。
它将这些传感器的值放入一个数据包和要求要将数据包发送到数据接收器的路由图层...在实践中,应用程序往往会更复杂比这个简单的示例。
例如,他们包括额外的服务,如管理层的允许管理员重新配置参数和检查状态的网络,以及无线所以网络可以被重新编程,而无需收集的所有节点进行编程。
然而,这些四个抽象——电源控制、计时器、传感器和数据收集——包括整个数据通路应用程序。
1.4编译和安装应用程序
您可以下载最新的TinyOS分布、nesC编译器,编译器和其他工具在。
这本书;范围之外是设置您的编程环境TinyOS网站有循序渐进教程,可以让你开始。
TinyOS的一个部分是用于编译广泛生成系统应用程序。
一般情况下,若要编译为一个传感器平台的程序,一个类型使,例如,使telosb。
这将编译的二进制文件。
若要在一个节点上安装该二进制文件,你插到节点您使用一个USB或串行连接和类型使PC安装。
教程进入编译和安装选项的详细信息。
1.5这本书的其余部分
本书的其余部分将进入如何在nesC程序和编写TinyOS应用程序。
它被划分成三个部分。
第一是重要的编程概念,nesC的简短介绍。
第二部分解决了基本的应用程序使用标准的TinyOSApi的编程。
第三部分挖深一点,并落实了如何那些TinyOSApi看了看。
例如,第三部分描述如何TinyOS文摘硬件,因此您可以编写新的传感器的驱动程序。
逐章,这本书的结构如下:
•第一章是这一章。
•章2描述了的主要的nesC从C和C语言的休息方式:
程序是如何
建组件和组件和接口如何帮助管理程序的命名空间。
•章3介绍了组件和它们是如何交互的接口通过。
•章4进入到配置、连接其他组件的组件的更详细
在一起。
•第5章涵盖基本的TinyOS执行模型并给出指导如何以及何时使用
任务。
•第6章花从先前的三个章节的材料和汇集到的示例
写一个全面的应用程序,当一个节点观察在其环境中的变化时就会发送警报。
在过程中,它涵盖主要的TinyOSApi(时机、遥感、通信和存储)。
•第7章详细介绍了与通过串行端口连接的节点通信的PC端工具和
涵盖的TinyOS串行堆栈和数据包的格式。
•第8章引入了更高级的组件主题,如参数化的接口和属性。
虽然应用程序通常不使用这些机制,他们是不可或缺的在编写可重用时
库和系统。
•第9章进入布线参数化的接口,为可重复使用的大多数系统奠定基础。
描述管理的基本机制接口键后,经历了四个例子
不断增加的复杂性。
•第10章提供了八个常见的TinyOS设计模式:
通常非常有用和强大的方式
组织的组件。
•第11章最后高级编程主题涵盖了并发性。
它描述了
异步代码、TinyOS任务模型和电源锁。
•第12章描述硬件抽象体系结构(HAA)TinyOS三级层次结构
使用来提高低级硬件抽象到独立于硬件、应用程序级别的服务。
•第13章去逐步通过先进的应用程序标识的事件的位置
基于时感觉到的节点。
它使用低层接口来实现时间同步和
高频率采样。
•附录A简明概述了主要的TinyOS应用程序接口。
在书中,你会发现编程提示:
一般我们过蒸馏水的最佳使用惯例从TinyOS和nesC的用户多。
第十一页列出了它们在同一个地方。
最后,完整的源代码,例如代码(在章节6,7本书中介绍的应用程序和13)可用在TinyOS的贡献的代码目录中,根据"TinyOS编程"的名称——请参阅的详细信息。
名称和程序结构
程序结构是C和nesC的最基本和最明显的区别。
C程序是由组成变量、类型和单独编译和链接在一起,然后文件中定义函数。
nesC程序内置组件连接("有线")的显式程序语句;nesC编译器连接,并将作为一个单元编译这些组件。
为了说明和解释这些差异在程序如何建立的我们比较和对比的两个非常简单的"你好C和nesC实现世界"-喜欢mote应用程序、通电(启动和打开LED)和闪烁(引导并反复闪烁LED)。
2.1HelloWorld!
最接近的微尘等效于经典的"HelloWorld!
"程序是"通电"的应用程序,只需
打开一个motes指示灯在启动,然后不能睡着。
通电时,C执行是相当简单的:
#include"mote.h"
intmain()
{
mote_init();
led0_on();
sleep();
}
2.1列出:
在C中通电
通电时应用程序是编译和链接带有"mote"库,其中提供执行函数
硬件初始化(moteinit)、LED控制(led0上的)中的微尘诸低功耗休眠模式(睡眠)。
"Mote.h"头文件只提供这些和其他的基本功能的声明。
平常C主要功能自动调用时摩特boots.1
NesC执行通电后的被分裂成两个部分。
第一,PowerupC模块,包含通电后的可执行逻辑(有什么是它。
...):
modulePowerupC{
usesinterfaceBoot;
usesinterfaceLeds;
}
implementation{
1此C编译器、库和链接器通常为此通过排列设置的微尘的硬件复位向量指向一块然后,设置一个C环境的程序集代码调用主。
eventvoidBoot.booted(){
callLeds.led0On();
}
}
2.2列出:
在nesC中PowerupC模块
此代码表示与两个接口,引导和指示灯,通过系统的其余部分进行交互,PowerupC并提供的启动事件的引导接口的调用led0On2命令的实现Led接口。
与C代码相比,我们可以看到启动的事件的实现需要主要功能和对led0On命令调用库上led0的地方的调用的地方函数。
此代码演示nesC和c:
之间的主要区别的两个地方的C程序由组成职能,nesC程序造实现特定的服务(的情况下的组件PowerupC,在启动时打开一个led指示灯)。
此外,C函数通常交互通过调用每个其他直接,而组件之间的交互指定的接口:
接口的用户请求(调用命令)上的接口的提供程序,该提供程序使回调(信号事件)接口的用户。
命令和事件本身就像常规函数(它们可以包含任意C代码);调用命令或信号事件只是一个函数调用。
PowerupC是一个用户的两个引导和指示灯;启动的事件是当系统引导,而led0On是一个命令时终止回调要求LED0被开启。
nesC接口是类似于Java接口,加上的命令或事件的关键字添加到回调区别开来的请求:
interfaceBoot{
eventvoidbooted();
}
interfaceLeds{
commandvoidled0On();
commandvoidled0Off();
commandvoidled0Toggle();
...
}
2.3列出:
简单的nesC接口
通电后,PowerupAppC配置中,第二部分指定PowerupC如何连接到TinyOS的服务:
configurationPowerupAppC{}
implementation{
componentsMainC,LedsC,PowerupC;
MainC.Boot->PowerupC.Boot;
PowerupC.Leds->LedsC.Leds;
}
2.4列出:
在nesC中PowerupAppC配置
2LEDs的编号的TinyOS,因为不同的平台有不同的颜色指示灯。
图2.1:
线图为通电的应用程序
图2.2:
nesC编译模型。
NesC编译器加载并在nesC组件,它将读取编译到一个C文件。
这个C文件传递到本机C编译器,编译器将生成二进制mote。
这是说PowerupAppC应用程序都是由三个组件(模块或配置),
MainC(系统启动)、LedsC(LED控制)和PowerupC(我们通电模块)。
PowerupAppC明确
指定接口提供和使用的这些组件之间的连接(或布线)。
当
MainC完成引导它发出信号的启动的事件的其引导界面,连接的系统
由PowerupAppC在布线到中PowerupC的启动事件。
此事件然后调用led0On命令其指示灯界面,该界面再连接(有线)由PowerupAppC提供的Led接口到的LedsC。
因此在调用打开LED0。
图2.1所示由此产生的组件图——这图中由自动生成从PowerupAppCnesdoc,nesC的文档生成工具。
PowerupAppC说明了C和nesC的第三个主要区别:
布线使连接表示通过链接C版本的通电与明确其"mote"库。
在C版本中,通电调用全局函数命名为led0上并连接到任何库提供的函数相同的名称;如果两个图书馆提供这种功能然后(通常)上,链接器命名的第一个命令行"的赢"。
使用nesC的配置,程序员相反显式选择哪个组件要使用的函数的执行情况。
NesC编译器可以利用此显式的布线打造高度优化的二进制文件。
当前nesC编译器(nesc1)的实现采取nesC文件描述组件作为输入和输出C文件。
C文件传递到本机的C编译器,可以编译到所需的微控制器或处理器。
图2.2显示了此过程。
NesC编译器仔细构造生成的C文件,最大限度地C编译器的优化能力。
例如,由于它是单个文件,C编译器可以自由优化内联代码需要的时候调用跨。
NesC编译器还会修剪死代码其中称为从来没有,从来没有可访问的变量:
因为有没有动态链接在nesC,它有一个完整的应用程序调用关系图。
这将加快C编译并减少程序在RAM和代码的大小。
2.2基本区别:
组件、接口andWiring
C与nesC的三个重要区别——组件、接口和接线——所有涉及到命名和组织程序元素(变量、函数、类型等)。
在C中,程序是破碎入单独的文件,都通过一个全局命名空间连接:
连接在一个文件中声明symbolX对符号链接器X在另一个文件中定义。
例如,如果file1.c包含:
externvoidg(void);/*declarationofg*/
intmain()/*definitionofmain*/
{
g();g();
}
和file2.c包含:
voidg(void)
{
printf("helloworld!
");
}
然后编译和链接file1.c和file2.c连接到定义的对在主要与g()的调用g在file2.c。
所产生的程序打印"你好世界!
"两次。
组织一个全局命名空间中的符号可能会非常棘手。
C程序员使用数量的技术简化这项任务,包括头文件和命名约定。
头文件组声明所以他们可以在多个文件中使用而无需重新输入密码,例如头文件file1.h为file1.c
通常将包含:
#ifndefFILE1_H
#defineFILE1_H
externvoidg(void);/*g声明*/
#endif
命名约定被为了避免出现两个具有相同名称的不同符号。
为实例,以t保证一个类型和函数不能具有相同的名称经常用作类型的后缀。
有些图书馆使用共同的前缀对于他们的符号,例如Gtk和gtk的GTK+图形工具包。
这样的前缀提醒用户函数相关和避免意外的名称与碰撞其他的库,但使程序更详细。
nesC的组件提供更系统的方式来组织程序元素。
一个组件(模块或配置)分组到单个单元,相关的功能一种传感器,系统启动一个计时器)在非常类似于一个类在面向对象语言中的一种方式。
例如,TinyOS表示它的系统服务作为单独的组件,如LedsC(LED控制,见上文)、ActiveMessageC(发送和接收无线电消息),等等。
只有服务(组件)名称是全球性的该服务的在每个组件的范围内命名的操作:
ActiveMessageC.SplitControl来启动和停止收音机,ActiveMessageC.AMSend将发送一个广播消息,等等。
接口使进一步结构组件:
组件通常指定集而言
接口(指示灯,引导,Sp