1

私の学校では、私のプロジェクトはLEDライトを制御する簡単なプログラムを作成することです

私の教授は、outp()はconio.hにあると言いましたが、conio.hは標準的なものではないことを私は知っています。

outp()の例

//assume that port to be used is 0x378
outp(0x378,1); //making the first LED light

前もって感謝します

4

3 に答える 3

3

/dev/port書き込み権限がある限り、Linux のユーザー空間からこれを行うことができます/dev/port(root または書き込み権限を持つユーザー)。シェルで次のように実行できます。

echo -en '\001' | dd of=/dev/port bs=1 count=1 skip=888

(10 進数の 888 は 16 進数の 378 であることに注意してください)。私はかつて、Linux 用の動作するパラレル ポート ドライバーを完全にシェル スクリプトでこのように書きました。(ただし、かなり遅かったです!)

次のように、Linux の C でこれを行うことができます。

f = open("/dev/port", O_WRONLY);
lseek(f, 0x378, SEEK_SET);
write(f, "\01", 1);

明らかに、追加#includeとエラー処理。

于 2011-10-03T15:23:37.190 に答える
2

あなたは2つのことを混同しています。コンパイラは、OS 用のプログラムを作成します。学校のプロジェクトで DOS 用のプログラムを作成しました。outp(0x378,1);基本的にDOS機能です。パラレルポートに書き込みます。他のオペレーティング システムでは、他のコマンドを使用します。

GCC は、複数のオペレーティング システムを対象とするコンパイラです。各 OS で、GCC はそのシステムの特定のヘッダー ファイルを使用できます。

通常はもう少し複雑になります。DOS は一度に 1 つのプログラムを実行するため、 port の競合はありません0x378。他のほぼすべての OS は、はるかに多くのプログラムを同時に実行するため、最初に誰がそれを取得するかを把握する必要があります。

于 2011-10-03T11:53:44.580 に答える
2

パラレル ポートへの書き込み方法は、コンパイラではなく OS に依存します。/dev/lp1Linux では、 PC ハードウェアのポート 0x0378 にあるパラレル ポート用の適切なデバイス ファイルを開きます。

次に、MS docs for を_outp解釈すると、値が 1 の 1 バイトをパラレル ポートに書き込みたいと思われます。それだけです

FILE *fp = fopen("/dev/lp1", "wb");
// check for errors, including permission denied
putc(1, fp);
于 2011-10-03T11:55:40.507 に答える