ARM单片机,sp,pc,lr以及寄存器的作用
arm单片机启动流程
单片机在上电复位后会执行以下操作:
1、从地址0x0000 0000 的位置上取出Msp的初始值(栈顶地址),让内核的函数分配内存空间,(为什么是8位,16进制换算2进制,1位等于4位二进制,所以8*4=32位,所以是32位单片机)。
2从地址0x0000 0004取出PC的初始值(在启动文件中是Reset_Handler)复位函数的地址,之后开始执行main函数(32位大多数都是4字节对齐,所以加4.)具体为什么地址加1个事1个字节
(12 封私信) 内存一个地址对应一个字节还是一个存储单元? - 知乎
在内核中除了systick,nvic中断控制的寄存器之外,还有和执行程序和加减乘除运算的寄存器,其中R0~R15叫通用寄存器,除了通用寄存器还有特殊寄存器,其中R0~R12叫通用目的寄存器,可以用来保存普通数值,比如1,2,3,4而R0~R3 可以用来保存函数的输入参数,所以设置传参可以不要超过四个对应R0~R3.超过就有别的方案,在函数结束退出之后R0,R1还可以保存函数的返回值,而R13 14 15 是用来保存地址数据的,可以是内存地址也可以是flash地址
R0 第1个输入参数 (函数的返回值)
R1 第2个输入参数 (函数u运行的结果)
R2 第3个输入参数
R3 第4个输入参数
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13(SP)(栈指针),始终指向内存的栈
R14(LR)(链接寄存器),用来保存要执行函数的地址的,,当前执行函数的地址返回,,当函数里调用函数,那么LR只能保存一个 ,当前函数的地址就被压入栈中,被调用的函数地址存在LR寄存器中这个是函数中调用一个函数的情况
R15(PC)(程序寄存器),用来保存程序要执行的代码指令的地址
有两套指令级
当运行正确且地址发现有偏差说明是更代码指令级有关系,32位是ARM指令集,16位是
SAM指令集,sam指令集代码指令大小事2字节,区分sab还是arm看地址最后一位是0还是1,0是arm
浙公网安备 33010602011771号