首页 > 其他分享 >Keil 和Eclipse 软件编译环境下bin和ram以及flash大小及关系

Keil 和Eclipse 软件编译环境下bin和ram以及flash大小及关系

时间:2024-05-11 11:43:10浏览次数:29  
标签:bin 初始化 Keil flash hex bss Byte data

一. keil 软件编译环境

Program Size: Code=65228  RO-data=5302  RW-data=48  ZI-data=1681

keil软件编译后会出现上面的提示,其意义如下:

Code:指程序中代码的字节数

RO-data:指程序中定义的常量字节数

RW-data :程序中已初始化的变量字节数

ZI-Data :程序中未初始化的变量字节数

可计算出flash和RAM的占用情况:

flash = Code + RO-data + RW-data  = 65228 Byte + 5302 Byte   +  48 Byte   = 70578 Byte   

ram = RW-data + ZI-data = 48 Byte  +  1681 Byte  =  1729 Byte 

 

二. Eclipse 软件编译环境

   text      data     bss        dec        hex           filename
128288   684   17160   146132   23ad4    TLSR8258_Mesh_Dimmer_Light_20240430.elf
128288   684  17160    146132   23ad4       (TOTALS)

数据说明:
.text: 128288   Byte
.data: 684   Byte
.bss: 17160   Byte
dec: text+data+bss=146132   Byte (十进制)
hex: text+data+bss=0x23ad4   Byte (十六进制)

RAM的计算 = data + bss = RW Data + ZI Data 

RAM中的大小 = data + bss = 684 Byte + 17160 Byte= 17844 Byte 

bin = text + data = Code + RO Data + RW Data

 

Code :代表执行的代码,程序中所有的函数都位于此处。

RO data:代表只读数据,程序中所定义的全局常量数据和字符串都位于此处。

RW data:代表已初始化的读写数据,程序中定义并且初始化的全局变量和静态变量位于此处。

ZI data:代表未初始化的读写数据,程序中定义了但没有初始化的全局变量和静态变量位于此处。

 

text代码段:

(.text)= (Code + RO data) ,存放代码、常量及向量表,只读。 最终存放在FLASH。
例如函数、const int table[]、中断向量表。

 

data数据段:

(.data) = (RW data),存放已初始化的全局/静态变量,可读可写。 最终存放在FLASH。
data放的是初始化的变量,且同时计入RAM和FLASH。链接器把数据分配在FLASH中然后在启动代码中从ROM拷贝到RAM。
例如int32_t myVar = 0x12345678;,data段仅包含初始化所用的数据(本例中的0x12345678),不含变量(myVar)。变量myVar不是常量,所以最终会存放于RAM内。但是初始值(0x12345678)是一个常量,因此可以放在FLASH里。

 

bss:

(.bss) = (ZI data) ,存放所有未初始化的全局/静态变量,可读可写。 最终存放在RAM。
例如int32_t myGlobal; ,函数初始化bss段就是把未初始化的变量置0。

 

bin文件

binary文件,即二进制文件
执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行;

从可执行程序的角度来说,如果一个数据未被初始化,就不需要为其分配空间,所以.bss 并不占用可执行文件的大小,仅仅记录需要用多少空间来存储这些未初始化的数据,而不分配实际空间。

hex、bin、flash三者的大小关系

在烧录程序时往往将hex文件烧录到flash中,但hex文件的大小和flash的大小没什么必然的关系,hex文件大于单片机flash的大小也能烧录到单片机中。原因在于真正写入flash的不是hex文件,而是hex文件中的bin文件。有些软件直接生成的就是bin文件,而不是hex文件。

标签:bin,初始化,Keil,flash,hex,bss,Byte,data
From: https://www.cnblogs.com/z3286586/p/18186120

相关文章

  • MySQL如何快速获取binlog的开始时间和结束时间
    之前写过一篇文章MySQL如何获取binlog的开始时间和结束时间[1],文章里面介绍了如何获取MySQL数据库二进制日志(binlog)的开始时间与结束时间的一些方法。实际应用当中,我们可能还会遇到效率/性能方面的问题。最近对这个问题做了一些研究,这里就介绍一下如何快速获取MySQL二进制日志(bi......
  • Error: Cannot find module 'C:\Program Files\nodejs\node_modules\npm\bin\no
     #参考:https://stackoverflow.com/questions/69541725/error-cannot-find-module-c-program-files-nodejs-node-modules-npm-bin-node-mod --- #问题描述在一直倒腾重新安装nodejs时报的一个这样的错,记录一下 在执行npm-v时报了如标题的错,见下图 --- #原因......
  • DAP Link在Keil MDK5中使用时如何配置下载器选项
    如下图,我所使用的是这种DAPLink下载器 配置步骤如下:1、OptionsforTarget'Project'->Debug页面下,选择“CMSIS-DAPDebugger”下载器,并肩如Settings页面 2、Settings页面下,选择DAP下载器,使用SW下载方式,复位方式一定选择“SYSRESETREQ”,否则会提示如法复位目标芯片......
  • Oracle Hint "index_combine"对于like的局限性
     OracleHint"index_combine"对于like的局限性 数据库版本:11.2.0.4.0今天遇到1条问题SQL,优化遇到一点问题,SQL文本大概如下:其中,col2和col3存在索引的且选择性都很高,col1的业务特性是只有两个值选择性低没有也不适合建Btree索引。导致每次执行都是全表扫描,统计发现这条SQL......
  • 1-k8s集群安全-Role_RoleBinding
    1.k8s集群安全-RoleRoleBinding认证(Authentication)、鉴权(Authoriaztion)、准入控制(AdmissionContorl)三步来保障其安全Authentication(认证)1.由一到多个认证插件完成。收到请求后,APIServer依次调用为其配置的认证插件来认证客户端身份,直到其中的一个插件可以识别出请求者的身份......
  • stm32 将外部 Flash挂载在 SPI 出现数据传输时好时不好的排查过程
    现象:将外部Flash挂载在SPI,在hardware_init()->read_jedec_id()里的result=spi->wr(spi,cmd_data,sizeof(cmd_data),recv_data,sizeof(recv_data))中,recv_data的值经常不一致,result的值偶尔为SFUD_SUCCESS,大部分会Error。备注:正常情况下,recv_data的值为......
  • Error: Cannot find module ‘D:\SoftSetupLoaction\nodejs\node_global\node_mod
    Error:Cannotfindmodule‘D:\SoftSetupLoaction\nodejs\node_global\node_modules\npm\bin\npm-cli.js‘  出现原因:重新安装可装了nodejs和npm网上查了很多方法,都建议重装,但是都没有效果(因为我就是重装之后出现的问题)按照错误提示node_global找不到npm-cli.js,个......
  • react里面bind与箭头函数
    bind由于在类中,采用的是严格模式,所以事件回调的时候,会丢失this指向,指向undefined,需要使用bind来给函数绑定上当前实例的this指向;箭头函数的this指向上下文,所以永久能拿到当前组件实例,this指向,我们可以完美的使用箭头函数来替代传统事件处理函数的回调箭头函数class......
  • SwiftUI State,Binding 状态管理
    代码////ContentView.swift//SwiftUIState////CreatedbyCHENHaoon2024/5/8.//importSwiftUIstructContentView:View{@StateprivatevarisPlaying=false@StateprivatevarclickNumber1=0@StateprivatevarclickNumber2=0......
  • Elements in iteration expect to have 'v-bind:key' directives.
    当组件中使用v-for时,如果不指定key,则会有红色警告信息。解决方案如下。方案一:绑定key(亲试有效)//方式一<liv-for="(item,index)inlist":key="index">//方式二<liv-for="(item,index)inlist":key="item.id">//方式三<liv-for="(item,in......