目前 TuyaOS BLE SDK V3.9.0 For PHY6222 的 Flash 分区图如下:
上图中 0x11000 ~ 0x3C000 共172KB 的区域是应用程序代码存储区。其中 0x11000 ~ 0x20000 共 60KB 的区域是 Map to RAM 区域,这部分区域中的有效代码会在芯片上电后转移到 RAM 区域,以提高运行效率;而 0x20000 ~ 0x3C000 共 112KB 的区域是 XIP 区域,这部分区域中的有效代码在芯片上电后并不会直接转移到 RAM 区域。
通过分析 .hexf 格式的生产固件(如下图所示)可知:Map to RAM 区域仅占用了 0x05C34 = 23604 字节,其余空间并未使用。
所以,我们可以通过修改 .\software\TuyaOS\.log\scatter_load.sct 文件将 Map to RAM 区域的空闲空间利用起来(如果使用vscode编译,请修改 \software\TuyaOS\vendor\phy6222_ble\toolchain\templates\keil\scatter_load.sct 文件):
修改
Code: Select all
……
LR_ROM_XIP 0x11020000 0x020000 {
ER_ROM_XIP 0x11020000 0x020000 { ; load address = execution address
……
为
Code: Select all
……
LR_ROM_XIP 0x11018000 0x024000 {
ER_ROM_XIP 0x11018000 0x024000 { ; load address = execution address
……
修改后增加了 0x8000 = 32768 字节可用 Flash 空间
修改后再次对工程进行全量编译,可以看到 .hexf 格式的生产固件中的空间分布为:
因为并未修改 BootLoader 以及 OTA 备份区域的地址,所以此次优化不会影响 OTA 功能。