中级会员
 
- 积分
- 291
- 金钱
- 291
- 注册时间
- 2013-5-2
- 在线时间
- 4 小时
|

楼主 |
发表于 2013-11-25 10:51:19
|
显示全部楼层
回复【9楼】正点原子:
---------------------------------
我仿真了,但是没看出什么问题,我单独更新20*20的字库,当更新进度更新到99%的时候还是正常的,可是一到100%就马上显示更新失败了。不知是什么原因啊!这是我单独更新20*20字库的修改的程序,原子哥你给看下是不是哪里有问题?
if(rval==0)
{
if(fx==0) //更新UNIGBK.BIN
{
ftinfo.ugbkaddr=FONTINFOADDR+sizeof(ftinfo);//信息头之后,紧跟UNIGBK转换码表
ftinfo.ugbksize=fftemp->fsize; //UNIGBK大小
flashaddr=ftinfo.ugbkaddr;
}else if(fx==3)
{
ftinfo.f20addr=ftinfo.ugbkaddr+ftinfo.ugbksize;
ftinfo.gbk20size=fftemp->fsize;
flashaddr=ftinfo.f20addr;
}
while(res==FR_OK)//死循环执行
{
res=f_read(fftemp,tempbuf,4096,(UINT *)&bread); //读取数据
if(res!=FR_OK)break; //执行错误
SPI_Flash_Write(tempbuf,offx+flashaddr,bread); //从0开始写入4096个数据
offx+=bread;
fupd_prog(x,y,size,fftemp->fsize,offx); //进度显示
if(bread!=4096)break; //读完了.
}
f_close(fftemp);
}
u8 update_font(u16 x,u16 y,u8 size,u8 src)
{
u8 *gbk16_path;
u8 *gbk12_path;
u8 *gbk24_path;
u8 *gbk20_path;
u8 *unigbk_path;
u8 res;
if(src)//从25qxx更新
{
unigbk_path=(u8*)UNIGBK_25QPATH;
gbk12_path=(u8*)GBK12_25QPATH;
gbk16_path=(u8*)GBK16_25QPATH;
gbk20_path=(u8*)GBK20_25QPATH;
gbk24_path=(u8*)GBK24_25QPATH;
}else//从sd卡更新
{
unigbk_path=(u8*)UNIGBK_SDPATH;
gbk12_path=(u8*)GBK12_SDPATH;
gbk16_path=(u8*)GBK16_SDPATH;
gbk20_path=(u8*)GBK20_SDPATH;
gbk24_path=(u8*)GBK24_SDPATH;
}
res=0XFF;
ftinfo.fontok=0XFF;
SPI_Flash_Write((u8*)&ftinfo,FONTINFOADDR,sizeof(ftinfo)); //清除之前字库成功的标志.防止更新到一半重启,导致的字库部分数据丢失.
SPI_Flash_Read((u8*)&ftinfo,FONTINFOADDR,sizeof(ftinfo)); //重新读出ftinfo结构体数据
LCD_ShowString(x,y,240,320,size,"Updating UNIGBK.BIN");
res=updata_fontx(x+20*size/2,y,size,unigbk_path,0); //更新UNIGBK.BIN
if(res)return 1;
LCD_ShowString(x,y,240,320,size,"Updating GBK20.BIN ");
res=updata_fontx(x+20*size/2,y,size,gbk20_path,3); //更新GBK20.FON
if(res)return 4;
//全部更新好了
ftinfo.fontok=0XAA;
SPI_Flash_Write((u8*)&ftinfo,FONTINFOADDR,sizeof(ftinfo)); //保存字库信息
return 0;//无错误.
} |
|