当前位置: 首页 > article >正文

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 寄存器中的返回地址中读取值,并跳转到该地址继续执行代码。

三、流程图

在这里插入图片描述


http://www.kler.cn/news/156174.html

相关文章:

  • PCL 空间直角坐标系与极坐标系的相互转换(C++详细过程版)
  • Docker下安装可视化工具Portainer
  • 前端下载文件的方法-blob下载
  • LLM推理部署(五):AirLLM使用4G显存即可在70B大模型上进行推理
  • Prime 2.0
  • 基于maobox-gl 纯前端绘制全球色斑图
  • 布局问题1:addSpacing()和setSpacing()函数的区别?
  • C++服务器 支持http、tcp protobuf、websocket,linux开源框架 零依赖轻松编译部署 Reactor
  • nodejs实现文件/目录的压缩和解压
  • 【微信小程序】上传头像 微信小程序内接小程序客服
  • C++ day51 买卖股票最佳时期
  • 计算机网络——习题
  • 【PTA-C语言】编程练习3 - 循环结构Ⅱ
  • 安装配置JDK1.8
  • 单例模式的实现
  • 字符串转换整数
  • 一个完整的手工构建的cuda动态链接库工程 03记
  • SQL Server 2016(创建数据表)
  • qt-C++笔记之识别点击鼠标右键、点击位置以及Qt坐标系详解
  • flutter-web中使用js工具类
  • Linux系统配置深度学习环境之cudnn安装
  • 40 mysql join 的实现
  • jmeter下载地址
  • [Java] 模拟Jdk 以及 CGLib 代理原理
  • 网络接口规范
  • springBoot整合task
  • uniapp中uni.navigateBack返回后刷新页面数据
  • 线程池大小设置多少,比较合适?
  • 如何从 Jira 成功迁移到极狐GitLab,看这个就够了!
  • [leetcode 哈希表] 模版