OpenEdv-开源电子网

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

Fatfs使用时长文件名的问题,能正常显示英文长文件名,不能正常显示中文长文件名

[复制链接]

9

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-6-11
在线时间
38 小时
发表于 2019-8-7 11:11:40 | 显示全部楼层 |阅读模式
10金钱
Fatfs使用时长文件名的问题,能正常显示英文长文件名,不能正常显示中文长文件名,装换表因为太大我放进FLASH中了,短中文文件名能正常显示,长中文文件名不能正常显示。以下是查找文件的程序
char FlieName[FILEMAXNUMBER][FILENAMEMAXLEN] = {0};
char FlieNamePath[FILEPATHMAXNUMBER][FILENAMEPATHMAXLEN] = {0};
char FlieNameInit[FILENAMEMAXLEN]="0:/MUSIC";
u8 MusicNumber = 0;

//查找指定路径下及子文件夹中的所有文件
//把.WAV格式的路径存储到FlieName数组中
/* Start node to be scanned (***also used as work area***) */
FRESULT scan_files (
    char* path        
)
{
    FRESULT res;
    DIR dir;
    UINT i;
    static FILINFO fno;

最佳答案

查看完整内容[请看2#楼]

去学习我们汉字显示,以及FATFS实验先。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2019-8-7 11:11:41 | 显示全部楼层
张彦雷 发表于 2019-8-13 10:47
0:/MUSIC/拔萝卜.MP3
0:/MUSIC/拔萝卜.WAV
0:/MUSIC/白龙马.MP3

去学习我们汉字显示,以及FATFS实验先。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-6-11
在线时间
38 小时
 楼主| 发表于 2019-8-7 11:13:18 | 显示全部楼层
@正点原子 原子哥,能抽空看下帮忙解决下吗?
回复

使用道具 举报

9

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-6-11
在线时间
38 小时
 楼主| 发表于 2019-8-7 11:17:01 | 显示全部楼层
char FlieName[FILEMAXNUMBER][FILENAMEMAXLEN] = {0};
char FlieNamePath[FILEPATHMAXNUMBER][FILENAMEPATHMAXLEN] = {0};
char FlieNameInit[FILENAMEMAXLEN]="0:/MUSIC";
u8 MusicNumber = 0;

//查找指定路径下及子文件夹中的所有文件
//把.WAV格式的路径存储到FlieName数组中
/* Start node to be scanned (***also used as work area***) */
FRESULT scan_files (
    char* path        
)
{
    FRESULT res;
    DIR dir;
    UINT i;
    static FILINFO fno;
                TCHAR *fn;

       
                #if _USE_LFN
                        fno.lfsize = _MAX_LFN * 2 + 1;
                        fno.lfname = mymalloc(fno.lfsize);
                #endif                  

    res = f_opendir(&dir, path);                       /* Open the directory */
               
    if (res == FR_OK)
                {
      for (;;)
                        {
                                        res = f_readdir(&dir, &fno);                   /* Read a directory item */
                               
                                        if (res != FR_OK || fno.fname[0] == 0)
                                                break;  /* Break on error or end of dir */
                                               
                                        #if _USE_LFN
                                                fn = *fno.lfname ? fno.lfname : fno.fname;
                                        #else
                                                fn = fno.fname;
                                        #endif
       
                                        printf1("%s/%s\n", path, fn);
                                        if (fno.fattrib & AM_DIR)
                                        {    /* It is a directory */
                                                i = strlen(path);
                                                sprintf(&path[i], "/%s", fn);       
                                                res = scan_files(path);                    /* Enter the directory */
                                                if (res != FR_OK)
                                                        break;
                                                path[i] = 0;
                                        }
                                        else
                                        {    /* It is a file. */
                                                printf1("%s/%s\n", path, fn);
                                                if(MusicNumber<FILEPATHMAXNUMBER)
                                                {                       
                                                        if(strcpy(FlieNamePath[MusicNumber], path))       
                                                        {
                                                                u8 type;
                                                                type=f_typetell((u8*)fn);
                                                                //printf1("%d\r\n",type);
                                                                //文件名是WAV结尾的
                                                                if( type == 0x4A)
                                                                {
                                                                        strcpy(FlieName[MusicNumber],fn);
                                                                        //printf1("%s\r\n",FlieName[MusicNumber]);
                                                                        strcat(FlieNamePath[MusicNumber], "/");
                                                                        strcat(FlieNamePath[MusicNumber], fn);
                                                                        //printf1("%s\r\n",FlieNamePath[MusicNumber]);
                                                                        MusicNumber++;
                                                                }
                                                        }
                                                        else
                                                        {
                                                                break;
                                                        }
                                                }
                                                else
                                                {
                                                        break;
                                                }
                                        }
       }                               
       f_closedir(&dir);
    }
                myfree(fno.lfname);
    return res;
}
回复

使用道具 举报

9

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-6-11
在线时间
38 小时
 楼主| 发表于 2019-8-7 11:17:38 | 显示全部楼层
张彦雷 发表于 2019-8-7 11:17
char FlieName[FILEMAXNUMBER][FILENAMEMAXLEN] = {0};
char FlieNamePath[FILEPATHMAXNUMBER][FILENAMEPA ...

//把字库存放在外部FLASH中

#define Font_SPI_Flash_Read(pBuffer,ReadAddr,NumByteToRead)        W25QXX_SPI_Flash_Read(pBuffer,ReadAddr,NumByteToRead);   //读取flash


typedef struct
{
        u32 ugbkaddr;
        u32 ugbksize;
}_font_info;

_font_info ftinfo={0,174344};

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
                {//oem2uni在后半部分存储
                        gbk2uni_offset=ftinfo.ugbksize/2;         
                }else        //UNICODE 2 GBK  
                {  //uni2oem 在前半部分存储
                        gbk2uni_offset=0;
                }
                //if(UK_FLAG)//存在                     
                {
                        /* Unicode to OEMCP */
                        hi=ftinfo.ugbksize/2;//对半开.
                        hi =hi / 4 - 1;
                        li = 0;
                        for (n = 16; n; n--)
                        {
                                i = li + (hi - li) / 2;       
                                Font_SPI_Flash_Read((u8*)&t,ftinfo.ugbkaddr+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;
}
回复

使用道具 举报

9

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-6-11
在线时间
38 小时
 楼主| 发表于 2019-8-7 11:18:45 | 显示全部楼层
本帖最后由 张彦雷 于 2019-8-7 11:21 编辑
张彦雷 发表于 2019-8-7 11:17
//把字库存放在外部FLASH中

#define Font_SPI_Flash_Read(pBuffer,ReadAddr,NumByteToRead)        W25QXX_SP ...
//用来烧写字库
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "key.h"
#include "spi.h"
#include "flash.h"

extern u32 oem2unifontSize;
extern u32 uni2oemfontSize;
extern const unsigned int *oem2unifontp;
extern const unsigned int *uni2oemfontp;

void fontInit(void);
//要写入到W25Q64的字符串数组
const u8 TEXT_Buffer[]={"MiniSTM32 SPI TEST"};
#define SIZE sizeof(TEXT_Buffer)         
int main(void)
{
        u8 key;
        u16 i=0;
        u8 datatemp[SIZE];
        u32 FLASH_SIZE;
        delay_init();                     //延时函数初始化         
        uart_init(115200);                 //串口初始化为9600
        LED_Init();                                  //初始化与LED连接的硬件接口
//         LCD_Init();
        KEY_Init();                                //按键初始化                        
        SPI_Flash_Init();                  //SPI FLASH 初始化         
        fontInit();
        while(SPI_Flash_ReadID()!=W25Q64)                                                        //检测不到W25Q64
        {
                delay_ms(500);
                LED0=!LED0;//DS0闪烁
        }
        FLASH_SIZE=8*1024*1024;        //FLASH 大小为8M字节
        while(1)
        {
                key=KEY_Scan(0);
                if(key==WKUP_PRES)        //WK_UP 按下,写入W25Q64
                {
                        printf("Start Write W25Q64....");
                        //SPI_Flash_Write((u8*)TEXT_Buffer,FLASH_SIZE-100,SIZE);                //从倒数第100个地址处开始,写入SIZE长度的数据
                        //Unicode转GBK表的首地址
                        SPI_Flash_Write((u8*)uni2oemfontp,0,uni2oemfontSize);
                        printf("%d",oem2unifontSize);        
                        
                        //oem2uni在后面,地址接着前面的地址GBK转Unicode表的首地址为uni2oemfontSize
                        SPI_Flash_Write((u8*)oem2unifontp,uni2oemfontSize,oem2unifontSize);
                        
                        printf("%d",uni2oemfontSize);        
                        printf("W25Q64 Write Finished!");        
                }
                if(key==KEY0_PRES)        //KEY0 按下,读取字符串并显示
                {
                         printf("Start Read W25Q64.... ");
                        SPI_Flash_Write((u8*)TEXT_Buffer,0,sizeof(TEXT_Buffer));
                        SPI_Flash_Read(datatemp,0,sizeof(TEXT_Buffer));
                        printf("The Data Readed Is:  ");        
                        printf("%s",datatemp);                        
                }
                i++;
                delay_ms(10);
                if(i==20)
                {
                        LED1=!LED1;//提示系统正在运行        
                        i=0;
                }                  
        }
}

回复

使用道具 举报

9

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-6-11
在线时间
38 小时
 楼主| 发表于 2019-8-7 11:19:10 | 显示全部楼层
张彦雷 发表于 2019-8-7 11:18
#include "led.h"
#include "delay.h"
#include "sys.h"

u32 oem2unifontSize=0;
u32 uni2oemfontSize=0;
const u16 *oem2unifontp;
const u16 *uni2oemfontp;
void fontInit(void)
{
        oem2unifontSize = sizeof(oem2uni);
        uni2oemfontSize = sizeof(uni2oem);
        oem2unifontp = oem2uni;
        uni2oemfontp = uni2oem;
}
回复

使用道具 举报

9

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-6-11
在线时间
38 小时
 楼主| 发表于 2019-8-7 11:20:14 | 显示全部楼层
本帖最后由 张彦雷 于 2019-8-7 11:26 编辑

第一次发的出现错误重新发了,这些是关键代码,显示的是下面的内容0:/MUSIC/拔萝卜.MP3
0:/MUSIC/拔萝卜.MP3
0:/MUSIC/拔萝卜.WAV
0:/MUSIC/拔萝卜.WAV
0:/MUSIC/白龙马.MP3
0:/MUSIC/白龙马.MP3
0:/MUSIC/白龙马.WAV
0:/MUSIC/白龙马.WAV
0:/MUSIC/做的好.MP3
0:/MUSIC/做的好.MP3
0:/MUSIC/做的好.WAV
0:/MUSIC/做的好.WAV
0:/MUSIC/祝你生~1.MP3
0:/MUSIC/祝你生~1.MP3
0:/MUSIC/祝你生~1.WAV
0:/MUSIC/祝你生~1.WAV
0:/MUSIC/ABCDEFGHIGKLMNOPQRSTUVWXYZ.wav
0:/MUSIC/ABCDEFGHIGKLMNOPQRSTUVWXYZ.wav

祝你生日快乐这个显示不全,下面的英文显示全了



回复

使用道具 举报

9

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-6-11
在线时间
38 小时
 楼主| 发表于 2019-8-7 11:28:53 | 显示全部楼层
@正点原子 @openedvadmin
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2019-8-9 02:44:11 | 显示全部楼层
张彦雷 发表于 2019-8-7 11:28
@正点原子 @openedvadmin

CC936支持没做好,参考我们的汉字显示实验。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-6-11
在线时间
38 小时
 楼主| 发表于 2019-8-12 15:44:17 | 显示全部楼层
正点原子 发表于 2019-8-9 02:44
CC936支持没做好,参考我们的汉字显示实验。

主要是产品上用的,我通过测试CC936那两个码表输出和数组里面的值一样,就是参考的汉字显示试验,只是没有对W25Q64做文件系统,是直接把两个数组写到W25Q64中的,修改的地方也就是两个表的地址,英文长文件名能正常显示,中文的显示和显示短文件名一样,这个感觉不是CC936的问题吧,不然英文也不能显示长文件名了,这个读取长文件名返回的是0,说明长文件名什么也没有,CC936用的也是mycc936.
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2019-8-13 02:26:13 | 显示全部楼层
张彦雷 发表于 2019-8-12 15:44
主要是产品上用的,我通过测试CC936那两个码表输出和数组里面的值一样,就是参考的汉字显示试验,只是没 ...

就是936的问题。你不用936,也可以支持英文长文件名的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-6-11
在线时间
38 小时
 楼主| 发表于 2019-8-13 10:23:14 | 显示全部楼层
正点原子 发表于 2019-8-13 02:26
就是936的问题。你不用936,也可以支持英文长文件名的。


#define Font_SPI_Flash_Read(pBuffer,ReadAddr,NumByteToRead)        W25QXX_SPI_Flash_Read(pBuffer,ReadAddr,NumByteToRead);   //读取flash

typedef struct
{
        u32 ugbkaddr;
        u32 ugbksize;
}_font_info;

_font_info ftinfo={0,174344};

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
                {//oem2uni在后半部分存储
                        gbk2uni_offset=ftinfo.ugbksize/2;         
                }else        //UNICODE 2 GBK  
                {  //uni2oem 在前半部分存储
                        gbk2uni_offset=0;
                }
                //if(UK_FLAG)//存在                     
                {
                        /* Unicode to OEMCP */
                        hi=ftinfo.ugbksize/2;//对半开.
                        hi =hi / 4 - 1;
                        li = 0;
                        for (n = 16; n; n--)
                        {
                                i = li + (hi - li) / 2;       
                                Font_SPI_Flash_Read((u8*)&t,ftinfo.ugbkaddr+i*4+gbk2uni_offset,4);//读出8个字节  
                                if (src == t[0]) break;
                                if (src > t[0])li = i;  
                                else hi = i;  
                                IWDG_Feed();
                        }
                        c = n ? t[1] : 0;  
                }
                //else c=0;
        }
        return c;
}

WCHAR ff_wtoupper (        /* Upper converted character */
        WCHAR chr                /* Input character */
)
{
        static const WCHAR tbl_lower[] = { 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0xA1, 0x00A2, 0x00A3, 0x00A5, 0x00AC, 0x00AF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0x0FF, 0x101, 0x103, 0x105, 0x107, 0x109, 0x10B, 0x10D, 0x10F, 0x111, 0x113, 0x115, 0x117, 0x119, 0x11B, 0x11D, 0x11F, 0x121, 0x123, 0x125, 0x127, 0x129, 0x12B, 0x12D, 0x12F, 0x131, 0x133, 0x135, 0x137, 0x13A, 0x13C, 0x13E, 0x140, 0x142, 0x144, 0x146, 0x148, 0x14B, 0x14D, 0x14F, 0x151, 0x153, 0x155, 0x157, 0x159, 0x15B, 0x15D, 0x15F, 0x161, 0x163, 0x165, 0x167, 0x169, 0x16B, 0x16D, 0x16F, 0x171, 0x173, 0x175, 0x177, 0x17A, 0x17C, 0x17E, 0x192, 0x3B1, 0x3B2, 0x3B3, 0x3B4, 0x3B5, 0x3B6, 0x3B7, 0x3B8, 0x3B9, 0x3BA, 0x3BB, 0x3BC, 0x3BD, 0x3BE, 0x3BF, 0x3C0, 0x3C1, 0x3C3, 0x3C4, 0x3C5, 0x3C6, 0x3C7, 0x3C8, 0x3C9, 0x3CA, 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, 0x438, 0x439, 0x43A, 0x43B, 0x43C, 0x43D, 0x43E, 0x43F, 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, 0x448, 0x449, 0x44A, 0x44B, 0x44C, 0x44D, 0x44E, 0x44F, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457, 0x458, 0x459, 0x45A, 0x45B, 0x45C, 0x45E, 0x45F, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x217A, 0x217B, 0x217C, 0x217D, 0x217E, 0x217F, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58, 0xFF59, 0xFF5A, 0 };
        static const WCHAR tbl_upper[] = { 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x21, 0xFFE0, 0xFFE1, 0xFFE5, 0xFFE2, 0xFFE3, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0x178, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10A, 0x10C, 0x10E, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11A, 0x11C, 0x11E, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12A, 0x12C, 0x12E, 0x130, 0x132, 0x134, 0x136, 0x139, 0x13B, 0x13D, 0x13F, 0x141, 0x143, 0x145, 0x147, 0x14A, 0x14C, 0x14E, 0x150, 0x152, 0x154, 0x156, 0x158, 0x15A, 0x15C, 0x15E, 0x160, 0x162, 0x164, 0x166, 0x168, 0x16A, 0x16C, 0x16E, 0x170, 0x172, 0x174, 0x176, 0x179, 0x17B, 0x17D, 0x191, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, 0x398, 0x399, 0x39A, 0x39B, 0x39C, 0x39D, 0x39E, 0x39F, 0x3A0, 0x3A1, 0x3A3, 0x3A4, 0x3A5, 0x3A6, 0x3A7, 0x3A8, 0x3A9, 0x3AA, 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, 0x418, 0x419, 0x41A, 0x41B, 0x41C, 0x41D, 0x41E, 0x41F, 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, 0x428, 0x429, 0x42A, 0x42B, 0x42C, 0x42D, 0x42E, 0x42F, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, 0x408, 0x409, 0x40A, 0x40B, 0x40C, 0x40E, 0x40F, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216A, 0x216B, 0x216C, 0x216D, 0x216E, 0x216F, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, 0xFF39, 0xFF3A, 0 };
        int i;


        for (i = 0; tbl_lower && chr != tbl_lower; i++) ;

        return tbl_lower ? tbl_upper : chr;
}
这个程序就和汉字试验的一样的,就是CC936的变换表我放W25Q64中了,直接把地址和大小自定义了一下而已呀,转换表我专门读W25Q64,读出的数据和那两个表一样呀!没发现哪里有问题呀,长文件名我也允许使用了,即使转换表有问题,那也不应该汉字显示的是短文件名呀,长文件名单独读出来是0,最多读出来是乱码吧
回复

使用道具 举报

9

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-6-11
在线时间
38 小时
 楼主| 发表于 2019-8-13 10:26:19 | 显示全部楼层
正点原子 发表于 2019-8-13 02:26
就是936的问题。你不用936,也可以支持英文长文件名的。

会不会和我没有用汉字字库有关呀,我里面是没有字库的
回复

使用道具 举报

9

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-6-11
在线时间
38 小时
 楼主| 发表于 2019-8-13 10:47:45 | 显示全部楼层
正点原子 发表于 2019-8-13 02:26
就是936的问题。你不用936,也可以支持英文长文件名的。

0:/MUSIC/拔萝卜.MP3
0:/MUSIC/拔萝卜.WAV
0:/MUSIC/白龙马.MP3
0:/MUSIC/白龙马.WAV
0:/MUSIC/做的好.MP3
0:/MUSIC/做的好.WAV
0:/MUSIC/祝你生~1.MP3
0:/MUSIC/祝你生~1.WAV
0:/MUSIC/ABCDEF~1.WAV

这是我把_USE_LFN定义为0时显示的内容,定义为3时,英文那个能显示完,中文那个和定义3时显示的一样,我把_CODE_PAGE 由936定义改为1,使用ASCII码时显示的也是这,按理说这个时候不是不能显示中文了吗?怎么还是显示的是中文?
回复

使用道具 举报

9

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-6-11
在线时间
38 小时
 楼主| 发表于 2019-8-14 08:47:48 | 显示全部楼层
正点原子 发表于 2019-8-14 02:27
去学习我们汉字显示,以及FATFS实验先。

好的,我再看一遍
回复

使用道具 举报

9

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-6-11
在线时间
38 小时
 楼主| 发表于 2019-8-14 09:02:04 | 显示全部楼层
正点原子 发表于 2019-8-13 02:26
就是936的问题。你不用936,也可以支持英文长文件名的。

R0.12 (April 12, 2016)
  Added support for exFAT file system. (_FS_EXFAT)
  Added f_expand(). (_USE_EXPAND)
  Changed some members in FINFO structure and behavior of f_readdir().
  Added an option _USE_CHMOD and removed an option _WORD_ACCESS.
  Fixed errors in the case conversion teble of Unicode (cc*.c).

R0.11a (September 5, 2015)
  Fixed wrong media change can lead a deadlock at thread-safe configuration.
  Added code page 771, 860, 861, 863, 864, 865 and 869. (_CODE_PAGE)
  Removed some code pages actually not exist on the standard systems. (_CODE_PAGE)
  Fixed errors in the case conversion teble of code page 437 and 850 (ff.c).
  Fixed errors in the case conversion teble of Unicode (cc*.c).

这些更新是不是更新转换表的,我看转换表的第二个函数有变化
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 02:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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