Mini-c マルチタスク化
目次
スタートアップファイル
mt_sys.hファイル
mt_cont.hファイル
mt_stak.hファイル
サンプルプログラム
ZVR用スタートアップファイル
概略
cでコンパイルを行ったプログラムはは、基本的にスタックのみを使用(静的変数を
除く)して実行される為、リエントランとなっておりマルチタスク化が可能ではないか
と考え、試しに作成しました。
8個までのタスクを500μsで順番に切り替えて実行します、外部的には、各タス
クが並列に実行している状態になります。
かりに4個のタスクを実行しますと、当然の事ながら、8MHzのZ80を使用して
も、1個のタスクは単純計算で全体の1/4となり、2MHz(実際には切り替え時間
が有るためもう少し遅くなる)のZ80を使用していることになります。
各タスクはすべて平等で優先順位は付けて有りません。(付けるのが難しかった!)
機能
タスク間の通信をハンドシェイクで行う関数、タスクを休止させる関数、及び休止中
のタスクを再起動を行う関数が有ります。
それと、タスクが切り替わった事を知るためのタスクカウンターが有ります。各タス
クが連続してこの値を読みだし、この値が変わったことにより、タスクが一周したこと
を認識する事ができます。
CTCについて
CTCの”0”をタスク切り替えに使用します。また、"SIO_DRV.H"をインクルード
すると、CTCの”1”と”2”を使用しますから、自由に使用できるのはCTC
”3”のみとなります。
注意点について
現時点では、タスクが自分自信を休止する為に、タスク休止の関数を使用できません
。
自分自信を休止する為には、最後にスタートの関数から抜け出る様に記述する必要が
有ります。そうすると、再起動するとスタートの関数の最初から始まります。
他のタスクから、休止させられた場合は、その前に動いていた最後の所で止まったま
まとなります。