硬汉嵌入式论坛

 找回密码
 立即注册
查看: 429|回复: 4
收起左侧

进入系统bootloader后能否软件跳转到APP

[复制链接]

17

主题

42

回帖

93

积分

初级会员

积分
93
发表于 2025-3-25 15:05:43 | 显示全部楼层 |阅读模式
我看到过一段代码,是从bootloader跳转到APP的,这代码是不是只能用在自己写的bootloader上,程序如果进入到系统bootloader,应该只能硬件复位才能跳转到APP吧
[C] 纯文本查看 复制代码
static void JumpToApp(void)
{
        uint32_t i=0;
        void (*SysMemBootJump)(void);        /*声明一个函数指针*/
        __IO uint32_t BootAddr = 0x8001800; /* APP程序地址*/        
        

        /*关闭全局中断*/
        __disable_irq();

        /*关闭滴答定时器,恢复到默认值*/
        SysTick->CTRL = 0;
          SysTick->LOAD = 0;
          SysTick->VAL = 0;

        /*设置所有时钟到默认状态,使用HSI时钟*/
        HAL_RCC_DeInit();

        /* 关闭所有中断,清除中断挂起标志 */
        for (i = 0; i < 8; i++)
        {
                NVIC->ICER[i]=0xFFFFFFFF;
                NVIC->ICPR[i]=0xFFFFFFFF;
        }        

        /* 使能全局中断 */
        __enable_irq();

        /* 跳转到系统 BootLoader,首地址是MSP,地址 +4 是复位中断服务程序地址 */
        SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4)));

        /* 设置主堆栈地址*/
        __set_MSP(*(uint32_t *)BootAddr);
        
        /*在RTOS工程,这条语句很重要,设置为特权模式,使用MSP指针 */
        __set_CONTROL(0);

        /* 跳转到系统 BootLoader */
        SysMemBootJump();
}

回复

使用道具 举报

6

主题

239

回帖

257

积分

高级会员

积分
257
发表于 2025-3-25 15:37:04 | 显示全部楼层
不会啊,所有MCU自带的BOOTLOADER都有对应的手段跳到用户APP的啊,
比如串口的ISP,有对应的指令复位,跳转,擦除等。
回复

使用道具 举报

5

主题

38

回帖

53

积分

初级会员

积分
53
发表于 2025-3-25 16:10:13 | 显示全部楼层
进了系统boot后会根据你的boot配置跳转到指定的地方
回复

使用道具 举报

3

主题

383

回帖

392

积分

高级会员

积分
392
发表于 2025-3-25 17:31:20 | 显示全部楼层
隔壁韦哥有 毕设级项目:基于单片机从零写BootLoader 的视频,不过要1毛钱,我看完细节已经忘记了好多坑的。
08_最简单的BootLoader的多种写法
09_第1个BootLoader_编程
10_第1个BootLoader_调试
11_第1个BootLoader_代码讲解
12_答疑
13_改进第1个BootLoader(使用汇编跳转)
14_改进第1个BootLoader(重定位vector)_编程
15_改进第1个BootLoader(重定位vector)_调试
16_改进第1个BootLoader_终极代码总结
17_答疑
18_链接地址与跳转
19_BootLoader无法启动修改了链接地址的APP
20_程序总结
21_答疑
22_实现第2个BootLoader
23_答疑
24_第3个BootLoader_复制APP到内存的原理
25_第3个BootLoader_解析头部信息
26_第3个BootLoader_成功启动APP
27_第3个BootLoader_源码总结
28_答疑
29_异常向量表基地址无法修改时怎么办
30_第4个BootLoader_编程
31_修改FreeRTOS的链接地址
32_调试内存中的FreeRTOS
33_答疑
34_第4个BootLoader无法启动APP的原因
35_通过反汇编窗口定位到HAL_Init
36_发现HAL_InitTick的问题(TIM8中断未转发)
37_发现FreeRTOS的prvStartFirstTask使用了VTOR寄存器
38_发现FreeRTOS的SVC_Handler函数导致崩溃
39_找到无法启动任务的原因
40_第4个BootLoade调试成功
41_答疑
42_BootLoader的完整形态
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115653
QQ
发表于 2025-3-26 09:35:58 | 显示全部楼层
使用系统bootloader做产品量产,有个这种问题。

基于BootLoader方式实现的USB DFU和串口IAP,无boot引脚的情况下,覆盖了启动代码怎么办
https://www.armbbs.cn/forum.php? ... id=99014&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-9 16:00 , Processed in 0.251020 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表