沼津高専 電子制御工学科 | ||||||
| ||||||
改訂記録 | ||||||
---|---|---|---|---|---|---|
版数 | 作成日 | 作成者 | 承認 | 改訂内容 | ||
A01 | 2001.12.16 | 伊藤・八木 | 勝又 | 初版 |
CPU ボード | i486 133MHz, Memory 16MB, SVGA chip, 10M Ethernet, ISA bus |
記憶装置 | Flush memory 64MB (IDE ディスク互換) |
FPGA ボード | 標準ゲート数 10,000, RAMビット数:6,144, ユーザI/O数:134, ISA bus |
オペレーティングシステム
RT-Linux Ver 2.3 (Linux kernel 2.2.14)
ここでは、オペレーティングシステムのRT-Linuxについての調査を報告する。
Linuxでリアルタイム処理を実現するために、RT-Linux V2.3では、次のカーネルモジュールが供給されている。
RT-Linux V2.x用に開発されたリアルタイムプログラムを実行するためには、あらかじめこれらのカーネルモジュールをカーネルに組み込んでおく必要がある。
FIFOの役割
各タスク・ドライバの機能
ソフトウェアは当然ハードウェアの制限に準じたものを作る。
RT-Linuxとは
RT-Linuxは、Linuxの機能にリアルタイム処理をする機能を付け加えたものである。
RT-カーネルは、RT-タスクとLinuxカーネルを対象にしたスケジューリングを行う。Linuxカーネル本体は最も低い優先度でスケジューリングされるもので、RT-タスクの優先度のほうがLinuxカーネルよりも高い。
MIRSでは、通常の状態では最も優先度の低いユーザプログラム(行動制御プログラム)を実行し、その中で決められた周期でRT-タスクを実行していく。これがリアルタイム処理である。
RT-タスク・ユーザプログラム間の情報交換は、FIFO(First In First Out)を生成してそれを用いて行われる。
図1 全体の構成図
RT-Linuxの処理の流れ
RT-Linuxの処理は以下のような流れに基づいて行われる。
※赤で囲まれた部分がRTLinuxによって拡張される部分
※緑で囲まれた部分がユーザーが作成する(提供される)部分
図2 処理の流れ
RT-Linuxの構造
カーネル 内容 rtl_sched POSIXインターフェースとRT-Linux V1.xで供給されている
APIの双方をサポートする優先順位スケジューラ。 rtl_time プロセッサのクロックを制御し、ハンドラのクロックに接続するインターフェースを
提供する。 rtl_posixio デバイスドライバに対して、POSIXスタイルのopen/read/writeインターフェースを
サポートする。 rtl_fifo リアルタイムタスクとLinuxプロセス間の、データのread/writeインターフェースを提供する。
カーネルモジュールの組み込み方法は、シェルスクリプトを使う。(ひとつひとつ組み込むこともできる)
ソフトウェア構成
全体の構成図は図1の通り。
ソフトウェアは下記のタスク・ドライバから構成される。
これらのタスク・ドライバと行動制御プログラムとのデータ、コマンドのやりとりはFIFOによって行われる。このFIFO一つに対し一つの役割を持たせ必要な数だけ用意する。具体的に下記の表に示す。
FIFO番号
役割
FIFO1
超音波センサ番号選択用
FIFO2
超音波による測定距離データ、エラー値格納用
FIFO3
ロータリーエンコーダのカウント値書込用
FIFO4
PWMへの速度データの受取用
FIFO5
RE,PWMへのSTART、STOP等の各種指令やタスクの優先度、実行周期の受取用
行動制御プログラムからコマンド(センサ選択番号)がFIFO1に書き込まれてから超音波が送信される。
超音波センサを選択した時の時刻と、割込みがはいった時の時刻のデータから距離に換算し、FIFO2に書き込む。
ただし、一秒たっても割り込みが入らない場合はタスク1(タイムアウトタスク)が起動し、エラー値をFIFO2に書き込んでタイムアウトとする。
赤外線センサタスクの機能は、割り込みが発生したとき、他の割り込みをマスクし、データの保存を行いその割り込み信号をリセットした後、通常動作に戻ることである。
タッチセンサタスクの機能は、タッチセンサが反応する度にこのタスクが起動し、タッチセンサの状態を保存することである。
白線センサタスクの機能は、割り込みが発生したとき、他の割り込みをマスクし、データの保存を行いその割り込み信号をリセットした後、通常動作に戻ることである。
ロータリーエンコーダタスクの機能は、一定時間ごとにロータリーエンコーダの値を読み込んで、そこからx,y座標と姿勢角θを計算しCPUにデータを送ることである。
PWMタスクの機能は、CPUから受け取ったduty比のデータをPWM信号に変換してモーターへ送ることである。
LCDドライバは、各センサ・ロータリーエンコーダ・PWMの情報やシステムの状態を表示することを目的とする。
MIRSでRT-Linuxの使用理由
MIRSでは超音波センサ、PWM、ロータリーエンコーダを制御するためにRTタスクモジュールを使っている。これらの制御は、必ず何秒ごとに計測をするという、リアルタイム性が求められている。(カウンタ制御など)
だからCPUのスケジュールがいつ回ってくるかわからないLinux上ではなく、リアルタイムに割り込みが可能なRT-Linuxが必要である。