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


本文标签: 系统 函数 设置