7426|4

19

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

keil中变量的存储分配 [复制链接]

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

最新回复

有想法~~~~~~  详情 回复 发表于 2010-3-6 17:47
点赞 关注
 

回复
举报

2131

帖子

0

TA的资源

至上芯片

沙发
 

回复 楼主 glacierm 的帖子

首先 在keil中编译结果如下:
其中:
    Code 指存储到flash中的程序代码,代码被系统添加了一部分初始化ZI的代码,编程者看不到这部分。
    Z I     用户没有初始化,并且被系统初始化为0的变量的字节数,keil编译器默认是把你没有初始化的变量都赋值一个0,这些变量在程序运行时是保存在RAM中的。
    RW  是可读写变量,RW + ZI=RAM字节数。
    RO,这个是初始化的常量,这些值是被保存到Rom中的,Rom占用=Code + RO + RW。   
请看map文件

Memory Map of the image

  Image Entry point : 0x080000ed

。。。。。

================================================================================


      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   

    112950       7600        858        668      24916     349320   Grand Totals
    112950       7600        858        296      24916     349320   ELF Image Totals (compressed)
    112950       7600        858        296          0          0   ROM Totals

================================================================================

    Total RO  Size (Code + RO Data)               113808 ( 111.14kB)
    Total RW  Size (RW Data + ZI Data)             25584 (  24.98kB)
    Total ROM Size (Code + RO Data + RW Data)     114104 ( 111.43kB)

我只帖出了一部分,你可以看一下部分的内容!
单片机片内ram的使用限度是多少,那你应该看数据手册 了!
此帖出自单片机论坛

赞赏

1

查看全部赞赏

 
个人签名处处留心皆学问!
 

回复

2131

帖子

0

TA的资源

至上芯片

板凳
 
你可以看看keil的说明手册!
此帖出自单片机论坛
 
个人签名处处留心皆学问!
 
 

回复

356

帖子

0

TA的资源

五彩晶圆(初级)

4
 
不错,学习学习,呵呵
此帖出自单片机论坛
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(初级)

5
 
有想法~~~~~~
此帖出自单片机论坛
 
个人签名没什么不可能,只要认真用心的学~~
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表