系统时钟和辅助时钟之间的差异

时间:2013-08-20 09:33:29

标签: c++ timer vxworks

在Vxworks中,我们有各种时钟,如系统时钟和辅助时钟,并具有各种API,如下所示

  • sysClkConnect() - 将例程连接到系统时钟中断
  • sysClkDisable() - 关闭系统时钟中断
  • sysClkEnable() - 打开系统时钟中断
  • sysClkRateGet() - 获取系统时钟速率
  • sysClkRateSet() - 设置系统时钟速率
  • sysAuxClkConnect() - 将例程连接到辅助时钟中断
  • sysAuxClkDisable() - 关闭辅助时钟中断
  • sysAuxClkEnable() - 打开辅助时钟中断
  • sysAuxClkRateGet() - 获取辅助时钟速率
  • sysAuxClkRateSet() - 设置辅助时钟速率

我的问题是系统时钟和辅助时钟有什么区别。程序员应该在什么情况下使用什么?

2 个答案:

答案 0 :(得分:5)

系统时钟构成了VxWorks如何跟踪时间和超时的基础。

支持超时(信号量,消息队列,事件)以及taskDelay调用的大多数OS对象都以时钟周期为单位,基于系统时钟。

一般来说,系统时钟速率由电路板设计人员选择是有原因的。

提高时钟速度会略微增加系统开销,因为在每个系统时钟滴答期间,操作系统需要为各种超时元素,时间片计数器和其他内部资源提供服务。

如果您需要以高速(2000 - 8000 Hz)执行任务,则可以使用辅助时钟。 auxClock API是中断服务程序的简化接口。每当时钟到期时,将从辅助时钟ISR调用sysAuxClockConnect指定的例程。

在ISR服务时间内,辅助时钟没有系统开销。

当然,您需要第二个硬件时钟才能使用auxClock。 此外,像spy这样的一些vxWorks组件也使用了auxClock。如果您有这样的组件,则可能无法使用它,因为存在冲突。

请注意,如果您的硬件平台上有两个以上的定时器,您可以编写自己的例程,基本上执行与aux Clock API相同的操作。

答案 1 :(得分:0)

辅助时钟(当由硬件支持时)可以例如用于高速轮询。它的时钟速率可以由sysAuxClkRateSet()设置,以偏离系统时钟中断周期。

示例:Programming Interrupts: Example for MVME 162 Using VxWorks