bootloader_IAP

什么是MSP

大概意思就是指向运行内存的地址

参考如下

STM32(F407)—— 堆栈_stm32f407堆栈多大-优快云博客

什么是自举

如果让同一个代码存储到不同介质存储空间里面,自举决定在那个存储空间运行那个程序;

比如自举为FLASH;那么存储在FLASH的程序,在上电复位后,从Flash存储器里面运行;

在自举flash正常的程序执行如下

 重点

栈顶地址就是MSP;MSP就是指向运行内存,而这个内存是堆栈;

运行机制为:上电后先得到运行内存地址,才到PC指针得到复位向量

1号线:上电后PC得到复位中断入口地址,然后执行复位中断处理函数;(上电机制)

2号线:复位中断处理函数执行完成后,进入到主函数入口;

3号线:日常中断,回到中断向量表,PC得到中断入口地址,

4号线:PC得到中断入口地址后,进入中断函数处理,

5号线:处理中断,返回主函数;

__asm void MSR_MSP(uint32_t addr) {
    MSR MSP, r0 			
    BX r14
}iapfun jump2app;的addr的作用

在给定的代码中,addr是作为参数传递给函数MSR_MSP的。这个参数addr是一个uint32_t类型的变量,它表示要设置的主堆栈指针(MSP)的地址。

在函数内部,MSR MSP, r0这行代码将寄存器r0的值(即addr的值)加载到主堆栈指针寄存器(MSP)中,从而设置了新的主堆栈指针地址。

最后一行代码BX r14是一个分支指令,它将程序控制权返回到调用函数的位置。

所以,addr参数用于设置主堆栈指针(MSP)的地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值