秦朝歌 2022-12-09 14:02 采纳率: 100%
浏览 40
已结题

Stm32的启动文件执行

我们都熟悉单片机上电后执行启动文件的汇编代码,初始化栈顶指针,初始化PC到reset_handler.

很疑惑,我们用的启动文件,怎么在机器上电的时候被执行的,是烧录的时候,启动文件的汇编代码被固化到哪了吗?求指导。

  • 写回答

2条回答 默认 最新

  • 单片机的码农 2022-12-12 04:29
    关注

    1.汇编文件被编译link到bin文件中了。先看下工程设置里Link页,

    img


    ro_base是0x8000000
    再看下编译的s文件,定义的RESET 段,

    img

    该reset段是map文件中可以找到,如下:

    img


    通过对编译代码添加测试代码,如下图

    img


    编译生成hex文件后,使用jfalsh打开,发现如下:

    img


    即可证明.s文件被连接到hex的开始位置,也就是0x8000000开始的地址处。当然如果sct文件中指定了位置,s文件的位置将会受sct文件影响。

    通过上述可知,Reset_Handler的地址就是存放复位向量的。当芯片复位后,会进到复位中断处理函数处执行,即如下代码:

    img

    依次执行SystemInit函数及__main函数,注意这里的__main不是我们定义的main,而是C库函数,主要是用来初始化系统堆栈,并跳到我们定义的main处理运行。
    更为详细的启动文件分析可以看下这篇文章:
    https://blog.csdn.net/chenbee168/article/details/128246677

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 12月19日
  • 已采纳回答 12月12日
  • 创建了问题 12月9日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部