- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 nesC编程语言
第三章 nesC编程语言 第三章 nesC编程语言 nesC语言简介 nesC语言规范 基于nesC语言的应用程序 nesC程序运行模型 编程约定 可视化组件关系 1、 nesC语言简介 TinyOS最初是用汇编和C语言编写的,后来改用支持组件化编程的nesC语言。该语言把组件化/模块化思想和基于事件驱动的执行模型结合起来。 TinyOS操作系统、库、及其应用程序都是用nesC语言编写的。TinyOS是一种面向传感器网络的新型操作系统,它最初是用汇编和C语言编写的。 但在应用过程中,发现C语言不能有效方便地支持面向传感器网络的应用和操作系统的开发,相关工作人员为此对C语言进行了一定的扩展,开发出nesC语言。 nesC不但支持TinyOS的并发模型,还同时具有结构化机制,命名机制,能够跟其它软件组件连接成一个健壮的网络嵌入式系统。 其主要目标是让应用程序开发人员能够方便地建立起完整的、并发式系统的组件,并可以在编译时作出全面的检查。 TinyOS定义了很多的重要的概念,这些概念都体现在nesC语言上了。 nesC:使用C作为其基础语言,支持所有的C语言词法和语法,其独有的特色如下: 增加了组件(component)和接口(interface)的关键字定义; 定义了接口及如何使用接口表达组件之间关系的方法; 目前只支持组件的静态连接,不能实现动态连接和配置。 nesC应用程序都是由组件组成的,这些组件之间的连接是通过定义良好的、具有双向性质的接口。 1、结构和内容的分离:程序由组件构成, 它们装配在一起 (“ 配线/连接 ”) 构成完整程序。 2、根据接口的设置说明组件功能。接口可以由组件提供或使用。被提供的接口表现它为使用者提供的功能,被使用的接口表现使用者完成它的作业所需要的功能。 3、接口有双向性:它们描述一组接口供给者 (指令)提供的函数和一组被接口的使用者(事件)实现的函数。 4、组件通过接口彼此静态地相连。这增加运行时效率,而且允许更好的程序静态分析。 5、nesC基于由编译器生成完整程序代码的需求设计。这考虑到较好的代码重用和分析。这方面的一例子是nesC 的编译-时间数据竞争监视器。 6、nesC 的协作模型基于一旦开始直至完成作业, 并且中断源可以彼此打断作业。nesC 编译器标记由中断源引起的潜在的数据竞争。 2、nesC语言规范 概述 TinyOS操作系统、库和程序服务程序是用nesC写的。 nesC是一种用于开发组件式结构程序的语言。 nesC是一种C语法风格的语言,但是支持TinyOS的并发模型,以及组织、命名和连接组件成为嵌入式网络系统的机制。 nesC应用程序由有良好定义的双向接口的组件构建; nesC把组件化/模块化的思想和TinyOS基于事件驱动的执行模型结合起来。?? 规范 nesC应用程序由一个或多个组件连接而成。 一个组件可以提供或使用接口: 组件中command接口由组件本身实现; 组件中event接口由调用者实现; 接口是双向的,调用command接口必须实现其event接口。 nesC编程基本概念 接口(interface) 模块(module) 组件(configuration、components) 命令(command)、事件(event)、任务(task) 2.1 接口 一个组件可以提供接口(provides),也可以使用接口(uses)。提供的接口描述了该组件提供给上一层调用者的功能,而使用的接口则表示该组件本身工作时需要的功能。 接口是一组相关函数的集合,它是双向的并且是组件间的唯一访问点。接口声明了两种函数: 命令(command):接口的提供者必须实现它们; 事件(event):接口的使用者必须实现它们 。 接口是双向的:提供或使用。 接口指定了一组命令(command),其职能由接口的提供者实现。还指定了一组事件( event),其职能由该接口的使用者实现。 也就是说,提供了接口的组件必须实现该接口的命令函数;而使用了某接口的组件必须实现该接口的事件函数。 如果一个组件调用了( call)的一个接口命令 ,必须实现该接口的事件。 一个组件可以使用( use)或提供( provide)多个接口或者同一接口的多个实例。 如何定义接口: 接口放在一个单独的文件中*.nc 接口的名称应与文件名对应例如interface1的接口则必须对应于文件名interface1.nc 接口定义描述了一系列函数原型(command和event) SendMsg.nc: interface SendMsg { command result_t send(uint16_t address, uint8_t length,message_t *msg); even
文档评论(0)