引言
客户在使用 BlueNRG-LP/LPS 芯片时,增加 OTA 服务后常常反馈说,编译代码区域超空间了,需要帮忙优化一下。后文主要通过下列步骤进行分析和优化 BlueNRG-LP/LPS 的代码空间:
- 通过分析 BlueNRG-LP/LPS 的 OTA 方式,让客户可以选择合适的方式;
- 通过整体分析 BlueNRG-LP/LPS 的链接文件(*.icf/*.sct/*.ld)了解默认工程的存储分布;
- 通过裁剪协议栈,选择合适的协议栈功能,优化 BlueNRG-LP/LPS 的代码空间;
- 通过使用静态协议栈,进一步优化 BlueNRG-LP/LPS 的代码空间;
- 其他方案;
总的来说通过两个维度来节省空间:一个是协议栈的裁剪维度:主要是通过修改宏配置实现编译对应应用需要的协议栈。
BlueNRG-LP/BlueNRG-LPS 的 OTA
BlueNRG-LP/LPS 的存储分析
Linker 中可定义一些宏、用于指定链接脚本文件所需的配置。这些宏定义不作用于.c文件或者.h文件,只作用于链接文件(.icf 或者.sct 或者 *.ld)。
通过协议栈的初步裁剪与自定义优化空间
SDK 中默认提供了 4 种默认配置的协议栈加一种自定义的协议栈配置(BLE_STACK_CUSTOM_CONF)。
协议栈的进一步裁剪:使用静态协议栈
ST 官方 SDK 中已经提供了静态协议栈的 Demo,分为协议栈工程和应用工程两部分,路径为:
C:Usersuser nameSTBlueNRG-LP DK 1.x.xProjectsBLE_ExamplesBLE_StaticStack
静态协议栈工程默认提供了 4 种配置:
- Release
- Basic
- OTA_BTL_ResetManager
- OTA_BTL_ResetManager_Basic
C:Usersuser nameSTBlueNRG-LP DK 1.x.0ProjectsBLE_ExamplesBLE_SensorDemo_StaticStack
- Release
- LowerApp_OTA
- HigherApp_OTA
优化后空间仍不足的其他方法
如果使用静态协议栈和空间仍然不足,可以考虑将一些常用而不需修改的通用模块编译进协议栈的工程。如果空间仍然差距比较远则考虑用片外 Falsh 或者选用 STM32WB 系列,再或者使用 STM32+协处理器模式。