c - 处理辅助时钟中断

标签 c vxworks

我有来自嵌入式应用程序的大型代码库的以下代码。我正在尝试理解代码并有以下问题。

old_rate = sysAuxClkRateGet();
sysAuxClkRateSet(50);

sysAuxClkConnect ((FUNCPTR) scanDispatcher, 0);

/* Enable dispatcher */

sysAuxClkEnable ();

我的问题是

  1. scanDispatcher 是在每个刻度时调用还是在 50 个刻度后调用?

  2. 是sysAuxClkRateSet(50);意味着我们每秒有 50 个刻度?我的理解对吗?

最佳答案

每次调用辅助时钟ISR来处理辅助时钟中断时,辅助时钟ISR都会调用scanDispatcher(参数为0)。

sysAuxClkRateSet(50) 定义辅助时钟中断的频率。由于辅助时钟驱动程序 ISR 除了管理定时器设备和调用 scanDispatcher 例程之外不执行其他操作,因此您可以更改频率。

您可以使用的频率值有两种限制:

  1. 辅助时钟驱动程序(您正在使用的 BSP 的一部分)定义驱动程序能够管理的绝对最小值和最大值
  2. 真正的最大限制是由scanDispatcher引入的系统负载及其执行时间来定义的;请记住,无论如何,scanDispatcher 是在中断时执行的,因此它的执行时间应该总是很短。

最后一个警告:辅助时钟不是 VxWorks 中的强制设备:大多数 BSP 支持辅助时钟设备,但(原则上)您可能会找到不支持它的 BSP。

关于c - 处理辅助时钟中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25404236/

相关文章:

c - 使用指针的内存地址打印字符数组(字符串)C

c++ - 在 VxWorks 中使用 Boost C++ 库时出错

shell - 将VxWorks Shell输出重定向到套接字

symlink - vxworks 支持符号链接(symbolic link)吗?

c - 是否可以在没有单独查找表的情况下为一组小的(<64)键创建最小完美哈希函数?

c - 如何在三角形中排列星号

c - 我应该为 ruby​​ Fixnum -> matlab mwSize 使用 SWIG 类型映射吗?

c++ - C 风格转换到 C++ 风格转换

vxworks - 在vmware中构建多vxworks

c - vxworks设置串口波特率失败