单片机BootLoader是咋回事?

BootLoader的定义:

        CPU进入APP之前运行的一小段程序代码就叫做BootLoader。它是由程序员编写的,作用是更新应用程序。这也就说明了只有BootLoader的单片机才可以升级。有的产品有升级的需要就需要BootLoader了。

单片机的启动过程可以这么叙述:start→stack→data→Vactor→main;

单片机一上电,PC指针指向0x00000000地址所在的一块内存,加载一个需要跳转的地址,这个地址可以是应用程序的地址,也可以是BootLoader的地址,是哪个地址根据开发阶段的不同有所不同。

一般来说一个完整的操作流程是,从初始地址开始跳转到boot里去检测需不需要升级,需要的话就会停在boot里,不需要的话就跳转到应用程序里。

看一下下图,右边两个hex文件分别是烧录到左图中的两个区域的,也就是单片机里,实际工程项目中这两个hex文件是在一起的,这里为了区分划分成了两个hex文件。

说明一下应用程序的首地址是这个应用程序的一个启动函数,启动函数是一个工程启动文件,相信学32单片机的时候都接触过有一个叫做启动文件的东西,有堆栈的建立,静态数据的存储,向量表的建立,这些基础工作做完,才会跳转到这个main函数,执行的才是用户自己的代码。

 补充:如果需要升级的话,上面说到会停在boot里,然后根据诊断仪的引导,完成app黄色区域的擦除和写入,当app程序下载完成后,软件自动复位,此时程序就更新完成了,不再有升级需求,boot就会直接跳转到应用程序。

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

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

相关文章

【C++】set/multiset/map/multimap

目录 一、关联式容器 1.1 树形结构的关联式容器 二、set 2.1 set的介绍 2.2 set的使用 2.2.1 set的构造 2.2.2 set的迭代器 2.2.3 set的容量函数 2.2.4 set的功能函数 2.2.5 set的使用举例 三、multiset 3.1 multiset的介绍 3.2 multiset的使用演示 四、map 4.1…

Linux内核--内存管理(三)物理内存分页机制--kmalloc及slub机制

一、引言 二、slub机制 ------>2.1、slub分配原理slub原理 ------>2.2、slub分配原理 ------>2.3、slub释放原理 ------>2.4、SLUB分配器 三、slub数据结构 ------>3.1、kmem_cache ------>3.2、kmem_cache_cpu ------>3.3、kmem_cache_node --…

线性表之队列

文章目录 主要内容一.队列1.队列的顺序存储代码如下(示例): 2.队列的链式存储3.双端队列 总结 主要内容 队列 一.队列 队列是一种先进先出(FIFO,First In First Out)的线性数据结构,它具有两个基本操作&a…

什么是路由抖动?该如何控制

路由器在实现不间断的网络通信和连接方面发挥着重要作用,具有所需功能的持续可用的路由器可确保其相关子网的良好性能,由于网络严重依赖路由器的性能,因此确保您的路由器不会遇到任何问题非常重要。路由器遇到的一个严重的网络问题是路由抖动…

Java自学过程中的学习技巧与方法分享

问题:请解释一下SELECT语句在单表查询中的作用,并结合示例代码说明如何使用SELECT语句进行单表查询。 答案: 在数据库中,使用SELECT语句进行单表查询是非常常见和基础的操作。SELECT语句用于从数据库表中检索数据,可…

使用 watch+$nextTick 解决Vue引入组件无法使用问题

问题描述: 很多时候我们都需要使用第三方组件库,比如Element-UI,Swiper 等等。 如果我们想要在这些结构中传入自己从服务器请求中获取的数据就会出现无法显示的问题。 比如我们在下面的Swiper例子中,我们需要new Swiper 才能让…

【华为OD题库-043】二维伞的雨滴效应-java

题目 普通的伞在二维平面世界中,左右两侧均有一条边,而两侧伞边最下面各有一个伞坠子,雨滴落到伞面,逐步流到伞坠处,会将伞坠的信息携带并落到地面,随着日积月累,地面会呈现伞坠的信息。 1、为了…

mysql主从复制-redis集群扩容缩容、缓存优化(缓存更新策略、穿透,击穿,雪崩)、mysql主从搭建、django实现读写分离

基于Docker实现读写分离 1 redis集群扩容缩容 1.1 集群扩容 1.2 集群缩容 2 缓存优化 2.1 缓存更新策略 2.2 穿透,击穿,雪崩 3 mysql主从搭建 4 django实现读写分离 1 redis集群扩容缩容 1.1 集群扩容 # 6台机器,3个节点集群# 8台机器&am…

第12关 精通K8s下的Ingress-Nginx控制器:生产环境实战配置指南

------> 课程视频同步分享在今日头条和B站 大家好,我是博哥爱运维,这节课带来k8s的流量入口ingress,作为业务对外服务的公网入口,它的重要性不言而喻,大家一定要仔细阅读,跟着博哥的教程一步步实操去理…

一文总结Java获取文件后缀名的所有方法

Java是一种应用广泛的编程语言,可以通过多种方式来实现对文件的操作,如文件名后缀、文件扩展名等,下面这篇文章主要给大家介绍了关于Java获取文件后缀名的所有方法,需要的朋友可以参考下 一、研究背景 在我们实际的项目开发中,我们会经常对…

HTML5语法总结大全(持续更新中~)

参考书籍: 《HTML与CSS3基础教程》 参考视频: HTML5完整教学通俗易懂 2023新版前端Web开发HTML5CSS3移动web视频教程,前端web入门首选黑马程序员 参考网站: w3school 文章目录 零.开发环境准备1.需要的工具2.Vscode所需要插件3.其…

智能优化算法应用:基于混合蛙跳算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于混合蛙跳算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于混合蛙跳算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.混合蛙跳算法4.实验参数设定5.算法结果6.参考…

Snagit 2024.0.1(Mac屏幕截图软件)

Snagit 2024是一款屏幕截图工具,可以帮助用户轻松捕获、编辑和分享屏幕截图。该工具在Mac上运行,旨在满足用户对于屏幕截图的各种需求。 Snagit 2024支持屏幕录制功能,可以录制摄像头和麦克风等外部设备,让用户录制更加全面的视频…

Redis基本操作及使用

📑前言 本文主要是【Redis】——Redis基本操作及使用的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一…

vue2.0 中央控制总线 Bus

vue2.0 中央控制总线 Bus 1. 废话不多说,直接上代码 2. main.js中 加入 // main.js //创建中央控制总线 Bus // 说白了就是new一个vue实例,将方法挂在上去 Vue.prototype.$event new Vue();事件分发***(A组件中)*** // A组件中…

springboot 自定义starter逐级抽取

自定义starter 背景:各个组件需要引入starter 还有自己的配置风格 –基本配置原理 (1)自定义配置文件 导入配置可以在配置文件中自动识别,提示 导入依赖后可以发现提示 (2)配置文件实现 –让配置文件对其他模块生…

酵母双杂交服务专题(二)

在理解了蛋白互作关系基础之上,为了解析它们的互作机制,往往还需要对其上下游通路上的基因进行分析。蛋白质之间的相互作用通过促进或抑制下游基因的转录,从而影响细胞的一系列生命过程。酵母单杂交技术是一种研究蛋白和DNA相互作用的常用手段…

安卓底部导航栏BottomNavigationView

目录 1. BottomNavigationView (1) 准备BottomNavigationView使用的菜单资源文件 (2) 准备颜色选择器 (3) BottomNavigationView控件设置 (4) 在Java代码中设置OnItemSelectedListener监听器 (5) 与Fragment配合 2. BottomTabBar 实现安卓底部导航栏,google为…

5面试题--redis

慢查询⽇志:⽤于记录执⾏时间超过给定时⻓的命令请求,⽤户可以通过这个功能产⽣的⽇志来监视和 优化查询速度。 布隆过滤器:⼆进制数组进⾏存储,若判断元素存在则可能实际存在,若判断不存在则⼀定不存在。 redis中inc…

C语言——一个数如果恰好等于它的因子之和,这个数就称为“完全数”。

一个数如果恰好等于它的因子之和,这个数就称为“完全数”。例如,6的因子是 1、2、3,而6123。因此6是一个完全数。编程找出 1000 之内的所有完全数。 #include <stdio.h> int main() {int i, j, sum;for (i 1; i < 1000; i) {sum 0; //这一步很重要&#xff0c;每…