关于TinyOS实例化多个定时器的问题

最近两天写nesc代码时需要用到多个定时器以实现相关功能,但却发现:

在两个组件中实例化定时器时,只有一个定时器是正常工作的.

这个问题相当纠结唉,于是写了一个小程序测试一个程序是否能实现多个定时器,代码如下:

/************************************************************************************************/

//配置文件代码

configuration Blink {
}
implementation {
  components Main, BlinkM, LedsC, TimerC;
  Main.StdControl -> BlinkM.StdControl;
  Main.StdControl -> TimerC;
  
  BlinkM.Timer1 -> TimerC.Timer[unique("TIMER")];
  BlinkM.Timer2 -> TimerC.Timer[unique("cc")];
  BlinkM.Leds -> LedsC;
}

/************************************************************************************************/

//模块文件如下

module BlinkM {
  provides {
    interface StdControl;
  }
  uses {
    interface Timer as Timer1;
    interface Timer as Timer2;
  interface Leds;
  }
}
implementation {
command result_t StdControl.init() {
 call Leds.init(); 
return SUCCESS;
}
command result_t StdControl.start() {
call Leds.yellowOn();
call Timer1.start(TIMER_REPEAT,1000);
call Timer2.start(TIMER_REPEAT,2000);
  return SUCCESS;
}
command result_t StdControl.stop() {
return SUCCESS;
}


event result_t Timer1.fired(){
call Leds.redToggle();
return SUCCESS;
}
event result_t Timer2.fired(){
call Leds.greenToggle();
return SUCCESS;
}
}

/************************************************************************************************/

写完上述代码后,将程序烧到节点上,发现 不管是执行Timer1还是Timer2的start函数,两个Timer.fire()

的内容都会同时执行,也就是说,如果只 call Timer1.start(TIMER_REPEAT,1000);那么 Timer1.fire()和

Timer2.fire()函数同时被唤醒,红灯绿灯都每一秒改变一次状态.

出现上述结果,可能有三种情况:

1.程序书写不正确.有可能多个Timer实例化的方法不对

2.TinyOs本省并不支持多个定时器

3.zigbex硬件设计不支持多个定时器

之后,又在TOSSIM上模拟,发现也出现上述结果,那么硬件不支持的可能性被排除.随后我又跟韩柏技术支持要了

一个他自己写的程序,发现情况相同.........................这就纠结了.到底是什么问题呢?

要是还找不到原因,只能想办法改程序思路不用定时器了.....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值