|
项目中用到外部NorFlash,用来存放图形和字体等内容,内部Flash存储应用程序,更新固件使用的是IAP的方式。其中应用程序存放在内部 0x800 0000开始的地址区域中,图形库存放在外部 0x9000 0000开始的地址空间中。现在遇到个问题,就是使用IAR生成的Bin文件如果遇到地址不连续的情况会产生一个巨大的文件(GB级别)。如何设置IAR生成两个bin文件,一个应用程序的,一个库的,这样我用IAP更新的时候可以灵活更新(更新其中一个或者全部)。有大神知道该怎么做吗? |
微信公众号
手机版
谢谢回复。我这图片比较多,现在是直接定义成数组到外部Flash中(icf中配置了9000 0000开始的区域,引用时直接使用数组名,外部flash开启了内存映射模式),想的是可以直接生成一个库文件的bin,但是如果用原文件,一个是数量太多了,还有如果直接放在外部Flash中,我程序里如何去引用这些图片呢?
生成hex得需要有专门的软件去提取分割才行吧...要不没法直接烧写,毕竟有一些附加信息什么的。
我现在是把所有字体和图形都定义成字节数组的方式到外部存储器(0x9000 0000开始),使用时GUI直接引用数组名,因为外部Flash开启了内存映射,可以直接访问。但是生成bin文件时就很大了。不知怎么处理。
你说的这种方式,如果要引用这些库里的图形或字体该如何引用呢?
HEX文件解析起来挺简单的,自己做一个解析、转换、分割的小软件应该也很快。
先用IAR生成整个工程的HEX文件,再用自己做的小软件把HEX文件解析出来,并且根据地址分割成两个bin文件
点评
赞成这个解决方案
刚解析过HEX烧录文件
楼主要搞清楚哪些工作是MCU能做,哪些工作是MCU擅长做的。
你可以在图片库的开头放一个引导表啊,不同图片的基地址、大小都能记录起来,你程序里先读这个引导表,然后你在程序里+0x90000000的地址直接读就可以了。
2 数据固定放到外边,程序不会引用? 映射了就直接地址引用,没映射就接口读。
3 文件很多?到底多少?你说现在是做成数组放到程序中了,那你是已经将图片转为数组了?
是一个数组还是多个数组? TXT2BIN或者BIN2txt这两个小工具,可以了解。
4 如果你不会写什么小工具,用uedit也可以很好处理数据啊,列模式了解了解。