OpenEdv-开源电子网

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

字库更新问题

[复制链接]

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
发表于 2013-11-21 16:49:41 | 显示全部楼层 |阅读模式
原子哥,我做了个20*20,和24*24的字库想更新到FLASH上去,有4个字库,12,16,20和24的字库,修改代码后,烧写进去,开始更新,可是前面的12和16的能正常更新,到更新20的字库的时候进度条到了100就马上显示更新失败,这是什么原因呢?是我的代码修改的不对还是flash内存已经满了?我之前有做过这方面的实验的,但是是成功了,可是现在又不行了,不知为何?求解救啊!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
 楼主| 发表于 2013-11-21 17:02:52 | 显示全部楼层
回复【楼主位】648342243:
---------------------------------
如果单单只是用汉字显示的例程去更新16和12的字库是没问题的。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-21 18:38:21 | 显示全部楼层
你用的什么板子?
你可以先计算下flash容量啊.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
 楼主| 发表于 2013-11-21 18:41:11 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
用的是战舰的,可是以前也这样弄过,都是可以的,现在就不行了
回复 支持 反对

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
 楼主| 发表于 2013-11-21 20:55:54 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
刚看了开发指南汉字显示部分,原来留给字库的存储内存只有1.5M。这样的话就好像不够容量来了,可是我之前有试过更新过4个字库的啊!
回复 支持 反对

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
 楼主| 发表于 2013-11-22 10:34:42 | 显示全部楼层
回复【3楼】正点原子:
-------------------------
如果是存储空间不足的话,我试着制作GB2312的字库,这样字库会小一点,但是制作的GB2312字库连12*12都更新失败了,一样是进度条到了100就显示更新失败。这是为什么呢?
回复 支持 反对

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
 楼主| 发表于 2013-11-22 15:29:38 | 显示全部楼层
回复【3楼】正点原子:
---------------------------
原子哥,求解救啊,这问题已经困扰我好久了!一直没找到问题所在!我单独更新20*20这个字库也是一样的问题,所以应该不是储存空间不足的问题,应该是程序上的一些问题。我想问下,要想更新其它字库,在程序上有哪些地方需要注意的?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-22 22:57:29 | 显示全部楼层
回复【5楼】648342243:
---------------------------------
那肯定是假象...

GB2312会小很多.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-22 22:57:48 | 显示全部楼层
回复【7楼】648342243:
---------------------------------
你仿真一下,就知道问题出在哪里了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
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;//无错误.  
}
回复 支持 反对

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
 楼主| 发表于 2013-11-25 11:06:53 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
还有我仿真的时候看到flashaddr这个的值随着更新的进度而增加,他是表示当前地址的指针么?offx不是才是表示当前地址的指针,而flashaddr不是应该只是表示的是首地址而已么?
回复 支持 反对

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
 楼主| 发表于 2013-11-25 18:21:01 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
经过试验后发现20*20之后的字库就不能更新,而20*20之前的字库就能更新。原子哥,请教这是什么原因?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-25 19:49:41 | 显示全部楼层
我也说不准,你跟踪一下了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
 楼主| 发表于 2013-11-26 11:18:39 | 显示全部楼层
回复【13楼】正点原子:
---------------------------------
原子哥,我跟踪了一下,一步一步的让他执行,结果是更新成功的。可是如果不是一步一步跟踪的话就更新失败。这是什么原因?是某个地方需要加延时么?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-26 12:11:58 | 显示全部楼层
回复【14楼】648342243:
---------------------------------
不用加延时的.
你如果全速不行,你看看是在什么地方不行的?或者看看返回值,是什么,定位到问题点.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
 楼主| 发表于 2013-11-26 13:20:33 | 显示全部楼层
回复【15楼】正点原子:
---------------------------------
全速的时候不行,主要是在updata_fontx函数中的res=f_read(fftemp,tempbuf,4096,(UINT *)&bread);全速的时候,当进度达到99.8%的时候,res返回值为1,然后就if(res!=FR_OK)break;执行错误了。
回复 支持 反对

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
 楼主| 发表于 2013-11-26 13:23:03 | 显示全部楼层
回复【15楼】正点原子:
---------------------------------
我现在一步一步的执行后,更新了20*20和24*24的字库,但是用的时候有点问题,就是20*20的字体能够正常显示出来,而24*24的就显示的是乱码。这是字库更新没有成功还是显示24字体的程序上有问题呢?
回复 支持 反对

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
 楼主| 发表于 2013-11-26 14:40:38 | 显示全部楼层
回复【15楼】正点原子:
---------------------------------
我觉得updata_fontx函数中的res=f_read(fftemp,tempbuf,4096,(UINT *)&bread)返回值为1;那么可能是在DRESULT disk_read 读扇区函数中res=SD_ReadDisk(buff,sector,count)返回值为1;继续往上找可能是SD_ReadDisk函数中r1=SD_RecvData(buf,512)返回值为1;再往上是SD_RecvData函数中if(SD_GetResponse(0xFE))return 1;//等待SD卡发回数据起始令牌0xFE。所以会不会是SD_GetResponse(0xFE)这里出问题了呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-27 00:44:49 | 显示全部楼层
回复【18楼】648342243:
---------------------------------
这种可能是没根据的.
你可以试试在res=SD_ReadDisk(buff,sector,count)
后面加断点,看看res是不是1?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
 楼主| 发表于 2013-11-27 17:22:37 | 显示全部楼层
回复【19楼】正点原子:
---------------------------------
经过一步一步跟踪,发现全速运行时,出错的是在SD_GetResponse()等待SD卡回应这个函数。在99%的时候,当执行到这个函数的时候,SD卡回应失败!不知为什么?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-27 23:35:10 | 显示全部楼层
回复【20楼】648342243:
---------------------------------
可能你的卡和NRF24L01的SPI公用不是很爽...
换个卡试试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-8 12:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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