主题 : 解决FATFS在ADS中编译后无法运行的问题 复制链接 | 浏览器收藏 | 打印
以专业精神对待业余爱好
级别: 侠客
UID: 43681
精华: 3
发帖: 109
金钱: 695 两
威望: 139 点
贡献值: 3 点
综合积分: 278 分
注册时间: 2011-04-19
最后登录: 2015-10-15
楼主  发表于: 2012-02-26 22:18

 解决FATFS在ADS中编译后无法运行的问题

最近下载了一个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;
}
级别: 新手上路
UID: 54153
精华: 0
发帖: 12
金钱: 65 两
威望: 13 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2011-08-25
最后登录: 2013-04-12
1楼  发表于: 2012-06-28 16:58
你好,我最近也是碰到类似的问题,我的程序是在
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;
就直接返回了,我看网上有人说是要把SD卡读写模式改成小端格式(类型A),但我把rSDICON=(0<<4)|1;改成类型A后,程序一直卡在Chk_DATend()这个函数里,我用的就是mini2440官方的sdi模式的程序,请问你是如何改写的,谢谢,能不能交流一下,我的QQ:819441773,谢谢。