chenguozi 发表于 2009-5-11 00:05:34

移植FatFs的怪问题。

最近一直在做FatFs在LPC2368上的移植。基本上没什么问题。可是在打开文件的时候只能打开根目录的
如:res = f_open(&fsrc, "111.txt", FA_OPEN_EXISTING | FA_READ);
如果打开不在根目录就出现错误
比如:
res = f_open(&fsrc, "sd\111.txt", FA_OPEN_EXISTING | FA_READ);
res=0x02,说明是找不到这个文件,实际上我卡上时有这个目录和文件的。
我用的FatFs是07a的版本。应该是没问题的。我只做了很小的改动。
只加了
WORD LD_WORD(void *pt)
{
    BYTE *PT = (BYTE*)pt;   
    return (WORD)(PT+PT*256);
                                                   }

DWORD LD_DWORD(void *pt)
{
    BYTE *PT = (BYTE*)pt;
    return ((DWORD)PT+(DWORD)(PT*256)+(DWORD)(PT*65536)+(DWORD)(PT*16777216));      
}

WORD LD_WORD_1(const BYTE *pt)
{
    BYTE *PT = (BYTE*)pt;
    return (WORD)(PT+PT*256);
}

DWORD LD_DWORD_1(const BYTE *pt)
{
    BYTE *PT = (BYTE*)pt;
    return ((DWORD)PT+(DWORD)(PT*256)+(DWORD)(PT*65536)+(DWORD)(PT*16777216));      
}

void ST_WORD(void *ptr,WORD val)
{
    BYTE *PT = (BYTE*)ptr;
    PT=(BYTE)(val%256);
    PT=(BYTE)(val/256);

}
void ST_DWORD(void *ptr,DWORD val)
{
    BYTE *PT = (BYTE*)ptr;
    PT=(BYTE)(val%256);
    PT=(BYTE)((val%65536)/256);
    PT=(BYTE)((val%16777216)/65536);
    PT=(BYTE)(val/16777216);

}
这样几个函数来代替原来的宏定义。怎么会有这样的错误呢。

怀疑是编译器的问题,我用的是
IDE-Version:
礦ision3 V3.34
Copyright (c) Keil Elektronik GmbH / Keil Software, Inc. 1995 - 2006
Tool Version Numbers:
Toolchain Path:    C:\Keil\ARM\BIN30\
C Compiler:         ARMCC.Exe       V3.0.0.947
Assembler:          ARMASM.Exe       V3.0.0.947
Linker/Locator:   ARMLINK.Exe       V3.0.0.947
Librarian:          ARMAR.Exe       V3.0.0.947
Hex Converter:      FROMELF.Exe       V3.0.0.947
CPU DLL:            SARM.DLL       V3.03
Dialog DLL:         DARMP.DLL       V1.12
Target DLL:         BIN\UL2ARM.DLL       V1.22
Dialog DLL:         TARMP.DLL       V1.11f

希望那位做过的朋友指点一下

源文件ourdev_443979.rar(文件大小:342K) (原文件名:SD.rar)

ffxz 发表于 2009-5-11 06:51:16

f_open(&fsrc, "sd\111.txt", FA_OPEN_EXISTING | FA_READ);
-->
f_open(&fsrc, "sd\\111.txt", FA_OPEN_EXISTING | FA_READ);
or
f_open(&fsrc, "sd/111.txt", FA_OPEN_EXISTING | FA_READ);

瞎猜的,可以试试。没用过FatFs,不过可以考虑用RT-Thread和里面的DFS-EFSL文件系统,而且出现了问题也会从内部实现得到解答。

_yuming 发表于 2009-5-11 08:06:43

楼主打开文件您用这条语句试试,我记得FATFS的用法与这个论坛里的FAT的用法不一样。。。。

res = f_open(&fsrc, "sd/111.txt", FA_OPEN_EXISTING | FA_READ);

问题应该是出在目录的标识上的,应该用“/”这个区分。。

aozima 发表于 2009-5-11 08:10:58

<a href="http://elm-chan.org/fsw/ff/en/filename.html">http://elm-chan.org/fsw/ff/en/filename.html</>

chenguozi 发表于 2009-5-11 18:44:14

谢谢各位的指点,问题解决了,还真就是“问题应该是出在目录的标识上的,应该用“/”这个区分”。
一个这么简单的问题困扰了我这么长时间汗颜啊。再次对给我宝贵建议的朋友表示感谢!
页: [1]
查看完整版本: 移植FatFs的怪问题。