RT-Thread 汇编分析启动流程


一、汇编指令

这里介绍即几条最常见实用的汇编指令

  • LDR R0,[R1]:将R1指定内存地址数据,存储到寄存器R0中。
  • STR R0,[R1,#4]:将寄存器R0中数据存储到寄存器R1加上偏移量4的位置。
  • MOV r0,#0x01:将立即数0x01存储到r0寄存器。
  • POSH {r2-r3,lr}:入栈,先入lr,再入r3,后r2,sp指向r2,即栈顶位置。

二、启动文件

在这里插入图片描述

  • 1. 上电后执行第一条指令Reset_Handler
    在这里插入图片描述
    直到“b LoopCopyDataInit”,即跳转到标签LoopCopyDataInit 执行

  • 2. 在LoopCopyDataInit 标签中,将.data段从Flash拷贝到RAM里面

    在这里插入图片描述
    直到b LoopFillZerobss,即跳转到标签LoopFillZerobss执行

  • 3. 在LoopFillZerobss 标签中,将.bss段初始化为0
    在这里插入图片描述
    直到bl SystemInit,即跳转到标签SystemInit执行,并在执行后返回此处

  • 4. 在SystemInit 标签中,系统时钟初始化
    在这里插入图片描述
    执行完后,返回到LoopFillZerobss 标签,继续执行bl entry

  • 5. 在entry标签中,进入到rtthread_startup函数,用于启动 RT-Thread 内核和相关组件
    在这里插入图片描述
    在这里插入图片描述
    执行完后,返回到LoopFillZerobss 标签,继续执行bx lr

  • 6. bx lr
    将会从保存在 lr 寄存器中的返回地址中读取值,并跳转到该地址继续执行代码。

三、流程图

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Dustinthewine/article/details/134756399