配列変数を使って、入力サイズが1バイトから4バイトまでの任意のバイト数のデー
タを入力できるdio_read
メソッドと、それを呼び出す
dio_app
アプリケーションを作成する。
そのためには現在のdio_drv.c
とdio_app.c
を変更して、1バイト
から4バイトまでの任意のバイト数のデータを入力できるようにすればよい。
現在のソースファイルを変更する前に、実験の失敗に備えて、これを保存しておく。
dio_read
メソッドの
を
に変更する。
この変更に対応して、4バイト以上の読み出し要求があったばあいに
4バイトに切り詰めるように、次の処理を変更すること。
前の説明のようにI/Oポートアドレスが16進数のcc00番地であれば、そこか
ら1バイトを読み出すばあいは、
とすればよかった。
その次の1バイトを読み出すならば、
とすればよい。
さらに、その次の1バイトを読み出すならば、
とすればよい。
for
文を使って、指定したcount数のバイトを読みだすなら、次のように
すればよい。
dio_read
関数が4バイトまでのデータを読み込むためには次の処理を変更
する必要がある。上記のinb
関数の説明を参考にして、指定したcount数
のバイトを読み込める形式にすること。
? の部分は自分で考えること。
変更が終わったらmake
でコンパイルする。
つぎのように、前のドライバを削除し、新しいドライバを格納する。
# rmmod dio_drv # insmod dio_drv.ko
次に、dio_app.c
も4バイトまで入力できるアプリケーションにするために
を
に変更
する。
この変更に対応して、次のreadシステムコールも4バイト入力できる形式
に変更する。
? の部分は自分で考えること。
for
文を使って、次の形式で4回まで繰り返し表示できるようにする。
print
文は簡単にするため16進数表示だけにする。
この処理におけるprint
文の?の部分は自分で考えて、次のような形式で4バイ
トを表示できるようにすること。
read data(1) = xx h read data(2) = xx h read data(3) = xx h read data(4) = xx h |
変更が終わったらmake
でコンパイルする。
コンパイルでエラーが出なければ、実行可能イメージとしてのdio_app
ア
プリケーションが生成されているので、念のためls
コマンドで確かめる
こと。
チェッカーの入力スイッチ1から32までを使って、4バイトの任意のディジタルデー
タを設定する。
例えば、1列目のバイトはスイッチ番号の2,4,5(0001,1010)をONにし、 2列目のバイトはスイッチ番号の9,10,12,14(0010,1011)をONにし、 3列目のバイトはスイッチ番号の19,20,21,22(0011,1100)をONにし、 3列目のバイトはスイッチ番号の25,27,28,31(0100,1101)をONにして、
# ./dio_app
を実行すれば、
[dio_open] ga Yobareta. [dio_read] ga Yobareta. read data(1) = 1A h read data(2) = 2B h read data(3) = 3C h read data(4) = 4D h [dio_release] ga Yobareta. |