搜索
bottom↓
回复: 25

请教裸奔arm解压ZIP方案。

[复制链接]

出0入0汤圆

发表于 2018-8-24 11:32:15 | 显示全部楼层 |阅读模式
本帖最后由 yanghuanchun 于 2018-8-24 11:32 编辑

如题,最近公司项目需要增加解压缩ZIP的功能,而且要实现能从压缩包里面解压单个文件的功能。目前的硬件是ASM9X35,ARM9内核。软件环境是裸奔加 C++。需要在上面增加解压ZIP压缩文件的功能。昨天找了一些资料整理了一个初步方案:
1、使用zlib作为解压缩算法。
2、修改mini ZIP 将它的文件系统替换为FATFS文件系统。
有没有做过的坛友,我这个方案可行性怎么样,迫切渴望坛友指点。。或者哪位前辈做过这种功能,能指导一下方向,非常感谢。也汇总一下我之前找到的资料,如下:


1、zlib的网站 :https://zlib.net/
2、miniZIP 的例子 http://www.winimage.com/zLibDll/minizip.html
3、一个牛人使用mini zip的开发经验 https://www.cnblogs.com/menlsh/p/4480577.html
4、、坛友开源的LZO算法基于STM32  https://www.amobbs.com/forum.php ... 3&highlight=lzo

出0入0汤圆

发表于 2018-8-24 12:26:15 来自手机 | 显示全部楼层
裸奔玩的嗨

出0入0汤圆

发表于 2018-8-24 12:57:43 | 显示全部楼层
上linux吧。、

出0入0汤圆

发表于 2018-8-24 13:13:02 来自手机 | 显示全部楼层
zlib使用比较简单,记得自带有解压zip文件参考代码

出0入0汤圆

 楼主| 发表于 2018-8-24 13:33:49 来自手机 | 显示全部楼层
starli 发表于 2018-8-24 12:57
上linux吧。、

不行的,产品软件架构改不了了

出0入0汤圆

 楼主| 发表于 2018-8-24 13:35:13 来自手机 | 显示全部楼层
eleqian 发表于 2018-8-24 13:13
zlib使用比较简单,记得自带有解压zip文件参考代码

你说的是mini zip吗?

出0入90汤圆

发表于 2018-8-24 14:30:03 | 显示全部楼层
mini lzo我已经在407上面跑起来了。只给了8KB的内存,就可以正常压缩,解压缩。速度还挺快的。压缩比例大概1/9。我是用0-255这样2KB的数据进行测试的。

出0入0汤圆

 楼主| 发表于 2018-8-24 15:26:01 | 显示全部楼层
honami520 发表于 2018-8-24 14:30
mini lzo我已经在407上面跑起来了。只给了8KB的内存,就可以正常压缩,解压缩。速度还挺快的。压缩比例大概 ...

这个能解压ZIP文件吗,电脑打包的ZIP文件包,并且从文件包里面解压出单个的文件。

出0入0汤圆

发表于 2018-8-24 20:07:18 来自手机 | 显示全部楼层
yanghuanchun 发表于 2018-8-24 13:35
你说的是mini zip吗?

下了个zlib看确实自带minizip代码,网站上还另外给了个链接解压zip,不到2k代码:
https://github.com/madler/sunzip

出0入0汤圆

 楼主| 发表于 2018-9-16 11:18:53 | 显示全部楼层
这个功能已经完成了。使用的方案就是我楼主位的方法。首先将zlib和minizip的源代码添加到工程。然后将minizip部分的和文件系统相关的部分做修改,也就是ioapi.c,将里面文件系统接口替换为fatfs的函数就可以使用了。使用这个网友开源的方法是可以的 https://www.cnblogs.com/menlsh/p/4480577.html

出0入0汤圆

发表于 2018-9-21 13:23:09 | 显示全部楼层
可以说明 详细一点吗? 应该会有比较多人需要

出0入0汤圆

发表于 2018-9-21 14:17:21 | 显示全部楼层
yanghuanchun 发表于 2018-9-16 11:18
这个功能已经完成了。使用的方案就是我楼主位的方法。首先将zlib和minizip的源代码添加到工程。然后将miniz ...

谢谢你给了思路。

出0入0汤圆

 楼主| 发表于 2018-9-23 21:16:55 | 显示全部楼层
liang16888 发表于 2018-9-21 13:23
可以说明 详细一点吗? 应该会有比较多人需要

我在十楼说的挺清楚了,你还有哪方面不明白,我可以再说说,代码是没有了,公司电脑不能上网。。。

出0入0汤圆

发表于 2018-9-27 15:53:15 | 显示全部楼层
yanghuanchun 发表于 2018-9-23 21:16
我在十楼说的挺清楚了,你还有哪方面不明白,我可以再说说,代码是没有了,公司电脑不能上网。。。 ...

我不明白是
解压ZIP是解在 RAM 中?
裸奔情况下如何创造这个空间?
详细步骤 如果不能提供代码 说明一下还有那些动作要做才能
有这个空间使用

出0入0汤圆

 楼主| 发表于 2018-9-27 19:12:52 来自手机 | 显示全部楼层
liang16888 发表于 2018-9-27 15:53
我不明白是
解压ZIP是解在 RAM 中?
裸奔情况下如何创造这个空间?

首先不是写在ram里面,裸奔也可以上文件系统,我们用的fatfs。然后你把我帖子写的步骤和一些资料链接看一下,应该没问题的。

出0入90汤圆

发表于 2018-9-27 19:53:43 | 显示全部楼层
yanghuanchun 发表于 2018-9-27 19:12
首先不是写在ram里面,裸奔也可以上文件系统,我们用的fatfs。然后你把我帖子写的步骤和一些资料链接看一 ...

你好,这个zlib压缩、解压缩,最小支持多大的内存操作呢?
我之前用的mini lzo,但是这个玩意解压缩只能在linux下才有工具,一般的没有工具可以解压缩!所以希望找个能直接windows解压缩的来验证

出0入0汤圆

 楼主| 发表于 2018-10-11 11:17:14 | 显示全部楼层
honami520 发表于 2018-9-27 19:53
你好,这个zlib压缩、解压缩,最小支持多大的内存操作呢?
我之前用的mini lzo,但是这个玩意解压缩只能 ...

抱歉,刚看到消息,我们使用的内存也不是很大,外接的好像是256Mbit的SDRAM。这个是可以解压windos上面的zip工具打包的文件夹的。我用的打包工具是rar和360的压缩软件。

出0入0汤圆

发表于 2018-10-11 11:34:49 | 显示全部楼层
yanghuanchun 发表于 2018-10-11 11:17
抱歉,刚看到消息,我们使用的内存也不是很大,外接的好像是256Mbit的SDRAM。这个是可以解压windos上面的 ...

都上M了兄弟,有没有能在KB级别上使用,事实上我看这位兄弟用的只是2KB的用例

出0入0汤圆

 楼主| 发表于 2018-10-11 12:59:31 来自手机 | 显示全部楼层
myxiaonia 发表于 2018-10-11 11:34
都上M了兄弟,有没有能在KB级别上使用,事实上我看这位兄弟用的只是2KB的用例 ...

看来是只用片内的内存弄呢

出0入0汤圆

发表于 2018-10-11 22:37:25 | 显示全部楼层
honami520 发表于 2018-8-24 14:30
mini lzo我已经在407上面跑起来了。只给了8KB的内存,就可以正常压缩,解压缩。速度还挺快的。压缩比例大概 ...

请教一下,压缩/解压不用把整个文件读取到内存吗?还是可以读取一小段,然后解压一小段?

出0入90汤圆

发表于 2018-10-12 00:08:24 | 显示全部楼层
syj0925 发表于 2018-10-11 22:37
请教一下,压缩/解压不用把整个文件读取到内存吗?还是可以读取一小段,然后解压一小段? ...

这玩意是这样,你压缩一段内容,然后会得到压缩之后的数据长度,以及内容。
解压缩的时候,需要根据指定解压缩的长度。
所以要解压缩就很麻烦了。需要知道每一段压缩后的输出长度保存起来。

出0入0汤圆

发表于 2018-10-12 07:27:31 | 显示全部楼层
syj0925 发表于 2018-10-11 22:37
请教一下,压缩/解压不用把整个文件读取到内存吗?还是可以读取一小段,然后解压一小段? ...

lz系列的压缩法,全部都不能中途解压,至少得全部解压到内存中,提取出你要的那个片段
原因好像是因为它用到已经压缩部分的片段作为元素,这些元素可以直接用于之后的片段的压缩单元
解压时必须要回溯之前的片段,因此不可能达到你的要求,不过rle编码是可以的

出0入0汤圆

 楼主| 发表于 2018-10-15 19:05:40 来自手机 | 显示全部楼层
syj0925 发表于 2018-10-11 22:37
请教一下,压缩/解压不用把整个文件读取到内存吗?还是可以读取一小段,然后解压一小段? ...

21楼回复的很详细,可以参考一下

出0入0汤圆

发表于 2019-3-13 22:43:18 | 显示全部楼层
yanghuanchun 发表于 2018-10-11 11:17
抱歉,刚看到消息,我们使用的内存也不是很大,外接的好像是256Mbit的SDRAM。这个是可以解压windos上面的 ...

楼主大神,请问你这个方案确定能解压WINDOWS生成的压缩文件吗?例如WINRAR软件生成的压缩包.谢谢.

出0入0汤圆

 楼主| 发表于 2019-3-15 22:40:13 | 显示全部楼层
advarx21ic 发表于 2019-3-13 22:43
楼主大神,请问你这个方案确定能解压WINDOWS生成的压缩文件吗?例如WINRAR软件生成的压缩包.谢谢. ...

可以解压电脑打包的ZIP的。大神不敢当啊,都是搬来的代码。

出0入0汤圆

发表于 2019-3-17 09:48:10 | 显示全部楼层
yanghuanchun 发表于 2019-3-15 22:40
可以解压电脑打包的ZIP的。大神不敢当啊,都是搬来的代码。

感谢指点
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 03:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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