建立文件系统后,往文件里写数据单步调试可以写进去,但连续运行就写不进去,什么问题啊?求各位大侠指点啊!
主要问题函数如下:
DWORD get_fat ( /* 0xFFFFFFFF  isk error, 1:Internal error, Else:Cluster status */
FATFS *fs, /* File system object */
DWORD clst /* Cluster# to get the link information */
)
{
UINT wc, bc;
BYTE *p;
if (clst < 2 || clst >= fs->n_fatent) /* Chack range */
return 1;
switch (fs->fs_type) {
case FS_FAT12 :
bc = (UINT)clst; bc += bc / 2;
if (move_window(fs, fs->fatbase + (bc / SS(fs)))) break;
wc = fs->win[bc % SS(fs)]; bc++;
if (move_window(fs, fs->fatbase + (bc / SS(fs)))) break;
wc |= fs->win[bc % SS(fs)] << 8;
return (clst & 1) ? (wc >> 4) : (wc & 0xFFF);
case FS_FAT16 :
if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 2)))) break;
p = &fs->win[clst * 2 % SS(fs)];
return LD_WORD(p);
case FS_FAT32 :
if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4)))) break;//此函数有BUG,只要第一次是手动进去的就能成功返回
p = &fs->win[clst * 4 % SS(fs)];
return LD_DWORD(p) & 0x0FFFFFFF;
}
return 0xFFFFFFFF; /* An error occurred at the disk I/O layer */
}
主要是红色函数有问题,if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4)))) break;//此函数有BUG,只要第一次是按F11进去的就能成功返回,按F10就返回错误,直接返回
0xFFFFFFFF ,究竟是什么原因呢?求各位大侠指点啊!
|