;;; 任何一个nesC应用程序都是有一个或多个7332-LF 组件连接起来的,从而形成一个完整的可执行程序。在nesC中有两种类型的件,分别称为模块和配置。模块提供应用程序代码,实现一个或多个接口;配置则是用来将其他组件装配起来的组件,将各个组件所使用的接口与其他组件提供的接口连接在一起,这种行为称为连接( wiring)。每个nesC应用程序都由一个顶级配置所描述,其内容就是将该应用程序所用到的所有组件连接起来,形成一个有机整体。组件的语法定义如下:
;;; nesC-file:
;;; includes-listopt module
;;; includes-listopt configuration
;;; module:
;;; module /dent/f/er specification module-implementation
;;; configuration:
;;; configuration identifier specification configuration-implementation
;;; 组件名由标识符(identifier)定义。该标识符是全局性的,且属于组件和接口类型命名空间。; 一个组件可以有两种作用域:一个规范( specification)作用域,属于C的全局作用域;一个实现(implementation)作用域,属于规范作用域。
;;; 通过包含列表(includes-list),一个组件能可选择地包括C文件。
;;; 规范( specification)列出了该组件所提供或使用的规范元素(接口实例、命令或事件)。就如前面所述,一个组件必须实现它提供接口的命令和它使用的接口事件。;;; 一般情况下,命令向下调用硬件组件,而事件向上调用应用组件。组件间的交互只能通过组件的规范元素来沟通。每种规范元素有一个名字(接口实例名、命令名或事件名)。这些名字属于每个组件特有的规范作用域的变量命名空间。规范( specification)的语法定义如下:
;;; specification:
;;; (uses-provides-list; )
;;; uses-provides-list:
;;; uses-provides
;;; uses-provides-list uses-provides
;;; uses-provides:
;;; uses specification-element-list
;;; provides specification-element-list
;;; specification-element-list:
;;; specification-element
;;; {specification-elements; }
;;; specification-elements:
;;; specification-element
;;; specification-elements specification-element
;;; 一个组件规范可以有多个uses和provides揩令。多个uses和provides指令的规范元素可以通过使用“{”和“)”符号在一个uses或provides命令中指定。例如,下面两个定义是等价的:;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;

;;; 接口实例声明的完整语法是interface X as Y,这里可以明确地定义Y作为接口的名字。interface X是interface X as X的一个简写形式。如果接口参数(interface-parameters)被省略,那么interface X as Y声明了对应该组件的单一接口一个简单的接口实例。如果给出了接口参数(如interface SendMsg[uint8_t id]),那么这就是一个参数化的接口实例声明,对应该组件的多个接口中的一今(每个接口对应不同参数值,因为8位整数可以表示256个值,所以interface SendMsg[uint8_t id]中可以声明256个SendMsg类型的接口)。参数化接口的参数类型必须是整型(这里枚举类型是不允许的)。