首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

转fatfs 文件系统选择(2)

转fatfs 文件系统选择(2)

需要注意的是,LD_WORD返回的就必须是WORD。这样做了,编译器大部分的也可以编译通过,但是ADS就是通不过,有3个地方,
    finfo->fsize = LD_DWORD (&dir[DIR_FileSize]);    /* Size */
    finfo->fdate = LD_WORD (&dir[DIR_WrtDate]);        /* Date */
    finfo->ftime = LD_WORD (&dir[DIR_WrtTime]);        /* Time */

其中,dir的是这样定义的:const BYTE *dir,编译器报错是类型不匹配,因此,这里的几个LD_WORD和LD_DWORD重写,定义成一致的类型即可:
    WORD    LD_WORD_1 (const BYTE *pt)
{
    BYTE *PT = (BYTE*)pt;
    return (WORD)(PT[0]+PT[1]*256);
}

DWORD    LD_DWORD_1 (const BYTE *pt)
{
    BYTE *PT = (BYTE*)pt;
    return ((DWORD)PT[0]+(DWORD)(PT[1]*256)+(DWORD)(PT[2]*65536)+(DWORD)(PT[3]*16777216));      
}


而后面改成:
    finfo->fsize = LD_DWORD_1 (&dir[DIR_FileSize]);    /* Size */
    finfo->fdate = LD_WORD_1 (&dir[DIR_WrtDate]);        /* Date */
    finfo->ftime = LD_WORD_1 (&dir[DIR_WrtTime]);        /* Time */


编译,一路OK,然后写一个文件,哇,哈哈哈哈!!!!终于出来了!!!!写文件没问题,读也没问题!@~~~~~测试了常用的函数,都没有问题,包括格式化([url=]f_mkfs,前提是你的[/url][url=]disk_ioctl[/url] 没问题),测试
了下速度,读12.5M的MP3,大约3秒,写这个12.5M的MP3大约6.5秒,勉强达到要求,再优化下驱动那边就可以更快了!~~~~~~~

发个FatFs的官方网址 http://elm-chan.org/fsw/ff/00index_e.html

总结这次移植,差点失败就在于编译器的指针的转换问题,写出来,希望兄弟姐妹们在移植的时候不会遇到这种问题。
继承事业,薪火相传
返回列表