如何在TinyOs中多次触发触发计时器?

时间:2018-09-23 13:56:57

标签: tinyos

我试图在TinyOS中编写一个简单的程序来实现2个计时器,一个计时器是周期性计时器,另一个计时器是oneshot计时器。定期计时器必须每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();
  }    


}

1 个答案:

答案 0 :(得分:0)

您只应该在一个计时器上调用一次startOneShot-您应该仅在触发后的同一计时器上再次调用startOneShot 。我建议您为一个镜头使用3个单独的计时器,或者在启动时调用startOneShot(5秒),然后在启动时,再次调用startOneShot 2秒,然后第三次。使用计数器来跟踪发射了多少次。