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

Stm32的启动文件执行

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

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

  • 写回答

2条回答 默认 最新

  • 单片机的码农 2022-12-12 12: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月20日
  • 已采纳回答 12月12日
  • 创建了问题 12月9日

悬赏问题

  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?