ARM简约介绍

来源:互联网 发布:手机淘宝签到在哪里 编辑:程序博客网 时间:2024/05/02 05:04

ARM有七个基本工作模式:

1、User:非特权模式,大部分任务执行在这种模式

2、FIQ:当一个高优先级中断产生时将会进入这种模式

3、IRQ:当一个低优先级中断产生时将会进入这种模式

4、Supervisor:当复位或软中断指令执行时将会进入这种模式

5、Abort:当存取异常时将会进入这种模式

6、Undef:当执行未定义指令时会进入这种模式

7、System:使用和User模式相同寄存器集的特权模式

指令集:ARM指令集(32-bit),Thumb指令集(16-bit),Jazelle指令集(8-bit)

网络访问寄存器过程:R0,R1寄存器->cache->内存->磁盘->网络

寄存器:ARM有37个32-Bits长的寄存器,一个PC(the program counter,r15),一个CPSR(current program status register),5个SPSR(save program status register),30个通用寄存器(r0-r14,其中r13(the stack pointer,sp),r14(the link register,lr),User占r0到r14,FIQ占r8到r14其余都只有r13跟r14)。

异常处理:1、拷贝CPSR到SPSR_<mode>

                    2、设置适当的CPSR位

                    3、保存返回地址到LR_<mode>

                    4、 设置PC为相应的异常向量

                     返回时:1、从SPSR_<mode>恢复CPSR

                                        2、从LR_<mode>恢复PC

异常优先级:Reset->Data Abort->FIQ->IRQ->Prefetch Abort->SWI->Undefined instruction

FIQ vs IRQ:FIQ优先级大于IRQ,FIQ的设计使中断响应尽可能快。

C语言在函数定义是使用关键词“__irq”来写一个简单的中断处理程序。

软中断(SWI)C中,使用关键字“__swi”来定义一个软中断函数。(硬中断是外部设备对CPU的中断,软中断通常是硬中断服务程序对内核的中断,信号则是由内核(或其他进程)对某个进程的中断)

ARM处理器内核:ARM7系列使用3级流水线。(F-取指,D-解码,E-执行)

 带cache的ARM7TDMI:cpu先判断cache中有无需要的数据,若无则访问内存,内存数据存入cache,然后cpu再到cache中取。

ARM9TDMI:哈佛结构(可以实现对指令和数据存储器的同时访问),采用5级流水线.

ARM9E,ARM10E:6级流水线,ARM11.

虚拟地址:CPU发出的经MMU通过页表(存放规则)映射到物理地址。(一级页表项1M,二级页表项4K,二级页表项是从一级页表项细分而来,先访问一级页表项,在根据一级页表项访问二级页表项)

ARM及Thumb指令集:

               算术指令:ADD ADC SUB SBC RSB(反相减) RSC

               逻辑指令:AND ORR EOR(异或) BIC(op2取反再与Rn与)

                比较指令:CMP(减) CMN(加) TST(与) TEQ(异或,Rn,Op2)

                数据搬移:MOV MVN(按位取反)

上述指令只能对寄存器操作,不能针对存储器

语法:<操作> {<cond>} {s} Rd(目标寄存器),Rn(源寄存器),Operand2

只有比较指令影响标志位-不指定Rd,数据搬移不指定Rn,第二操作数通过桶型移位器(LSL,ASR,LSR,ROR,RRX)送到ALU中。

为允许装载大常数,汇编器提供了一条伪指令:ADR

Thumb指令集不是一个“好”指令集。

c/c++编译器提示和技巧:

优化级别:-O0,-O1,-O2

volatile:可能发生意想不到的改变。

内嵌函数(__inline),C/C++C和汇编混合模式编程。。。。