【原创】【stm32】startup_stm32l476xx.s文件分析

一、这是个什么玩意

这个文件是stm的mcu上电启动后执行的启动文件,说白就是上电后先执行这里,才能调到main函数。

二、有毛用啊

1、启动文件肯定是mcu启动时候要执行的文件(显而易见,从字面理解)

2、系统初始化(为C语言代码能够顺利的运行建立运行环境)

      ①、分配堆段、栈段和存放向量的数据段,此时栈和堆都未初始化,是由后面的_user_initial_stackheap来完成。


    


    






     ②、中断向量表初始化映射

     ③、各种中断映射的函数,主要看下Reset_Handle,SystemInit这函数重新映射中断向量表。然后就是main函数。如果单步跟的话在进入__main函数后还会执行以下几个函数:_scatterload函数和_scatterload_null函数和_scatterload_copy函数(初始化全局变量)和_scatterload_zerinit函数(清0过程)和_scatterload和_rt_entry函数和_user_inital_stackheap函数(初始化堆栈)

       ④、加在RW段,ZI段清0,初始化用户堆栈

       ⑤、调用main函数

期间涉及到一些map文件的东西,具体下节再分析介绍。

三、怎么用啊

1、这个一般不会改,+o+

2、比如做个栈溢出监测(原理就是在栈边界写个特殊值,然后再任务切换(函数调用)的时候监测该特殊值是否被修改,如被修改则说明栈溢出)

3、其他需要根据具体实际需求进行修改了,比如加个跳转函数等。

4、深入的学习等以后有机会碰到再持续更新

四、成为大神的用法

暂无