如何在 TinyOs 中多次触发一个 onshot 定时器?
How to fire a onshot timer multiple times in TinyOs?
我正在尝试在 TinyOS 中编写一个简单的程序来实现 2 个定时器,一个是周期性定时器,另一个是一次性定时器。周期性定时器必须每 2 秒触发一次,单发定时器应分别在第 5、7 和 9 秒触发。我写了程序,但是oneshot定时器不起作用。请帮我找出问题所在。
#include "Timer.h"
module MyTimerC @safe()
{
uses interface Timer<TMilli> as Timer0;
uses interface Timer<TMilli> as Timer1;
uses interface Leds;
uses interface Boot;
}
implementation
{
event void Boot.booted()
{
call Timer0.startOneShot( 5120 );
call Timer0.startOneShot( 7168 );
call Timer0.startOneShot( 9216 );
call Timer1.startPeriodic( 2048 );
}
task void TogLed0()
{
dbg("MyTimerC", "LED 0 Toggle \n");
call Leds.led0Toggle();
}
task void TogLed1()
{
dbg("MyTimerC", "LED 1 Toggle \n");
call Leds.led1Toggle();
}
event void Timer0.fired()
{
dbg("MyTimerC", "One shot Timer 0 fired @ %s \n", sim_time_string());
call Leds.led2Toggle();
}
event void Timer1.fired()
{
dbg("MyTimerC", "Periodic Timer 1 fired @ %s.\n", sim_time_string());
post TogLed0();
post TogLed1();
}
}
您只能在定时器上调用 startOneShot 一次 - 您只能在同一定时器 触发后再次调用 startOneShot。我建议为你的一次拍摄使用 3 个单独的计时器,或者在启动时调用 startOneShot(5 秒),然后在它触发时再次调用 startOneShot 2 秒,然后第三次。使用一个计数器来记录它发射了多少次。
我正在尝试在 TinyOS 中编写一个简单的程序来实现 2 个定时器,一个是周期性定时器,另一个是一次性定时器。周期性定时器必须每 2 秒触发一次,单发定时器应分别在第 5、7 和 9 秒触发。我写了程序,但是oneshot定时器不起作用。请帮我找出问题所在。
#include "Timer.h"
module MyTimerC @safe()
{
uses interface Timer<TMilli> as Timer0;
uses interface Timer<TMilli> as Timer1;
uses interface Leds;
uses interface Boot;
}
implementation
{
event void Boot.booted()
{
call Timer0.startOneShot( 5120 );
call Timer0.startOneShot( 7168 );
call Timer0.startOneShot( 9216 );
call Timer1.startPeriodic( 2048 );
}
task void TogLed0()
{
dbg("MyTimerC", "LED 0 Toggle \n");
call Leds.led0Toggle();
}
task void TogLed1()
{
dbg("MyTimerC", "LED 1 Toggle \n");
call Leds.led1Toggle();
}
event void Timer0.fired()
{
dbg("MyTimerC", "One shot Timer 0 fired @ %s \n", sim_time_string());
call Leds.led2Toggle();
}
event void Timer1.fired()
{
dbg("MyTimerC", "Periodic Timer 1 fired @ %s.\n", sim_time_string());
post TogLed0();
post TogLed1();
}
}
您只能在定时器上调用 startOneShot 一次 - 您只能在同一定时器 触发后再次调用 startOneShot。我建议为你的一次拍摄使用 3 个单独的计时器,或者在启动时调用 startOneShot(5 秒),然后在它触发时再次调用 startOneShot 2 秒,然后第三次。使用一个计数器来记录它发射了多少次。