OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3408|回复: 11

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

[复制链接]

52

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2019-4-1
在线时间
118 小时
发表于 2019-6-21 16:26:02 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 jshzp 于 2019-6-21 21:08 编辑

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

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



最佳答案

查看完整内容[请看2#楼]

可以的 你没用到内存管理 就可以删掉整个内存管理的文件的
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

35

主题

560

帖子

2

精华

资深版主

Rank: 8Rank: 8

积分
17784
金钱
17784
注册时间
2018-3-3
在线时间
523 小时
发表于 2019-6-21 16:26:03 | 显示全部楼层
jshzp 发表于 2019-6-22 12:58
map文件中,还找到一个比较大的
[mw_shl_code=c,true]  Base Addr       Size       Type     Attr      ...

可以的  你没用到内存管理 就可以删掉整个内存管理的文件的
/*
*
*
*
*
*
*/
回复

使用道具 举报

7

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
221
金钱
221
注册时间
2011-8-8
在线时间
50 小时
发表于 2019-6-21 16:48:41 | 显示全部楼层
30MB 在429这个不可能的,加外扩sram都困难。我之前玩emwin也是,很大的内存占用,没折只能改板子。
你这个这么大的文件,只能分段读取,分次处理。压缩和解压这个比较麻烦,数据的完整性自己写没法保证完整性。
回复

使用道具 举报

52

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2019-4-1
在线时间
118 小时
 楼主| 发表于 2019-6-21 17:04:28 | 显示全部楼层
本帖最后由 jshzp 于 2019-6-21 17:05 编辑
snail_dongbin 发表于 2019-6-21 16:48
30MB 在429这个不可能的,加外扩sram都困难。我之前玩emwin也是,很大的内存占用,没折只能改板子。
你这 ...

U盘里要读的文件不大,只有几十KB。原子的U盘例程编译下来后太大了,ZI_data有30MB,不知道是什么变量开得这么大。。。
回复

使用道具 举报

0

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2017-7-26
在线时间
99 小时
发表于 2019-6-21 17:37:34 | 显示全部楼层
jshzp 发表于 2019-6-21 17:04
U盘里要读的文件不大,只有几十KB。原子的U盘例程编译下来后太大了,ZI_data有30MB,不知道是什么变量开 ...

看输出文件夹的.map文件,看看哪个变量跑这么多内存
回复

使用道具 举报

52

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2019-4-1
在线时间
118 小时
 楼主| 发表于 2019-6-21 21:01:07 | 显示全部楼层
本帖最后由 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文件里开的一个大变量,怎么具体查找是哪个变量呢?望继续指教开
回复

使用道具 举报

52

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2019-4-1
在线时间
118 小时
 楼主| 发表于 2019-6-21 21:24:19 | 显示全部楼层
大致情况基本上弄清楚了。
f429的核心板上外扩了一颗SDRAM,容量达32M,所以U盘例程就直接开了个28M的大变量,使得ZIdata高达30兆都能跑。。。而我的板子没有外扩ram,只有f429自己的256KB内存。怎么修改例程中的那个大变量呢?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-6-22 02:44:37 | 显示全部楼层
jshzp 发表于 2019-6-21 21:24
大致情况基本上弄清楚了。
f429的核心板上外扩了一颗SDRAM,容量达32M,所以U盘例程就直接开了个28M的大变 ...

用我们的例程吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

52

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2019-4-1
在线时间
118 小时
 楼主| 发表于 2019-6-22 08:54:13 | 显示全部楼层

这个帖子就是在讨论你们的例程啊,阿波罗开发板,F429核心板,U盘(Host)实验56。因为我只是想读U盘的一个几十K的二进制文件,所以没有外扩RAM。。。那个大变量是哪个?能删掉吗?
回复

使用道具 举报

35

主题

560

帖子

2

精华

资深版主

Rank: 8Rank: 8

积分
17784
金钱
17784
注册时间
2018-3-3
在线时间
523 小时
发表于 2019-6-22 10:20:13 | 显示全部楼层
删掉内存管理定义的大数组
/*
*
*
*
*
*
*/
回复

使用道具 举报

52

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2019-4-1
在线时间
118 小时
 楼主| 发表于 2019-6-22 10:26:19 | 显示全部楼层
本帖最后由 jshzp 于 2019-6-22 10:36 编辑
Psheng 发表于 2019-6-22 10:20
删掉内存管理定义的大数组
是不是下面这个数组?
[mw_shl_code=c,true]#define MEM2_MAX_SIZE            28912 *1024                      //最大管理内存28912K

__align(32) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0XC01F4000)));                    //外部SDRAM内存池
[/mw_shl_code]
回复

使用道具 举报

52

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2019-4-1
在线时间
118 小时
 楼主| 发表于 2019-6-22 12:58:56 | 显示全部楼层
本帖最后由 jshzp 于 2019-6-22 13:02 编辑
Psheng 发表于 2019-6-22 10:20
删掉内存管理定义的大数组

map文件中,还找到一个比较大的
[mw_shl_code=c,true]  Base Addr       Size       Type     Attr          Idx    E Section Name           Object
  0x20000800   0x0002a800    Zero     RW          902          .bss                malloc.o[/mw_shl_code]
这个是malloc中的哪个变量?可以直接删掉吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-13 17:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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