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

相关推荐
小痞同学1 分钟前
【铁头山羊STM32】HAL库 5.SPI部分
stm32·单片机·嵌入式硬件
蓬荜生灰9 分钟前
STM32(5)-- 新建寄存器版工程
stm32·单片机·嵌入式硬件
小程同学>o<12 分钟前
嵌入式之ARM体系与架构面试题(四)通信协议篇
arm开发·笔记·架构·嵌入式软件·通信协议·面试题库
源代码•宸19 分钟前
Golang原理剖析(defer、defer面试与分析)
开发语言·经验分享·后端·面试·golang·defer·开放编码
乾复道38 分钟前
巧用终端,每天节省2小时
汇编·经验分享·vim
努力学算法的蒟蒻41 分钟前
day60(1.19)——leetcode面试经典150
算法·leetcode·面试
大神与小汪43 分钟前
STM32上进行Unix时间戳转换
stm32·嵌入式硬件·unix
嗯嗯=43 分钟前
STM32单片机学习篇1
stm32·单片机·嵌入式硬件
阿拉伯柠檬1 小时前
网络层与网络层协议IP(一)
linux·网络·网络协议·tcp/ip·面试
梁洪飞2 小时前
kernel 内存知识
linux·arm开发·嵌入式硬件·arm