硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6628|回复: 18
收起左侧

[emWin] 汉字字库外部烧录问题

[复制链接]

3

主题

14

回帖

3

积分

新手上路

积分
3
发表于 2015-4-15 18:01:16 | 显示全部楼层 |阅读模式
从norflash里面读取字库的时候,spinorflashReadData(pBuffer, Off, NumBytes);
函数里面的Off可以设置起始地址,不过读取长度NumBytes,写什么呢!!如果写XBF字库文件大小,感觉内存也容不下啊!!求大神指点。。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115692
QQ
发表于 2015-4-15 18:03:13 | 显示全部楼层
不用这么麻烦,直接读地址就行。NOR FLASH的一个最大优点就是读取的时候可以像SRAM那样读取,就是写入的时候稍麻烦些。

nor flash里面不要放xbf字体,没有优势,使用SIF字体才能发挥出优势。
回复

使用道具 举报

3

主题

14

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-15 18:25:10 | 显示全部楼层
那读取的时候参数怎么写呢!!如果没有制定长度参数的话,假如我要使用几个字库,怎么破!!(PS:写前面的地址怕会读到后面的数据来)
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115692
QQ
发表于 2015-4-15 18:26:45 | 显示全部楼层
nor flash里面放SIF字库参考我们的这个例子:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=5603
回复

使用道具 举报

3

主题

14

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-16 15:10:19 | 显示全部楼层
借鉴上面的方法,使用SIF字库。代码如下:
GUI_SIF_CreateFont((const char *)(0x800000), &SIF_Font16, GUI_SIF_TYPE_PROP);   //烧录时,地址要从8M开始
GUI_UC_SetEncodeUTF8();   
   
GUI_DispStringAt("\\xe6\\x9c\\x88", 30, 70);  //月   
GUI_SIF_DeleteFont(&SIF_Font16);
表示屏幕上面有没有显示汉字。不可以直接这样打印UTF-8的编码吗???
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115692
QQ
发表于 2015-4-16 15:13:55 | 显示全部楼层

回 llbcys 的帖子

llbcys:借鉴上面的方法,使用SIF字库。代码如下:
GUI_SIF_CreateFont((const char *)(0x800000), &SIF_Font16, GUI_SIF_TYPE_PROP);   //烧录时,地址要从8M开始
GUI_UC_SetEncodeUTF8();    
    
GUI_DispStringAt("\\x .. (2015-04-16 15:10) 
可以,没问题,确定下是否下载到NOR的指定地址了,还有就是地址写0x800000是不是错了。
回复

使用道具 举报

3

主题

14

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-16 15:39:34 | 显示全部楼层
下载进SPI flash,如图:

看见的

看见的

设置地址

设置地址

~~~~(>_<)~~~~ 可就是没有汉字显示。。。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115692
QQ
发表于 2015-4-16 15:45:55 | 显示全部楼层
怎么成了下载到SPI FLASH。你的NOR FLASH是SPI接口的吗,那就不支持了, SIF字体仅支持总线方式的读取。
回复

使用道具 举报

3

主题

14

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-16 15:53:59 | 显示全部楼层
额....以为SPI FLASH就是nor flash的一种,他们的使用是一样的呢!!那我就只能用XBF的字库了。又回到原来的问题,读取的时候长度怎么破!!管理员觉得你好友耐心啊!!(PS:比老师好多了)
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115692
QQ
发表于 2015-4-16 16:23:28 | 显示全部楼层

回 llbcys 的帖子

llbcys:额....以为SPI FLASH就是nor flash的一种,他们的使用是一样的呢!!那我就只能用XBF的字库了。又回到原来的问题,读取的时候长度怎么破!!管理员觉得你好友耐心啊!!(PS:比老师好多了) (2015-04-16 15:53) 
如果给SPI FLASH添加了文件系统的话,参考我们的教程就行,如果没有的话参考这个例子:http://www.armbbs.cn/forum.php?mod=viewthread&tid=5024 这个我还没有搞。
回复

使用道具 举报

3

主题

14

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-16 16:39:06 | 显示全部楼层
他那个方法,上次使用了。因为没有设置地址和长度只能使用一个字库。参考ARMFLY的教程,文件系统(yaffs)的也试了,也是读取长度那里不知道怎么破!!还有一个是不知道路径。

fp = yaffs_open("/Font16.xbf", O_RDONLY ,S_IREAD | S_IWRITE);
if(fp == -1)
{
        GUI_DispStringAt("1", 30, 90);
        return ;
}
几乎都是这里就跳出来了。
用这个下载进去的:
QQ图片20150416163819.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115692
QQ
发表于 2015-4-17 08:57:01 | 显示全部楼层

回 llbcys 的帖子

llbcys:他那个方法,上次使用了。因为没有设置地址和长度只能使用一个字库。参考ARMFLY的教程,文件系统(yaffs)的也试了,也是读取长度那里不知道怎么破!!还有一个是不知道路径。

fp = yaffs_open("/Font16.xbf", O_RDONLY ,S_IREAD | S_IWRITE);
if(fp == -1)
{
....... (2015-04-16 16:39) 
就看SD卡存储XBF字体就行。我们用的是FatFS的,注意里面有一个_GetData的函数,主要是这个函数实现字体读取。
回复

使用道具 举报

3

主题

14

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-17 17:45:39 | 显示全部楼层
往没有文件系统方向走的话,你有什么思路或者建议没。。。GLY
回复

使用道具 举报

354

主题

2164

回帖

3231

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3231
发表于 2015-4-17 17:58:44 | 显示全部楼层
用的时候再读吧。
就是用哪个字,就读哪个字,就不用那么多RAM了吧?
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
发表于 2015-4-18 09:01:56 | 显示全部楼层

回 llbcys 的帖子

llbcys:往没有文件系统方向走的话,你有什么思路或者建议没。。。GLY (2015-04-17 17:45) 
Eric兄给你推荐那个兄弟帖子,就是无fs的做法

其实很简单的,你只需要把生成的字库文件烧写到flash中,实现下xbf字体两个回调函数正确的读取就行了  我们不需要关心emwin到底是怎么实现字体定位的,没有源码无从得知
回复

使用道具 举报

3

主题

14

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-20 09:58:47 | 显示全部楼层

回 caicaptain2 的帖子

caicaptain2:用的时候再读吧。
就是用哪个字,就读哪个字,就不用那么多RAM了吧? (2015-04-17 17:58) 
要用整个GB2312啊!!身不由己
回复

使用道具 举报

3

主题

14

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-20 10:04:53 | 显示全部楼层

回 myxiaonia 的帖子

myxiaonia:Eric兄给你推荐那个兄弟帖子,就是无fs的做法

其实很简单的,你只需要把生成的字库文件烧写到flash中,实现下xbf字体两个回调函数正确的读取就行了  我们不需要关心emwin到底是怎么实现字体定位的,没有源码无从得知 (2015-04-18 09:01) 
Eric推荐的那贴是无flash的。那样我试过,只能实现读取一种字体的字库,要读取多个字库的话,就要相应的需要字库的首地址和长度。首地址还好说,但是字库的长度写多少感觉都不行,即使就使用NumBytes也不行
回复

使用道具 举报

3

主题

14

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-20 14:17:25 | 显示全部楼层
可以了[s:150] 。感谢Eric、myxiaonia和caicaptain2啊!!
直接+SPI flash里面的字库的首地址就可以了,前面是自己想多了。。。
spinorflashReadData(pBuffer, Off + 0x800000, NumBytes);
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115692
QQ
发表于 2015-4-20 22:13:38 | 显示全部楼层

回 llbcys 的帖子

llbcys:可以了[s:150] 。感谢Eric、myxiaonia和caicaptain2啊!!
直接+SPI flash里面的字库的首地址就可以了,前面是自己想多了。。。
spinorflashReadData(pBuffer, Off + 0x800000, NumBytes); (2015-04-20 14:17) 
你终于搞定了,真是不容易,祝贺下[s:151]
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-12 11:22 , Processed in 0.321546 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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