bootloader跳转APP注意事项

news2025/1/12 13:49:35

在gd32f427 时跳转异常

参考文章:
https://club.rt-thread.org/ask/question/425321.html%20https:/club.rt-thread.org/ask/question/eab19452583b5959.html
https://club.rt-thread.org/ask/question/eab19452583b5959.html

关闭全部中断,并且清除中断标志位,防止有的中断存在中断挂起状态;
对于STM32芯片,如果使用HAL库,则调用HAL_DeInit 和 HAL_RCC_DeInit即可。

如果bootloader程序使用操作系统,在设置栈指针时需要注意当前使用的指针时MSP还是PSP,有PSP切换到MSP可以通过触发SVC异常,就相当于进行一次上下文切换,只不过切换到的是APP程序而不是下一个任务。【还没有做过,先记录一下,有机会再实践一下】

如果当前处在特权模式下,可以直接使用__set_CONTROL(0)实现PSP到MSP的切换。

使用M4芯片时栈顶地址和M3可能不一样,

if (((*(volatile uint32_t *)appxaddr) & 0x2FFE0000) == 0x20000000) /* 检查栈顶地址是否合法.可以放在内部SRAM共64KB(0x20000000) */

if (((*(volatile uint32_t *)appxaddr) & 0x2FF00000) == 0x20000000) /* 检查栈顶地址是否合法.可以放在内部SRAM共64KB(0x20000000) */
在这里插入图片描述

  typedef void (*app_func_t)(void);
  
  uint32_t app_addr = appxaddr;
  uint32_t skt_addr = *((__IO uint32_t*)app_addr);
  app_func_t app_func = (app_func_t)(*((__IO uint32_t*)(app_addr+4)));
  if ((((uint32_t)app_func & 0xff000000) != 0x08000000) || ((skt_addr & 0x2ff00000) !=0x20000000))
  {
    App_IapLoadAppret = -1;
    return;
  }
  HAL_Delay(100);
  
  __disable_irq();
  HAL_DeInit();
  
  for(int i = 0; i < 128; ++i)
  {
    HAL_NVIC_DisableIRQ(i);
     HAL_NVIC_ClearPendingIRQ(i);
  }
  
  SysTick->CTRL = 0;
  SysTick->LOAD = 0;
  SysTick->VAL = 0;
  
  HAL_RCC_DeInit();
  
  __set_CONTROL(0);
  __set_MSP(skt_addr);
  
  app_func();

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

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

相关文章

每天一道leetcode:剑指 Offer 27. 二叉树的镜像(适合初学者递归树)

今日份题目&#xff1a; 请完成一个函数&#xff0c;输入一个二叉树&#xff0c;该函数输出它的镜像。 例如输入&#xff1a; 4 / \ 2 7 / \ / \ 1 3 6 9 镜像输出&#xff1a; 4 / \ 7 2 / \ / \ 9 6 3 1 示例 输入&#xff1a;root [4,2,7…

小白到运维工程师自学之路 第七十一集 (kubernetes网络设置)

一、概述 Master 节点NotReady 的原因就是因为没有使用任何的网络插件&#xff0c;此时Node 和Master的连接还不正常。目前最流行的Kubernetes 网络插件有Flannel、Calico、Canal、Weave 这里选择使用flannel。 二、安装flannel 1、master下载kube-flannel.yml&#xff0c;所…

Leetcode-每日一题【剑指 Offer 19. 正则表达式匹配】

题目 请实现一个函数用来匹配包含. 和*的正则表达式。模式中的字符.表示任意一个字符&#xff0c;而*表示它前面的字符可以出现任意次&#xff08;含0次&#xff09;。在本题中&#xff0c;匹配是指字符串的所有字符匹配整个模式。例如&#xff0c;字符串"aaa"与模式…

OSI参考模型及TCP/IP协议栈

一、网络概述 1.1、什么是网络&#xff1f; 1、网络的本质就是实现资源共享 2、将各个系统联系到一起&#xff0c;形成信息传递、接收、共享的信息交互平台 1.2、典型的园区网拓扑 1.3、网络历史发展&#xff0c;ARPA和ARPANET 1、1969年&#xff0c;美国国防部高级研究计…

Python下载的11种方法,一种比一种高级

概要 今天我们一起学习如何使用不同的Python模块从web下载文件。此外&#xff0c;你将下载到常规文件、web页面、Amazon S3和其他资源。 最后&#xff0c;你将学习到如何克服可能遇到的各种挑战&#xff0c;例如下载重定向的文件、下载大型文件、完成一个多线程下载以及其他策…

element-ui表格跨页多选实现

前言 在我们日常项目开发中,经常会有表格跨页多选的需求,接下来让我们用 el-table 示例一步步来实现这个需求。 动手开发 在线体验 https://codesandbox.io/s/priceless-mcclintock-4cp7x3?file/src/App.vue 常规版本 本部分只写了一些重点代码,心急的彦祖可以直接看 性…

量化投研之如何获取所需的数据?

数据是决策和分析的基础&#xff0c;数据的速度、完整性非常重要。 掘金量化提供两大类数据获取方式&#xff1a;订阅数据获取实时数据、接口直通获取历史数据。 下面是两个方式各自的步骤介绍。 获取数据 1. 通过订阅获取高频行情数据 步骤 1、设置初始化函数: init, 使用…

开放世界实例分割:Exploring Transformers for Open-world Instance Segmentation

论文作者&#xff1a;Jiannan Wu,Yi Jiang,Bin Yan,Huchuan Lu,Zehuan Yuan,Ping Luo 作者单位&#xff1a;The University of Hong Kong;ByteDance;Dalian University of Technology;Shanghai AI Laboratory 论文链接&#xff1a;https://arxiv.org/pdf/2308.04206v1.pdf 内…

《孤注一掷》现实版:29万打水漂,华为程序员也躲不过的诈骗!!!

明天周五&#xff0c;约吗&#xff1f; 不管怎样&#xff0c;反正播妞已经订好了《孤注一掷》的电影票。不为别的&#xff0c;《孤注一掷》太敢拍了&#xff01;&#xff01;&#xff01; 美女荷官在线发牌&#xff0c;高知程序员在线养“猪”&#xff0c;诈骗头目“虔诚”拜佛…

HTML笔记(2)

列表标签 项目标识符&#xff08;项目符号&#xff09;一般是不需要的 代码演示 改变符号样式&#xff0c;type属性 表格标签 代码演示 练习案例 布局标签 div是块儿级标签&#xff0c;占一整行&#xff1b; span标签不会占一整行&#xff0c;它只占包裹内容的那块儿区域&a…

甭提ChatGPT了,这个新的AI助手将永远改变人们的工作方式

我使用ChatGPT和Bard已有一段时间了&#xff0c;这些工具已成为我工作流程中不可或缺的一部分。我依靠它们来生成代码、进行统计测试、理解新的术语&#xff0c;并生成分析报告和总结论文。然而当我改用Poe后&#xff0c;使用体验却有了大幅改善。 我在本文中解释为什么我不再…

Element组件浅尝辄止2:Card卡片组件

根据官方说法&#xff1a; 将信息聚合在卡片容器中展示。 1.啥时候使用&#xff1f;When? 既然是信息聚合的容器&#xff0c;那场景就好说了 新建页面时可以用来当做页面容器页面的某一部分&#xff0c;可以用来当做子容器 2.怎样使用&#xff1f;How&#xff1f; //Card …

测试角色在项目各阶段的项目管理tips

目录 一、前言 二、现状及思考 三、详谈测试介入各阶段的项目管理tips 四、暴露风险最终与协作方共同确定运作策略 五、总结 资料获取方法 一、前言 项目管理是一个繁杂的过程&#xff0c;每个阶段需要涉及到不同人员、资源的协调配合。每个角色都有自己的定位和任务&…

15.3 【Linux】循环执行的例行性工作调度

相对于 at 是仅执行一次的工作&#xff0c;循环执行的例行性工作调度则是由 cron &#xff08;crond&#xff09; 这个系统服务来控制的。刚刚谈过 Linux 系统上面原本就有非常多的例行性工作&#xff0c;因此这个系统服务是默认启动的。另外&#xff0c; 由于使用者自己也可以…

Linux命名管道进程通信

文章目录 前言一、什么是命名管道通信二、创建方式三、代码示例四、文件进程通信总结 前言 命名管道 是实现进程间通信的强大工具&#xff0c;它提供了一种简单而有效的方式&#xff0c;允许不同进程之间进行可靠的数据交换。不仅可以在同一主机上的不相关进程间进行通信&…

[AHOI2002] 哈利·波特与魔法石

[AHOI2002] 哈利波特与魔法石 哈利波特与魔法石题目描述输入格式输出格式样例样例输入样例输出 解题思路AC 代码 哈利波特与魔法石 题目描述 输入格式 文件中第一行有七个数&#xff0c;分别是 S1、 S2 、 …、 S7 &#xff1b;第二行有两个数&#xff0c;依次分别是起点城市…

网络知识面试题

一、TCP 和 UDP 的区别 我们一句话概率区别就TCP 是有连接的可靠传输&#xff0c;UDP 是无连接的不可靠传输。 1、TCP 在传输数据时需要先建立连接&#xff0c;UDP 不需要 2、TCP 传输的数据包比较复杂&#xff0c;UDP 传输的数据包比较简单 3、TCP 使用确认应答机制、超时重传…

通过Python模拟计算附近WIFI密码,没有我蹭不到的网

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 今天来分享一下如何通过 Python 脚本实现 WIFI 密码的自动猜解 无图形界面 先来看看怎么实现没有图形界面版的自动猜解。 WIFI猜解 导入模块 import pywifi from pywifi import const import time import datetime测试连…

ejbca:8443报文跟踪

安装客户端证书后&#xff0c;访问管理员页面 :8443/ejbca/adminweb 同时在wireshark抓包 1、客户端向对端发出Client hello 在Server Hello看到一个颁发给客户端的证书&#xff0c;颁发给5be85c9c1df9&#xff08;客户端node hostname 5be85c9c1df9&#xff09;但没有在Clie…