0

我对 tinyos 和相关 API 完全陌生。我已经定义了一个计时器并按如下方式启动它。

uses interface Timer<TMilli> as DelayTimer;
call DelayTimer.startOneShot(TIMER_PERIOD_MILLI);

还定义了一个计时器到期处理程序,如下所示,

event void DelayTimer.fired() {
   //...
}

我的要求是将参数传递给此计时器,以便在计时器处理程序函数中使用相同的参数。

有人可以提供如何完成吗?

4

1 回答 1

1

无法直接将任何参数传递给 Timer。您需要在调用之前将其保存在组件的状态中startOneShot

implementation {
    uint16_t parameter;

    // ...

    void function(uint16_t value) {
        parameter = value;
        call DelayTimer.startOneShot(TIMER_PERIOD_MILLI);
    }

    event void DelayTimer.fired() {
        // use variable parameter
    }
}

但是,如果您的情况很简单,并且您只需要区分调用 Timer 的各种“原因”,则可以将不同的 Timer 实例用于不同的目的:

uses interface Timer<TMilli> as LogTimer;
uses interface Timer<TMilli> as SendTimer;

然后,在一个实现中:

void someFunction() {
    call LogTimer.startPeriodic(5000);
    // ...
}

void anotherFunction() {
    call SendTimer.startOneShot(SEND_DELAY);
    // ...
}

event void LogTimer.fired() {
    // perform logging
}

event void SendTimer.fired() {
    // send a packet
}
于 2014-06-05T16:43:10.910 回答