无法直接将任何参数传递给 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
}