RTOS(4)保存现场与恢复现场(结合汇编分析)

1.函数调用过程

1.在执行add_val()时,调用c函数的时候,第一个参数保存在R0里,第二个参数保存在R1里;所以,R0=&a,R1=&b,LR=下一条指令的地址(也就是165行);

2.将局部变量和返回地址压入栈中;

3.R2=a;将R2写入sp所指的位置,那么栈中原来存R3的位置变成了新的R2,也就是tmp这个临时变量;

4.R2=b=2;R3=tmp=1;R2=R2+R3=a+b=3;将R2写入sp所指的位置,tmp=3;

5.R2=tmp=3;a=R2;

6.将R3,LR弹出栈。LR赋值给PC,跳转到返回地址继续执行;

2.如何保护现场

a.什么叫做现场?

被打断瞬间,所有寄存器的值;

b.怎么保存?

存入栈中;

3.保存现场的多种情况

a保存现场;

|------------------------|
| 1.任务切换:所有寄存器都要保存 |
| 2.函数调用:R0,R1,R2传参的不保存; |
| 3.硬件中断:硬件保存了一部分+软件保存 |

b执行函数/处理中断;

c恢复现场;

相关推荐
咸蛋-超人6 小时前
聊一聊 - STM32的堆和栈空间怎么分配
stm32·单片机·嵌入式硬件
han_7 小时前
从一道前端面试题,谈 JS 对象存储特点和运算符执行顺序
前端·javascript·面试
raindrops.8 小时前
STM32之LL库使用(二)
stm32·单片机·嵌入式硬件
蝎子莱莱爱打怪11 小时前
我的2025年年终总结
java·后端·面试
单片机系统设计11 小时前
基于STM32的水质检测系统
网络·stm32·单片机·嵌入式硬件·毕业设计·水质检测
我的写法有点潮11 小时前
JS中对象是怎么运算的呢
前端·javascript·面试
镜花水月linyi11 小时前
Cookie、Session、JWT 的区别?
后端·面试
青莲84311 小时前
Java内存模型(JMM)与JVM内存区域完整详解
android·前端·面试
青莲84311 小时前
Java内存回收机制(GC)完整详解
java·前端·面试
CCPC不拿奖不改名11 小时前
python基础:python语言中的函数与模块+面试习题
开发语言·python·面试·职场和发展·蓝桥杯