私は、a) FreeRTOS の taskGetTickCount() 関数が機能する方法を誤解しているか、b) 私たちの移植で何かが正しくないかのいずれかだと思います。
xTaskGetCount() の出力を表示しているデバッグがあります。vTaskDelayUntil() を実行するたびに、更新されて最新のように見えます。しかし、スピン待機を行って、それが増加するのを待っていると、決して増加しません。割り込みが発生したと思い、その値をインクリメントしました。しかし、私は現時点で 1 つのタスクしか実行していないので、再スケジュールをチェックせず、tickCount が更新されないのは賢明でしょうか? FreeRTOS のティック カウントがどのように機能するかを教えてくれる人なら誰でも、私は大いに感謝します。
編集:サンプルフラグメント:
void someTask(void * _)
{
portTickType now = xTaskGetTickCount();
for( ; xTaskGetTickCount() - now < 25; )
{
debug("%u", xTaskGetTickCount();
}
}
これは、ティック = 1 ミリ秒のときに暗示された 25 ミリ秒をはるかに超えて、永遠にスピンします。出力には、同じ値が何度も何度もリストされます。ただし、ループの最後に vTaskDelay() を追加すると、正常に増加し、最終的にドロップアウトします。