最近下载了一个0.09版的FATFS,却发现进入f_open后就没出来,这可郁闷死我了一定是在哪里进入死循环了,我没啥调试工具只好一路安插串口输出。就这样找到问题了
/*-----------------------------------------------------------------------*/
/* Load boot record and check if it is an FAT boot record */
/*-----------------------------------------------------------------------*/
static
BYTE check_fs ( /* 0:The FAT BR, 1:Valid BR but not an FAT, 2:Not a BR, 3:Disk error */
FATFS *fs, /* File system object */
DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */
)
{ DWORD tmp;//这个变量就是我加的 发现这样改后就正常了,也不知道gcc keil等编译后如何 所以就臆断这只会在ADS中出问题了
if (disk_read(fs->drv, fs->win, sect, 1) != RES_OK) /* Load boot record */
return 3;
if (LD_WORD(&fs->win[BS_55AA]) != 0xAA55) /* Check record signature (always placed at offset 510 even if the sector size is >512) */
return 2;
tmp=(LD_DWORD(&fs->win[BS_FilSysType]) & 0xFFFFFF);
if (tmp == 0x544146) /* Check "FAT" string */
return 0;
tmp=(LD_DWORD(&fs->win[BS_FilSysType32]) & 0xFFFFFF);
if(tmp==0x544146)
return 0;
return 1;
}