在一个使用了FlexRIO,MXI-Express RIO或者R系列板卡资源的进程中扫描内存会导致程序崩溃或数据丢失



主要软件: Driver Software>>NI-RIO
主要软件版本: 12.0
主要软件修正版本: N/A
次要软件: N/A

问题: 我当前程序中调用了NI-RIO驱动软件以使用R系列板卡、MXI-Express RIO系统或者FlexRIO板卡资源。在该进程在运行时,我使用了外部程序或者自己的程序代码扫描了进程内部的内存。另外,我还在进程中去获取随机的或者错误的内存地址。然而,当前代码返回了非预期的数据,并且很可能导致操作系统崩溃。

当我停止扫描该进程的内部内存或者停止获取低等级的内存寄存器值时,该问题就不存在了。是什么原因导致了这个问题?

解答: 这是一个NI-RIO驱动程序中已知的一个错误,在CAR#389839中可以找到这个问题。这个问题的原因是NI-RIO中的某些内存项本来应该是被保护起来的,不能被随意读取,但是这些内存数据在NI-RIO中没有设置相关的保护机制。如果一个使用了NI-RIO驱动的进程直接读取这些内存数据的话,将会导致读取到未预期的数据,并且将会导致系统崩溃。但是这个问题不会影响正常的操作。

你可能运行了一个独立的程序,该程序会指向使用NI-RIO驱动的进程的内部内存。例如,第三方的调试工具,如Visual Studio等,可以监视任何应用程序,然后读取该进程中的内部内存数据。这样的操作同样也可能导致系统的崩溃。

注意这个问题只可能在开发电脑上直接获取R系列板卡、MXI-Express RIO或者FlexRIO板卡资源时出现。如果你的开发电脑是和实时的PXI机箱或者PC机交互的话,这样对进程的随机读取不会导致这个问题。这是因为当前机器上的进程是无法直接获得R系列板卡、MXI-Express RIO或者FlexRIO板卡资源的,你的电脑只是在和实时系统进行交互。同样,你的windows操作系统也不会因为和compactRIO,singleboardRIO,EtherNET RIO或者EtherCAT设备交互而崩溃。

另外,虽说矢量信号收发器(VST)资源可以被开发机直接获取,而且同样适用了NI-RIO驱动,但是上面的问题不会影响到VST设备,不会导致系统的崩溃或者读取到未预期的数据。

总之,如果你希望能直接获取NI-RIO内部的内存数据来做程序调试的话,最好还是采用NI的调试器。因此,你需要使用LabVIEW的可执行程序。如果你对这些感兴趣的话,可以参考 LabVIEW Help page on Debugging Applications and Shared LibrariesNI不推荐你因为其他原因获取NI程序进程的内部内存数据。

相关链接:

附件:





报告日期: 08/12/2013
最近更新: 02/28/2014
文档编号: 6CBD88VQ