参数传递给TinyOS Timer。

时间:2013-11-18 00:47:08

标签: tinyos

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

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

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

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

我的要求是将一个参数传递给这个计时器,以便在计时器处理函数中使用它。

有人能说明如何做到这一点吗?

1 个答案:

答案 0 :(得分: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
}