打印
[ZLG-ARM]

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

[复制链接]
3118|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
linjing|  楼主 | 2007-6-7 22:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序中需要用到几十K的常数数组,主要内容是自定义的字库,以及其他一些常数表格,由于程序调试的过程中,字库及常数表格的内容只会偶尔有些变动,希望能够将这部分常数写到FLASH中的某个区域,在下载调试程序的过程中这部分常数表格不用每次都重新下载,要实现这个设想都需要进行哪些设置?好像通过分散加载只是可以将常数数组固定到某个指定的区域,每次下载程序进行调试仍然会重新擦写这些没有变化的区域,似乎仅通过分散加载不能完全实现目的吧?

另外,不知道哪里能找到关于分散加载的资料,希望能共享一下,谢谢

相关帖子

沙发
linjing|  楼主 | 2007-6-11 16:38 | 只看该作者

自己顶...

使用特权

评论回复
板凳
armecos| | 2007-6-12 06:09 | 只看该作者

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

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

使用特权

评论回复
地板
winfeng| | 2007-6-12 17:02 | 只看该作者

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

ROM_LOAD 0x0
{
    ROM_EXEC 0x00000000
    {
        Startup.o (vectors, +First)
        * (+RO)
    }

    IRAM 0x40000000
    {
        Startup.o (MyStacks)
        * (+RW,+ZI)
    }

    HEAP +0 UNINIT
    {
        Startup.o (Heap)
    }

    STACKS 0x40007c00 UNINIT
    {
        Startup.o (Stacks)
    }
}
ROM_LOAD1 0x00058000
{
   ROM_EXEC1 0x00058000
    {
        hzk1212_dot.o 
        
    }
}

使用特权

评论回复
5
linjing|  楼主 | 2007-6-14 22:58 | 只看该作者

回 armecos

刚接触ARM,暂时不想搞得太复杂了,现在竭力避免太复杂的东西,同时,虽然不太了解ROMFS,但感觉会增加系统开销

使用特权

评论回复
6
linjing|  楼主 | 2007-6-14 23:00 | 只看该作者

回 winfeng

不知道分散加载的方法是否能够避免调试过程中重复下载字库,另外,哪里能找到有关分散加载的资料介绍呢

使用特权

评论回复
7
armecos| | 2007-6-15 09:11 | 只看该作者

ROMFS是最简单的文件系统了

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

使用特权

评论回复
8
ZY_ljm| | 2007-6-16 09:16 | 只看该作者

烧录到指定地址

将字库等固定的文件用程序烧录到指定的Flash地址,在你的应用程序中查表调用就OK了,我们用GUI时都是这么处理,也不用在每次程序调试时都下载字库。

使用特权

评论回复
9
五月天| | 2007-9-17 23:34 | 只看该作者

re

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

327

帖子

0

粉丝