
hex文件中包含有实际代码的存储地址、帧长度、类型、校验等,而这些东西在你烧录程序时并不会烧录进单片机,这些东西只是为烧录软件指定程序要烧录进单片机的地址,以及保证要烧录数据的完整性。所以实际烧录进单片机的数据要远远小于hex中的数据。
比如,我的一个hex的文件大小为52KB,我烧录进单片机,但实际上占用的单片机的存储空间只有205KB。
所以,你的单片机为8K大小,hex文件是可以远远大于8KB的。
要查询你的程序占用了多大的空间有两个办法,一个是利用编译器查看编译后可执行文件的大小,比如keil c就很容易查看,在build窗口中,编译后有下列类似语句:Program Size: Code=5060 RO-data=12 RW-data=40 ZI-data=1792
其中的Code说明我的代码大小为5060个字节,不到5KB,这个时候我的hex文件大小是15KB。
另一个方法是将hex文件转成bin文件,bin文件是你实际产生的可执行代码数据。网上有不少工具可以转换的。
data=470 编译器编译后,程序总共需要占用47字节的片内RAM空间。注意这个大小仅仅是累加而已,并未考虑各个块之间的空隙,也就是说实际占用的RAM空间可能多于此数值。
xdata=0 程序未使用片外RAM(映射)空间
code=3092 编译器编译出的各个代码块总共大小为3092字节。与前面的data一样,由于各个块之间可能存在空隙,因此实际生成的代码大小可能多于此数值。
AT89C52的程序空间是8KB是确认无疑的,但指的是存放纯二进制的机器码,就是二进制数。而KeilC编译的HEX代码文件并不是纯二进制数,是以ASCII码格式存放的文件,而且其中还有一些编译信息,如地址、校验和等。所以,不能看HEX文件的大小来确定下载到单片机内的真正的程序空间大小,也就是说HEX文件的大小并不是真正下载的单片机的程序大小。而下载到单片机的代码空间大小要看Keilc编译时给出的代码数的提示,才是真正要下载到单片机内的代码空间。举个例子,下图是一个程序编译后的提示,真正的二进制代码是337个字节,而HEX文件却是1KB。这里还有一个误区,你看到的HEX文件的大小是 *** 作系统给出的大小吧,它是取整KB的,就是说HEX文件不足1KB时,也显示是1KB。
再明确一点说吧,假如编译后的代码是750418,用纯二进制数(即BIN格式,有些汇编程序的编译器输出的就是BIN格式)的代码保存就是3个字节,而用HEX格式保存就是6个字节,因为要用6个ASCII码来表示。这来算来,HEX文件大小是BIN文件的二倍,加上一些地址信息,是大于二倍的。
好,回到你的问题来,你的HEX文件是19KB,你看一下编译后的代码大小提示,肯定是不会超过8KB的,否则编译时肯定会报错的。
这里有一点需要的是:
无论是HEX的大小,还是编译后CODE的大小,都不是烧入到MCU中代码的“真实”容量。
因为这里涉及到数据存放格式相关问题,具体我就不说了。
一般来说,烧入到MCU硬件中去的程序大小,会比你keil编译后的CODE的大小稍微小一些,但差距不会很大。
所以在一般使用中,可以把编译后CODE的大小来作为实际程序容量的一个参考,,,话再说回来,LZ一般不会去那样极限编程吧,LZ你编译后,CODE的大小是多少呢??
我的邮箱是:
ppt1845@163com
有什么问题的话,可以邮件交流等。
keil4怎么缩小放大编写区域有以下几种 *** 作方式:
1、在键盘上ctrl++或者按ctrl--即可放大或者减小。
2、使用Ctrl+]快捷键调节,每按动一次Ctrl+],字体将增大,如果按住不放可实现连续调节字体大小,直至所需要的大小。
3、使用Ctrl+Shift+快捷键进行调节,每按动一次Ctrl+Shift+,所选字体将增大一个字号,如果按住不放可实现快速调节字体大小。
4、如果使用Ctrl+-快捷键调节,每按动一次Ctrl+-,字体将减小。
5、使用Ctrl+Shift+快捷键进行调节,每按动一次Ctrl+Shift+,所选字体将减小一个字号。
以上就是关于关于Keil C 存储容量的问题 各位大虾帮帮忙全部的内容,包括:关于Keil C 存储容量的问题 各位大虾帮帮忙、用keil编译51程序时,下面的Program Size: data=47.0 xdata=0 code=3092,是什么意思各个值允许最大是多少、51单片机程序空间大小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)