FreeRTOS 是否保证第一个计时器滴答正好是 1 毫秒?

Does FreeRTOS guarantee the first timer tick to be exactly 1ms?

我正在实施软件看门狗以确保 1kHz 任务在其分配的截止日期(即 1ms)内执行。但我想知道在 1kHz 开始和刻度 1 之间是否恰好有 1ms

据我了解,这是 FreeRTOS 启动时发生的情况

vPortSetupTimerInterrupt(); // Tick 0 starts
...
prvPortStartFirstTick(); // Context switch

// After the context switch, the 1kHz task starts

在 tick 0 和 tick 1 之间,1kHz 任务没有得到完整的 1ms 来完成有用的工作,因为调用 vPortSetupTimerInterrupt()prvPortStartFirstTick() 花费了一些时间。这个对吗?如果是这样,这是否值得关注?还是额外的延迟时间短到可以忽略不计?

我正在 ARM Cortex M4(STM32F302 系列)上开发。

你是正确的,从 vPortSetupTimerInterrupt() 执行到 prvPortStartFirstTick()(不确定那个函数是什么,不是 FreeRTOS 提供的)确实需要一些时间 - 执行任何指令也是如此。这是否是一个问题取决于您的应用程序 - 但如果它是一个问题那么您可能不会每次都得到第一个滴答声的精确 1ms。考虑反过来做——比如第一个任务在计时器开始之前开始——那么第一个任务必须是开始时间的任务——所以你又要花一些时间在任务上做其他事情比你想要的任务要做什么。