我想我要么 a) 误解了 FreeRTOS taskGetTickCount() 函数的工作方式,要么 b) 我们的端口不太正确。
我有一些调试,我正在显示 xTaskGetCount() 的输出。每当我完成 vTaskDelayUntil() 时,它似乎都已更新并且是最新的。但是如果我做一个旋转等待,等待它增加,它永远不会。我认为中断会触发并增加该值。但我目前只运行一项任务,所以也许它足够聪明,永远不会检查重新安排并且 tickCount 永远不会更新?任何可以让我直接了解 FreeRTOS 滴答计数如何工作的人,我都会非常感激。
编辑:示例片段:
void someTask(void * _)
{
portTickType now = xTaskGetTickCount();
for( ; xTaskGetTickCount() - now < 25; )
{
debug("%u", xTaskGetTickCount();
}
}
这将永远旋转,远远超过 tick = 1 ms 时暗示的 25 ms。输出将一遍又一遍地不断列出相同的值。如果我在循环底部添加一个 vTaskDelay() ,它会健康地增加,并最终退出。