首页 > 其他分享 >IAP在线升级二

IAP在线升级二

时间:2024-10-25 20:44:59浏览次数:1  
标签:addr void 跳转 升级 PC 地址 寄存器 IAP 在线

一.分析JumpToApp函数

点击查看代码
void JumpToApp(uint32_t addr)
{	
	__disable_irq();//这个函数调用会禁用中断。在跳转到新的应用程序之前,通常需要确保当前的中断状态不会干扰跳转过程。
	
	uint32_t sp = *((volatile uint32_t *)(addr));//从addr指定的地址读取栈指针(Stack Pointer,SP)的值。volatile关键字告诉编译器不要优化这部分代码,因为它可能会在程序执行过程中改变。
	uint32_t pc = *((volatile uint32_t *)(addr + 4));//从addr + 4的地址读取程序计数器(Program Counter,PC)的值,这是新应用程序的入口地址。
	
	typedef void (*Func_void_void)(void);
	Func_void_void ResetHandler = (Func_void_void)pc;//将pc的值转换为Func_void_void类型的函数指针,并将其赋值给ResetHandler变量。
	
	SCB->VTOR = addr;//设置向量表偏移寄存器(Vector Table Offset Register,VTOR)的值为addr。这个寄存器定义了中断向量表的起始地址。在跳转到新应用程序时,需要更新这个寄存器,以便中断能够正确地跳转到新应用程序的中断处理函数。					
	
	__set_MSP(sp);//设置主堆栈指针(Main Stack Pointer,MSP)为从addr读取的栈指针值。这是为了确保新应用程序能够使用正确的堆栈。
	
	ResetHandler();//调用ResetHandler函数,这实际上是跳转到新应用程序的入口点。
	
	while(1) __NOP();//在跳转到新应用程序后,如果函数返回,这将导致程序进入一个无限循环,执行空操作(No Operation,NOP)。这通常是为了防止程序返回到旧的上下文中。
}

#define FLASH_APP1_ADDR		0x00008000
JumpToApp(FLASH_APP1_ADDR);	

二.3个核心寄存器

  • 1.三级流水线
    ARM-CPU属于属于精简指令集,三级流水线。取指、译指、执行。

    ARM指令是三级流水线,取指,译指,执行时同时执行的,现在PC指向的是正在取指的地址,那么cpu正在译指的指令地址是PC-4(ARM RISC指令集,通常一个基础指令占4个字节),cpu正在执行的指令地址是PC-8,也就是说PC所指向的地址和现在所执行的指令地址相差8。
    当突然发生中断的时候,保存的是PC的地址,如果返回的时候返回PC,那么中间就有一个指令没有执行,所以用SUB pc lr-irq

  • 2.寄存器介绍
    SP寄存器(R13):堆栈指针,SP总是指向栈顶。
    LR寄存器(R14):LR寄存器存的是,执行子函数后,PC指针应该跳转回去的地方。
    PC寄存器(R15): 程序计数器,内部存的值是当前执行到了哪个地址;PC 总是指向“正在取指”的指令

标签:addr,void,跳转,升级,PC,地址,寄存器,IAP,在线
From: https://www.cnblogs.com/Charles-Hui/p/18503141

相关文章

  • 好用的在线看板工具有哪些
    好用的在线看板工具有:一、Trello;二、Asana;三、Monday.com。这些在线看板工具都具有各自的特点和优势,可以根据团队的需求选择最合适的工具。其中,Trello以其简单直观的界面而闻名,将工作流程呈现为卡片和列表,易于理解和使用。一、TrelloTrello以其直观的卡片视图而闻名,用户可以创......
  • rk3568用otg口U盘升级
    设备只有一个外露的usb(otg口)出来,平时可切换为host接U盘使用,或者otg可进行adb调试模式。这个口接U盘升级的时候,会升级失败,如果把dr_mode改成host,就可以正常升级成功: 但如果dts写死成host模式,开机后就不能切换为otg模式了,不能调试,这样的灵活性不够。dr_mode默认为otg时候,现在基本......
  • SD3.5来了!图片生成界的霸主再次升级,这次玩儿大了
    在人工智能的浪潮下,图片生成技术正以前所未有的速度发展。就在我们还在为FLUX1.1的横空出世而惊叹时,StabilityAI又给了我们一个惊喜——SD3.5的发布。这款全新的图片生成模型,不仅在性能上再次超越了所有开源和商业模型,更是在功能上带来了全新的突破。模型可以扫描下方,免费......
  • autoupgrade升级(二)
    AnalyzeProcessingMode分析处理模式会检查您的数据库是否已准备好升级。仅从数据库读取数据,而不会对数据库执行任何更新。您可以在正常工作时间内使用分析模式运行AutoUpgrade。在源OracleDatabase主目录上以分析模式运行AutoUpgrade程序。使用以下语法在分析模式下......
  • autoupgrade升级(一)
    关于autoupgarde建议从MyOracleSupportDocument2485457.1下载最新版的autoupgrade.jar程序。每出一个版本RU(releaseupdate)都提供新的autoupgrade.jar程序。默认下载autoupgrade.jar到oracleHome,(Oracle_home/rdbms/admin)但是我没有,我是放到了/tmp下也可以只适用于EE企......
  • 关于ubuntu系统升级遇到的问题:upgrades to the development release are only.......
    主要问题在于使用的是命令:sudodo-release-upgrade-d这将会寻找最新的版本进行安装,但是如果最新版本不稳定的话请求会受到拒绝,导致更新无法进行。具体区别如下:do-release-upgrade是Ubuntu系统用于升级到新版本的命令。当你运行这个命令时,系统会检查是否有新版本可用,并且会自......
  • springboot 在线考试系统 (案例分析)-附源码
    摘  要    随着在线教育的快速发展,基于网络的在线考试系统成为教育领域的重要组成部分。本研究基于SpringBoot框架、Java编程语言和MySQL数据库开发了一款功能强大的在线考试系统。系统不仅包括用户管理模块,允许管理员对管理员、学生和教师用户进行添加、编辑和删除......
  • oracle APEX组件升级
    最近的工作有数据库升级的内容,通过autograde自动升级数据库,从11g到19c,但是APEX组件不会自动升级。所以目前APEX的组件还是低版本的。查看各个组件版本:colcomp_idfora15colversionfora15colcomp_namefora30colstatusfora15selectcomp_id,comp_name,version,st......
  • 基于SpringBoot+Vue+uniapp的乡村政务办公系统的详细设计和实现(源码+lw+部署文档+讲
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 能耗在线监测系统助推碳达峰碳中和
    0引言能耗数据在线监测是实现碳达峰、碳中和目标不可或缺的基石。我国正积极构建并推广重点用能单位的能耗在线监测系统,作为响应双碳目标的重要举措。当前,大部分地区已成功将关键用能单位的能耗数据上传至国家级平台,但尚需加强数据质量保障、业务功能拓展以及数据处理技术等方......