沼津高専 電子制御工学科 | ||||||
| ||||||
改訂記録 | ||||||
---|---|---|---|---|---|---|
版数 | 作成日 | 作成者 | 承認 | 改訂内容 | ||
A01 | 2001.12.13 | 松浦、阿部 | 瀬川 | 初版 |
Linuxにパッチとして組み込むプログラムであり、インターネットを通じて入手できるフリーソフトウェアである。 Linuxが動作してるコンピュータにインストールすることで簡単にリアルタイム処理を行えるオペレーティングシステムを 作ることができる。Linuxの機能拡張版なので、Linuxの持つソフトウェアをそのまま利用することができる。
RT-LinuxはリアルタイムOSとしてリアルタイムスケジューラ、タスク優先度の管理といった機能を持つ。
RT-Linuxを立ち上げた後、以下のコマンドが使用できる。このコマンドはスーパーユーザでのみ有効である。
Linuxでリアルタイム処理を実現するために、RT-Linux V2.3では、次のカーネルモジュールが供給されている。
RT-Linux V2.x用に開発されたリアルタイムプログラムを実行するためにには、あらかじめこれらのカーネルモジュールをカーネルに組み込んでおく必要がある。
カーネルモジュールの削除方法
モジュール…Linuxのカーネル(核)に機能を追加するためのプログラム。なお、モジュールはC言語等で記述する。
カーネル 内容 rtl_sched POSIXインターフェースとRT-Linux V1.xで供給されている
APIの双方をサポートする優先順位スケジューラ。 rtl_time プロセッサのクロックを制御し、ハンドラのクロックに接続するインターフェースを
提供する。 rtl_posixio デバイスドライバに対して、POSIXスタイルのopen/read/writeインターフェースを
サポートする。 rtl_fifo リアルタイムタスクとLinuxプロセス間の、データのread/writeインターフェースを提供する。
カーネルモジュールの組み込み方法は、シェルスクリプトを使う。(ひとつひとつ組み込むこともできる)
MIRS0105では、超音波センサ、PWM、ロータリーエンコーダの制御を行うのでRTタスクモジュールを使う。これらの制御はリアルタイムに計測しなくてはならないから、カーネル空間のRT-Linuxを使う必要がある。LinuxよりもRT-Linuxの方がスケジューリングを行う優先度が高いため常に行われる割り込み処理、リアルタイム性に優れているからである。
リアルタイム処理をそれほど求められていない、赤外線センサ、タッチセンサ、LCDについては、Linuxカーネルのドライバを使用する。
これらの制御を行うために、FlashDiskにRT-Linux、Linuxカーネルをインストールし、ユーザプログラムを組み込んで使用する。また、ユーザープログラム間との情報交換はFIFOを生成してそれを用いて行われる。
制御構造の図
FIFO番号
役割
FIFO1
超音波センサ番号選択用
FIFO2
超音波による測定距離データ、エラー値格納用
FIFO3
ロータリーエンコーダのカウント値書込用
FIFO4
PWMの速度データ受取用
FIFO5
RE,PWMへのSTART、STOP等の各種指令やタスクの優先度、実行周期の受取用
行動制御プログラムからコマンド(センサ選択番号)がFIFO1に書き込まれてから超音波が送信される。
超音波センサを選択した時の時刻と、割込みがはいった時の時刻のデータから距離に換算し、FIFO2に書き込む。
ただし、一秒たっても割り込みが入らない場合はタスク1(タイムアウトタスク)が起動し、エラー値をFIFO2に書き込んでタイムアウトとする。
赤外線センサタスクの機能は、割り込みが発生したとき、他の割り込みをマスクし、データの保存を行いその割り込み信号をリセットした後、通常動作に戻ることである。
タッチセンサタスクの機能は、タッチセンサが反応する度にこのタスクが起動し、タッチセンサの状態を保存することである。
ロータリーエンコーダタスクの機能は、一定時間ごとにロータリーエンコーダの値をFIFO3に読み込んで、そこからマシンの速度を計算しCPUにデータを送ることである。
PWMタスクの機能は、CPUから受け取ったduty比のデータをPWM信号に変換してモーターへ送ることである。
LCDドライバは、各センサ・ロータリーエンコーダ・PWMの情報やシステムの状態を表示することを目的とする。