当前位置: 首页 > article >正文

杰发科技Bootloader(3)—— 基于7801的APP切到Boot

为了方便在APP中跳转到Boot重新进行升级,有两种办法,7840同样可以使用。

1. 调用reset接口进行复位,复位后会先进Boot,再自动跳转到App。

NVIC_SystemReset();

2. 直接使用跳转指令,参考Boot跳转到App代码,把跳转地址改一下即可,然后在App中调用JumpTOBoot。

代码如下:

#define IAP_BOOTLOAD_ADDRESS 0x8000000 /* define bootload start address */
typedef void (*pFunction)(void);
static pFunction s_jumpToApplication;

void JumpTOBoot(void)
{
    uint32_t JumpAddress;

    if (((*(__IO uint32_t *)APP_ADDRESS) & 0x2FFE0000) == 0x20000000)
    {
        __ASM("CPSID I");                                           // 关全局中断
        JumpAddress = *(__IO uint32_t *)(IAP_BOOTLOAD_ADDRESS + 4); // Jump to user application
        s_jumpToApplication = (pFunction)JumpAddress;               // Initialize user application's Stack Pointer
        __set_MSP(*(__IO uint32_t *)IAP_BOOTLOAD_ADDRESS);
        s_jumpToApplication(); /* jump to app */
    }
    else
    {
        printf("top of stack pointer is unvalid! enter Boot update!\r\n");
        return;
    }
    while (1)
        ;
}


http://www.kler.cn/a/301578.html

相关文章:

  • Halcon HImage 与 Qt QImage 的相互转换(修订版)
  • OpenGL 进阶系列11 - 粒子特效(使用 Compute Shader)
  • 深度学习神经网络创新点方向
  • Flutter中的Material Theme完全指南:从入门到实战
  • uniapp微信小程序接入airkiss插件进行WIFI配网
  • 【计算机网络】协议定制
  • C++ vectorOJ练习题
  • 恒创科技:最小化服务器存储容量的技巧
  • Android JNI项目build时报告missing and no known rule to make it的原因
  • [001-03-007].第07节:Redis中的事务
  • ios免签H5
  • Docker Swarm 管理
  • 基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(六):Blender烘培和UE5导入
  • 深入探讨MySQL联表查询可能导致的问题及应对策略
  • Linux运维_Bash脚本_源码编译Moby(Docker-CE)-20240803
  • 嵌入式鸿蒙系统开发语言与开发方法分析
  • Linux之MySQL主从复制
  • 组合模式composite
  • linux 操作系统下cp命令介绍及案例应用
  • Angular-Cli脚手架介绍、安装并搭建项目
  • Golang开发之路
  • 从 Data 到 Data + AI,必然之路还是盲目跟风?
  • vue3使用vscode开发遇到热更新问题(文件保存页面不实时更新)
  • 即插即用篇 | YOLOv8 引入并行的分块注意力 | 北京大学 2024 | 微小目标
  • 高级算法设计与分析 学习笔记4 二叉查找树
  • 单片机-STM32 看门狗(八)