
1.引言 客户在使用 BlueNRG-LP/LPS 芯片时,增加 OTA 服务后常常反馈说,编译代码区域超空间了,需要帮忙优化一下。后文主要通过下列步骤进行分析和优化 BlueNRG-LP/LPS 的代码空间: a. 通过分析 BlueNRG-LP/LPS 的 OTA 方式,让客户可以选择合适的方式; b. 通过整体分析 BlueNRG-LP/LPS 的链接文件(*.icf/*.sct/*.ld)了解默认工程的存储分布; c. 通过裁剪协议栈,选择合适的协议栈功能,优化 BlueNRG-LP/LPS 的代码空间; d. 通过使用静态协议栈,进一步优化 BlueNRG-LP/LPS 的代码空间; e. 其他方案; 总的来说通过两个维度来节省空间: 一个是协议栈的裁剪维度:主要是通过修改宏配置实现编译对应应用需要的协议栈。 另一个是 OTA 和静态协议栈的维度:OTA 和静态协议栈的选择流程图如下图所示。 ![]() 2.BlueNRG-LP/BlueNRG-LPS 的 OTA 2.1 OTA 的框架 手机或者电脑做 GATT Client,给带 OTA 服务的设备升级。 ![]() 2.2 官方提供的 OTA 方式 默认提供的 OTA 应用和协议栈编译在一个固件上。 a. 不带备份的(右图中的右半部分) 升级服务程序在 Boot 端(OTA Service manager)。 省空间(存放了 2 份协议栈,1 份应用) 管 理简单(只需管理一份应用) b. 带备份的(右图中的左半部分) 升级服务程序在应用端 更消耗空间(存放了 2 份协议栈,2 份应用) 管理稍微麻烦(需要管理两份应用,Lower 区域应用不能放置 Higher 区域运行) 更安全 a. 不带备份的方式由以下组件构成: BLE_OTA_ServiceManager+ application b. 带备份的由以下组件构成: BLE_OTA_ResetManager +Lower Application (with BLE OTA service) orBLE_OTA_ResetManager + Higher Application (with BLE OTA service) 对应在 SDK 中工程和配置如下图所示: a. BLE_OTA_ServiceManager 配合 BLE_SerialPort 中的 Sever_Use_OTA_serviceManager b. BLE_OTA_ResetManger 配合 BLE_SerialPort 中的 Service_LowerApp_OTA 或者Service_LowerApp_OTA 使用 ![]() 2.3 使用带备份类型 OTA 升级错误变砖头问题 编译器编译的 Higher Application 如果放置在 Lower Application 的位置,程序无法运行。APP 程序可以知晓当前运行的固件是 Lower 还是 Higher APP。可以在编译固件 Higher Application 和 Lower Application 中加入一些标记,用于给升级工具识别,当前需要下载的是Higher Application 还是 Lower Application 或者是否混用。建议每次发布时两个应用程序都编译生成,不要人为来管理固件,否则容易造成混乱,应该让升级 app 自动选择对应的来升级。 ![]() 完整版请查看:附件 ![]() |
STM32 GUI LTDC 最大像素时钟评估方法
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南