需要注意的是,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
总结这次移植,差点失败就在于编译器的指针的转换问题,写出来,希望兄弟姐妹们在移植的时候不会遇到这种问题。 |