問題タブ [raw-ethernet]
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++ - 移植可能なハード リアルタイム C または C++ raw イーサネット プロトコル ライブラリ
ハードリアルタイム機能を備えた愛好家向けのポータブルロボットライブラリ (Windows および Linux) を作成しようとしています。標準イーサネットを介してマイクロコントローラーに接続し、そのデバイスにファームウェアをアップロードし、フィールドバスを介して他のデバイスに接続し、専用コントローラーを実行する他のマイクロコントローラーにファームウェアをアップロードできる必要があります。ハード リアルタイムが必要な場合、NIC は RTnet でサポートされているものになります。少なくとも 1 kHz、できれば 2 kHz 以上の典型的なサーボ レートが必要です。完全にカスタムのプロトコル (TCP や UDP over IP ではない) を実行するため、オーバーヘッドが最小限に抑えられ、高速フィールドバスはフレームを送受信していない間に飽和する可能性があります。その後、イーサネット フレームのペイロードを解釈したり、接続されたデバイスに送信したりできます。
1) プロトコルを C++ のままにしたいのですが、「new」キーワードを使用するとリアルタイム プログラミングがうまくいかないことを知っています。プロジェクトを C に変換するのではなく、C++ 言語を使用することを選択した場合、他にどのような制限がありますか? C++ の利用方法や厳しいリアルタイムの締め切りに対応する方法を教えている本や Web サイトを勧める人はいますか? Orocos プロジェクトはリアルタイム C++ を使用しているため、C++ を使用することは可能だと思います。C コードは使用しない方がよいでしょう。
2) 移植可能なプロトコル ライブラリの汎用性を維持するために、プログラムは非リアルタイム イーサネット アダプタと RTnet イーサネット アダプタの両方で同時に実行されるプロトコルをどのように処理する必要がありますか?
私が持っている特定の質問は、ブーストまたは Xenomai ミューテックスのいずれかを使用できるポータブル Mutex クラスについての質問です。
問題 2 の解決策 1 は次のようになります。アプリケーションが Xenomai ライブラリを使用してコンパイルされている場合、ブール値フラグを使用してミューテックスを構築し、実行時にロックとロック解除のためにどのメソッド (boost または Xenomai) がラップされるかを示すことができます。 . ライブラリが Xenomai 用にコンパイルされている場合、ブースト ミューテックスと Xenomai ミューテックスを含めることができます。プロジェクトが Xenomai 用にコンパイルされている場合、ブーストと Xenomai のミューテックスのプライベート変数が含まれるため、このソリューションは好きではありません。
問題 2 の解決策 2 は次のようになります。純粋仮想インターフェイス メソッドの抽象クラスから 2 つの異なる派生クラスをミューテックスに書き込みます。1 つはブースト用、もう 1 つは Xenomai 用です。私はこの方法の方が好きですが、実行時に使用するクラスを指定するのは面倒です。ブーストと Xenomai ミューテックスのプールが必要になるかもしれません。これは、最も困難なリアルタイム C++ プログラムがこの問題に対処する方法ですか?
ミューテックス以外にもこの問題が発生していますが、最初から悪い設計パターンを複製したくないので、フィードバックを受け取りたいです。
3) 私は Beckoff の TwinCAT が Windows 7 で EtherCAT をリアルタイムで実行すると信じています。後で?オープン ソースのハイパーバイザー プロジェクトがあるかもしれません。
4) また、クアッドコア コンピューターが各コアを 100% 使用して、システムがハード リアルタイムで実行されていないかどうかを確認できるように、どのようにシステムをロードしますか?
ethernet - 物理層からビットを読み取るための低レベルのイーサネットドライバー
標準のコンピュータ イーサネット インターフェイスから、物理イーサネット接続インターフェイスからビットを直接読み取ることは可能ですか?
たとえば、ラップトップのイーサネット ジャックを差動ロジック プローブとして使用したいとします (標準のイーサネット ケーブルを使用)。ビットを取得するためにドライバーを作成する可能性がありますか、それともドライバーがどれだけ低くなるかに制限がありますか?
基本的に、物理層はビットストリームをデバイスドライバーに送信するだけですか、それともビットの解釈に影響を与えるか、デバイスの誤動作を引き起こすデコードを行いますか (別のエンコードスキームを使用するなど)。
要するに、適切なドライバーを作成することで、イーサネットポートを標準のデジタル差動通信リンクとして使用できるか、または ieee 仕様 (8b/10b など...) に制限されているかということです。
vhdl - 送信できるイーサネットフレームのサンプルとは?
FPGA から PC にイーサネット フレームを送信し、Wireshark で受信できるようにしたい
ペイロードを CRC ジェネレーターに渡して CRC 結果を取得しますが、wireshark がペイロードを何も受信していないため、CRC エラーを推測します
私は2つのアイデアを得ました
networking - TUN / TAP を使用したユーザー空間の TCP/IP スタックのテスト
TUN/TAP インターフェイスを使用して TCP スタックをテストすることは可能ですか? 次のような仕組みを考えています。
一番上のボックスは、(たとえば) 標準の変更されていない HTTP サーバーであり、TUN デバイスにルーティングされた IP アドレスをリッスンします。一番下のボックスは、生のイーサネット フレームで動作するカスタム TCP/IP スタックです。
質問:
- このように 2 つの TAP/TUN デバイスを背中合わせに接続することは可能ですか?
- ここで「ブリッジ」が必要ですか?彼らは他にどのように背中合わせに話しますか?
- そして最後に:これを行うためのより良い方法はありますか?
事前にサンクス。
PS: すべてを同じマシンで実行します。「ボックス」は、ここではプロセスまたはセットまたはプロセスに似ています。
ethernet - 生のイーサネット フレームの送受信
カスタムイーサネットタイプのデバイスと通信する必要があるアプリケーションを Linux で作成する必要があります。そのようなアプリケーションを作成する方法についても、多くの解決策があります。欠点は、このルート アクセスが必要なことです (AFAIK)。後で root 権限を解放することもできますが、プログラムが IDE で開発されているという問題が発生します。これは、root として実行したくありません。私の特別なケースでは、メイン アプリケーションは Python で書かれています。これは、Python インタープリター全体へのルート アクセスを許可することを意味します。可能な代替案を検討しています。例えば
TCP/UDP を介してすべての raw パケットをリダイレクトする小さな UDP/TCP サーバーを作成します。これは Python でも記述できます。この小さなアプリケーションだけが root 権限を必要とします。
残念ながら、リダイレクトにsocatを使用していますが、IPパケットによってオーバーフローしないようにするために、1つのイーサネットタイプのみを気にするオプションを見つけることができません。
他のアイデアはありますか?
http - ポート80なしへのArduinoイーサネットHTTPリクエスト
ポート 8733 でリッスンするRESTインターフェイスがあります。 Fiddlerでテストでき、応答します。
Fiddler リクエストをコピーし、次のプログラムを使用して Arduino に入れました。それを実行すると、REST インターフェイスはヒットしません。動作する別の PC から Fiddler でリクエストを送信しようとしました。したがって、ファイアウォールの問題はありません。また、Arduinoにメッセージを送信しようとしましたが、Arduinoはそれを受信するので、接続に問題はありません.
この問題を解決するにはどうすればよいですか?
c++ - UbuntuおよびNetbeans 6.9を使用してC ++が生のソケットを開くことができない
Ubuntuで生のイーサネットを送信/受信しようとしています。
ターミナルを介してcでコードを実行しても問題ありません。
ただし、Netbeans IDE 6.9 を使用してコードを C++ に変換しようとすると、raw ソケットを開くことができません。呼び出し:
常に -1 を返します。エラー: 「操作は許可されていません」