引言
客戶在使用 BlueNRG-LP/LPS 芯片時,增加 OTA 服務(wù)后常常反饋說,編譯代碼區(qū)域超空間了,需要幫忙優(yōu)化一下。后文主要通過下列步驟進行分析和優(yōu)化 BlueNRG-LP/LPS 的代碼空間:
- 通過分析 BlueNRG-LP/LPS 的 OTA 方式,讓客戶可以選擇合適的方式;
- 通過整體分析 BlueNRG-LP/LPS 的鏈接文件(*.icf/*.sct/*.ld)了解默認工程的存儲分布;
- 通過裁剪協(xié)議棧,選擇合適的協(xié)議棧功能,優(yōu)化 BlueNRG-LP/LPS 的代碼空間;
- 通過使用靜態(tài)協(xié)議棧,進一步優(yōu)化 BlueNRG-LP/LPS 的代碼空間;
- 其他方案;
總的來說通過兩個維度來節(jié)省空間:一個是協(xié)議棧的裁剪維度:主要是通過修改宏配置實現(xiàn)編譯對應(yīng)應(yīng)用需要的協(xié)議棧。
BlueNRG-LP/BlueNRG-LPS 的 OTA
BlueNRG-LP/LPS 的存儲分析
Linker 中可定義一些宏、用于指定鏈接腳本文件所需的配置。這些宏定義不作用于.c文件或者.h文件,只作用于鏈接文件(.icf 或者.sct 或者 *.ld)。
通過協(xié)議棧的初步裁剪與自定義優(yōu)化空間
SDK 中默認提供了 4 種默認配置的協(xié)議棧加一種自定義的協(xié)議棧配置(BLE_STACK_CUSTOM_CONF)。
協(xié)議棧的進一步裁剪:使用靜態(tài)協(xié)議棧
ST 官方 SDK 中已經(jīng)提供了靜態(tài)協(xié)議棧的 Demo,分為協(xié)議棧工程和應(yīng)用工程兩部分,路徑為:
C:Usersuser nameSTBlueNRG-LP DK 1.x.xProjectsBLE_ExamplesBLE_StaticStack
靜態(tài)協(xié)議棧工程默認提供了 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
優(yōu)化后空間仍不足的其他方法
如果使用靜態(tài)協(xié)議棧和空間仍然不足,可以考慮將一些常用而不需修改的通用模塊編譯進協(xié)議棧的工程。如果空間仍然差距比較遠則考慮用片外 Falsh 或者選用 STM32WB 系列,再或者使用 STM32+協(xié)處理器模式。