0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Bootloader 万能实现逻辑

RTThread物联网操作系统 来源:未知 2023-04-20 04:55 次阅读

仓库地址:

https://github.com/loogg/agile_upgrade_mcu_demos

一般 Bootloader 实现的逻辑如下:

5a93a02c-def4-11ed-bfe3-dac502259ad0.png

这种方式适合于简单的裸机程序或可控的 OS 程序(即所有外设硬件都可把控),在准备环境的时候将其全部关闭。

但对于一些复杂的或者 OS 中轮子已造好的程序,有一些因素不花时间研究无法把控,在准备环境时很可能就会遗漏一些未关闭导致出各种各样的问题。

这里提供一种 万能 方法:

- 利用芯片中的不受软件复位影响的可供用户使用的寄存器 (如 STM32 中的备份寄存器)。

- 在需要跳入 APP 运行时将该寄存器赋值然后软件复位。

- 在 OS 还没初始化时判断该寄存器值,如果需要跳转只需要简单的准备环境即可跳转。

5ab3e9e0-def4-11ed-bfe3-dac502259ad0.png

该方法可以使 Bootloader 就作为一个 OS 应用程序开发,需要跳转的时候就操作一下寄存器并软件复位即可。

该仓库下所有的 Bootloader 例子均使用此方法。

以正点原子探索者开发板的 STM32F4 为例,将 system_stm32f4xx.c 文件的 SystemInit 函数修改:

1voidboot_start_application(void);
2voidSystemInit(void)
3{
4boot_start_application();

boot_start_application的实现为:

 1typedefvoid(*boot_app_func)(void);
 2voidboot_start_application(void){
 3__HAL_RCC_PWR_CLK_ENABLE();
 4HAL_PWR_EnableBkUpAccess();
 5RTC_HandleTypeDefRTC_Handler={0};
 6RTC_Handler.Instance=RTC;
 7uint32_tbkp_data=HAL_RTCEx_BKUPRead(&RTC_Handler,BOOT_BKP);
 8HAL_RTCEx_BKUPWrite(&RTC_Handler,BOOT_BKP,0);
 9if(bkp_data!=0xA5A5)return;
10boot_app_funcapp_func=NULL;
11uint32_tapp_addr=BOOT_APP_ADDR;
12if(((*(__IOuint32_t*)(app_addr+4))&0xff000000)!=0x08000000)return;
13/*栈顶地址在128KRAM间*/
14if(((*(__IOuint32_t*)app_addr)-0x20000000)>=(STM32_SRAM_SIZE*1024))return;
15app_func=(boot_app_func)*(__IOuint32_t*)(app_addr+4);
16/*Configuremainstack*/
17__set_MSP(*(__IOuint32_t*)app_addr);
18/*jumptoapplication*/
19app_func();
20}

		
设置寄存器并软件复位的实现为:
1staticvoidboot_app_enable(void){
2__disable_irq();
3RTC_HandleTypeDefRTC_Handler={0};
4RTC_Handler.Instance=RTC;
5HAL_RTCEx_BKUPWrite(&RTC_Handler,BOOT_BKP,0xA5A5);
6HAL_NVIC_SystemReset();
7}

版权声明:本文为RT-Thread论坛用户「Cfly」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://club.rt-thread.org/ask/article/08aa702381dd4310.html

———————End———————

RT-Thread线下入门培训

5月 - 成都、武汉、西安

1.免费2.动手实验+理论3.主办方免费提供开发板4.自行携带电脑,及插线板用于笔记本电脑充电5.参与者需要有C语言单片机ARM Cortex-M核)基础,请提前安装好RT-Thread Studio 开发环境

5ace1a72-def4-11ed-bfe3-dac502259ad0.png

立即扫码报名

(4月-青岛、北京 就在本周六)

报名链接

https://jinshuju.net/f/UYxS2k

巡回城市:青岛、北京、西安、成都、武汉、郑州、杭州、深圳、上海、南京

你可以添加微信:rtthread2020 为好友,注明:公司+姓名,拉进RT-Thread官方微信交流群!

点击阅读原文,进入RT-Thread创意创客大赛


	


原文标题:Bootloader 万能实现逻辑

文章出处:【微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RT-Thread
    +关注

    关注

    31

    文章

    1289

    浏览量

    40127

原文标题:Bootloader 万能实现逻辑

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    万能转换开关的基本结构、工作原理及性能特点

    万能转换开关是一种广泛应用于工业自动化、电力系统、电气设备等领域的电气开关设备。它具有结构简单、操作方便、性能稳定等特点,能够实现对电路的快速切换和控制。 一、万能转换开关的基本结构 外壳
    的头像 发表于 08-20 10:20 3039次阅读

    万能转换开关的作用有哪些

    万能转换开关是一种广泛应用于工业自动化、电力系统、机械设备等领域的电气元件。它具有多种功能和优点,能够实现对电路的控制、保护和转换。 电路控制功能 万能转换开关最基本的作用是对电路进行控制。它可
    的头像 发表于 08-20 10:18 1134次阅读

    万能转换开关的定位结构一般采用哪些

    万能转换开关是一种广泛应用于工业自动化、电力系统、通讯设备等领域的电气开关设备。其主要功能是实现对电路的通断控制、信号转换、状态指示等。在万能转换开关的设计和制造过程中,定位结构的设计至关重要,它
    的头像 发表于 08-20 10:12 2648次阅读

    万能转换开关是什么的主令电器

    ,充分体现了其广泛的应用范围和强大的功能特性。 一、定义与功能 万能转换开关,顾名思义,是一种能够实现多种电路转换和控制功能的主令电器。它主要用于将不同电流、电压的家用电器或电气设备转换成其适用的工作条件,确保设备在正确的电压
    的头像 发表于 08-20 10:11 1397次阅读

    万能转换开关的基本概念、工作原理及结构特点

    ,它可以在不同的工作状态下实现对电路的切换、控制和保护。它通常由多个触点、一个操作手柄和一些辅助装置组成,具有结构紧凑、操作方便、控制灵活等特点。 1.2 功能 万能转换开关的主要功能包括: (1)切换功能:可以实现对电路的开
    的头像 发表于 08-20 10:09 2727次阅读

    万能断路器参数设置的基本原则

    万能断路器是一种广泛应用于电力系统、工业自动化和建筑电气等领域的保护和控制设备。它具有过载保护、短路保护、欠压保护等多种功能,能够有效地保护电气设备和线路的安全运行。为了确保万能断路器的正常工作
    的头像 发表于 08-14 15:50 972次阅读

    万能断路器跳闸后如何复位

    万能断路器是一种广泛应用于电力系统中的保护装置,其主要作用是在电路发生故障时,能够迅速切断电路,以保护电气设备和人身安全。然而,在实际使用过程中,万能断路器可能会出现跳闸现象,这时候就需要进行复位
    的头像 发表于 07-31 15:24 1672次阅读

    万能断路器合不上闸的原因

    以下是万能断路器合不上闸的原因的主要内容: 万能断路器的基本原理和功能 万能断路器是一种用于保护电力系统的设备,可以自动切断故障电路,以防止设备损坏和事故的发生。 万能断路器的主要功能
    的头像 发表于 07-31 15:21 2131次阅读

    万能断路器参数如何设置

    万能断路器是一种广泛应用于电力系统、工业自动化和建筑电气领域的电气设备,其主要功能是在电路中起到过载、短路、欠压等保护作用。正确设置万能断路器参数对于确保设备安全运行和提高系统可靠性具有重要意义
    的头像 发表于 07-31 15:19 1926次阅读

    简述万能电桥测量电容的步骤

    万能电桥是一种测量电感和电容的仪器,具有测量范围广、精度高、操作简便等特点。在测量电容时,万能电桥可以准确地测量出电容的值,为电子电路设计和维修提供了重要的参考数据。下面介绍万能电桥测量电容的步骤
    的头像 发表于 07-26 09:58 906次阅读

    python函数的万能参数

    我们通过一个简单的事例来展示一下函数的万能参数,我们先写一个最简单的函数。
    的头像 发表于 07-17 14:56 339次阅读
    python函数的<b class='flag-5'>万能</b>参数

    AG32的“万能管脚”

    推荐新设计了,也就是说原厂停产这款芯片已经进入倒计时了。客户听说我们的MCU是“万能管脚”的,所以想试一试看能否替换。AG32的确是目前MCU产品中最接近于“万能
    的头像 发表于 07-09 10:00 78次阅读
    AG32的“<b class='flag-5'>万能</b>管脚”

    万能表如何测量电瓶

    电瓶作为汽车、摩托车等交通工具的重要能源储存装置,其性能的好坏直接影响到车辆的正常运行。因此,定期检查电瓶的状态,确保其电量充足、性能稳定,是每位车主都应重视的事项。在众多的电瓶检测工具中,万能
    的头像 发表于 05-20 17:02 1477次阅读

    万能转换开关的定位结构一般采用什么

    ,从而实现各种功能,如电源切换、控制模式选择等。作为开关的一部分,万能转换开关的定位结构对其性能和可靠性具有重要影响。 1.2 研究目的 本文旨在通过对万能转换开关的定位结构进行深入研究,分析机械式结构和电子式结构的特点
    的头像 发表于 02-26 09:41 1.1w次阅读

    万能遥控器的设置和使用方法

    万能遥控器是一种能够控制不同品牌电器的设备,它可以将多个遥控器的功能整合到一个遥控器上,方便用户操作。在本文中,我将详细介绍万能遥控器的设置和使用方法。 设置万能遥控器 步骤一:准备工作 在开始设置
    的头像 发表于 01-24 10:57 1.5w次阅读