大家好,小昭今天给大家分享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函数

NXP平台(S32K)
S32K,和上面流程是大同小异,上电后执行会执行Reset_Handler,关中断、初始化寄存器、初始化ECC RAM、更新栈顶指针、系统时钟初始化、BSS段初始化,最后跳转用用户main
敲重点
不管是什么芯片,如果内核一样,其实很多相同的特性,面向内核学习,不管是车规级、工业级还是消费级,一通百通,基本半只脚踏入到大佬的门槛了。
《车载嵌入式软件入门》已经更新,主要是更新升级功能,工程代码已经放在网盘中。下次小昭会在文档更新英飞凌(TC275)固件更新内容,前段时间说的MBD教程,要鸽段时间🤣。


3294

被折叠的 条评论
为什么被折叠?



