为什么会在Pocket PC2003上运行LabVIEW PDA应用程序时会随机地报内存错误?



主要软件:
主要软件版本: 7.1
主要软件修正版本: N/A
次要软件: N/A

问题: 我会随机或者间歇性得到内存错误,当我在Pocket PC2003上运行LabVIEW PDA应用程序时。究竟是何原因导致此类错误,以及应该采用何种方法来改进我的PDA应用程序?

解答: 在PDA模块上嵌入开发的Visual C++4.0(eVC++ 4.0)代码进行优化的bug可能会导致随机或者间歇性得到内存错误。
比如说,一个顺序结构下的未捆绑的簇可能会不能被正确地进行优化。LabVIEW PDA应用程序运用/Oxt 来进行优化配置以得到最大速率。为了修正这个问题,可以尝试改变 /O2 优化配置或者/Oxs优化配置。
通过按照以下的步骤来进行优化配置。
  1.  找到并打开labview\PDA\Utilities\BuildPocketPC40ARM.bat。该文件的内容为clarm /nologo /Zp4 /W3 /I%1\include\blockdiagram /I%1\include\frontpanel /I%1\include\comms /I%1\include\win
    /I. /D_WIN32_WCE=420 /D "$(CePlatform)" /DARM /D_ARM_ /D "ARMV4" /DUNDER_CE=420 /DUNICODE
    /D_UNICODE /DNDEBUG /DWin32 /DBtWIDCOMM /FR /Fo /Oxt /c *.c .\Src\lvCEPDAMain.c

    link /OUT:myProj.exe commctrl.lib coredll.lib aygshell.lib winsock.lib Commdlg.lib Ole32.lib gx.lib *.lib .\lib\LVPocketPC40
    Arm.lib .\lib\PDAAnalysisArm.lib .\lib\lvsoundppc.lib .\lib\input.lib .\lib\LabVIEWarm.lib /nologo /base:0x00010000
    /stack: 0x10000,0x1000 /entry:WinMainCRTStartup /incremental:no /nodefaultlib:OLDNAMES.lib /nodefaultlib:$(CENoDefaultLib)
    /SUBSYSTEM:WINDOWSCE,4.20 /align:4096 /MACHINE:ARM .\Rsc\StringList.res *.obj
  2. 用以下设置替换BuildPocketPCPC40ARM.bat文件中的/Oxt                                                   - /Oxs (Minimize Size)

    - /Od (Disable)

    - /O2 (Default)

 /Oxs 设置会修正内存错误。 /Od 和 /O2优化设置是最为安全和稳妥的代码优化设置的方法,能最小可能性导致错误的发生,但是这样的设置同样会导致一个问题就是可执行文件的大小会以几何倍的速率增长。
Note:
对应用程序的代码重新设计或者进行简化同样也能修正该内存错误,并且可以在不用修改优化代码设置的情况下完成。比如说,您可以将VI化为多个子VI,避免使用复杂数据结构,简化或者去掉顺序结构来实现等等方法都能对您代码进行优化。

相关链接:

附件:





报告日期: 04/12/2004
最近更新: 06/09/2011
文档编号: 38BDF1YF