あなたの天然記念物
ホーム更新雑談Perl鉄ゲタランドナーコースガイド自転車Linuxリンク経歴連絡先

偽りのディレイタイム (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のソースを追っかけてタイミングを図にしましたので参考にどうぞ。
vTaskDelayのタイミング

今回の鉄ゲタは…

公式が鉄ゲタですよ。 FreeRTOSのソースコードは信じられない、公式サイトも信じられない、信じられるのは己の実力だけ。