在汉字显示实验中有这样的一个函数:
//更新字体文件,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:"这样的字符串,令我很困扰,希望能有大神解我心中之疑惑鄙人不胜感激
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
//x,y:提示信息的显示地址
//size:字体大小
//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; //内存申请失败
}
//先查找文件是否正常
//printf(" pname之前的内容是:%s",(char*)pname);
//printf(" src的内容是:%s",(char*)src);
/* *src的取值为"0:"、"1:"、和"2:",所以这里面的内容实际上就是0:、1:、2:。
*pname尚未赋值,其值为空,在串口中打印不出数据。事实说明除非在Fatfs文件
系统的API函数中"0:"、"1:"这样的字符串表示磁盘的种类,在其他的函数中,这
样的字符串仅仅是字符串而已,并无特殊含义。*/
strcpy((char*)pname,(char*)src); //copy src内容到pname。
//printf(" pname之后的内容是: %s",(char*)pname);
/*原型声明:char *strcpy(char* dest, const char *src);
头文件:#include "string.h"
功能:把从src地址开始且含有"