vxworks的时钟管理

本文介绍了VxWorks操作系统中关于定时器和看门狗定时器的管理。定时器使用struct timespec和struct itimerspec结构来定义时间和间隔,通过timer_create、timer_settime等函数进行创建、设置和删除。看门狗定时器则允许任务在延迟后执行特定程序,wdCreate用于创建,wdDelete用于删除,wdStart用于启动定时器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值