OpenEdv-开源电子网

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

编译后的RAM空间不足

[复制链接]

16

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-12-6
在线时间
11 小时
发表于 2015-4-9 16:13:35 | 显示全部楼层 |阅读模式
5金钱
我在编译后,看到我的STM32103RCT6中的Code=9252,RO-data=336,RW-data=96,ZI-data=44920
在这RAM中的空间只有48KB,现在如何能修改程序减少ZI-data的大小呢??

最佳答案

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

首先是合理使用全局、静态、局部变量,多用结构体或函数指针,另外可以在启动文件中,修改堆栈大小。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

32

主题

286

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2014-3-27
在线时间
358 小时
发表于 2015-4-9 16:13:36 | 显示全部楼层
首先是合理使用全局、静态、局部变量,多用结构体或函数指针,另外可以在启动文件中,修改堆栈大小。
回复

使用道具 举报

16

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-12-6
在线时间
11 小时
 楼主| 发表于 2015-4-9 16:46:51 | 显示全部楼层
回复【2楼】wjfhsym:
---------------------------------
好的,我现在正在修改程序,希望能多出点空间,不然一加算法就存储空间不够用
回复

使用道具 举报

32

主题

286

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2014-3-27
在线时间
358 小时
发表于 2015-4-9 17:09:49 | 显示全部楼层
先把启动文件修改一下看看,应该会减少很多空间的。

Stack_Size      EQU     0x00000200
Heap_Size       EQU     0x00000100
或者再小点试试
回复

使用道具 举报

16

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-12-6
在线时间
11 小时
 楼主| 发表于 2015-4-9 17:54:32 | 显示全部楼层
回复【4楼】wjfhsym:
---------------------------------
是小了点,但是不知道后面加进一些算法能否撑的住,现在感觉内存不够还是挺麻烦的事情。
回复

使用道具 举报

32

主题

286

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2014-3-27
在线时间
358 小时
发表于 2015-4-10 10:15:52 | 显示全部楼层
恩,程序设计讲究高内聚低耦合,如果你的全局变量太多,导致耦合度太高,再加上代码量大,很可能会影响程序运行。平时搞设计的时候,要估计代码量,选择合适的MCU。但很重要的一点就是搞好程序算法。我的 MCU   768kB Flash, 96kB SRAM   编译后的情况如下。
Program Size: Code=55164 RO-data=3144 RW-data=532 ZI-data=34532  ,我的Code=55164比你的大得多,但变量ZI-data=34532,我用的结构体和指针比较多,但调试的时候也会遇到指针跑乱的情况。这些都需要在学习和设计中加强,慢慢来吧。
回复

使用道具 举报

16

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-12-6
在线时间
11 小时
 楼主| 发表于 2015-4-10 14:39:13 | 显示全部楼层
回复【6楼】wjfhsym:
---------------------------------
谢谢啊,呵呵……,还是有很多地方需要学习,因为我结构体中用到的数组了,所以把SRAM占用较多
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2015-4-10 15:59:21 | 显示全部楼层
完成同样的工作,SRAM用得少也是编程能力的一种体现。我也是编程的习惯也是全局变量满天飞...............
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

16

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-12-6
在线时间
11 小时
 楼主| 发表于 2015-4-10 16:05:35 | 显示全部楼层
回复【8楼】ArchiChain:
---------------------------------
全局变量有时候放到函数中会不好使,不知道问题在哪?
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2015-4-10 16:27:35 | 显示全部楼层
回复【9楼】在水一方:
---------------------------------
单步走走看怎么不好使,不同C文件里面是否定义了extern 变量?是否有多个函数(包括中断函数)调用并修改变量?是否使用memcpy()命令给数组赋值长度出错造成数组数据出错?
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

16

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-12-6
在线时间
11 小时
 楼主| 发表于 2015-4-10 19:18:38 | 显示全部楼层
回复【10楼】ArchiChain:
---------------------------------
就是在main上面定义了个变量,想把变量放到main还是里面,就出现错误了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-24 06:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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