1分钟你明白Cortex-M MCU 上电做了哪些动作

大家好,小昭今天给大家分享ARM内核小知识,咱们以Cortex-M4举例,MCU上电会从0x0地址取出栈顶指针,会在0x4(地址是四个字节,所以向后偏移四个字节)取出MCU要执行第一个函数的地址,一般是Reset_Handler,就是复位函数,进入异常,权限最高,特权级。不要问是为什么,这是ARM制定的标准,牢牢记住。

ST平台(STM32F4)

STM32上电会根据(BOOT0和BOOT1引脚)来决定启动方式,假设是从Flash启动,0x0地址会映射成0x0800 0000地址获取栈顶指针,0x0800 0004获取MCU要执行第一个函数的地址,跳转到Reset_Handler。
从上面启动文件,Reset_Handler做了哪些操作?

  • 更新MSP栈顶指针
  • 系统时钟初始化
  • 将Flash 上的代码段(RW BSS)拷贝到SRAM
  • 将BSS段清零
  • 跳转到用户 main

细心的同学就会发现,这个和MDK上的不太一样,下面初始化系统时钟后,跳转到__main(),此__main()非彼main(),__main()是一个C库函数,被封装,本质工作和上面一样,初始化了SRAM,最后跳转用户main函数

左边是GCC 右边是ARMCC

NXP平台(S32K)

S32K,和上面流程是大同小异,上电后执行会执行Reset_Handler,关中断、初始化寄存器、初始化ECC RAM、更新栈顶指针、系统时钟初始化、BSS段初始化,最后跳转用用户main

敲重点

不管是什么芯片,如果内核一样,其实很多相同的特性,面向内核学习,不管是车规级、工业级还是消费级,一通百通,基本半只脚踏入到大佬的门槛了。

《车载嵌入式软件入门》已经更新,主要是更新升级功能,工程代码已经放在网盘中。下次小昭会在文档更新英飞凌(TC275)固件更新内容,前段时间说的MBD教程,要鸽段时间🤣。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小昭Agent 全网可查

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值