[ZLG-ARM] 请教如何在FLASH中定义常数数组并分散加载,作为字库使用

[复制链接]
3988|8
 楼主| linjing 发表于 2007-6-7 22:26 | 显示全部楼层 |阅读模式
程序中需要用到几十K的常数数组,主要内容是自定义的字库,以及其他一些常数表格,由于程序调试的过程中,字库及常数表格的内容只会偶尔有些变动,希望能够将这部分常数写到FLASH中的某个区域,在下载调试程序的过程中这部分常数表格不用每次都重新下载,要实现这个设想都需要进行哪些设置?好像通过分散加载只是可以将常数数组固定到某个指定的区域,每次下载程序进行调试仍然会重新擦写这些没有变化的区域,似乎仅通过分散加载不能完全实现目的吧?<br /><br />另外,不知道哪里能找到关于分散加载的资料,希望能共享一下,谢谢
 楼主| linjing 发表于 2007-6-11 16:38 | 显示全部楼层

自己顶...

  
armecos 发表于 2007-6-12 06:09 | 显示全部楼层

一般这种情况使用ROM文件系统比较好,

&nbsp;&nbsp;&nbsp;&nbsp;例如:minigui中有字库、输入法、光标、图片、配置脚本什么的,把这些组织到一个目录树里,然后制作成ROMFS,烧写到flash指定区域,使用时在这个flash地址上挂装ROMFS系统即可。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ecos增值包(www.armecos.com)里提供生成手段,redboot支持flash文件系统,可以把字库和应用程序烧写到不同区域,互不影响,支持串口和网口下载。提供的开发程序库支持ROMFS文件系统,使用文件名而不是数组地址访问字库和其他数据。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;把字库等数据和应用程序分开的好处是减少编译时间,如果你有EASYARM或者SMARTARM,可以试试用GNU/ecos开发。而且可以移植其中的ROMFS源码到你自己的程序里,redboot可以引导各种程序,不论你用什么编译器编译。
winfeng 发表于 2007-6-12 17:02 | 显示全部楼层

我用的,lpc2138flash加入了一个字库,分散加载文件

ROM_LOAD&nbsp;0x0<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ROM_EXEC&nbsp;0x00000000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(vectors,&nbsp;+First)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RO)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;IRAM&nbsp;0x40000000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(MyStacks)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RW,+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;HEAP&nbsp;+0&nbsp;UNINIT<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(Heap)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;STACKS&nbsp;0x40007c00&nbsp;UNINIT<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(Stacks)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />ROM_LOAD1&nbsp;0x00058000<br />{<br />&nbsp;&nbsp;&nbsp;ROM_EXEC1&nbsp;0x00058000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hzk1212_dot.o&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}
 楼主| linjing 发表于 2007-6-14 22:58 | 显示全部楼层

回 armecos

刚接触ARM,暂时不想搞得太复杂了,现在竭力避免太复杂的东西,同时,虽然不太了解ROMFS,但感觉会增加系统开销
 楼主| linjing 发表于 2007-6-14 23:00 | 显示全部楼层

回 winfeng

不知道分散加载的方法是否能够避免调试过程中重复下载字库,另外,哪里能找到有关分散加载的资料介绍呢
armecos 发表于 2007-6-15 09:11 | 显示全部楼层

ROMFS是最简单的文件系统了

&nbsp;&nbsp;&nbsp;&nbsp;只读,代码没多大,说白了就是在flash常量数组上组织一个数据结构,按照文件方式读取数据,通用性非常好。有源码提供,你改改就能用到自己的项目里。当然了,www.armecos.com《ecos增值包》已经做好了移植,你只要事先把目录树制作成romfs.img,烧写到flash的某个固定地址处,然后挂装romfs即可,剩下的就是按照标准的文件打开、关闭、读、写、控制。如果你是新手,用文件系统那才是最简单的办法呢,如果用数组搞,反倒复杂了。既然用ARM,最好配套使用文件系统(简化版本),资源足够用。觉得太复杂是因为你没接触过,如果提供你源码、文挡、开发环境、范例代码、技术支持,大约一个月就能掌握,只是用的话不到1小时就可以了,而且100%保证成功,为什么不试试难度大但通用性强的现成方案呢!<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;分散加载不是干这个用的,你把字库和程序链接到一起,怎么能不重复烧写呢,把字库和程序分开编译才可以实现独自分别烧写,不过这与分散加载无关。
ZY_ljm 发表于 2007-6-16 09:16 | 显示全部楼层

烧录到指定地址

将字库等固定的文件用程序烧录到指定的Flash地址,在你的应用程序中查表调用就OK了,我们用GUI时都是这么处理,也不用在每次程序调试时都下载字库。
五月天 发表于 2007-9-17 23:34 | 显示全部楼层

re

其实楼上已经有人给出了答案,再补充一下,发现zlg网站已经给出了一个详细的例子了,很有用,认真理解后完全可以解决很多分散加载的问题;在zlg主页搜索&quot;外部Flash&quot;关键字即可找到.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

327

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部