OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9634|回复: 8

FATFS文件系统的LFN功能

[复制链接]

26

主题

467

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
876
金钱
876
注册时间
2013-10-3
在线时间
23 小时
发表于 2014-2-22 13:38:13 | 显示全部楼层 |阅读模式
如题。。。百度了一下,感念还是很模糊,还有就是下面这些是在ffconf.h中截取的部分,,请问_USE_LFN的值在哪种情况下分别对应0~3啊,分别可以实现哪些功能的,,求指教啊????


#define _USE_LFN 1  /* 0 to 3 */
#define _MAX_LFN 255  /* Maximum LFN length to handle (12 to 255) */
/* The _USE_LFN option switches the LFN support.
/
/   0: Disable LFN feature. _MAX_LFN and _LFN_UNICODE have no effect.
/   1: Enable LFN with static working buffer on the BSS. Always NOT reentrant.
/   2: Enable LFN with dynamic working buffer on the STACK.
/   3: Enable LFN with dynamic working buffer on the HEAP.

避免犯错本是错误所在,我错故我在……
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-2-23 23:19:12 | 显示全部楼层
回复【3楼】zhang164534:
---------------------------------
你其实可以去分析源码.
如下:

#if _USE_LFN == 0 /* No LFN feature */
#define DEF_NAMEBUF BYTE sfn[12]
#define INIT_BUF(dobj) (dobj).fn = sfn
#define FREE_BUF()

#elif _USE_LFN == 1 /* LFN feature with static working buffer */
static WCHAR LfnBuf[_MAX_LFN+1];
#define DEF_NAMEBUF BYTE sfn[12]
#define INIT_BUF(dobj) { (dobj).fn = sfn; (dobj).lfn = LfnBuf; }
#define FREE_BUF()

#elif _USE_LFN == 2  /* LFN feature with dynamic working buffer on the stack */
#define DEF_NAMEBUF BYTE sfn[12]; WCHAR lbuf[_MAX_LFN+1]
#define INIT_BUF(dobj) { (dobj).fn = sfn; (dobj).lfn = lbuf; }
#define FREE_BUF()

#elif _USE_LFN == 3  /* LFN feature with dynamic working buffer on the heap */
#define DEF_NAMEBUF BYTE sfn[12]; WCHAR *lfn
#define INIT_BUF(dobj) { lfn = ff_memalloc((_MAX_LFN + 1) * 2); \
  if (!lfn) LEAVE_FF((dobj).fs, FR_NOT_ENOUGH_CORE); \
  (dobj).lfn = lfn; (dobj).fn = sfn; }
#define FREE_BUF() ff_memfree(lfn)

结合源码,再看作者的注释:
/   0: Disable LFN feature. _MAX_LFN and _LFN_UNICODE have no effect.
/   1: Enable LFN with static working buffer on the BSS. Always NOT reentrant.
/   2: Enable LFN with dynamic working buffer on the STACK.
/   3: Enable LFN with dynamic working buffer on the HEAP.

0,当然就是不支持长文件名了,节省空间.
1,支持长文件名,但不支持重入.
2,支持长文件名,工作区存放在STACK,也就是死数组里面.
3,支持长文件名,工作区采用动态内存管理,存放在HEAP,也就是必须实现动态内存管理.

当然方法3是最好的了.不用开个死数组,占茅坑.
1,就像你出门在外,没有厕所可以用,只能就地解决.当然这个时候,你绝对不会希望你上厕所的时候,别人也来上.
2,就像你有个固定的厕所了,基本只能自己用用,偶尔也可以给别人用.
3,就像公共厕所,不止你能用,大家都能用.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 1 反对 0

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2014-2-22 16:12:47 | 显示全部楼层
就是设置能否支持长文件名。0就Disable了,1~3设置工作缓冲区,由于我们使用时给长文件名动态分配内存,所以缓冲区放在堆内存(heap)
回复 支持 反对

使用道具 举报

26

主题

467

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
876
金钱
876
注册时间
2013-10-3
在线时间
23 小时
 楼主| 发表于 2014-2-23 22:31:06 | 显示全部楼层
回复【2楼】hechao3225:
---------------------------------
那这三个缓冲区分别怎么用啊??在实际应用中,,分别都有什么特点的吗??麻烦你还能再讲细一点吗???多谢…………
避免犯错本是错误所在,我错故我在……
回复 支持 反对

使用道具 举报

26

主题

467

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
876
金钱
876
注册时间
2013-10-3
在线时间
23 小时
 楼主| 发表于 2014-2-24 12:16:15 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
哦,,好的,,谢谢原子哥,,感觉整个工程挺庞大的,,所以没整体分析额,,
避免犯错本是错误所在,我错故我在……
回复 支持 反对

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2014-2-25 12:34:03 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
哈哈,原子哥的比喻好形象,好奇葩。。
回复 支持 反对

使用道具 举报

26

主题

467

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
876
金钱
876
注册时间
2013-10-3
在线时间
23 小时
 楼主| 发表于 2014-2-26 16:43:30 | 显示全部楼层
回复【6楼】hechao3225:
---------------------------------
原子哥,,问题如下: 
#define _FFCONF 4004 /* Revision ID */ 

ffconf.h文件中,请问_FFCONF定义ID的值是什么啊??为什么是4004,而与源码的“#define _FFCONF 82786”不同? 

// CAUTION! Do not forget to make clean the project after any changes to  the configuration options. 
整理工程指的是怎么整理啊,,我怎么感觉没什么好整理的啊???
避免犯错本是错误所在,我错故我在……
回复 支持 反对

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2014-2-26 17:23:44 | 显示全部楼层
回复【7楼】zhang164534:
---------------------------------
1.你@错了,请认准正点原子站长标志。。
2.Revision ID是作者更新软件后的修订号,他注释的意思是让你更新FATFS后注意哪些地方修改了。。你的工程也要对应修改
回复 支持 反对

使用道具 举报

26

主题

467

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
876
金钱
876
注册时间
2013-10-3
在线时间
23 小时
 楼主| 发表于 2014-2-26 22:43:16 | 显示全部楼层
回复【8楼】hechao3225:
---------------------------------
额 好的,,多谢你的解答啊,,呵呵,Thanks……
避免犯错本是错误所在,我错故我在……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-14 09:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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