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恢复现场;

相关推荐
奔跑的蜗牛ing7 小时前
CentOS Nginx 安装与静态文件服务器配置指南
前端·面试·架构
2401_854151557 小时前
ARM Cortex-M 体系结构深度解析——寄存器模型、处理器模式、AAPCS 与异常模型
arm开发·stm32·单片机·嵌入式硬件
Deven_Huang9 小时前
STM32 ADC 使用经验总结与常见踩坑点
stm32·adc
KaifuZeng10 小时前
通信与接口协议面试五、RS422
嵌入式硬件·面试·通信与接口
SamDeepThinking11 小时前
组合还是继承?我在项目里主要看这两个判断
java·后端·面试
wear工程师12 小时前
setState 到底是不是异步的?这题从 React 16 问到 18,标准答案早就变了
react.js·面试
SamDeepThinking14 小时前
为什么很多人学了Java,还是没真正理解类和对象?
java·后端·面试
阿新聊ai15 小时前
Claude Code 为什么总不懂你的项目?缺一张「项目地图」
前端·后端·面试
用户8524950718415 小时前
Promise 全解析:从三状态到 Promise.all
面试
嘟嘟071715 小时前
Node.js spawn 实现迷你 Cursor 自动化终端|子进程完整解析
前端·后端·面试