打印

单片机内程序运行的时候存储空间是如何分配的?

[复制链接]
1986|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huikeil|  楼主 | 2008-1-8 13:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

我现对一个程序进行减少片内ram的使用的优化,有一些效果,同时也产生了些疑问,在此向各位大虾请教:
一、现象:
1、我在通过减少全局变量、函数内变量的使用,减少函数间参数传递等手段来优化,发现某些时候我减少一个变量的使用,keil编译的结果就显示data减少了一字节,有时候这样一直减少几个变量的使用,data值一直都不会变,接着再减少变量的使用,又会一个一个的减少,到后来又不减少了。
2、我屏蔽程序中一些代码之后编译,显示data反而是增加了。
二、疑问:
1、单片机程序运行的时候,内部ram是如果分配管理的,data值由哪些部分组成?
2、之前描述的两个现象如何解释?
3、data值是不包括堆栈空间的,那么程序运行的堆栈空间大概需要多少,和哪些因素有关,能不能预估?
4、单片机片内ram的使用限度是多少?(指keil编译出来的data值最好不要超过多少)

相关帖子

沙发
HWM| | 2008-1-8 13:51 | 只看该作者

Keil C51 用的是变量覆盖的方法动态使用RAM,

若不是完全去除相应模块(包括定义)会影响其覆盖而使RAM使用空间增大。
至于data空间的使用上限,取决于你的程序嵌套深度和中断服务。

使用特权

评论回复
板凳
computer00| | 2008-1-8 14:21 | 只看该作者

keil C使用了局部变量地址覆盖的方法,如果没有调用关系,

局部变量就可以使用同一个地址。如果你删除的那几个函数,里面的局部变量刚好被分配在同一个地址,
那么删除掉几个函数并不能减少内存的使用。具体如何分配,编译器会分析调用关系。
如果一些函数没有被调用,编译器就无法分析出那些的调用关系,结果就会造成RAM大量浪费

使用特权

评论回复
地板
jutyy| | 2010-12-11 18:00 | 只看该作者
同样的问题,我也想知道哦!

使用特权

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

本版积分规则

2

主题

2

帖子

0

粉丝