以下代码由于是临时写成,仅作简单测试,基本能用,后用户反应功能异常,仔细一看,发现其中果然有BUG,晕,特发此贴,给大伙提个醒.除虫高手先别公布答案,让新手先找找.
void WriteFileInfoToEEPROM(uint *uiEEPROMAddress)
{
uint uiTemp;
uiTemp = *uiEEPROMAddress;
EEPROMwrite(uiTemp++,(FDB_Current.DIR_FstClusLO)>>8);
EEPROMwrite(uiTemp++,(FDB_Current.DIR_FstClusLO)&0xff); //
EEPROMwrite(uiTemp++,(FDB_Current.DIR_FileSize)>>24);
EEPROMwrite(uiTemp++,(FDB_Current.DIR_FileSize)>>16);
EEPROMwrite(uiTemp++,(FDB_Current.DIR_FileSize)>>8);
EEPROMwrite(uiTemp++,(FDB_Current.DIR_FileSize)& 0xff);
*uiEEPROMAddress = uiTemp;
}
#if 0
//Old have a Bug in this Function
void ReadFileInfoFromEEPROM(uint *uiEEPROMAddress)
{
uint uiTemp;
uiTemp = *uiEEPROMAddress;
FDB_Current.DIR_FstClusLO = EEPROMread(uiTemp++)<<8;
FDB_Current.DIR_FstClusLO += EEPROMread(uiTemp++);
FDB_Current.DIR_FileSize = EEPROMread(uiTemp++)<<24;
FDB_Current.DIR_FileSize += EEPROMread(uiTemp++)<<16;
FDB_Current.DIR_FileSize += EEPROMread(uiTemp++)<<8;
FDB_Current.DIR_FileSize += EEPROMread(uiTemp++);
*uiEEPROMAddress = uiTemp;
}
相关结构体定义如下:
/* FAT数据区中文件目录信息 */
typedef struct _FAT_DIR_INFO {
UINT8 DIR_Name[11]; /* 00H,文件名,共11字节,不足处填空格 */
UINT8 DIR_Attr; /* 0BH,文件属性,参考前面的说明 */
UINT8 DIR_NTRes; /* 0CH */
UINT8 DIR_CrtTimeTenth; /* 0DH,文件创建的时间,以0.1秒单位计数 */
UINT16 DIR_CrtTime; /* 0EH,文件创建的时间 */
UINT16 DIR_CrtDate; /* 10H,文件创建的日期 */
UINT16 DIR_LstAccDate; /* 12H,最近一次存取操作的日期 */
UINT16 DIR_FstClusHI; /* 14H */
UINT16 DIR_WrtTime; /* 16H,文件修改时间,参考前面的宏MAKE_FILE_TIME */
UINT16 DIR_WrtDate; /* 18H,文件修改日期,参考前面的宏MAKE_FILE_DATA */
UINT16 DIR_FstClusLO; /* 1AH */
UINT32 DIR_FileSize; /* 1CH,文件长度 */
} FAT_DIR_INFO; /* 20H */
typedef FAT_DIR_INFO *P_FAT_DIR_INFO;
FAT_DIR_INFO idata FDB_Current; /*文件控制块信息*/
同一入口地址值执行一次写,然后读,居然出错了,您能找到问题吗? |