搜索
bottom↓
回复: 4

移植FatFs的怪问题。

[复制链接]

出0入0汤圆

发表于 2009-5-11 00:05:34 | 显示全部楼层 |阅读模式
最近一直在做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[0]+PT[1]*256);
                                                     }

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

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));        
}

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

}
void ST_DWORD(void *ptr,DWORD val)
{
    BYTE *PT = (BYTE*)ptr;
    PT[0]=(BYTE)(val%256);
    PT[1]=(BYTE)((val%65536)/256);
    PT[2]=(BYTE)((val%16777216)/65536);
    PT[3]=(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)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 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文件系统,而且出现了问题也会从内部实现得到解答。

出0入0汤圆

发表于 2009-5-11 08:06:43 | 显示全部楼层
楼主打开文件您用这条语句试试,我记得FATFS的用法与这个论坛里的FAT的用法不一样。。。。

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

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

出0入0汤圆

发表于 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</>

出0入0汤圆

 楼主| 发表于 2009-5-11 18:44:14 | 显示全部楼层
谢谢各位的指点,问题解决了,还真就是“问题应该是出在目录的标识上的,应该用“/”这个区分”。
一个这么简单的问题困扰了我这么长时间汗颜啊。再次对给我宝贵建议的朋友表示感谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 14:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表