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
    +关注

    关注

    32

    文章

    1540

    浏览量

    44280

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Bootloader固件升级的步骤

    文件则下载到 ROM 或 Flash 中BootLoader 后面的地址中。也就是说,存在 ROM/Flash 中的内容是分为两部分的。 4、要实现在同一个 ROM/Flash 中保存两段程序
    发表于 11-19 07:41

    软件的力量:玩转电子万能试验机控制系统的高级技巧

    电子万能试验机的效能发挥,不仅依赖硬件设备的性能,更离不开控制系统软件的灵活运用。很多操作人员仅将软件视为“参数输入工具”,却忽略了其隐藏的强大功能。实际上,熟练掌握软件的高级技巧,能让测试流程更高
    的头像 发表于 10-24 09:31 104次阅读
    软件的力量:玩转电子<b class='flag-5'>万能</b>试验机控制系统的高级技巧

    HarmonyOSAI编程万能卡片生成(二)

    工程保存完成后,工程中会新增如下卡片相关文件: 自定义配置逻辑代码 逻辑代码包含实现卡片数据交互和卡片事件两类。 卡片数据交互:触发卡片页面刷新。应用工程生成的卡片数据交互,可通过数据库或网络请求
    发表于 09-09 16:10

    HarmonyOSAI编程万能卡片生成(一)

    基于AI大模型理解开发者的卡片需求信息,通过对话式的交互智能生成HarmonyOS万能卡片工程。 使用约束 建议从以下维度描述卡片需求: 当前不支持在生成卡片预览图后继续描述需求进行增量修改。 万能
    发表于 09-08 17:09

    广州邮科三相逆变电源:从直流220V到交流380V,工业用电的“万能转换器”

    在工业领域,电力问题就像一场“无声的战役”——设备突然停机、电压不稳导致故障、临时用电无处可接……这些问题不仅影响效率,还可能造成损失。而广州邮科推出的三相逆变电源,正是为解决这些痛点而生。今天,我们就用“大白话”聊聊这款“电力转换神器”,看看它如何成为工业场景的“万能转换器”。
    的头像 发表于 09-03 16:40 736次阅读
    广州邮科三相逆变电源:从直流220V到交流380V,工业用电的“<b class='flag-5'>万能</b>转换器”

    是否可以仅使用 Bootloader Host 来实现可引导加载项目的相同编程结果?

    你好 我想使用 Bootloader Host 在我的 CY8CKIT-059 上对 CY8C5888LTI-LP097 芯片进行编程,并将项目类型设置为可引导加载。我的目标是实现与通过使用 SWD
    发表于 07-18 07:39

    CodeGenie 工具功能汇总

    一、万能卡片生成(Service Widget) CodeGenie 基于 AI 大模型,支持通过自然语言描述生成 HarmonyOS 万能卡片工程,覆盖 UI 布局、逻辑代码及资源文件。 1.
    的头像 发表于 06-26 08:49 417次阅读

    鸿蒙生态迎来外设兼容革命!国开鸿PDBox外设万能盒在HDC 2025大放异彩

    发展上的战略布局。 在大会的开源鸿蒙互动体验展区及HarmonyOS生态创新外设展区,国开鸿科技带来了一系列由开源鸿蒙赋的创新产品。其中,可实现"全场景适配、外设即插即用"的PDBox外设万能盒尤为引人注目,吸引了众多生态合作
    的头像 发表于 06-23 09:39 502次阅读
    鸿蒙生态迎来外设兼容革命!国开鸿PDBox外设<b class='flag-5'>万能</b>盒在HDC 2025大放异彩

    AI学习机,比的是什么?

    AI不是万能匙,登高仍须脚下力。
    的头像 发表于 06-12 09:47 2815次阅读
    AI学习机,比的是什么?

    突破工业接口壁垒!ARK(方舟微)DMZ42C10S让PLC\\\"万能适配\\\"成为现实!

    突破工业接口壁垒!ARK(方舟微)DMZ42C10S让PLC\"万能适配\"成为现实!
    发表于 03-27 15:20

    万能七彩充开关电源电器的制作

    手机万能七彩充电器的制作过程JC820型手机万能充电器套件制成后,适合充容量为250~3000mA锂离子、镍氢电池;充电时,七彩灯闪烁,指示灯的颜色依次变化,发出绚丽多彩的七彩光芒,饱和后熄灭
    发表于 03-26 14:17

    U-Boot 和 Bootloader,99% 的工程师都分不清?

    嵌入式软件工程师听说过 u-boot 和 bootloader,但很多工程师依然不知道他们到底是啥。   今天就来简单讲讲 u-boot 和 bootloader 的内容以及区别
    的头像 发表于 03-25 20:47 1416次阅读

    自定义RISC V的bootloader-v3

    在生成SoC时,会生成一个预定义bootloader .bin文件,用于指定soc的工程运行的地址,这包括在flash的存储地址 ,加载到外存中的运行地址及在外存中分配的存储空间的大小 。下面我们
    的头像 发表于 03-10 09:05 1522次阅读
    自定义RISC V的<b class='flag-5'>bootloader</b>-v3

    PID控制算法的C语言实现:PID算法原理

    在工业应用中 PID 及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法,如果能够熟练掌握 PID 算法的设计与实现过程,对于一般的研发人员来讲,应该是足够应对一般研发问题了,而难能可贵
    发表于 02-26 15:24

    效率大升!AI赋鸿蒙万能卡片开发

    万能卡片,作为鸿蒙生态应用和元服务的重要展示形式,凭借将关键信息和核心操作前置,实现服务直达、减少跳转层级的体验效果,备受用户和开发者青睐。但传统卡片的设计和编码流程相对繁琐,影响了万能卡片的搭建
    的头像 发表于 01-13 13:44 1375次阅读
    效率大升!AI赋<b class='flag-5'>能</b>鸿蒙<b class='flag-5'>万能</b>卡片开发