問題タブ [rtems]
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 - Linux でシリアルポートから正しく読み取れない
シリアル ポートから 1 文字を送信するたびに 1 文字を返すようにボード (ERC 32 プロセッサ) をプログラムしました。GTKterm を介して文字を送信すると、すべてが正常に機能し、ボードが正しく返されます。文字を送受信するコードを C で書いています。ただし、何らかの方法で失敗するか、一部の実行で機能し、突然機能しなくなります。シリアルポートに関する多くの質問を読みましたが、何が起こっているのかわかりませんでした。
私は3つのアプローチを試みました:
1) 読み取り/書き込みコードのブロック
問題: しばらくは機能していましたが、読み取り機能がブロックされ、バイトを取りませんでした。以下のコード
2) スレッド ブロッキング読み取り/書き込みコード
問題: 読み取り関数がブロックされ、1 バイトも取りません。
注: 読み取りスレッドが最初に初期化され、書き込み呼び出しに関係なくポートを「監視」し始めるようにプログラムしました。以下のコード
3) シグナル ハンドラーを使用したノンブロッキング読み取り/書き込みコード
問題: コードでわかるように、メイン ループ (ポート ウォッチャー ループ) の前に書き込み呼び出しを配置しました。ポートへのシグナルハンドラも設定済みです。書き込みますが、何も読み取りません。以下のコード
私の目標は、転送されるデータが Linux 側で開始され、uart を介してボードに送られ、ボードがデータを取得し、処理してコンピューターに返し、ループが実行されるループ システムのハードウェアを作成することです。何らかの停止条件が満たされるまで再び。複雑さを増す前に、単一の文字ループをテストするためだけに、ボード用の簡単なコードを作成しました。
次の点に注意してください:
-> 1 つの文字で 1 つの書き込み関数を呼び出し、同時に GTKterm を実行する単純なコードを作成すると、GTKterm コンソールでボードの応答を確認できます。
-> コードのブロック バージョンの場合、読み取り関数でコードがブロックされると、ボードをリセットすると、ボードのウェルカム メッセージの最初の文字が表示されます。ボードは必要ありませんが、GTkterm は必要です。
-> ダイレクト Linux マシンでいくつかのコードを試してみたところ、同じ問題が発生し、GTKterm は正常に動作しました。
私が見ていないトリッキーな設定があるかどうかはわかりません。どんな助けでも大歓迎です。
ボード: RTEMS リアルタイム オペレーティング システムでプログラムされている ERC32 チップ (TSC695F)。チップ UART は全二重です。
コンピューター: Windows 7 上の VMware 仮想マシン上の Mandriva Linux。
$ uname -a
Linux localhost.localdomain 2.6.36.2-desktop586-2mnb #1 SMP Wed Dec 22 17:11:08 UTC 2010 i686 i686 i386 GNU/Linux$ cat /etc/*-release
Mandriva Linux リリース 2010.2 (公式) for i586