我对tinyos和相关API完全陌生。我已经定义了一个计时器并按如下所示启动它。
uses interface Timer<TMilli> as DelayTimer;
call DelayTimer.startOneShot(TIMER_PERIOD_MILLI);
还定义了一个计时器到期处理程序,如下所示,
event void DelayTimer.fired() {
//...
}
我的要求是将一个参数传递给这个计时器,以便在计时器处理函数中使用它。
有人能说明如何做到这一点吗?
答案 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
}