mokongking

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

 

posted on 2025-06-01 23:21  虎啸岳林  阅读(198)  评论(0)    收藏  举报

导航