Keil编译产生的文件和数据解析

Keil 工程在编译完之后,会有相应的程序所占用的空间提示信息,如下所示:

1)Code:代码段,存放程序的代码部分;

2)RO-data:只读数据段,存放程序中定义的常量;

3)RW-data:读写数据段,存放初始化为非 0 值的全局变量;

4)ZI-data:0 数据段,存放未初始化的全局变量及初始化为 0 的变量;
 

下面对几个数值的关系进行说明

  ROM size:  也就是下载到单片机FLASH中的数据为  Code +RO-data +RW-data 和的大小。
  为什么不把ZI-data 也下载进去呢? 其实是没有必要的,这是浪费空间,只要程序一上电运
  行就会把ZI-data 自动清0。

RAM size: 程序运行时所需要的大小空间为 RW-data+ ZI-data

.axf文件 -- axf文件是编译默认生成的文件,不仅包含二进制代码数据,而且还包含着调试信息,在MDK里进行debug调试用的就是这个文件。真正下载到片上Flash中的信息仅仅是可执行代码,所以当axf文件大于片上flash空间不要慌,计算一下Code +RO-data +RW-data 的和也就是bin文件大小,才能判断是否大于片上flash空间。通过keil下载到单片机的就是这个文件。

.hex文件 -- hex 文件是一种使用十六进制符号表示的代码记录, 记录了代码应该存储到FLASH 的哪个地址和二进制代码数据。flymcu通过串口下载就是下载内部的二进制数据【bin文件数据】这个文件【这个文件可以通过HexTobin工具转bin文件】。

.bin文件 -- bin文件就是最小的可以运行的文件了,其包含最直接的代码映像,coflash或Jflash下载的就是这个文件。

这三个文件中axf文件最大,hex文件次之,bin文件最小。

/*********************************************举个例子:**************************************************/

我使用的STM32F103ZET6,Flash大小512kb,ROM64kb

 我的keil工程编译后的文件,fatfs.bin文件是我用hex2bin工具通过fatfs.hex文件转化的

我的keil编译信息:

Program Size: Code=13720 RO-data=176716 RW-data=132 ZI-data=23212  

计算要下载到片上flash的数据大小:

(13720+176716+132)/1024 = 186.1015Kb        <        512kb

RAM size: 程序运行时所需要的大小空间为:

(132+23212)/1024 = 22.796kb        <        64kb

从fatfs.axf大小来看,虽然它超出了flash的大小512kb,但是实际下载进去的是186.1015kb【有效二进制代码数据】,所以它能够下载到我们的单片机中去。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值