在 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/