最近两天写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;
}
}
/************************************************************************************************/
的内容都会同时执行,也就是说,如果只 call Timer1.start(TIMER_REPEAT,1000);那么 Timer1.fire()和
Timer2.fire()函数同时被唤醒,红灯绿灯都每一秒改变一次状态.
出现上述结果,可能有三种情况:
1.程序书写不正确.有可能多个Timer实例化的方法不对
2.TinyOs本省并不支持多个定时器
3.zigbex硬件设计不支持多个定时器
之后,又在TOSSIM上模拟,发现也出现上述结果,那么硬件不支持的可能性被排除.随后我又跟韩柏技术支持要了
一个他自己写的程序,发现情况相同.........................这就纠结了.到底是什么问题呢?
要是还找不到原因,只能想办法改程序思路不用定时器了.....