基于STM32看Cortex-M内核相关的一些底层知识

news2024/11/17 9:49:59

文章目录

    • 固件起始地址存储了主栈指针和向量表内容
    • 启动文件分析
    • 程序启动流程
    • Code,RO Data,RW Data, ZI Data
    • 启动流程
    • Regin$$Table

固件起始地址存储了主栈指针和向量表内容

《ARM Cortex-M3与Cortex-M4权威指南》中的4.8章节复位和复位流程中有下面这段的描述:
在复位后以及处理器开始执行程序前,Cortex-M处理器会从存储器中读出头两个字,如图4.30所示。向量表位于存储器的开头部分,它的头两个字为主栈指针(MSP)的初始值,以及代表复位处理起始地址的复位向量(参考本书图4.26和4.5.3节)。处理器读出这两个字后,就会将这些数值赋给MSP和程序计数器(PC)
在这里插入图片描述
当异常时间产生且被处理器内核接受后,响应的异常处理就会执行。要确定异常处理的起始地址,处理器利用了一种向量表机制。向量表为系统存储器内的字数据数组,每个元素都代表一个异常类型的起始地址,如图4.26所示。
在这里插入图片描述
《Cortex-M3处理器技术参考手册》中5.9复位章节中的表5-7显示了复位的行为:
在这里插入图片描述
基于上述描述我们可以知道固件的起始地址存储了主栈指针的初始值,后续存储了向量表的内容。

MAP文件
固件文件
从上面的map文件中我们可以看出程序的栈顶地址就是0x200069b0,从下面的固件中我们可以看出起始地址存放的就是栈顶指针的值。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
基于map文件找出后续程序地址对应的数据内容,和上面向量表对应的内容也完全一致
在这里插入图片描述
细心的你可以能已经发现了,这里固件中存储的向量表的地址和map文件中对应的函数地址不完全一致,差了1,这是因为向量表的LSB位必须置1以表示Thumb状态(Cortex-M处理器不支持ARM状态)
《ARM Cortex-M3与Cortex-M4权威指南》7.5章节:
在这里插入图片描述
启动代码使用的向量表还包含主栈指针(MSP)的初始值,这种设计是很有必要的,因为NMI等异常可能会紧接着复位产生,而此时还没有进行任何初始化操作。

启动文件分析

启动文件主要做了以下工作:

  1. 初始化栈指针 MSP= _initial_sp
  2. 初始化PC指针 PC=Reset_Handler
  3. 初始化中断向量表
  4. 配置系统时钟
  5. 调用C库函数__main初始化用户堆栈,从而最终调用main函数

复位函数是系统上电后第一个执行的程序。

程序启动流程

下面图片来自正点原子IAP教程章节
在这里插入图片描述

Code,RO Data,RW Data, ZI Data

Code : 代码段
RO Data : 只读数据段
RW Data : 读写数据段,定义的时候被初始化的变量
ZI Data:未初始化的数据段

在这里插入图片描述

启动流程

在这里插入图片描述
在这里插入图片描述

Regin$$Table

map文件中的Regin$$Table的位置如下:
在这里插入图片描述
对应固件中的地址位置的数据如下:
在这里插入图片描述

描述
08030500RW Data在加载域中的起始位置
20000000RW Data复制到执行域中的起始位置
00000478需要复制RW Data数据的长度
080257A分散加载复制函数的入口地址
080305E8RW Data在加载域中的结束位置
20000478ZI Data在执行域中的起始位置
00006538ZI Data数据段的大小
0802F73A分散加载ZI段初始化函数的入口地址

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1684237.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

医疗软件供应链安全治理:保障医疗服务质量和患者安全的当务之急!

如今,随着医疗数智化的不断深入,医共体网络、远程医疗网络、区域医疗网络、互联网医院等系统建设日益普及,医疗信息系统从基础应用进阶到智能医疗阶段。医疗机构对医疗软件采购、外包开发以及调用第三方开发资源的需求日益增加。 然而&#x…

buuctf的RSA(二)

1.RSA 知道 flag.enc 和 pub.key,典型的加密、解密 将pub,key 改为pub.txt 打开后发现公钥 在RSA公私钥分解 Exponent、Modulus,Rsa公私钥指数、系数(模数)分解--查错网 进行解密 得到e65537 n8693448229604811919066606200349480058890565…

S-Clustr+H4vdo 僵尸网络锁屏播放锁屏插件

项目地址:https://github.com/MartinxMax/S-Clustr-Ring 视频 用法 安装H4vdo依赖 在Install目录中选择你的操作系统安装依赖Windows_H4vdo_plugin_installation 启动H4vdo服务端 $ python3 Generate.py [Device Type (Number)]>7 [] [0] Start RTMP server [1] Skip &g…

家政预约小程序05服务管理

目录 1 设计数据源2 后台管理3 后端API4 调用API总结 家政预约小程序的核心是展示家政公司提供的各项服务的能力,比如房屋维护修缮,家电维修,育婴,日常保洁等。用户在选择家政服务的时候,价格,评价是影响用…

关于抖音小程序开发代码修改了,但是真机调试代码不更新问题解决(全网第一成功解决方案,无论安卓或苹果)

各位铁铁,今天开发小程序在抖音小程序适配时,终于是又一次踩到这个恶心的坑了,现在就记录一下,方便我以后查找,也希望帮助到当前被它所坑害的你! 具体实现步骤如下: 1.到你的抖音开发平台&…

高效利用键盘上的 caps lock(大写键)实现中英切换

先看效果 在中文输入环境中,Caps Lock 键经常被忽视,占据了键盘上的黄金位置却很少派上用场。接下来,我将介绍如何将这个闲置的键合理利用,让它变得更加实用。 第一步 设置: 我以五笔为例: 1.输入法默认…

国内快速下载hugging face大模型的方法

由于众所周知的原因,从hugging face下载大模型比较困难,幸好国内有人做了镜像站,可以通过国内的镜像站进行快速下载,以下是配置方法。 我的系统是ubuntu 22,这里记录的方法只对debian/ubuntu有效。 git-lfs/INSTALLI…

精准安全运维,统信UOS服务器版V20(1070)漏洞修复指南丨年度更新

随着信息安全威胁的不断升级,操作系统的安全性已成为企业运维的关键要素。 为了确保业务运行环境的安全无忧,统信软件持续致力于技术创新和优化,并于日前重磅推出了统信UOS服务器版V20(1070)。该系统提供了高频补丁更…

将黑白图的白色部分叠加在彩色原图

彩色原图: 黑白图: 合成后: 代码: import cv2 import numpy as np# 读取原图和轮廓线条图 original_img cv2.imread(..\\IMGS\\pp.png) # 替换为原图路径 contour_img cv2.imread(..\\IMGS\\pp_edge.png, cv2.IMREAD_GRAYSCAL…

1 计算机硬件-CPU-校验码-存储系统-输入输出设备-总线结构

计算机硬件 考情分析:趋势很小,22年考过,根据趋势以后考的可能较小 基本组成:运算器,控制器,储存器,输入设备,输出设备运算器和控制器也统称为中央处理单元(CPU&#xf…

flutter使用dbus插件时,在终端无法使用“dart-dbus”命令

不用flutter的人,可能都不会找到这儿,遇到这个问题,所以这里默认flutter已经装过了,且对flutter如何使用插件也有所了解了。 由于我在项目中用到了dbus插件,用法如图所示,我需要使用这条命令来生成一个sou…

多模态大模型新进展——GPT-4o、Project Astra关键技术丨青源Workshop第27期

青源Workshop丨No.27 多模态大模型新进展—GPT-4o、Project Astra关键技术主题闭门研讨会 刚刚过去的两天,OpenAI、Google纷纷发布了多模态大模型的最新成果,GPT-4o、Project Astra先后亮相。 本周五(北京时间5月17日)18点&#x…

supOS NEO科技普惠!永久免费!亿元补贴

数字化转型正在全球蓬勃发展,工业操作系统进入大规模推广期! 如果您正在被预算不足、技术团队不强、数字化投入产出比等问题困扰,supOS NEO是您最好的选择。 “让supOS走进万千工厂、千行百业!让全世界每个工厂都能用得上supOS&am…

Mysql与Navicat可视化命令大全 ----项目实战

软件准备:✍Mysql8.0下载地址(推荐)✍Navicat 16 下载地址(推荐) 注:不会安装看主页,关注我,免费指导,接计算机毕设☑ -----------------------------------------------…

尽在掌握:Android 13 通知新功能详解

尽在掌握:Android 13 通知新功能详解 在移动应用开发中,通知扮演着至关重要的角色,它如同应用程序与用户之间的桥梁,及时传递关键信息,提升用户体验。Android 13 作为最新的安卓版本,在通知方面带来了诸多…

工程项目核算报价-项目CPQ报价系统控成本高效完成工程项目报价

首先了解一下CPQ报价如何解决工程项目报价难的? 目前市场上的工程项目报价方案制作效率低,易出错,反复修改,成本核算的过程不够严谨,凭以经验和数据大差不差的估算当下项目,报价过程中会忽略侧面因素,导致…

Git总结超全版

最近想系统的回顾一下Git的使用,如果只想快速的集成git到idea,可以参考另一篇我的博客中的git部分 目录 版本管理工具简介Git安装与配置Git远程仓库配置 Git常用命令为常用命令配置别名(可选)Git忽略文件.gitignore一些概念*本地仓库操作删除仓库内容 *远…

轻松上手ClickHouse:ClickHouse入门

引言 在数字化时代,大数据处理和分析已经成为了各行各业不可或缺的一环。而ClickHouse,作为一款高性能的列式数据库管理系统,以其卓越的查询性能和灵活的扩展性,赢得了众多企业和开发者的青睐。本文将带领大家走进ClickHouse的世…

PostgresSQL开启归档模式

文章目录 一、查询数据库归档是否开启1、查看数据目录(找出conf文件位置)2、查看归档是否开启 二、开启归档模式(开启后有一定的性能损耗)1、创建归档目录2、修改postgresql.conf配置文件3、重启pg 三、验证归档情况1、查看归档是否开启2、检查点 , 刷新…

ftp是什么,ftp能做什么,ftp有什么用 -----在Windows搭建ftp服务器

大家好,我是风屿,今天教大家如何从零开始搭建一台属于自己的ftp,本期教大家搭建Windows客户端的,后面是linux的 首先第一步要有一台联网的Windows电脑 1打开控制面板,找到程序,点击打开或关闭Windows功能…