沼津高専 電子制御工学科 | ||||||
|
||||||
改訂記録 | ||||||
---|---|---|---|---|---|---|
版数 | 作成日 | 作成者 | 承認 | 改訂内容 | ||
A01 | 2000.10.13 | 山本 | 大庭 |
初版 | ||
A02 | 2000.10.19 | 山本 | 大庭 |
システム構成図の誤り訂正 | ||
A03 | 2000.12.20 | 山本 | 山本 |
タスクの一部動作変更・換算式の誤り訂正 |
1.はじめに
本ドキュメントは超音波センサを制御するリアルタイムタスクモジュールの取扱説明書である。
2.システム内の位置
MIRSシステム内で、超音波センサ・リアルタイムタスクモジュールは下図のように位置付けられており、
FIFO1、FIFO2を用いて上位プログラムとコマンド、データのやり取りを行い、超音波センサを制御する。
関数名 | 型 | 引数 | 動作概要 |
init_module | int型 | void | FIFO1、FIFO2の生成 FIFO1とコマンドハンドラのアタッチ 割込みハンドラのIRQ設定(IRQ=3) |
cleanup_module | void型 | void | FIFO1、FIFO2の削除 タイムアウト監視タスクの削除 割込みIRQ解放 |
コマンドハンドラ (command_handler) | int型 | int cmd | タイムアイト監視タスクの生成 タイムアウト監視タスクを周期タスクに設定 FIFO1に書き込まれたコマンドを、超音波送信関数に引数として渡す |
割込みハンドラ (intr_handler) | unsigned int型 | unsigned int irq, struct pt_regs *regs | タイムアウト監視タスクの削除 時刻データの記憶 時刻データから距離データ(mm)への変換 距離データをFIFO2に書き込む |
タイムアウト監視タスク (timeout) | void型 | void *t | FIFO1、FIFO2にそれぞれエラー値を書き込む タイムアウト監視タスクの削除 |
超音波送信関数 (transmit) | unsigned int型 | int i | 引数で与えられた番号のセンサの超音波送信アドレスにコマンドを書き込む Linuxカーネルの割込み許可 時刻データの記憶 |
if ((fd0 = open("/dev/rtf2", O_RDONLY)) < 0) { fprintf(stderr, "Error opening /dev/rtf2\n"); exit(1); } if ((ctl = open("/dev/rtf1", O_WRONLY)) < 0) { fprintf(stderr, "Error opening /dev/rtf1\n"); exit(1); }
num = 1; if (write(ctl, &num, sizeof(num)) < 0){ fprintf(stderr, "uss_app: now sending commands to uss%d.\n", num); exit(1); }numはコマンドの変数。この場合、”1”というコマンドがFIFO1に書き込まれる。
retval = select(FD_SETSIZE, &rfds, NULL, NULL, &tv);
if (retval > 0) { if (FD_ISSET(fd0, &rfds)) { n = read(fd0, buf, BUFSIZE - 1); buf[n] = 0; } }
関連文書 |
---|