读U盘需要的变量太大了,怎么办?

2019-07-20 01:09发布

本帖最后由 jshzp 于 2019-6-21 21:08 编辑

我的工程中,需要读写U盘中的一个指定文件名的二进制文件,文件不到100KB。另外还需要完成一些其它的简单功能。
电路板已经做好了,没有外扩RAM,只是使用了STM32F429IGT6片内的256KB内存。
在移植阿波罗开发板的U盘例程时,发现在去掉液晶、SPIFLASH、文本支持等无关代码,
编译后,ZI_data从原来的33MB只是减少到了约30MB,这远超过了F429片内的256KB内存。
之前画PCB时,以为256KB足够了。。。

例程里面30MB的变量,是做什么用途的?如果只是读取指定的二进制bin文件,能压缩吗?
除了增加块外存芯片,重新做电路板,还有别的办法吗?感谢指教



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
Psheng
1楼-- · 2019-07-20 04:18
 精彩回答 2  元偷偷看……
snail_dongbin
2楼-- · 2019-07-20 10:01
30MB 在429这个不可能的,加外扩sram都困难。我之前玩emwin也是,很大的内存占用,没折只能改板子。
你这个这么大的文件,只能分段读取,分次处理。压缩和解压这个比较麻烦,数据的完整性自己写没法保证完整性。
jshzp
3楼-- · 2019-07-20 15:37
本帖最后由 jshzp 于 2019-6-21 17:05 编辑
snail_dongbin 发表于 2019-6-21 16:48
30MB 在429这个不可能的,加外扩sram都困难。我之前玩emwin也是,很大的内存占用,没折只能改板子。
你这 ...

U盘里要读的文件不大,只有几十KB。原子的U盘例程编译下来后太大了,ZI_data有30MB,不知道是什么变量开得这么大。。。
1176658950
4楼-- · 2019-07-20 16:20
 精彩回答 2  元偷偷看……
jshzp
5楼-- · 2019-07-20 21:28
本帖最后由 jshzp 于 2019-6-21 21:05 编辑
1176658950 发表于 2019-6-21 17:37
看输出文件夹的.map文件,看看哪个变量跑这么多内存

感谢回复!map中看到有个约28兆的变量,如下
Base Addr           Size         Type   Attr         Idx       E Section Name              Object

0xc01f4000   0x01c3c000   Zero   RW          900    .ARM.__AT_0xC01F4000  malloc.o

估计是malloc.c文件里开的一个大变量,怎么具体查找是哪个变量呢?望继续指教开
jshzp
6楼-- · 2019-07-21 02:43
大致情况基本上弄清楚了。
f429的核心板上外扩了一颗SDRAM,容量达32M,所以U盘例程就直接开了个28M的大变量,使得ZIdata高达30兆都能跑。。。而我的板子没有外扩ram,只有f429自己的256KB内存。怎么修改例程中的那个大变量呢?

一周热门 更多>