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

STM32八股【10】-----stm32启动流程

启动流程

1.上电复位
2.系统初始化
3.跳转到 main 函数

启动入口:

  • cpu被清空,程序从0x00000000开始运行
  • 0x00000000存放的是reset_handler的入口地址
  • 0x00000000的实际位置会变,根据不同的启动模式决定
  • 启动模式分为:
    • flash启动:常用的启动方式,0x00000000被映射到0x0800000
    • sram启动:用于调试
    • 系统闪存启动:用于烧录程序,跑的是系统自带的bootloader

初始化中断向量表

  • 0x00000000存放的是中断向量表的起始位置

  • 中断向量表的前4个字节是 _initial_sp, 表示 主栈指针(MSP) 的初始地址,用来设置堆栈指针(SP)

    Stack_Size      EQU     0x00000400AREA    STACK, NOINIT, READWRITE, ALIGN=3
    Stack_Mem       SPACE   Stack_Size
    __initial_sp
    

    其中_initial_sp是一个标号,代表栈+堆,即栈顶

  • 然后从下一个地址(0x08000004)读取复位处理程序的地址(Reset_Handler),并跳转到那里执行

    ; Reset handler
    Reset_Handler    PROCEXPORT  Reset_Handler             [WEAK]IMPORT  __mainIMPORT  SystemInitLDR     R0, =SystemInitBLX     R0LDR     R0, =__mainBX      R0ENDP
    

    Reset_Handler中主要:

    • 调用了systemInit,配置系统时钟等硬件。
    • 进入了_main函数,复制数据,跳转用户main函数

SystemInit 是 ST 库提供的函数,负责初始化时钟、外设等,比如设置系统时钟为 72MHz。
__main 是 C 运行时库的入口,它会初始化全局变量(复制 .data 段到 SRAM,清零 .bss 段),然后跳转到用户写的 main 函数,至此头文件初始化完成。
stm32 ram和flash分布

相关文章:

STM32八股【10】-----stm32启动流程

启动流程 1.上电复位 2.系统初始化 3.跳转到 main 函数 启动入口: cpu被清空,程序从0x00000000开始运行0x00000000存放的是reset_handler的入口地址0x00000000的实际位置会变,根据不同的启动模式决定启动模式分为: flash启动&a…...

游戏引擎学习第312天:跨实体手动排序

运行游戏并评估当前状况 目前排序功能基本已经正常,能够实现特定的排序要求,针对单一区域、单个房间的场景,效果基本符合预期。 不过还有一些细节需要调试。现在有些对象的缩放比例不对,导致它们看起来有些怪异,需要…...

智警杯备赛--数据库管理与优化及数据库对象创建与管理

sql操作 插入数据 如果要操作数据表中的数据,首先应该确保表中存在数据。没有插入数据之前的表只是一张空表,需要使用insert语句向表中插入数据。插入数据有4种不同的方式:为所有字段插入数据、为指定字段插入数据、同时插入多条数据以及插…...

MySQL 在 CentOS 7 环境下的安装教程

🌟 各位看官好,我是maomi_9526! 🌍 种一棵树最好是十年前,其次是现在! 🚀 今天来学习Mysql的相关知识。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更…...

K8S集群主机网络端口不通问题排查

一、环境: k8s: v1.23.6 docker: 20.10.14 问题和故障现象:devops主机集群主机节点到端口8082不通(网络策略已经申请,并且网络策略已经实施完毕),而且网络实施人员再次确认,网络策…...

【Elasticsearch】retry_on_conflict

在 Elasticsearch 中,retry_on_conflict 是 _update 和 _update_by_query API 的一个参数,用于处理并发冲突。当多个客户端同时尝试更新同一个文档时,可能会发生版本冲突(version conflict)。retry_on_conflict 参数允…...

Android Cameara2 + MediaRecorder 完成录像功能

一、打开相机、预览 打开相机预览流程是Camera2的默认流程 可参考:https://blog.csdn.net/kk3087961/article/details/135616576 二、开启录像功能 开启录像主要包括以下3步: private void startRecording() {// 1. 停止预览并关闭会话if (mCameraSes…...

python打卡day39

知识点回顾 图像数据的格式:灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 课程代码: # 先继续之前的代码 import torch import torch.nn as nn import torch.opti…...

3.8.5 利用RDD统计网站每月访问量

本项目旨在利用Spark RDD统计网站每月访问量。首先,创建名为“SparkRDDWebsiteTraffic”的Maven项目,并添加Spark和Scala的依赖。接着,编写Scala代码,通过SparkContext读取存储在HDFS上的原始数据文件,使用map和reduce…...

尚硅谷redis7 49-51 redis管道之理论简介

前提redis事务和redis管道有点像,但本质上截然不同 49 redis管道之理论简介 面试题 如何优化频繁命令往返造成的性能瓶颈? redis每秒可以承受8万的写操作和接近10万次以上的读操作。每条命令都发送、处理、返回,能不能批处理一次性搞定呢…...

Spring Boot + MyBatis-Plus实现操作日志记录

创建数据库表 CREATE TABLE sys_operation_log (log_id bigint NOT NULL AUTO_INCREMENT COMMENT 日志ID,operation_type varchar(20) NOT NULL COMMENT 操作类型,operation_module varchar(50) NOT NULL COMMENT 操作模块,operation_desc varchar(200) DEFAULT NULL COMMENT …...

JavaScript入门基础篇-day03

一、为什么需要数组? 在我们正式学习数组之前,先思考一个场景:假设我们要记录一个班级50位同学的期末成绩。如果不用数组,代码会是这样的: let score1 85; let score2 92; let score3 78; // ... 要写50个变量&am…...

Leetcode-5 好数对的数目

Leetcode-5 好数对的数目&#xff08;简单&#xff09; 题目描述思路分析通过代码&#xff08;python&#xff09; 题目描述 给你一个整数数组 nums 。 如果一组数字 (i,j) 满足 nums[i] nums[j] 且 i < j &#xff0c;就可以认为这是一组 好数对 。 返回好数对的数目。 示…...

openEuler安装MySql8(tar包模式)

操作系统版本&#xff1a; openEuler release 22.03 (LTS-SP4) MySql版本&#xff1a; 下载地址&#xff1a; https://dev.mysql.com/downloads/mysql/ 准备安装&#xff1a; 关闭防火墙&#xff1a; 停止防火墙 #systemctl stop firewalld.service 关闭防火墙 #systemc…...

Opencv实用操作6 开运算 闭运算 梯度运算 礼帽 黑帽

1.相关函数 开运算 img_open cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)#&#xff08;图片&#xff0c;算法&#xff0c;核&#xff09; 闭运算 img_close cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)#&#xff08;图片&#xff0c;算法&#xff0c;核&#xff09; 梯度…...

基于python,html,flask,echart,ids/ips,VMware,mysql,在线sdn防御ddos系统

详细视频:【基于python,html,flask,echart,ids/ips,VMware,mysql,在线sdn防御ddos系统-哔哩哔哩】 https://b23.tv/azUqQXe...

Git:现代软件开发的基石——原理、实践与行业智慧·优雅草卓伊凡

Git&#xff1a;现代软件开发的基石——原理、实践与行业智慧优雅草卓伊凡 一、Git的本质与核心原理 1. 技术定义 Git是一个分布式版本控制系统&#xff08;DVCS&#xff09;&#xff0c;由Linus Torvalds在2005年为管理Linux内核开发而创建。其核心是通过快照&#xff08;Sna…...

NLua性能对比:C#注册函数 vs 纯Lua实现

引言 在NLua开发中&#xff0c;我们常面临一个重要选择&#xff1a;将C#函数注册到Lua环境调用&#xff0c;还是直接在Lua中实现逻辑&#xff1f; 直觉告诉我们&#xff0c;C#作为编译型语言性能更高&#xff0c;但跨语言调用的开销是否会影响整体性能&#xff1f;本文通过基准…...

【计算机网络】第2章:应用层—Web and HTTP

目录 一、Web 与 HTTP 二、总结 &#xff08;一&#xff09;Web 的定义与功能 &#xff08;二&#xff09;HTTP 协议的定义与功能 &#xff08;三&#xff09;HTTP 协议的核心机制 1. HTTP 请求与响应流程 2. HTTP 的连接类型 3. HTTP 的状态码 &#xff08;四&#xf…...

HarmonyOS 5 应用开发导读:从入门到实践

一、HarmonyOS 5 概述 HarmonyOS 5 是华为推出的新一代分布式操作系统&#xff0c;其核心设计理念是"一次开发&#xff0c;多端部署"。与传统的移动操作系统不同&#xff0c;HarmonyOS 5 提供了更强大的跨设备协同能力&#xff0c;支持手机、平板、智能穿戴、智慧屏…...

大数据治理:分析中的数据安全

引言 随着大数据技术在各行业的深度应用&#xff0c;海量数据蕴含的价值被不断挖掘。然而&#xff0c;数据规模的爆发式增长与分析场景的复杂化&#xff0c;使数据安全问题日益凸显。从数据泄露、隐私侵犯到非法访问&#xff0c;每一个安全漏洞都可能带来难以估量的损失。本文将…...

数字孪生技术赋能西门子安贝格工厂:全球智能制造标杆的数字化重构实践

在工业4.0浪潮席卷全球制造业的当下&#xff0c;西门子安贝格电子制造工厂&#xff08;Electronic Works Amberg, EWA&#xff09;凭借数字孪生技术的深度应用&#xff0c;构建起全球制造业数字化转型的典范。这座位于德国巴伐利亚州的“未来工厂”&#xff0c;通过虚实融合的数…...

国内高频混压PCB厂家有哪些?

一、技术领先型厂商&#xff08;聚焦材料与工艺突破&#xff09; 猎板PCB 技术亮点&#xff1a;真空层压工艺实现FR-4与罗杰斯高频材料&#xff08;RO4350B/RO3003&#xff09;混压&#xff0c;阻抗公差3%&#xff0c;支持64单元/板的5G天线模块&#xff0c;插损降低15%。 应用…...

【图像处理基石】立体匹配的经典算法有哪些?

1. 立体匹配的经典算法有哪些&#xff1f; 立体匹配是计算机视觉中从双目图像中获取深度信息的关键技术&#xff0c;其经典算法按技术路线可分为以下几类&#xff0c;每类包含若干代表性方法&#xff1a; 1.1 基于区域的匹配算法&#xff08;Local Methods&#xff09; 通过…...

day12 leetcode-hot100-19(矩阵2)

54. 螺旋矩阵 - 力扣&#xff08;LeetCode&#xff09; 1.模拟路径 思路&#xff1a;模拟旋转的路径 &#xff08;1&#xff09;设计上下左右方向控制器以及边界。比如zy1向右&#xff0c;zy-1向左&#xff1b;sx1向上&#xff0c;sx-1向下。上边界0&#xff0c;下边界hang-1&a…...

将Java应用集成到CI/CD管道:从理论到生产实践

在2025年的软件开发领域&#xff0c;持续集成与持续部署&#xff08;CI/CD&#xff09;已成为敏捷开发和DevOps的核心实践。根据2024年DevOps报告&#xff0c;85%的企业通过CI/CD管道实现了交付周期缩短50%以上&#xff0c;特别是在金融、电商和SaaS行业。Java&#xff0c;作为…...

密钥管理系统在存储加密场景中的深度实践:以TDE透明加密守护文件服务器安全

引言&#xff1a;数据泄露阴影下的存储加密革命 在数字化转型的深水区&#xff0c;企业数据资产正面临前所未有的安全挑战。据IBM《2025年数据泄露成本报告》显示&#xff0c;全球单次数据泄露事件平均成本已达465万美元&#xff0c;其中存储介质丢失或被盗导致的损失占比高达…...

webpack打包基本配置

需要的文件 具体代码 webpack.config.js const path require(path);const HTMLWebpackPlugin require(html-webpack-plugin);const {CleanWebpackPlugin} require(clean-webpack-plugin); module.exports {mode: production,entry: "./src/index.ts",output: {…...

酷派Cool20/20S/30/40手机安装Play商店-谷歌三件套-GMS方法

酷派Cool系列主打低端市场&#xff0c;系统无任何GMS程序&#xff0c;也不支持直接开启或者安装谷歌服务等功能&#xff0c;对于国内部分经常使用谷歌服务商店的小伙伴非常不友好。涉及机型有酷派Cool20/Cool20S /30/40/50/60等旗下多个设备。好在这些机型运行的系统都是安卓11…...

LabVIEW旋转机械智能监测诊断系统

采用 LabVIEW 开发旋转机械智能监测与故障诊断系统&#xff0c;通过集品牌硬件与先进信号处理技术&#xff0c;实现旋转机械振动信号的实时采集、分析及故障预警。系统突破传统监测手段的局限性&#xff0c;解决了复杂工业环境下信号干扰强、故障特征提取难等问题&#xff0c;为…...