c++ - 系统时钟和辅助时钟的区别

标签 c++ timer vxworks

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

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

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

最佳答案

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

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

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

提高时钟速度会略微增加系统开销,因为在每个系统时钟节拍期间,操作系统都需要处理各种超时元素、时间片计数器和其他内部内容。

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

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

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

请注意,如果您的硬件平台上有 2 个以上的计时器,您可以编写自己的例程来执行与辅助时钟 API 执行的基本相同的操作。

关于c++ - 系统时钟和辅助时钟的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18331658/

相关文章:

c++ - Qt中scenePos的QPropertyAnimation

c++ - 使用 C++ 模板创建具有自定义组件的类

python - pygame.time.set_timer() 事件重置?

c - 为什么位运算不能正常工作

namespaces - 在VxWorks中多次实例化程序时如何解决命名冲突

c++ - 分配给 std::vector<T>::begin() 的结果是什么?

C++:getline在文件末尾卡住

javascript - 使用javascript制作简单的计时器但出现奇怪的行为

wxwidgets - 基本的 wxWidgets 计时器

c - VxWorks PPC 中 errno 始终返回零