問題タブ [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.

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

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# アプリケーションのフローは次のとおりです。

  1. FTDI デバイスとの通信を設定する
  2. FTDI デバイスから新しいデータが利用可能になったときに通知される SetEventNotification
  3. FTDI デバイスに ping を送信し、準備ができていることと、データが必要であることを知らせます。
  4. (SetEventNotification を使用して) 新しいデータが通知されたら、それを使用していくつかの処理を行います。

もう少し詳しく:

  • C#ラッパーを使用した読み取りと書き込みは、Linux / Monoで正常に機能するようです
    • デバイスは最初に書き込みを使用して ping され、次に次の読み取りが成功します。
  • D2XX Programmer's Guide で提供されているサンプル コードを使用すると、Linux で記述された C コードは、SetEventNotification を使用してもクラッシュしません。
  • 必要なバイト数で C# ラッパーの Read を使用する (明らかな) 代替手段は、Linux / Mono で適切に機能しているようです。

いくつかの質問:

  1. Linux/Mono で D2XX ドライバー用の C# .NET ラッパーを使用していて、この問題が発生した人はいますか?
  2. 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 で常にスタックします。任意の考えをいただければ幸いです。

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

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 に伝えるにはどうすればよいですか? それとも、他に何か見逃しましたか?

前もって感謝します、 オリバー

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

ftdi - VCP と D2XX の FTDI の違い

私は FTDI FT232R デバイスを持っており、現在 VCP と D2XX のどちらを使用するかを検討しています。両方の長所と短所について少し読みましたが、このプロジェクトにどちらを使用するかをまだ決定できません。このプロジェクトでは Linux を使用するつもりですが、D2XX を使用するために余分な努力をする価値はありますか? どんな種類の助けや情報もいただければ幸いです。

ごきげんよう、スパーカス

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

c - D2XX アプリケーションがフォークされたときに機能しないのはなぜですか?

D2XXドライバーを使用してシリアルポートデバイスと通信する、Raspberry Piで実行されるCで簡単なアプリケーションを作成しています。私は多くのオンライン チュートリアルとリファレンス ガイドに従って動作させ、カスタム udev ルールを設定してドライバーが正しく読み込まれるようにするなどの手順を実行しました。共有ライブラリをインストールするために FTDI のビルド手順に従いました。コンパイル時にライブラリにリンクする gcc の引数を指定し、ドライバーが適切にアクセスできるように-lC プログラムを実行します。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 メソッドを実行する機会すらありません。フォークされたプロセスで実行している間、そもそもメソッドが見つからないかのようです。