在汉字显示实验中有这样的一个函数:
//更新字体文件,UNIGBK,GBK12,GBK16,GBK24一起更新
//x,y:提示信息的显示地址
//size:字体大小
<1>//src:字库来源磁盘.&quot;0:&quot;,SD卡;&quot;1:&quot;,FLASH盘,&quot;2:&quot;,U盘.
//提示信息字体大小
//返回值:0,更新成功;
//其他,错误代码
u8 update_font(u16 x,u16 y,u8 size,u8* src)
{ u8 *pname;u32 *buf;
u8 res=0u16 i,j;FIL *fftemp; u8 rval=0; res=0XFFftinfo.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文件系统中为什么要用&quot;0:&quot;、&quot;1:&quot; 这样的字符串来表示不同的磁盘,如f_mount(fs[0],&quot;0:&quot;,1);
明明在diskio.c文件中的宏定义是这样的
#define SD_CARD//SD卡,卷标为0
#define EX_FLASH 1;//外部flash,卷标为1
这两个宏定义是直接用0,1表示不同的磁盘,为什么在API函数就变了。
2.这个函数的入口参数*scr,究竟指向什么地方。在上面的解释(标注<1>)中说*scr的三个参数分别为&quot;0:&quot;、&quot;1:&quot;、&quot;2:&quot;表明字库来源的三个磁盘,是说
*scr指向的是三个磁盘的首地址,还是说*scr指向三个磁盘中字库文件的首地址。
3.如果*scr指向的是三个磁盘首地址,那么标注<2>处的这两句话如何解释,我明白strcpy和 strcat这两个函数的意义,只是不明白这两个函数在这里
有什么意义,*pname究竟指向什么地方,在两句话中*pname中的数据又发生了什么样的变化呢。
4.如果*scr是指向三个磁盘中字库文件的首地址,那么这是否和Fatfs文件系统中的&quot;0:&quot;、&quot;1:&quot;相冲突,因为Fatfs文件系统中的&quot;0:&quot;、&quot;1:&quot;指代 的是不同的磁盘
而非字库的首地址
在Fatfs文件系统中和汉字显示实验中有很多地方都有&quot;0:&quot;、&quot;1:&quot;这样的字符串,令我很困扰,希望能有大神解我心中之疑惑鄙人不胜感激 |