系列文章目录
前言
FreeRTOS 是一种实时操作系统相比于裸机编程有诸多优势,网络上有很多对比的文章,本专栏内容主要记录本人学习FreeRTOS 的笔记以便后续复盘。
一、ARM架构调用标准AAPCS
1、寄存器介绍
CPU中共有 17 个寄存器:
寄存器 | 备注 |
---|---|
R0 - - -R3 | 4个寄存器用来传参 |
R4 - - -R11 | 8个寄存器保存局部变量 |
R12 | 内部调用暂时寄存器;别名: IP |
R13 | 栈;别名:SP |
R14 | 用来保存函数的返回地址;别名:LR |
R15 | 用来跳转到下一个执行的命令;别名:PC |
R16 | 程序状态寄存器;别名:PSR |
2、寄存器使用规则
-
当参数个数不超过4个时,用 R0 至 R3 ,这 4 个寄存器来传递参数,其中 R0 可传递返回值。当参数个数超过 4 个时,用栈传递。
-
R0 至 R3 ,这 4 个寄存器无需保护它们;即发送中断无需恢复寄存器R0 至 R3 的值。
-
R4 至 R11 ,这 8 个寄存器要保证用完后不会被修改;即寄存器保护,这些寄存器可以使用,使用前先保存内容,用完后原内容要恢复。
二、现场的保存与恢复
在发生中断时先保存现场,再去处理中断,最后恢复现场。
1、保存现场:就是保存所有寄存器的值;当发生中断的瞬间,栈会自动保存无需保护的寄存器,如图:
将这些寄存器保存在栈中。
2、调用处理函数:发生中断,C函数会保证不会破坏 R4 至 R11
3、恢复现场:硬件恢复上图保存的寄存器值。
注:图中的返回地址是中断的返回地址,即从哪里发生中断,中断处理完后,就从哪里继续执行。