tinyos - 如何连接nesC中的LED?
问题描述
我试图了解 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();
...
}
}
解决方案
该错误表示CoolLedM
使用 interface Leds
,但该接口未连接到任何实现。让我们看看AppC.nc
:
configuration AppC{}
implementation{
components AppM;
components MainC;
AppM.Boot -> MainC;
components CoolLedM;
AppM.CL -> CoolLedM;
}
确实:您CoolLedM
在应用程序中使用,但没有定义Leds
该模块使用的实现。
您还定义CoolLedC
了 ,它确实连接了 的Leds
接口CoolLedM
,但它有两个问题:
CoolLedC
本身没有在任何地方使用。CoolLedC
没有提供任何接口,所以不能真正使用。
要立即解决您的问题,请像在(并删除未使用的)Leds
中那样连接:AppC
CoolLedC
CoolLedC
components LedsC;
CoolLedM.Leds -> LedsC;
更好和更常见的设计(见下面的链接)是定义CoolLedC
为提供CoolLedI
接口的自包含模块。我建议从一些教程开始,以了解有关 nesC 和 TinyOS 的更多信息:
推荐阅读
- python - 发出并发 selenium/chromedriver 请求时出现 ResponseNotReady 错误
- javascript - Express res.download 极其奇怪的行为
- c++ - 我怎样才能得到一个指向已经推导出的模板函数的指针?
- python - 加载一个 json 文件,遍历它并将每个元素写入一个新文件
- xcode - 在 UI 测试/单元测试期间将自定义字符串写入日志
- php - wordpress 复制器网站迁移问题
- r - 列中的 R 部分 gsub
- python-3.x - “TypeError:'str' 对象不能解释为整数”
- snmp - 将 MIB 表与 Prometheus 和 SNMP Exporter 一起使用
- linux - 按进程数和最活跃的用户数最多