【问题标题】:Does FreeRTOS guarantee the first timer tick to be exactly 1ms?FreeRTOS 是否保证第一个计时器滴答时间正好是 1 毫秒?
【发布时间】:2020-01-06 02:32:53
【问题描述】:

我正在实施软件看门狗,以确保 1kHz 任务在其分配的期限内(即 1 毫秒)执行。但我想知道在 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 系列)。

【问题讨论】:

    标签: arm freertos cortex-m


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-16
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      相关资源
      最近更新 更多