问题标签 [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 - 如何在 ansi C90 中捕获运行时错误
我正在使用库 Function ConnectToTCPServer。当主机不可达时,该函数超时。在这种情况下,应用程序崩溃并出现以下错误:“NON-FATAL RUN-TIME ERROR: "MyClient.c", line 93, col 15, thread id 0x000017F0: Library function error (return value == -11 [0xfffffff5]) . 超时错误"
Errorcode 11 是一个超时错误,所以这可能在我的应用程序中经常发生 - 但是应用程序崩溃 - 我想捕捉这个错误而不是让我的应用程序崩溃。
如何在 Ansi C90 中捕获此运行时错误?
编辑:这是当前使用的代码片段:
和
回调函数永远不会被调用。我的服务器没有运行,所以 ConnectToTCPServer 将超时。我会怀疑回调被调用 - 但它从未被调用。
编辑2:实际上没有调用回调函数,ConnectToTCPServer的返回值包含相同的错误信息。我认为ConnectToTCPServer抛出此错误可能是一个错误。我只需要抓住它并将其放入 C90 中即可。有任何想法吗?
编辑 3:我测试了回调函数,在我的服务器在线的罕见情况下,实际调用了回调函数 - 这无济于事,因为发生错误时不会调用回调。
distribution - 如何使用 CVI/Labview 通过命令行创建分发套件
我有一个 NI CVI/Labview 项目,它通过在命令行上使用 compile.exe 命令进行编译。这会生成预期的可执行文件并在开发 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 中同步线程
我有两个(或更多线程)并行工作。它们的目的是测量硬件设备,它们依赖于外部硬件刺激。在执行过程中的某个时刻,它们触发硬件设备并等待刺激。但我只有一个刺激装置。
因此线程必须等待,直到每个线程都准备好接收刺激。现在另一个线程(可能是调度主线程)必须触发设备并且线程可以继续。
同步这个的最佳实践是什么?最好用动态数线程?
编辑: 我们使用 CVI/Labwindows。这提供了一些线程,但主要是通过不良记录的宏。我已经弄清楚了如何注册线程,启动它们并等待它们完成。
似乎也有创建线程安全变量和锁的工具。但是他们的语法让我望而却步,因此我想/需要自己构建某种互斥体/信号量。
visual-studio-2010 - 在 VS2010 中创建的静态库在 CVI 中不可链接
我用 VS2010 创建了一个简单的静态 Ansi-C90 库。我能够在 VS2010 中创建一个 C++ 项目,导入并全面测试 lib。
我打开了一个 LabWindows CVI 项目并尝试在那里导入 lib 文件。
不幸的是,没有太多事情要做 - 我得到的唯一消息是:“读取外部模块时遇到错误的标头:'Release\mylib.obj'”
有什么方法可以调查我的 lib 文件有什么问题吗?是否有一些 VS2010 不遵循的标准格式?
编辑#1:
我确定了问题的可能来源,但我目前无法检查。VS2010 不会编译为静态单线程库 - 该功能已被删除。CVI 可能无法处理静态多线程库。
我还在 NI 论坛上发布了这个问题。
编辑#2:
NI 论坛链接已损坏 - 我认为它的 NI 有问题并提供了一个Google 搜索链接来发帖。
c - MSXML 的内存处理问题
我有一个使用 dll 中的一些遗留代码测试制造产品的应用程序。可以为不同的产品设置应用程序。设置是通过 xml 文件完成的,并且可以(并且将)在运行时更改,即在批次结束时。xml 的处理由上述遗留 dll 完成。
运行较长时间(几天到几周)后,我注意到内存占用量增加了。对此进行调试,我可以追踪到 dll 的(可能的)泄漏。得到源之后,我可以进一步调查,直到我发现这样的东西:
在我看来,每次都会调用它,开始一个新的批次。正是这种doc
结构,似乎存在于记忆中。我找不到任何释放它的地方。
毕竟,该 dll 有很多轻微的泄漏,全部来自未释放的对象(CVI 函数)。我修复了这些,但我不知道如何释放这个 MS-Objects。我遇到了这个:了解 MSXML 垃圾收集机制,但是在我拥有 ANSI-C 代码之后,我不确定如何处理 GC 以及它是否有效。
有没有办法手动释放 MSXML 对象?
filtering - 高速运行过滤器
我正在用 CVI 编写信号处理软件。我有一个信号,通过 USB 以非常高的速度(~50K)传输到计算机。我想在 RT 中过滤它。为了做到这一点,我在 Simulink 中创建了一个过滤器并将其转换为 C 代码,我在 CVI 中使用以下代码运行:
- FuncName_initialize()
- 函数名.in
- FuncName_step()
- 函数名输出
问题是一段时间后(大约 5-7 分钟),过滤器工作错误......意味着显示不准确的结果和伪影。我相信这是因为使用速度太快(因为我之前以较低的速度使用过它,这很好)。
关于可能是什么问题的任何建议?如何直接在 CVI 中实现 RT 过滤器(意思是在输入获得一个点并在输出中获得一个点,同时保持一些窗口)。
我知道以这种速度传输的数据很好,因为记录信号工作正常,并且在屏幕上显示原始数据也工作正常。
谢谢
c - 非常快的 COM 端口读取
我正在高速(3,686,400 b/秒)从 COM 端口读取数据。为了实现这一点,我必须读取 512 字节的块并显着增加我的超时时间(到 1000),这样即使我正在同步读取,我每次都会得到一个完整的块而不是它的一部分。
问题:经过几分钟的运行和绘制结果就好了,我得到了损坏的信息。这意味着我仍然没有按照我想要的速度获得信息,但是明显延迟了。
当我在软件上加载更多内容时尤其会发生这种情况,例如运行将数据写入文件的记录线程。生成的文件比预期的要短得多,即使没有损坏(就像我得到传输数据的开头而不是全部)。
我知道它不是发送设备,因为重新加载 PC 应用程序,而设备仍然发送数据重新初始化整个事情。
如果重要的话,我使用的是 Windows 7,英特尔酷睿 i3,64 位。在 CVI 中编写 C 代码。使用 Windows API 读取 COM 端口。
有什么建议么?
谢谢
labwindows - 在构建过程中如何定位较旧的 CVI 版本?
我目前正在使用 LabWindows/CVI 2012 开发实验室自动化软件。我客户的实验室都安装了 CVI 9.0 运行时环境 (RTE)。客户强烈希望避免将他们的实验室站更新到最新的 CVI RTE。
我已经在我的机器上安装了旧版本的 LabWindows (9.0) 并成功构建了我的项目,所以我知道我的代码可以在两种环境下编译。
理想情况下,我想使用 LabWindows 2012 并告诉它以较旧的 CVI RTE 为目标。这可能吗?
labwindows - 如何在同一台机器上安装多个版本的 LabWindows 开发环境?
我在 LabWindows 中为多个客户开发软件。通常情况下,客户使用的是 CVI 运行时引擎 (RTE) 的后级版本。如果可能,会敦促客户升级到最新版本,但如果他们不能,我必须构建针对旧 RTE 的软件。LabWindows 不支持为以前版本的 RTE 进行编译,因此解决方法是安装多个版本的 LabWindows 开发环境,并使用与目标 RTE 匹配的任何版本进行编译。
如何在同一台机器上安装多个版本?