FreeRTOS慢的SysTick

3
我在FreeRTOS中遇到了问题,其中systick()的速率似乎是预期速率的1/2。所有计时器或任务延迟函数需要大约2倍的时间。在使用STM32F100处理器的版本8.2.0和8.2.3中进行了验证。
有另一篇帖子看起来非常相似。这位开发者正在使用MSP430,并声称tick速率为400Hz,而期望的tick速率为1000Hz。
RCC寄存器配置似乎是正确的。如果我创建一个systick正确的非FreeRTOS项目,则其具有与FreeRTOS版本中相同的RCC配置。
有什么建议吗?

请发布您的RCC配置。 - LPs
1
MCO引脚(微控制器时钟输出)是否可用?如果是,您可以配置此引脚以输出不同的内部时钟(例如SYSCLK),并使用示波器在此引脚上测量频率,以检查时钟是否符合预期。如果不是,则可能连接了错误的外部振荡器或时钟配置错误。 - Habi
1
请确保在FreeRTOSConfig.h文件中正确设置configCPU_CLOCK_HZ和configTICK_RATE_HZ。同时,请查看port.c文件中的vPortSetupTimerInterrupt()函数以了解其功能。 - kkrambo
只需检查您是否已正确配置时钟,正如每个人所指出的。 - SamR
1个回答

3
当我阅读到以下内容时:

我创建了一个非常简单的任务,延迟4秒并报告实际经过的滴答数。滴答数是正确的,但实际延迟约为8秒。

阅读此内容时,我的想法是,如果延迟时间在滴答数上是正确的,但时间不同,则这只是CPU时钟以您认为的不同频率运行的情况。也许configCPU_CLOCK_HZ是错误的。然而,接下来你写道:
#undef OS_USE_TRACE_SEMIHOSTING
#define OS_USE_TRACE_ITM

您提到了半主机。您是否正在使用半主机?如果是,请不要使用,因为它会在输出到主机时停止CPU,从而破坏您的计时 - 这可能是您遇到的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接