我有来自嵌入式应用程序的大型代码库的以下代码。我正在尝试理解代码并有以下问题。
old_rate = sysAuxClkRateGet();
sysAuxClkRateSet(50);
sysAuxClkConnect ((FUNCPTR) scanDispatcher, 0);
/* Enable dispatcher */
sysAuxClkEnable ();
我的问题是
scanDispatcher 是在每个刻度时调用还是在 50 个刻度后调用?
是sysAuxClkRateSet(50);意味着我们每秒有 50 个刻度?我的理解对吗?
最佳答案
每次调用辅助时钟ISR来处理辅助时钟中断时,辅助时钟ISR都会调用scanDispatcher(参数为0)。
sysAuxClkRateSet(50) 定义辅助时钟中断的频率。由于辅助时钟驱动程序 ISR 除了管理定时器设备和调用 scanDispatcher 例程之外不执行其他操作,因此您可以更改频率。
您可以使用的频率值有两种限制:
- 辅助时钟驱动程序(您正在使用的 BSP 的一部分)定义驱动程序能够管理的绝对最小值和最大值
- 真正的最大限制是由scanDispatcher引入的系统负载及其执行时间来定义的;请记住,无论如何,scanDispatcher 是在中断时执行的,因此它的执行时间应该总是很短。
最后一个警告:辅助时钟不是 VxWorks 中的强制设备:大多数 BSP 支持辅助时钟设备,但(原则上)您可能会找到不支持它的 BSP。
关于c - 处理辅助时钟中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25404236/