組込み+RTOS > C > 70秒待ち > 46秒で処理が終わる > 実装ミス


動作環境
とある組込みシステム + RTOS

とある組込みシステムで70秒のカウントダウンを行っていた。
カウントダウンが終わるのは46秒。

何故か。

理由

  • 1000ミリ秒待機処理に加えて300ミリ秒のシリアル受信待ち
    • 1.3倍
  • カウントダウンする関数を用意
  • その関数を2回呼んでいた
    • 1/2倍

70秒 / 2 * 1.3 = 45.5秒

備考

関数内でカウントダウンやカウントアップする処理をしている場合、その処理がN秒に1回などの指定通りにコールされるように実装しないといけない。

別の案としては、クロックを使った経過時間の判断にする。