Keil MDK中的Code, RO-data , RW-data, ZI-data分别代表什么意思?(转)

一 基础知识

字节  8位
半字  16位
字    32位

二 解惑

Code, RO-data,RW-data,ZI-data

Code为程序代码部分
RO-data 表示 程序定义的常量const temp;
RW-data 表示 已初始化的全局变量
ZI-data 表示 未初始化的全局变量

Program Size: Code="18248" RO-data=320 RW-data=260 ZI-data=3952

Code, RO-data,RW-data ............flash
RW-data, ZIdata...................RAM

三 详细分析

初始化时RW-data从flash拷贝到RAM

生成的map文件位于list文件夹下 (KEIL)

Total RO  Size (Code + RO Data)                18568 (  18.13kB)
    Total RW  Size (RW Data + ZI Data)              4212 (   4.11kB)
    Total ROM Size (Code + RO Data + RW Data)      18828 (  18.39kB)

ARM指令的长度刚好是1个字(分配为占用4个字节),Thumb指令的长度刚好是半字(占用2个字节)

R0-R15 (R15-PC,R14-LR,R13-SP) 32位

每个异常模式还带有一个程序状态保存寄存器 (SPSR),它用于保存在异常事件发生之前的CPSR

LDMIA R1!,{R2-R7, R12} ;将R1单兀中的数据读出到R2-R7,R12,  R1自动加1
STMIA RO!,{R3-R6,R10}  ;将R3-R6,R10中的数据保存到RO指向的地址,RO自动加1

在数据传送之前,将偏移量加到Rn中,其结果作为传送数据的存储地址.若使用后缀“!”,则结果写回到Rn中,且Rn值不允许为R15.指令举例如下:
LDR   Rd, [Rn, #Ox4]!

LDMFD  SP!,{R0-R3,PC}^ ;中断返回
“^”符号表示这是一条特殊形式的指令。这条指令在从存储器中装载PC的同时(PC是最后恢复的),CPSR也得到恢复

大端格式(Big-endian)
小端格式(Little-endian)

数据0x12345678存储格式
      大端格式
低地址<----0x12|0x34|0x56|0x78---->高地址
      小端格式
低地址<----0x78|0x56|0x34|0x12---->高地址

ARM微处理器支持7种运行模式,分别为: CPSR M[4:0]

1.用户模式(usr):ARM处理器正常的程序执行状态。       10000
2.快速中断模式(fiq):用于高速数据传输或通道处理。    10001
3.外部中断模式(irq):用于通用的中断处理。            10010
4.管理模式(svc):操作系统使用的保护模式。            10011
5.数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。10111
6.系统模式(sys):运行具有特权的操作系统任务。        11111
7.定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。 11011

ARM正常工作一般工作在用户模式和系统模式,复位的时候进入管理模式。

对于ARM指令集来说,PC指向当前指令的下两条指令的地址,

注意pc,在调试的时候显示的是当前指令地址,而用mov lr,pc的时候lr保存的是此指令向后数两条指令的地址

假设反汇编代码:  0x000001 :  mov lr pc

(此时查看PC寄存器的值是0x000001,但实际PC值是0x000003, lr里面保存的就是0x000003)

fields 指定传送的区域(psr  CPSR或SPSR)
c 控制域屏蔽字节(psr[7..0])
x 扩展域屏蔽字节(psr[15..8])
s 状态域屏蔽字节(psr[23..16])
f 标志域屏蔽字节(psr[31..24])

例如:MSR cpsr_c, #0xD3 ;  CPSR[7...0] = 0xD3

时间: 2024-10-12 14:45:46

Keil MDK中的Code, RO-data , RW-data, ZI-data分别代表什么意思?(转)的相关文章

关于RO、RW、ZI的说明

参考文章: ARM中RO.RW和ZI DATA说明 http://mcuos.com/thread-2843-1-1.html STM32后生成编译文件大小探索 http://www.cnblogs.com/51mcu/p/3940376.html hex.bin.elf.axf文件区别 http://wenku.baidu.com/link?url=jnO4kGRmKoGA8SGl6wN9nZboEAPUqnZGs0_XYk743E47wCTF5a7CRjbpRaJaeG92Voe92dqWO

Keil MDK中Image$$RW_IRAM1$$ZI$$Limit

ARM程序的组成 此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别.            一个ARM程序包含3部分:RO,RW和ZI            RO是程序中的指令和常量            RW是程序中已初始化变量            ZI是程序中未初始化或初始化为0的变量            由以上3点说明可以理解为:            RO就是readonly,            RW就是

Keil编译后的Code,RO,RW,ZI分别表示什么以及和芯片Flash、SRAM的对应关系

在使用keil开发STM32应用程序时,点击Build后在Build Output窗口中经常会有如下信息: <ignore_js_op> 以前一直好奇这几个参数和实际使用的STM32芯片中Flash和SRAM的对应关系,于是上网搜了一圈,做如下总结: 这些参数的单位是Byte 图中几个参数分别代表  Code:代码的大小 RO:常量所占空间 RW:程序中已经初始化的变量所占空间 ZI:未初始化的static变量和全局变量以及堆栈所占的空间 上述参数和芯片Flash以及SRAM的对应关系是  F

KEIL MDK 查看代码量、RAM使用情况--RO-data、RW-data、ZI-data的解释(转)

源:KEIL MDK 查看代码量.RAM使用情况--RO-data.RW-data.ZI-data的解释 KEIL RVMDK编译后的信息 Program Size: Code=86496 RO-data=9064 RW-data=1452 ZI-data=16116 Code是代码占用的空间; RO-data是 Read Only 只读常量的大小,如const型; RW-data是(Read Write) 初始化了的可读写变量的大小; ZI-data是(Zero Initialize) 没有初

Keil MDK下如何设置非零初始化变量(转)

源:Keil MDK下如何设置非零初始化变量 一些工控产品,当系统复位后(非上电复位),可能要求保持住复位前RAM中的数据,用来快速恢复现场,或者不至于因瞬间复位而重启现场设备.而keil mdk在默认情况下,任何形式的复位都会将RAM区的非初始化变量数据清零.如何设置非初始化数据变量不被零初始化,这是本篇文章所要探讨的. 在给出方法之前,先来了解一下代码和数据的存放规则.属性,以及复位后为何默认非初始化变量所在RAM都被初始化为零了呢. 什么是初始化数据变量,什么又是非初始化数据变量?(因为我

有趣的keil MDK细节(转)

源:有趣的keil MDK细节 1.MDK中的char类型的取值范围是? 在MDK中,默认情况下,char 类型的数据项是无符号的,所以它的取值范围是0-255.它们可以显式地声明为signed char 或 unsigned.因此,定义有符号char类型变量,必须用signed显式声明.我曾读过一本书,其中有一句话:“signed关键字也是很宽宏大量,你也可以完全当它不存在,在缺省状态下,编译器默认数据位signed类型”,这句话便是有异议的,我们应该对自己所用的CPU构架以及编译器熟练掌握.

ARM MAP文件解析(1)-Code (inc. data)、RO Data、RW Data、ZI Data、Debug

From:http://www.keil.com/support/man/docs/armlink/armlink_pge1362065942464.htm 5.3 Example of using the --info linker option This is an example of the output generated by the --info option To display the component sizes when linking enter: armlink --

Keil 中的Code, RO-data , RW-data, ZI-data

Code为程序代码部分RO-data 表示 程序定义的常量const temp;RW-data 表示 已初始化的全局变量ZI-data 表示 未初始化的全局变量 Code, RO-data,RW-data ............flashRW-data, ZIdata...................RAM 初始化时RW-data从flash拷贝到RAM 生成的map文件位于list文件夹下 (KEIL) Total RO  Size (Code + RO Data) Total RW  

Keil MDK使用J-LINK分别在Sram,Nor Flash以及Sdram中调试代码的原理和方法

一.概述 MDK开发ARM裸机程序时,在调试阶段通常是先让程序在SDRAM中执行,以加快调试速度,也避免频繁烧写Nor Flash,因此需要知道如何指定程序在哪个位置执行.本文以realarm 2410开发板为例,进行描述.该开发板使用S3C2410A做为CPU,有2MB的 Nor Flash,以及64MB的SDRAM,4KB的SRAM.程序可直接在Nor Flash中调试和运行,如果代码小于4KB,也可以直接在SRAM中运行,然而在SDRAM 中运行,就需要事先用脚本初始化SDRAM,才能把程