問題タブ [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.
c++ - 端末構成
MAC OS X (10.10) プログラムで、RS-485 シリアル通信用に termios を正しく設定するのに苦労しています (FTDI チップを搭載した starcom USB → RS-485 を使用しています)。
以下を設定する必要があります。
- 1 開始ビット (0 ビット)
- 8 データビット
- 1 奇数パリティ ビット
- 1 ストップ ビット (1 ビット)
- 19200 ボー
通信はバイナリなのでストップキャラクタはありません。
現在、ほとんどの設定を行う方法を見つけましたが (以下のコードを参照)、開始ビットが必要であることを termios に伝える場所が見つかりませんでした。
serial-port - データの前にユーザー名を送信するTermios
Raspberry Pi でシリアル通信を使おうとしています。このリンクを見つけました。コードを 1 つだけ変更し、バッファ値を 30 に増やしました。編集したコードは次のとおりです。
Rx ピンと Tx ピンをショートさせて、このコードを実行します。「こんにちは」を受け取る必要がありますが、これを取得しています:-
したがって、「Hello」を受信していることは明らかですが、さらに自動的に送信しています
ですから、私のユーザー名の送信をやめるように言ってください。
linux - tty シリアル USB ポートを開く
Sierra Aircard モデムを使用しています
ダイヤルポート/PPPポートを設定している間、私はこのポート(deb/ttyUSB3)をこのように開いています
この構成は、接続の確立のために今まで完全に機能しています。再接続など
しかし、この方法に関して 1 つの問題があります。この操作の進行中にドングルを取り外すと (わずか数ミリ秒)、物理デバイス マネージャーでドングルの取り外しを検出できません (このプロセスはデバイス管理モードスイッチなどを行います.. .) msg がカーネル層から受信されていないためです。また、ドングルを削除しても /dev/ttyUSB3 は引き続き保持されます (0,1,2 が解放されます)。これがポートを開く正しい方法であるか、または他の方法が利用可能かどうかをお知らせください。
編集
私は行き詰まっています助けてください
c - シリアル ポートから受信したバイトの順序が正しくありません
シンプルな UART 経由でデータを送信する FPGA を備えたデバイスがあります。データは 32 バイトのパケットで、ボーレートは 115200 です。UART-TTL/USB アダプターを介してラップトップに接続しているため、システム (Ubuntu 14.04) で からデータを読み取ることができますttyUSB。データを受信し、計算を行い、結果をテキスト ファイルに保存するための簡単なアプリケーションを GTK/C で作成しました。32 バイトのパケットを送信する頻度を毎秒 5 回から毎秒 100 回に増やすまで、すべてが正常に機能していました。問題は、1ダースまたは数ダースに1つのパケットが間違ったバイト順になっていることです。FPGA が毎回正しくデータを送信することをロジック アナライザーで確認しました。
たとえば、FPGA はパケットを送信します。
1 2 3 4 5 6 7 8 9
しかし、私のアプリケーションは時々受け取る:
1 2 7 3 4 5 6 8 9
この関数を使用してシリアルポートを開きます:
私の GTK/C アプリケーションでは、「OPEN」ボタンをクリックすると上記の関数が呼び出されます。
次に、シリアル ポート用のチャネルを作成し、そのコーディングを設定して、受信イベントのハンドラーを追加します。
関数read_channel()は次のようframeになります (文字bufferと整数フィールドのテーブルを持つ構造体ですbyte_number):
c - Linuxのシリアルバッファの長さはどれくらいですか?
よろしくお願いし<termios.h>ます。私が理解しているように、UART を介して何かを読み取る際には 2 つのバッファーが存在します。受信したバイトが格納されるハードウェア バッファーと、ハードウェア バッファーに格納されたものを読み込むソフトウェア バッファーです。私が理解しているように、このソフトウェアバッファは2番目の引数read(uart_channel, BUFFER, length)です。
説明してください: ハードウェア バッファの長さは? 時間の長さを制御できますか? 私にとって、デバイスが UART 経由で送信した最新の 12 バイトを読み取ることが重要です。これを確実にするにはどうすればよいですか?
linux - VTIME 値の後に termios read() を返す方法は?
termios を使用して、Linux でネイティブ シリアル ポートを開いています。
ポートはブロッキング モードで開かれ、設定はVMIN = 10およびVTIME = 5です。これは、タイムアウトに達した場合、ブロッキング読み取り機能が 0.5 秒後に返されることを意味するはずだと思いました。
私はこれをここで見つけましたが:
read() は、VMIN 文字が呼び出し側のバッファーに転送されたとき、または VTIME の 10 分の 1 が文字間で期限切れになったときに満たされます。このタイマーは最初の文字が到着するまで開始されないため、シリアル回線がアイドル状態の場合、この呼び出しは無期限にブロックされる可能性があります。これは最も一般的な操作モードであり、VTIME は全体的なタイムアウトではなく、キャラクタ間のタイムアウトと見なされます。彼の呼び出しは、読み取ったゼロバイトを決して返すべきではありません。
だから私の質問は今、回線がアイドル状態の場合にこのタイムアウトでコールを返す方法ですか?
ありがとう!
c - #include する方法Arduinoソフトウェア(1.6.5)で?
これが今起こっていることです。私はURGレーザーセンサーのコードを使用しており、テストできるかどうかを確認するためにArduinoソフトウェアでコンパイルしようとしています. ただし、[コンパイル] をクリックすると、次のエラー メッセージが表示されます。
Ubuntu Linux 用に見つけたすべての termios ライブラリをダウンロードしましたが、それでもエラーが発生します。見つけたライブラリを urg_sensor.h ファイルがある場所にコピーしましたが、うまくいきません。
次のコマンドを使用してインストールしようとしました: sudo apt-get install libc6 または libc6-dev (Linux の termios ライブラリ) ですが、既に最新バージョンになっています。
だから、私は他に何をすべきかわかりません。私が今何をすべきかについて誰かが何か考えやコメントを持っていれば、本当に感謝しています.
ありがとう!