关于Fatfs和汉字显示实验的一些疑问

2019-07-20 05:58发布

在汉字显示实验中有这样的一个函数:
//更新字体文件,UNIGBK,GBK12,GBK16,GBK24一起更新
//x,y:提示信息的显示地址
//size:字体大小
<1>//src:字库来源磁盘."0:",SD卡;"1:",FLASH盘,"2:",U盘.
//提示信息字体大小                                                                                  
//返回值:0,更新成功;
//其他,错误代码          
u8 update_font(u16 x,u16 y,u8 size,u8* src)
{       
        u8 *pname;
        u32 *buf;
        u8 res=0;                  
        u16 i,j;
        FIL *fftemp;
        u8 rval=0;
        res=0XFF;               
        ftinfo.fontok=0XFF;
        pname=mymalloc(SRAMIN,100);        //申请100字节内存  
        buf=mymalloc(SRAMIN,4096);        //申请4K字节内存  
        fftemp=(FIL*)mymalloc(SRAMIN,sizeof(FIL));        //分配内存       
        if(buf==NULL||pname==NULL||fftemp==NULL)
        {
                myfree(SRAMIN,fftemp);
                myfree(SRAMIN,pname);
                myfree(SRAMIN,buf);
                return 5;        //内存申请失败
        }
        //先查找文件是否正常
        <2>strcpy((char*)pname,(char*)src);        //copy src内容到pname。
               strcat((char*)pname,(char*)UNIGBK_PATH);//将UNIGBK文件复制到pname末尾。
        res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
        if(res)rval|=1<<4;//打开文件失败  
       
         ....(此处省略一大段)

        return rval;//无错误.                         
}



对于标注红字的部分不太了解。
1.在Fatfs文件系统中为什么要用"0:"、"1:" 这样的字符串来表示不同的磁盘,如f_mount(fs[0],"0:",1);
明明在diskio.c文件中的宏定义是这样的
#define SD_CARD         0  //SD卡,卷标为0
#define EX_FLASH 1        //外部flash,卷标为1
这两个宏定义是直接用0,1表示不同的磁盘,为什么在API函数就变了。

2.这个函数的入口参数*scr,究竟指向什么地方。在上面的解释(标注<1>)中说*scr的三个参数分别为"0:"、"1:"、"2:"表明字库来源的三个磁盘,是说
  *scr指向的是三个磁盘的首地址,还是说*scr指向三个磁盘中字库文件的首地址。

3.如果*scr指向的是三个磁盘首地址,那么标注<2>处的这两句话如何解释,我明白strcpy strcat这两个函数的意义,只是不明白这两个函数在这里
有什么意义,*pname究竟指向什么地方,在两句话中*pname中的数据又发生了什么样的变化呢。

4.如果*scr是指向三个磁盘中字库文件的首地址,那么这是否和Fatfs文件系统中的"0:"、"1:"相冲突,因为Fatfs文件系统中的"0:"、"1:"指代 的是不同的磁盘
  而非字库的首地址


在Fatfs文件系统中和汉字显示实验中有很多地方都有"0:"、"1:"这样的字符串,令我很困扰,希望能有大神解我心中之疑惑鄙人不胜感激








友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。