arm
fourous
Cest’ la vie
展开
-
arm 中cpsr和spsr
spsr是用来保存cpsr状态,当异常中断发生时候,用来回退cpsr的值比如异常发生,步骤 1:将LR(R4)加偏移量,送到PC中 2:将cpsr中状态送到spsr,保存cpsr中的状态 3:如果需要禁止中断位,将中断位进行禁止(I禁止IRQ中断,F禁止FIQ中断)先对LR等寄存器进行操作,然后保存cpsr(程序状态寄存器),然后对设置中断位其中LR(R14)(还要sp(R3),PC(R15)原创 2017-12-09 16:57:04 · 2886 阅读 · 0 评论 -
子程序返回的三种方法
1:mov pc LR 这是最常用的方法,用R14保存返回的地址 这里注意,虽然lR 在调制层面是保存的PC值 但是一般保存的是PC的后一条执行指令2:BL LR BL跳转指令,跳转到LR指向的地址,也就是之前PC的地方3:在程序入口处使用以下指令将R14存入堆栈 STMFD sp! ,{< Regs >,LR} 对应的,使用一下指令完成子程序的返回 LDMFD sp! , {< Reg原创 2017-12-09 17:13:53 · 8754 阅读 · 0 评论 -
LDM和STM指令
LDM批量加载/STM批量存储指令可以实现一组寄存器和一块连续的内存单元之间传输数据。 允许一条指令传送16个寄存器的任意子集和所有寄存器,指令格式如下: LDM{cond} mode Rn{!}, reglist{^} STM{cond} mode Rn{!}, reglist{^} 主要用途:现场保护、数据复制、参数传送等,共有8中模式(前面4种用于数据块的传输,后面4种是堆栈操转载 2017-12-09 17:34:52 · 5292 阅读 · 0 评论 -
C和汇编混合编程
C和汇编混合编程 嵌入式里面用到汇编的地方: 开机时的硬件系统的初始化,包括CPU的状态设定,中断使能主频设定,以及RAM控制参数以及初始化一些中断处理方面涉及一些汇编。‘C中内嵌汇编大多数为ARM和Thumb指令,其中注意: 1:不能直接向PC赋值,程序跳转用B或者BL指令 2:使用物理寄存器不能使用过于复杂的C表达式,避免物理寄存器冲突 3:R12和R13可能被编译器用来存放中间编译结原创 2017-12-10 12:18:22 · 651 阅读 · 0 评论