移植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) 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文件系统,而且出现了问题也会从内部实现得到解答。 楼主打开文件您用这条语句试试,我记得FATFS的用法与这个论坛里的FAT的用法不一样。。。。
res = f_open(&fsrc, "sd/111.txt", FA_OPEN_EXISTING | FA_READ);
问题应该是出在目录的标识上的,应该用“/”这个区分。。 <a href="http://elm-chan.org/fsw/ff/en/filename.html">http://elm-chan.org/fsw/ff/en/filename.html</> 谢谢各位的指点,问题解决了,还真就是“问题应该是出在目录的标识上的,应该用“/”这个区分”。
一个这么简单的问题困扰了我这么长时间汗颜啊。再次对给我宝贵建议的朋友表示感谢!
页:
[1]