我正在从嵌入式应用程序的大型代码库中获取以下代码。我正在尝试理解代码并有以下问题。
old_rate = sysAuxClkRateGet();
sysAuxClkRateSet(50);
sysAuxClkConnect ((FUNCPTR) scanDispatcher, 0);
/* Enable dispatcher */
sysAuxClkEnable ();
我的问题是
是否在每个刻度或50个刻度之后调用scanDispatcher?
是sysAuxClkRateSet(50);表示我们每秒有50个滴答声?是我的理解是对的。
最佳答案
每次调用辅助时钟ISR来处理辅助时钟中断时,它都会调用scanDispatcher(带有参数0)。
sysAuxClkRateSet(50)定义辅助时钟中断的频率。由于辅助时钟驱动程序ISR除了管理计时器设备和调用scanDispatcher例程外不会执行其他操作,因此可以更改频率。
可以使用的频率值有两种限制:
辅助时钟驱动程序(您正在使用的BSP的一部分)定义了该驱动程序能够管理的绝对最小值和最大值
实际的最大限制由scanDispatcher引入的系统负载及其执行时间定义;请记住,无论如何,scanDispatcher是在中断时间执行的,因此其执行时间应始终很短。
最后一个警告:辅助时钟不是VxWorks中的必需设备:大多数BSP支持辅助时钟设备,但是(原则上)您会发现不支持该设备的BSP。