0

私の質問はこれです - uCLinux 2.6.21 同期で write() をどのように呼び出すことができますか、つまり、送信が終了する前に呼び出しが完了しないのですか? 今、私は次のコードを持っています:

//...
fd = open (PORT, O_RDWR | O_SYNC)
//...

FIO3CLR |= 0x30000000; // RTS = 0 (enable transfer)
write (fd, "A", 1) // pass
FIO3SET |= 0x30000000; // RTS = 1 (disable transfer)

コマンドは、 をFIO3SET |= 0x30000000;呼び出した直後に実行を開始write()しますが、タスクにとっては望ましくありません。ありがとう。

4

2 に答える 2

0

私の推測では、TTY 属性を設定する必要があり、属性を設定すると、Linux カーネルが RTS/CTS 処理を行うようになります。完全な例については、http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/x115.htmlを参照してください。あなたの質問に答える部分はこれだと思います:

newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD; // CRTSCTS is set here
//...
tcsetattr(fd,TCSANOW,&newtio);
于 2013-03-27T07:23:53.303 に答える
0

tcdrain() は、fd によって参照されるオブジェクトに書き込まれたすべての出力が送信されるまで待機します。それは私の問題を解決 しましたシリアルポート操作でのC読み取り呼び出しのブロック

于 2013-03-28T04:19:36.057 に答える