# return rcombine(call ADCControl.init(), call Leds.init());
返回两个函数返回值的与值。
# 略写(Shorthand)
SenseM.ADC -> Sensor 等价于 SenseM.ADC -> Sensor.ADC //没有疑问
SenseM.ADControl -> Sensor 等价于 SenseM.ADControl -> Sensor.StdControl
//这是因为Sensor没有ADControl接口,但是有同类型的StdControl接口,nesC编译器能够判断出来这种略写的意思,当然,如果Sensor有两个StdControl类型的接口,就会报错。
# 参数化接口
允许一个组件提供一个接口的多个实例,它们以一个编译时刻或运行时刻的参数来索引(其实相当于定义一个数组)。
# 参数化接口的索引
本来直接用数字就可以索引,如
provides interface Timer[uint8_t id];
可直接以Timer[1],Timer[2],…来使用这256个接口,nesC为了避免使用不慎导致两个地方用到了相同的一个实例,引入了unique(“Timer”),即nesC编译器保证所有由字符串“Timer”标识的一组实例的索引号互不相同,以避免冲突(当然,与其他字符串的组可能会有冲突)。
# 读代码SenseM.nc的tip:
为什么要另外给一个StdControl接口,命名为ADCControl?
很简单,为了单独控制ADC的启动、工作和停止。