如何连接nesC中的LED?

时间:2019-04-15 11:09:25

标签: tinyos nesc

我试图了解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

我已使用BlinkBlinkToRadio示例作为指导,但是没有看到每个单独的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();
        ...
    }
}

1 个答案:

答案 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的更多信息: