Как запустить таймер включения несколько раз в TinyOs? - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь написать простую программу на TinyOS для реализации 2-х таймеров, один периодический таймер, а другой таймер однократного.Периодический таймер должен срабатывать каждые 2 секунды, а таймер однократного срабатывания должен срабатывать на 5-й, 7-й и 9-й секундах соответственно.Я написал программу, но таймер однократной съемки не работает.Пожалуйста, помогите мне найти проблему.

#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 голосов
/ 23 сентября 2018

Вы должны вызывать startOneShot только один раз по таймеру - вы должны вызывать startOneShot только один раз с тем же таймером после того, как он сработал.Я бы предложил либо использовать 3 отдельных таймера для ваших снимков, либо вызвать startOneShot (5 секунд) при загрузке, затем при запуске снова вызвать startOneShot на 2 секунды, а затем в третий раз.Используйте счетчик, чтобы отслеживать, сколько раз он выстрелил.

...