KEIL Code RO-data RW-data ZI-data

转载 2012年03月28日 11:19:26

 ARM开发总结的小知识 
字节 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]

用户模式(usr):ARM处理器正常的程序执行状态。   10000
快速中断模式(fiq):用于高速数据传输或通道处理。 10001 
外部中断模式(irq):用于通用的中断处理。             10010
管理模式(svc):操作系统使用的保护模式。            10011
数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。10111 
系统模式(sys):运行具有特权的操作系统任务。 11111
定义指令中止模式(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

keil中的Code_RO-data_RW-dat_ZI-dat

ARM开发总结的小知识 字节 8位 半字 16位 字   32位   Code, RO-data RW-data,ZI-data  注意设置堆和栈大小 ...

keil中的Code_RO-data_RW-dat_ZI-data

  • 2011年11月09日 15:26
  • 39KB
  • 下载

KEIL 中的RO、RW和ZI DATA所代表的意思

RO段、RW段和ZI段             要了解RO,RW和ZI需要首先了解以下知识: ARM程序的组成             此处所说的“ARM程序”是指在ARM系统中正在执行...
  • yzb1012
  • yzb1012
  • 2014年10月15日 08:10
  • 694

转:KEIL MDK中的RO、RW和ZI DATA

一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将...

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

一 基础知识 字节  8位 半字  16位 字    32位   二 解惑 Code, RO-data,RW-data,ZI-data Code为程序代码部分 RO...

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

一 基础知识 字节  8位 半字  16位 字    32位   二 解惑 Code, RO-data,RW-data,ZI-data Code为程序代码部分 RO...

Keil arm 编译 RO RW ZI DATA

ARM程序(指在ARM系统中正在执行的程序,而非保存在ROM中的bin文件)的组成 一个ARM程序包含3部分:RO段,RW段和ZI段 RO是程序中的指令和常量 RW是程序中的已初始化变量 ...

KEIL MDK中的RO、RW和ZI DATA

一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将...
  • rig622
  • rig622
  • 2011年12月10日 21:17
  • 3247

KEIL MDK编译代码,产生的几个关键信息:Code RO-data RW-data ZI-data

KEIL RVMDK编译后的信息   Program Size: Code=86496 RO-data=9064 RW-data=1452 ZI-data=16116    Code是代码占用...

Keil编程环境下STM32内存管理研究 (Code、 RO-data、 RW-data、ZI-data)

非常简单的一个工程,没有用到任何IO操作,与STM32有关的仅仅只有芯片的选择,即其SRAM大小有区别。图1是工程示意图,从图中可以看出,除了自己编写的代码外,仅仅增加了2个文件,即system_st...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:KEIL Code RO-data RW-data ZI-data
举报原因:
原因补充:

(最多只允许输入30个字)