안녕하세요! 주말은 비오고, 어제는 날씨가 무지 좋더니 (헉~ 28도까지...) 오늘은 또 비님이 오시네요~! ㅎㅎ요즘은 자주 질문을 올리게 되는군요! ㅠ;
WinCE에서 compile 하고 booting을 하면 아래와 같이 serial debug message에 checksum fail 이 나옴니다.
-----------------------------------------------------
[0]: Base Address=0x80114000 Length=0x1ea95ac
-----------------------------------------------------
RAM image
ERROR: Checksum failure (expected=0x109FC7C computed=0xEA3DB7)
****** Checksum failure on record 208, ABORT!!! ******
이전에는 이런 message가 나오지 않고 잘 부팅이 되었는데, 아무 관계없는 code를 수정해도 이와 같이 나옵니다.
기존에 compile을 주로 "Build Current BSP and Subprojects" 를 많이 사용하였는데,
수정하지 않은 버전도 "솔루션 다시 빌드"를 해 보면 다시 위와 같은 현상이 발생합니다.
bootloader에서 뿌리는 message인것 같긴한데... 먼가 원천적인 문제가 있는것 같은데...
도무지 감이 잡히지 않네요! ㅠㅠ;;
고수님들의 high 조언을 부탁 드립니다.
감사합니다. 꾸뻑~!!
ps) S3C6410 보드를 사용하고 있습니다. 당연히 WinCE 6.0 이고요!!
제가 기억하기로는 타이밍 문제로 아래와 같이 debug를 출력하여 약간의 delay를 주어 해결하였습니다.
정확한 원인은 알 수 없구요.
//blcommon.c
KITLOutputDebugString("+");
if (dwRecLen == sizeof(ROMHDR) && (*(LPDWORD) OEMMapMemAddr(pCurDownloadFile->dwRegionStart, pCurDownloadFile->dwRegionStart + ROM_SIGNATURE_OFFSET) == ROM_SIGNATURE))
{
DWORD dwTempOffset = (dwRecAddr - *(LPDWORD)OEMMapMemAddr(pCurDownloadFile->dwRegionStart, pCurDownloadFile->dwRegionStart + ROM_SIGNATURE_OFFSET + sizeof(ULONG)));
ROMHDR *pROMHdr = (ROMHDR *)lpDest;
// Check to make sure this record really contains the ROMHDR.
//
if ((pROMHdr->physfirst == (pCurDownloadFile->dwRegionStart - dwTempOffset)) &&
(pROMHdr->physlast == (pCurDownloadFile->dwRegionStart - dwTempOffset + pCurDownloadFile->dwRegionLength)) &&
(DWORD)(HIWORD(pROMHdr->dllfirst << 16) <= pROMHdr->dlllast) &&
(DWORD)(LOWORD(pROMHdr->dllfirst << 16) <= pROMHdr->dlllast))
{
g_dwROMOffset = dwTempOffset;
KITLOutputDebugString("rom_offset=0x%x.\r\n", g_dwROMOffset);
}
}
KITLOutputDebugString("-");