問題タブ [termios]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2502 参照

c++ - ラズベリーパイのuartボーレートが9600にロックされる

USBからrs232へのコンバーターでraspberry piを使用してきましたが、今ではRaspberry PiのUARTピンを使用する必要がありますが、そのようなばかげた問題があります。

私は C で termios.h ライブラリ ( http://en.wikibooks.org/wiki/Serial_Programming/termios ) を使用しており、コンバーターで非常にうまく機能しますが、ボーレートを次のように設定しているときに UART ピンを使用する場合

ボー レートは 9600 で動作します。termios ライブラリに関連する別の設定はありますか? そうでない場合、ボーレートを変更するにはどうすればよいですか?

また、ボーレート 4800 で試してみましたが、UART を使用する場合でも 9600 で動作しますが、USB から rs232 へのコンバーターでは問題はありません。

図書館を利用しています

https://github.com/irukeru/TermiosSerialCom

私が改造したもので、他のデバイスでは問題ありません。

0 投票する
1 に答える
52489 参照

linux - Linux ブロッキングと非ブロッキング シリアル読み取り

Linuxでシリアルから読み取るためのこのコードがありますが、シリアルポートの読み取りにおけるブロックと非ブロックの違いは何ですか?どの状況でどちらが優れているのですか?

0 投票する
1 に答える
428 参照

c - termios を使用した C のシリアル I/O: 信頼性の低い出力の大文字化

改行で終了する ASCII 文字列をシリアル デバイスとの間で送受信する非常に小さな C プログラムがあります。で、USB アダプターを使用してコンピューターに接続されています/dev/ttyUSB0

ほとんどの場合、検索するだけのコマンドを送信しますが、場合によってはすべての小文字を大文字に変換します。すべての特殊文字をそのままにします。

送信する文字列は/home\n. プログラムを実行する (再コンパイルせずに実行するだけで) 約 5 回に 1 回./a.out、デバイスが理解する送信メッセージは/HOME\n.

ここに私のソースコードがあります:

そして zserial.c:

私は何を間違っていますか?シリアルポートの出力を変更する termios フラグはありますか?

0 投票する
1 に答える
354 参照

c - POSIX C シリアル ポート ライト カット バッファ

3i は、シリアル ポートを介して 16 進数データを読み書きするための小さな C プログラムです。読み取りでは問題はありませんが、16 進データを次のように書き込もうとすると、次のようになります。

書き込み機能がシリアルポート経由で 5 バイトしか送信していないことがわかります...だから、何らかの理由で "0x00" 文字で 16 進データをカットしたと思います。私のシリアルポート設定の下:

書き込みデータの関数は次のとおりです。

以下のように関数 write_data を呼び出します。

これは、次のような他のバイナリ データに対しては正常に機能します。

この場合の書き込み関数は、シリアル ポートにすべての正しいバイトを書き込みます。cmdActuatorOnだけではないので、0x00 が問題だと思います。

エラーはどこにありますか? シリアルポートの設定が間違っていますか? Raw モードで使用するように設定しましたが、正しくありませんか?

どうもありがとう

0 投票する
1 に答える
2332 参照

c - OS X でシリアル ポートを開くと、O_NONBLOCK フラグがないと永久にハングする

シリアル デバイスを MacBook Air に接続するシリアル - USB コンバータ (FTDI、http://www.ftdichip.com/Drivers/VCP.htmからインストールされたドライバ) があります。MacBook では と の両方として表示され/dev/cu.usbserial-A4017CQYます/dev/tty.usbserial-A4017CQY私が説明するすべての動作は、これら 2 つのどちらを使用しても同じです。

編集:使用/dev/cu.*すると問題が解決しました。この質問を最初に投稿したときに、なぜうまくいかなかったのかわかりません。TTY の名前が逆になっていますが、私を正しい方向に導いてくれた duswuff に感謝し/dev/tty.*ます/dev/cu.*

私が最初に遭遇した問題は、フラグopen()を使用しないとsyscall が永久にブロックされるということでした。O_NONBLOCKフラグを使用すると、適切なファイル記述子を取得できますが、write()実際には書き込みが行われていないようで (ただし、バイトを書き込んだと主張して問題なく返されます)、read()「リソースが一時的に利用できません」というエラーで失敗します。

stty -af /dev/cu.usbserial-A4017CQY設定は問題なく表示されますが、 のようなコマンドで変更しようとするstty -f /dev/cu.usbserial-A4017CQY -clocalと、 を連続して呼び出して表示すると変更されたように見えますstty

読み取り/書き込みの前にデバイスの準備が整うのを待っていた場合select()、すぐに書き込みの準備ができていると報告されますが、読み取りはできません。write()これは、失敗しながら、文句なしに完了する方法とゲル化しread()ます。書き込まれたデータが実際にデバイスに到達することはないことに注意してください。

これをデバッグするために書いたテスト プログラム全体を以下に示します。

0 投票する
2 に答える
6444 参照

c - termios.h を使用して C プログラムでユーザーに入力を求めるときに、矢印キーとバックスペースを正しく機能させる方法は?

したがって、基本的にユーザー入力の文字を読み取り、「q」が入力されるまでそれらを出力する次のコードがあります。

メイン関数の冒頭で、正規モードをオフにして、ユーザーが自分の入力を表示できるようにします。また、エコーをオフにして、たとえば上矢印キーを押したときに「^[[A」のようなものがポップアップしないようにします。これは機能しますが、端末ウィンドウの上部の行にカーソルを移動することもできますが、これは良くありません。ユーザーが現在の行内でのみ移動できるように、これを修正する方法はありますか?

別の問題は、バックスペースです。それを押すと、プログラムはカーソルの現在の位置に残っている文字を消去する代わりに、奇妙な記号 (0x7f と思われます) を出力します。プログラムで何らかの方法でバックスペース キーの出力を適切に処理する必要がありますが、この奇妙な 16 進数であるため、その方法がわかりません。これに関するヒントはありますか?

これを機能させるために私が考えていたオプションの 1 つは、正規モードを使用して、矢印キーとバックスペース機能が自動的に使用されるようにすることです。ただし、標準モードは行ごとに機能するため、ユーザーが「Enter」を押すまでテキストは表示されません。これまでのところ、入力中にユーザーに自分の入力を表示させる方法はわかりませんでした。これは可能ですか?

そして、ncurses や readline の提案はしないでください。termios.h を使用してこれを行いたいです。