我试图了解nesC的模块,配置,接口和组件的工作方式。 为此,我尝试实现一个非常简单的应用程序。完成启动后,应打开其三个LED以显示其ID。 但是我得到了错误:
/home/tinyos/WSN-Project/src/CoolLed/CoolLedM.nc: In function `CL.setCoolLed':
/home/tinyos/WSN-Project/src/CoolLed/CoolLedM.nc:12: Leds.led0On not connected
/home/tinyos/WSN-Project/src/CoolLed/CoolLedM.nc:14: Leds.led0Off not connected
我已使用Blink
和BlinkToRadio
示例作为指导,但是没有看到每个单独的LED都已连接。
那么这个错误消息是什么意思呢?
以及我该如何解决这个问题?
这是我的程序,带有注释,显示该文件放在哪个文件中。
// AppC.nc
configuration AppC{}
implementation{
components AppM;
components MainC;
AppM.Boot -> MainC;
components CoolLedM;
AppM.CL -> CoolLedM;
}
// AppM.nc
module AppM{
uses interface Boot;
uses interface CoolLedI as CL;
}
implementation{
event void Boot.booted(){
call CL.setCoolLed((uint8_t)TOS_NODE_ID);
}
}
// CoolLedI.nc
interface CoolLedI{
command void setCoolLed(uint8_t mask);
}
// CoolLedC.nc
configuration CoolLedC{}
implementation
{
components CoolLedM;
components LedsC;
CoolLedM.Leds -> LedsC;
}
// CoolLedM.nc
module CoolLedM{
provides interface CoolLedI as CL;
uses interface Leds;
}
implementation{
command void CL.setCoolLed(uint8_t mask){
if(mask & 0x01)
call Leds.led0On();
else
call Leds.led0Off();
...
}
}
答案 0 :(得分:1)
该错误表明CoolLedM
使用接口Leds
,但是该接口未连接到任何实现。让我们看一下AppC.nc
:
configuration AppC{}
implementation{
components AppM;
components MainC;
AppM.Boot -> MainC;
components CoolLedM;
AppM.CL -> CoolLedM;
}
确实:您在应用程序中使用了CoolLedM
,但是没有任何东西定义该模块使用的Leds
的实现。
您还定义了CoolLedC
,它确实连接了Leds
的{{1}}接口,但是有两个问题:
CoolLedM
本身并未在任何地方使用。CoolLedC
不提供任何接口,因此无法真正使用。要立即解决您的问题,请像在CoolLedC
中一样在Leds
中连接AppC
(并删除未使用的CoolLedC
):
CoolLedC
更好和更通用的设计(请参阅下面的链接)是将 components LedsC;
CoolLedM.Leds -> LedsC;
定义为提供CoolLedC
接口的自包含模块。我建议从一些教程开始,以了解有关nesC和TinyOS的更多信息: