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”のみとなります。


    注意点について

     現時点では、タスクが自分自信を休止する為に、タスク休止の関数を使用できません 。
     自分自信を休止する為には、最後にスタートの関数から抜け出る様に記述する必要が 有ります。そうすると、再起動するとスタートの関数の最初から始まります。
     他のタスクから、休止させられた場合は、その前に動いていた最後の所で止まったま まとなります。



    go back!