1.定时器
时间格式:秒和纳秒
struct timespec
{
time_t tv_sec;/*秒,其中time_t 为 typedef long time_t*/
long tv_nsec;/*纳秒*/
}
定时器时间格式
struct itimerspec
{
struct timespec it_interval;/*时间间隔*/
struct timespec it_value;/*首次到期时间*/
}
创建:timer_create();创建一个定时器
设置: timer_settime() 启动/停止定时器
显示: timer_gettime()读取定时器时间规格 timer_getoverrun()读取定时器溢出计数
删除: timer_delete() 删除定时器
/** * 定时器的基本使用 */ #include<stdio.h> #include<sigLib.h> #include<semLib.h> #include<taskLib.h> #include<time.h> #include<unistd.h> #define STACK_SIZE 225 #define CLOCKID 234 /*信号处理函数*/ void sigHander(int sig) { if (sig==SIGALRM) printf("Get alarm signal\n"); } int taskDemo() { /*定时器ID*/ timer_t timerId; /*定时器规格*/ struct itimerspec timer; /*设置定时器的相关值:间隔和到期时间*/ timer.it_interval.tv_sec = 5; timer.it_interval.tv_nsec = 100 * 1000 * 1000; timer.it_value = timer.it_interval; /*创建定时器*/ timer_create(CLOCK_REALTIME,NULL,&timerId); /*启动*/ timer_settime(timerId, 0, &timer, NULL); /*定时器到时后,发出SIGALRM信号,因此指定信号处理函数*/ signal(SIGALRM,sigHander); /*等待信号*/ pause(); }
2.看门狗定时器
任何任务都可以创建看门狗定时器,并在指定延迟之后,在系统时钟ISR的上下文运行一个指定的程序。VxWorks中,看门狗由软件实现,内核在系统时钟上维护一个看门狗队列,每个看门狗定义了一个预定的动作,因此看门狗定时器功能更加强大。
创建:wdCreate(),创建看门狗定时器,返回看门狗ID,内存不足返回NULL
删除: wdDelete(),删除看门狗定时器,从定时器队列中移除,并释放资源
启动:wdStart(), 启动看门狗定时器,将看门狗定时器加入到系统tick队列,延迟到达后,系统中断调用超时程序
/** * 看门狗定时器的基本使用 */ #include<stdio.h> #include<semLib.h> #include<taskLib.h> #include<wdLib.h> #include<unistd.h> #define STACK_SIZE 225 /*定时器ID*/ WDOG_ID wd_id; int count; /*看门狗超时后,调用该函数*/ void printMsg(int i) { printf("Watch Dog:%d\n",i); count++; if(count<3) { /*再启动*/ wdStart(wd_id,240,(FUNCPTR)printMsg,count); } else { /*删除看门狗定时器*/ wdDelete(wd_id); } } int taskDemo(){ count=0; /*创建看门狗定时器*/ wd_id=wdCreate(); /*启动看门狗定时器*/ wdStart(wd_id,60,(FUNCPTR)printMsg,count); }