文档介绍:nesC语言参考手册
1 简介
nesC 是对 C 的扩展,它基于体现 TinyOS 的结构化概念和执行模型而设计。 TinyOS 是为传感器网络节点而设计的一个事件驱动的操作系统,传感器网络节点拥有非常有限的资源( 举例来说., 8K 字节的程序储存器,512个字节的随机存取储存器) 。TinyOS 用 nesC 重新编写。本手册描述 nesC 的 版本, 在第 3 段中概述了。
nesC 基本概念如下:
结构和内容的分离: 程序有组件构成, 它们装配在一起(" 配线") 构成完整程序. 组件定义两类域, 一类用于它们的描述( 包含它们的接口请求名称) ,另一类用于它们的补充。组件内部存在作业形式的协作。控制线程可以通过它的接口进入一个组件。这些线程产生于一件作业或硬件中断。
根据接口的设置说明组件功能。接口可以由组件提供或使用。被提供的接口表现它为使用者提供的功能,被使用的接口表现使用者完成它的作业所需要的功能。
接口有双向性: 它们叙述一组接口供给者(指令)提供的函数和一组被接口的使用者(事件)实现的函数。这允许一个单一的接口能够表现组件之间复杂的交互作用(举例来说.,当某一事件在一个回调之前发生时,对一些事件的兴趣登记)。这是危险的,因为 TinyOS 中所有的长指令(举例来说. 发送包)是非中断的; 他们的完成由一个事件( 发送完成)标志。通过叙述接口,一个组件不能调用发送指令除非它提供 sendDone 事件的实现。通常指令向下调用,比如, 从应用组件到那些比较靠近硬件的调用,而事件则向上调用。特定的原始事件与硬件中断是关联的(这种关联是由系统决定的,因此在本参考手册中不作进一步描述)。
组件通过接口彼此静态地相连。这增加运行时效率,支持 rubust 设计, 而且允许更好的程序静态分析。
nesC基于由编译器生成完整程序代码的需求设计。这考虑到较好的代码重用和分析。这方面的一例子是 nesC 的编译-时间数据竞争监视器。
nesC 的协作模型基于一旦开始直至完成作业, 并且中断远源可以彼此打断作业. nesC 编译器标记由中断源引起的潜在的数据竞争。
本文是 nesC 的一本参考手册并非个别指导。TinyOS tutoria1给出了对 nesC 的更亲切的介绍.
本文的其余部分构成如下: 第 2 节给出了本参考手册中使用的记号。. 第 3 节概述 nesC 的新特征。第 4,5 节,6, 和 7介绍 nesC 接口和组件. 第 8 节给出 nesC的协作模型和数据竞争监视. 第 9 节解释 C文件, nesC 接口和组件是怎样被装配成一个应用. 第 10 节包含 nesC 的保留的各种特征. 最后,附录A完全定义 nesC 的文法(来自Kernighan and Ritchie (K&R) [2, pp234–239]附录A的对 C 文法述说的扩展),而附录 B 是本参考手册中所使用术语的专业词汇词典。
2 符号
打字机字体作为 nesC 代码和文件名,带任意下标的单个斜体字符用于表示 nesC 实体,举例来说., " 组件 K" 或" 数值 v"。nesC文法是ANSI C 文法的扩展. 我们选择来自 Kernighan and Ritchie (K&R) 的附录A的 ANSI C 文法[2, pp234–239]作为我们介绍的基础。在这里我们将不重复ANSI C文法。. 斜体字是非终端机和非文字的终端机,打字机字体和符号是文字的终端机。下标 opt 表示可选择的终端机或非终端机。在一些情形中,我们改变一些 ANSI C 文法规则. 我们用下面的方式表示:aso 为现存的非终端机指出新增的内容,repaced by表示替换一现有的 的结构解释给出对应的文法片段。在这些片段中,我们有时使用. . . 表现省略( 与当前不相关的解释). 附录A给出完整的 nesC 用来自 C99 标准 intty 文件的 uint8 t 和 uint16 t 类型.
3 变化
nesC .1版本的变化如下:
1. 原子的陈述. 这些单一化协同数据结构的实现,能够被新的编译- 时间数据竞争监视器识别。
2. 编