fatfs 长文件名的问题

2019-10-14 21:49发布

我用的是fatfs0.07版本,需要用到长文件名。程序中
#define _USE_LFN 1 /* 0, 1 or 2 */
#define _MAX_LFN 255 /* Maximum LFN length to handle (12 to 255) */
#define _LFN_UNICODE 0 /* 0 or 1 */
编译之后存在这样的错误提示:
........STM324xG-EVAL_FS.axf: Error: L6218E: Undefined symbol ff_convert (referred from ff.o).
........STM324xG-EVAL_FS.axf: Error: L6218E: Undefined symbol ff_wtoupper (referred from ff.o).
这两个函数没有定义,我上网搜了一下这两个函数copy过来,但是又提示函数中的一些调用函数和变量未定义,如果全部自己再编写的话,太麻烦了。
我想弄个 长文件名有这么麻烦吗?
fatfs 0.09版本的是不是不存在这个问题了?
我到底怎么才能实现长文件名啊?
请大家帮帮忙啊,感激至极。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
lxrhy198308
1楼-- · 2019-10-14 22:40
据说要添加cc936.c文件,这个文件从哪里下?
lxrhy198308
2楼-- · 2019-10-14 22:52
原子哥,给指点一下吧,我下载的:开源电子标准例程  里面的fatfs版本还是0.04的。有没有最新的例程啊?
我的 长文件名都是英文的,不需要中文。
jackielau
3楼-- · 2019-10-15 01:10
长文件名,如果要支持中文,需要#define _LFN_UNICODE 1,加入cc936.c,cc936里面有两个关键的函数ff_convert ()ff_wtoupper (),flash小的不行,可以将cc936中的转换表放到外部SPI Flash,自己修改ff_convert ()ff_wtoupper ()两个函数!就行了
jackielau
4楼-- · 2019-10-15 04:19
//通过预先向SPIFLASH中写入GBK和UNICODE的转换表,实现转换,从而支持中文长文件名!
WCHAR ff_convert ( // Converted code, 0 means conversion error 
WCHAR src, // Character code to be converted 
UINT dir // 0: Unicode to OEMCP, 1: OEMCP to Unicode 
)
{
WCHAR t[2];
WCHAR c;
u32 i, li, hi;
u16 n;  
u32 gbk2uni_offset=0;   
  
if (src < 0x80)
c = src;//ASCII,直接不用转换.
else 
{

  if(dir) //GBK 2 UNICODE
{
gbk2uni_offset=UNI2GBK_SIZE/2;
src = (src>>8)|(src<<8);
}
else //UNICODE 2 GBK  
{   
gbk2uni_offset=0;
}
//if(UK_FLAG)//存在      
{
/* Unicode to OEMCP */
hi=UNI2GBK_SIZE/2;//对半开.
hi =hi / 4 - 1; //原尺寸是字节单位,除以4,变成两对字
li = 0;
for (n = 16; n; n--)
{
i = li + (hi - li) / 2;
SPI_Flash_Read((u8*)&t,UNI2GBKADDR+i*4+gbk2uni_offset,4);//读出8个字节  
if (src == t[0]) 
break;
if (src > t[0])
li = i;  
else 
hi = i;    
}
c = n ? t[1]: 0;  
  }
//else c=0;
}
return c;
}
lxrhy198308
5楼-- · 2019-10-15 07:36
 精彩回答 2  元偷偷看……
jackielau
6楼-- · 2019-10-15 08:31
#define _CODE_PAGE 0
这个地方是什么??如果是936是不是就不行啊

一周热门 更多>