FATFS文件系统读取SD卡数据的问题

2019-08-17 02:57发布

我使用了FATFS文件系统操作SD卡,因为需要使用中文,所以用到了CC936.c这个文件,但是这个文件下两个数组很大,很占用单片机ROM,所以我想把它移出来,原子哥用的方法是放到外部存储器里面,但是现在我这边没有外接的存储器,所以想直接使用SD卡作为外部存储器,我觉得都是操作外部存储器,所以原理应该是相同的。但是我现在按照原子哥步骤读取数据,会出错。代码如下:
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;               
        u32 size = 0;
        u8 Temp = 0;
        FIL * fftemp;
        u8 *tempbuf;
        u32 bread = 0;               
       
        if (src < 0x80)
        {                
                c = src;//ASCII,直接不用转换
        }
        else
        {        
                fftemp = (FIL*)mymalloc(SRAMIN,sizeof(FIL));        //分配内存
               
                tempbuf = mymalloc(SRAMIN,4);                                //分配4个字节空间
               
                Temp = f_open(fftemp,(const TCHAR*)"0:/System/UNIGBK.BIN",FA_READ);//打开路径下的文件
                       
               
                if(Temp == FR_OK)
                {
                        size = f_size(fftemp);                        //获得文件大小
                       
                        if(dir)
                        {
                                gbk2uni_offset = size / 2;
                        }
                        else
                        {
                                gbk2uni_offset = 0;
                        }
                       
                        hi = size / 2;//对半开.
                       
                        hi = hi / 4 - 1;
                       
                        li = 0;
                       
                        for (n = 16; n; n--)
                        {
                                i = li + (hi - li) / 2;       
                               
                                f_lseek(fftemp,i * 4 + gbk2uni_offset);                   //根据地址偏移指针
                               
                                f_read(fftemp,tempbuf,4,(UINT *)&bread);                //读取数据

                                t[0] = *tempbuf;
                                t[0] <<= 8;                               //数据合成
                                t[0] |= *(tempbuf + 1);
                               
                                t[1] = *(tempbuf + 2);
                                t[1] <<= 8;
                                t[1] |= *(tempbuf + 3);                                                       
                               
                                if (src == t[0]) break;
                               
                                if (src > t[0])li = i;
                               
                                else hi = i;   
                        }                               
                        c = n ? t[1] : 0;
                       
                        f_close(fftemp);                   //关闭文件
                       
                        myfree(SRAMIN,fftemp);        //释放内存
                               
                        myfree(SRAMIN,tempbuf);        //释放内存                       
                }            
        }        
        return c;
}


下面是我调用的函数
Temp = mf_mkdir("0:/传感器数据");        //建立路径
但是这条语句没有成功
而且,我在反复实验时,最后那三条语句:释放内存 去掉,路径是可以创建的,但是中文名称不对,TXT文本的 中文是完全正确的。
我很奇怪,英文是没问题的,但是中文路径和 TXT文本中的中文内容,不是一样的创建原理?
还希望有过调试经验的前辈,不惜赐教一下,谢谢了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。