FAQ・トラブルシューティング#

本書の内容について#

優先度スケジューリングがないのに「リアルタイムOS」なのはなぜですか#

第4章で作るスケジューラは、SysTick による 10 ms タイムスライスの ラウンドロビンで、タスクの優先度は見ていません。優先度ベースの スケジューリングは第4章の課題4-4(発展)として扱っています。

そのため本書は、ハードリアルタイムの保証に必要な要素——優先度に もとづくデッドラインの議論、スケジューラビリティ解析、静的な最悪 実行時間 (WCET) 解析——を扱いません。そこが目的の場合は、専門書や 実務で使われる RTOS(FreeRTOS、Zephyr、TOPPERS など)の資料に あたってください。

本書が扱うのは、その手前にある次の 2 つです。

  • 締切が実際のハードウェアでどう立ち現れるか。 第13章では 8 個の シリアルバスサーボに対し、毎周期「読み出して返事を待ち、書き込む」 ことで 20 ms の締切が物理的に発生します。撃ちっぱなしの PWM では、 そもそも守るべき締切が生まれません。

  • その締切を守るために OS 側に何が要るか。 プリエンプティブな 切り替え(第4章)、暴走タスクの隔離(第6章)、ロックと優先度逆転 (応用編 第1章 1.7)、実測にもとづく実行時間の見積もりとマージンの 取り方(第13章の補遺)。

優先度逆転と優先度継承そのものは、応用編 第1章 1.7 で扱っています。 課題4-4 を実装したうえで 1.7 の演習に進むと、優先度つきスケジューラの 上で優先度逆転を再現し、優先度継承で解消するところまで手を動かせます。

書き込みできない#

  • ポートが見えない: ケーブルがデータ通信対応か確認(充電専用 ケーブルでは認識されません)

  • Linux で Permission denied: sudo usermod -aG dialout $USER のあと再ログイン

  • 書き込みが途中で失敗する: リセットボタンを 2 回素早く押して ブートローダモードにしてから再試行

シリアルモニタに何も出ない#

  • ボーレートが 115200 になっているか確認

  • 書き込み直後は数秒待つ(USB の再列挙に時間がかかることがあります)

その他#

再現手順つきで GitHub Issues へ報告してください。