4

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

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

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

4

2 回答 2

6

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

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

一般来说,电路板设计者选择系统时钟频率是有原因的。

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

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

在 ISR 服务时间之外没有与辅助时钟相关的系统开销。

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

请注意,如果您的硬件平台上有超过 2 个计时器,您可以编写自己的例程来基本上完成与 aux Clock API 所做的相同的事情。

于 2013-08-20T14:00:35.503 回答
0

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

示例:编程中断:使用 VxWorks 的 MVME 162 示例

于 2013-08-20T09:54:58.980 回答