問題タブ [cvi]
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 - ANSIC90でランタイムエラーをキャッチするにはどうすればよいですか
ライブラリ関数ConnectToTCPServerを使用しています。この関数は、ホストに到達できない場合にタイムアウトします。その場合、アプリケーションは次のエラーでクラッシュします: "NON-FATAL RUN-TIME ERROR:" MyClient.c "、line 93、col 15、thread id 0x000017F0:Library function error(return value == -11 [0xfffffff5]) 。タイムアウトエラー」
エラーコード11はタイムアウトエラーであるため、これは私のアプリケーションで非常に頻繁に発生する可能性がありますが、アプリケーションがクラッシュします。アプリケーションをクラッシュさせるのではなく、このエラーをキャッチしたいと思います。
Ansi C90でこのランタイムエラーをキャッチするにはどうすればよいですか?
編集:これが現在の使用のコードスニペットです:
と
Callbackfunctionが呼び出されることはありません。サーバーが実行されていないため、ConnectToTCPServerがタイムアウトします。コールバックが呼び出されているのではないかと思いますが、呼び出されることはありません。
編集2:コールバック関数は実際には呼び出されません。ConnectToTCPServerの戻り値には、同じエラー情報が含まれています。ConnectToTCPServerがこのエラーをスローするのはバグかもしれないと思います。私はそれをキャッチしてC90でビンに入れる必要があります。何か案は?
編集3:コールバック関数をテストしました。サーバーがオンラインであるというまれなケースで、コールバック関数が実際に呼び出されます。エラーが発生したときにコールバックが呼び出されないため、これは役に立ちません。
distribution - CVI/Labview を使用してコマンドラインから配布キットを作成する方法
コマンドラインで compile.exe コマンドを使用してコンパイルする NI CVI/Labview プロジェクトがあります。これにより、期待される実行可能ファイルが生成され、開発用 PC で正常に動作します。ただし、コマンドライン コマンドを使用して、このプロジェクトの配布キットも作成したいと思います。
CVI を使用すると、IDE を介して配布キットを生成できます。また、ActiveX インターフェイスを使用してプロジェクトを開いて配布キットを作成できるコードを偶然見つけました。ただし、特にコマンドライン オプションを探しています。
必要に応じて、プロジェクトの対応する CDS ファイルを利用できます。
c - C90の関数を介してva_listを渡すにはどうすればよいですか?
va_listを別の関数に渡したい。これが私がやろうとしていることの例です:
私va_list ap
はchar
ポインタのようですが、どうすればリスト全体を取得できますか?サブファンクションmy_printf()
に全体または偽物を渡すように書き直すにはどうすればよいですか?ポインタva_list
を受け入れるようにサブ関数を変更できないため、を変更する必要があります。va_list
my_printf
編集:私は次のことがうまくいくことを理解していますが、これは私が望むものではありません。
c - CVI/Labwindowsでのスレッドの同期
2つ(またはそれ以上)のスレッドが並行して動作しています。それらの目的はハードウェアデバイスを測定することであり、外部のハードウェア刺激に依存しています。実行中のある時点で、ハードウェアデバイスをトリガーし、刺激を待ちます。しかし、私は刺激装置を1つしか持っていません。
したがって、すべてのスレッドが刺激を受け取る準備ができるまで、スレッドは待機する必要があります。ここで、別のスレッド(おそらくディスパッチングメインスレッド)がデバイスをトリガーする必要があり、スレッドは続行できます。
これを同期するためのベストプラクティスは何ですか?動的な数のスレッドで好ましいですか?
編集: CVI/Labwindowsを使用します。それはいくつかのスレッドを提供しますが、ほとんどは悪い文書化されたマクロを介して行われます。スレッドを登録し、開始し、終了するのを待つ方法を理解しました。
スレッドセーフな変数とロックを作成するためのツールもあるようです。しかし、それらの構文は私にはわかりません。したがって、私はある種のミューテックス/セマフォを自分で構築する必要があります。
c - MSXML でのメモリ処理の問題
DLL 内のレガシー コードを使用して、製造された製品をテストするためのアプリケーションがあります。アプリケーションは、さまざまな製品用にセットアップできます。セットアップは xml ファイルを介して行われ、実行時、つまり End-Of-Lot で変更することができます (変更する予定です)。xml の処理は、前述のレガシー dll によって行われます。
長時間 (数日から数週間) 実行した後、メモリ フットプリントが増加していることに気付きました。それをデバッグすると、(可能性のある) リークを dll に追跡することができました。ソースを取得した後、次のようなものが見つかるまでさらに調査できました。
私には思えますが、これは毎回呼び出され、新しいロットが開始されます。そしてdoc
、記憶の中にあるように見えるのは、この構造です。解放されている場所が見つかりません。
結局、dll には、(CVI 関数の) 解放されていないオブジェクトからの多くの小さなリークがありました。それらを修正しましたが、この MS オブジェクトを解放する方法がわかりません。私はこれに出くわしました: MSXML ガベージ コレクション メカニズムを理解していますが、ANSI-C コードを取得した後、GC をどうするか、それが機能するかどうかわかりません。
MSXML オブジェクトを手動で解放する方法はありますか?
filtering - フィルタを高速で実行する
CVI で信号処理ソフトウェアを作成しています。USB経由で非常に高速(〜50K)でコンピューターに送信される信号があります。RTでフィルタリングしたい。それを行うために、Simulink でフィルターを作成し、それを C コードに変換して、CVI で実行します。
- FuncName_initialize()
- FuncName.in
- FuncName_step()
- FuncName.Out
問題は、しばらくすると (約 5 ~ 7 分) フィルターが正しく機能しないことです...つまり、不正確な結果とアーティファクトが表示されます。これは、速度が速すぎた結果だと思います (以前は低速で使用していたので問題ありませんでした)。
何が問題なのかについて何か提案はありますか? CVI で RT フィルタを直接実装するにはどうすればよいですか (ウィンドウを維持しながら、入力で 1 ポイントを取得し、出力で 1 ポイントを取得するものを意味します)。
信号の記録は正常に機能し、生データを画面に表示することも正常に機能するため、この速度でデータが正常に送信されることはわかっています。
ありがとうございました
labwindows - LabWindows 開発環境の複数のバージョンを同じマシンにインストールするにはどうすればよいですか?
複数の顧客向けに LabWindows でソフトウェアを開発しています。多くの場合、顧客は CVI ランタイム エンジン (RTE) のバックレベル バージョンを使用しています。可能であれば、顧客は最新版にアップグレードするように促されますが、アップグレードできない場合は、古い RTE を対象としたソフトウェアをビルドする必要があります。LabWindows は以前のバージョンの RTE のコンパイルをサポートしていないため、LabWindows 開発環境の複数のバージョンをインストールし、ターゲット RTE に一致するものを使用してコンパイルすることで回避できます。
同じマシンに複数のバージョンをインストールするにはどうすればよいですか?