在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!)    创芯人才网--重磅上线啦!
查看: 2907|回复: 2

[讨论] 【疑问】keil中的变量存储分配

[复制链接]
发表于 2010-3-6 10:23:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
单片机内程序运行的时候存储空间是如何分配的?
我现对一个程序进行减少片内ram的使用的优化,有一些效果,同时也产生了些疑问,在此向各位大虾请教:
一、现象:
1、我在通过减少全局变量、函数内变量的使用,减少函数间参数传递等手段来优化,发现某些时候我减少一个变量的使用,keil编译的结果就显示data减少了一字节,有时候这样一直减少几个变量的使用,data值一直都不会变,接着再减少变量的使用,又会一个一个的减少,到后来又不减少了。
2、我屏蔽程序中一些代码之后编译,显示data反而是增加了。
二、疑问:
1、单片机程序运行的时候,内部ram是如果分配管理的,data值由哪些部分组成?
2、之前描述的两个现象如何解释?
3、data值是不包括堆栈空间的,那么程序运行的堆栈空间大概需要多少,和哪些因素有关,能不能预估?
4、单片机片内ram的使用限度是多少?(指keil编译出来的data值最好不要超过多少)
发表于 2014-7-1 21:43:52 | 显示全部楼层
一般局部變數配置在 stack, 但是 8051 的 stack 太小, Keil 會分析這些局部變數的使用重疊狀況(call tree), 將它們配置在 data 區間,  而非 stack.
如果 call tree 很深, 你只是將某個枝節 (subroutine) 的局部變數減少, 它就無法降低 RAM 的總使用量.
发表于 2014-8-6 23:40:21 | 显示全部楼层
It depends on 8051 mcu part number. Standard 8051 has 128 bytes of internal ram. As per Keil it is data segment. If you use mcu like P89V51RD2 AT 89C51RD2/ED2 then you can get XDATA memory. For this mcu you can choose Large memory model in C51 options of Keil. You can explicitly declare variable as XDATA. If you do so then compiler will place variable in XDATA instead of internal 128 data segment.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-12 23:25 , Processed in 0.023050 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表