按照C编译器编译的结果,一般会产生RO段,RW段,ZI段.RO是程序中的指令和常量,RW是程序中的已初始化全局变量,ZI是程序中的未初始化或初始化为零的全局变量. 那么如下的代码 int aaa; int bbb; int main() { aaa = ; bbb = ; ; } 应该产生的是八个字节的ZI段,但很奇怪,--bss_threshold=0 Program Size: Code= RO-data= RW-data= ZI-data= 如上所示,其中的Code段,RO-data段和Z…
编译的一个ARM的程序,会得到这样的信息: ============================================================================== Code (inc. data) RO Data RW Data ZI Data Debug 2730 194 250 8 96 16068 Grand Totals 2730 194 250 8 96 16068 ELF Image Totals 2730 194 250 8 0 0 ROM T…
一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将我的一些关于RO,RW和ZI的理解写出来,希望能对大家有所帮助. 要了解RO,RW和ZI需要首先了解以下知识: ARM程序的组成 此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别. 一个ARM程序包含3部分:RO,RW和ZI…
1.比如编译一个工程文件,产生如下提示信息: Program Size: Code=18938 RO-data=622 RW-data=124 ZI-data=7724 RO段.RW段和ZI段 要了解RO,RW和ZI需要首先了解以下知识:ARM程序的组成            此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别.            一个ARM程序包含3部分:RO,RW和ZI.RO是程序中的指令和常量:R…
Limit 含义了解RO,RW和ZI需要首先了解以下知识:ARM程序的组成此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别.一个ARM程序包含3部分:RO,RW和ZIRO是程序中的指令和常量RW是程序中的已初始化变量ZI是程序中的未初始化的变量由以上3点说明可以理解为:RO就是readonly,RW就是read/write,ZI就是zero ARM映像文件的组成所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为i…
经常用keil,也听说IAR的编译效率很高,原来C51时用proteus,最近proteus8开始支持stm32,所以在研究用keil5+HAL+proteus学习STM32F. 问题:因为proteus的对stm32的仿真只支持.elf文件格式(GCC编译器的输出文件),而keil只能生产.alf和hex所以跑不起来. 查找:那keil能否用GCC呢?网上找到是可以的,在keil官网上http://www.keil.com/arm/gnu.asp查到和另一篇文章: 一 下载GNU ARM:ht…
@2019-02-14 [小记] RO段.RW段和ZI段 --Image$$??$$Limit 含义(zz)…
转自IAR ARM.IAR STM8.IAR MSP430共用一个IDE 试了安装好多个不同版本不同编译器的IAR,终于明白不同编译器的IAR共用IDE的条件,把几个不同编译器的IAR安装在一起,共用IDE. 以上几个编译器编译仿真STM32.STM8.MSP430正常,仿真器为J-Link.ST-Link.FET430UIF,编译器版本为:CD-EWARM-6101-2180.CD-EWSTM8-1301.CD-EW430-5201. 不同编译器的IAR共用IDE的条件是:IDE版本相同,也就…
在使用keil开发STM32应用程序时,点击Build后在Build Output窗口中经常会有如下信息:<ignore_js_op> 以前一直好奇这几个参数和实际使用的STM32芯片中Flash和SRAM的对应关系,于是上网搜了一圈,做如下总结: 这些参数的单位是Byte 图中几个参数分别代表  Code:代码的大小 RO:常量所占空间 RW:程序中已经初始化的变量所占空间 ZI:未初始化的static变量和全局变量以及堆栈所占的空间 上述参数和芯片Flash以及SRAM的对应关系是  Fl…
1. 如果你的程序中使用了C++全局变量,那么*不要*使用MicroLIB,否则Keil会说某某Symbol找不到 2. 不使用MicroLIB带来的一个问题是KEIL会使用semihosting SWI完成sys_io(例如printf的时候),我们需要一个retarget.c来禁止semihosting.KEIL提供该文件的模版(包括最小版和完全版,见下文),改改就是了 3. retarget.c也有最小版和完全版:最小版除实现fputc及辅助函数用于printf外,只实现了sys_io中的…