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又有哪些方便使用的功能呢?今天一 ...
最新文章
- R最快且比dplyr最高效的大数据处理R包:tidyfst
- GDCM:DataElementValue作为SQ的测试程序
- [Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能
- 【英语学习】【Level 08】U04 What I love L2 My favorite sport
- pyintaller exe 后 print的内容 怎么体现_使用Github Actions自动化构建exe
- 数据库实验8 数据库安全性(用户与权限管理)实验
- 2021烟台市高考成绩查询,烟台2021高考成绩查询系统入口
- Android Studio打开项目提示找不到sdk路径的问题。
- lema刻字机_Chris Lema访谈– WordPress业务
- 移远BC26使用总结
- c语言开发unity,[Unity3D]U3D开发项目总结
- 电容或电感的电压_电感基础4——什么是LC电路的“谐振频率”?
- cs显示服务器连接失败是什么原因,CS1.5服务器连接常见问题解决 解决常见Windows 7无法识别网络的问题...
- 病毒常用方法之隐身术
- 人力资源书籍排行榜,这些好书不容错过!
- 敏捷迭代是什么意思_我认为“敏捷”的方向是第4部分:“敏捷”是什么意思?...
- python爬虫今日头条_python 简单爬取今日头条热点新闻(
- 教你安装Weblogic
- JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配
- java求互质数_判断互质数的五种方法
热门文章
- 易语言QQ快捷登录源码
- 简单的文具店库存管理系统
- Html如何在表格中加一条竖线,在Word中,给一个表格多加一横线和竖线,怎么操作呢?...
- 《AutoCAD 2016中文版室内装潢设计从入门到精通》——2.5 基本输入操作
- goahead服务器性能,goahead web 服务器总体结构
- LTE-物理信道及映射关系 http://gxw0099.blog.163.com/blog/static/59710262201401511204125/
- VT-x is disabled in BIOS问题的解决步骤
- Linux SMP启动流程学习(二)
- 关于市盈率,答大海先生
- Django第三方登录(QQ登录)