Cortex-M3 堆栈操作
来源:互联网 发布:大学生兼职平台知乎 编辑:程序博客网 时间:2024/05/22 14:15
堆栈操作其实就是对内存的读写,内存地址由堆栈指针SP给出;
MSP/PSP
Cortex-M3有两个堆栈指针,它们是banked,任一时刻只能使用其中一个;对堆栈指针SP(R13)的操作是对当前有效的堆栈指针的操作;
两个堆栈分别为:主堆栈MSP和进程堆栈PSP,CONTROL[1]决定选择哪个,当CONTROL[1]=0时,使用MSP,CONTROL=1时,使用PSP;
handler模式永远使用MSP:
- 如果线程模式使用的是MSP,则线程模式和handler使用一个堆栈,即MSP;
- 如果线程模式使用的是PSP,则进入handler时,自动压栈使用的是PSP,进入handler后切换到MSP,退出handler时在切换到PSP;
在特权级下,可以指定具体的堆栈指针进行操作:
MRS R0, MSP MSR MSP, R0 MRS R0, PSP MSR PSP, R0
PUSH/POP指令
Cortex-M3使用的是“向下生长的满栈“模型,堆栈指针指向最后一个被压入堆栈的32位数值;PUSH压栈时,SP先自减4,再存入新值,POP出栈时相反,先从SP指针处读出上次被压入堆栈的值,SP再自增4;
PUSH/POP指令支持一次操作多个寄存器:
PUSH {R0-R2, R8, R12} ;压入R0-R2, R8, R12POP {R0-R2, R8, R12} ;弹出R0-R2, R8, R12
注意:不管在寄存器列表中,寄存器的序号以什么顺序给出,汇编器都将它们升序排列,然后PUSH指令按从大到小的顺序依次入栈,POP指令按从小到大的顺序依次出栈;如果不按升序写寄存器,有些汇编器会给出语法错误;
0 0
- Cortex-M3 堆栈操作
- 再识Cortex-M3之堆栈
- 3.7 Cortex-M3 的堆栈实现
- Cortex-M3栈内存操作
- arm cortex 堆栈操作
- Cortex-M3 操作模式和特权级别
- Cortex-M3操作模式和特权级别
- Cortex-M3
- Cortex-M3
- stm32堆栈溢出及cortex m3 ram解析
- Cortex-M3 (NXP LPC1788)之外部中断操作
- Cortex-M3 (NXP LPC1788)之外部中断操作
- Cortex-M3学习进展
- Cortex-M3 VS ARM7
- Cortex-M3知识
- Cortex-M3 的本性
- Cortex-M3 单片机内核
- 开始学习Cortex-M3
- vector和Hashtable
- 001 java 线程基础
- java多线程循环打印A,B,C
- std::string源码探秘和性能分析
- Java多线程编程3--线程间通信实例--等待/通知之交叉备份
- Cortex-M3 堆栈操作
- spring session,集群环境下的session共享解决方案
- linux 命令学习之 sort
- 全局变量$_SERVER
- Yarn源码分析之MapReduce作业中任务Task调度整体流程(一)
- DatabaseMetaData元数据
- LeetCode-6.ZigZag Conversion
- CUDA reference
- ACM第三次练习—1005