admin 管理员组文章数量: 1086019
2024年3月18日发(作者:编程index是什么意思)
VxWorks中的时间函数和定时器
[摘要]
Timer是实时操作系统的一个重要组成部分。本文结合近阶段的学
习和实验情况,对VxWorks中的时间函数和定时器作了一些探讨。主要介绍了
Timer的机制,相关的函数,并给出了一些具体的例子。
一. Tick
Tick是指每秒中定时器中断的次数。POSIX标准中,tick等于50,即每20ms
定时器中断一次。VxWorks中,tick的缺省设置为60。因为实时操作系统中,任
务的调度和定时器密切相关,tick设置是否合理对整个系统性能的影响是很明显
的。如果tick太小,则系统实时响应能力较差;反之,如果tick太大,则会使得
系统的绝大多数资源浪费在不断的任务管理和调度中。
Tick的次数在userconfig.c文件中设置,其语句为sysClkRateSet (60)。用户
可以更改这个文件,然后重新编译BSP库,也可以在应用程序中更改。
和tick相关的函数主要有:
sysClkRateGet: 得到每秒系统的tick数
sysClkRateSet: 设置系统的tick数
二. 看门狗时钟(Watchdog Timer)
Watchdog Timer 提供了这样一种机制,它使一个C函数和一个时间延迟联系
起来。当该时间延迟到达以后,系统会调用该C函数。Watchdog Timer采用了中
断服务进程(ISR)的机理,当C函数被激活时,它是作为ISR运行的。
和Watchdog Timer相关的函数如下:
wdCreate: 创建Watchdog Timer
wdDelete: 删除Watchdog Timer
wdStart: 启动一个Watchdog Timer
wdCancel: 取消一个正在记数的Watchdog Timer
Watchdog使用过程如下:首先调用wdCreate创建一个Watchdog Timer, 然后
通过wdStart启动该Timer。当tick累计到设定的数字时,和它相联系的C函数
被激活作为ISR运行。下面是一个例子,该例子在延迟3秒后输出一句话:
“Watchdog timer just expired”。
例:
#include "VxWorks.h"
#include "logLib.h"
#include "wdLib.h"
#include "taskLib.h"
/* defines */
#define SECONDS (3)
1
VxWorks中的时间函数和定时器
WDOG_ID myWatchDogId;
myTask (void)
{
/* Set timer to go off in SECONDS - printing a message to stdout */
"Watchdog timer just expiredn") == ERROR)
taskDelay(200);
return (ERROR);
if (wdStart (myWatchDogId, sysClkRateGet() * SECONDS, logMsg,
if ((myWatchDogId = wdCreate()) == NULL)
return (ERROR);
/* Create watchdog */
}
三.POSIX Timer
VxWorks提供了和POSIX1003.1b兼容的时间机制。和POSIX Timer相关的
主要函数如下:
clock_gettime: 取得当前时间
clock_settime: 设置当前时间
timer_create: 创建定时器
timer_connect: 将定时器和某个C 函数相连接
timer_cancel: 取消某个定时器
timer_delete: 删除定时器
timer_settime: 设置Timer的中断周期
下面是POSIX Timer的例子。该例子中,myTimer()用来初始化Timer,
将myHandler()和tmID Timer相关联。每隔1秒,myHandler()被调用一次。
当myHandler()被调用10次后,它取消并删除定时器tmID。
POSIX Timer中,定义了两个重要的结构,它们都在time.h文件中定义。
其定义如下:
struct timespec
{
/* interval = tv_sec*10**9 + tv_nsec */
/* seconds */ time_t tv_sec;
long tv_nsec;
};
struct itimerspec
{
struct timespec it_interval;
struct timespec it_value;
};
/* timer period (reload value) */
/* timer expiration*/
/* nanoseconds (0 - 1,000,000,000) */
2
版权声明:本文标题:VxWorks中Timer机制 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1710771069a572269.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论