EFM32的BootLoader跳转过程
BootLoader升级完成后,要想正确完成跳转,有3部分工作需要完成。1、跳转到新的程序地址执行程序;2、重新设置新程序的堆栈首地址;3、重新设置中断向量表。结合下图说明如下:
新程序的下载地址就是下图的首地址,Initial SP value对应的实际地址是首地址+0,Reset对应的实际地址是首地址+4。Initial SP value里面的值是重新设置的堆栈首地址;Reset里面的值是新程序的执行地址。
#define USER_DEFINE_RUN_ADDR 0x5000
方式一:c语言配合寄存器
1、设置新的PC指向,需要放在bootloader里面
typedef OS_S32 (*PM3EntryFunc)(OS_VOID); /* 定义一个新的函数指针类型,和新程序的main类型相同 */
PM3EntryFunc pfJumpToApp = NULL; /* 定义一个函数指针变量 */
OS_U32 g_u32JumpAddress = 0; /* 保存地址 */
g_u32JumpAddress = *( OS_U32*) (USER_DEFINE_RUN_ADDR + 4);
pfJumpToApp = (PM3EntryFunc)g_u32JumpAddress;
pfJumpToApp();
2、设置新的中断向量:
SCB->VTOR = USER_DEFINE_RUN_ADDR;
3、设置新的堆栈地址
__set_MSP(*(OS_U32*) USER_DEFINE_RUN_ADDR);
方式二:嵌入式汇编配合寄存器
1、重新设置堆栈和跳转指针,需要传入新程序的下载地址
__ASM void StartApplication(uint32_t start_addr)
{
LDR R2, [R0] ;// Get App MSP.
MSR MSP, R2 ;// Set the main stack pointer to the applications MSP. 设置堆栈指针
LDR R3, [R0, #0x00000004] ;// Get application reset vector address. 设置跳转地址
BX R3 ;// No return - stack code is now activated only through SVC and plain interrupts.
ALIGN
}
StartApplication(USER_DEFINE_RUN_ADDR);
2、设置新的中断向量:
SCB->VTOR = USER_DEFINE_RUN_ADDR;
EFM32的BootLoader跳转过程相关推荐
- ARM Cortex-M3中断跳转过程
在学习CM3的时候,仔细学习了CM3的中断跳转过程,发现嵌入式的MCU在这一块基本上是一样的,当然不同架构的MCU也有自己的特性. 我来介绍下CM3的中断跳转过程,首先假设中断发生,CM3内核开始响应 ...
- app和bootloader跳转 MSP与PSP
app和bootloader跳转 MSP与PSP 1.不要把跳转函数放在中断中,如此导致在跳转后的app或者bootloder都是在中断状态,只要你一开启该中断,就可能出现硬件中断了 2.如果你的AP ...
- android 跳转动画黑屏,Android8.0 适配解决页面跳转过程出现短暂黑屏的问题
小菜在适配 Android8.0 过程中,遇到很多问题,有很多很常见的问题,今天来整理一下页面跳转时黑屏的问题. 问题猜测 猜测一: 显示 Activity 页面之前会优先开启一个 Starting ...
- STM32之HAL库的Bootloader跳转到APP
前言:需要用到OTA固件升级,必须借助Bootloader搬运新固件到旧固件的Flash区,从而完成程序升级 制作Bootloader程序 使用cubeMX工具,新建Bootloader工程,其中需要 ...
- Tiva C(TM4C)的bootloader和启动过程与stm32对比
gossip: 最近在咸鱼捡了个123GXL的板子,板子没到就先装好了环境,然后看了看资料,前天板子到了,先点了个灯,然后把板子扔到一边又继续看资料去了emmm... 看资料的时候发现有些东西挺有意思 ...
- 51内核单片机实现Bootloader跳转到用户程序,要求两个程序都要支持中断
Flash空间规划 本文使用的单片机为笙科的A9129F6,Flash大小为64KB,SRAM大小为8KB. Flash空间规划如下. 起始地址 结束地址 用途 0x0000 0x3fff Bootl ...
- S32K144之SDK版: bootloader 跳转APP测试
一,实验设计 /** bootloader实验* 实验目的:* 将bootloader 和 app 工程烧录进入开发板,在bootloader程序里,使用按键KEY1,跳转进入APP程序** BOOT ...
- stm32 bootloader跳转
stm32执行完loader程序后如何跳转到应用程序呢,一共有四件事要做: 第一,关闭外设中断,关闭外设时钟,失能外设功能,如果不关闭,跳转到app区后会产生各种奇怪的问题 第二,重设中断向量表位置, ...
- 怎么查看页面跳转过程_faststonecapture注册码在哪?怎么获取?
Faststonecapture是一款专注于电脑端图片抓取与处理的软件,那么FastStonecapture的注册码在哪儿?怎么获取呢?FastStonecapture又有哪些方便使用的功能呢?今天一 ...
最新文章
- np.dot()运算准则
- 51php绑定多个域名,设置Wordpress站点绑定多域名访问 - Mr.bin的博客
- 创业公司这三年,Java老本都快吃完了!
- SAP Cloud for Customer Cloud Application Studio的下载地址
- innodb和my查询速度_mysql存储引擎MyISAM和InnoDB
- C语言循环为1404的循环,考试,求大神帮忙,C语言,小弟感激不尽
- linux 编译 expat,关于expat库的编译
- PS教程第二十四课:魔法棒
- GoogleMaterialDesign900个实用的Axure图标组件库
- 字符集本地化(locale)与输入法系列讲座-----(1) UTF-8 and Unicode FAQ
- 攻击机靶机环境搭建——网络设置
- GC 的背景和一般原理--什么是GC,minor gc,major gc,full gc
- 【机器学习】吴恩达:机器学习的六个核心算法
- 2021-11-26 pyautogui 配合雷电模拟器实现手机APP签到答题自动化
- OSChina 周三乱弹 —— who's your 大爷
- 宝塔 linux面板,宝塔Linux面板安装使用入门教程_Linux系统云服务器/云服务器/独立服务器建站面板安装入门教程...
- Pytorch ModuleNotFoundError: No module named ‘models‘
- SEO诊断,如何查询网站是否被百度降权
- 联想昭阳E4电脑U盘安装Win10系统操作教学
- Docker的上手(Ubuntu140.4 Mate)