スパイス  組み込み制御装置の受注製作

Z80にマルチタスク機能を
平成26年 5月 12日

 両者の比較と拡張の検討
 マルチタスクの実装方法としてコルーチンとタスク切り替えの二通りを示しました。目的が複数のタスクを平行して動作させるだけなら、どちらでも同じことが出来ます。ハードウェアの制約からコルーチン方式しか使えないマイコンを別にすると、どちらを使うかは以下のような違いを検討して決めればいいでしょう。

  ・(個々のタスク部分での)プログラムの書きやすさはタスク切り替え方式が勝ります。
 通常の記述と変わるところが無いのは強みになります。コルーチン方式では、どうしてもローカル変数の記述・管理が面倒になります。基本的にはコルーチンを含む関数内のローカル変数は一律に全てをstatic宣言するのが安全です。

  ・プログラム規模が大きくなるとタスク切り替え方式の方がタスク切り替えに要する時間が少なくて済みます。
 コルーチンでは関数一つあたりswitch文一つの処理時間が必要です。実際の実装では、複数のコルーチン関数をイモズル式にネストするので、そのネスト段数倍の処理時間が必要になります。対してタスク切り替え方式のタスク切り替え時間は基本的に一定です。

  ・プログラムの単純さはコルーチン方式が勝ります。


 z80程度のCPUではメモリアドレス空間も広くはないので、機能的にこれでも十分と考えています。が、仮に機能的な拡張を行うと仮定すると、次に欲しいのは
  ・タスク優先度の実装
  ・タスク間の同期機能
になります。やろうと思えばそれほど複雑ではない気がします。

 しかし、これを進めていくとRTOSをゼロから自力で書くことにどの程の意味があるのか?という難問に出くわします。
今ならFreeRTOSのように完全に無料で利用できるRTOSもあります。複数のCPUに対して同じIF関数で使用でき、既に多くのシステムでの実績もあります。必要ならソースコードからその動作を追跡することも可能です。中身を理解する能力がないためにブラックボックスとして利用するのは危険ですが、全てを自分だけで組み立てるのは時間ばかりが掛かってしまいます。
 RTOSの基本動作を理解できるスキルは必要です。そのためにはこれまでやってきたような、ごく基本的なマルチタスクの雛形を実装してみることには意味があります。後はどの程度までを予想の範疇として「必要なら動作を追跡できる」として妥協するかになります。
 マルチタスクに関しては、この辺りが適当な気がします。もう少しやってみるとしてもタスクの優先度を実装してみる程度と感じます。
今回は、ここまでとします。

目次 前へ 次へ