主題:EM9360 wince5.0讀文本文件的問題 共有49028人關注過本帖 |
---|
bingdongcha |
1樓 信息 | 搜索 | 郵箱 |
加好友 發(fā)短信 |
EM9360 wince5.0讀文本文件的問題 Post By:2013-9-3 16:11:00 [只看該作者]
在開發(fā)板wince5.0系統(tǒng)的NandFlash文件夾下建立datlib文件夾。在datlib文件夾下有yc.txt文本文件。用vs2005編程序讀這個文本文件,編譯通過,生成解決方案通過,部署解決方案通過。在啟動調試時,卡在在了加載模塊: coredll.dll,這里不動了。顯示如下:
加載模塊: tt1.exe 加載模塊: ws2.dll 加載模塊: coredll.dll 但是當文本文件中的字符小于20行("2 20"這一行)時,在啟動調試,一切正常,可以運行。顯示如下: 加載模塊: tt1.exe 加載模塊: ws2.dll 加載模塊: coredll.dll 加載模塊: ssllsp.dll 加載模塊: wspm.dll CDT Thread run success by gaoyang MacuSend Thread run MacuReceive Thread run *************************************************** *************************************************** yc.txt文件內容如下: "1 1" "1 2" "1 3" "1 10" "1 11" "1 20" "1 25" "7 1" "7 2" "7 3" "7 10" "7 11" "7 20" "7 25" "2 1" "2 2" "2 3" "2 10" "2 11" "2 20" "2 25" "6 1" "6 2" "6 3" "6 10" "6 11" "6 20" "6 25" 程序代碼如下: // 讀第一個CDT數據庫點表 遙測表 //
strcpy(strtmp1,"/NandFlash/datlib/CDTA.yc");
strcpy(strtmp1,"/NandFlash/datlib/yc.txt");
if((fp = fopen(strtmp1, "r")) != NULL)
{
for (tmp = 0; tmp < 256; tmp++)
{
if (!(fgets(cdt_str[tmp], 31, fp)))
break;
cdt_count++;
}
yc_total = 0;
fclose(fp);
for(tmp = 0; tmp < cdt_count; tmp++)
{
tmp1 = sscanf(cdt_str[tmp], "\"%d %d\"",
&cdt_tx0.ycd[tmp].dyno, &cdt_tx0.ycd[tmp].lxno);
if(tmp1 == 0)
break;
cdt_tx0.ycd[tmp].dyno--;
yc_total++;
}
cdt_tx0.a_all_len = yc_total / 2 + yc_total % 2;
} *************************************************************************** 在出現問題時,設置斷點,可以看到程序已經把第20行后的所有數據都讀出來了。繼續(xù)單步運行程序,最后會跳到secchk.c這個文件,程序運行箭頭停在這個程序的最后一行不動了。 程序只涉及到串口和IO操作,編的是電力CDT規(guī)約,應該沒有涉及到cookie的東西。 |
單帖管理 | 引用 | 回復 |
bingdongcha |
2樓 信息 | 搜索 | 郵箱 |
加好友 發(fā)短信 |
Post By:2013-9-3 16:11:00 [只看該作者]
secchk.c的內容如下: /*** *secchk.c - checks buffer overrun security cookie for x86 * * Copyright (c) Microsoft Corporation. All rights reserved. * *Purpose: * Defines compiler helper __security_check_cookie, used by the /GS * compile switch to detect local buffer variable overrun bugs/attacks. * * When compiling /GS, the compiler injects code to detect when a local * array variable has been overwritten, potentially overwriting the * return address (on machines like x86 where the return address is on * the stack). A local variable is allocated directly before the return * address and initialized on entering the function. When exiting the * function, the compiler inserts code to verify that the local variable * has not been modified. If it has, then an error reporting routine * is called. * *******************************************************************************/ #include <windows.h> #include <process.h> /* * The global security cookie. This name is known to the compiler. */ extern UINT_PTR __security_cookie; /*** *__security_check_cookie(cookie) - check for buffer overrun * *Purpose: * Compiler helper. Check if a local copy of the security cookie still * matches the global value. If not, then report the fatal error. * * The actual reporting is done by __report_gsfailure * since the cookie check routine must be minimal code that preserves * any registers used in returning the callee's result. * *Entry: * UINT_PTR cookie - local security cookie to check * *Exit: * Returns immediately if the local cookie matches the global version. * Otherwise, calls the failure reporting handler and exits. * *Exceptions: * *******************************************************************************/ void __declspec(naked) __fastcall __security_check_cookie(UINT_PTR cookie) { /* x86 version written in asm to preserve all regs */ __asm { cmp ecx, __security_cookie jne failure rep ret /* REP to avoid AMD branch prediction penalty */ failure: jmp __report_gsfailure } } |
單帖管理 | 引用 | 回復 |
yy |
3樓 信息 | 搜索 | 郵箱 |
加好友 發(fā)短信 |
Post By:2013-9-3 17:18:00 [只看該作者]
方便把程序發(fā)我郵箱么?yy@emtronix.com
你的dbginfo里面內存分配是怎么配的?
|
單帖管理 | 引用 | 回復 |
bingdongcha |
4樓 信息 | 搜索 | 郵箱 |
加好友 發(fā)短信 |
Post By:2013-9-4 13:30:00 [只看該作者]
找到原因了。
這個程序是在別的系統(tǒng)移植過來的,原先系統(tǒng)對點表做了20個的限制。所以出現了BUG。
|
單帖管理 | 引用 | 回復 |