fatfs移植,打开文件时返回FR_INVALID_OBJECT

2019-08-17 08:01发布

移植fatfs时,挂载没问题f_mount(0,fs0);返回0,打开文件res = f_open(filesrc,"0:/src.txt",FA_WRITE);(这个文件已在SD卡中),返回9,FR_INVALID_OBJECT。可能是什么原因?SD卡检测和读容量没有问题,ffconf.h中设置#define _USE_LFN 0,#define _CODE_PAGE 1(ASCII only)。这样设置后需要加什么像cc936.c这种转码文件吗?或者还需要什么设置?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
风溪香士
1楼-- · 2019-08-17 10:36
回复【8楼】正点原子:
---------------------------------
确实是指针出了问题。我直接定义的指针就拿来用了。将指针filesrc作为res = f_open(filesrc,"0:src.txt",FA_OPEN_ALWAYS|FA_WRITE);的参数,因为filesrc只定义没给值,初值为0,进入函数f_open后有一句if (!fp) return FR_INVALID_OBJECT;,因为fp即是filesrc,为0,所以返后了9号错误。
若定义FIL filesrc;,再调用函数res = f_open(&filesrc,"0:src.txt",FA_OPEN_ALWAYS|FA_WRITE);,就会返回12错误,因为进入函数f_openc中的函数hk_mounted,里面有两句fs = FatFs[vol];if (!fs) return FR_NOT_ENABLED;,fs应该就是驱动器挂载的指针,即fs0,也是只定义没赋值,为0,所以返回12号错误。
我看原子哥的的例程,写的是f_mount(0,fs[0]);,fs[0]是指针,所以就想当然在自己的程序中直接用指针了,没注意到其实原子哥在exfuns.c中的函数exfuns_init中给数组fs分配了内存。
shihantu
2楼-- · 2019-08-17 11:11
filesrc是指针吗?
风溪香士
3楼-- · 2019-08-17 15:26
回复【2楼】shihantu:
---------------------------------
是的。
ofourme
4楼-- · 2019-08-17 18:25
 精彩回答 2  元偷偷看……
风溪香士
5楼-- · 2019-08-17 20:53
回复【4楼】ofourme:
---------------------------------
加了FA_OPEN_ALWAYS之后也是这样,是路径的格式不对吗?我看到有些写的是"0:src.txt"。
yongyooh
6楼-- · 2019-08-18 00:02
#define _CODE_PAGE 改成437试试

一周热门 更多>