上电复位到RT-Thread启动过程

1、Reset_Handler

上电复位,执行的第一段代码是启动文件startup_stm32f407xx.s里的汇编程序Reset_Handler

  • 执行SystemInit
  • 执行__main函数,__main函数是编译器自动生成的函数;
    • 将RW段复制到运行域SRAM中,并初始化ZI段;【1】
    • 加载执行C语言所需要的库;
    • 跳转到main函数;
      • mdk有个扩展的功能,可以将main函数扩展为Sub和Super,所以首先跳转的就是$Sub$$main,至于在main.c中看到的main其实是$Super $$main,rt-thread这样实现使得使用起来更清爽;

关于【1】的说明:

        RW字段呢,是一定要复制到SRAM中的,为了性能RO段也可能复制到SRAM; 

        虽然当百度__main的时候,好多都说是RW/RO段复制到运行域中,但是根据rt_thread堆栈初始化来看,是从RW和ZI段结束后的SRAM空间作为rt_thread的HEAP_BEGIN,并没有RO段;下一篇RT-Thread_动态内存堆_小老虎_IOT的博客-CSDN博客打印堆栈起始地址的时候突然发现的,记录在此;

在之前的一篇文章中写道,bin文件存放了代码、RO字段、RW字段,在程序运行的时候RW字段会被复制到SRAM方便读写,今天才了解到是在__main这里操作的,说起来这么久了都没意识到__main和main不是一个东西;

STM32的Flash和SRAM_小老虎_IOT的博客-CSDN博客_stm32的flash和sram


2、启动过程思维导图

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值