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跳转过程相关推荐

  1. ARM Cortex-M3中断跳转过程

    在学习CM3的时候,仔细学习了CM3的中断跳转过程,发现嵌入式的MCU在这一块基本上是一样的,当然不同架构的MCU也有自己的特性. 我来介绍下CM3的中断跳转过程,首先假设中断发生,CM3内核开始响应 ...

  2. app和bootloader跳转 MSP与PSP

    app和bootloader跳转 MSP与PSP 1.不要把跳转函数放在中断中,如此导致在跳转后的app或者bootloder都是在中断状态,只要你一开启该中断,就可能出现硬件中断了 2.如果你的AP ...

  3. android 跳转动画黑屏,Android8.0 适配解决页面跳转过程出现短暂黑屏的问题

    小菜在适配 Android8.0 过程中,遇到很多问题,有很多很常见的问题,今天来整理一下页面跳转时黑屏的问题. 问题猜测 猜测一: 显示 Activity 页面之前会优先开启一个 Starting ...

  4. STM32之HAL库的Bootloader跳转到APP

    前言:需要用到OTA固件升级,必须借助Bootloader搬运新固件到旧固件的Flash区,从而完成程序升级 制作Bootloader程序 使用cubeMX工具,新建Bootloader工程,其中需要 ...

  5. Tiva C(TM4C)的bootloader和启动过程与stm32对比

    gossip: 最近在咸鱼捡了个123GXL的板子,板子没到就先装好了环境,然后看了看资料,前天板子到了,先点了个灯,然后把板子扔到一边又继续看资料去了emmm... 看资料的时候发现有些东西挺有意思 ...

  6. 51内核单片机实现Bootloader跳转到用户程序,要求两个程序都要支持中断

    Flash空间规划 本文使用的单片机为笙科的A9129F6,Flash大小为64KB,SRAM大小为8KB. Flash空间规划如下. 起始地址 结束地址 用途 0x0000 0x3fff Bootl ...

  7. S32K144之SDK版: bootloader 跳转APP测试

    一,实验设计 /** bootloader实验* 实验目的:* 将bootloader 和 app 工程烧录进入开发板,在bootloader程序里,使用按键KEY1,跳转进入APP程序** BOOT ...

  8. stm32 bootloader跳转

    stm32执行完loader程序后如何跳转到应用程序呢,一共有四件事要做: 第一,关闭外设中断,关闭外设时钟,失能外设功能,如果不关闭,跳转到app区后会产生各种奇怪的问题 第二,重设中断向量表位置, ...

  9. 怎么查看页面跳转过程_faststonecapture注册码在哪?怎么获取?

    Faststonecapture是一款专注于电脑端图片抓取与处理的软件,那么FastStonecapture的注册码在哪儿?怎么获取呢?FastStonecapture又有哪些方便使用的功能呢?今天一 ...

最新文章

  1. R最快且比dplyr最高效的大数据处理R包:tidyfst
  2. GDCM:DataElementValue作为SQ的测试程序
  3. [Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能
  4. 【英语学习】【Level 08】U04 What I love L2 My favorite sport
  5. pyintaller exe 后 print的内容 怎么体现_使用Github Actions自动化构建exe
  6. 数据库实验8 数据库安全性(用户与权限管理)实验
  7. 2021烟台市高考成绩查询,烟台2021高考成绩查询系统入口
  8. Android Studio打开项目提示找不到sdk路径的问题。
  9. lema刻字机_Chris Lema访谈– WordPress业务
  10. 移远BC26使用总结
  11. c语言开发unity,[Unity3D]U3D开发项目总结
  12. 电容或电感的电压_电感基础4——什么是LC电路的“谐振频率”?
  13. cs显示服务器连接失败是什么原因,CS1.5服务器连接常见问题解决 解决常见Windows 7无法识别网络的问题...
  14. 病毒常用方法之隐身术
  15. 人力资源书籍排行榜,这些好书不容错过!
  16. 敏捷迭代是什么意思_我认为“敏捷”的方向是第4部分:“敏捷”是什么意思?...
  17. python爬虫今日头条_python 简单爬取今日头条热点新闻(
  18. 教你安装Weblogic
  19. JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配
  20. java求互质数_判断互质数的五种方法

热门文章

  1. 易语言QQ快捷登录源码
  2. 简单的文具店库存管理系统
  3. Html如何在表格中加一条竖线,在Word中,给一个表格多加一横线和竖线,怎么操作呢?...
  4. 《AutoCAD 2016中文版室内装潢设计从入门到精通》——2.5 基本输入操作
  5. goahead服务器性能,goahead web 服务器总体结构
  6. LTE-物理信道及映射关系 http://gxw0099.blog.163.com/blog/static/59710262201401511204125/
  7. VT-x is disabled in BIOS问题的解决步骤
  8. Linux SMP启动流程学习(二)
  9. 关于市盈率,答大海先生
  10. Django第三方登录(QQ登录)