問題タブ [d2xx]
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 / Mono で実行されている FTDI D2XX C# .NET ラッパー - SetEventNotification がトリガーされると、プログラムがクラッシュするようです
私は、 Windows でFTDI D2XX C# .NET ラッパーを使用する既存の機能的な C# アプリケーションを、Linux と Mono に移植する作業を行っています。Linux D2XX ドライバーのインストールに関する指示に従いました。Linux で実行していることが検出されると、Windows ドライバーではなく、C# .NET ラッパーで Linux ドライバーを探して読み込みます。
この作業を行った後でも、アプリケーション コードの大部分は問題ありませんが、SetEventNotification 関数で設定されたイベントが FT_EVENT_RXCHAR イベントでトリガーされると、アプリケーションがクラッシュするようです。
C# アプリケーションのフローは次のとおりです。
- FTDI デバイスとの通信を設定する
- FTDI デバイスから新しいデータが利用可能になったときに通知される SetEventNotification
- FTDI デバイスに ping を送信し、準備ができていることと、データが必要であることを知らせます。
- (SetEventNotification を使用して) 新しいデータが通知されたら、それを使用していくつかの処理を行います。
もう少し詳しく:
- C#ラッパーを使用した読み取りと書き込みは、Linux / Monoで正常に機能するようです
- デバイスは最初に書き込みを使用して ping され、次に次の読み取りが成功します。
- D2XX Programmer's Guide で提供されているサンプル コードを使用すると、Linux で記述された C コードは、SetEventNotification を使用してもクラッシュしません。
- 必要なバイト数で C# ラッパーの Read を使用する (明らかな) 代替手段は、Linux / Mono で適切に機能しているようです。
いくつかの質問:
- Linux/Mono で D2XX ドライバー用の C# .NET ラッパーを使用していて、この問題が発生した人はいますか?
- C# ラッパーの SetEventNotification は EventWaitHandle を想定しており、SafeWaitHandle を使用してネイティブ オペレーティング システム ハンドルを取得します。問題がここにある可能性はありますか?
提供された洞察は大歓迎です。
編集:
スタック トレースを以下に添付します。
ポーリング アプローチに移行しようとしましたが、FTDI 読み取りを実行すると、データの「フレーム」が完全に書き込まれず、データにギャップが生じる可能性があるようです。
この問題に関するガイダンスについて、FTDI に問い合わせました。実用的な何かが返ってきたら更新します。
2番目を編集します:
Mono の SafeWaitHandle と SetEventNotification に期待されるパラメーターの表現は完全に異なります。FTDI D2XX ライブラリは SafeWaitHandle を EVENT_HANDLE (ftd2xx.h ヘッダーで定義。基本的には pthread_cond_t および pthread_mutex_t) として処理しようとしているため、クラッシュが発生するのはそのためだと思います。
FTDI D2XX C# .NET ラッパーの libpthread で P/Invoke を使用して、pthread 条件とミューテックスと Mono SafeWaitHandle の間で必要な変換を実行できると思います。この時点で、FTDI D2XX の pthread_cond_wait でループしてブロックする作業 C コードが必要です。そのコードはまだ機能していません。誰かがアドバイスを持っている場合は、以下にリストされています。
pthread_cond_wait で常にスタックします。任意の考えをいただければ幸いです。
android - QT+Android+Lib = VFP エラー
現在、FTDIのD2xxライブラリを使用するQtアプリを開発しています。私のステータスは、Windows、Linux、および組み込み Linux (Odroid、セルフコンパイル クロス コンパイル Qt) でプログラムをコンパイルして実行できることです。
しかし、私は Android (Qt のストック ライブラリ) に苦労しています。Odroid-Build と同じ ARMv7 ライブラリを使用していますが、FPU に問題があると思います。したがって、エラーは次のとおりです。
libftd2xx.so は VFP レジスタ引数を使用し、出力は使用しません
FTDI は、lib が VFP レジスタ (VFPv3-D16) で HardFP (SP および DP) を使用していると述べています。Android デバイスの qmake.conf を次のように変更すると、次のようになります。
リンカーは、プロジェクトの .o ごとにエラーを吐き出します。
私の質問は次のとおりです。プロジェクト全体でハード FP を使用する必要があることを Qt に伝えるにはどうすればよいですか? それとも、他に何か見逃しましたか?
前もって感謝します、 オリバー
ftdi - VCP と D2XX の FTDI の違い
私は FTDI FT232R デバイスを持っており、現在 VCP と D2XX のどちらを使用するかを検討しています。両方の長所と短所について少し読みましたが、このプロジェクトにどちらを使用するかをまだ決定できません。このプロジェクトでは Linux を使用するつもりですが、D2XX を使用するために余分な努力をする価値はありますか? どんな種類の助けや情報もいただければ幸いです。
ごきげんよう、スパーカス
c - D2XX アプリケーションがフォークされたときに機能しないのはなぜですか?
D2XXドライバーを使用してシリアルポートデバイスと通信する、Raspberry Piで実行されるCで簡単なアプリケーションを作成しています。私は多くのオンライン チュートリアルとリファレンス ガイドに従って動作させ、カスタム udev ルールを設定してドライバーが正しく読み込まれるようにするなどの手順を実行しました。共有ライブラリをインストールするために FTDI のビルド手順に従いました。コンパイル時にライブラリにリンクする gcc の引数を指定し、ドライバーが適切にアクセスできるように-l
C プログラムを実行します。sudo
そしてそれは成功しました!プログラムは意図したとおりに動作します。
今、単純なプログラムを init.d スクリプト (a la ) で制御できるデーモン プロセスに変換しようとしていますがservice start
、問題が発生しました。
簡単にするために、動作する私の C プログラムの骨抜きバージョンを次に示します。
myprog.c:
私はそれを でコンパイルしてgcc -lftd2xx -o myprog myprog.c
から で実行sudo ./myprog
します。しかし、この同じコードをデーモンに作り直そうとしているので、他のオンライン チュートリアルに従っています。上記のコードは、より似たものに変換されています。現在、これは機能しません:
mydaemon.c:
そのプログラムをまったく同じ方法でコンパイルしますgcc -lftd2xx -o mydaemon mydaemon.c
。私は同じように実行します:sudo ./mydaemon
が、残念ながら動作しません。別のコンソール ウィンドウで/var/log/messages
ファイルを追跡しています。最初のログ メッセージ (つまり、"I can get to this line") に達したことをはっきりと確認できますが、その直後にファイルが死んでしまいます。2 番目のログ メッセージは表示されません。実際、その時点で、プログラムは完全に応答しなくなります。そのプロセス ID を見つけて強制終了する必要があります。
つまり、フォークされたプロセスで D2XX ドライバーを呼び出そうとするとすぐに失敗します。私は何を間違っていますか?最初の例でコードが機能することは既に説明しましたが、デーモンとして実行すると完全に機能しなくなるのはなぜでしょうか? 私が知る限り、問題の D2XX メソッドを実行する機会すらありません。フォークされたプロセスで実行している間、そもそもメソッドが見つからないかのようです。