contiki操作系统常用的定时器有etimer,ctimer,timer等等。etimer是对timer的封装。
timer定时器主要包括一个timer结构体和5个方法。
struct timer {
clock_time_t start; //记录起始时间也就是当前的时间
clock_time_t interval; //记录需要定时多久的时间
};
CCIF void timer_set(struct timer *t, clock_time_t interval); //启动一个定时器,从当前时间开始计时
void timer_reset(struct timer *t); //重置定时器,在原来的基础上再增加intervel这么长的时间
void timer_restart(struct timer *t); //重启定时器,即现在开始定时和以前一样长时间
CCIF int timer_expired(struct timer *t); //检查定时器是否到期,如果到期则返回1
clock_time_t timer_remaining(struct timer *t); //定时还剩多次时间
etimer定时器主要包括一个etimer定时器和11个方法再加一个宏和一个timelist,功能基本上和上面的timer定时器相同,不同的是加了指向etimer定时器的指针和指向绑定的process的指针。
struct etimer {
struct timer timer;
struct etimer *next;
struct process *p;
};
CCIF void etimer_set(struct etimer *et, clock_time_t interval);
CCIF void etimer_reset(struct etimer *et);
void etimer_restart(struct etimer *et);
void etimer_adjust(struct etimer *et, int td);
clock_time_t etimer_expiration_time(struct etimer *et);
clock_time_t etimer_start_time(struct etimer *et);
CCIF int etimer_expired(struct etimer *et);
void etimer_stop(struct etimer *et);
void etimer_request_poll(void);
int etimer_pending(void);
clock_time_t etimer_next_expiration_time(void);
PROCESS_NAME(etimer_process);
最后通过process_start(&etimer_process, NULL);开启定时器进程。
ctimer定时器主要包括一个ctimer结构体和几个方法
struct ctimer {
struct ctimer *next;
struct etimer etimer;
struct process *p;
void (*f)(void *);
void *ptr;
};
void ctimer_reset(struct ctimer *c);
void ctimer_restart(struct ctimer *c);
void ctimer_set(struct ctimer *c, clock_time_t t,void (*f)(void *), void *ptr); //时间到了执行f回调函数
void ctimer_stop(struct ctimer *c);
int ctimer_expired(struct ctimer *c);
void ctimer_init(void);
etimer和ctimer只能用一次