|
要将一些重要参数保存到flash里,代码如下:
UInt8 hwFlashWriteSetup(UInt8 *pData, UInt32 nSize)
{
UInt8 *pTemp;
crc_t crc, i;
int status=0;
FlashInit();
pTemp = (UInt8 *)malloc(nSize+4);
crc = crc32(pData, nSize); //校验码
memcpy(pTemp+nSize, (UInt8 *)&crc, 4);
// 擦除并写入
FlashErase(tmUnit0, gConfigBlock1, nSize+4);
for (i=0; i<3; i++) // 写入后,再读出比较,最多3次
{
memcpy(pTemp, pData, nSize);
FlashWrite(tmUnit0, pTemp, gConfigBlock1, nSize+4);//先写入
FlashRead(tmUnit0, gConfigBlock1, pTemp, nSize);//再读出
Sleep(200);//延时200ms,若去掉此延时,下面的比较验证会失败
if (!memcmp(pData, pTemp, nSize)) break; // 如果比较相同,直接跳出
}
if (i >= 3) status |= 0x01; // 写入错误
free(pTemp);
pTemp = NULL;
return status;
}
简短起见,去掉了一些检验语句,但可以保证各函数调用成功。
问题在于:若去掉Sleep(200)语句,则接下来的比较会失败.
哪位大哥有经验指教一下,先谢谢了
|
|