RTOS中的栈
创建任务时为什么要指定栈
一、ARM架构
1、RISC
电脑组成:CPU、内存、硬盘
单片机组成:CPU、内存、flash
在计算过程中,数值保存在CPU的哪里?
程序保存在flash上,数值保存在内存里;
CPU内部有计算单元和各种寄存器;计算单元进行计算,寄存器进行内存数据的读写
有其他用途的寄存器
R13:别名SP,栈指针(保存栈地址)
R14:LR,用来保存返回地址
R15:PC,程序计数器,表示当前指令地址,写入新值即可跳转
2、汇编指令
数据传输时候的三个参数:
二、C函数的反汇编
本质上还是读内存,写内存,加加减减,跳转
1、add函数
函数中加volatile就是为了不想让编译器做某些优化
a,b,sum为3个局部变量,保存在栈里
2、add函数的调用
参数的传递
- 设置R0,R1分别为1和cnt
- 调用add函数
3、单片机执行程序的流程
- cpu读flash地址得到机器码
- cpu执行机器码
以机器码为例:
- push把三个寄存器的值写到栈里,并调整栈的位置
- lr为返回地址,返回while循环的末尾
,对于汇编代码来说,返回到
sum函数汇编流程