单片机flash大小与hex文件大小的具体关系

[复制链接]
 楼主| afisk 发表于 2010-11-16 16:48 | 显示全部楼层 |阅读模式
用STC单片机做的东西,代码用keil4编译。问题是编译生成的hex文件大小必须小于单片机的flash的大小吗?有的人说hex文件可以大于flash,要看什么缓冲区是否符合,请问各位大侠,具体怎么看啊,谢谢


ps:(我发现hex文件大于flash也可以正常下载,有的程序也可以正常运行,有的不可以)
ejack 发表于 2010-11-16 19:02 | 显示全部楼层
hex文件其实是个格式规范的文本文件。程序代码大小与hex文件大小没有绝对的关联性,不过对于C51编译的代码来说由于塞得比较紧密(不像个人写汇编那么多随意的gap)可以认为有一个常见的比例关系。
程序代码的实际大小以hex文件中最高地址,或者以转换后的bin大小也可。

评分

参与人数 1威望 +1 收起 理由
afisk + 1

查看全部评分

chunyang 发表于 2010-11-16 19:07 | 显示全部楼层
HEX文件需要转换成BIN文件后才是实际机器代码的尺寸,编译器在编译时也会告知机器代码的长度,这个参数才是要和存储器匹配的。
xwj 发表于 2010-11-16 19:12 | 显示全部楼层
HEX文件,如果是连续地址的,除以2.6就差不多是实际大小。

一般编译器(比如Keil)编译后都会提示代码占用空间的,LZ都不看的吗?

评分

参与人数 1威望 +1 收起 理由
afisk + 1

查看全部评分

coody 发表于 2010-11-16 22:33 | 显示全部楼层
编译后看CODE大小,或者转成BIN看大小,HEX不准确的
liang7143 发表于 2010-11-17 09:57 | 显示全部楼层
HEX文件,里面有地址,还有验证信息
ayb_ice 发表于 2010-11-17 10:12 | 显示全部楼层
编译器又不知道你的硬件是怎么设计的
比如89C52 8KB程序
但你有可能使用外部程序,你的扩展设计可以是32K,64K啊,甚至使用切页方式16M,或者任意值
当然如果指定使用片内内存,编译代码如果超过范围则编译器会报警
....

评分

参与人数 1威望 +1 收起 理由
afisk + 1

查看全部评分

batsong 发表于 2010-11-17 12:50 | 显示全部楼层
文件大小是在windows文件系统下的大小
mcu9999 发表于 2010-11-17 13:26 | 显示全部楼层
可能是Flash的空间大小是不正确的,
标4K,本身有8K...
tianm 发表于 2010-11-17 13:32 | 显示全部楼层
找个hex文件的介绍看看
jyxielong 发表于 2010-11-17 16:48 | 显示全部楼层
HEX 下到flash中后,占得大小比hex本身文件大
jyxielong 发表于 2010-11-17 16:49 | 显示全部楼层
:L说错了,变小。。。。不清楚他们有什么关系
 楼主| afisk 发表于 2011-2-12 21:33 | 显示全部楼层
谢谢大家的回答 我现在彻底搞懂了 :)
 楼主| afisk 发表于 2011-2-12 21:36 | 显示全部楼层
7# ayb_ice

受用了 多谢!!
 楼主| afisk 发表于 2011-2-12 21:37 | 显示全部楼层
2# ejack

非常感谢你的回答,我现在对这个了解了!!
 楼主| afisk 发表于 2011-2-12 21:38 | 显示全部楼层
3# chunyang

回帖晚了 主要是前一段有点事 不好意思 chunyang大哥很给力!!!
china_fog 发表于 2011-2-12 21:41 | 显示全部楼层
编译完成下面有报告,程序要占多少字节,RAM空间要占多少,都有的,要么你生产各BIN文件来下载也可以。HEX跟实际尺寸差别蛮大
coody 发表于 2011-2-12 23:49 | 显示全部楼层
LZ可以在STC的下载软件中看到最后的地址,不超过的就可以,超过的话,会报告的。如果没有报告,则大小在MCU的FLASH范围内。
nan_banqiu 发表于 2011-2-14 18:09 | 显示全部楼层
学习了
AI_YSD 发表于 2012-12-31 16:29 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

53

帖子

1

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