next up previous
次へ: 要素数4の配列を使う 上へ: ドライバとアプリケーションの機能拡張 戻る: ドライバとアプリケーションの機能拡張

要素数1の配列を使う

最初は、1バイトのディジタル値の入力に使用している単純変数をそのまま配列 変数に変更することにする。配列変数にしておけば、後で要素数を変更すること によって1バイト以上のデータを入力することが可能になるからである。

配列変数を使って1バイトのデータを入力するdio_read関数と dio_tstプログラムを作成する。

現在のプログラムを変更する前に、実験の失敗に備えて、これを保存しておく。


\begin{boxedminipage}{5cm}
\begin{verbatim}...

dio_read関数が宣言している単純変数の \fbox{\\ unsigned char bdata;}を 配列変数の \fbox{\tt unsigned char bdata[1];}に変更する。

この変更に対応して、バイトデータを読み込む処理の


\begin{boxedminipage}{8cm}
\begin{verbatim}bdata = inb(pdio_res->io_address[0]);\end{verbatim}
\end{boxedminipage}

を配列変数にふさわしい形式に変更すること。

また、カーネル空間のデータをユーザ空間へコピーする処理の


\begin{boxedminipage}{8cm}
\begin{verbatim}if (copy_to_user(buff, &bdata, count))\end{verbatim}
\end{boxedminipage}

も配列変数にふさわしい形式に変更すること。

変更が終わったらmakeでコンパイルする。
つぎのように、前のドライバを削除し、新しいドライバを格納する。

     # rmmod dio_drv
     # insmod dio_drv.o

次に、アプリケーション(テストプログラムdio_tst.c)も変更する。

dio_tst.cが宣言している単純変数の \fbox{\tt unsigned char buff}を 配列変数の \fbox{\tt unsigned char buff[1]}に変更する。

この変更に対応して、readシステムコールの


\begin{boxedminipage}{7cm}
\begin{verbatim}r_count = read(fd, &buff, 1);\end{verbatim}
\end{boxedminipage}

を配列変数にふさわしい形式に変更すること。

また、データを画面表示する処理の

\begin{boxedminipage}{8cm}
\begin{verbatim}printf(''read data = %X h\n'', buff);
printf(''read data = %d d\n'', buff);
\end{verbatim}
\end{boxedminipage}

も配列変数にふさわしい形式に変更すること。

変更が終わったらmakeでコンパイルする。

コンパイルでエラーが出なければ、実行可能イメージとしてのdio_tstア プリケーションが生成されているので、念のためlsコマンドで確かめる こと。

CHK-2101(スイッチ & LEDテストボード)の入力スイッチ1から8までを使って、任 意のディジタルデータを設定する。

例えば、スイッチ1とスイッチ8までを全てONにして、次のように

     # ./dio_tst

を実行すれば、

     [dio_open] ga Yobareta.
     [dio_read] ga Yobareta.
     read data = FF h
     read data = 255 d
     [dio_release] ga Yobareta.

と表示されるはずである。



MANOME Yoichi 平成18年12月26日