ルモーリン

偽りのディレイタイム

投稿:2013-02-19

IOの時間待ちに使ったところIOが間に合わないケースが出てきました。 vTaskDelayが指定より短い時間で戻ってくるようです。
本家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のソースコードは信じられない、公式サイトも信じられない、信じられるのは己の実力だけ。