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. np.dot()运算准则
  2. 51php绑定多个域名,设置Wordpress站点绑定多域名访问 - Mr.bin的博客
  3. 创业公司这三年,Java老本都快吃完了!
  4. SAP Cloud for Customer Cloud Application Studio的下载地址
  5. innodb和my查询速度_mysql存储引擎MyISAM和InnoDB
  6. C语言循环为1404的循环,考试,求大神帮忙,C语言,小弟感激不尽
  7. linux 编译 expat,关于expat库的编译
  8. PS教程第二十四课:魔法棒
  9. GoogleMaterialDesign900个实用的Axure图标组件库
  10. 字符集本地化(locale)与输入法系列讲座-----(1) UTF-8 and Unicode FAQ
  11. 攻击机靶机环境搭建——网络设置
  12. GC 的背景和一般原理--什么是GC,minor gc,major gc,full gc
  13. 【机器学习】吴恩达:机器学习的六个核心算法
  14. 2021-11-26 pyautogui 配合雷电模拟器实现手机APP签到答题自动化
  15. OSChina 周三乱弹 —— who's your 大爷
  16. 宝塔 linux面板,宝塔Linux面板安装使用入门教程_Linux系统云服务器/云服务器/独立服务器建站面板安装入门教程...
  17. Pytorch ModuleNotFoundError: No module named ‘models‘
  18. SEO诊断,如何查询网站是否被百度降权
  19. 联想昭阳E4电脑U盘安装Win10系统操作教学
  20. Docker的上手(Ubuntu140.4 Mate)

热门文章

  1. java springboot大学生兼职平台的设计与实现
  2. 利用计算机分析信号,计算机技术在铁路信号中的应用
  3. redis 批量删除key
  4. 基于单片机的智能储存柜的设计
  5. MediaCodec 从Surface编码及android锁屏录像和后台录像实现
  6. 移动端H5开发不了解一下抓包嘛?
  7. 自定义滚动条修改x和y轴滚动条交叉地方的css样式
  8. 疯壳-MTK智能电话手表开发软件下载
  9. 根因分析思路方法总结|保障IT系统及其稳定性
  10. 【JAVA】保龄球记分游戏