偽りのディレイタイム
2013-02-19
vTaskDelayの待ち時間
IOの時間待ちに使ったところIOが間に合わないケースが出てきました。 vTaskDelayが指定より短い時間で戻ってくるようです。FreeRTOS公式サイトの説明
本家FreeRTOSのvTaskDelayをご覧ください。This page describes the RTOS vTaskDelay() FreeRTOS API function which is part of the RTOS task control API. FreeRTOS is a professional grade, small footprint, open source RTOS for microcontrollers.
この中に「Delay a task for a given number of ticks.」とありますので、指定したパラメタ分のTickTimeを休むハズです。
実際に計測してみた
最短のケースで指定したパラメタより1小さいTickTimeしか休みません。 実機で計測してみた際はTickTime=1ms、CPUクロック=120MHzの条件で、vTaskDelay(1)は0.23ms、同(2)で1.23msとなりました。 例えば0.5ms以上のウエイトが必要な処理でvTaskDelay(1)とやってしまうと、実際のウエイト時間が最短0.23msになります。 FreeRTOSのソースを追っかけてタイミングを図にしましたので参考にどうぞ。