keil4的map档,code (inc. data) 谁能尽述data是哪些?

[复制链接]
9785|23
 楼主| sedatefire 发表于 2012-8-27 10:58 | 显示全部楼层 |阅读模式
本帖最后由 sedatefire 于 2012-8-31 00:16 编辑

目前已知
1.printf的常量字符串
2.mcu的寄存器
可以影响inc. data字段

但,这些还对不上map档
高分求解?

另外,map档上写着
Total Rom Size = Code + R0 Data + RW data
rom空间关RW data什么事??

PS: 我说的是keil的arm版本
 楼主| sedatefire 发表于 2012-8-27 10:59 | 显示全部楼层
偶的贴,从来都是50分
dqyubsh 发表于 2012-8-27 12:53 | 显示全部楼层
首先是全局变量,它占的data空间最大了。
forgot 发表于 2012-8-27 16:24 | 显示全部楼层
我记得网上有个MDK的map文件分析,可以看看那
airwill 发表于 2012-8-27 16:56 | 显示全部楼层
inc. data字段   是指令数据字段, 其实就是代码.
RO Data 字段   是常数   
RW Data 字段   是变量
ZI Data 字段    是零初始化变量, 通常是数组结构等.

1.printf的常量字符串,  是的, 我也发现 printf 控制字符串会影响生产的代码大小.
 楼主| sedatefire 发表于 2012-8-27 17:37 | 显示全部楼层
另外发现一个问题
Total Rom Size = Code + R0 Data + RW data
我好奇的是
rom空间关RW data什么事?!!
太奇怪了
雷影少年 发表于 2012-8-27 18:42 | 显示全部楼层
用keil俩月了,只是知道date受程序中变量个数的影响,xdate要自己定义,code受程序代码长度的影响,目前还没看到过专门讲这个的**或者帖子,坐等高人~
雷影少年 发表于 2012-8-27 18:48 | 显示全部楼层
百度了下相关资料,发现你们说的貌似是ARM,咱处于51阶段的新手就飘过好了找到了点东西不知道对LZ有没有帮助

本帖子中包含更多资源

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

×
原野之浪 发表于 2012-8-27 19:01 | 显示全部楼层
1# sedatefire
大侠  上次看了你的贴  用词好像太甲骨文了 看了难受

现在看来可能是我知识不够宽

生成的list 啥的 看过了么?可能看过了哦

我是这样理解的

首先说 数据

想理解
先得弄个间的
原野之浪 发表于 2012-8-27 19:09 | 显示全部楼层
先得弄个简单的程序  然后设置那个好像叫做target的选项里面 看看data区 xdata区啥的 当然你的单片机没xdata区就不太好弄了么?当然不是,要用软件仿真环境弄   弄原理当然得弄51的软件仿真   软件仿真我现在认为比硬件真实运行要准确的多。比如有bug的程序在软仿真运行错误,在硬件里面运行竟然能凑凑合合的用

我的意思是软仿真已经可以说没啥bug了,51的。
然后就弄函数  看那个keil帮助文档  看里面的参数啊  寄存器分配啊
包括指针分配内存啊  比如 有6个参数  他可能就是前几个 放哪里啊 后几个 放哪里啊

这样简单了解

然后就写个简单程序 编译   先不看output里面分配  然后自己算能用几个data 几个xdata

然后看看和output里面是否一致。 对了 要注意优化级别

至于代码大小  我看一般的人 还是估计不出来大小的吧  

讲了半天  可能答非所问   就当时回顾以前的知识了
 楼主| sedatefire 发表于 2012-8-27 23:23 | 显示全部楼层
弄懂这些,对于程序优化,很有好处的。
hongshui3000 发表于 2012-8-27 23:58 | 显示全部楼层
学到不少谢谢各位了
misra 发表于 2012-8-28 08:59 | 显示全部楼层
11# sedatefire
大侠

一般来讲  过分讲究优化 未必是好事  还是看场合

如果对自己信心不足  并且没有多次搞过同一个程序 就是积累不够  并且对安全要求高  那么我觉得还是弄成最低优化级别好

如果有过积累 (所谓多次重构),对安全要求较高 那么 默认级别也好

如果要求极高 比如那个火星登陆  竟然全是静态类型 即便再有信心还是悠着点

夸大阅读面  能。。

嗨  班门弄斧
coody 发表于 2012-8-28 11:18 | 显示全部楼层
51的话,data就是内部的256字节。
efen 发表于 2012-8-29 14:06 | 显示全部楼层
RW Data 是要有初始值的
问题是RAM不能保存初始数据,所以就会烧录到flash,占用ROM的空间
上电运行的时候单片机再把flash的初始值copy到RAM
 楼主| sedatefire 发表于 2012-8-31 00:15 | 显示全部楼层
偶说的是ARM的啦啦啦啦
 楼主| sedatefire 发表于 2012-8-31 00:17 | 显示全部楼层
本帖最后由 sedatefire 于 2012-8-31 09:47 编辑

13# misra
我指的优化,是说通过看map档,可以知道程序的空间分布。
如果要压缩空间的话,压缩那些大头比较有效
雷影少年 发表于 2012-8-31 08:16 | 显示全部楼层
继续顶
 楼主| sedatefire 发表于 2012-8-31 09:47 | 显示全部楼层
13# misra
我指的优化,是说通过看map档,可以知道程序的空间分布。
如果要压缩空间的话,压缩那些大头比较有效
sedatefire 发表于 2012-8-31 00:17
 楼主| sedatefire 发表于 2012-9-14 10:06 | 显示全部楼层
自己顶一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4393

主题

5935

帖子

34

粉丝
快速回复 在线客服 返回列表 返回顶部