广告

原创 ARM开发总结的小知识 Code, RO-data,RW-data,ZI-data

2010-4-14 13:28 3239 0 分类: MCU/ 嵌入式

 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


 


 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zyboy2000/archive/2009/05/10/4165082.aspx

广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
rasoar_248425613 2010-04-27 17:12
STM32使用模拟I2C读写24C02
    近日,调试STM32的I2C读写24C02,果然出现了各位同仁出现的莫名的时序问题,在尝试官方和非官方的N的平方个版本后,发现总是存在问题。决定改用模拟I2C,很快就调试完毕。这里给各位同仁提...
rasoar_248425613 2010-04-10 20:53
uCOS-ii中文书(邵贝贝)
很经典的一本书。...
rasoar_248425613 2009-11-03 15:23
经典子程序集锦
1、当单片机与某模块用并行通信时,你是否遇到过PCB板上Px.0~Px.7刚好连接模块的D7~D0的数据接口的情况,此时可能需要将八位二进制数倒序处理。如:将“0100 1101”变为“1011 00...
rasoar_248425613 2009-08-14 16:37
RTX 演示
这是一个来自官方的文档,讲的还可以。。。...
rasoar_248425613 2009-08-06 16:47
轻松学ARM原创系列之在MDK下调试H-JTAG+Wiggler
轻松学ARM原创系列之<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />在MDK下调试...
我要评论
0
0
广告