OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5503|回复: 4

求助汉子显示实验里的fontupd.c中的updata_fontx()的问题

[复制链接]

54

主题

136

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
404
金钱
404
注册时间
2014-3-6
在线时间
41 小时
发表于 2014-8-18 18:52:53 | 显示全部楼层 |阅读模式
5金钱
u8 updata_fontx(u8 *fxpath,u8 fx)
{。。
u32 flashaddr=0;
  u32 tempsys[2];  
FIL * fftemp;
  u8 res;
u16 bread;
u32 offx=0;
fftemp=&gbkFile;
if(fftemp==NULL)return 1; 
  res=f_open(fftemp,(const TCHAR*)fxpath,FA_READ); 
  if(res)//
{
f_close(fftemp);
return 2;//???????§
}
if(fftemp==NULL)return 2;

if(fx==0)//?ü??UNI2GBK.SYS
{
  tempsys[0]=ftinfo.ugbkaddr; //UNIGBK??·????·
tempsys[1]=fftemp->fsize;   //UNIGBK ?ó??
SPI_Flash_Write((u8*)tempsys,FONTINFOADDR,8); //?????????·FONTINFOADDR+1~8??
flashaddr=ftinfo.ugbkaddr;
}else//GBK16
{
SPI_Flash_Read((u8*)tempsys,FONTINFOADDR,8);    
tempsys[0]=flashaddr; //
tempsys[1]=fftemp->fsize;   //GBK16 ?ó??
SPI_Flash_Write((u8*)tempsys,FONTINFOADDR+8,8); //?????????·FONTINFOADDR+1~8+16??
}


while(res==FR_OK)//
{
res=f_read(fftemp,temp,1024,(UINT *)&bread);
if(res!=FR_OK)break; 
SPI_Flash_Write(temp,offx+flashaddr,1024);// 
  offx+=bread;  
fupd_prog(fftemp->fsize,offx); //
if(bread!=1024)break; //
 } 


}为什么到最后了会有这一段,还有就是不理解“if(bread!=1024)break;”这一句,我追踪到f_read()函数里边,但是也找不到原因,难道一定要等到bread不能与1024就结束吗,那一开始bread等于多少,它有事怎么变化的!!

最佳答案

查看完整内容[请看2#楼]

回复【3楼】春和景明: --------------------------------- 因为字库是从SD卡更新到外部FLASH 自然是读取SD卡数据,写入到SPI FLASH了。 每次读1024字节。 如果读取的数据,少于1024字节了,说明这个文件读完了,也就可以退出while循环了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-18 18:52:54 | 显示全部楼层
回复【3楼】春和景明:
---------------------------------
因为字库是从SD卡更新到外部FLASH
自然是读取SD卡数据,写入到SPI FLASH了。
每次读1024字节。
如果读取的数据,少于1024字节了,说明这个文件读完了,也就可以退出while循环了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-8-18 19:25:37 | 显示全部楼层
bread是读取的数量计数的参数
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

54

主题

136

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
404
金钱
404
注册时间
2014-3-6
在线时间
41 小时
 楼主| 发表于 2014-8-18 21:33:44 | 显示全部楼层
回复【2楼】Badu_Space:
---------------------------------
老师,那我想问这段函数(红色的)有什么意义呢,这个函数是更新函数,为什么要读f_read,然后写入外部flash,而且这其中还有进度显示函数
(fupd_prog(fftemp->fsize,offx);)进度=offx/fftemp->fsize;而且offx+=bread;那bread是怎么变化的,他是1,2,3,4.。。。还是一直等于1024,1024。。。。如果是前者的话那经理一边就跳出while,如果是后者就是死循环,好像都不对啊!!!
回复

使用道具 举报

54

主题

136

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
404
金钱
404
注册时间
2014-3-6
在线时间
41 小时
 楼主| 发表于 2014-8-19 10:05:49 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
谢谢,我明白了!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-3 19:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表