【固件升级】Bootloader(三)

news2024/9/20 7:47:05

1. bootloader方案

类型作用说明
RT_threadBOOT带操作系统-使用组件-精简
裸机BOOT精简
  • 关于bootloader的软件方案要求
  • 第一点要求必须占用资源小
  • 易于移植扩展
  • 方便灵活修改
  • 带操作系统与裸机之争
  • 上面这点的解决方案是易于移植,不管是裸机或操作系统
  • 把功能性文件放在同一个.c .h 文件中
  • 逻辑函数封装好即可

2. 资料整理

2.1 开源 Bootloader 框架 - RT-FOTA

RT-Thread 官方推出了 STM32 系列单片机的通用 bootloader, 在其网站可以通过网页配置就可以生成 bootloader 的烧录文件,使广大嵌入式工程师不用编写一行代码,就能够轻松完成自己产品的 bootloader 功能。但是由于 RTT 官方的 bootloader 软件 RT-OTA 是商用性质,不公开源码,不仅仅限制了在其他平台的移植,而且也不方便加入产品的特定功能。本人软件水平有限,但是基于对开源精神的崇拜和 RTT 多年的感情,蒙发出利用业余时间编写一款开源的且基于 RTT 系统 bootloader 通用软件,贡献给大家。

【RT-FOTA 主要的功能】
支持 RTT 官方的 RBL 打包软件,使用方式也一致。目前支持包括 CRC32、AES256、quicklz 和 fastlz 功能;
支持命令行模式(FINSH 组件)和出厂固件恢复;
支持 FLASH 分区(FAL 组件);
支持功能扩展(RTT 组件);
其他功能可自行方便扩展;

原始工程编译大小
Program Size: Code=74574 RO-data=8910 RW-data=636 ZI-data=14836

占用flash:74574+8910+636 = 84120 = 82k
占用ram: 636+14836 = 15472 = 15k

可以看出这个资源占用挺大的
超出一般的BOOT容量大小

这个裁剪的话价值不大
不如自己写

可以参考借鉴
所以不选用

2.2 STM32 通用 Bootloader RT_thread

在这里插入图片描述

在这里插入图片描述

功能虽好,但是不支持自由修改逻辑,芯片型号支持少
这一点很不灵活
所以不选用
但是可以学习一下这些功能,
师夷长技以制夷

2.3 rtthread新建工程

自己新建一个工程
然后添加修改
这样灵活性最大
方便维护扩展

软件方案组成
RT_thread+组件+用户逻辑

2.4 Quick bootloader

Quick bootloader 是一个用于快速制作bootloader的组件
在这里插入图片描述

在这里插入图片描述
组件可以裁剪使用
功能设计的挺全面的

获取组件
方式1: 通过 Env配置工具 或 RT-Thread studio 开启软件包,根据需要配置各项参数;
配置路径为 RT-Thread online packages -> system -> qboot
注意:
这个是带操作系统的,必然占用ROM大
所以放弃

2.5 FAT组件

在这里插入图片描述
在这里插入图片描述

2.6 SFUD

在这里插入图片描述
在这里插入图片描述

2.7 EasyFlash

在这里插入图片描述

2.8 理解

在这里插入图片描述
这张图很好理解
三者的关系

看到鸡汤喝点
在这里插入图片描述
人只要成功一次,就能换一顶帽子,

3. 新建工程开始操作

  • 参考链接
  • https://blog.csdn.net/qq_33591039/article/details/121562204

3.1 新建工程

在这里插入图片描述

3.2 构建编译

在这里插入图片描述
可以看到FLASH占用55K , RAM占用5K
需要裁剪

  • BOOT硬件
  • 硬件SPI四个引脚
  • 一个LED引脚

3.3 设置CubeMX

设置flash使用的SPI
设置LED使用的GPIO
设置 NVIC
RT-Thread 操作系统重定义
HardFault_Handler、PendSV_Handler、SysTick_Handler 中断函数,
为了避免重复定义的问题,在生成工程之前,需要在中断配置中,代码生成的选项中,
取消选择三个中断函数(
对应注释选项是 Hard fault interrupt, Pendable request, Time base :System tick timer)

3.4 解决报错

  • 关于SConscript 文件的修改网上有很多资料
  • 语法不深究

报错:
描述 资源 路径 位置 类型
fatal error: stm32l0xx_hal_exti.h: No such file or directory stm32l0xx_hal_conf.h /boot/cubemx/Inc 第 192 行 C/C++ 问题
问题:
CUBEMX是新版的,生成的hal_confg.h里面带了#include stm32f1xx_hal_exti.h
但是RTT里面的是库不是最新的,里面没有这个文件,所以就报错了
解决:
可以屏蔽掉或者找一个文件放进去
#ifdef HAL_EXTI_MODULE_ENABLED
// #include “stm32l0xx_hal_exti.h”
#endif /* HAL_EXTI_MODULE_ENABLED */

3.5 再次编译

在这里插入图片描述
可以看到资源占用挺大,需要裁剪

3.6 rt_thread setting

在这里插入图片描述

关掉不必要的系统设置
编译后大小
RAM: 3.59k
ROM: 13.9K
这个快14K了,资源占用太大了,这种方式放弃

3.7 优化等级

参考链接
https://gitee.com/rtthread/docs-online/blob/master/rt-thread-version/rt-thread-standard/application-note/system/optimization/Optimize-code-size/an0049-optimize-code-size.md

RT-Thread-Studio 使用的是 GCC 编译器,GCC 编译器对代码的编译优化有一系列的配置项,大体分为五个优化等级:-O0、-O1、-O2、-O3 和 -Os。

-O0:关闭所有优化选项,是 GCC 默认的等级,目的是让编译器减少编译时间并使调试产生预期的结果。在 RT-Thread-Studio 中,默认也是配置的该选项,如果编译的代码尺寸较大,我们建议更换优化等级(一般我们会选择 O2 等级)。

-O1:这是最基本的优化等级。编译器会在不花费太多编译时间的同时试图生成更快更小的代码。这些优化是非常基础的,但一般这些任务肯定能顺利完成。

-O2:O1 的进阶。这是推荐的优化等级,除非你有特殊的需求。O2 会比 O1 启用更多的优化选项。当设置了 O2 等级后,编译器会试图增加编译的时间和提升生成代码的性能(我们一般选用此优化等级完成编译任务)。

-O3:这是最高的优化等级,O3 开启了 O2 指定的所有优化,并启用了更多的优化选项。例如构建用于保存变量的伪寄存器网络(使得调试更加困难)、优化循环执行过程等。开启 O3 优化不一定会减少代码尺寸,有可能会为了减少代码执行时间反而增加代码体积。一般我们不使用此优化等级。

-Os:该这个等级用来优化代码尺寸。其中启用了 O2 中不增加目标文件大小的优化选项。这对于磁盘空间极其紧张或者 CPU 缓存较小的机器非常有用。一般使用 O2 等级之后发现生成的目标文件尺寸偏大,可以尝试使用 Os 等级进一步的优化。下表是GCC 优化等级列表。

3.8 SEGGER RTT

  1. 开启
    在这里插入图片描述
  2. 解决编译错误

在这里插入图片描述

在这里插入图片描述

问题是RTT 设备驱动的问题
自己初始化就可以

3.9 屏蔽文件,添加文件

选中文件,右键,资源配置里面
排除构建或添加构建
RTT Excluded Resource RTT排除资源 取消勾选
在这里插入图片描述

取消这个打勾显示隐藏的文件

3.10 RTT输出

日志输出设置
在这里插入图片描述
初始化
在这里插入图片描述
测试输出
在这里插入图片描述
如果输出有异常,
记得拔掉J-LINK重新插上
记得拔掉J-LINK重新插上
记得拔掉J-LINK重新插上

  • 这个是自己初始化的
  • 如果使用官方的注册使用流程也可以

4.裸机bootloader

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2148380.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

英飞凌 PSoC6 RT-Thread 评估板简介

概述 2023年,英飞凌(Infineon)联合 RT-Thread 发布了一款 PSoC™ 62 with CAPSENSE™ evaluation kit 开发板 (以下简称 PSoC 6 RTT 开发板),该开发套件默认内置 RT-Thread 物联网操作系统。PSoC 6 RTT 开…

计算机网络32——Linux-文件io-2文件系统

1、阻塞和非阻塞 想要将文件以非阻塞方式打开,有两种方式 (1)需要将文件关闭,再用非阻塞方式打开 (2)fctnl函数,先获取旧属性,再添加一个新属性 阻塞函数 阻塞函数一直在等待输入…

【图像压缩与重构】基于标准+改进BP神经网络

课题名称:基于标准改进BP神经网络的图像压缩与重构(带GUI) 代码获取方式(付费): 相关资料: 1. 代码注释 2.BP神经网络原理文档资料 3.图像压缩原理文档资料 程序实例截图: 1. 基于标准BP神经网络的图…

gitlab 的CI/CD (二)

前言 上文完成了gitlab-runner的基础配置及将gitlab的制品上传至软件包库(产品库)的脚本编写; 本文实现gitlab的ci/cd对远程服务器的操作; 介绍 要让Gitlab Runner部署到远程机器,远程机器必须信任gitlab runner账…

python开发端口扫描

python开发端口扫描 1. 前言2. 端口扫描方式2.1. TCP扫描(全连接扫描)2.2. SYN扫描(半开放扫描)2.3. UDP扫描2.4. ICMP扫描 3. python编写端口扫描3.1. socket库3.1.1. socket库常用参数3.1.1.1. socket.socket() 参数3.1.1.2. so…

51单片机+proteus+实验(I2C和蜂鸣器)

目录 1.蜂鸣器 1.1基本概念 1.1.1蜂鸣器的简介 1.1.2蜂鸣器的硬件原理 1.1.3蜂鸣器的音色 1.2代码 1.2.1不同音色驱动 1.2.2使用Music Encode1软件来生成音乐 1.3proteus仿真 2.I2C 2.1基本概念 2.1.1 I2C的基本概念 2.1.2 I2C的通讯时序 2.1.3AT24C02数据帧 ​编…

4G模组SIM双卡切换是徒增成本,还是未雨绸缪?

初学开发的小伙伴提出疑问:手机双卡可以理解,物联网设备有必要双卡吗,会不会太浪费? 但在实际应用中,双卡是必需的。 在使用4G模组双卡功能的场景下,切换卡槽更是一个关键环节——关乎设备在不同网络环境…

iOS界面布局:屏幕尺寸与安全区域全面指南

引言 随着iPhone和iPad的更新迭代,iOS设备的屏幕尺寸和设计也在不断变化。无论是iPhone X系列的刘海屏,还是最新的iPhone 14,开发者都需要面对适配不同设备布局的问题。在项目开发中,导航栏、状态栏、TabBar的高度以及安全区域的…

rabbitmq整合skywalking并编写自定义插件增强

rabbitmq整合skywalking 首先先下载准备好skywalking 的服务端和ui控制台,java-agent https://skywalking.apache.org/downloads/ 整合skywalking 我的流程是在生产者和消费者服务中去引入一个mq的sdk,具体SDK的内容可以查看这篇文章 在sdk的pom文件…

合理使用布局

一、ArkUI框架执行流程 在使用ArkUI开发中,我们通过布局组件和基础组件进行界面描述,这些描述会呈现出一个组件树的结构,基础组件在其中为叶子结点,布局组件则是中间节点,可以把这棵树称之为应用组件树。当用户执行交互…

VMware ESXi 8.0U3b macOS Unlocker OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)

VMware ESXi 8.0U3b macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版) 发布 ESXi 8.0U3 集成驱动版,在个人电脑上运行企业级工作负载 请访问原文链接:https://sysin.org/blog/vmware-esxi-8-u3-sysin/,查看最新版…

用多种编程语言绘制爱心图案的艺术

目录 一、Python:用 Matplotlib 绘制静态爱心 代码示例: 效果展示: 二、JavaScript:用 HTML5 Canvas 绘制跃动的爱心 代码示例: 效果展示: 三、Java:用 Swing 绘制静态爱心 代码示例&…

【新手上路】衡石分析平台系统管理手册-安全管理

安全策略​ 安全策略是针对系统中所有用户进行的安全控制,只有系统管理员可以设置。 打开设置->安全策略页面。 登录安全策略​ 启用复杂密码​ 启用之后,用户修改密码时,必须输入符合要求的复杂密码。 密码90天失效​ 密码的有效期…

江协科技STM32学习- P14 示例程序(定时器定时中断和定时器外部时钟)

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

【嵌入式】二进制参数配置生效策略引发数据类型校验失败问题

背景 嵌入式产品发布后,可以通过升级二进制小文件进行产品参数配置。因为预留配置问题,当二进制转化为内部结构体架构化数据时,会判断如果值为255则表示无需配置生效。但是因为笔误,代码不严谨,调试的时候发现数值校验…

用代码生成代码之Roslyn-C#代码分析和生成工具

Roslyn 是什么? Roslyn是微软公司开源的.NET编译器,它提供了丰富的代码分析API,并支持C#和Visual Basic代码的编译。 Roslyn 的主要功能 编译器扩展: 使用Roslyn可以创建自定义的编译器扩展,如语法分析器、重构器、…

50页PPT麦肯锡精益运营转型五步法

读者朋友大家好,最近有会员朋友咨询晓雯,需要《 50页PPT麦肯锡精益运营转型五步法》资料,欢迎大家下载学习。 知识星球已上传的资料链接: 企业架构 企业架构 (EA) 设计咨询项目-企业架构治理(EAM)现状诊断 105页PPTHW企业架构设…

JavaSE--集合总览02:单列集合Collection的体系之一:List

Collection体系的特点 分为 list 和set集合,这篇文章主要讲述List,下篇讲述Set。 简单认识单列集合collection集合的特点 : list集合的特点: 有序 可重复 有索引 set集合的特点:无序 不重复 无索引 其中LinkedHashSet有序 TreeS…

基于springboot的智慧社区微信小程序

文未可获取一份本项目的java源码和数据库参考。 本课题研究目标 本文主要对小区生活服务平台的功能和非功能需求进行了分析,系统除了提供物业保修、小区资讯、投诉留言、常用电话等基础功能外,为了满足用户的多样化需求,还提供邻里圈子和有…

仪表放大器AD620

AD623 是一款低功耗、高精度的仪表放大器,而不是轨到轨运算放大器。它的输入电压范围并不覆盖整个电源电压(轨到轨),但在单电源供电下可以处理接近地电位的输入信号。 AD620 和 AD623 都是仪表放大器,但它们在一些关键…