打印

购买文件压缩算法或者算法加源代码

[复制链接]
2648|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sdsdfuch|  楼主 | 2010-12-6 10:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
购买文件压缩算法或者算法加源代码:

应用场景:单板上的flash容量较小,而代码编译出来的文件较大,但是仍需要把这个较大的文件加载到单板上的flash里面去,所以就需要一个压缩和解压缩工具,在本地把编译出来的文件压缩成较小的文件,加载到flash里面,然后单板上的bootloader引导时运用对应的解压缩工具把文件解压缩出来之后再运行文件。

要求:非开源非GPL标准的。压缩比最好是60%以上,即要求比LZW的压缩比要高。
联系方式:sdfuch@yahoo.com.cn

相关帖子

沙发
歪 歪| | 2010-12-6 12:17 | 只看该作者
直接用VxWorks吧,压缩率一般为55%
......
    -------------------
    | VxWorks内存布局 |
    -------------------
    内存布局是VxWorks移植中需要非常准确理解的内容,它关系到config.h的配置和Makefile的编写,如果处理不好或者概念搞错了,那就全乱了。
   
    --------------  0x00100000 = LOCAL_MEM_SIZE = sysMemTop()
    |            |
    |    RAM     |
    |  0 filled  |
    |            |
    |------------| = (romInit+ROM_COPY_SIZE) or binArrayStart
    | ROM image  |
    |----------- |  0x00090000  = RAM_HIGH_ADRS
    | STACK_SAVE |
    |------------|
    |            |  0x00080000  = 0.5 Megabytes
    |            |
    |            |
    | 0 filled   |
    |            |
    |            |  0x00001000  = RAM_ADRS & RAM_LOW_ADRS
    |            |
    |            |  exc vectors, bp anchor, exc msg, bootline
    |            |
    |            |
    --------------  0x00000000  = LOCAL_MEM_LOCAL_ADRS

    --------------
    |    ROM     |
    |            |  0xff8xxxxx  = binArrayStart
    |            |
    |            |  0xff800008  = ROM_TEXT_ADRS
    --------------  0xff800000  = ROM_BASE_ADRS
   
    上图是一个内存布局实例(1M字节RAM空间),地址值是自己编的,主要看宏定义。
    ROM_BASE_ADRS是指ROM的起始地址,例如:0x80000000。
    ROM_TEXT_ADRS是代码段的起始地址,有些CPU不能从0开始执行,所以需要一个偏移量,不同CPU的要求不同,一般和ROM_BASE_ADRS值相同。
   
    LOCAL_MEM_LOCAL_ADRS是指可用RAM的起址,如:0x81000000。
    RAM_LOW_ADRS是内核在内存中的加载位置。
    RAM_HIGH_ADRS是需要拷贝到内存的ROM映像和堆栈的分界线,向下是堆栈,向上是ROM映像的起址。
    未用的部分可以选择清零(用“0”填充)。
    大体上就是这么一个分布,但是限于篇幅,还有很多细节没有谈到。比如:堆栈保护、解压缩代码空间、不同ROM映像类型的内存分布差异等。这些看代码可以详细了解,还是那句话,亲自调试就能了解全部细节,写出来的内容总会有信息量的损失,从调试中你能得到最准确全面的信息。
   
    ------------------------
    | VxWorks的ROM映像类型 |
    ------------------------
    VxWorks有三种ROM映像类型:
    1、ROM_RESIDENT-----驻留ROM型。在ROM中运行,只有数据段放在RAM里。
    2、ROM_COPY---------复制ROM型。把主要映像从ROM中拷贝到RAM里并跳到其RAM入口点执行。
    3、ROM_COMPRESS-----解压ROM型。把主要映像从ROM中解压到RAM里并跳到其RAM入口点执行。
    各种ROM映像类型的内存布局图如下:
   
         ROM
    --------------
    |            |
    |------------|
    |    data    |
    |------------|  0xff8xxxxx  = ROM_DATA_ADRS
    |    text    |
    |            |  0xff800008  = ROM_TEXT_ADRS
    --------------  0xff800000  = ROM_BASE_ADRS
   
     RAM
    --------------  0x00100000 = LOCAL_MEM_LOCAL_ADRS + LOCAL_MEM_SIZE
    |            |
    |            |
    |------------| = RAM_DATA_ADRS + data segment size
    |            |
    |data segment|
    |            |
    |------------|  0x00001000  = RAM_DATA_ADRS
    | initial sp |
    |------------| = RAM_DATA_ADRS - STACK_SAVE
    |            |
    |            |
    --------------  0x00000000  = LOCAL_MEM_LOCAL_ADRS
   
    上图是驻留ROM型映像的内存分布,可见,只有数据段拷贝到了RAM内存里,当然堆栈也在RAM内存中。
   
     ROM
    --------------
    |            |
    |------------|  0xff8xxxxx = binArrayEnd
    |  subImage  |
    |------------|  0xff8xxxxx = binArrayStart
    |    data    |
    |------------|  0xff8xxxxx  = ROM_DATA_ADRS
    |    text    |
    |            |  0xff800008  = ROM_TEXT_ADRS
    --------------  0xff800000  = ROM_BASE_ADRS
   
        RAM
    --------------  0x00100000 = LOCAL_MEM_LOCAL_ADRS + LOCAL_MEM_SIZE
    |            |
    |            |
    |------------|
    | temp data  |
    |------------|  0x00090000  = RAM_DATA_ADRS
    | initial sp |
    |------------|              = RAM_DATA_ADRS - STACK_SAVE
    |            |
    |            |
    |------------|
    |            |
    |  subimage  |
    |            |
    |------------|  0x00001000  = RAM_DST_ADRS (for non-resident images)
    |            |
    |            |
    --------------  0x00000000  = LOCAL_MEM_LOCAL_ADRS
   
    上图是复制ROM型和解压ROM型映像的内存分布,他们比驻留ROM型稍微有点复杂。复制ROM型和解压ROM型映像的主要差别的是 subimage是否压缩,一般压缩率能超过55%,允许在ROM中烧写更大的系统,唯一的代价是增加了几秒钟的启动延迟,而复制ROM型映像没有解压过程,所以启动速度更快。subimage是由make产生的中间映像,并被make插在ROM映像文件中。代码段、初始化数据段、subimage在 ROM中的排列顺序就如上图所示。
   
    复制ROM型映像直接把binArrayStart处的subimage拷贝到RAM_DST_ADRS,没有上面的temp data部分。
   
    对于解压ROM型映像,首先拷贝压缩的代码数据段到RAM_DATA_ADRS位置(即temp data部分),然后运行解压缩例程把解压后的subimage放置在RAM_DST_ADRS。
   
    RAM_DST_ADRS和RAM_DATA_ADRS宏均来自定义于make的链接地址,缺省值分别为Makefile文件中的 RAM_LOW_ADRS和RAM_HIGH_ADRS。关于如何改变链接地址的信息,参见“target/h/make/rules.bsp”文件。

......

使用特权

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

本版积分规则

3

主题

3

帖子

0

粉丝