打印

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

[复制链接]
314|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
丑帅丑帅的|  楼主 | 2018-7-12 08:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在汉字显示实验中有这样的一个函数:
//更新字体文件,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=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文件系统中为什么要用"0:"、"1:" 这样的字符串来表示不同的磁盘,如f_mount(fs[0],"0:",1);
明明在diskio.c文件中的宏定义是这样的
#define SD_CARD//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:"这样的字符串,令我很困扰,希望能有大神解我心中之疑惑鄙人不胜感激

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

741

主题

742

帖子

0

粉丝