diff --git a/AGENTS.md b/AGENTS.md
index 257d3be..90a1a75 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -5,14 +5,14 @@
本仓库是 **mothercup(母乳杯)** 产品的完整代码仓库,包含三大部分:
1. **设备固件** — 基于国民技术(Nations)**N32WB031 BLE SoC**(Cortex-M0,64MHz HSI,**板载硅片实测 256KB Flash**(0x01000000~0x0103FFFF,开发日志 §37),RAM 48KB+16KB):
- - **`mcm-ddc-ble/`** — 唯一活跃的应用固件工程(APP,链接在 APP1 bank `0x01008000`/112KB)。以 SDK rdtss 例程为蓝本,集成 FreeRTOS、UART CLI、BLE 自定义 GATT 服务(CLI 透传 / 设备信息查询 / BLE OTA 双 bank 直写升级)、bootsetting 与 APP_DATA 参数区结构化读写命令。当前版本 **V1.00.27**(`mcm-ddc-ble/inc/app_version.h`)。历史上曾有 `mcm-ddc-04/` 主工程,**已删除**,其功能已全部并入本工程。
- - **`Boot/`** — 自写精简 bootloader(链接在 `0x01000000`/16KB):校验 bootsetting 记录自身完整性(magic + 结构体 CRC32)后按 active bank 的 `start_address` 直接跳转;**不校验镜像 CRC(CRC 校验在 OTA 升级过程中完成)**;记录无效或地址越界回退 APP1。
+ - **`mcm-ddc-ble/`** — 唯一活跃的应用固件工程(APP,链接在 APP1 bank `0x01008000`/112KB)。以 SDK rdtss 例程为蓝本,集成 FreeRTOS、UART CLI、BLE 自定义 GATT 服务(CLI 透传 / 设备信息查询 / BLE OTA 双 bank 直写升级)、bootsetting 与 APP_DATA 参数区结构化读写命令、IWDG 看门狗。当前版本 **V1.00.28**(`mcm-ddc-ble/inc/app_version.h`)。历史上曾有 `mcm-ddc-04/` 主工程,**已删除**,其功能已全部并入本工程。
+ - **`Boot/`** — 自写 bootloader(链接在 `0x01000000`/16KB,当前 ~12.9KB,版本 **V1.01.00** `Boot/src/boot_version.h`):校验 bootsetting 记录自身完整性(magic + 结构体 CRC32)后按 active bank 的 `start_address` 直接跳转;**不校验镜像 CRC(CRC 校验在 OTA 升级过程中完成)**;记录无效或地址越界回退 APP1。**V1.01.00 起带 download 模式**:复位后 USART1(460800)banner + 2s 回车窗口进入,或无有效镜像(bootsetting 无效且 APP1 向量不过 sanity)自动进入;模式内为裸机 UART CLI 子集 + OTA 帧升级(共享编译 APP 的 `app_ota.c`/`app_bootset.c`,`BOOT_FIRMWARE` 宏隔离),目标 bank = 非活动区,`tools/ble_ota_update.py --uart` 零改动可用。详见 `docs/ble_protocol.md` §6.8。
2. **手机 App `SmartAssiter/`** — uni-app **Vue3 + TypeScript** 工程(HBuilderX 项目管理,无 package.json),通过 BLE 连接设备:查看运行参数(温度/电压/转速/bank/堆等)、CLI 终端、参数读写(appget/appset)、OTA 升级页(e0005 锁步,已恢复)。另有登录/注册/用户信息等云端业务页面。
3. **PC 工具 `tools/`** — 整片烧录包制作/烧录脚本 + bleak 蓝牙测试客户端。
关键文档:
-- `docs/开发日志.md` — 固件全程开发日志(45 节,含所有踩坑根因与设计决策,排查问题先查这里)
+- `docs/开发日志.md` — 固件全程开发日志(52 节,含所有踩坑根因与设计决策,排查问题先查这里)
- `docs/ble_protocol.md` — CAIIC BLE 通信协议 V1.1(帧格式/GATT UUID/三类业务流程/维护命令/手机端开发指南)
- `SmartAssiter/docs/修改记录_*.md` — App 侧每次改造的详细记录
@@ -29,7 +29,7 @@ mothercup/
└── tools/out/ # 出包产物(mothercup_ble_prod.{hex,bin} 生产整包 + mothercup_ble_ota.bin 单文件升级包 + 调试用 _ota.bin/_ota_app2.bin 及 json)
```
-SDK 源码(固件库、CMSIS、FreeRTOS V9.0.0、BLE 协议栈/profile/ns_library、启动文件)通过相对路径 `..\..\nations-tec\N32WB03x_SDK_V2.0.0` 被 uvprojx 引用,**不复制进工程**;Bootloader 共享代码(`Boot/src/dfu_layout.h`、`boot_crc32.c`)经 `..\..\Boot\src` 被 APP 工程引用。因此各工程目录不能脱离仓库根单独移动。
+SDK 源码(固件库、CMSIS、FreeRTOS V9.0.0、BLE 协议栈/profile/ns_library、启动文件)通过相对路径 `..\..\nations-tec\N32WB03x_SDK_V2.0.0` 被 uvprojx 引用,**不复制进工程**;Bootloader 共享代码(`Boot/src/dfu_layout.h`、`boot_crc32.c`、`ota_wire.h`)经 `..\..\Boot\src` 被 APP 工程引用,反向地 Boot 工程也共享编译 APP 的 `mcm-ddc-ble/src/app_ota.c`/`app_bootset.c`(全局宏 `BOOT_FIRMWARE` 隔离 RTOS/BLE 依赖,Boot 侧 `cli_core.h` 为 shim,include 顺序 `..\src` 优先)。因此各工程目录不能脱离仓库根单独移动。
## Flash / RAM 布局(铁律)
@@ -95,7 +95,7 @@ mcm-ddc-ble/
"D:\Keil_v5\UV4\UV4.exe" -b caiic_boot.uvprojx -j0 -o build.log # Boot 增量构建
```
-要求保持 **0 Error(s), 0 Warning(s)**。当前基线(V1.00.27):`Code=49408 RO-data=5132 RW-data=2092 ZI-data=30140`。
+要求保持 **0 Error(s), 0 Warning(s)**。当前基线(V1.00.28):`Code=49408 RO-data=5132 RW-data=2092 ZI-data=30140`;Boot 基线(V1.01.00):`Code=10254 RO-data=2574 RW-data=96 ZI-data=6648`(bin 12.9KB,16KB 区内;`merge_image.py` 对 boot bin 超 16KB 硬卡)。
**固件版本号约定(重要)**:每次修改固件代码必须递增 `mcm-ddc-ble/inc/app_version.h` 中的 `APP_FW_VERSION` 与 `APP_FW_VERSION_NUM`(格式 `0x00MMmmpp`,通常补丁位 +1),用于识别板上实际运行的固件;工程名与出包文件名保持不变。
@@ -113,7 +113,7 @@ mcm-ddc-ble/
3. 日常开发调试:Keil F7 编译、F8 下载即可(Boot 不校验镜像 CRC,可直接下载 APP 调试);**Keil 下载选项必须是 "Erase Sectors",整片擦除会杀掉 Boot/bootsetting**(杀掉后需重烧整片包恢复)。板子上烧过其他 0x01000000 起步的程序同样会覆盖 Boot,恢复也是重烧整片包。
4. 日常固件升级设计路径是 BLE OTA(手机 App 或 PC bleak 客户端)。
-验证运行:串口助手接 PB6(TX)/PB7(RX),460800 8N1(V1.00.26 起),复位后应看到 banner 与 `caiic->` 提示符(`help` 查看命令);手机应能搜到广播名 `CAIIC-MCM-20260902`。
+验证运行:串口助手接 PB6(TX)/PB7(RX),460800 8N1(V1.00.26 起),复位后应先看到 boot banner `[boot] CAIIC-BOOT ...`(Boot V1.01.00 起;2s 内按回车进入 download 模式,可 CLI + `ble_ota_update.py --uart` 直接升级,协议见 ble_protocol.md §6.8),随后是 APP banner 与 `caiic->` 提示符(`help` 查看命令);手机应能搜到广播名 `CAIIC-MCM-20260902`。
## BLE 接口与协议
diff --git a/Boot/MDK-ARM/Listings/caiic_boot.map b/Boot/MDK-ARM/Listings/caiic_boot.map
index 81ed7bc..61154d7 100644
--- a/Boot/MDK-ARM/Listings/caiic_boot.map
+++ b/Boot/MDK-ARM/Listings/caiic_boot.map
@@ -32,7 +32,193 @@ Section Cross References
system_n32wb03x.o(i.read_flash_ID) refers to system_n32wb03x.o(.constdata) for CMD_RDID
system_n32wb03x.o(i.system_delay_n_10us) refers to system_n32wb03x.o(.emb_text) for system_delay_cycles
main.o(i.main) refers to boot_crc32.o(i.caiic_crc32) for caiic_crc32
+ main.o(i.main) refers to boot_usart.o(i.boot_usart_init) for boot_usart_init
+ main.o(i.main) refers to main.o(i.puts_boot) for puts_boot
+ main.o(i.main) refers to boot_usart.o(i.boot_millis) for boot_millis
+ main.o(i.main) refers to boot_usart.o(i.boot_usart_read) for boot_usart_read
+ main.o(i.main) refers to main.o(i.image_sane) for image_sane
+ main.o(i.main) refers to boot_cli.o(i.boot_cli_run) for boot_cli_run
main.o(i.main) refers to main.o(i.jump_to_app) for jump_to_app
+ main.o(i.puts_boot) refers to boot_usart.o(i.boot_usart_write) for boot_usart_write
+ boot_usart.o(i.boot_delay_ms) refers to boot_usart.o(i.boot_millis) for boot_millis
+ boot_usart.o(i.boot_millis) refers to boot_usart.o(.data) for s_millis
+ boot_usart.o(i.boot_usart_init) refers to n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphClk) for RCC_EnableAPB2PeriphClk
+ boot_usart.o(i.boot_usart_init) refers to n32wb03x_gpio.o(i.GPIO_InitStruct) for GPIO_InitStruct
+ boot_usart.o(i.boot_usart_init) refers to n32wb03x_gpio.o(i.GPIO_InitPeripheral) for GPIO_InitPeripheral
+ boot_usart.o(i.boot_usart_init) refers to n32wb03x_usart.o(i.USART_Init) for USART_Init
+ boot_usart.o(i.boot_usart_init) refers to n32wb03x_rcc.o(i.RCC_EnableAHBPeriphClk) for RCC_EnableAHBPeriphClk
+ boot_usart.o(i.boot_usart_init) refers to n32wb03x_dma.o(i.DMA_EnableChannel) for DMA_EnableChannel
+ boot_usart.o(i.boot_usart_init) refers to n32wb03x_dma.o(i.DMA_DeInit) for DMA_DeInit
+ boot_usart.o(i.boot_usart_init) refers to n32wb03x_dma.o(i.DMA_RequestRemap) for DMA_RequestRemap
+ boot_usart.o(i.boot_usart_init) refers to n32wb03x_dma.o(i.DMA_Init) for DMA_Init
+ boot_usart.o(i.boot_usart_init) refers to n32wb03x_usart.o(i.USART_EnableDMA) for USART_EnableDMA
+ boot_usart.o(i.boot_usart_init) refers to n32wb03x_usart.o(i.USART_Enable) for USART_Enable
+ boot_usart.o(i.boot_usart_init) refers to boot_usart.o(.bss) for s_rxRing
+ boot_usart.o(i.boot_usart_init) refers to boot_usart.o(.data) for s_rxTail
+ boot_usart.o(i.boot_usart_read) refers to boot_usart.o(i.boot_usart_rx_head) for boot_usart_rx_head
+ boot_usart.o(i.boot_usart_read) refers to uidiv.o(.text) for __aeabi_uidivmod
+ boot_usart.o(i.boot_usart_read) refers to boot_usart.o(.data) for s_rxTail
+ boot_usart.o(i.boot_usart_read) refers to boot_usart.o(.bss) for s_rxRing
+ boot_usart.o(i.boot_usart_rx_head) refers to n32wb03x_dma.o(i.DMA_GetCurrDataCounter) for DMA_GetCurrDataCounter
+ boot_usart.o(i.boot_usart_write) refers to n32wb03x_usart.o(i.USART_SendData) for USART_SendData
+ boot_usart.o(i.boot_usart_write) refers to n32wb03x_usart.o(i.USART_GetFlagStatus) for USART_GetFlagStatus
+ boot_cli.o(i.CmdDevInfo) refers to boot_crc32.o(i.caiic_crc32) for caiic_crc32
+ boot_cli.o(i.CmdDevInfo) refers to boot_cli.o(i.cli_printf) for cli_printf
+ boot_cli.o(i.CmdDevInfo) refers to boot_cli.o(i.cli_write) for cli_write
+ boot_cli.o(i.CmdDevInfo) refers to boot_usart.o(i.boot_millis) for boot_millis
+ boot_cli.o(i.CmdDevInfo) refers to uidiv.o(.text) for __aeabi_uidivmod
+ boot_cli.o(i.CmdHelp) refers to strcmp.o(.text) for strcmp
+ boot_cli.o(i.CmdHelp) refers to boot_cli.o(i.cli_printf) for cli_printf
+ boot_cli.o(i.CmdHelp) refers to boot_cli.o(i.cli_write) for cli_write
+ boot_cli.o(i.CmdHelp) refers to boot_cli.o(.constdata) for s_cmds
+ boot_cli.o(i.CmdOta) refers to boot_cli.o(i.cli_write) for cli_write
+ boot_cli.o(i.CmdOta) refers to boot_cli.o(.conststring) for .conststring
+ boot_cli.o(i.CmdOta) refers to boot_cli.o(.data) for s_otaMode
+ boot_cli.o(i.CmdReset) refers to boot_cli.o(i.cli_write) for cli_write
+ boot_cli.o(i.CmdReset) refers to boot_usart.o(i.boot_delay_ms) for boot_delay_ms
+ boot_cli.o(i.CmdUartInfo) refers to boot_cli.o(i.cli_write) for cli_write
+ boot_cli.o(i.CmdVersion) refers to boot_cli.o(i.cli_printf) for cli_printf
+ boot_cli.o(i.CmdVersion) refers to system_n32wb03x.o(.data) for SystemCoreClock
+ boot_cli.o(i.boot_cli_run) refers to boot_cli.o(i.cli_write) for cli_write
+ boot_cli.o(i.boot_cli_run) refers to app_ota.o(i.app_ota_reset_poll) for app_ota_reset_poll
+ boot_cli.o(i.boot_cli_run) refers to boot_usart.o(i.boot_millis) for boot_millis
+ boot_cli.o(i.boot_cli_run) refers to app_ota.o(i.app_ota_chan_idle) for app_ota_chan_idle
+ boot_cli.o(i.boot_cli_run) refers to boot_usart.o(i.boot_usart_read) for boot_usart_read
+ boot_cli.o(i.boot_cli_run) refers to app_ota.o(i.app_ota_chan_rx_uart) for app_ota_chan_rx_uart
+ boot_cli.o(i.boot_cli_run) refers to boot_cli.o(i.cli_exec_line) for cli_exec_line
+ boot_cli.o(i.boot_cli_run) refers to boot_usart.o(i.boot_usart_write) for boot_usart_write
+ boot_cli.o(i.boot_cli_run) refers to boot_cli.o(.conststring) for .conststring
+ boot_cli.o(i.boot_cli_run) refers to boot_cli.o(.data) for s_otaMode
+ boot_cli.o(i.boot_cli_run) refers to boot_cli.o(.bss) for s_line
+ boot_cli.o(i.cli_exec_line) refers to strcmp.o(.text) for strcmp
+ boot_cli.o(i.cli_exec_line) refers to boot_cli.o(i.cli_printf) for cli_printf
+ boot_cli.o(i.cli_exec_line) refers to boot_cli.o(.constdata) for s_cmds
+ boot_cli.o(i.cli_printf) refers to boot_cli.o(i.str_pad) for str_pad
+ boot_cli.o(i.cli_printf) refers to boot_cli.o(i.u32_to_str) for u32_to_str
+ boot_cli.o(i.cli_printf) refers to boot_cli.o(i.cli_write) for cli_write
+ boot_cli.o(i.cli_printf) refers to boot_cli.o(.bss) for s_txBuf
+ boot_cli.o(i.cli_write) refers to strlen.o(.text) for strlen
+ boot_cli.o(i.cli_write) refers to boot_usart.o(i.boot_usart_write) for boot_usart_write
+ boot_cli.o(i.str_pad) refers to strlen.o(.text) for strlen
+ boot_cli.o(i.u32_to_str) refers to uidiv.o(.text) for __aeabi_uidivmod
+ boot_cli.o(.constdata) refers to boot_cli.o(.conststring) for .conststring
+ boot_cli.o(.constdata) refers to boot_cli.o(i.CmdHelp) for CmdHelp
+ boot_cli.o(.constdata) refers to boot_cli.o(i.CmdVersion) for CmdVersion
+ boot_cli.o(.constdata) refers to boot_cli.o(i.CmdDevInfo) for CmdDevInfo
+ boot_cli.o(.constdata) refers to app_bootset.o(i.AppBootset_CmdBsdump) for AppBootset_CmdBsdump
+ boot_cli.o(.constdata) refers to app_bootset.o(i.AppBootset_CmdBsset) for AppBootset_CmdBsset
+ boot_cli.o(.constdata) refers to app_bootset.o(i.AppBootset_CmdAppswitch) for AppBootset_CmdAppswitch
+ boot_cli.o(.constdata) refers to boot_cli.o(i.CmdOta) for CmdOta
+ boot_cli.o(.constdata) refers to boot_cli.o(i.CmdReset) for CmdReset
+ boot_cli.o(.constdata) refers to boot_cli.o(i.CmdUartInfo) for CmdUartInfo
+ app_ota.o(i.app_ota_abort) refers to app_ota.o(.data) for s_active
+ app_ota.o(i.app_ota_chan_idle) refers to app_ota.o(.data) for s_chanState
+ app_ota.o(i.app_ota_chan_rx) refers to app_ota.o(i.ota_crc16) for ota_crc16
+ app_ota.o(i.app_ota_chan_rx) refers to app_ota.o(i.app_ota_handle_frame) for app_ota_handle_frame
+ app_ota.o(i.app_ota_chan_rx) refers to app_ota.o(.data) for s_rsp_sink
+ app_ota.o(i.app_ota_chan_rx) refers to app_ota.o(.bss) for s_chanBuf
+ app_ota.o(i.app_ota_chan_rx_uart) refers to app_ota.o(i.app_ota_chan_rx) for app_ota_chan_rx
+ app_ota.o(i.app_ota_chan_rx_uart) refers to app_ota.o(i.ota_uart_sink) for ota_uart_sink
+ app_ota.o(i.app_ota_chan_rx_uart) refers to app_ota.o(.data) for s_uart_exit_req
+ app_ota.o(i.app_ota_handle_frame) refers to app_ota.o(i.ota_on_begin) for ota_on_begin
+ app_ota.o(i.app_ota_handle_frame) refers to app_ota.o(i.ota_on_data) for ota_on_data
+ app_ota.o(i.app_ota_handle_frame) refers to app_ota.o(i.ota_on_end) for ota_on_end
+ app_ota.o(i.app_ota_handle_frame) refers to app_ota.o(i.app_ota_abort) for app_ota_abort
+ app_ota.o(i.app_ota_handle_frame) refers to app_ota.o(i.ota_respond) for ota_respond
+ app_ota.o(i.app_ota_handle_frame) refers to app_ota.o(.data) for s_offset
+ app_ota.o(i.app_ota_handle_frame) refers to app_ota.o(i.ota_uart_sink) for ota_uart_sink
+ app_ota.o(i.app_ota_reset_poll) refers to boot_usart.o(i.boot_millis) for boot_millis
+ app_ota.o(i.app_ota_reset_poll) refers to app_ota.o(.data) for s_reset_pending
+ app_ota.o(i.ota_erase_up_to) refers to n32wb03x_qflash.o(i.Qflash_Erase_Sector) for Qflash_Erase_Sector
+ app_ota.o(i.ota_erase_up_to) refers to app_ota.o(.data) for s_target_base
+ app_ota.o(i.ota_on_begin) refers to app_ota.o(i.ota_respond) for ota_respond
+ app_ota.o(i.ota_on_begin) refers to app_ota.o(i.ota_rd32) for ota_rd32
+ app_ota.o(i.ota_on_begin) refers to boot_crc32.o(i.caiic_crc32) for caiic_crc32
+ app_ota.o(i.ota_on_begin) refers to n32wb03x_qflash.o(i.Qflash_Init) for Qflash_Init
+ app_ota.o(i.ota_on_begin) refers to app_ota.o(.data) for s_active
+ app_ota.o(i.ota_on_begin) refers to app_ota.o(i.ota_uart_sink) for ota_uart_sink
+ app_ota.o(i.ota_on_data) refers to app_ota.o(i.ota_respond) for ota_respond
+ app_ota.o(i.ota_on_data) refers to app_ota.o(i.ota_rd32) for ota_rd32
+ app_ota.o(i.ota_on_data) refers to app_ota.o(i.ota_erase_up_to) for ota_erase_up_to
+ app_ota.o(i.ota_on_data) refers to app_ota.o(i.ota_program) for ota_program
+ app_ota.o(i.ota_on_data) refers to memcpya.o(.text) for __aeabi_memcpy
+ app_ota.o(i.ota_on_data) refers to app_ota.o(i.app_ota_abort) for app_ota_abort
+ app_ota.o(i.ota_on_data) refers to app_ota.o(.data) for s_active
+ app_ota.o(i.ota_on_end) refers to app_ota.o(i.ota_respond) for ota_respond
+ app_ota.o(i.ota_on_end) refers to app_ota.o(i.ota_rd32) for ota_rd32
+ app_ota.o(i.ota_on_end) refers to app_ota.o(i.ota_program) for ota_program
+ app_ota.o(i.ota_on_end) refers to app_ota.o(i.app_ota_abort) for app_ota_abort
+ app_ota.o(i.ota_on_end) refers to boot_crc32.o(i.caiic_crc32) for caiic_crc32
+ app_ota.o(i.ota_on_end) refers to app_ota.o(i.ota_update_bootsetting) for ota_update_bootsetting
+ app_ota.o(i.ota_on_end) refers to boot_usart.o(i.boot_millis) for boot_millis
+ app_ota.o(i.ota_on_end) refers to app_ota.o(.data) for s_active
+ app_ota.o(i.ota_program) refers to n32wb03x_qflash.o(i.Qflash_Write) for Qflash_Write
+ app_ota.o(i.ota_program) refers to app_ota.o(.data) for s_target_base
+ app_ota.o(i.ota_respond) refers to memcpya.o(.text) for __aeabi_memcpy
+ app_ota.o(i.ota_respond) refers to app_ota.o(i.ota_crc16) for ota_crc16
+ app_ota.o(i.ota_respond) refers to app_ota.o(.data) for s_rsp_sink
+ app_ota.o(i.ota_uart_sink) refers to boot_usart.o(i.boot_usart_write) for boot_usart_write
+ app_ota.o(i.ota_uart_sink) refers to app_ota.o(.data) for s_rsp_consumed
+ app_ota.o(i.ota_update_bootsetting) refers to memcpya.o(.text) for __aeabi_memcpy4
+ app_ota.o(i.ota_update_bootsetting) refers to boot_crc32.o(i.caiic_crc32) for caiic_crc32
+ app_ota.o(i.ota_update_bootsetting) refers to memseta.o(.text) for __aeabi_memclr4
+ app_ota.o(i.ota_update_bootsetting) refers to n32wb03x_qflash.o(i.Qflash_Erase_Sector) for Qflash_Erase_Sector
+ app_ota.o(i.ota_update_bootsetting) refers to n32wb03x_qflash.o(i.Qflash_Write) for Qflash_Write
+ app_ota.o(i.ota_update_bootsetting) refers to memcmp.o(.text) for memcmp
+ app_ota.o(i.ota_update_bootsetting) refers to app_ota.o(.data) for s_target_base
+ app_bootset.o(i.AppBootset_CmdAppswitch) refers to memcpya.o(.text) for __aeabi_memcpy4
+ app_bootset.o(i.AppBootset_CmdAppswitch) refers to app_bootset.o(i.bootset_valid) for bootset_valid
+ app_bootset.o(i.AppBootset_CmdAppswitch) refers to boot_cli.o(i.cli_write) for cli_write
+ app_bootset.o(i.AppBootset_CmdAppswitch) refers to app_bootset.o(i.parse_u32) for parse_u32
+ app_bootset.o(i.AppBootset_CmdAppswitch) refers to boot_cli.o(i.cli_printf) for cli_printf
+ app_bootset.o(i.AppBootset_CmdAppswitch) refers to boot_crc32.o(i.caiic_crc32) for caiic_crc32
+ app_bootset.o(i.AppBootset_CmdAppswitch) refers to app_bootset.o(i.bootset_commit) for bootset_commit
+ app_bootset.o(i.AppBootset_CmdAppswitch) refers to boot_usart.o(i.boot_delay_ms) for boot_delay_ms
+ app_bootset.o(i.AppBootset_CmdAppswitch) refers to app_bootset.o(.conststring) for .conststring
+ app_bootset.o(i.AppBootset_CmdBsdump) refers to memcpya.o(.text) for __aeabi_memcpy4
+ app_bootset.o(i.AppBootset_CmdBsdump) refers to app_bootset.o(i.bootset_print) for bootset_print
+ app_bootset.o(i.AppBootset_CmdBsset) refers to boot_cli.o(i.cli_write) for cli_write
+ app_bootset.o(i.AppBootset_CmdBsset) refers to app_bootset.o(i.parse_u32) for parse_u32
+ app_bootset.o(i.AppBootset_CmdBsset) refers to memcpya.o(.text) for __aeabi_memcpy4
+ app_bootset.o(i.AppBootset_CmdBsset) refers to app_bootset.o(i.bootset_valid) for bootset_valid
+ app_bootset.o(i.AppBootset_CmdBsset) refers to memseta.o(.text) for __aeabi_memclr4
+ app_bootset.o(i.AppBootset_CmdBsset) refers to strcmp.o(.text) for strcmp
+ app_bootset.o(i.AppBootset_CmdBsset) refers to boot_cli.o(i.cli_printf) for cli_printf
+ app_bootset.o(i.AppBootset_CmdBsset) refers to app_bootset.o(i.bootset_commit) for bootset_commit
+ app_bootset.o(i.AppBootset_CmdBsset) refers to app_bootset.o(i.bootset_print) for bootset_print
+ app_bootset.o(i.AppBootset_CmdBsset) refers to app_bootset.o(.conststring) for .conststring
+ app_bootset.o(i.bootset_commit) refers to app_bootset.o(i.bootset_ensure_qflash) for bootset_ensure_qflash
+ app_bootset.o(i.bootset_commit) refers to app_bootset.o(i.bootset_crc) for bootset_crc
+ app_bootset.o(i.bootset_commit) refers to n32wb03x_qflash.o(i.Qflash_Erase_Sector) for Qflash_Erase_Sector
+ app_bootset.o(i.bootset_commit) refers to n32wb03x_qflash.o(i.Qflash_Write) for Qflash_Write
+ app_bootset.o(i.bootset_commit) refers to memcmp.o(.text) for memcmp
+ app_bootset.o(i.bootset_crc) refers to boot_crc32.o(i.caiic_crc32) for caiic_crc32
+ app_bootset.o(i.bootset_ensure_qflash) refers to n32wb03x_qflash.o(i.Qflash_Init) for Qflash_Init
+ app_bootset.o(i.bootset_ensure_qflash) refers to app_bootset.o(.data) for s_qflash_ready
+ app_bootset.o(i.bootset_print) refers to app_bootset.o(i.bootset_valid) for bootset_valid
+ app_bootset.o(i.bootset_print) refers to boot_cli.o(i.cli_printf) for cli_printf
+ app_bootset.o(i.bootset_valid) refers to app_bootset.o(i.bootset_crc) for bootset_crc
+ app_bootset.o(i.parse_u32) refers to strtoul.o(.text) for strtoul
+ n32wb03x_rcc.o(i.RCC_GetClocksFreqValue) refers to n32wb03x_rcc.o(.constdata) for s_AhbPresTable
+ n32wb03x_rcc.o(i.RCC_WaitHseStable) refers to n32wb03x_rcc.o(i.RCC_GetFlagStatus) for RCC_GetFlagStatus
+ n32wb03x_rcc.o(i.RCC_WaitHsiStable) refers to n32wb03x_rcc.o(i.RCC_GetFlagStatus) for RCC_GetFlagStatus
+ n32wb03x_gpio.o(i.GPIO_AFIOInitDefault) refers to n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphReset) for RCC_EnableAPB2PeriphReset
+ n32wb03x_gpio.o(i.GPIO_ConfigEXTILine) refers to n32wb03x_gpio.o(i.__ARM_common_switch8) for __ARM_common_switch8
+ n32wb03x_gpio.o(i.GPIO_DeInit) refers to n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphReset) for RCC_EnableAPB2PeriphReset
+ n32wb03x_usart.o(i.USART_DeInit) refers to n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphReset) for RCC_EnableAPB2PeriphReset
+ n32wb03x_usart.o(i.USART_DeInit) refers to n32wb03x_rcc.o(i.RCC_EnableAPB1PeriphReset) for RCC_EnableAPB1PeriphReset
+ n32wb03x_usart.o(i.USART_Init) refers to n32wb03x_rcc.o(i.RCC_GetClocksFreqValue) for RCC_GetClocksFreqValue
+ n32wb03x_usart.o(i.USART_Init) refers to uidiv.o(.text) for __aeabi_uidivmod
+ n32wb03x_qflash.o(i.Qflash_Erase_Sector) refers to n32wb03x_qflash.o(i.__set_PRIMASK) for __set_PRIMASK
+ n32wb03x_qflash.o(i.Qflash_Erase_Sector) refers to n32wb03x_qflash.o(.data) for CMD_FLASH_SE
+ n32wb03x_qflash.o(i.Qflash_Init) refers to memcpya.o(.text) for __aeabi_memcpy
+ n32wb03x_qflash.o(i.Qflash_Init) refers to n32wb03x_qflash.o(.bss) for ram_qflash_cmd
+ n32wb03x_qflash.o(i.Qflash_Init) refers to n32wb03x_qflash.o(.data) for CMD_FLASH_SE
+ n32wb03x_qflash.o(i.Qflash_Init) refers to n32wb03x_qflash.o(.constdata) for const_qflash_cmd
+ n32wb03x_qflash.o(i.Qflash_Read) refers to n32wb03x_qflash.o(i.__set_PRIMASK) for __set_PRIMASK
+ n32wb03x_qflash.o(i.Qflash_Read) refers to n32wb03x_qflash.o(.data) for CMD_FLASH_READ
+ n32wb03x_qflash.o(i.Qflash_Write) refers to n32wb03x_qflash.o(i.__set_PRIMASK) for __set_PRIMASK
+ n32wb03x_qflash.o(i.Qflash_Write) refers to n32wb03x_qflash.o(.data) for CMD_FLASH_WRITE
entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry10a.o(.ARM.Collect$$$$0000000D) for __rt_final_cpp
entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry11a.o(.ARM.Collect$$$$0000000F) for __rt_final_exit
entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry7b.o(.ARM.Collect$$$$00000008) for _main_clock
@@ -40,6 +226,9 @@ Section Cross References
entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry9a.o(.ARM.Collect$$$$0000000B) for _main_init
entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry5.o(.ARM.Collect$$$$00000004) for _main_scatterload
entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry2.o(.ARM.Collect$$$$00000001) for _main_stk
+ strtoul.o(.text) refers to errno.o(i.__aeabi_errno_addr) for __aeabi_errno_addr
+ strtoul.o(.text) refers to ctype_o.o(.text) for __rt_ctype_table
+ strtoul.o(.text) refers to _strtoul.o(.text) for _strtoul
entry2.o(.ARM.Collect$$$$00000001) refers to entry2.o(.ARM.Collect$$$$00002712) for __lit__00000000
entry2.o(.ARM.Collect$$$$00002712) refers to startup_n32wb03x.o(STACK) for __initial_sp
entry2.o(__vectab_stack_and_reset_area) refers to startup_n32wb03x.o(STACK) for __initial_sp
@@ -47,6 +236,25 @@ Section Cross References
entry5.o(.ARM.Collect$$$$00000004) refers to init.o(.text) for __scatterload
entry9a.o(.ARM.Collect$$$$0000000B) refers to main.o(i.main) for main
entry9b.o(.ARM.Collect$$$$0000000C) refers to main.o(i.main) for main
+ ctype_o.o(.text) refers to ctype_o.o(.constdata) for .constdata
+ ctype_o.o(.constdata) refers to ctype_o.o(.constdata) for __ctype_table
+ isalnum_o.o(.text) refers to ctype_o.o(.text) for __rt_ctype_table
+ isalpha_o.o(.text) refers to ctype_o.o(.text) for __rt_ctype_table
+ isblank_o.o(.text) refers to ctype_o.o(.constdata) for __ctype_table
+ iscntrl_o.o(.text) refers to ctype_o.o(.text) for __rt_ctype_table
+ isdigit_o.o(.text) refers to ctype_o.o(.text) for __rt_ctype_table
+ isgraph_o.o(.text) refers to ctype_o.o(.text) for __rt_ctype_table
+ islower_o.o(.text) refers to ctype_o.o(.text) for __rt_ctype_table
+ isprint_o.o(.text) refers to ctype_o.o(.text) for __rt_ctype_table
+ ispunct_o.o(.text) refers to ctype_o.o(.text) for __rt_ctype_table
+ isspace_o.o(.text) refers to ctype_o.o(.text) for __rt_ctype_table
+ isupper_o.o(.text) refers to ctype_o.o(.text) for __rt_ctype_table
+ isxdigit_o.o(.text) refers to ctype_o.o(.text) for __rt_ctype_table
+ errno.o(i.__aeabi_errno_addr) refers to errno.o(.data) for .data
+ errno.o(i.__read_errno) refers to errno.o(.data) for .data
+ errno.o(i.__set_errno) refers to errno.o(.data) for .data
+ _strtoul.o(.text) refers to _chval.o(.text) for _chval
+ _strtoul.o(.text) refers to errno.o(i.__aeabi_errno_addr) for __aeabi_errno_addr
init.o(.text) refers to entry5.o(.ARM.Collect$$$$00000004) for __main_after_scatterload
@@ -60,10 +268,100 @@ Removing Unused input sections from the image.
Removing system_n32wb03x.o(i.SystemGetUUID), (60 bytes).
Removing system_n32wb03x.o(i.SystemTrimValueGet), (60 bytes).
Removing system_n32wb03x.o(i.system_delay_n_10us), (16 bytes).
- Removing system_n32wb03x.o(.data), (4 bytes).
Removing main.o(.emb_text), (8 bytes).
+ Removing boot_usart.o(.emb_text), (8 bytes).
+ Removing boot_cli.o(.emb_text), (8 bytes).
+ Removing app_ota.o(.emb_text), (8 bytes).
+ Removing app_ota.o(i.app_ota_current_bank_base), (8 bytes).
+ Removing app_bootset.o(.emb_text), (8 bytes).
+ Removing n32wb03x_rcc.o(.emb_text), (8 bytes).
+ Removing n32wb03x_rcc.o(i.DBG_ConfigPeriph), (32 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_ClrFlag), (28 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_ClrIntPendingBit), (16 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_ConfigAdcClk), (32 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_ConfigHclk), (32 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_ConfigHse), (48 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_ConfigHsi), (40 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_ConfigInt), (36 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_ConfigLSXSEL), (28 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_ConfigLpuartClk), (32 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_ConfigLse), (60 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_ConfigMco), (32 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_ConfigPclk1), (36 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_ConfigPclk2), (32 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_ConfigSysclk), (28 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_ConfigTim1Clk), (28 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_DeInit), (92 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_EnableAHBPeriphReset), (32 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_EnableAPB1PeriphClk), (32 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_EnableAPB1PeriphReset), (32 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphReset), (32 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_EnableHsi), (36 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_EnableLpuartClk), (40 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_EnableLsi), (36 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_EnableRTCReset), (40 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_EnableRtcClk), (40 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_Enable_ADC_CLK_SRC_AUDIOPLL), (40 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_GetFlagStatus), (64 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_GetIntStatus), (28 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_GetLpuartClkSrc), (20 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_GetRTCClkSrc), (16 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_GetSysclkSrc), (16 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_WaitHseStable), (60 bytes).
+ Removing n32wb03x_rcc.o(i.RCC_WaitHsiStable), (60 bytes).
+ Removing n32wb03x_gpio.o(.emb_text), (8 bytes).
+ Removing n32wb03x_gpio.o(i.AFIO_ConfigSPINSSMode), (36 bytes).
+ Removing n32wb03x_gpio.o(i.GPIO_AFIOInitDefault), (20 bytes).
+ Removing n32wb03x_gpio.o(i.GPIO_ConfigEXTILine), (528 bytes).
+ Removing n32wb03x_gpio.o(i.GPIO_ConfigPinLock), (22 bytes).
+ Removing n32wb03x_gpio.o(i.GPIO_ConfigPinRemap), (100 bytes).
+ Removing n32wb03x_gpio.o(i.GPIO_DeInit), (68 bytes).
+ Removing n32wb03x_gpio.o(i.GPIO_DeInitPin), (126 bytes).
+ Removing n32wb03x_gpio.o(i.GPIO_ReadInputData), (8 bytes).
+ Removing n32wb03x_gpio.o(i.GPIO_ReadInputDataBit), (20 bytes).
+ Removing n32wb03x_gpio.o(i.GPIO_ReadOutputData), (8 bytes).
+ Removing n32wb03x_gpio.o(i.GPIO_ReadOutputDataBit), (20 bytes).
+ Removing n32wb03x_gpio.o(i.GPIO_ResetBits), (4 bytes).
+ Removing n32wb03x_gpio.o(i.GPIO_SetBits), (4 bytes).
+ Removing n32wb03x_gpio.o(i.GPIO_TogglePin), (8 bytes).
+ Removing n32wb03x_gpio.o(i.GPIO_Write), (4 bytes).
+ Removing n32wb03x_gpio.o(i.GPIO_WriteBit), (12 bytes).
+ Removing n32wb03x_usart.o(.emb_text), (8 bytes).
+ Removing n32wb03x_usart.o(i.USART_ClockInit), (36 bytes).
+ Removing n32wb03x_usart.o(i.USART_ClockStructInit), (12 bytes).
+ Removing n32wb03x_usart.o(i.USART_ClrFlag), (22 bytes).
+ Removing n32wb03x_usart.o(i.USART_ClrIntPendingBit), (32 bytes).
+ Removing n32wb03x_usart.o(i.USART_ConfigInt), (84 bytes).
+ Removing n32wb03x_usart.o(i.USART_ConfigIrDAMode), (20 bytes).
+ Removing n32wb03x_usart.o(i.USART_ConfigLINBreakDetectLength), (20 bytes).
+ Removing n32wb03x_usart.o(i.USART_ConfigWakeUpMode), (20 bytes).
+ Removing n32wb03x_usart.o(i.USART_DeInit), (56 bytes).
+ Removing n32wb03x_usart.o(i.USART_EnableHalfDuplex), (28 bytes).
+ Removing n32wb03x_usart.o(i.USART_EnableIrDA), (28 bytes).
+ Removing n32wb03x_usart.o(i.USART_EnableLIN), (32 bytes).
+ Removing n32wb03x_usart.o(i.USART_EnableRcvWakeUp), (28 bytes).
+ Removing n32wb03x_usart.o(i.USART_EnableSmartCard), (28 bytes).
+ Removing n32wb03x_usart.o(i.USART_GetIntStatus), (92 bytes).
+ Removing n32wb03x_usart.o(i.USART_ReceiveData), (10 bytes).
+ Removing n32wb03x_usart.o(i.USART_SendBreak), (10 bytes).
+ Removing n32wb03x_usart.o(i.USART_SetAddr), (20 bytes).
+ Removing n32wb03x_usart.o(i.USART_SetGuardTime), (16 bytes).
+ Removing n32wb03x_usart.o(i.USART_SetPrescaler), (18 bytes).
+ Removing n32wb03x_usart.o(i.USART_SetSmartCardNACK), (28 bytes).
+ Removing n32wb03x_usart.o(i.USART_StructInit), (24 bytes).
+ Removing n32wb03x_dma.o(.emb_text), (8 bytes).
+ Removing n32wb03x_dma.o(i.DMA_ClearFlag), (4 bytes).
+ Removing n32wb03x_dma.o(i.DMA_ClrIntPendingBit), (4 bytes).
+ Removing n32wb03x_dma.o(i.DMA_ConfigInt), (20 bytes).
+ Removing n32wb03x_dma.o(i.DMA_GetFlagStatus), (26 bytes).
+ Removing n32wb03x_dma.o(i.DMA_GetIntStatus), (26 bytes).
+ Removing n32wb03x_dma.o(i.DMA_SetCurrDataCounter), (4 bytes).
+ Removing n32wb03x_dma.o(i.DMA_StructInit), (26 bytes).
+ Removing n32wb03x_qflash.o(.emb_text), (8 bytes).
+ Removing n32wb03x_qflash.o(i.Qflash_Read), (68 bytes).
+ Removing n32wb03x_gpio.o(i.__ARM_common_switch8), (28 bytes).
-8 unused section(s) (total 736 bytes) removed from the image.
+98 unused section(s) (total 3926 bytes) removed from the image.
==============================================================================
@@ -73,28 +371,66 @@ Image Symbol Table
Symbol Name Value Ov Type Size Object(Section)
+ ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isspace_o.o ABSOLUTE
+ ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isgraph_o.o ABSOLUTE
+ ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 ctype_o.o ABSOLUTE
+ ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isalnum_o.o ABSOLUTE
+ ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isalpha_o.o ABSOLUTE
+ ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isblank_o.o ABSOLUTE
+ ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 iscntrl_o.o ABSOLUTE
+ ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isdigit_o.o ABSOLUTE
+ ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isupper_o.o ABSOLUTE
+ ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 islower_o.o ABSOLUTE
+ ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isprint_o.o ABSOLUTE
+ ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 ispunct_o.o ABSOLUTE
+ ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isxdigit_o.o ABSOLUTE
../clib/microlib/division.c 0x00000000 Number 0 uidiv.o ABSOLUTE
- ../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE
- ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE
- ../clib/microlib/init/entry.s 0x00000000 Number 0 entry.o ABSOLUTE
- ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE
- ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.o ABSOLUTE
- ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE
- ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.o ABSOLUTE
- ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8b.o ABSOLUTE
- ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8a.o ABSOLUTE
- ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE
- ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE
- ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE
+ ../clib/microlib/errno.c 0x00000000 Number 0 errno.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry5.o ABSOLUTE
+ ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE
+ ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE
+ ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE
+ ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8a.o ABSOLUTE
+ ../clib/microlib/init/entry.s 0x00000000 Number 0 entry.o ABSOLUTE
+ ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE
+ ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE
+ ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.o ABSOLUTE
+ ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE
+ ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8b.o ABSOLUTE
+ ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.o ABSOLUTE
+ ../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE
+ ../clib/microlib/string/memcmp.c 0x00000000 Number 0 memcmp.o ABSOLUTE
../clib/microlib/string/memcpy.c 0x00000000 Number 0 memcpyb.o ABSOLUTE
../clib/microlib/string/memcpy.c 0x00000000 Number 0 memcpya.o ABSOLUTE
../clib/microlib/string/memset.c 0x00000000 Number 0 memseta.o ABSOLUTE
+ ../clib/microlib/string/strcmp.c 0x00000000 Number 0 strcmp.o ABSOLUTE
+ ../clib/microlib/string/strlen.c 0x00000000 Number 0 strlen.o ABSOLUTE
+ ../clib/scanf.c 0x00000000 Number 0 _strtoul.o ABSOLUTE
+ ../clib/scanf.c 0x00000000 Number 0 _chval.o ABSOLUTE
+ ../clib/scanf.c 0x00000000 Number 0 strtoul.o ABSOLUTE
+ ..\..\mcm-ddc-ble\src\app_bootset.c 0x00000000 Number 0 app_bootset.o ABSOLUTE
+ ..\..\mcm-ddc-ble\src\app_ota.c 0x00000000 Number 0 app_ota.o ABSOLUTE
..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\startup\startup_n32wb03x.s 0x00000000 Number 0 startup_n32wb03x.o ABSOLUTE
..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\system_n32wb03x.c 0x00000000 Number 0 system_n32wb03x.o ABSOLUTE
+ ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\src\n32wb03x_dma.c 0x00000000 Number 0 n32wb03x_dma.o ABSOLUTE
+ ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\src\n32wb03x_gpio.c 0x00000000 Number 0 n32wb03x_gpio.o ABSOLUTE
+ ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\src\n32wb03x_qflash.c 0x00000000 Number 0 n32wb03x_qflash.o ABSOLUTE
+ ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\src\n32wb03x_rcc.c 0x00000000 Number 0 n32wb03x_rcc.o ABSOLUTE
+ ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\src\n32wb03x_usart.c 0x00000000 Number 0 n32wb03x_usart.o ABSOLUTE
+ ..\\..\\mcm-ddc-ble\\src\\app_bootset.c 0x00000000 Number 0 app_bootset.o ABSOLUTE
+ ..\\..\\mcm-ddc-ble\\src\\app_ota.c 0x00000000 Number 0 app_ota.o ABSOLUTE
..\\..\\nations-tec\\N32WB03x_SDK_V2.0.0\\firmware\\CMSIS\\device\\system_n32wb03x.c 0x00000000 Number 0 system_n32wb03x.o ABSOLUTE
+ ..\\..\\nations-tec\\N32WB03x_SDK_V2.0.0\\firmware\\n32wb03x_std_periph_driver\\src\\n32wb03x_dma.c 0x00000000 Number 0 n32wb03x_dma.o ABSOLUTE
+ ..\\..\\nations-tec\\N32WB03x_SDK_V2.0.0\\firmware\\n32wb03x_std_periph_driver\\src\\n32wb03x_gpio.c 0x00000000 Number 0 n32wb03x_gpio.o ABSOLUTE
+ ..\\..\\nations-tec\\N32WB03x_SDK_V2.0.0\\firmware\\n32wb03x_std_periph_driver\\src\\n32wb03x_qflash.c 0x00000000 Number 0 n32wb03x_qflash.o ABSOLUTE
+ ..\\..\\nations-tec\\N32WB03x_SDK_V2.0.0\\firmware\\n32wb03x_std_periph_driver\\src\\n32wb03x_rcc.c 0x00000000 Number 0 n32wb03x_rcc.o ABSOLUTE
+ ..\\..\\nations-tec\\N32WB03x_SDK_V2.0.0\\firmware\\n32wb03x_std_periph_driver\\src\\n32wb03x_usart.c 0x00000000 Number 0 n32wb03x_usart.o ABSOLUTE
+ ..\\src\\boot_cli.c 0x00000000 Number 0 boot_cli.o ABSOLUTE
+ ..\\src\\boot_usart.c 0x00000000 Number 0 boot_usart.o ABSOLUTE
..\\src\\main.c 0x00000000 Number 0 main.o ABSOLUTE
+ ..\src\boot_cli.c 0x00000000 Number 0 boot_cli.o ABSOLUTE
..\src\boot_crc32.c 0x00000000 Number 0 boot_crc32.o ABSOLUTE
+ ..\src\boot_usart.c 0x00000000 Number 0 boot_usart.o ABSOLUTE
..\src\main.c 0x00000000 Number 0 main.o ABSOLUTE
dc.s 0x00000000 Number 0 dc.o ABSOLUTE
handlers.s 0x00000000 Number 0 handlers.o ABSOLUTE
@@ -115,26 +451,180 @@ Image Symbol Table
.text 0x01000100 Section 0 uidiv.o(.text)
.text 0x0100012c Section 0 memcpya.o(.text)
.text 0x01000150 Section 0 memseta.o(.text)
- .text 0x01000174 Section 36 init.o(.text)
- i.OTPTrim_Read 0x01000198 Section 0 system_n32wb03x.o(i.OTPTrim_Read)
- i.RCC_HsiCalib 0x01000264 Section 0 system_n32wb03x.o(i.RCC_HsiCalib)
- RCC_HsiCalib 0x01000265 Thumb Code 296 system_n32wb03x.o(i.RCC_HsiCalib)
- i.SystemInit 0x01000394 Section 0 system_n32wb03x.o(i.SystemInit)
- i.SystemTrimValueRead 0x010004b0 Section 0 system_n32wb03x.o(i.SystemTrimValueRead)
- i.__scatterload_copy 0x010004c4 Section 14 handlers.o(i.__scatterload_copy)
- i.__scatterload_null 0x010004d2 Section 2 handlers.o(i.__scatterload_null)
- i.__scatterload_zeroinit 0x010004d4 Section 14 handlers.o(i.__scatterload_zeroinit)
- i.__set_PRIMASK 0x010004e2 Section 0 system_n32wb03x.o(i.__set_PRIMASK)
- __set_PRIMASK 0x010004e3 Thumb Code 6 system_n32wb03x.o(i.__set_PRIMASK)
- i.caiic_crc32 0x010004e8 Section 0 boot_crc32.o(i.caiic_crc32)
- i.jump_to_app 0x0100052c Section 0 main.o(i.jump_to_app)
- jump_to_app 0x0100052d Thumb Code 30 main.o(i.jump_to_app)
- i.main 0x01000550 Section 0 main.o(i.main)
- i.read_flash_ID 0x010005a4 Section 0 system_n32wb03x.o(i.read_flash_ID)
- read_flash_ID 0x010005a5 Thumb Code 62 system_n32wb03x.o(i.read_flash_ID)
- .constdata 0x010005e8 Section 472 system_n32wb03x.o(.constdata)
- .bss 0x20004000 Section 52 system_n32wb03x.o(.bss)
- STACK 0x20004038 Section 2048 startup_n32wb03x.o(STACK)
+ .text 0x01000174 Section 0 strlen.o(.text)
+ .text 0x01000182 Section 0 strcmp.o(.text)
+ .text 0x0100019e Section 0 memcmp.o(.text)
+ .text 0x010001b8 Section 0 strtoul.o(.text)
+ .text 0x01000230 Section 0 ctype_o.o(.text)
+ .text 0x01000238 Section 0 _strtoul.o(.text)
+ .text 0x010002e0 Section 36 init.o(.text)
+ .text 0x01000304 Section 0 _chval.o(.text)
+ i.AppBootset_CmdAppswitch 0x01000324 Section 0 app_bootset.o(i.AppBootset_CmdAppswitch)
+ i.AppBootset_CmdBsdump 0x010005fc Section 0 app_bootset.o(i.AppBootset_CmdBsdump)
+ i.AppBootset_CmdBsset 0x0100061c Section 0 app_bootset.o(i.AppBootset_CmdBsset)
+ i.CmdDevInfo 0x01000914 Section 0 boot_cli.o(i.CmdDevInfo)
+ CmdDevInfo 0x01000915 Thumb Code 90 boot_cli.o(i.CmdDevInfo)
+ i.CmdHelp 0x010009f4 Section 0 boot_cli.o(i.CmdHelp)
+ CmdHelp 0x010009f5 Thumb Code 114 boot_cli.o(i.CmdHelp)
+ i.CmdOta 0x01000aa8 Section 0 boot_cli.o(i.CmdOta)
+ CmdOta 0x01000aa9 Thumb Code 20 boot_cli.o(i.CmdOta)
+ i.CmdReset 0x01000ac4 Section 0 boot_cli.o(i.CmdReset)
+ CmdReset 0x01000ac5 Thumb Code 34 boot_cli.o(i.CmdReset)
+ i.CmdUartInfo 0x01000b00 Section 0 boot_cli.o(i.CmdUartInfo)
+ CmdUartInfo 0x01000b01 Thumb Code 26 boot_cli.o(i.CmdUartInfo)
+ i.CmdVersion 0x01000bb0 Section 0 boot_cli.o(i.CmdVersion)
+ CmdVersion 0x01000bb1 Thumb Code 26 boot_cli.o(i.CmdVersion)
+ i.DMA_DeInit 0x01000c24 Section 0 n32wb03x_dma.o(i.DMA_DeInit)
+ i.DMA_EnableChannel 0x01000cc4 Section 0 n32wb03x_dma.o(i.DMA_EnableChannel)
+ i.DMA_GetCurrDataCounter 0x01000ce0 Section 0 n32wb03x_dma.o(i.DMA_GetCurrDataCounter)
+ i.DMA_Init 0x01000ce8 Section 0 n32wb03x_dma.o(i.DMA_Init)
+ i.DMA_RequestRemap 0x01000d28 Section 0 n32wb03x_dma.o(i.DMA_RequestRemap)
+ i.GPIO_InitPeripheral 0x01000d38 Section 0 n32wb03x_gpio.o(i.GPIO_InitPeripheral)
+ i.GPIO_InitStruct 0x01000e40 Section 0 n32wb03x_gpio.o(i.GPIO_InitStruct)
+ i.OTPTrim_Read 0x01000e5c Section 0 system_n32wb03x.o(i.OTPTrim_Read)
+ i.Qflash_Erase_Sector 0x01000f28 Section 0 n32wb03x_qflash.o(i.Qflash_Erase_Sector)
+ i.Qflash_Init 0x01000f64 Section 0 n32wb03x_qflash.o(i.Qflash_Init)
+ i.Qflash_Write 0x01000f9c Section 0 n32wb03x_qflash.o(i.Qflash_Write)
+ i.RCC_EnableAHBPeriphClk 0x01000fe0 Section 0 n32wb03x_rcc.o(i.RCC_EnableAHBPeriphClk)
+ i.RCC_EnableAPB2PeriphClk 0x01001000 Section 0 n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphClk)
+ i.RCC_GetClocksFreqValue 0x01001020 Section 0 n32wb03x_rcc.o(i.RCC_GetClocksFreqValue)
+ i.RCC_HsiCalib 0x010010c4 Section 0 system_n32wb03x.o(i.RCC_HsiCalib)
+ RCC_HsiCalib 0x010010c5 Thumb Code 296 system_n32wb03x.o(i.RCC_HsiCalib)
+ i.SystemInit 0x010011f4 Section 0 system_n32wb03x.o(i.SystemInit)
+ i.SystemTrimValueRead 0x01001310 Section 0 system_n32wb03x.o(i.SystemTrimValueRead)
+ i.USART_Enable 0x01001324 Section 0 n32wb03x_usart.o(i.USART_Enable)
+ i.USART_EnableDMA 0x01001344 Section 0 n32wb03x_usart.o(i.USART_EnableDMA)
+ i.USART_GetFlagStatus 0x01001358 Section 0 n32wb03x_usart.o(i.USART_GetFlagStatus)
+ i.USART_Init 0x01001378 Section 0 n32wb03x_usart.o(i.USART_Init)
+ i.USART_SendData 0x0100142c Section 0 n32wb03x_usart.o(i.USART_SendData)
+ i.__aeabi_errno_addr 0x01001434 Section 0 errno.o(i.__aeabi_errno_addr)
+ i.__scatterload_copy 0x0100143c Section 14 handlers.o(i.__scatterload_copy)
+ i.__scatterload_null 0x0100144a Section 2 handlers.o(i.__scatterload_null)
+ i.__scatterload_zeroinit 0x0100144c Section 14 handlers.o(i.__scatterload_zeroinit)
+ i.__set_PRIMASK 0x0100145a Section 0 system_n32wb03x.o(i.__set_PRIMASK)
+ __set_PRIMASK 0x0100145b Thumb Code 6 system_n32wb03x.o(i.__set_PRIMASK)
+ i.__set_PRIMASK 0x01001460 Section 0 n32wb03x_qflash.o(i.__set_PRIMASK)
+ __set_PRIMASK 0x01001461 Thumb Code 6 n32wb03x_qflash.o(i.__set_PRIMASK)
+ i.app_ota_abort 0x01001468 Section 0 app_ota.o(i.app_ota_abort)
+ i.app_ota_chan_idle 0x010014a4 Section 0 app_ota.o(i.app_ota_chan_idle)
+ i.app_ota_chan_rx 0x010014b8 Section 0 app_ota.o(i.app_ota_chan_rx)
+ i.app_ota_chan_rx_uart 0x010015f8 Section 0 app_ota.o(i.app_ota_chan_rx_uart)
+ i.app_ota_handle_frame 0x0100161c Section 0 app_ota.o(i.app_ota_handle_frame)
+ i.app_ota_reset_poll 0x01001698 Section 0 app_ota.o(i.app_ota_reset_poll)
+ i.boot_cli_run 0x010016f4 Section 0 boot_cli.o(i.boot_cli_run)
+ i.boot_delay_ms 0x0100183c Section 0 boot_usart.o(i.boot_delay_ms)
+ i.boot_millis 0x01001854 Section 0 boot_usart.o(i.boot_millis)
+ i.boot_usart_init 0x0100187c Section 0 boot_usart.o(i.boot_usart_init)
+ i.boot_usart_read 0x0100198c Section 0 boot_usart.o(i.boot_usart_read)
+ i.boot_usart_rx_head 0x010019cc Section 0 boot_usart.o(i.boot_usart_rx_head)
+ boot_usart_rx_head 0x010019cd Thumb Code 18 boot_usart.o(i.boot_usart_rx_head)
+ i.boot_usart_write 0x010019e4 Section 0 boot_usart.o(i.boot_usart_write)
+ i.bootset_commit 0x01001a14 Section 0 app_bootset.o(i.bootset_commit)
+ bootset_commit 0x01001a15 Thumb Code 74 app_bootset.o(i.bootset_commit)
+ i.bootset_crc 0x01001a68 Section 0 app_bootset.o(i.bootset_crc)
+ bootset_crc 0x01001a69 Thumb Code 14 app_bootset.o(i.bootset_crc)
+ i.bootset_ensure_qflash 0x01001a78 Section 0 app_bootset.o(i.bootset_ensure_qflash)
+ bootset_ensure_qflash 0x01001a79 Thumb Code 22 app_bootset.o(i.bootset_ensure_qflash)
+ i.bootset_print 0x01001a94 Section 0 app_bootset.o(i.bootset_print)
+ bootset_print 0x01001a95 Thumb Code 98 app_bootset.o(i.bootset_print)
+ i.bootset_valid 0x01001c00 Section 0 app_bootset.o(i.bootset_valid)
+ bootset_valid 0x01001c01 Thumb Code 32 app_bootset.o(i.bootset_valid)
+ i.caiic_crc32 0x01001c24 Section 0 boot_crc32.o(i.caiic_crc32)
+ i.cli_exec_line 0x01001c68 Section 0 boot_cli.o(i.cli_exec_line)
+ cli_exec_line 0x01001c69 Thumb Code 162 boot_cli.o(i.cli_exec_line)
+ i.cli_printf 0x01001d34 Section 0 boot_cli.o(i.cli_printf)
+ i.cli_write 0x01001ed0 Section 0 boot_cli.o(i.cli_write)
+ i.image_sane 0x01001ee8 Section 0 main.o(i.image_sane)
+ image_sane 0x01001ee9 Thumb Code 44 main.o(i.image_sane)
+ i.jump_to_app 0x01001f1c Section 0 main.o(i.jump_to_app)
+ jump_to_app 0x01001f1d Thumb Code 30 main.o(i.jump_to_app)
+ i.main 0x01001f40 Section 0 main.o(i.main)
+ i.ota_crc16 0x010020c0 Section 0 app_ota.o(i.ota_crc16)
+ ota_crc16 0x010020c1 Thumb Code 68 app_ota.o(i.ota_crc16)
+ i.ota_erase_up_to 0x0100210c Section 0 app_ota.o(i.ota_erase_up_to)
+ ota_erase_up_to 0x0100210d Thumb Code 54 app_ota.o(i.ota_erase_up_to)
+ i.ota_on_begin 0x0100214c Section 0 app_ota.o(i.ota_on_begin)
+ ota_on_begin 0x0100214d Thumb Code 294 app_ota.o(i.ota_on_begin)
+ i.ota_on_data 0x010022bc Section 0 app_ota.o(i.ota_on_data)
+ ota_on_data 0x010022bd Thumb Code 396 app_ota.o(i.ota_on_data)
+ i.ota_on_end 0x01002464 Section 0 app_ota.o(i.ota_on_end)
+ ota_on_end 0x01002465 Thumb Code 326 app_ota.o(i.ota_on_end)
+ i.ota_program 0x010025d4 Section 0 app_ota.o(i.ota_program)
+ ota_program 0x010025d5 Thumb Code 46 app_ota.o(i.ota_program)
+ i.ota_rd32 0x0100260c Section 0 app_ota.o(i.ota_rd32)
+ ota_rd32 0x0100260d Thumb Code 24 app_ota.o(i.ota_rd32)
+ i.ota_respond 0x01002624 Section 0 app_ota.o(i.ota_respond)
+ ota_respond 0x01002625 Thumb Code 118 app_ota.o(i.ota_respond)
+ i.ota_uart_sink 0x010026a0 Section 0 app_ota.o(i.ota_uart_sink)
+ ota_uart_sink 0x010026a1 Thumb Code 22 app_ota.o(i.ota_uart_sink)
+ i.ota_update_bootsetting 0x010026bc Section 0 app_ota.o(i.ota_update_bootsetting)
+ ota_update_bootsetting 0x010026bd Thumb Code 174 app_ota.o(i.ota_update_bootsetting)
+ i.parse_u32 0x01002788 Section 0 app_bootset.o(i.parse_u32)
+ parse_u32 0x01002789 Thumb Code 46 app_bootset.o(i.parse_u32)
+ i.puts_boot 0x010027b6 Section 0 main.o(i.puts_boot)
+ puts_boot 0x010027b7 Thumb Code 24 main.o(i.puts_boot)
+ i.read_flash_ID 0x010027d0 Section 0 system_n32wb03x.o(i.read_flash_ID)
+ read_flash_ID 0x010027d1 Thumb Code 62 system_n32wb03x.o(i.read_flash_ID)
+ i.str_pad 0x01002814 Section 0 boot_cli.o(i.str_pad)
+ str_pad 0x01002815 Thumb Code 78 boot_cli.o(i.str_pad)
+ i.u32_to_str 0x01002862 Section 0 boot_cli.o(i.u32_to_str)
+ u32_to_str 0x01002863 Thumb Code 108 boot_cli.o(i.u32_to_str)
+ .constdata 0x010028ce Section 472 system_n32wb03x.o(.constdata)
+ .constdata 0x01002aa8 Section 108 boot_cli.o(.constdata)
+ s_cmds 0x01002aa8 Data 108 boot_cli.o(.constdata)
+ .constdata 0x01002b14 Section 12 n32wb03x_rcc.o(.constdata)
+ s_ApbPresTable 0x01002b14 Data 8 n32wb03x_rcc.o(.constdata)
+ s_AhbPresTable 0x01002b1c Data 4 n32wb03x_rcc.o(.constdata)
+ .constdata 0x01002b20 Section 804 n32wb03x_qflash.o(.constdata)
+ .constdata 0x01002e44 Section 129 ctype_o.o(.constdata)
+ .constdata 0x01002ec8 Section 4 ctype_o.o(.constdata)
+ table 0x01002ec8 Data 4 ctype_o.o(.constdata)
+ .conststring 0x01002ecc Section 666 boot_cli.o(.conststring)
+ .conststring 0x01003168 Section 145 app_bootset.o(.conststring)
+ .data 0x20004000 Section 4 system_n32wb03x.o(.data)
+ .data 0x20004004 Section 8 boot_usart.o(.data)
+ s_rxTail 0x20004004 Data 2 boot_usart.o(.data)
+ s_millis 0x20004008 Data 4 boot_usart.o(.data)
+ .data 0x2000400c Section 1 boot_cli.o(.data)
+ s_otaMode 0x2000400c Data 1 boot_cli.o(.data)
+ .data 0x20004010 Section 61 app_ota.o(.data)
+ s_active 0x20004010 Data 1 app_ota.o(.data)
+ s_target_base 0x20004014 Data 4 app_ota.o(.data)
+ s_total_size 0x20004018 Data 4 app_ota.o(.data)
+ s_image_crc32 0x2000401c Data 4 app_ota.o(.data)
+ s_version 0x20004020 Data 4 app_ota.o(.data)
+ s_offset 0x20004024 Data 4 app_ota.o(.data)
+ s_prog 0x20004028 Data 4 app_ota.o(.data)
+ s_erased 0x2000402c Data 4 app_ota.o(.data)
+ s_word_buf 0x20004030 Data 4 app_ota.o(.data)
+ s_word_fill 0x20004034 Data 4 app_ota.o(.data)
+ s_qflash_ready 0x20004038 Data 1 app_ota.o(.data)
+ s_rsp_consumed 0x20004039 Data 1 app_ota.o(.data)
+ s_reset_pending 0x2000403a Data 1 app_ota.o(.data)
+ s_reset_stamp 0x2000403c Data 4 app_ota.o(.data)
+ s_rsp_sink 0x20004040 Data 4 app_ota.o(.data)
+ s_stream 0x20004044 Data 1 app_ota.o(.data)
+ s_bad_state_sent 0x20004045 Data 1 app_ota.o(.data)
+ s_uart_exit_req 0x20004046 Data 1 app_ota.o(.data)
+ s_chanHave 0x20004048 Data 2 app_ota.o(.data)
+ s_chanNeed 0x2000404a Data 2 app_ota.o(.data)
+ s_chanState 0x2000404c Data 1 app_ota.o(.data)
+ .data 0x2000404d Section 1 app_bootset.o(.data)
+ s_qflash_ready 0x2000404d Data 1 app_bootset.o(.data)
+ .data 0x20004050 Section 12 n32wb03x_qflash.o(.data)
+ .data 0x2000405c Section 4 errno.o(.data)
+ _errno 0x2000405c Data 4 errno.o(.data)
+ .bss 0x20004060 Section 52 system_n32wb03x.o(.bss)
+ .bss 0x20004094 Section 3072 boot_usart.o(.bss)
+ s_rxRing 0x20004094 Data 3072 boot_usart.o(.bss)
+ .bss 0x20004c94 Section 176 boot_cli.o(.bss)
+ s_txBuf 0x20004c94 Data 96 boot_cli.o(.bss)
+ s_line 0x20004cf4 Data 80 boot_cli.o(.bss)
+ .bss 0x20004d44 Section 487 app_ota.o(.bss)
+ s_chanBuf 0x20004d44 Data 487 app_ota.o(.bss)
+ .bss 0x20004f2c Section 808 n32wb03x_qflash.o(.bss)
+ ram_qflash_cmd 0x20004f2c Data 808 n32wb03x_qflash.o(.bss)
+ STACK 0x20005258 Section 2048 startup_n32wb03x.o(STACK)
Global Symbols
@@ -148,6 +638,7 @@ Image Symbol Table
_clock_init - Undefined Weak Reference
_microlib_exit - Undefined Weak Reference
__Vectors_Size 0x000000c0 Number 0 startup_n32wb03x.o ABSOLUTE
+ Image$$ER_IROM1$$Base 0x01000000 Number 0 anon$$obj.o ABSOLUTE
__Vectors 0x01000000 Data 4 startup_n32wb03x.o(RESET)
__Vectors_End 0x010000c0 Data 0 startup_n32wb03x.o(RESET)
__main 0x010000c1 Thumb Code 0 entry.o(.ARM.Collect$$$$00000000)
@@ -212,22 +703,72 @@ Image Symbol Table
__aeabi_memclr4 0x0100015f Thumb Code 0 memseta.o(.text)
__aeabi_memclr8 0x0100015f Thumb Code 0 memseta.o(.text)
_memset$wrapper 0x01000163 Thumb Code 18 memseta.o(.text)
- __scatterload 0x01000175 Thumb Code 28 init.o(.text)
- __scatterload_rt2 0x01000175 Thumb Code 0 init.o(.text)
- OTPTrim_Read 0x01000199 Thumb Code 192 system_n32wb03x.o(i.OTPTrim_Read)
- SystemInit 0x01000395 Thumb Code 250 system_n32wb03x.o(i.SystemInit)
- SystemTrimValueRead 0x010004b1 Thumb Code 20 system_n32wb03x.o(i.SystemTrimValueRead)
- __scatterload_copy 0x010004c5 Thumb Code 14 handlers.o(i.__scatterload_copy)
- __scatterload_null 0x010004d3 Thumb Code 2 handlers.o(i.__scatterload_null)
- __scatterload_zeroinit 0x010004d5 Thumb Code 14 handlers.o(i.__scatterload_zeroinit)
- caiic_crc32 0x010004e9 Thumb Code 62 boot_crc32.o(i.caiic_crc32)
- main 0x01000551 Thumb Code 72 main.o(i.main)
- TRIM_READ_CMD_CODE 0x010005e8 Data 320 system_n32wb03x.o(.constdata)
- CMD_RDID 0x01000728 Data 152 system_n32wb03x.o(.constdata)
- Region$$Table$$Base 0x010007c0 Number 0 anon$$obj.o(Region$$Table)
- Region$$Table$$Limit 0x010007d0 Number 0 anon$$obj.o(Region$$Table)
- trim_stored 0x20004000 Data 52 system_n32wb03x.o(.bss)
- __initial_sp 0x20004838 Data 0 startup_n32wb03x.o(STACK)
+ strlen 0x01000175 Thumb Code 14 strlen.o(.text)
+ strcmp 0x01000183 Thumb Code 28 strcmp.o(.text)
+ memcmp 0x0100019f Thumb Code 26 memcmp.o(.text)
+ strtoul 0x010001b9 Thumb Code 118 strtoul.o(.text)
+ __rt_ctype_table 0x01000231 Thumb Code 4 ctype_o.o(.text)
+ _strtoul 0x01000239 Thumb Code 166 _strtoul.o(.text)
+ __scatterload 0x010002e1 Thumb Code 28 init.o(.text)
+ __scatterload_rt2 0x010002e1 Thumb Code 0 init.o(.text)
+ _chval 0x01000305 Thumb Code 30 _chval.o(.text)
+ AppBootset_CmdAppswitch 0x01000325 Thumb Code 282 app_bootset.o(i.AppBootset_CmdAppswitch)
+ AppBootset_CmdBsdump 0x010005fd Thumb Code 28 app_bootset.o(i.AppBootset_CmdBsdump)
+ AppBootset_CmdBsset 0x0100061d Thumb Code 348 app_bootset.o(i.AppBootset_CmdBsset)
+ DMA_DeInit 0x01000c25 Thumb Code 152 n32wb03x_dma.o(i.DMA_DeInit)
+ DMA_EnableChannel 0x01000cc5 Thumb Code 24 n32wb03x_dma.o(i.DMA_EnableChannel)
+ DMA_GetCurrDataCounter 0x01000ce1 Thumb Code 8 n32wb03x_dma.o(i.DMA_GetCurrDataCounter)
+ DMA_Init 0x01000ce9 Thumb Code 58 n32wb03x_dma.o(i.DMA_Init)
+ DMA_RequestRemap 0x01000d29 Thumb Code 16 n32wb03x_dma.o(i.DMA_RequestRemap)
+ GPIO_InitPeripheral 0x01000d39 Thumb Code 262 n32wb03x_gpio.o(i.GPIO_InitPeripheral)
+ GPIO_InitStruct 0x01000e41 Thumb Code 24 n32wb03x_gpio.o(i.GPIO_InitStruct)
+ OTPTrim_Read 0x01000e5d Thumb Code 192 system_n32wb03x.o(i.OTPTrim_Read)
+ Qflash_Erase_Sector 0x01000f29 Thumb Code 54 n32wb03x_qflash.o(i.Qflash_Erase_Sector)
+ Qflash_Init 0x01000f65 Thumb Code 36 n32wb03x_qflash.o(i.Qflash_Init)
+ Qflash_Write 0x01000f9d Thumb Code 62 n32wb03x_qflash.o(i.Qflash_Write)
+ RCC_EnableAHBPeriphClk 0x01000fe1 Thumb Code 28 n32wb03x_rcc.o(i.RCC_EnableAHBPeriphClk)
+ RCC_EnableAPB2PeriphClk 0x01001001 Thumb Code 28 n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphClk)
+ RCC_GetClocksFreqValue 0x01001021 Thumb Code 140 n32wb03x_rcc.o(i.RCC_GetClocksFreqValue)
+ SystemInit 0x010011f5 Thumb Code 250 system_n32wb03x.o(i.SystemInit)
+ SystemTrimValueRead 0x01001311 Thumb Code 20 system_n32wb03x.o(i.SystemTrimValueRead)
+ USART_Enable 0x01001325 Thumb Code 26 n32wb03x_usart.o(i.USART_Enable)
+ USART_EnableDMA 0x01001345 Thumb Code 20 n32wb03x_usart.o(i.USART_EnableDMA)
+ USART_GetFlagStatus 0x01001359 Thumb Code 30 n32wb03x_usart.o(i.USART_GetFlagStatus)
+ USART_Init 0x01001379 Thumb Code 162 n32wb03x_usart.o(i.USART_Init)
+ USART_SendData 0x0100142d Thumb Code 8 n32wb03x_usart.o(i.USART_SendData)
+ __aeabi_errno_addr 0x01001435 Thumb Code 4 errno.o(i.__aeabi_errno_addr)
+ __rt_errno_addr 0x01001435 Thumb Code 0 errno.o(i.__aeabi_errno_addr)
+ __scatterload_copy 0x0100143d Thumb Code 14 handlers.o(i.__scatterload_copy)
+ __scatterload_null 0x0100144b Thumb Code 2 handlers.o(i.__scatterload_null)
+ __scatterload_zeroinit 0x0100144d Thumb Code 14 handlers.o(i.__scatterload_zeroinit)
+ app_ota_abort 0x01001469 Thumb Code 32 app_ota.o(i.app_ota_abort)
+ app_ota_chan_idle 0x010014a5 Thumb Code 12 app_ota.o(i.app_ota_chan_idle)
+ app_ota_chan_rx 0x010014b9 Thumb Code 298 app_ota.o(i.app_ota_chan_rx)
+ app_ota_chan_rx_uart 0x010015f9 Thumb Code 26 app_ota.o(i.app_ota_chan_rx_uart)
+ app_ota_handle_frame 0x0100161d Thumb Code 106 app_ota.o(i.app_ota_handle_frame)
+ app_ota_reset_poll 0x01001699 Thumb Code 70 app_ota.o(i.app_ota_reset_poll)
+ boot_cli_run 0x010016f5 Thumb Code 220 boot_cli.o(i.boot_cli_run)
+ boot_delay_ms 0x0100183d Thumb Code 24 boot_usart.o(i.boot_delay_ms)
+ boot_millis 0x01001855 Thumb Code 30 boot_usart.o(i.boot_millis)
+ boot_usart_init 0x0100187d Thumb Code 238 boot_usart.o(i.boot_usart_init)
+ boot_usart_read 0x0100198d Thumb Code 54 boot_usart.o(i.boot_usart_read)
+ boot_usart_write 0x010019e5 Thumb Code 42 boot_usart.o(i.boot_usart_write)
+ caiic_crc32 0x01001c25 Thumb Code 62 boot_crc32.o(i.caiic_crc32)
+ cli_printf 0x01001d35 Thumb Code 408 boot_cli.o(i.cli_printf)
+ cli_write 0x01001ed1 Thumb Code 22 boot_cli.o(i.cli_write)
+ main 0x01001f41 Thumb Code 190 main.o(i.main)
+ TRIM_READ_CMD_CODE 0x010028ce Data 320 system_n32wb03x.o(.constdata)
+ CMD_RDID 0x01002a0e Data 152 system_n32wb03x.o(.constdata)
+ const_qflash_cmd 0x01002b20 Data 804 n32wb03x_qflash.o(.constdata)
+ __ctype_table 0x01002e44 Data 129 ctype_o.o(.constdata)
+ Region$$Table$$Base 0x010031fc Number 0 anon$$obj.o(Region$$Table)
+ Region$$Table$$Limit 0x0100321c Number 0 anon$$obj.o(Region$$Table)
+ SystemCoreClock 0x20004000 Data 4 system_n32wb03x.o(.data)
+ CMD_FLASH_SE 0x20004050 Data 4 n32wb03x_qflash.o(.data)
+ CMD_FLASH_WRITE 0x20004054 Data 4 n32wb03x_qflash.o(.data)
+ CMD_FLASH_READ 0x20004058 Data 4 n32wb03x_qflash.o(.data)
+ trim_stored 0x20004060 Data 52 system_n32wb03x.o(.bss)
+ __initial_sp 0x20005a58 Data 0 startup_n32wb03x.o(STACK)
@@ -237,52 +778,158 @@ Memory Map of the image
Image Entry point : 0x010000c1
- Load Region LR_IROM1 (Base: 0x01000000, Size: 0x000007d0, Max: 0x00004000, ABSOLUTE)
+ Load Region LR_IROM1 (Base: 0x01000000, Size: 0x0000327c, Max: 0x00004000, ABSOLUTE)
- Execution Region ER_IROM1 (Exec base: 0x01000000, Load base: 0x01000000, Size: 0x000007d0, Max: 0x00004000, ABSOLUTE)
+ Execution Region ER_IROM1 (Exec base: 0x01000000, Load base: 0x01000000, Size: 0x0000321c, Max: 0x00004000, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x01000000 0x01000000 0x000000c0 Data RO 3 RESET startup_n32wb03x.o
- 0x010000c0 0x010000c0 0x00000000 Code RO 222 * .ARM.Collect$$$$00000000 mc_p.l(entry.o)
- 0x010000c0 0x010000c0 0x00000004 Code RO 233 .ARM.Collect$$$$00000001 mc_p.l(entry2.o)
- 0x010000c4 0x010000c4 0x00000004 Code RO 236 .ARM.Collect$$$$00000004 mc_p.l(entry5.o)
- 0x010000c8 0x010000c8 0x00000000 Code RO 238 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o)
- 0x010000c8 0x010000c8 0x00000000 Code RO 240 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o)
- 0x010000c8 0x010000c8 0x00000008 Code RO 241 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o)
- 0x010000d0 0x010000d0 0x00000000 Code RO 243 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o)
- 0x010000d0 0x010000d0 0x00000000 Code RO 245 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o)
- 0x010000d0 0x010000d0 0x00000004 Code RO 234 .ARM.Collect$$$$00002712 mc_p.l(entry2.o)
+ 0x010000c0 0x010000c0 0x00000000 Code RO 1210 * .ARM.Collect$$$$00000000 mc_p.l(entry.o)
+ 0x010000c0 0x010000c0 0x00000004 Code RO 1229 .ARM.Collect$$$$00000001 mc_p.l(entry2.o)
+ 0x010000c4 0x010000c4 0x00000004 Code RO 1232 .ARM.Collect$$$$00000004 mc_p.l(entry5.o)
+ 0x010000c8 0x010000c8 0x00000000 Code RO 1234 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o)
+ 0x010000c8 0x010000c8 0x00000000 Code RO 1236 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o)
+ 0x010000c8 0x010000c8 0x00000008 Code RO 1237 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o)
+ 0x010000d0 0x010000d0 0x00000000 Code RO 1239 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o)
+ 0x010000d0 0x010000d0 0x00000000 Code RO 1241 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o)
+ 0x010000d0 0x010000d0 0x00000004 Code RO 1230 .ARM.Collect$$$$00002712 mc_p.l(entry2.o)
0x010000d4 0x010000d4 0x0000000e Code RO 10 .emb_text system_n32wb03x.o
0x010000e2 0x010000e2 0x00000002 PAD
0x010000e4 0x010000e4 0x0000001c Code RO 4 .text startup_n32wb03x.o
- 0x01000100 0x01000100 0x0000002c Code RO 225 .text mc_p.l(uidiv.o)
- 0x0100012c 0x0100012c 0x00000024 Code RO 227 .text mc_p.l(memcpya.o)
- 0x01000150 0x01000150 0x00000024 Code RO 229 .text mc_p.l(memseta.o)
- 0x01000174 0x01000174 0x00000024 Code RO 247 .text mc_p.l(init.o)
- 0x01000198 0x01000198 0x000000cc Code RO 11 i.OTPTrim_Read system_n32wb03x.o
- 0x01000264 0x01000264 0x00000130 Code RO 12 i.RCC_HsiCalib system_n32wb03x.o
- 0x01000394 0x01000394 0x0000011c Code RO 16 i.SystemInit system_n32wb03x.o
- 0x010004b0 0x010004b0 0x00000014 Code RO 18 i.SystemTrimValueRead system_n32wb03x.o
- 0x010004c4 0x010004c4 0x0000000e Code RO 251 i.__scatterload_copy mc_p.l(handlers.o)
- 0x010004d2 0x010004d2 0x00000002 Code RO 252 i.__scatterload_null mc_p.l(handlers.o)
- 0x010004d4 0x010004d4 0x0000000e Code RO 253 i.__scatterload_zeroinit mc_p.l(handlers.o)
- 0x010004e2 0x010004e2 0x00000006 Code RO 19 i.__set_PRIMASK system_n32wb03x.o
- 0x010004e8 0x010004e8 0x00000044 Code RO 210 i.caiic_crc32 boot_crc32.o
- 0x0100052c 0x0100052c 0x00000024 Code RO 174 i.jump_to_app main.o
- 0x01000550 0x01000550 0x00000054 Code RO 175 i.main main.o
- 0x010005a4 0x010005a4 0x00000044 Code RO 20 i.read_flash_ID system_n32wb03x.o
- 0x010005e8 0x010005e8 0x000001d8 Data RO 23 .constdata system_n32wb03x.o
- 0x010007c0 0x010007c0 0x00000010 Data RO 249 Region$$Table anon$$obj.o
+ 0x01000100 0x01000100 0x0000002c Code RO 1213 .text mc_p.l(uidiv.o)
+ 0x0100012c 0x0100012c 0x00000024 Code RO 1215 .text mc_p.l(memcpya.o)
+ 0x01000150 0x01000150 0x00000024 Code RO 1217 .text mc_p.l(memseta.o)
+ 0x01000174 0x01000174 0x0000000e Code RO 1219 .text mc_p.l(strlen.o)
+ 0x01000182 0x01000182 0x0000001c Code RO 1221 .text mc_p.l(strcmp.o)
+ 0x0100019e 0x0100019e 0x0000001a Code RO 1223 .text mc_p.l(memcmp.o)
+ 0x010001b8 0x010001b8 0x00000076 Code RO 1227 .text mc_p.l(strtoul.o)
+ 0x0100022e 0x0100022e 0x00000002 PAD
+ 0x01000230 0x01000230 0x00000008 Code RO 1243 .text mc_p.l(ctype_o.o)
+ 0x01000238 0x01000238 0x000000a6 Code RO 1278 .text mc_p.l(_strtoul.o)
+ 0x010002de 0x010002de 0x00000002 PAD
+ 0x010002e0 0x010002e0 0x00000024 Code RO 1280 .text mc_p.l(init.o)
+ 0x01000304 0x01000304 0x0000001e Code RO 1282 .text mc_p.l(_chval.o)
+ 0x01000322 0x01000322 0x00000002 PAD
+ 0x01000324 0x01000324 0x000002d8 Code RO 495 i.AppBootset_CmdAppswitch app_bootset.o
+ 0x010005fc 0x010005fc 0x00000020 Code RO 496 i.AppBootset_CmdBsdump app_bootset.o
+ 0x0100061c 0x0100061c 0x000002f8 Code RO 497 i.AppBootset_CmdBsset app_bootset.o
+ 0x01000914 0x01000914 0x000000e0 Code RO 290 i.CmdDevInfo boot_cli.o
+ 0x010009f4 0x010009f4 0x000000b4 Code RO 291 i.CmdHelp boot_cli.o
+ 0x01000aa8 0x01000aa8 0x0000001c Code RO 292 i.CmdOta boot_cli.o
+ 0x01000ac4 0x01000ac4 0x0000003c Code RO 293 i.CmdReset boot_cli.o
+ 0x01000b00 0x01000b00 0x000000b0 Code RO 294 i.CmdUartInfo boot_cli.o
+ 0x01000bb0 0x01000bb0 0x00000074 Code RO 295 i.CmdVersion boot_cli.o
+ 0x01000c24 0x01000c24 0x000000a0 Code RO 1088 i.DMA_DeInit n32wb03x_dma.o
+ 0x01000cc4 0x01000cc4 0x0000001c Code RO 1089 i.DMA_EnableChannel n32wb03x_dma.o
+ 0x01000ce0 0x01000ce0 0x00000008 Code RO 1090 i.DMA_GetCurrDataCounter n32wb03x_dma.o
+ 0x01000ce8 0x01000ce8 0x00000040 Code RO 1093 i.DMA_Init n32wb03x_dma.o
+ 0x01000d28 0x01000d28 0x00000010 Code RO 1094 i.DMA_RequestRemap n32wb03x_dma.o
+ 0x01000d38 0x01000d38 0x00000106 Code RO 800 i.GPIO_InitPeripheral n32wb03x_gpio.o
+ 0x01000e3e 0x01000e3e 0x00000002 PAD
+ 0x01000e40 0x01000e40 0x0000001c Code RO 801 i.GPIO_InitStruct n32wb03x_gpio.o
+ 0x01000e5c 0x01000e5c 0x000000cc Code RO 11 i.OTPTrim_Read system_n32wb03x.o
+ 0x01000f28 0x01000f28 0x0000003c Code RO 1167 i.Qflash_Erase_Sector n32wb03x_qflash.o
+ 0x01000f64 0x01000f64 0x00000038 Code RO 1168 i.Qflash_Init n32wb03x_qflash.o
+ 0x01000f9c 0x01000f9c 0x00000044 Code RO 1170 i.Qflash_Write n32wb03x_qflash.o
+ 0x01000fe0 0x01000fe0 0x00000020 Code RO 576 i.RCC_EnableAHBPeriphClk n32wb03x_rcc.o
+ 0x01001000 0x01001000 0x00000020 Code RO 580 i.RCC_EnableAPB2PeriphClk n32wb03x_rcc.o
+ 0x01001020 0x01001020 0x000000a4 Code RO 588 i.RCC_GetClocksFreqValue n32wb03x_rcc.o
+ 0x010010c4 0x010010c4 0x00000130 Code RO 12 i.RCC_HsiCalib system_n32wb03x.o
+ 0x010011f4 0x010011f4 0x0000011c Code RO 16 i.SystemInit system_n32wb03x.o
+ 0x01001310 0x01001310 0x00000014 Code RO 18 i.SystemTrimValueRead system_n32wb03x.o
+ 0x01001324 0x01001324 0x00000020 Code RO 922 i.USART_Enable n32wb03x_usart.o
+ 0x01001344 0x01001344 0x00000014 Code RO 923 i.USART_EnableDMA n32wb03x_usart.o
+ 0x01001358 0x01001358 0x0000001e Code RO 929 i.USART_GetFlagStatus n32wb03x_usart.o
+ 0x01001376 0x01001376 0x00000002 PAD
+ 0x01001378 0x01001378 0x000000b4 Code RO 931 i.USART_Init n32wb03x_usart.o
+ 0x0100142c 0x0100142c 0x00000008 Code RO 934 i.USART_SendData n32wb03x_usart.o
+ 0x01001434 0x01001434 0x00000008 Code RO 1271 i.__aeabi_errno_addr mc_p.l(errno.o)
+ 0x0100143c 0x0100143c 0x0000000e Code RO 1286 i.__scatterload_copy mc_p.l(handlers.o)
+ 0x0100144a 0x0100144a 0x00000002 Code RO 1287 i.__scatterload_null mc_p.l(handlers.o)
+ 0x0100144c 0x0100144c 0x0000000e Code RO 1288 i.__scatterload_zeroinit mc_p.l(handlers.o)
+ 0x0100145a 0x0100145a 0x00000006 Code RO 19 i.__set_PRIMASK system_n32wb03x.o
+ 0x01001460 0x01001460 0x00000006 Code RO 1171 i.__set_PRIMASK n32wb03x_qflash.o
+ 0x01001466 0x01001466 0x00000002 PAD
+ 0x01001468 0x01001468 0x0000003c Code RO 386 i.app_ota_abort app_ota.o
+ 0x010014a4 0x010014a4 0x00000014 Code RO 387 i.app_ota_chan_idle app_ota.o
+ 0x010014b8 0x010014b8 0x00000140 Code RO 388 i.app_ota_chan_rx app_ota.o
+ 0x010015f8 0x010015f8 0x00000024 Code RO 389 i.app_ota_chan_rx_uart app_ota.o
+ 0x0100161c 0x0100161c 0x0000007c Code RO 391 i.app_ota_handle_frame app_ota.o
+ 0x01001698 0x01001698 0x0000005c Code RO 392 i.app_ota_reset_poll app_ota.o
+ 0x010016f4 0x010016f4 0x00000148 Code RO 296 i.boot_cli_run boot_cli.o
+ 0x0100183c 0x0100183c 0x00000018 Code RO 239 i.boot_delay_ms boot_usart.o
+ 0x01001854 0x01001854 0x00000028 Code RO 240 i.boot_millis boot_usart.o
+ 0x0100187c 0x0100187c 0x00000110 Code RO 241 i.boot_usart_init boot_usart.o
+ 0x0100198c 0x0100198c 0x00000040 Code RO 242 i.boot_usart_read boot_usart.o
+ 0x010019cc 0x010019cc 0x00000018 Code RO 243 i.boot_usart_rx_head boot_usart.o
+ 0x010019e4 0x010019e4 0x00000030 Code RO 244 i.boot_usart_write boot_usart.o
+ 0x01001a14 0x01001a14 0x00000054 Code RO 498 i.bootset_commit app_bootset.o
+ 0x01001a68 0x01001a68 0x0000000e Code RO 499 i.bootset_crc app_bootset.o
+ 0x01001a76 0x01001a76 0x00000002 PAD
+ 0x01001a78 0x01001a78 0x0000001c Code RO 500 i.bootset_ensure_qflash app_bootset.o
+ 0x01001a94 0x01001a94 0x0000016c Code RO 501 i.bootset_print app_bootset.o
+ 0x01001c00 0x01001c00 0x00000024 Code RO 502 i.bootset_valid app_bootset.o
+ 0x01001c24 0x01001c24 0x00000044 Code RO 226 i.caiic_crc32 boot_crc32.o
+ 0x01001c68 0x01001c68 0x000000cc Code RO 297 i.cli_exec_line boot_cli.o
+ 0x01001d34 0x01001d34 0x0000019c Code RO 298 i.cli_printf boot_cli.o
+ 0x01001ed0 0x01001ed0 0x00000016 Code RO 299 i.cli_write boot_cli.o
+ 0x01001ee6 0x01001ee6 0x00000002 PAD
+ 0x01001ee8 0x01001ee8 0x00000034 Code RO 174 i.image_sane main.o
+ 0x01001f1c 0x01001f1c 0x00000024 Code RO 175 i.jump_to_app main.o
+ 0x01001f40 0x01001f40 0x00000180 Code RO 176 i.main main.o
+ 0x010020c0 0x010020c0 0x0000004c Code RO 393 i.ota_crc16 app_ota.o
+ 0x0100210c 0x0100210c 0x00000040 Code RO 394 i.ota_erase_up_to app_ota.o
+ 0x0100214c 0x0100214c 0x00000170 Code RO 395 i.ota_on_begin app_ota.o
+ 0x010022bc 0x010022bc 0x000001a8 Code RO 396 i.ota_on_data app_ota.o
+ 0x01002464 0x01002464 0x00000170 Code RO 397 i.ota_on_end app_ota.o
+ 0x010025d4 0x010025d4 0x00000038 Code RO 398 i.ota_program app_ota.o
+ 0x0100260c 0x0100260c 0x00000018 Code RO 399 i.ota_rd32 app_ota.o
+ 0x01002624 0x01002624 0x0000007c Code RO 400 i.ota_respond app_ota.o
+ 0x010026a0 0x010026a0 0x0000001c Code RO 401 i.ota_uart_sink app_ota.o
+ 0x010026bc 0x010026bc 0x000000cc Code RO 402 i.ota_update_bootsetting app_ota.o
+ 0x01002788 0x01002788 0x0000002e Code RO 503 i.parse_u32 app_bootset.o
+ 0x010027b6 0x010027b6 0x00000018 Code RO 177 i.puts_boot main.o
+ 0x010027ce 0x010027ce 0x00000002 PAD
+ 0x010027d0 0x010027d0 0x00000044 Code RO 20 i.read_flash_ID system_n32wb03x.o
+ 0x01002814 0x01002814 0x0000004e Code RO 300 i.str_pad boot_cli.o
+ 0x01002862 0x01002862 0x0000006c Code RO 301 i.u32_to_str boot_cli.o
+ 0x010028ce 0x010028ce 0x000001d8 Data RO 23 .constdata system_n32wb03x.o
+ 0x01002aa6 0x01002aa6 0x00000002 PAD
+ 0x01002aa8 0x01002aa8 0x0000006c Data RO 303 .constdata boot_cli.o
+ 0x01002b14 0x01002b14 0x0000000c Data RO 596 .constdata n32wb03x_rcc.o
+ 0x01002b20 0x01002b20 0x00000324 Data RO 1173 .constdata n32wb03x_qflash.o
+ 0x01002e44 0x01002e44 0x00000081 Data RO 1244 .constdata mc_p.l(ctype_o.o)
+ 0x01002ec5 0x01002ec5 0x00000003 PAD
+ 0x01002ec8 0x01002ec8 0x00000004 Data RO 1245 .constdata mc_p.l(ctype_o.o)
+ 0x01002ecc 0x01002ecc 0x0000029a Data RO 304 .conststring boot_cli.o
+ 0x01003166 0x01003166 0x00000002 PAD
+ 0x01003168 0x01003168 0x00000091 Data RO 504 .conststring app_bootset.o
+ 0x010031f9 0x010031f9 0x00000003 PAD
+ 0x010031fc 0x010031fc 0x00000020 Data RO 1284 Region$$Table anon$$obj.o
- Execution Region RW_IRAM1 (Exec base: 0x20004000, Load base: 0x010007d0, Size: 0x00000838, Max: 0x0000c000, ABSOLUTE)
+ Execution Region RW_IRAM1 (Exec base: 0x20004000, Load base: 0x0100321c, Size: 0x00001a58, Max: 0x0000c000, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
- 0x20004000 - 0x00000034 Zero RW 22 .bss system_n32wb03x.o
- 0x20004034 0x010007d0 0x00000004 PAD
- 0x20004038 - 0x00000800 Zero RW 1 STACK startup_n32wb03x.o
+ 0x20004000 0x0100321c 0x00000004 Data RW 24 .data system_n32wb03x.o
+ 0x20004004 0x01003220 0x00000008 Data RW 246 .data boot_usart.o
+ 0x2000400c 0x01003228 0x00000001 Data RW 305 .data boot_cli.o
+ 0x2000400d 0x01003229 0x00000003 PAD
+ 0x20004010 0x0100322c 0x0000003d Data RW 404 .data app_ota.o
+ 0x2000404d 0x01003269 0x00000001 Data RW 505 .data app_bootset.o
+ 0x2000404e 0x0100326a 0x00000002 PAD
+ 0x20004050 0x0100326c 0x0000000c Data RW 1174 .data n32wb03x_qflash.o
+ 0x2000405c 0x01003278 0x00000004 Data RW 1274 .data mc_p.l(errno.o)
+ 0x20004060 - 0x00000034 Zero RW 22 .bss system_n32wb03x.o
+ 0x20004094 - 0x00000c00 Zero RW 245 .bss boot_usart.o
+ 0x20004c94 - 0x000000b0 Zero RW 302 .bss boot_cli.o
+ 0x20004d44 - 0x000001e7 Zero RW 403 .bss app_ota.o
+ 0x20004f2b 0x0100327c 0x00000001 PAD
+ 0x20004f2c - 0x00000328 Zero RW 1172 .bss n32wb03x_qflash.o
+ 0x20005254 0x0100327c 0x00000004 PAD
+ 0x20005258 - 0x00000800 Zero RW 1 STACK startup_n32wb03x.o
==============================================================================
@@ -292,20 +939,32 @@ Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug Object Name
+ 2092 1148 145 1 0 6739 app_bootset.o
+ 2388 322 0 61 487 12597 app_ota.o
+ 1936 628 774 1 176 15380 boot_cli.o
68 6 0 0 0 874 boot_crc32.o
- 120 18 0 0 0 3627 main.o
+ 472 66 0 8 3072 4161 boot_usart.o
+ 496 208 0 0 0 5011 main.o
+ 276 18 0 0 0 4372 n32wb03x_dma.o
+ 290 4 0 0 0 2252 n32wb03x_gpio.o
+ 190 32 804 12 808 4258 n32wb03x_qflash.o
+ 228 32 12 0 0 2848 n32wb03x_rcc.o
+ 270 24 0 0 0 5093 n32wb03x_usart.o
28 8 192 0 2048 744 startup_n32wb03x.o
- 900 60 472 0 52 95112 system_n32wb03x.o
+ 900 60 472 4 52 124580 system_n32wb03x.o
----------------------------------------------------------------------
- 1118 92 680 0 2104 100357 Object Totals
- 0 0 16 0 0 0 (incl. Generated)
- 2 0 0 0 4 0 (incl. Padding)
+ 9648 2556 2438 92 6648 188909 Object Totals
+ 0 0 32 0 0 0 (incl. Generated)
+ 14 0 7 5 5 0 (incl. Padding)
----------------------------------------------------------------------
Code (inc. data) RO Data RW Data ZI Data Debug Library Member Name
+ 30 0 0 0 0 60 _chval.o
+ 166 0 0 0 0 84 _strtoul.o
+ 8 4 133 0 0 60 ctype_o.o
0 0 0 0 0 0 entry.o
0 0 0 0 0 0 entry10a.o
0 0 0 0 0 0 entry11a.o
@@ -314,24 +973,29 @@ Image component sizes
0 0 0 0 0 0 entry7b.o
0 0 0 0 0 0 entry8b.o
8 4 0 0 0 0 entry9a.o
+ 8 4 0 4 0 60 errno.o
30 0 0 0 0 0 handlers.o
36 8 0 0 0 68 init.o
+ 26 0 0 0 0 72 memcmp.o
36 0 0 0 0 60 memcpya.o
36 0 0 0 0 100 memseta.o
+ 28 0 0 0 0 68 strcmp.o
+ 14 0 0 0 0 60 strlen.o
+ 118 0 0 0 0 84 strtoul.o
44 0 0 0 0 72 uidiv.o
----------------------------------------------------------------------
- 202 16 0 0 0 300 Library Totals
- 0 0 0 0 0 0 (incl. Padding)
+ 606 24 136 4 0 848 Library Totals
+ 6 0 3 0 0 0 (incl. Padding)
----------------------------------------------------------------------
Code (inc. data) RO Data RW Data ZI Data Debug Library Name
- 202 16 0 0 0 300 mc_p.l
+ 600 24 133 4 0 848 mc_p.l
----------------------------------------------------------------------
- 202 16 0 0 0 300 Library Totals
+ 606 24 136 4 0 848 Library Totals
----------------------------------------------------------------------
@@ -340,15 +1004,15 @@ Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug
- 1320 108 680 0 2104 100317 Grand Totals
- 1320 108 680 0 2104 100317 ELF Image Totals
- 1320 108 680 0 0 0 ROM Totals
+ 10254 2580 2574 96 6648 186425 Grand Totals
+ 10254 2580 2574 96 6648 186425 ELF Image Totals
+ 10254 2580 2574 96 0 0 ROM Totals
==============================================================================
- Total RO Size (Code + RO Data) 2000 ( 1.95kB)
- Total RW Size (RW Data + ZI Data) 2104 ( 2.05kB)
- Total ROM Size (Code + RO Data + RW Data) 2000 ( 1.95kB)
+ Total RO Size (Code + RO Data) 12828 ( 12.53kB)
+ Total RW Size (RW Data + ZI Data) 6744 ( 6.59kB)
+ Total ROM Size (Code + RO Data + RW Data) 12924 ( 12.62kB)
==============================================================================
diff --git a/Boot/MDK-ARM/bin/caiic_boot.bin b/Boot/MDK-ARM/bin/caiic_boot.bin
index 746d1fb..bbd7824 100644
Binary files a/Boot/MDK-ARM/bin/caiic_boot.bin and b/Boot/MDK-ARM/bin/caiic_boot.bin differ
diff --git a/Boot/MDK-ARM/build.log b/Boot/MDK-ARM/build.log
index 1d68b51..7c324e0 100644
--- a/Boot/MDK-ARM/build.log
+++ b/Boot/MDK-ARM/build.log
@@ -3,9 +3,18 @@ Rebuild target 'caiic_boot'
assembling startup_n32wb03x.s...
compiling boot_crc32.c...
compiling main.c...
+compiling boot_usart.c...
compiling system_n32wb03x.c...
+compiling app_bootset.c...
+compiling n32wb03x_gpio.c...
+compiling n32wb03x_usart.c...
+compiling n32wb03x_rcc.c...
+compiling boot_cli.c...
+compiling n32wb03x_dma.c...
+compiling app_ota.c...
+compiling n32wb03x_qflash.c...
linking...
-Program Size: Code=1320 RO-data=680 RW-data=0 ZI-data=2104
+Program Size: Code=10254 RO-data=2574 RW-data=96 ZI-data=6648
FromELF: creating hex file...
After Build - User command #1: fromelf --bin --output=.\bin\caiic_boot.bin .\Objects\caiic_boot.axf
".\Objects\caiic_boot.axf" - 0 Error(s), 0 Warning(s).
diff --git a/Boot/MDK-ARM/caiic_boot.uvprojx b/Boot/MDK-ARM/caiic_boot.uvprojx
index d1754a9..51b646f 100644
--- a/Boot/MDK-ARM/caiic_boot.uvprojx
+++ b/Boot/MDK-ARM/caiic_boot.uvprojx
@@ -337,9 +337,9 @@
0
- N32WB03X, USE_STDPERIPH_DRIVER
+ N32WB03X, USE_STDPERIPH_DRIVER, BOOT_FIRMWARE
- ..\src;..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core;..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device;..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc
+ ..\src;..\..\mcm-ddc-ble\inc;..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core;..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device;..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc
@@ -413,6 +413,61 @@
1
..\src\boot_crc32.c
+
+ boot_usart.c
+ 1
+ ..\src\boot_usart.c
+
+
+ boot_cli.c
+ 1
+ ..\src\boot_cli.c
+
+
+
+
+ SHARED_APP
+
+
+ app_ota.c
+ 1
+ ..\..\mcm-ddc-ble\src\app_ota.c
+
+
+ app_bootset.c
+ 1
+ ..\..\mcm-ddc-ble\src\app_bootset.c
+
+
+
+
+ STD_PERIPH
+
+
+ n32wb03x_rcc.c
+ 1
+ ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\src\n32wb03x_rcc.c
+
+
+ n32wb03x_gpio.c
+ 1
+ ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\src\n32wb03x_gpio.c
+
+
+ n32wb03x_usart.c
+ 1
+ ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\src\n32wb03x_usart.c
+
+
+ n32wb03x_dma.c
+ 1
+ ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\src\n32wb03x_dma.c
+
+
+ n32wb03x_qflash.c
+ 1
+ ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\src\n32wb03x_qflash.c
+
diff --git a/Boot/src/boot_cli.c b/Boot/src/boot_cli.c
new file mode 100644
index 0000000..6ab586c
--- /dev/null
+++ b/Boot/src/boot_cli.c
@@ -0,0 +1,436 @@
+/**
+ * @file boot_cli.c
+ * @brief Bootloader download-mode CLI: bare-metal polled line editor +
+ * command table, and the UART OTA binary frame mode.
+ *
+ * Wire-compatible with the application's UART CLI so that
+ * tools/ble_ota_update.py works unchanged against the bootloader:
+ * - prompt "caiic->" (the script's PROMPT marker)
+ * - "devinfo" prints "cur bank: APP" (the boot's OTA target is the
+ * OTHER bank, exactly like the app's "write the inactive bank" rule)
+ * - "ota" prints the "[ota] binary mode ON" go-ahead marker, then the
+ * stream carries 0xCA OTA frames (engine: shared app_ota.c)
+ *
+ * No libc printf: cli_printf() below is a minimal formatter (%% %c %s %d
+ * %u %x %X, width, '-'/'0' pads, 'l' ignored - all integers are 32-bit).
+ */
+#include "cli_core.h" /* bootloader shim (Boot/src) */
+#include "boot_usart.h"
+#include "boot_version.h"
+#include "app_bootset.h"
+#include "app_ota.h"
+#include "dfu_layout.h"
+#include "boot_crc32.h"
+#include "n32wb03x.h"
+
+#include
+#include
+#include
+
+#define CLI_TX_BUF_SIZE 96
+#define CLI_LINE_SIZE 80
+#define CLI_MAX_ARGS 8
+#define OTA_IDLE_EXIT_MS 3000u /* binary mode fallback exit */
+
+/* ------------------------------------------------------------------ */
+/* Output (cli_core.h shim implementation) */
+/* ------------------------------------------------------------------ */
+
+void cli_write(const char* str)
+{
+ boot_usart_write((const uint8_t*)str, (uint16_t)strlen(str));
+}
+
+/** Format v into out (NUL-terminated), least-significant first reversed. */
+static void u32_to_str(uint32_t v, char* out, uint8_t base, int neg)
+{
+ char tmp[11]; /* 10 digits + sign */
+ uint8_t n = 0;
+
+ do
+ {
+ uint32_t d = v % base;
+ tmp[n++] = (char)((d < 10u) ? ('0' + d) : ('A' + d - 10u));
+ v /= base;
+ } while (v != 0u);
+ if (neg)
+ {
+ tmp[n++] = '-';
+ }
+ while (n != 0u)
+ {
+ *out++ = tmp[--n];
+ }
+ *out = '\0';
+}
+
+static char* str_pad(char* out, const char* s, int width, uint8_t left, char pad)
+{
+ int len = (int)strlen(s);
+
+ if (!left)
+ {
+ while (width-- > len)
+ {
+ *out++ = pad;
+ }
+ }
+ while (*s != '\0')
+ {
+ *out++ = *s++;
+ }
+ while (width-- > len)
+ {
+ *out++ = ' ';
+ }
+ return out;
+}
+
+void cli_printf(const char* fmt, ...)
+{
+ static char s_txBuf[CLI_TX_BUF_SIZE];
+ char* out = s_txBuf;
+ va_list args;
+
+ va_start(args, fmt);
+ while (*fmt != '\0' && out < s_txBuf + CLI_TX_BUF_SIZE - 12)
+ {
+ char c = *fmt++;
+
+ if (c != '%')
+ {
+ *out++ = c;
+ continue;
+ }
+ {
+ uint8_t left = 0;
+ char pad = ' ';
+ int width = 0;
+ char num[12];
+ char spec;
+
+ if (*fmt == '-')
+ {
+ left = 1;
+ fmt++;
+ }
+ if (*fmt == '0')
+ {
+ pad = '0';
+ fmt++;
+ }
+ while (*fmt >= '0' && *fmt <= '9')
+ {
+ width = width * 10 + (*fmt++ - '0');
+ }
+ if (*fmt == 'l')
+ {
+ fmt++; /* 32-bit already: %lu == %u here */
+ }
+ spec = *fmt;
+ if (spec != '\0')
+ {
+ fmt++;
+ }
+ switch (spec)
+ {
+ case 's':
+ out = str_pad(out, va_arg(args, const char*), width, left, ' ');
+ break;
+ case 'c':
+ *out++ = (char)va_arg(args, int);
+ break;
+ case 'd':
+ {
+ long v = va_arg(args, long);
+ u32_to_str((uint32_t)((v < 0) ? -v : v), num, 10, v < 0);
+ out = str_pad(out, num, width, left, pad);
+ break;
+ }
+ case 'u':
+ u32_to_str(va_arg(args, unsigned long), num, 10, 0);
+ out = str_pad(out, num, width, left, pad);
+ break;
+ case 'x':
+ case 'X':
+ u32_to_str(va_arg(args, unsigned long), num, 16, 0);
+ out = str_pad(out, num, width, left, pad);
+ break;
+ case '%':
+ *out++ = '%';
+ break;
+ default:
+ *out++ = '%';
+ if (spec != '\0')
+ {
+ *out++ = spec;
+ }
+ break;
+ }
+ }
+ }
+ va_end(args);
+ *out = '\0';
+ cli_write(s_txBuf);
+}
+
+/* ------------------------------------------------------------------ */
+/* Commands */
+/* ------------------------------------------------------------------ */
+
+typedef void (*CliCmdHandler_t)(int argc, char* argv[]);
+
+typedef struct
+{
+ const char* name;
+ const char* help;
+ CliCmdHandler_t handler;
+} CliCmd_t;
+
+static uint8_t s_otaMode; /* 1 = OTA binary frame mode */
+
+static void CmdHelp(int argc, char* argv[]);
+
+static void CmdVersion(int argc, char* argv[])
+{
+ (void)argc;
+ (void)argv;
+ cli_printf("bootloader version: %s (download mode)\r\n", BOOT_FW_VERSION);
+ cli_printf("SystemCoreClock = %lu Hz\r\n", (unsigned long)SystemCoreClock);
+}
+
+/**
+ * @brief "devinfo": report the bank the NEXT OTA would replace, using the
+ * same "cur bank: APP" line the application prints - the PC
+ * updater picks the payload for the other bank, which is exactly
+ * the boot's OTA target rule (inactive bank; APP1 when the
+ * bootsetting record is invalid).
+ */
+static void CmdDevInfo(int argc, char* argv[])
+{
+ const caiic_bootsetting_t* bs = (const caiic_bootsetting_t*)CAIIC_BOOTSETTING_ADDR;
+ uint32_t active;
+ uint8_t bs_ok;
+ (void)argc;
+ (void)argv;
+
+ bs_ok = (bs->magic == CAIIC_BOOT_MAGIC &&
+ bs->crc32 == caiic_crc32((const uint8_t*)bs,
+ (uint32_t)offsetof(caiic_bootsetting_t, crc32))) ? 1 : 0;
+ active = bs->active_bank;
+
+ cli_printf("bootloader: %s, download mode\r\n", BOOT_FW_VERSION);
+ if (!bs_ok)
+ {
+ cli_write("bootsetting: INVALID - OTA targets APP1\r\n");
+ active = CAIIC_ACTIVE_BANK2; /* report the bank NOT targeted */
+ }
+ cli_printf("cur bank: APP%lu\r\n", (unsigned long)active);
+ cli_printf("uptime: %lu s\r\n", (unsigned long)(boot_millis() / 1000u));
+}
+
+/**
+ * @brief "ota": enter the OTA binary frame mode (0xCA frames on the raw
+ * stream, framed RSP on TX). The marker line is the host's go-ahead.
+ * Exits: OTA_ABORT frame, 3 s idle, or reset after OTA_END.
+ */
+static void CmdOta(int argc, char* argv[])
+{
+ (void)argc;
+ (void)argv;
+
+ cli_write("[ota] binary mode ON - send 0xCA OTA frames now\r\n"
+ "(ble_protocol.md section 6.6; OTA_ABORT or 3s idle exits)\r\n");
+ s_otaMode = 1;
+}
+
+static void CmdReset(int argc, char* argv[])
+{
+ (void)argc;
+ (void)argv;
+
+ cli_write("resetting...\r\n");
+ boot_delay_ms(200u);
+ NVIC_SystemReset();
+}
+
+static void CmdUartInfo(int argc, char* argv[])
+{
+ (void)argc;
+ (void)argv;
+
+ cli_write("usart1: TX=PB6 RX=PB7 (AF4)\r\n");
+ cli_write("baud: 460800, 8 data bits, no parity, 1 stop bit\r\n");
+ cli_write("flow control: none; tx: polled; rx: DMA ring (3KB, polled)\r\n");
+}
+
+static const CliCmd_t s_cmds[] = {
+ {"help", "help [cmd]: list commands / show one command's help", CmdHelp},
+ {"version", "show bootloader version", CmdVersion},
+ {"devinfo", "show boot info + cur bank (OTA writes the OTHER bank)", CmdDevInfo},
+ {"bsdump", "bsdump: show bootsetting record + crc check", AppBootset_CmdBsdump},
+ {"bsset", "bsset : write bootsetting field (careful!)", AppBootset_CmdBsset},
+ {"appsw", "appsw [1|2]: switch boot bank (crc verified) + reboot", AppBootset_CmdAppswitch},
+ {"ota", "ota: UART enters OTA binary frame mode (see help ota)", CmdOta},
+ {"reset", "reset: system reset (reboot)", CmdReset},
+ {"uartinfo", "uartinfo: show USART1 pins/baud/format", CmdUartInfo},
+};
+
+#define CLI_CMD_COUNT (sizeof(s_cmds) / sizeof(s_cmds[0]))
+
+static void CmdHelp(int argc, char* argv[])
+{
+ uint32_t i;
+
+ if (argc >= 2)
+ {
+ for (i = 0; i < CLI_CMD_COUNT; i++)
+ {
+ if (strcmp(argv[1], s_cmds[i].name) == 0)
+ {
+ cli_printf(" %-8s %s\r\n", s_cmds[i].name, s_cmds[i].help);
+ return;
+ }
+ }
+ cli_printf("unknown command: %s (try 'help')\r\n", argv[1]);
+ return;
+ }
+
+ cli_write("commands:\r\n");
+ for (i = 0; i < CLI_CMD_COUNT; i++)
+ {
+ cli_printf(" %-8s %s\r\n", s_cmds[i].name, s_cmds[i].help);
+ }
+}
+
+/* ------------------------------------------------------------------ */
+/* Line parsing / dispatch */
+/* ------------------------------------------------------------------ */
+
+static int cli_exec_line(char* line)
+{
+ char* argv[CLI_MAX_ARGS];
+ int argc = 0;
+ char* p = line;
+ uint32_t i;
+
+ while (*p != '\0' && argc < CLI_MAX_ARGS)
+ {
+ while (*p == ' ' || *p == '\t')
+ {
+ p++;
+ }
+ if (*p == '\0')
+ {
+ break;
+ }
+ argv[argc++] = p;
+ while (*p != '\0' && *p != ' ' && *p != '\t')
+ {
+ p++;
+ }
+ if (*p != '\0')
+ {
+ *p++ = '\0';
+ }
+ }
+
+ if (argc == 0)
+ {
+ return 0;
+ }
+
+ for (i = 0; i < CLI_CMD_COUNT; i++)
+ {
+ if (strcmp(argv[0], s_cmds[i].name) == 0)
+ {
+ s_cmds[i].handler(argc, argv);
+ return 0;
+ }
+ }
+
+ cli_printf("unknown command: %s (try 'help')\r\n", argv[0]);
+ return 1;
+}
+
+/* ------------------------------------------------------------------ */
+/* Download-mode superloop */
+/* ------------------------------------------------------------------ */
+
+#define BOOT_CLI_PROMPT "caiic->" /* wire-compatible with the app CLI */
+
+/**
+ * @brief Download-mode main loop. Never returns (leaves via reset only).
+ */
+void boot_cli_run(void)
+{
+ static char s_line[CLI_LINE_SIZE];
+ uint8_t len = 0;
+ uint32_t otaLastRx = 0;
+
+ cli_write("\r\nCLI ready (bootloader download mode). Type 'help' for commands.\r\n"
+ BOOT_CLI_PROMPT);
+
+ for (;;)
+ {
+ uint8_t ch;
+
+ /* deferred post-OTA_END reset (waits until the RSP drained) */
+ app_ota_reset_poll();
+
+ /* OTA binary-mode fallback exit after 3 s of silence */
+ if (s_otaMode && (boot_millis() - otaLastRx) > OTA_IDLE_EXIT_MS)
+ {
+ s_otaMode = 0;
+ app_ota_chan_idle();
+ cli_write("\r\n[ota] binary mode OFF (idle)\r\n" BOOT_CLI_PROMPT);
+ len = 0;
+ }
+
+ if (boot_usart_read(&ch) == 0)
+ {
+ continue;
+ }
+
+ if (s_otaMode)
+ {
+ otaLastRx = boot_millis();
+ if (app_ota_chan_rx_uart(ch) != 0)
+ {
+ s_otaMode = 0;
+ cli_write("\r\n[ota] binary mode OFF (abort)\r\n" BOOT_CLI_PROMPT);
+ len = 0;
+ }
+ continue;
+ }
+
+ switch (ch)
+ {
+ case '\r':
+ case '\n':
+ cli_write("\r\n");
+ s_line[len] = '\0';
+ (void)cli_exec_line(s_line);
+ len = 0;
+ cli_write(BOOT_CLI_PROMPT);
+ break;
+
+ case '\b':
+ case 0x7F:
+ if (len != 0u)
+ {
+ len--;
+ cli_write("\b \b");
+ }
+ break;
+
+ default:
+ if (ch >= 0x20u && len < CLI_LINE_SIZE - 1u)
+ {
+ s_line[len++] = (char)ch;
+ boot_usart_write(&ch, 1); /* echo */
+ }
+ break;
+ }
+ }
+}
diff --git a/Boot/src/boot_usart.c b/Boot/src/boot_usart.c
new file mode 100644
index 0000000..f0634e0
--- /dev/null
+++ b/Boot/src/boot_usart.c
@@ -0,0 +1,152 @@
+/**
+ * @file boot_usart.c
+ * @brief Bootloader USART1 (bare metal): polling TX, RX DMA circular ring
+ * (polled, no interrupts) and a SysTick-polled millisecond time base.
+ *
+ * The RX DMA ring matters during OTA: Qflash erase/write disables interrupts
+ * for tens of ms per sector; at 460800 Bd that is ~2KB of inbound bytes the
+ * DMA keeps sampling while the CPU sits in the flash algorithm.
+ */
+#include "boot_usart.h"
+#include "n32wb03x.h"
+
+#define BOOT_USARTx USART1
+#define BOOT_USART_CLK RCC_APB2_PERIPH_USART1
+#define BOOT_USART_GPIO GPIOB
+#define BOOT_USART_GPIO_CLK RCC_APB2_PERIPH_GPIOB
+#define BOOT_USART_TX_PIN GPIO_PIN_6
+#define BOOT_USART_RX_PIN GPIO_PIN_7
+#define BOOT_USART_TX_GPIO_AF GPIO_AF4_USART1
+#define BOOT_USART_RX_GPIO_AF GPIO_AF4_USART1
+#define BOOT_USART_BAUDRATE 460800u
+
+/* RX DMA channel: circular into the ring (remap required on this chip) */
+#define BOOT_USART_RX_DMA_CH DMA_CH2
+#define BOOT_USART_RX_DMA_REMAP DMA_REMAP_USART1_RX
+#define BOOT_USART_DAT_ADDR (USART1_BASE + 0x04)
+
+#define RX_RING_SIZE 3072u /* ~69ms @460800, covers flash erase */
+
+static uint8_t s_rxRing[RX_RING_SIZE];
+static volatile uint16_t s_rxTail; /* software drain position */
+
+/* SysTick-polled millisecond base (no interrupt: the superloop polls
+ * boot_millis() far more often than 1ms, COUNTFLAG latches each wrap) */
+static volatile uint32_t s_millis;
+
+uint32_t boot_millis(void)
+{
+ if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) != 0u)
+ {
+ /* reading CTRL clears COUNTFLAG; a slow poll (flash erase) can
+ * undercount - acceptable for the timeouts this drives */
+ s_millis++;
+ }
+ return s_millis;
+}
+
+void boot_delay_ms(uint32_t ms)
+{
+ uint32_t start = boot_millis();
+
+ while ((boot_millis() - start) < ms)
+ {
+ }
+}
+
+/**
+ * @brief DMA ring head (hardware write position).
+ */
+static uint16_t boot_usart_rx_head(void)
+{
+ return (uint16_t)(RX_RING_SIZE - DMA_GetCurrDataCounter(BOOT_USART_RX_DMA_CH));
+}
+
+/**
+ * @brief Initialize USART1 (460800 8N1) on PB6(TX)/PB7(RX), the RX DMA
+ * circular ring and the SysTick millisecond base.
+ */
+void boot_usart_init(void)
+{
+ GPIO_InitType GPIO_InitStructure;
+ USART_InitType USART_InitStructure;
+ DMA_InitType DMA_InitStructure;
+
+ RCC_EnableAPB2PeriphClk(BOOT_USART_GPIO_CLK, ENABLE);
+ RCC_EnableAPB2PeriphClk(BOOT_USART_CLK, ENABLE);
+
+ GPIO_InitStruct(&GPIO_InitStructure);
+ GPIO_InitStructure.Pin = BOOT_USART_TX_PIN;
+ GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStructure.GPIO_Alternate = BOOT_USART_TX_GPIO_AF;
+ GPIO_InitPeripheral(BOOT_USART_GPIO, &GPIO_InitStructure);
+
+ GPIO_InitStructure.Pin = BOOT_USART_RX_PIN;
+ GPIO_InitStructure.GPIO_Alternate = BOOT_USART_RX_GPIO_AF;
+ GPIO_InitPeripheral(BOOT_USART_GPIO, &GPIO_InitStructure);
+
+ USART_InitStructure.BaudRate = BOOT_USART_BAUDRATE;
+ USART_InitStructure.WordLength = USART_WL_8B;
+ USART_InitStructure.StopBits = USART_STPB_1;
+ USART_InitStructure.Parity = USART_PE_NO;
+ USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE;
+ USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX;
+ USART_Init(BOOT_USARTx, &USART_InitStructure);
+
+ /* RX: DMA circular ring, drained by polling (no IDLE interrupt here) */
+ RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_DMA, ENABLE);
+ DMA_EnableChannel(BOOT_USART_RX_DMA_CH, DISABLE);
+ DMA_DeInit(BOOT_USART_RX_DMA_CH);
+ DMA_RequestRemap(BOOT_USART_RX_DMA_REMAP, DMA, BOOT_USART_RX_DMA_CH, ENABLE);
+
+ DMA_InitStructure.PeriphAddr = BOOT_USART_DAT_ADDR;
+ DMA_InitStructure.MemAddr = (uint32_t)s_rxRing;
+ DMA_InitStructure.Direction = DMA_DIR_PERIPH_SRC;
+ DMA_InitStructure.BufSize = RX_RING_SIZE;
+ DMA_InitStructure.PeriphInc = DMA_PERIPH_INC_DISABLE;
+ DMA_InitStructure.DMA_MemoryInc = DMA_MEM_INC_ENABLE;
+ DMA_InitStructure.PeriphDataSize = DMA_PERIPH_DATA_SIZE_BYTE;
+ DMA_InitStructure.MemDataSize = DMA_MemoryDataSize_Byte;
+ DMA_InitStructure.CircularMode = DMA_MODE_CIRCULAR;
+ DMA_InitStructure.Priority = DMA_PRIORITY_HIGH;
+ DMA_InitStructure.Mem2Mem = DMA_M2M_DISABLE;
+ DMA_Init(BOOT_USART_RX_DMA_CH, &DMA_InitStructure);
+
+ s_rxTail = 0;
+ DMA_EnableChannel(BOOT_USART_RX_DMA_CH, ENABLE);
+ USART_EnableDMA(BOOT_USARTx, USART_DMAREQ_RX, ENABLE);
+
+ USART_Enable(BOOT_USARTx, ENABLE);
+
+ /* 1ms tick: 64MHz / 1000; polled via COUNTFLAG, no interrupt */
+ SysTick->LOAD = 64000u - 1u;
+ SysTick->VAL = 0u;
+ SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk;
+ s_millis = 0;
+}
+
+void boot_usart_write(const uint8_t* data, uint16_t len)
+{
+ uint16_t i;
+
+ for (i = 0; i < len; i++)
+ {
+ USART_SendData(BOOT_USARTx, data[i]);
+ while (USART_GetFlagStatus(BOOT_USARTx, USART_FLAG_TXDE) == RESET)
+ {
+ }
+ }
+}
+
+int boot_usart_read(uint8_t* ch)
+{
+ uint16_t head = boot_usart_rx_head();
+
+ if (s_rxTail == head)
+ {
+ return 0;
+ }
+ *ch = s_rxRing[s_rxTail];
+ s_rxTail = (uint16_t)((s_rxTail + 1u) % RX_RING_SIZE);
+ return 1;
+}
diff --git a/Boot/src/boot_usart.h b/Boot/src/boot_usart.h
new file mode 100644
index 0000000..80bf966
--- /dev/null
+++ b/Boot/src/boot_usart.h
@@ -0,0 +1,38 @@
+/**
+ * @file boot_usart.h
+ * @brief Bootloader USART1 support (bare metal, no RTOS, no interrupts):
+ * polling TX, RX via DMA circular ring polled through the DMA write
+ * pointer (bytes keep landing while Qflash erases with interrupts
+ * disabled), plus a SysTick-polled millisecond time base.
+ * TX=PB6, RX=PB7, 460800 8N1 (same as the application CLI).
+ */
+#ifndef __BOOT_USART_H__
+#define __BOOT_USART_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include
+
+/** USART1 + RX DMA ring + SysTick 1ms time base. */
+void boot_usart_init(void);
+
+/** Blocking polled TX of a buffer. */
+void boot_usart_write(const uint8_t* data, uint16_t len);
+
+/** Non-blocking RX: fetch one byte from the DMA ring. @return 1 on success. */
+int boot_usart_read(uint8_t* ch);
+
+/** Milliseconds since boot_usart_init() (SysTick COUNTFLAG polled; call
+ * often - the superloop and the download-mode window both poll it). */
+uint32_t boot_millis(void);
+
+/** Busy-wait delay in ms (uses boot_millis()). */
+void boot_delay_ms(uint32_t ms);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __BOOT_USART_H__ */
diff --git a/Boot/src/boot_version.h b/Boot/src/boot_version.h
new file mode 100644
index 0000000..2201168
--- /dev/null
+++ b/Boot/src/boot_version.h
@@ -0,0 +1,11 @@
+/**
+ * @file boot_version.h
+ * @brief Bootloader version (independent from the application version in
+ * mcm-ddc-ble/inc/app_version.h; bump when the boot code changes).
+ */
+#ifndef __BOOT_VERSION_H__
+#define __BOOT_VERSION_H__
+
+#define BOOT_FW_VERSION "V1.01.00"
+
+#endif /* __BOOT_VERSION_H__ */
diff --git a/Boot/src/cli_core.h b/Boot/src/cli_core.h
new file mode 100644
index 0000000..261f7e4
--- /dev/null
+++ b/Boot/src/cli_core.h
@@ -0,0 +1,24 @@
+/**
+ * @file cli_core.h
+ * @brief Bootloader-side shim of the application's CLI output interface
+ * (mcm-ddc-ble/inc/cli_core.h). Only the output helpers exist here;
+ * the download-mode line editor and command table live in
+ * boot_cli.c. Lets shared modules (app_bootset.c, app_ota.c) compile
+ * unchanged in the BOOT_FIRMWARE build.
+ */
+#ifndef __CLI_CORE_H__
+#define __CLI_CORE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Output helpers: straight out on USART1 (polling TX, boot_usart.c) */
+void cli_write(const char* str);
+void cli_printf(const char* fmt, ...);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CLI_CORE_H__ */
diff --git a/Boot/src/main.c b/Boot/src/main.c
index 6044163..cabd916 100644
--- a/Boot/src/main.c
+++ b/Boot/src/main.c
@@ -1,21 +1,40 @@
/**
* @file main.c
- * @brief CAIIC minimal bootloader: reads the jump address from the
+ * @brief CAIIC bootloader: normally reads the jump address from the
* bootsetting record, remaps vectors and jumps to the application.
+ * With this release it also brings up USART1 and offers a
+ * DOWNLOAD MODE (UART CLI + OTA frame upgrade, see boot_cli.c) for
+ * production download and bricked-device recovery.
*
- * No interrupts, no peripherals: flash is read through the memory map only.
+ * Download mode entry:
+ * 1. press Enter within the 2 s window printed in the boot banner, or
+ * 2. automatic when there is no jumpable image: the bootsetting record
+ * is invalid AND the APP1 vector table fails sanity (SP outside the
+ * usable SRAM window / reset PC outside APP1) - the recovery path.
*
* Policy: the application image CRC is verified during the OTA process
- * (app_ota.c) BEFORE bootsetting is switched - boot itself never validates
- * image contents, it only trusts the bootsetting sector integrity
+ * (app_ota.c) BEFORE bootsetting is switched - the normal boot path never
+ * validates image contents, it only trusts the bootsetting sector integrity
* (magic + own CRC32) and jumps straight to the recorded start_address.
- * A blank/invalid record or an out-of-range address falls back to APP1.
+ * A blank/invalid record falls back to APP1.
*/
#include
+#include
#include "n32wb03x.h"
#include "dfu_layout.h"
#include "boot_crc32.h"
+#include "boot_usart.h"
+#include "boot_version.h"
+
+/* Download-mode entry window after the banner (ms) */
+#define BOOT_DL_WINDOW_MS 2000u
+
+/* Usable SRAM on this silicon: 0x20004000..0x2000BFFF (dev log §47) */
+#define SRAM_SP_MIN 0x20004001u
+#define SRAM_SP_MAX 0x2000C000u
+
+extern void boot_cli_run(void); /* boot_cli.c - never returns */
/**
* @brief Remap the vector table to the app and jump to it. Never returns.
@@ -42,6 +61,27 @@ static void jump_to_app(uint32_t base)
}
}
+/**
+ * @brief Vector-table sanity: word0 = initial SP inside the usable SRAM
+ * window, word1 = reset PC inside [base, base + bank size).
+ */
+static int image_sane(uint32_t base)
+{
+ uint32_t sp = *(volatile uint32_t*)base;
+ uint32_t pc = *(volatile uint32_t*)(base + 4);
+
+ return (sp >= SRAM_SP_MIN && sp <= SRAM_SP_MAX &&
+ pc >= base + 8u && pc < base + CAIIC_APP_BANK_SIZE) ? 1 : 0;
+}
+
+static void puts_boot(const char* s)
+{
+ while (*s != '\0')
+ {
+ boot_usart_write((const uint8_t*)s++, 1);
+ }
+}
+
/**
* @brief Main program.
*/
@@ -49,6 +89,9 @@ int main(void)
{
const caiic_bootsetting_t* bs = (const caiic_bootsetting_t*)CAIIC_BOOTSETTING_ADDR;
uint32_t target = CAIIC_APP1_BASE; /* default when bootsetting invalid */
+ uint8_t bs_ok = 0;
+ uint32_t window_start;
+ uint8_t enter_dl = 0;
/* The jump address comes from the bootsetting record. Only the record's
* own integrity is checked (magic + its own CRC32); the app image itself
@@ -59,13 +102,43 @@ int main(void)
{
const caiic_bank_t* bank = (bs->active_bank == CAIIC_ACTIVE_BANK2) ? &bs->bank2
: &bs->bank1;
+ bs_ok = 1;
if (bank->start_address >= CAIIC_APP1_BASE &&
- bank->start_address < CAIIC_IMAGE_UPDATE_BASE + CAIIC_IMAGE_UPDATE_SIZE)
+ bank->start_address < CAIIC_APP2_BASE + CAIIC_APP_BANK_SIZE)
{
target = bank->start_address;
}
}
+ boot_usart_init();
+ puts_boot("\r\n[boot] CAIIC-BOOT " BOOT_FW_VERSION
+ " - Enter within 2s: download mode\r\n");
+
+ /* Entry 1: Enter key inside the window */
+ window_start = boot_millis();
+ while ((boot_millis() - window_start) < BOOT_DL_WINDOW_MS)
+ {
+ uint8_t ch;
+ if (boot_usart_read(&ch) != 0 && (ch == '\r' || ch == '\n'))
+ {
+ enter_dl = 1;
+ break;
+ }
+ }
+
+ /* Entry 2 (recovery): no jumpable image at all */
+ if (!enter_dl && !bs_ok && !image_sane(CAIIC_APP1_BASE))
+ {
+ enter_dl = 1;
+ puts_boot("[boot] no valid app image, forced download mode\r\n");
+ }
+
+ if (enter_dl)
+ {
+ puts_boot("[boot] DOWNLOAD MODE (ota/cli over UART, 'help' for commands)\r\n");
+ boot_cli_run(); /* never returns */
+ }
+
jump_to_app(target);
for (;;)
diff --git a/Boot/src/ota_wire.h b/Boot/src/ota_wire.h
new file mode 100644
index 0000000..8f24d37
--- /dev/null
+++ b/Boot/src/ota_wire.h
@@ -0,0 +1,42 @@
+/**
+ * @file ota_wire.h
+ * @brief 0xCA frame protocol wire constants, shared by the application
+ * (mcm-ddc-ble, see app_ble_proto.h) and the bootloader download
+ * mode (Boot/). Single source of truth: values are protocol-fixed
+ * by docs/ble_protocol.md - never change a value, only add new ones.
+ */
+#ifndef __OTA_WIRE_H__
+#define __OTA_WIRE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Frame types */
+#define BLE_FRAME_SOF 0xCA /* frame start byte */
+#define BLE_FRAME_HDR_LEN 5u /* SOF+TYPE+SEQ+LEN(2) */
+#define BLE_FRAME_CLI_REQ 0x01 /* phone -> device: one command line */
+#define BLE_FRAME_CLI_RSP 0x02 /* device -> phone: response text chunk */
+#define BLE_FRAME_CLI_RSP_END 0x03 /* device -> phone: {status u8} */
+#define BLE_FRAME_OTA_BEGIN 0x10 /* phone -> device: {size, crc32, version} */
+#define BLE_FRAME_OTA_DATA 0x11 /* phone -> device: {offset, data...} */
+#define BLE_FRAME_OTA_END 0x12 /* phone -> device: {crc32} */
+#define BLE_FRAME_OTA_ABORT 0x13 /* phone -> device: abort session (no payload) */
+#define BLE_FRAME_OTA_RSP 0x1F /* device -> phone: {cmd, status, offset} */
+#define BLE_FRAME_INFO_QUERY 0x20 /* phone -> device: {item_id}*n (empty/0xFF = all) */
+#define BLE_FRAME_INFO_RSP 0x21 /* device -> phone: TLV {id, len, value}*n */
+
+/* OTA_RSP / generic status codes */
+#define BLE_OTA_ST_OK 0
+#define BLE_OTA_ST_BAD_FRAME 1
+#define BLE_OTA_ST_BAD_STATE 2 /* bad state / bad offset sequence */
+#define BLE_OTA_ST_SIZE_TOO_BIG 3
+#define BLE_OTA_ST_CRC_FAIL 4
+#define BLE_OTA_ST_FLASH_FAIL 5
+#define BLE_OTA_ST_BANK_MISMATCH 6 /* image linked for the wrong bank */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __OTA_WIRE_H__ */
diff --git a/docs/ble_protocol.md b/docs/ble_protocol.md
index be441fe..9fcf4c0 100644
--- a/docs/ble_protocol.md
+++ b/docs/ble_protocol.md
@@ -217,6 +217,44 @@ version, flags u32}`,`flags` bit0 = STREAM。仅 UART 通道生效(BLE 通
主机参考实现:`tools\ble_ota_update.py` 的 `ota_session_uart_stream()`
(`--uart` 默认流式,`--lockstep` 回旧模式)。
+## 6.8 Bootloader download 模式(Boot V1.01.00 起,搭配 APP ≥ V1.00.28)
+
+Boot 不再只是跳转器:复位后初始化 USART1(460800 8N1,与 APP 一致),
+打印 boot banner 并给 **2s 窗口**;窗口内收到回车即进入 **download 模式**。
+此外当 bootsetting 无效 **且** APP1 向量表 sanity 检查(SP 在可用 SRAM
+窗口内、复位 PC 落在 APP1 bank 内)不过时**自动进入**(救砖路径)。
+
+download 模式为裸机 superloop(无 RTOS/BLE),提供 CLI 子集:
+
+| 命令 | 说明 |
+|---|---|
+| `help` / `version` / `uartinfo` | 与 APP 同义(version 报 boot 自身版本) |
+| `devinfo` | 打印 `cur bank: APP`:n = bootsetting 的 active bank(记录无效时报告 APP2,表示 OTA 将写 APP1) |
+| `bsdump` / `bsset` / `appsw` | 与 APP 完全相同(复用 app_bootset.c) |
+| `ota` | 进入 0xCA 二进制帧模式,语义与 APP 完全一致:先打印 `[ota] binary mode ON` 标记行;OTA_ABORT 立即退出 / 3s 空闲退出 / OTA_END 成功且应答送达后复位 |
+| `reset` | 复位 |
+
+**与 APP 侧的唯一语义差异**——目标 bank 选择:Boot 自身不运行在任一
+bank,OTA 目标 = bootsetting 的**非活动区**(OTA_END 后翻转 active 指向
+新区);bootsetting 无效时目标 = APP1。`devinfo` 按同一规则报告
+"cur bank",因此 **`tools\ble_ota_update.py --uart` 对 Boot 零改动可用**:
+脚本读到的 cur bank 的"另一侧"恰是 boot 的写入目标。
+
+实现要点(对后续维护者):
+
+- OTA 引擎直接编译共享 `mcm-ddc-ble/src/app_ota.c`(`BOOT_FIRMWARE` 宏隔离
+ FreeRTOS/BLE 依赖,tick 用 SysTick 轮询 millis,UART sink 用阻塞轮询 TX);
+ 帧常量单一来源为 `Boot/src/ota_wire.h`(APP 的 `app_ble_proto.h` 包含它);
+- RX 为 DMA 环形缓冲(3KB,裸机轮询 DMA 写指针,无中断),保证扇区擦除
+ 关中断窗口内不丢字节(§6.7 的同一前提);流式模式在 Boot 同样生效;
+- Boot 尺寸预算 16KB:当前 ~12.9KB;`merge_image.py` 对 boot bin 超 16KB
+ 硬卡(出包失败);
+- Boot 不启用看门狗(避免 APP 启动早期被 Boot 遗留的 IWDG 误杀,APP 的
+ IWDG 由 §50 自管);download 模式为有人值守场景,卡死靠断电重启。
+
+注意:**Boot 不能被 OTA 更新**(OTA 只写 APP bank);升级 Boot 只能 SWD
+烧整片包。已出厂设备的旧 Boot(无 download 模式)不受影响,照常跳转。
+
## 6.5 维护命令:bootsetting 与 APP_DATA 参数区(V1.00.09 起,结构化访问;V1.00.10 起参数命令为 appget/appset;V1.00.11 起新增 reset/factory/uartrst/uartinfo)
bootsetting 与 APP_DATA 保留区(0x01006000/8KB)的读写以 CLI 命令形式提供,
diff --git a/docs/开发日志.md b/docs/开发日志.md
index 47a6eab..e699ccd 100644
--- a/docs/开发日志.md
+++ b/docs/开发日志.md
@@ -1326,3 +1326,49 @@ APP2 链接的镜像发向 APP1 区。设备端 END 校验(向量表 Reset PC
(APP 自理,§50)。
- 风险提示:Boot 16KB 尺寸预算紧张(printf + USART/DMA/GPIO/RCC 驱动 +
qflash + OTA 引擎 + CLI),构建后核对 map 是否越界,越界则裁剪命令。
+
+## 52. Boot download 模式:实现与实测(2026-09-05,Boot V1.01.00 / APP V1.00.28)
+
+- 实现(设计见 §51,一处变更:Boot 内**不启用 IWDG**——download 模式遗留的
+ IWDG 会在 APP 启动早期(app_wdt_init 之前)误杀,APP 看门狗由 §50 自管;
+ download 为有人值守场景,卡死靠断电):
+ - `Boot/src/boot_usart.c/h`:USART1 460800 8N1 裸机驱动——TX 轮询、RX
+ **DMA CH2 环形 3KB**(裸机轮询 DMA 写指针,无中断;扇区擦除关中断窗口
+ 不丢字节,流式 OTA 的前提)、SysTick 轮询 millis(COUNTFLAG,无中断);
+ - `Boot/src/ota_wire.h`:0xCA 帧类型/OTA 状态码的**单一来源**共享头,
+ APP 的 `app_ble_proto.h` 改为包含它(协议常量不再两处定义);
+ - `mcm-ddc-ble/src/app_ota.c`、`app_bootset.c`:**不复制副本**,加
+ `BOOT_FIRMWARE` 宏双构建——隔离 FreeRTOS tick(boot 用 millis)/
+ BLE legacy 应答路径/BLE 通道函数/bsp_usart(boot 用阻塞轮询 TX);
+ Boot 下 OTA 目标 bank = bootsetting 非活动区(记录无效时 APP1);
+ - `Boot/src/cli_core.h`(shim,仅 cli_write/cli_printf)+ `boot_cli.c`:
+ 轮询行编辑器(回显/退格)+ 迷你 printf(无 libc printf 依赖,支持
+ %s/%-8s/%08lX 等)+ 命令子集(help/version/devinfo/bsdump/bsset/appsw/
+ ota/reset/uartinfo,后三个复用 app_bootset.c);
+ - `Boot/src/main.c`:banner(`[boot] CAIIC-BOOT V1.01.00 - Enter within
+ 2s: download mode`)→ 2s 回车窗口;bootsetting 无效**且** APP1 向量表
+ sanity(SP∈0x20004001~0x2000C000、复位 PC∈APP1 bank)不过 → 自动进入
+ download 模式;否则按原逻辑跳转;
+ - uvprojx:加 boot_usart/boot_cli + 共享 app_ota/app_bootset + 5 个 SDK
+ 驱动(rcc/gpio/usart/dma/qflash),宏 `BOOT_FIRMWARE`,include 路径
+ `..\src` 先于 `..\..\mcm-ddc-ble\inc`(shim 生效);
+ - `merge_image.py`:boot bin 超 16KB 硬卡 + boot 栈顶悬崖校验。
+- **PC 脚本零改动兼容**的关键:boot CLI 提示符同为 `caiic->`、`devinfo`
+ 按"OTA 目标的对侧"打印 `cur bank: APP`、`ota` 打印同一
+ `[ota] binary mode ON` 标记行——`ble_ota_update.py --uart` 的探活/选包/
+ 握手流程原样命中。
+- 尺寸:Boot `Code=10254 RO-data=2574 RW-data=96 ZI-data=6648`,bin 12924B
+ (16KB 区余 3.4KB);`__initial_sp=0x20005A58`,远离 0x2000C000 悬崖。
+ APP 行为不变(V1.00.28,基线与 V1.00.27 相同)。
+- 实测(COM4 460800 + SWD)全部 PASS:
+ 1. 正常启动:窗口超时自动跳 APP(SWD 读 xTickCount 持续增长);
+ 2. 窗口内回车 → download 模式,help/version/devinfo/bsdump 全部正常;
+ 3. download 模式下 `ble_ota_update.py --uart` 流式写 **APP2**:
+ 27.3 kB/s、2.3s、0 回退,复位后运行 APP2(PASS);
+ 4. 再次 download 模式写 **APP1**(往返):同样 PASS,板子回到 APP1;
+ 5. **救砖路径**:SWD 擦除 bootsetting + APP1 首扇区模拟变砖 → 复位后
+ 自动进 download 模式(devinfo 报 "bootsetting: INVALID - OTA targets
+ APP1")→ 脚本写入 APP1 并重建 bootsetting → 复位进 APP1(PASS)。
+- 协议文档:`docs/ble_protocol.md` §6.8。注意 **Boot 本身不能被 OTA 更新**
+ (OTA 只写 APP bank),升级 Boot 只能 SWD 整片包;已出厂设备的旧 Boot
+ 无 download 模式,功能不受影响。
diff --git a/mcm-ddc-ble/MDK-ARM/Listings-app2/mcm-ddc-ble-app2.map b/mcm-ddc-ble/MDK-ARM/Listings-app2/mcm-ddc-ble-app2.map
index c1e9b34..9a26898 100644
--- a/mcm-ddc-ble/MDK-ARM/Listings-app2/mcm-ddc-ble-app2.map
+++ b/mcm-ddc-ble/MDK-ARM/Listings-app2/mcm-ddc-ble-app2.map
@@ -4879,122 +4879,122 @@ Memory Map of the image
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x01024000 0x01024000 0x000000c0 Data RO 3 RESET startup_n32wb03x.o
- 0x010240c0 0x010240c0 0x00000000 Code RO 6355 * .ARM.Collect$$$$00000000 mc_p.l(entry.o)
- 0x010240c0 0x010240c0 0x00000004 Code RO 6724 .ARM.Collect$$$$00000001 mc_p.l(entry2.o)
- 0x010240c4 0x010240c4 0x00000004 Code RO 6727 .ARM.Collect$$$$00000004 mc_p.l(entry5.o)
- 0x010240c8 0x010240c8 0x00000000 Code RO 6729 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o)
- 0x010240c8 0x010240c8 0x00000000 Code RO 6731 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o)
- 0x010240c8 0x010240c8 0x00000008 Code RO 6732 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o)
- 0x010240d0 0x010240d0 0x00000000 Code RO 6734 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o)
- 0x010240d0 0x010240d0 0x00000000 Code RO 6736 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o)
- 0x010240d0 0x010240d0 0x00000004 Code RO 6725 .ARM.Collect$$$$00002712 mc_p.l(entry2.o)
+ 0x010240c0 0x010240c0 0x00000000 Code RO 6358 * .ARM.Collect$$$$00000000 mc_p.l(entry.o)
+ 0x010240c0 0x010240c0 0x00000004 Code RO 6727 .ARM.Collect$$$$00000001 mc_p.l(entry2.o)
+ 0x010240c4 0x010240c4 0x00000004 Code RO 6730 .ARM.Collect$$$$00000004 mc_p.l(entry5.o)
+ 0x010240c8 0x010240c8 0x00000000 Code RO 6732 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o)
+ 0x010240c8 0x010240c8 0x00000000 Code RO 6734 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o)
+ 0x010240c8 0x010240c8 0x00000008 Code RO 6735 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o)
+ 0x010240d0 0x010240d0 0x00000000 Code RO 6737 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o)
+ 0x010240d0 0x010240d0 0x00000000 Code RO 6739 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o)
+ 0x010240d0 0x010240d0 0x00000004 Code RO 6728 .ARM.Collect$$$$00002712 mc_p.l(entry2.o)
0x010240d4 0x010240d4 0x0000000e Code RO 10 .emb_text system_n32wb03x.o
0x010240e2 0x010240e2 0x00000002 PAD
- 0x010240e4 0x010240e4 0x0000000c Code RO 4672 .emb_text n32wb03x_it.o
- 0x010240f0 0x010240f0 0x00000078 Code RO 6286 .emb_text port.o
+ 0x010240e4 0x010240e4 0x0000000c Code RO 4675 .emb_text n32wb03x_it.o
+ 0x010240f0 0x010240f0 0x00000078 Code RO 6289 .emb_text port.o
0x01024168 0x01024168 0x0000001c Code RO 4 .text startup_n32wb03x.o
- 0x01024184 0x01024184 0x0000002c Code RO 6358 .text mc_p.l(uidiv.o)
- 0x010241b0 0x010241b0 0x00000028 Code RO 6360 .text mc_p.l(idiv.o)
- 0x010241d8 0x010241d8 0x00000060 Code RO 6362 .text mc_p.l(uldiv.o)
- 0x01024238 0x01024238 0x0000000c Code RO 6364 .text mc_p.l(tolower.o)
- 0x01024244 0x01024244 0x00000024 Code RO 6366 .text mc_p.l(rand.o)
- 0x01024268 0x01024268 0x00000024 Code RO 6369 .text mc_p.l(memcpya.o)
- 0x0102428c 0x0102428c 0x00000024 Code RO 6371 .text mc_p.l(memseta.o)
- 0x010242b0 0x010242b0 0x0000000e Code RO 6373 .text mc_p.l(strlen.o)
- 0x010242be 0x010242be 0x0000001c Code RO 6375 .text mc_p.l(strcmp.o)
- 0x010242da 0x010242da 0x00000014 Code RO 6377 .text mc_p.l(memchr.o)
- 0x010242ee 0x010242ee 0x0000001a Code RO 6379 .text mc_p.l(memcmp.o)
- 0x01024308 0x01024308 0x00000012 Code RO 6381 .text mc_p.l(strcpy.o)
- 0x0102431a 0x0102431a 0x0000001e Code RO 6383 .text mc_p.l(strncmp.o)
- 0x01024338 0x01024338 0x0000003c Code RO 6676 .text mc_p.l(__0sscanf.o)
- 0x01024374 0x01024374 0x00000374 Code RO 6678 .text mc_p.l(scanf_fp.o)
- 0x010246e8 0x010246e8 0x00000076 Code RO 6682 .text mc_p.l(strtoul.o)
- 0x0102475e 0x0102475e 0x000000b2 Code RO 6684 .text mf_p.l(fadd.o)
- 0x01024810 0x01024810 0x0000007a Code RO 6686 .text mf_p.l(fmul.o)
+ 0x01024184 0x01024184 0x0000002c Code RO 6361 .text mc_p.l(uidiv.o)
+ 0x010241b0 0x010241b0 0x00000028 Code RO 6363 .text mc_p.l(idiv.o)
+ 0x010241d8 0x010241d8 0x00000060 Code RO 6365 .text mc_p.l(uldiv.o)
+ 0x01024238 0x01024238 0x0000000c Code RO 6367 .text mc_p.l(tolower.o)
+ 0x01024244 0x01024244 0x00000024 Code RO 6369 .text mc_p.l(rand.o)
+ 0x01024268 0x01024268 0x00000024 Code RO 6372 .text mc_p.l(memcpya.o)
+ 0x0102428c 0x0102428c 0x00000024 Code RO 6374 .text mc_p.l(memseta.o)
+ 0x010242b0 0x010242b0 0x0000000e Code RO 6376 .text mc_p.l(strlen.o)
+ 0x010242be 0x010242be 0x0000001c Code RO 6378 .text mc_p.l(strcmp.o)
+ 0x010242da 0x010242da 0x00000014 Code RO 6380 .text mc_p.l(memchr.o)
+ 0x010242ee 0x010242ee 0x0000001a Code RO 6382 .text mc_p.l(memcmp.o)
+ 0x01024308 0x01024308 0x00000012 Code RO 6384 .text mc_p.l(strcpy.o)
+ 0x0102431a 0x0102431a 0x0000001e Code RO 6386 .text mc_p.l(strncmp.o)
+ 0x01024338 0x01024338 0x0000003c Code RO 6679 .text mc_p.l(__0sscanf.o)
+ 0x01024374 0x01024374 0x00000374 Code RO 6681 .text mc_p.l(scanf_fp.o)
+ 0x010246e8 0x010246e8 0x00000076 Code RO 6685 .text mc_p.l(strtoul.o)
+ 0x0102475e 0x0102475e 0x000000b2 Code RO 6687 .text mf_p.l(fadd.o)
+ 0x01024810 0x01024810 0x0000007a Code RO 6689 .text mf_p.l(fmul.o)
0x0102488a 0x0102488a 0x00000002 PAD
- 0x0102488c 0x0102488c 0x00000164 Code RO 6690 .text mf_p.l(dadd.o)
- 0x010249f0 0x010249f0 0x000000d0 Code RO 6692 .text mf_p.l(dmul.o)
- 0x01024ac0 0x01024ac0 0x000000f0 Code RO 6694 .text mf_p.l(ddiv.o)
- 0x01024bb0 0x01024bb0 0x0000002c Code RO 6696 .text mf_p.l(dscalb.o)
- 0x01024bdc 0x01024bdc 0x0000000e Code RO 6700 .text mf_p.l(ffltui.o)
+ 0x0102488c 0x0102488c 0x00000164 Code RO 6693 .text mf_p.l(dadd.o)
+ 0x010249f0 0x010249f0 0x000000d0 Code RO 6695 .text mf_p.l(dmul.o)
+ 0x01024ac0 0x01024ac0 0x000000f0 Code RO 6697 .text mf_p.l(ddiv.o)
+ 0x01024bb0 0x01024bb0 0x0000002c Code RO 6699 .text mf_p.l(dscalb.o)
+ 0x01024bdc 0x01024bdc 0x0000000e Code RO 6703 .text mf_p.l(ffltui.o)
0x01024bea 0x01024bea 0x00000002 PAD
- 0x01024bec 0x01024bec 0x00000028 Code RO 6702 .text mf_p.l(dflti.o)
- 0x01024c14 0x01024c14 0x0000001c Code RO 6704 .text mf_p.l(dfltui.o)
- 0x01024c30 0x01024c30 0x0000001c Code RO 6706 .text mf_p.l(dfltul.o)
- 0x01024c4c 0x01024c4c 0x00000032 Code RO 6708 .text mf_p.l(ffixi.o)
+ 0x01024bec 0x01024bec 0x00000028 Code RO 6705 .text mf_p.l(dflti.o)
+ 0x01024c14 0x01024c14 0x0000001c Code RO 6707 .text mf_p.l(dfltui.o)
+ 0x01024c30 0x01024c30 0x0000001c Code RO 6709 .text mf_p.l(dfltul.o)
+ 0x01024c4c 0x01024c4c 0x00000032 Code RO 6711 .text mf_p.l(ffixi.o)
0x01024c7e 0x01024c7e 0x00000002 PAD
- 0x01024c80 0x01024c80 0x00000048 Code RO 6712 .text mf_p.l(dfixi.o)
- 0x01024cc8 0x01024cc8 0x00000040 Code RO 6714 .text mf_p.l(dfixul.o)
- 0x01024d08 0x01024d08 0x00000028 Code RO 6716 .text mf_p.l(f2d.o)
- 0x01024d30 0x01024d30 0x00000028 Code RO 6718 .text mf_p.l(cdcmple.o)
- 0x01024d58 0x01024d58 0x00000028 Code RO 6720 .text mf_p.l(cdrcmple.o)
- 0x01024d80 0x01024d80 0x00000038 Code RO 6722 .text mf_p.l(d2f.o)
- 0x01024db8 0x01024db8 0x0000007a Code RO 6738 .text mc_p.l(llmul.o)
- 0x01024e32 0x01024e32 0x00000020 Code RO 6740 .text mc_p.l(llshl.o)
- 0x01024e52 0x01024e52 0x00000022 Code RO 6742 .text mc_p.l(llushr.o)
- 0x01024e74 0x01024e74 0x00000026 Code RO 6744 .text mc_p.l(llsshr.o)
+ 0x01024c80 0x01024c80 0x00000048 Code RO 6715 .text mf_p.l(dfixi.o)
+ 0x01024cc8 0x01024cc8 0x00000040 Code RO 6717 .text mf_p.l(dfixul.o)
+ 0x01024d08 0x01024d08 0x00000028 Code RO 6719 .text mf_p.l(f2d.o)
+ 0x01024d30 0x01024d30 0x00000028 Code RO 6721 .text mf_p.l(cdcmple.o)
+ 0x01024d58 0x01024d58 0x00000028 Code RO 6723 .text mf_p.l(cdrcmple.o)
+ 0x01024d80 0x01024d80 0x00000038 Code RO 6725 .text mf_p.l(d2f.o)
+ 0x01024db8 0x01024db8 0x0000007a Code RO 6741 .text mc_p.l(llmul.o)
+ 0x01024e32 0x01024e32 0x00000020 Code RO 6743 .text mc_p.l(llshl.o)
+ 0x01024e52 0x01024e52 0x00000022 Code RO 6745 .text mc_p.l(llushr.o)
+ 0x01024e74 0x01024e74 0x00000026 Code RO 6747 .text mc_p.l(llsshr.o)
0x01024e9a 0x01024e9a 0x00000002 PAD
- 0x01024e9c 0x01024e9c 0x00000008 Code RO 6746 .text mc_p.l(ctype_o.o)
- 0x01024ea4 0x01024ea4 0x00000012 Code RO 6768 .text mc_p.l(isspace_o.o)
+ 0x01024e9c 0x01024e9c 0x00000008 Code RO 6749 .text mc_p.l(ctype_o.o)
+ 0x01024ea4 0x01024ea4 0x00000012 Code RO 6771 .text mc_p.l(isspace_o.o)
0x01024eb6 0x01024eb6 0x00000002 PAD
- 0x01024eb8 0x01024eb8 0x0000002c Code RO 6783 .text mc_p.l(scanf_char.o)
- 0x01024ee4 0x01024ee4 0x00000044 Code RO 6785 .text mc_p.l(_sgetc.o)
- 0x01024f28 0x01024f28 0x000000a6 Code RO 6787 .text mc_p.l(_strtoul.o)
+ 0x01024eb8 0x01024eb8 0x0000002c Code RO 6786 .text mc_p.l(scanf_char.o)
+ 0x01024ee4 0x01024ee4 0x00000044 Code RO 6788 .text mc_p.l(_sgetc.o)
+ 0x01024f28 0x01024f28 0x000000a6 Code RO 6790 .text mc_p.l(_strtoul.o)
0x01024fce 0x01024fce 0x00000002 PAD
- 0x01024fd0 0x01024fd0 0x000000a4 Code RO 6789 .text mc_p.l(strtod.o)
- 0x01025074 0x01025074 0x00000000 Code RO 6791 .text mc_p.l(iusefp.o)
- 0x01025074 0x01025074 0x00000082 Code RO 6792 .text mf_p.l(fepilogue.o)
- 0x010250f6 0x010250f6 0x000000be Code RO 6794 .text mf_p.l(depilogue.o)
- 0x010251b4 0x010251b4 0x00000024 Code RO 6798 .text mc_p.l(init.o)
- 0x010251d8 0x010251d8 0x0000001e Code RO 6802 .text mc_p.l(_chval.o)
+ 0x01024fd0 0x01024fd0 0x000000a4 Code RO 6792 .text mc_p.l(strtod.o)
+ 0x01025074 0x01025074 0x00000000 Code RO 6794 .text mc_p.l(iusefp.o)
+ 0x01025074 0x01025074 0x00000082 Code RO 6795 .text mf_p.l(fepilogue.o)
+ 0x010250f6 0x010250f6 0x000000be Code RO 6797 .text mf_p.l(depilogue.o)
+ 0x010251b4 0x010251b4 0x00000024 Code RO 6801 .text mc_p.l(init.o)
+ 0x010251d8 0x010251d8 0x0000001e Code RO 6805 .text mc_p.l(_chval.o)
0x010251f6 0x010251f6 0x00000002 PAD
- 0x010251f8 0x010251f8 0x00000338 Code RO 6804 .text mc_p.l(_scanf.o)
- 0x01025530 0x01025530 0x00000056 Code RO 6811 .text mc_p.l(__dczerorl2.o)
+ 0x010251f8 0x010251f8 0x00000338 Code RO 6807 .text mc_p.l(_scanf.o)
+ 0x01025530 0x01025530 0x00000056 Code RO 6814 .text mc_p.l(__dczerorl2.o)
0x01025586 0x01025586 0x00000002 PAD
- 0x01025588 0x01025588 0x0000000c Ven RO 6813 Veneer$$Code anon$$obj.o
- 0x01025594 0x01025594 0x0000000c Ven RO 6814 Veneer$$Code anon$$obj.o
- 0x010255a0 0x010255a0 0x0000000c Ven RO 6815 Veneer$$Code anon$$obj.o
- 0x010255ac 0x010255ac 0x0000000c Ven RO 6816 Veneer$$Code anon$$obj.o
- 0x010255b8 0x010255b8 0x0000000c Ven RO 6817 Veneer$$Code anon$$obj.o
- 0x010255c4 0x010255c4 0x0000000c Ven RO 6818 Veneer$$Code anon$$obj.o
- 0x010255d0 0x010255d0 0x0000000c Ven RO 6819 Veneer$$Code anon$$obj.o
- 0x010255dc 0x010255dc 0x0000000c Ven RO 6820 Veneer$$Code anon$$obj.o
- 0x010255e8 0x010255e8 0x0000000c Ven RO 6821 Veneer$$Code anon$$obj.o
- 0x010255f4 0x010255f4 0x0000000c Ven RO 6822 Veneer$$Code anon$$obj.o
- 0x01025600 0x01025600 0x0000000c Ven RO 6823 Veneer$$Code anon$$obj.o
- 0x0102560c 0x0102560c 0x0000000c Ven RO 6824 Veneer$$Code anon$$obj.o
- 0x01025618 0x01025618 0x0000000c Ven RO 6825 Veneer$$Code anon$$obj.o
- 0x01025624 0x01025624 0x0000000c Ven RO 6826 Veneer$$Code anon$$obj.o
- 0x01025630 0x01025630 0x0000000c Ven RO 6827 Veneer$$Code anon$$obj.o
- 0x0102563c 0x0102563c 0x0000000c Ven RO 6828 Veneer$$Code anon$$obj.o
- 0x01025648 0x01025648 0x0000000c Ven RO 6829 Veneer$$Code anon$$obj.o
- 0x01025654 0x01025654 0x0000000c Ven RO 6830 Veneer$$Code anon$$obj.o
- 0x01025660 0x01025660 0x0000000c Ven RO 6831 Veneer$$Code anon$$obj.o
- 0x0102566c 0x0102566c 0x0000000c Ven RO 6832 Veneer$$Code anon$$obj.o
- 0x01025678 0x01025678 0x0000000c Ven RO 6833 Veneer$$Code anon$$obj.o
- 0x01025684 0x01025684 0x0000000c Ven RO 6834 Veneer$$Code anon$$obj.o
- 0x01025690 0x01025690 0x0000000c Ven RO 6835 Veneer$$Code anon$$obj.o
- 0x0102569c 0x0102569c 0x0000000c Ven RO 6836 Veneer$$Code anon$$obj.o
- 0x010256a8 0x010256a8 0x0000000c Ven RO 6837 Veneer$$Code anon$$obj.o
- 0x010256b4 0x010256b4 0x0000000c Ven RO 6838 Veneer$$Code anon$$obj.o
- 0x010256c0 0x010256c0 0x0000000c Ven RO 6839 Veneer$$Code anon$$obj.o
- 0x010256cc 0x010256cc 0x0000000c Ven RO 6840 Veneer$$Code anon$$obj.o
- 0x010256d8 0x010256d8 0x0000000c Ven RO 6841 Veneer$$Code anon$$obj.o
- 0x010256e4 0x010256e4 0x0000000c Ven RO 6842 Veneer$$Code anon$$obj.o
- 0x010256f0 0x010256f0 0x0000000c Ven RO 6843 Veneer$$Code anon$$obj.o
- 0x010256fc 0x010256fc 0x0000000c Ven RO 6844 Veneer$$Code anon$$obj.o
- 0x01025708 0x01025708 0x0000000c Ven RO 6845 Veneer$$Code anon$$obj.o
- 0x01025714 0x01025714 0x0000000c Ven RO 6846 Veneer$$Code anon$$obj.o
- 0x01025720 0x01025720 0x0000000c Ven RO 6847 Veneer$$Code anon$$obj.o
- 0x0102572c 0x0102572c 0x0000000c Ven RO 6848 Veneer$$Code anon$$obj.o
- 0x01025738 0x01025738 0x0000000c Ven RO 6849 Veneer$$Code anon$$obj.o
- 0x01025744 0x01025744 0x0000000c Ven RO 6850 Veneer$$Code anon$$obj.o
- 0x01025750 0x01025750 0x0000000c Ven RO 6851 Veneer$$Code anon$$obj.o
- 0x0102575c 0x0102575c 0x0000000c Ven RO 6852 Veneer$$Code anon$$obj.o
- 0x01025768 0x01025768 0x0000000c Ven RO 6853 Veneer$$Code anon$$obj.o
- 0x01025774 0x01025774 0x0000000c Ven RO 6854 Veneer$$Code anon$$obj.o
- 0x01025780 0x01025780 0x0000000c Ven RO 6855 Veneer$$Code anon$$obj.o
- 0x0102578c 0x0102578c 0x0000000c Ven RO 6856 Veneer$$Code anon$$obj.o
+ 0x01025588 0x01025588 0x0000000c Ven RO 6816 Veneer$$Code anon$$obj.o
+ 0x01025594 0x01025594 0x0000000c Ven RO 6817 Veneer$$Code anon$$obj.o
+ 0x010255a0 0x010255a0 0x0000000c Ven RO 6818 Veneer$$Code anon$$obj.o
+ 0x010255ac 0x010255ac 0x0000000c Ven RO 6819 Veneer$$Code anon$$obj.o
+ 0x010255b8 0x010255b8 0x0000000c Ven RO 6820 Veneer$$Code anon$$obj.o
+ 0x010255c4 0x010255c4 0x0000000c Ven RO 6821 Veneer$$Code anon$$obj.o
+ 0x010255d0 0x010255d0 0x0000000c Ven RO 6822 Veneer$$Code anon$$obj.o
+ 0x010255dc 0x010255dc 0x0000000c Ven RO 6823 Veneer$$Code anon$$obj.o
+ 0x010255e8 0x010255e8 0x0000000c Ven RO 6824 Veneer$$Code anon$$obj.o
+ 0x010255f4 0x010255f4 0x0000000c Ven RO 6825 Veneer$$Code anon$$obj.o
+ 0x01025600 0x01025600 0x0000000c Ven RO 6826 Veneer$$Code anon$$obj.o
+ 0x0102560c 0x0102560c 0x0000000c Ven RO 6827 Veneer$$Code anon$$obj.o
+ 0x01025618 0x01025618 0x0000000c Ven RO 6828 Veneer$$Code anon$$obj.o
+ 0x01025624 0x01025624 0x0000000c Ven RO 6829 Veneer$$Code anon$$obj.o
+ 0x01025630 0x01025630 0x0000000c Ven RO 6830 Veneer$$Code anon$$obj.o
+ 0x0102563c 0x0102563c 0x0000000c Ven RO 6831 Veneer$$Code anon$$obj.o
+ 0x01025648 0x01025648 0x0000000c Ven RO 6832 Veneer$$Code anon$$obj.o
+ 0x01025654 0x01025654 0x0000000c Ven RO 6833 Veneer$$Code anon$$obj.o
+ 0x01025660 0x01025660 0x0000000c Ven RO 6834 Veneer$$Code anon$$obj.o
+ 0x0102566c 0x0102566c 0x0000000c Ven RO 6835 Veneer$$Code anon$$obj.o
+ 0x01025678 0x01025678 0x0000000c Ven RO 6836 Veneer$$Code anon$$obj.o
+ 0x01025684 0x01025684 0x0000000c Ven RO 6837 Veneer$$Code anon$$obj.o
+ 0x01025690 0x01025690 0x0000000c Ven RO 6838 Veneer$$Code anon$$obj.o
+ 0x0102569c 0x0102569c 0x0000000c Ven RO 6839 Veneer$$Code anon$$obj.o
+ 0x010256a8 0x010256a8 0x0000000c Ven RO 6840 Veneer$$Code anon$$obj.o
+ 0x010256b4 0x010256b4 0x0000000c Ven RO 6841 Veneer$$Code anon$$obj.o
+ 0x010256c0 0x010256c0 0x0000000c Ven RO 6842 Veneer$$Code anon$$obj.o
+ 0x010256cc 0x010256cc 0x0000000c Ven RO 6843 Veneer$$Code anon$$obj.o
+ 0x010256d8 0x010256d8 0x0000000c Ven RO 6844 Veneer$$Code anon$$obj.o
+ 0x010256e4 0x010256e4 0x0000000c Ven RO 6845 Veneer$$Code anon$$obj.o
+ 0x010256f0 0x010256f0 0x0000000c Ven RO 6846 Veneer$$Code anon$$obj.o
+ 0x010256fc 0x010256fc 0x0000000c Ven RO 6847 Veneer$$Code anon$$obj.o
+ 0x01025708 0x01025708 0x0000000c Ven RO 6848 Veneer$$Code anon$$obj.o
+ 0x01025714 0x01025714 0x0000000c Ven RO 6849 Veneer$$Code anon$$obj.o
+ 0x01025720 0x01025720 0x0000000c Ven RO 6850 Veneer$$Code anon$$obj.o
+ 0x0102572c 0x0102572c 0x0000000c Ven RO 6851 Veneer$$Code anon$$obj.o
+ 0x01025738 0x01025738 0x0000000c Ven RO 6852 Veneer$$Code anon$$obj.o
+ 0x01025744 0x01025744 0x0000000c Ven RO 6853 Veneer$$Code anon$$obj.o
+ 0x01025750 0x01025750 0x0000000c Ven RO 6854 Veneer$$Code anon$$obj.o
+ 0x0102575c 0x0102575c 0x0000000c Ven RO 6855 Veneer$$Code anon$$obj.o
+ 0x01025768 0x01025768 0x0000000c Ven RO 6856 Veneer$$Code anon$$obj.o
+ 0x01025774 0x01025774 0x0000000c Ven RO 6857 Veneer$$Code anon$$obj.o
+ 0x01025780 0x01025780 0x0000000c Ven RO 6858 Veneer$$Code anon$$obj.o
+ 0x0102578c 0x0102578c 0x0000000c Ven RO 6859 Veneer$$Code anon$$obj.o
0x01025798 0x01025798 0x00000006 Code RO 192 i.ADC_ClearFlag n32wb03x_adc.o
0x0102579e 0x0102579e 0x0000000e Code RO 194 i.ADC_ConfigChannel n32wb03x_adc.o
0x010257ac 0x010257ac 0x00000054 Code RO 199 i.ADC_ConverValueToTemperature n32wb03x_adc.o
@@ -5007,25 +5007,25 @@ Memory Map of the image
0x01025958 0x01025958 0x0000000e Code RO 213 i.ADC_GetFlagStatus n32wb03x_adc.o
0x01025966 0x01025966 0x00000002 PAD
0x01025968 0x01025968 0x00000018 Code RO 218 i.ADC_SetOverSampleCounter n32wb03x_adc.o
- 0x01025980 0x01025980 0x000002ec Code RO 5075 i.AppBootset_CmdAppswitch app_bootset.o
- 0x01025c6c 0x01025c6c 0x00000034 Code RO 5076 i.AppBootset_CmdBsdump app_bootset.o
- 0x01025ca0 0x01025ca0 0x000002fc Code RO 5077 i.AppBootset_CmdBsset app_bootset.o
- 0x01025f9c 0x01025f9c 0x00000028 Code RO 4589 i.AppCli_Init app_cli.o
- 0x01025fc4 0x01025fc4 0x000000c8 Code RO 5006 i.AppParams_CmdAppget app_params.o
- 0x0102608c 0x0102608c 0x0000033c Code RO 5007 i.AppParams_CmdAppset app_params.o
- 0x010263c8 0x010263c8 0x00000520 Code RO 4591 i.CliTask app_cli.o
- 0x010268e8 0x010268e8 0x00000078 Code RO 4457 i.CmdBleLog cli_core.o
- 0x01026960 0x01026960 0x00000198 Code RO 4458 i.CmdDevInfo cli_core.o
- 0x01026af8 0x01026af8 0x00000090 Code RO 4459 i.CmdFactory cli_core.o
- 0x01026b88 0x01026b88 0x00000044 Code RO 4460 i.CmdHang cli_core.o
- 0x01026bcc 0x01026bcc 0x000000d4 Code RO 4461 i.CmdHelp cli_core.o
- 0x01026ca0 0x01026ca0 0x000000d0 Code RO 4462 i.CmdLed cli_core.o
- 0x01026d70 0x01026d70 0x00000014 Code RO 4463 i.CmdOta cli_core.o
- 0x01026d84 0x01026d84 0x00000034 Code RO 4464 i.CmdReset cli_core.o
- 0x01026db8 0x01026db8 0x000000e8 Code RO 4465 i.CmdSysInfo cli_core.o
- 0x01026ea0 0x01026ea0 0x00000070 Code RO 4466 i.CmdUartInfo cli_core.o
- 0x01026f10 0x01026f10 0x00000044 Code RO 4467 i.CmdUartRst cli_core.o
- 0x01026f54 0x01026f54 0x00000098 Code RO 4468 i.CmdVersion cli_core.o
+ 0x01025980 0x01025980 0x000002ec Code RO 5078 i.AppBootset_CmdAppswitch app_bootset.o
+ 0x01025c6c 0x01025c6c 0x00000034 Code RO 5079 i.AppBootset_CmdBsdump app_bootset.o
+ 0x01025ca0 0x01025ca0 0x000002fc Code RO 5080 i.AppBootset_CmdBsset app_bootset.o
+ 0x01025f9c 0x01025f9c 0x00000028 Code RO 4592 i.AppCli_Init app_cli.o
+ 0x01025fc4 0x01025fc4 0x000000c8 Code RO 5009 i.AppParams_CmdAppget app_params.o
+ 0x0102608c 0x0102608c 0x0000033c Code RO 5010 i.AppParams_CmdAppset app_params.o
+ 0x010263c8 0x010263c8 0x00000520 Code RO 4594 i.CliTask app_cli.o
+ 0x010268e8 0x010268e8 0x00000078 Code RO 4460 i.CmdBleLog cli_core.o
+ 0x01026960 0x01026960 0x00000198 Code RO 4461 i.CmdDevInfo cli_core.o
+ 0x01026af8 0x01026af8 0x00000090 Code RO 4462 i.CmdFactory cli_core.o
+ 0x01026b88 0x01026b88 0x00000044 Code RO 4463 i.CmdHang cli_core.o
+ 0x01026bcc 0x01026bcc 0x000000d4 Code RO 4464 i.CmdHelp cli_core.o
+ 0x01026ca0 0x01026ca0 0x000000d0 Code RO 4465 i.CmdLed cli_core.o
+ 0x01026d70 0x01026d70 0x00000014 Code RO 4466 i.CmdOta cli_core.o
+ 0x01026d84 0x01026d84 0x00000034 Code RO 4467 i.CmdReset cli_core.o
+ 0x01026db8 0x01026db8 0x000000e8 Code RO 4468 i.CmdSysInfo cli_core.o
+ 0x01026ea0 0x01026ea0 0x00000070 Code RO 4469 i.CmdUartInfo cli_core.o
+ 0x01026f10 0x01026f10 0x00000044 Code RO 4470 i.CmdUartRst cli_core.o
+ 0x01026f54 0x01026f54 0x00000098 Code RO 4471 i.CmdVersion cli_core.o
0x01026fec 0x01026fec 0x00000018 Code RO 745 i.DBG_ConfigPeriph n32wb03x_rcc.o
0x01027004 0x01027004 0x00000004 Code RO 487 i.DMA_ClearFlag n32wb03x_dma.o
0x01027008 0x01027008 0x00000088 Code RO 490 i.DMA_DeInit n32wb03x_dma.o
@@ -5043,16 +5043,16 @@ Memory Map of the image
0x01027278 0x01027278 0x00000004 Code RO 640 i.GPIO_ResetBits n32wb03x_gpio.o
0x0102727c 0x0102727c 0x00000004 Code RO 641 i.GPIO_SetBits n32wb03x_gpio.o
0x01027280 0x01027280 0x00000008 Code RO 642 i.GPIO_TogglePin n32wb03x_gpio.o
- 0x01027288 0x01027288 0x000000b0 Code RO 4673 i.HardFault_Handler n32wb03x_it.o
+ 0x01027288 0x01027288 0x000000b0 Code RO 4676 i.HardFault_Handler n32wb03x_it.o
0x01027338 0x01027338 0x0000000c Code RO 1986 i.IWDG_CntReload n32wb03x_iwdg.o
0x01027344 0x01027344 0x00000010 Code RO 1987 i.IWDG_Enable n32wb03x_iwdg.o
0x01027354 0x01027354 0x00000010 Code RO 1989 i.IWDG_ReloadKey n32wb03x_iwdg.o
0x01027364 0x01027364 0x0000000c Code RO 1990 i.IWDG_SetPrescalerDiv n32wb03x_iwdg.o
0x01027370 0x01027370 0x0000000c Code RO 1991 i.IWDG_WriteConfig n32wb03x_iwdg.o
- 0x0102737c 0x0102737c 0x00000008 Code RO 4972 i.LedBlink app_gpio.o
- 0x01027384 0x01027384 0x0000004c Code RO 4973 i.LedInit app_gpio.o
- 0x010273d0 0x010273d0 0x00000008 Code RO 4974 i.LedOff app_gpio.o
- 0x010273d8 0x010273d8 0x00000008 Code RO 4975 i.LedOn app_gpio.o
+ 0x0102737c 0x0102737c 0x00000008 Code RO 4975 i.LedBlink app_gpio.o
+ 0x01027384 0x01027384 0x0000004c Code RO 4976 i.LedInit app_gpio.o
+ 0x010273d0 0x010273d0 0x00000008 Code RO 4977 i.LedOff app_gpio.o
+ 0x010273d8 0x010273d8 0x00000008 Code RO 4978 i.LedOn app_gpio.o
0x010273e0 0x010273e0 0x00000078 Code RO 159 i.NVIC_Init misc.o
0x01027458 0x01027458 0x000000cc Code RO 11 i.OTPTrim_Read system_n32wb03x.o
0x01027524 0x01027524 0x00000024 Code RO 1947 i.Qflash_Erase_Sector n32wb03x_qflash.o
@@ -5067,13 +5067,13 @@ Memory Map of the image
0x01027630 0x01027630 0x0000001c Code RO 773 i.RCC_Enable_ADC_CLK_SRC_AUDIOPLL n32wb03x_rcc.o
0x0102764c 0x0102764c 0x00000074 Code RO 774 i.RCC_GetClocksFreqValue n32wb03x_rcc.o
0x010276c0 0x010276c0 0x00000030 Code RO 775 i.RCC_GetFlagStatus n32wb03x_rcc.o
- 0x010276f0 0x010276f0 0x00000002 Code RO 6287 i.SVC_Handler port.o
+ 0x010276f0 0x010276f0 0x00000002 Code RO 6290 i.SVC_Handler port.o
0x010276f2 0x010276f2 0x00000002 PAD
- 0x010276f4 0x010276f4 0x00000024 Code RO 6288 i.SysTick_Handler port.o
+ 0x010276f4 0x010276f4 0x00000024 Code RO 6291 i.SysTick_Handler port.o
0x01027718 0x01027718 0x00000034 Code RO 13 i.SystemGetMacAddr system_n32wb03x.o
0x0102774c 0x0102774c 0x00000180 Code RO 15 i.SystemInit system_n32wb03x.o
0x010278cc 0x010278cc 0x00000030 Code RO 16 i.SystemTrimValueGet system_n32wb03x.o
- 0x010278fc 0x010278fc 0x00000008 Code RO 4674 i.USART1_IRQHandler n32wb03x_it.o
+ 0x010278fc 0x010278fc 0x00000008 Code RO 4677 i.USART1_IRQHandler n32wb03x_it.o
0x01027904 0x01027904 0x00000032 Code RO 1520 i.USART_ConfigInt n32wb03x_usart.o
0x01027936 0x01027936 0x00000002 PAD
0x01027938 0x01027938 0x0000001c Code RO 1525 i.USART_Enable n32wb03x_usart.o
@@ -5084,122 +5084,122 @@ Memory Map of the image
0x010279b4 0x010279b4 0x00000088 Code RO 1534 i.USART_Init n32wb03x_usart.o
0x01027a3c 0x01027a3c 0x00000008 Code RO 1535 i.USART_ReceiveData n32wb03x_usart.o
0x01027a44 0x01027a44 0x00000008 Code RO 1537 i.USART_SendData n32wb03x_usart.o
- 0x01027a4c 0x01027a4c 0x00000020 Code RO 6620 i.__0printf mc_p.l(printfa.o)
- 0x01027a6c 0x01027a6c 0x00000028 Code RO 6622 i.__0sprintf mc_p.l(printfa.o)
- 0x01027a94 0x01027a94 0x0000002c Code RO 6625 i.__0vsnprintf mc_p.l(printfa.o)
- 0x01027ac0 0x01027ac0 0x0000002e Code RO 6796 i.__ARM_clz mf_p.l(depilogue.o)
+ 0x01027a4c 0x01027a4c 0x00000020 Code RO 6623 i.__0printf mc_p.l(printfa.o)
+ 0x01027a6c 0x01027a6c 0x00000028 Code RO 6625 i.__0sprintf mc_p.l(printfa.o)
+ 0x01027a94 0x01027a94 0x0000002c Code RO 6628 i.__0vsnprintf mc_p.l(printfa.o)
+ 0x01027ac0 0x01027ac0 0x0000002e Code RO 6799 i.__ARM_clz mf_p.l(depilogue.o)
0x01027aee 0x01027aee 0x00000002 PAD
- 0x01027af0 0x01027af0 0x00000008 Code RO 6776 i.__aeabi_errno_addr mc_p.l(errno.o)
- 0x01027af8 0x01027af8 0x00000064 Code RO 6652 i.__free$realloc mc_p.l(mallocr.o)
- 0x01027b5c 0x01027b5c 0x00000048 Code RO 6653 i.__malloc$realloc mc_p.l(mallocr.o)
- 0x01027ba4 0x01027ba4 0x00000174 Code RO 6627 i._fp_digits mc_p.l(printfa.o)
- 0x01027d18 0x01027d18 0x0000000e Code RO 6680 i._is_digit mc_p.l(scanf_fp.o)
+ 0x01027af0 0x01027af0 0x00000008 Code RO 6779 i.__aeabi_errno_addr mc_p.l(errno.o)
+ 0x01027af8 0x01027af8 0x00000064 Code RO 6655 i.__free$realloc mc_p.l(mallocr.o)
+ 0x01027b5c 0x01027b5c 0x00000048 Code RO 6656 i.__malloc$realloc mc_p.l(mallocr.o)
+ 0x01027ba4 0x01027ba4 0x00000174 Code RO 6630 i._fp_digits mc_p.l(printfa.o)
+ 0x01027d18 0x01027d18 0x0000000e Code RO 6683 i._is_digit mc_p.l(scanf_fp.o)
0x01027d26 0x01027d26 0x00000002 PAD
- 0x01027d28 0x01027d28 0x000006ec Code RO 6628 i._printf_core mc_p.l(printfa.o)
- 0x01028414 0x01028414 0x00000020 Code RO 6629 i._printf_post_padding mc_p.l(printfa.o)
- 0x01028434 0x01028434 0x0000002c Code RO 6630 i._printf_pre_padding mc_p.l(printfa.o)
- 0x01028460 0x01028460 0x00000016 Code RO 6631 i._snputc mc_p.l(printfa.o)
- 0x01028476 0x01028476 0x0000000a Code RO 6632 i._sputc mc_p.l(printfa.o)
- 0x01028480 0x01028480 0x00000032 Code RO 5115 i.add_item_to_array cjson.o
- 0x010284b2 0x010284b2 0x00000062 Code RO 5116 i.add_item_to_object cjson.o
- 0x01028514 0x01028514 0x00000074 Code RO 4169 i.app_ble_adv_init app_ble.o
- 0x01028588 0x01028588 0x00000002 Code RO 4170 i.app_ble_adv_msg_handler app_ble.o
+ 0x01027d28 0x01027d28 0x000006ec Code RO 6631 i._printf_core mc_p.l(printfa.o)
+ 0x01028414 0x01028414 0x00000020 Code RO 6632 i._printf_post_padding mc_p.l(printfa.o)
+ 0x01028434 0x01028434 0x0000002c Code RO 6633 i._printf_pre_padding mc_p.l(printfa.o)
+ 0x01028460 0x01028460 0x00000016 Code RO 6634 i._snputc mc_p.l(printfa.o)
+ 0x01028476 0x01028476 0x0000000a Code RO 6635 i._sputc mc_p.l(printfa.o)
+ 0x01028480 0x01028480 0x00000032 Code RO 5118 i.add_item_to_array cjson.o
+ 0x010284b2 0x010284b2 0x00000062 Code RO 5119 i.add_item_to_object cjson.o
+ 0x01028514 0x01028514 0x00000074 Code RO 4172 i.app_ble_adv_init app_ble.o
+ 0x01028588 0x01028588 0x00000002 Code RO 4173 i.app_ble_adv_msg_handler app_ble.o
0x0102858a 0x0102858a 0x00000002 PAD
- 0x0102858c 0x0102858c 0x00000044 Code RO 4171 i.app_ble_connected app_ble.o
- 0x010285d0 0x010285d0 0x0000005c Code RO 4172 i.app_ble_disconnected app_ble.o
- 0x0102862c 0x0102862c 0x00000098 Code RO 4173 i.app_ble_gap_params_init app_ble.o
- 0x010286c4 0x010286c4 0x0000004c Code RO 4174 i.app_ble_init app_ble.o
- 0x01028710 0x01028710 0x0000006c Code RO 4175 i.app_ble_msg_handler app_ble.o
- 0x0102877c 0x0102877c 0x000000ec Code RO 4698 i.app_ble_proto_cli_exec app_ble_proto.o
- 0x01028868 0x01028868 0x00000040 Code RO 4699 i.app_ble_proto_cli_rsp app_ble_proto.o
- 0x010288a8 0x010288a8 0x00000014 Code RO 4700 i.app_ble_proto_init app_ble_proto.o
- 0x010288bc 0x010288bc 0x0000000c Code RO 4701 i.app_ble_proto_log_get app_ble_proto.o
- 0x010288c8 0x010288c8 0x00000010 Code RO 4702 i.app_ble_proto_log_set app_ble_proto.o
- 0x010288d8 0x010288d8 0x0000001c Code RO 4703 i.app_ble_proto_on_disconnect app_ble_proto.o
- 0x010288f4 0x010288f4 0x000001a0 Code RO 4704 i.app_ble_proto_rx_bytes app_ble_proto.o
- 0x01028a94 0x01028a94 0x000000b8 Code RO 4705 i.app_ble_proto_send_frame app_ble_proto.o
- 0x01028b4c 0x01028b4c 0x00000050 Code RO 4177 i.app_ble_sec_init app_ble.o
- 0x01028b9c 0x01028b9c 0x0000000c Code RO 4592 i.app_cli_ota_mode_enter app_cli.o
+ 0x0102858c 0x0102858c 0x00000044 Code RO 4174 i.app_ble_connected app_ble.o
+ 0x010285d0 0x010285d0 0x0000005c Code RO 4175 i.app_ble_disconnected app_ble.o
+ 0x0102862c 0x0102862c 0x00000098 Code RO 4176 i.app_ble_gap_params_init app_ble.o
+ 0x010286c4 0x010286c4 0x0000004c Code RO 4177 i.app_ble_init app_ble.o
+ 0x01028710 0x01028710 0x0000006c Code RO 4178 i.app_ble_msg_handler app_ble.o
+ 0x0102877c 0x0102877c 0x000000ec Code RO 4701 i.app_ble_proto_cli_exec app_ble_proto.o
+ 0x01028868 0x01028868 0x00000040 Code RO 4702 i.app_ble_proto_cli_rsp app_ble_proto.o
+ 0x010288a8 0x010288a8 0x00000014 Code RO 4703 i.app_ble_proto_init app_ble_proto.o
+ 0x010288bc 0x010288bc 0x0000000c Code RO 4704 i.app_ble_proto_log_get app_ble_proto.o
+ 0x010288c8 0x010288c8 0x00000010 Code RO 4705 i.app_ble_proto_log_set app_ble_proto.o
+ 0x010288d8 0x010288d8 0x0000001c Code RO 4706 i.app_ble_proto_on_disconnect app_ble_proto.o
+ 0x010288f4 0x010288f4 0x000001a0 Code RO 4707 i.app_ble_proto_rx_bytes app_ble_proto.o
+ 0x01028a94 0x01028a94 0x000000b8 Code RO 4708 i.app_ble_proto_send_frame app_ble_proto.o
+ 0x01028b4c 0x01028b4c 0x00000050 Code RO 4180 i.app_ble_sec_init app_ble.o
+ 0x01028b9c 0x01028b9c 0x0000000c Code RO 4595 i.app_cli_ota_mode_enter app_cli.o
0x01028ba8 0x01028ba8 0x00000010 Code RO 3897 i.app_conn_params_update_evt_handler ns_ble_task.o
0x01028bb8 0x01028bb8 0x000000cc Code RO 3498 i.app_create_advertising ns_ble.o
0x01028c84 0x01028c84 0x0000005c Code RO 4051 i.app_dis_add_dis app_dis.o
0x01028ce0 0x01028ce0 0x00000104 Code RO 3898 i.app_entry_point_handler ns_ble_task.o
- 0x01028de4 0x01028de4 0x00000008 Code RO 4876 i.app_fan_get_rpm app_info.o
- 0x01028dec 0x01028dec 0x0000005c Code RO 4877 i.app_info_chip_temp_c10 app_info.o
- 0x01028e48 0x01028e48 0x00000018 Code RO 4878 i.app_info_cur_bank app_info.o
- 0x01028e60 0x01028e60 0x0000004c Code RO 4879 i.app_info_handle_query app_info.o
- 0x01028eac 0x01028eac 0x0000000c Code RO 4880 i.app_info_last_temp_raw app_info.o
- 0x01028eb8 0x01028eb8 0x0000002c Code RO 4881 i.app_info_tlv_snapshot app_info.o
- 0x01028ee4 0x01028ee4 0x00000020 Code RO 4882 i.app_info_vdd_mv app_info.o
+ 0x01028de4 0x01028de4 0x00000008 Code RO 4879 i.app_fan_get_rpm app_info.o
+ 0x01028dec 0x01028dec 0x0000005c Code RO 4880 i.app_info_chip_temp_c10 app_info.o
+ 0x01028e48 0x01028e48 0x00000018 Code RO 4881 i.app_info_cur_bank app_info.o
+ 0x01028e60 0x01028e60 0x0000004c Code RO 4882 i.app_info_handle_query app_info.o
+ 0x01028eac 0x01028eac 0x0000000c Code RO 4883 i.app_info_last_temp_raw app_info.o
+ 0x01028eb8 0x01028eb8 0x0000002c Code RO 4884 i.app_info_tlv_snapshot app_info.o
+ 0x01028ee4 0x01028ee4 0x00000020 Code RO 4885 i.app_info_vdd_mv app_info.o
0x01028f04 0x01028f04 0x0000001c Code RO 3899 i.app_init_timeout_evt_handler ns_ble_task.o
0x01028f20 0x01028f20 0x000000ac Code RO 3900 i.app_lsi_calib_evt_handler ns_ble_task.o
- 0x01028fcc 0x01028fcc 0x00000018 Code RO 4774 i.app_ota_abort app_ota.o
- 0x01028fe4 0x01028fe4 0x00000010 Code RO 4775 i.app_ota_chan_idle app_ota.o
- 0x01028ff4 0x01028ff4 0x00000020 Code RO 4776 i.app_ota_chan_rsp_ble app_ota.o
- 0x01029014 0x01029014 0x00000120 Code RO 4777 i.app_ota_chan_rx app_ota.o
- 0x01029134 0x01029134 0x00000010 Code RO 4778 i.app_ota_chan_rx_ble app_ota.o
- 0x01029144 0x01029144 0x00000020 Code RO 4779 i.app_ota_chan_rx_uart app_ota.o
- 0x01029164 0x01029164 0x00000008 Code RO 4780 i.app_ota_current_bank_base app_ota.o
- 0x0102916c 0x0102916c 0x00000158 Code RO 4781 i.app_ota_handle_frame app_ota.o
- 0x010292c4 0x010292c4 0x00000048 Code RO 4782 i.app_ota_reset_poll app_ota.o
- 0x0102930c 0x0102930c 0x00000008 Code RO 5008 i.app_params_get app_params.o
- 0x01029314 0x01029314 0x0000005c Code RO 5009 i.app_params_init app_params.o
- 0x01029370 0x01029370 0x0000002c Code RO 5011 i.app_params_restore_defaults app_params.o
+ 0x01028fcc 0x01028fcc 0x00000018 Code RO 4777 i.app_ota_abort app_ota.o
+ 0x01028fe4 0x01028fe4 0x00000010 Code RO 4778 i.app_ota_chan_idle app_ota.o
+ 0x01028ff4 0x01028ff4 0x00000020 Code RO 4779 i.app_ota_chan_rsp_ble app_ota.o
+ 0x01029014 0x01029014 0x00000120 Code RO 4780 i.app_ota_chan_rx app_ota.o
+ 0x01029134 0x01029134 0x00000010 Code RO 4781 i.app_ota_chan_rx_ble app_ota.o
+ 0x01029144 0x01029144 0x00000020 Code RO 4782 i.app_ota_chan_rx_uart app_ota.o
+ 0x01029164 0x01029164 0x00000008 Code RO 4783 i.app_ota_current_bank_base app_ota.o
+ 0x0102916c 0x0102916c 0x00000158 Code RO 4784 i.app_ota_handle_frame app_ota.o
+ 0x010292c4 0x010292c4 0x00000048 Code RO 4785 i.app_ota_reset_poll app_ota.o
+ 0x0102930c 0x0102930c 0x00000008 Code RO 5011 i.app_params_get app_params.o
+ 0x01029314 0x01029314 0x0000005c Code RO 5012 i.app_params_init app_params.o
+ 0x01029370 0x01029370 0x0000002c Code RO 5014 i.app_params_restore_defaults app_params.o
0x0102939c 0x0102939c 0x00000068 Code RO 4106 i.app_rdtss_add_rdts app_rdtss.o
0x01029404 0x01029404 0x00000004 Code RO 3257 i.app_sec_msg_dflt_handler ns_sec.o
0x01029408 0x01029408 0x00000078 Code RO 3499 i.app_set_adv_data ns_ble.o
0x01029480 0x01029480 0x000000c4 Code RO 3500 i.app_set_scan_rsp_data ns_ble.o
0x01029544 0x01029544 0x00000070 Code RO 3501 i.app_start_advertising ns_ble.o
- 0x010295b4 0x010295b4 0x00000002 Code RO 4178 i.app_user_msg_handler app_ble.o
+ 0x010295b4 0x010295b4 0x00000002 Code RO 4181 i.app_user_msg_handler app_ble.o
0x010295b6 0x010295b6 0x00000002 PAD
- 0x010295b8 0x010295b8 0x00000018 Code RO 4275 i.app_wdt_heartbeat main.o
- 0x010295d0 0x010295d0 0x00000074 Code RO 4276 i.app_wdt_init main.o
+ 0x010295b8 0x010295b8 0x00000018 Code RO 4278 i.app_wdt_heartbeat main.o
+ 0x010295d0 0x010295d0 0x00000074 Code RO 4279 i.app_wdt_init main.o
0x01029644 0x01029644 0x000000c0 Code RO 2033 i.attm_att_set_value lib_att.o
- 0x01029704 0x01029704 0x00000028 Code RO 4277 i.ble_schedule_task main.o
- 0x0102972c 0x0102972c 0x00000014 Code RO 4636 i.ble_up_on_cfm ble_up.o
- 0x01029740 0x01029740 0x00000058 Code RO 4637 i.ble_up_poll ble_up.o
- 0x01029798 0x01029798 0x00000010 Code RO 4638 i.ble_up_reset ble_up.o
- 0x010297a8 0x010297a8 0x00000048 Code RO 4639 i.ble_up_write ble_up.o
- 0x010297f0 0x010297f0 0x0000005c Code RO 5078 i.bootset_commit app_bootset.o
- 0x0102984c 0x0102984c 0x00000178 Code RO 5079 i.bootset_print app_bootset.o
- 0x010299c4 0x010299c4 0x000000ec Code RO 4379 i.bsp_usart_init bsp_usart.o
- 0x01029ab0 0x01029ab0 0x000000ac Code RO 4380 i.bsp_usart_read_byte bsp_usart.o
- 0x01029b5c 0x01029b5c 0x00000080 Code RO 4381 i.bsp_usart_rx_dma_start bsp_usart.o
- 0x01029bdc 0x01029bdc 0x00000048 Code RO 4383 i.bsp_usart_rx_isr_handler bsp_usart.o
- 0x01029c24 0x01029c24 0x00000074 Code RO 4384 i.bsp_usart_set_baud bsp_usart.o
- 0x01029c98 0x01029c98 0x00000020 Code RO 4385 i.bsp_usart_tx_lock bsp_usart.o
- 0x01029cb8 0x01029cb8 0x00000024 Code RO 4386 i.bsp_usart_tx_unlock bsp_usart.o
- 0x01029cdc 0x01029cdc 0x00000098 Code RO 4387 i.bsp_usart_write_dma bsp_usart.o
- 0x01029d74 0x01029d74 0x0000003a Code RO 5117 i.buffer_skip_whitespace cjson.o
+ 0x01029704 0x01029704 0x00000028 Code RO 4280 i.ble_schedule_task main.o
+ 0x0102972c 0x0102972c 0x00000014 Code RO 4639 i.ble_up_on_cfm ble_up.o
+ 0x01029740 0x01029740 0x00000058 Code RO 4640 i.ble_up_poll ble_up.o
+ 0x01029798 0x01029798 0x00000010 Code RO 4641 i.ble_up_reset ble_up.o
+ 0x010297a8 0x010297a8 0x00000048 Code RO 4642 i.ble_up_write ble_up.o
+ 0x010297f0 0x010297f0 0x0000005c Code RO 5081 i.bootset_commit app_bootset.o
+ 0x0102984c 0x0102984c 0x00000178 Code RO 5082 i.bootset_print app_bootset.o
+ 0x010299c4 0x010299c4 0x000000ec Code RO 4382 i.bsp_usart_init bsp_usart.o
+ 0x01029ab0 0x01029ab0 0x000000ac Code RO 4383 i.bsp_usart_read_byte bsp_usart.o
+ 0x01029b5c 0x01029b5c 0x00000080 Code RO 4384 i.bsp_usart_rx_dma_start bsp_usart.o
+ 0x01029bdc 0x01029bdc 0x00000048 Code RO 4386 i.bsp_usart_rx_isr_handler bsp_usart.o
+ 0x01029c24 0x01029c24 0x00000074 Code RO 4387 i.bsp_usart_set_baud bsp_usart.o
+ 0x01029c98 0x01029c98 0x00000020 Code RO 4388 i.bsp_usart_tx_lock bsp_usart.o
+ 0x01029cb8 0x01029cb8 0x00000024 Code RO 4389 i.bsp_usart_tx_unlock bsp_usart.o
+ 0x01029cdc 0x01029cdc 0x00000098 Code RO 4390 i.bsp_usart_write_dma bsp_usart.o
+ 0x01029d74 0x01029d74 0x0000003a Code RO 5120 i.buffer_skip_whitespace cjson.o
0x01029dae 0x01029dae 0x00000002 PAD
- 0x01029db0 0x01029db0 0x00000034 Code RO 5127 i.cJSON_AddNumberToObject cjson.o
- 0x01029de4 0x01029de4 0x00000064 Code RO 5141 i.cJSON_CreateNumber cjson.o
- 0x01029e48 0x01029e48 0x00000018 Code RO 5142 i.cJSON_CreateObject cjson.o
- 0x01029e60 0x01029e60 0x00000054 Code RO 5149 i.cJSON_Delete cjson.o
- 0x01029eb4 0x01029eb4 0x0000000a Code RO 5162 i.cJSON_GetObjectItem cjson.o
+ 0x01029db0 0x01029db0 0x00000034 Code RO 5130 i.cJSON_AddNumberToObject cjson.o
+ 0x01029de4 0x01029de4 0x00000064 Code RO 5144 i.cJSON_CreateNumber cjson.o
+ 0x01029e48 0x01029e48 0x00000018 Code RO 5145 i.cJSON_CreateObject cjson.o
+ 0x01029e60 0x01029e60 0x00000054 Code RO 5152 i.cJSON_Delete cjson.o
+ 0x01029eb4 0x01029eb4 0x0000000a Code RO 5165 i.cJSON_GetObjectItem cjson.o
0x01029ebe 0x01029ebe 0x00000002 PAD
- 0x01029ec0 0x01029ec0 0x00000050 Code RO 5166 i.cJSON_InitHooks cjson.o
- 0x01029f10 0x01029f10 0x00000012 Code RO 5173 i.cJSON_IsNumber cjson.o
- 0x01029f22 0x01029f22 0x00000012 Code RO 5174 i.cJSON_IsObject cjson.o
- 0x01029f34 0x01029f34 0x00000024 Code RO 5179 i.cJSON_New_Item cjson.o
- 0x01029f58 0x01029f58 0x00000022 Code RO 5180 i.cJSON_Parse cjson.o
+ 0x01029ec0 0x01029ec0 0x00000050 Code RO 5169 i.cJSON_InitHooks cjson.o
+ 0x01029f10 0x01029f10 0x00000012 Code RO 5176 i.cJSON_IsNumber cjson.o
+ 0x01029f22 0x01029f22 0x00000012 Code RO 5177 i.cJSON_IsObject cjson.o
+ 0x01029f34 0x01029f34 0x00000024 Code RO 5182 i.cJSON_New_Item cjson.o
+ 0x01029f58 0x01029f58 0x00000022 Code RO 5183 i.cJSON_Parse cjson.o
0x01029f7a 0x01029f7a 0x00000002 PAD
- 0x01029f7c 0x01029f7c 0x000000ec Code RO 5182 i.cJSON_ParseWithLengthOpts cjson.o
- 0x0102a068 0x0102a068 0x00000010 Code RO 5187 i.cJSON_PrintUnformatted cjson.o
- 0x0102a078 0x0102a078 0x0000000c Code RO 5195 i.cJSON_free cjson.o
- 0x0102a084 0x0102a084 0x00000028 Code RO 5197 i.cJSON_strdup cjson.o
- 0x0102a0ac 0x0102a0ac 0x00000034 Code RO 4959 i.caiic_crc32 boot_crc32.o
+ 0x01029f7c 0x01029f7c 0x000000ec Code RO 5185 i.cJSON_ParseWithLengthOpts cjson.o
+ 0x0102a068 0x0102a068 0x00000010 Code RO 5190 i.cJSON_PrintUnformatted cjson.o
+ 0x0102a078 0x0102a078 0x0000000c Code RO 5198 i.cJSON_free cjson.o
+ 0x0102a084 0x0102a084 0x00000028 Code RO 5200 i.cJSON_strdup cjson.o
+ 0x0102a0ac 0x0102a0ac 0x00000034 Code RO 4962 i.caiic_crc32 boot_crc32.o
0x0102a0e0 0x0102a0e0 0x0000002a Code RO 3071 i.check_client_char_cfg rdts_common.o
- 0x0102a10a 0x0102a10a 0x00000004 Code RO 4469 i.cli_cmd_count cli_core.o
+ 0x0102a10a 0x0102a10a 0x00000004 Code RO 4472 i.cli_cmd_count cli_core.o
0x0102a10e 0x0102a10e 0x00000002 PAD
- 0x0102a110 0x0102a110 0x00000018 Code RO 4470 i.cli_cmd_name cli_core.o
- 0x0102a128 0x0102a128 0x000000b4 Code RO 4471 i.cli_exec_line cli_core.o
- 0x0102a1dc 0x0102a1dc 0x0000002c Code RO 4472 i.cli_printf cli_core.o
- 0x0102a208 0x0102a208 0x00000068 Code RO 4593 i.cli_redraw_line app_cli.o
- 0x0102a270 0x0102a270 0x0000002c Code RO 4706 i.cli_rsp_out app_ble_proto.o
- 0x0102a29c 0x0102a29c 0x0000000c Code RO 4473 i.cli_set_output cli_core.o
- 0x0102a2a8 0x0102a2a8 0x00000024 Code RO 4474 i.cli_write cli_core.o
- 0x0102a2cc 0x0102a2cc 0x0000005c Code RO 5198 i.compare_double cjson.o
+ 0x0102a110 0x0102a110 0x00000018 Code RO 4473 i.cli_cmd_name cli_core.o
+ 0x0102a128 0x0102a128 0x000000b4 Code RO 4474 i.cli_exec_line cli_core.o
+ 0x0102a1dc 0x0102a1dc 0x0000002c Code RO 4475 i.cli_printf cli_core.o
+ 0x0102a208 0x0102a208 0x00000068 Code RO 4596 i.cli_redraw_line app_cli.o
+ 0x0102a270 0x0102a270 0x0000002c Code RO 4709 i.cli_rsp_out app_ble_proto.o
+ 0x0102a29c 0x0102a29c 0x0000000c Code RO 4476 i.cli_set_output cli_core.o
+ 0x0102a2a8 0x0102a2a8 0x00000024 Code RO 4477 i.cli_write cli_core.o
+ 0x0102a2cc 0x0102a2cc 0x0000005c Code RO 5201 i.compare_double cjson.o
0x0102a328 0x0102a328 0x0000002a Code RO 2709 i.diss_check_val_len diss.o
0x0102a352 0x0102a352 0x00000002 Code RO 2710 i.diss_cleanup diss.o
0x0102a354 0x0102a354 0x00000002 Code RO 2712 i.diss_create diss.o
@@ -5213,9 +5213,9 @@ Memory Map of the image
0x0102a5a8 0x0102a5a8 0x000000c0 Code RO 4053 i.diss_value_req_ind_handler app_dis.o
0x0102a668 0x0102a668 0x0000003a Code RO 2717 i.diss_value_to_handle diss.o
0x0102a6a2 0x0102a6a2 0x00000002 PAD
- 0x0102a6a4 0x0102a6a4 0x00000060 Code RO 5682 i.eTaskGetState tasks.o
- 0x0102a704 0x0102a704 0x00000098 Code RO 5200 i.ensure cjson.o
- 0x0102a79c 0x0102a79c 0x0000003c Code RO 4388 i.fputc bsp_usart.o
+ 0x0102a6a4 0x0102a6a4 0x00000060 Code RO 5685 i.eTaskGetState tasks.o
+ 0x0102a704 0x0102a704 0x00000098 Code RO 5203 i.ensure cjson.o
+ 0x0102a79c 0x0102a79c 0x0000003c Code RO 4391 i.fputc bsp_usart.o
0x0102a7d8 0x0102a7d8 0x000000f0 Code RO 3258 i.gapc_bond_ind_handler ns_sec.o
0x0102a8c8 0x0102a8c8 0x00000208 Code RO 3259 i.gapc_bond_req_ind_handler ns_sec.o
0x0102aad0 0x0102aad0 0x00000028 Code RO 3901 i.gapc_cmp_evt_handler ns_ble_task.o
@@ -5247,19 +5247,19 @@ Memory Map of the image
0x0102b770 0x0102b770 0x000000e0 Code RO 2951 i.gattc_read_req_ind_handler rdtss_task.o
0x0102b850 0x0102b850 0x00000110 Code RO 2952 i.gattc_write_req_ind_handler rdtss_task.o
0x0102b960 0x0102b960 0x0000006c Code RO 3072 i.get_cfg_handle rdts_common.o
- 0x0102b9cc 0x0102b9cc 0x00000098 Code RO 5201 i.get_object_item cjson.o
+ 0x0102b9cc 0x0102b9cc 0x00000098 Code RO 5204 i.get_object_item cjson.o
0x0102ba64 0x0102ba64 0x00000054 Code RO 3073 i.get_value_handle rdts_common.o
- 0x0102bab8 0x0102bab8 0x00000064 Code RO 4883 i.info_adc_init app_info.o
- 0x0102bb1c 0x0102bb1c 0x0000006c Code RO 4884 i.info_adc_read app_info.o
- 0x0102bb88 0x0102bb88 0x00000148 Code RO 4885 i.info_fill_item app_info.o
- 0x0102bcd0 0x0102bcd0 0x0000002c Code RO 4886 i.info_put_tlv app_info.o
- 0x0102bcfc 0x0102bcfc 0x00000030 Code RO 5665 i.infra_cjson_init infra_cjson.o
- 0x0102bd2c 0x0102bd2c 0x00000050 Code RO 6654 i.internal_alloc mc_p.l(mallocr.o)
- 0x0102bd7c 0x0102bd7c 0x00000044 Code RO 4278 i.led_task main.o
+ 0x0102bab8 0x0102bab8 0x00000064 Code RO 4886 i.info_adc_init app_info.o
+ 0x0102bb1c 0x0102bb1c 0x0000006c Code RO 4887 i.info_adc_read app_info.o
+ 0x0102bb88 0x0102bb88 0x00000148 Code RO 4888 i.info_fill_item app_info.o
+ 0x0102bcd0 0x0102bcd0 0x0000002c Code RO 4889 i.info_put_tlv app_info.o
+ 0x0102bcfc 0x0102bcfc 0x00000030 Code RO 5668 i.infra_cjson_init infra_cjson.o
+ 0x0102bd2c 0x0102bd2c 0x00000050 Code RO 6657 i.internal_alloc mc_p.l(mallocr.o)
+ 0x0102bd7c 0x0102bd7c 0x00000044 Code RO 4281 i.led_task main.o
0x0102bdc0 0x0102bdc0 0x00000030 Code RO 2402 i.llhwc_modem_setmode rwip_driver.o
0x0102bdf0 0x0102bdf0 0x00000130 Code RO 2403 i.llhwc_phy_prerx_flash rwip_driver.o
0x0102bf20 0x0102bf20 0x00000090 Code RO 2404 i.llhwc_setmode_reg_config rwip_driver.o
- 0x0102bfb0 0x0102bfb0 0x000001a4 Code RO 4279 i.main main.o
+ 0x0102bfb0 0x0102bfb0 0x000001a4 Code RO 4282 i.main main.o
0x0102c154 0x0102c154 0x0000005c Code RO 3502 i.ns_EXTI4_12_IRQHandler ns_ble.o
0x0102c1b0 0x0102c1b0 0x00000028 Code RO 3503 i.ns_HardFault_Handler ns_ble.o
0x0102c1d8 0x0102c1d8 0x00000020 Code RO 3505 i.ns_ble_add_prf_func_register ns_ble.o
@@ -5299,17 +5299,17 @@ Memory Map of the image
0x0102d080 0x0102d080 0x00000018 Code RO 3119 i.ns_sleep_lock_acquire ns_sleep.o
0x0102d098 0x0102d098 0x00000014 Code RO 3120 i.ns_sleep_lock_release ns_sleep.o
0x0102d0ac 0x0102d0ac 0x000000c8 Code RO 3195 i.ns_timer_api_process_handler ns_timer.o
- 0x0102d174 0x0102d174 0x00000024 Code RO 4783 i.ota_ble_sink app_ota.o
- 0x0102d198 0x0102d198 0x0000017c Code RO 4784 i.ota_on_data app_ota.o
- 0x0102d314 0x0102d314 0x000001b0 Code RO 4785 i.ota_on_end app_ota.o
- 0x0102d4c4 0x0102d4c4 0x00000022 Code RO 4786 i.ota_rd32 app_ota.o
+ 0x0102d174 0x0102d174 0x00000024 Code RO 4786 i.ota_ble_sink app_ota.o
+ 0x0102d198 0x0102d198 0x0000017c Code RO 4787 i.ota_on_data app_ota.o
+ 0x0102d314 0x0102d314 0x000001b0 Code RO 4788 i.ota_on_end app_ota.o
+ 0x0102d4c4 0x0102d4c4 0x00000022 Code RO 4789 i.ota_rd32 app_ota.o
0x0102d4e6 0x0102d4e6 0x00000002 PAD
- 0x0102d4e8 0x0102d4e8 0x000000a0 Code RO 4787 i.ota_respond app_ota.o
- 0x0102d588 0x0102d588 0x00000024 Code RO 4788 i.ota_uart_sink app_ota.o
- 0x0102d5ac 0x0102d5ac 0x000000a8 Code RO 5012 i.params_print_json app_params.o
- 0x0102d654 0x0102d654 0x0000005c Code RO 5013 i.params_save app_params.o
- 0x0102d6b0 0x0102d6b0 0x00000270 Code RO 5202 i.parse_string cjson.o
- 0x0102d920 0x0102d920 0x000003b4 Code RO 5203 i.parse_value cjson.o
+ 0x0102d4e8 0x0102d4e8 0x000000a0 Code RO 4790 i.ota_respond app_ota.o
+ 0x0102d588 0x0102d588 0x00000024 Code RO 4791 i.ota_uart_sink app_ota.o
+ 0x0102d5ac 0x0102d5ac 0x000000a8 Code RO 5015 i.params_print_json app_params.o
+ 0x0102d654 0x0102d654 0x0000005c Code RO 5016 i.params_save app_params.o
+ 0x0102d6b0 0x0102d6b0 0x00000270 Code RO 5205 i.parse_string cjson.o
+ 0x0102d920 0x0102d920 0x000003b4 Code RO 5206 i.parse_value cjson.o
0x0102dcd4 0x0102dcd4 0x00000044 Code RO 3552 i.patchx_enable ns_ble.o
0x0102dd18 0x0102dd18 0x00000088 Code RO 2583 i.prf_add_profile prf.o
0x0102dda0 0x0102dda0 0x00000010 Code RO 2586 i.prf_dst_task_get prf.o
@@ -5319,21 +5319,21 @@ Memory Map of the image
0x0102de40 0x0102de40 0x00000038 Code RO 2590 i.prf_get_task_from_id prf.o
0x0102de78 0x0102de78 0x000000b4 Code RO 2591 i.prf_init prf.o
0x0102df2c 0x0102df2c 0x00000030 Code RO 2592 i.prf_itf_get prf.o
- 0x0102df5c 0x0102df5c 0x000000be Code RO 5204 i.print cjson.o
+ 0x0102df5c 0x0102df5c 0x000000be Code RO 5207 i.print cjson.o
0x0102e01a 0x0102e01a 0x00000002 PAD
- 0x0102e01c 0x0102e01c 0x00000120 Code RO 5205 i.print_string_ptr cjson.o
- 0x0102e13c 0x0102e13c 0x000003f8 Code RO 5206 i.print_value cjson.o
- 0x0102e534 0x0102e534 0x00000038 Code RO 4707 i.proto_cli_out app_ble_proto.o
- 0x0102e56c 0x0102e56c 0x00000080 Code RO 4708 i.proto_dump app_ble_proto.o
- 0x0102e5ec 0x0102e5ec 0x00000058 Code RO 5684 i.prvAddCurrentTaskToDelayedList tasks.o
- 0x0102e644 0x0102e644 0x00000058 Code RO 5685 i.prvIdleTask tasks.o
- 0x0102e69c 0x0102e69c 0x00000054 Code RO 6242 i.prvInsertBlockIntoFreeList heap_4.o
- 0x0102e6f0 0x0102e6f0 0x000000cc Code RO 5686 i.prvListTasksWithinSingleList tasks.o
- 0x0102e7bc 0x0102e7bc 0x00000014 Code RO 6289 i.prvTaskExitError port.o
- 0x0102e7d0 0x0102e7d0 0x00000074 Code RO 6013 i.prvUnlockQueue queue.o
- 0x0102e844 0x0102e844 0x000000f4 Code RO 6243 i.pvPortMalloc heap_4.o
- 0x0102e938 0x0102e938 0x00000018 Code RO 5687 i.pvTaskIncrementMutexHeldCount tasks.o
- 0x0102e950 0x0102e950 0x00000024 Code RO 6290 i.pxPortInitialiseStack port.o
+ 0x0102e01c 0x0102e01c 0x00000120 Code RO 5208 i.print_string_ptr cjson.o
+ 0x0102e13c 0x0102e13c 0x000003f8 Code RO 5209 i.print_value cjson.o
+ 0x0102e534 0x0102e534 0x00000038 Code RO 4710 i.proto_cli_out app_ble_proto.o
+ 0x0102e56c 0x0102e56c 0x00000080 Code RO 4711 i.proto_dump app_ble_proto.o
+ 0x0102e5ec 0x0102e5ec 0x00000058 Code RO 5687 i.prvAddCurrentTaskToDelayedList tasks.o
+ 0x0102e644 0x0102e644 0x00000058 Code RO 5688 i.prvIdleTask tasks.o
+ 0x0102e69c 0x0102e69c 0x00000054 Code RO 6245 i.prvInsertBlockIntoFreeList heap_4.o
+ 0x0102e6f0 0x0102e6f0 0x000000cc Code RO 5689 i.prvListTasksWithinSingleList tasks.o
+ 0x0102e7bc 0x0102e7bc 0x00000014 Code RO 6292 i.prvTaskExitError port.o
+ 0x0102e7d0 0x0102e7d0 0x00000074 Code RO 6016 i.prvUnlockQueue queue.o
+ 0x0102e844 0x0102e844 0x000000f4 Code RO 6246 i.pvPortMalloc heap_4.o
+ 0x0102e938 0x0102e938 0x00000018 Code RO 5690 i.pvTaskIncrementMutexHeldCount tasks.o
+ 0x0102e950 0x0102e950 0x00000024 Code RO 6293 i.pxPortInitialiseStack port.o
0x0102e974 0x0102e974 0x0000003a Code RO 2953 i.rdtss_att_get_value rdtss_task.o
0x0102e9ae 0x0102e9ae 0x00000002 PAD
0x0102e9b0 0x0102e9b0 0x00000040 Code RO 2954 i.rdtss_att_info_rsp_handler rdtss_task.o
@@ -5357,54 +5357,54 @@ Memory Map of the image
0x0102eee4 0x0102eee4 0x00000124 Code RO 4110 i.rdtss_val_write_ind_handler app_rdtss.o
0x0102f008 0x0102f008 0x00000088 Code RO 4111 i.rdtss_value_req_ind_handler app_rdtss.o
0x0102f090 0x0102f090 0x00000080 Code RO 2962 i.rdtss_value_req_rsp_handler rdtss_task.o
- 0x0102f110 0x0102f110 0x00000074 Code RO 6655 i.realloc mc_p.l(mallocr.o)
+ 0x0102f110 0x0102f110 0x00000074 Code RO 6658 i.realloc mc_p.l(mallocr.o)
0x0102f184 0x0102f184 0x00000118 Code RO 2151 i.rwip_init rwip.o
0x0102f29c 0x0102f29c 0x000000f8 Code RO 2411 i.rwip_slp_isr rwip_driver.o
- 0x0102f394 0x0102f394 0x0000001c Code RO 6352 i.strtod m_ps.l(strtod.o)
+ 0x0102f394 0x0102f394 0x0000001c Code RO 6355 i.strtod m_ps.l(strtod.o)
0x0102f3b0 0x0102f3b0 0x00000002 Code RO 3200 i.timer_canceled_handler ns_timer.o
0x0102f3b2 0x0102f3b2 0x00000002 Code RO 3201 i.timer_modified_handler ns_timer.o
- 0x0102f3b4 0x0102f3b4 0x00000026 Code RO 6200 i.uxListRemove list.o
+ 0x0102f3b4 0x0102f3b4 0x00000026 Code RO 6203 i.uxListRemove list.o
0x0102f3da 0x0102f3da 0x00000002 PAD
- 0x0102f3dc 0x0102f3dc 0x0000000c Code RO 5689 i.uxTaskGetNumberOfTasks tasks.o
- 0x0102f3e8 0x0102f3e8 0x00000098 Code RO 5690 i.uxTaskGetSystemState tasks.o
- 0x0102f480 0x0102f480 0x00000020 Code RO 4280 i.vApplicationIdleHook main.o
- 0x0102f4a0 0x0102f4a0 0x00000016 Code RO 6201 i.vListInitialise list.o
- 0x0102f4b6 0x0102f4b6 0x00000006 Code RO 6202 i.vListInitialiseItem list.o
- 0x0102f4bc 0x0102f4bc 0x00000032 Code RO 6203 i.vListInsert list.o
- 0x0102f4ee 0x0102f4ee 0x00000018 Code RO 6204 i.vListInsertEnd list.o
+ 0x0102f3dc 0x0102f3dc 0x0000000c Code RO 5692 i.uxTaskGetNumberOfTasks tasks.o
+ 0x0102f3e8 0x0102f3e8 0x00000098 Code RO 5693 i.uxTaskGetSystemState tasks.o
+ 0x0102f480 0x0102f480 0x00000020 Code RO 4283 i.vApplicationIdleHook main.o
+ 0x0102f4a0 0x0102f4a0 0x00000016 Code RO 6204 i.vListInitialise list.o
+ 0x0102f4b6 0x0102f4b6 0x00000006 Code RO 6205 i.vListInitialiseItem list.o
+ 0x0102f4bc 0x0102f4bc 0x00000032 Code RO 6206 i.vListInsert list.o
+ 0x0102f4ee 0x0102f4ee 0x00000018 Code RO 6207 i.vListInsertEnd list.o
0x0102f506 0x0102f506 0x00000002 PAD
- 0x0102f508 0x0102f508 0x00000018 Code RO 6292 i.vPortEnterCritical port.o
- 0x0102f520 0x0102f520 0x0000001c Code RO 6293 i.vPortExitCritical port.o
- 0x0102f53c 0x0102f53c 0x00000044 Code RO 6244 i.vPortFree heap_4.o
- 0x0102f580 0x0102f580 0x00000018 Code RO 6294 i.vPortYield port.o
- 0x0102f598 0x0102f598 0x00000030 Code RO 5695 i.vTaskDelay tasks.o
- 0x0102f5c8 0x0102f5c8 0x00000010 Code RO 5700 i.vTaskInternalSetTimeOutState tasks.o
- 0x0102f5d8 0x0102f5d8 0x000000d0 Code RO 5701 i.vTaskList tasks.o
- 0x0102f6a8 0x0102f6a8 0x0000000c Code RO 5702 i.vTaskMissedYield tasks.o
- 0x0102f6b4 0x0102f6b4 0x00000024 Code RO 5704 i.vTaskPlaceOnEventList tasks.o
- 0x0102f6d8 0x0102f6d8 0x00000074 Code RO 5706 i.vTaskPriorityDisinheritAfterTimeout tasks.o
- 0x0102f74c 0x0102f74c 0x00000050 Code RO 5712 i.vTaskStartScheduler tasks.o
- 0x0102f79c 0x0102f79c 0x00000010 Code RO 5714 i.vTaskSuspendAll tasks.o
- 0x0102f7ac 0x0102f7ac 0x00000064 Code RO 5715 i.vTaskSwitchContext tasks.o
- 0x0102f810 0x0102f810 0x0000000c Code RO 6246 i.xPortGetFreeHeapSize heap_4.o
- 0x0102f81c 0x0102f81c 0x0000000c Code RO 6247 i.xPortGetMinimumEverFreeHeapSize heap_4.o
- 0x0102f828 0x0102f828 0x00000050 Code RO 6295 i.xPortStartScheduler port.o
- 0x0102f878 0x0102f878 0x00000024 Code RO 6024 i.xQueueCreateMutex queue.o
- 0x0102f89c 0x0102f89c 0x00000044 Code RO 6025 i.xQueueGenericCreate queue.o
- 0x0102f8e0 0x0102f8e0 0x0000006e Code RO 6026 i.xQueueGenericReset queue.o
- 0x0102f94e 0x0102f94e 0x0000018e Code RO 6027 i.xQueueGenericSend queue.o
- 0x0102fadc 0x0102fadc 0x00000074 Code RO 6031 i.xQueueGiveFromISR queue.o
- 0x0102fb50 0x0102fb50 0x00000142 Code RO 6037 i.xQueueReceive queue.o
- 0x0102fc92 0x0102fc92 0x00000172 Code RO 6039 i.xQueueSemaphoreTake queue.o
- 0x0102fe04 0x0102fe04 0x00000064 Code RO 5716 i.xTaskCheckForTimeOut tasks.o
- 0x0102fe68 0x0102fe68 0x00000178 Code RO 5717 i.xTaskCreate tasks.o
- 0x0102ffe0 0x0102ffe0 0x00000020 Code RO 5721 i.xTaskGetSchedulerState tasks.o
- 0x01030000 0x01030000 0x0000000c Code RO 5722 i.xTaskGetTickCount tasks.o
- 0x0103000c 0x0103000c 0x000000d4 Code RO 5724 i.xTaskIncrementTick tasks.o
- 0x010300e0 0x010300e0 0x00000068 Code RO 5727 i.xTaskPriorityDisinherit tasks.o
- 0x01030148 0x01030148 0x00000078 Code RO 5728 i.xTaskPriorityInherit tasks.o
- 0x010301c0 0x010301c0 0x00000064 Code RO 5729 i.xTaskRemoveFromEventList tasks.o
- 0x01030224 0x01030224 0x000000c8 Code RO 5730 i.xTaskResumeAll tasks.o
+ 0x0102f508 0x0102f508 0x00000018 Code RO 6295 i.vPortEnterCritical port.o
+ 0x0102f520 0x0102f520 0x0000001c Code RO 6296 i.vPortExitCritical port.o
+ 0x0102f53c 0x0102f53c 0x00000044 Code RO 6247 i.vPortFree heap_4.o
+ 0x0102f580 0x0102f580 0x00000018 Code RO 6297 i.vPortYield port.o
+ 0x0102f598 0x0102f598 0x00000030 Code RO 5698 i.vTaskDelay tasks.o
+ 0x0102f5c8 0x0102f5c8 0x00000010 Code RO 5703 i.vTaskInternalSetTimeOutState tasks.o
+ 0x0102f5d8 0x0102f5d8 0x000000d0 Code RO 5704 i.vTaskList tasks.o
+ 0x0102f6a8 0x0102f6a8 0x0000000c Code RO 5705 i.vTaskMissedYield tasks.o
+ 0x0102f6b4 0x0102f6b4 0x00000024 Code RO 5707 i.vTaskPlaceOnEventList tasks.o
+ 0x0102f6d8 0x0102f6d8 0x00000074 Code RO 5709 i.vTaskPriorityDisinheritAfterTimeout tasks.o
+ 0x0102f74c 0x0102f74c 0x00000050 Code RO 5715 i.vTaskStartScheduler tasks.o
+ 0x0102f79c 0x0102f79c 0x00000010 Code RO 5717 i.vTaskSuspendAll tasks.o
+ 0x0102f7ac 0x0102f7ac 0x00000064 Code RO 5718 i.vTaskSwitchContext tasks.o
+ 0x0102f810 0x0102f810 0x0000000c Code RO 6249 i.xPortGetFreeHeapSize heap_4.o
+ 0x0102f81c 0x0102f81c 0x0000000c Code RO 6250 i.xPortGetMinimumEverFreeHeapSize heap_4.o
+ 0x0102f828 0x0102f828 0x00000050 Code RO 6298 i.xPortStartScheduler port.o
+ 0x0102f878 0x0102f878 0x00000024 Code RO 6027 i.xQueueCreateMutex queue.o
+ 0x0102f89c 0x0102f89c 0x00000044 Code RO 6028 i.xQueueGenericCreate queue.o
+ 0x0102f8e0 0x0102f8e0 0x0000006e Code RO 6029 i.xQueueGenericReset queue.o
+ 0x0102f94e 0x0102f94e 0x0000018e Code RO 6030 i.xQueueGenericSend queue.o
+ 0x0102fadc 0x0102fadc 0x00000074 Code RO 6034 i.xQueueGiveFromISR queue.o
+ 0x0102fb50 0x0102fb50 0x00000142 Code RO 6040 i.xQueueReceive queue.o
+ 0x0102fc92 0x0102fc92 0x00000172 Code RO 6042 i.xQueueSemaphoreTake queue.o
+ 0x0102fe04 0x0102fe04 0x00000064 Code RO 5719 i.xTaskCheckForTimeOut tasks.o
+ 0x0102fe68 0x0102fe68 0x00000178 Code RO 5720 i.xTaskCreate tasks.o
+ 0x0102ffe0 0x0102ffe0 0x00000020 Code RO 5724 i.xTaskGetSchedulerState tasks.o
+ 0x01030000 0x01030000 0x0000000c Code RO 5725 i.xTaskGetTickCount tasks.o
+ 0x0103000c 0x0103000c 0x000000d4 Code RO 5727 i.xTaskIncrementTick tasks.o
+ 0x010300e0 0x010300e0 0x00000068 Code RO 5730 i.xTaskPriorityDisinherit tasks.o
+ 0x01030148 0x01030148 0x00000078 Code RO 5731 i.xTaskPriorityInherit tasks.o
+ 0x010301c0 0x010301c0 0x00000064 Code RO 5732 i.xTaskRemoveFromEventList tasks.o
+ 0x01030224 0x01030224 0x000000c8 Code RO 5733 i.xTaskResumeAll tasks.o
0x010302ec 0x010302ec 0x000001d8 Data RO 20 .constdata system_n32wb03x.o
0x010304c4 0x010304c4 0x0000000c Data RO 782 .constdata n32wb03x_rcc.o
0x010304d0 0x010304d0 0x00000324 Data RO 1952 .constdata n32wb03x_qflash.o
@@ -5425,17 +5425,17 @@ Memory Map of the image
0x01030e0c 0x01030e0c 0x00000136 Data RO 4112 .constdata app_rdtss.o
0x01030f42 0x01030f42 0x00000002 PAD
0x01030f44 0x01030f44 0x00000018 Data RO 4113 .constdata app_rdtss.o
- 0x01030f5c 0x01030f5c 0x000000cc Data RO 4476 .constdata cli_core.o
- 0x01031028 0x01031028 0x00000007 Data RO 4888 .constdata app_info.o
- 0x0103102f 0x0103102f 0x00000081 Data RO 6747 .constdata mc_p.l(ctype_o.o)
- 0x010310b0 0x010310b0 0x00000004 Data RO 6748 .constdata mc_p.l(ctype_o.o)
- 0x010310b4 0x010310b4 0x00000489 Data RO 4477 .conststring cli_core.o
+ 0x01030f5c 0x01030f5c 0x000000cc Data RO 4479 .constdata cli_core.o
+ 0x01031028 0x01031028 0x00000007 Data RO 4891 .constdata app_info.o
+ 0x0103102f 0x0103102f 0x00000081 Data RO 6750 .constdata mc_p.l(ctype_o.o)
+ 0x010310b0 0x010310b0 0x00000004 Data RO 6751 .constdata mc_p.l(ctype_o.o)
+ 0x010310b4 0x010310b4 0x00000489 Data RO 4480 .conststring cli_core.o
0x0103153d 0x0103153d 0x00000003 PAD
- 0x01031540 0x01031540 0x00000043 Data RO 5015 .conststring app_params.o
+ 0x01031540 0x01031540 0x00000043 Data RO 5018 .conststring app_params.o
0x01031583 0x01031583 0x00000001 PAD
- 0x01031584 0x01031584 0x00000091 Data RO 5080 .conststring app_bootset.o
+ 0x01031584 0x01031584 0x00000091 Data RO 5083 .conststring app_bootset.o
0x01031615 0x01031615 0x00000003 PAD
- 0x01031618 0x01031618 0x00000020 Data RO 6809 Region$$Table anon$$obj.o
+ 0x01031618 0x01031618 0x00000020 Data RO 6812 Region$$Table anon$$obj.o
Execution Region RW_IRAM1 (Exec base: 0x20004000, Load base: 0x01031638, Size: 0x00007de8, Max: 0x0000c000, ABSOLUTE, COMPRESSED[0x00000618])
@@ -5451,46 +5451,46 @@ Memory Map of the image
0x20004734 COMPRESSED 0x00000002 Data RW 3924 .data ns_ble_task.o
0x20004736 COMPRESSED 0x00000001 Data RW 3925 .data ns_ble_task.o
0x20004737 COMPRESSED 0x00000001 Data RW 4114 .data app_rdtss.o
- 0x20004738 COMPRESSED 0x00000004 Data RW 4281 .data main.o
- 0x2000473c COMPRESSED 0x00000010 Data RW 4390 .data bsp_usart.o
- 0x2000474c COMPRESSED 0x00000004 Data RW 4478 .data cli_core.o
- 0x20004750 COMPRESSED 0x00000003 Data RW 4595 .data app_cli.o
+ 0x20004738 COMPRESSED 0x00000004 Data RW 4284 .data main.o
+ 0x2000473c COMPRESSED 0x00000010 Data RW 4393 .data bsp_usart.o
+ 0x2000474c COMPRESSED 0x00000004 Data RW 4481 .data cli_core.o
+ 0x20004750 COMPRESSED 0x00000003 Data RW 4598 .data app_cli.o
0x20004753 COMPRESSED 0x00000001 PAD
- 0x20004754 COMPRESSED 0x00000006 Data RW 4641 .data ble_up.o
- 0x2000475a COMPRESSED 0x0000000c Data RW 4710 .data app_ble_proto.o
+ 0x20004754 COMPRESSED 0x00000006 Data RW 4644 .data ble_up.o
+ 0x2000475a COMPRESSED 0x0000000c Data RW 4713 .data app_ble_proto.o
0x20004766 COMPRESSED 0x00000002 PAD
- 0x20004768 COMPRESSED 0x0000003c Data RW 4790 .data app_ota.o
- 0x200047a4 COMPRESSED 0x00000004 Data RW 4889 .data app_info.o
- 0x200047a8 COMPRESSED 0x00000002 Data RW 5016 .data app_params.o
- 0x200047aa COMPRESSED 0x00000001 Data RW 5081 .data app_bootset.o
+ 0x20004768 COMPRESSED 0x0000003c Data RW 4793 .data app_ota.o
+ 0x200047a4 COMPRESSED 0x00000004 Data RW 4892 .data app_info.o
+ 0x200047a8 COMPRESSED 0x00000002 Data RW 5019 .data app_params.o
+ 0x200047aa COMPRESSED 0x00000001 Data RW 5084 .data app_bootset.o
0x200047ab COMPRESSED 0x00000001 PAD
- 0x200047ac COMPRESSED 0x00000014 Data RW 5209 .data cjson.o
- 0x200047c0 COMPRESSED 0x00000001 Data RW 5666 .data infra_cjson.o
+ 0x200047ac COMPRESSED 0x00000014 Data RW 5212 .data cjson.o
+ 0x200047c0 COMPRESSED 0x00000001 Data RW 5669 .data infra_cjson.o
0x200047c1 COMPRESSED 0x00000003 PAD
- 0x200047c4 COMPRESSED 0x0000003c Data RW 5733 .data tasks.o
- 0x20004800 COMPRESSED 0x00000018 Data RW 6249 .data heap_4.o
- 0x20004818 COMPRESSED 0x00000004 Data RW 6296 .data port.o
- 0x2000481c COMPRESSED 0x00000004 Data RW 6367 .data mc_p.l(rand.o)
- 0x20004820 COMPRESSED 0x00000004 Data RW 6774 .data mc_p.l(mvars.o)
- 0x20004824 COMPRESSED 0x00000004 Data RW 6775 .data mc_p.l(mvars.o)
- 0x20004828 COMPRESSED 0x00000004 Data RW 6779 .data mc_p.l(errno.o)
+ 0x200047c4 COMPRESSED 0x0000003c Data RW 5736 .data tasks.o
+ 0x20004800 COMPRESSED 0x00000018 Data RW 6252 .data heap_4.o
+ 0x20004818 COMPRESSED 0x00000004 Data RW 6299 .data port.o
+ 0x2000481c COMPRESSED 0x00000004 Data RW 6370 .data mc_p.l(rand.o)
+ 0x20004820 COMPRESSED 0x00000004 Data RW 6777 .data mc_p.l(mvars.o)
+ 0x20004824 COMPRESSED 0x00000004 Data RW 6778 .data mc_p.l(mvars.o)
+ 0x20004828 COMPRESSED 0x00000004 Data RW 6782 .data mc_p.l(errno.o)
0x2000482c - 0x00000034 Zero RW 19 .bss system_n32wb03x.o
0x20004860 - 0x00000328 Zero RW 1951 .bss n32wb03x_qflash.o
0x20004b88 - 0x0000011c Zero RW 2594 .bss prf.o
0x20004ca4 - 0x00000050 Zero RW 3202 .bss ns_timer.o
0x20004cf4 - 0x0000005c Zero RW 3278 .bss ns_sec.o
0x20004d50 - 0x000001b0 Zero RW 3553 .bss ns_ble.o
- 0x20004f00 - 0x00000c00 Zero RW 4389 .bss bsp_usart.o
- 0x20005b00 - 0x000001e0 Zero RW 4475 .bss cli_core.o
- 0x20005ce0 - 0x00000240 Zero RW 4594 .bss app_cli.o
- 0x20005f20 - 0x00000200 Zero RW 4640 .bss ble_up.o
- 0x20006120 - 0x0000077b Zero RW 4709 .bss app_ble_proto.o
- 0x2000689b - 0x000001f7 Zero RW 4789 .bss app_ota.o
- 0x20006a92 - 0x00000030 Zero RW 4887 .bss app_info.o
+ 0x20004f00 - 0x00000c00 Zero RW 4392 .bss bsp_usart.o
+ 0x20005b00 - 0x000001e0 Zero RW 4478 .bss cli_core.o
+ 0x20005ce0 - 0x00000240 Zero RW 4597 .bss app_cli.o
+ 0x20005f20 - 0x00000200 Zero RW 4643 .bss ble_up.o
+ 0x20006120 - 0x0000077b Zero RW 4712 .bss app_ble_proto.o
+ 0x2000689b - 0x000001f7 Zero RW 4792 .bss app_ota.o
+ 0x20006a92 - 0x00000030 Zero RW 4890 .bss app_info.o
0x20006ac2 COMPRESSED 0x00000002 PAD
- 0x20006ac4 - 0x00000034 Zero RW 5014 .bss app_params.o
- 0x20006af8 - 0x000000f0 Zero RW 5732 .bss tasks.o
- 0x20006be8 - 0x00004800 Zero RW 6248 .bss heap_4.o
+ 0x20006ac4 - 0x00000034 Zero RW 5017 .bss app_params.o
+ 0x20006af8 - 0x000000f0 Zero RW 5735 .bss tasks.o
+ 0x20006be8 - 0x00004800 Zero RW 6251 .bss heap_4.o
0x2000b3e8 - 0x00000200 Zero RW 2 HEAP startup_n32wb03x.o
0x2000b5e8 - 0x00000800 Zero RW 1 STACK startup_n32wb03x.o
@@ -5504,12 +5504,12 @@ Image component sizes
696 188 0 0 0 12840 app_ble.o
1204 254 0 12 1915 9528 app_ble_proto.o
- 2032 1156 145 1 0 5563 app_bootset.o
+ 2032 1156 145 1 0 5615 app_bootset.o
1468 216 0 3 576 6799 app_cli.o
284 102 16 0 0 8644 app_dis.o
100 12 0 0 0 2298 app_gpio.o
868 110 7 4 48 8056 app_info.o
- 1910 160 0 60 503 14978 app_ota.o
+ 1910 160 0 60 503 15102 app_ota.o
1432 594 67 2 52 7737 app_params.o
626 156 334 1 0 6074 app_rdtss.o
196 36 0 6 512 2736 ble_up.o
@@ -5553,7 +5553,7 @@ Image component sizes
2552 254 0 60 240 27732 tasks.o
----------------------------------------------------------------------
- 41728 7612 4999 2076 30140 920311 Object Totals
+ 41728 7612 4999 2076 30140 920487 Object Totals
528 176 32 0 0 0 (incl. Generated)
40 0 11 27 2 0 (incl. Padding)
@@ -5647,8 +5647,8 @@ Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug
- 49708 7904 5132 2092 30140 906199 Grand Totals
- 49708 7904 5132 1560 30140 906199 ELF Image Totals (compressed)
+ 49708 7904 5132 2092 30140 906375 Grand Totals
+ 49708 7904 5132 1560 30140 906375 ELF Image Totals (compressed)
49708 7904 5132 1560 0 0 ROM Totals
==============================================================================
diff --git a/mcm-ddc-ble/MDK-ARM/Listings/mcm-ddc-ble.map b/mcm-ddc-ble/MDK-ARM/Listings/mcm-ddc-ble.map
index 4a00a52..18b0781 100644
--- a/mcm-ddc-ble/MDK-ARM/Listings/mcm-ddc-ble.map
+++ b/mcm-ddc-ble/MDK-ARM/Listings/mcm-ddc-ble.map
@@ -4829,97 +4829,97 @@ Memory Map of the image
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x01008000 0x01008000 0x000000c0 Data RO 3 RESET startup_n32wb03x.o
- 0x010080c0 0x010080c0 0x00000000 Code RO 6355 * .ARM.Collect$$$$00000000 mc_p.l(entry.o)
- 0x010080c0 0x010080c0 0x00000004 Code RO 6724 .ARM.Collect$$$$00000001 mc_p.l(entry2.o)
- 0x010080c4 0x010080c4 0x00000004 Code RO 6727 .ARM.Collect$$$$00000004 mc_p.l(entry5.o)
- 0x010080c8 0x010080c8 0x00000000 Code RO 6729 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o)
- 0x010080c8 0x010080c8 0x00000000 Code RO 6731 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o)
- 0x010080c8 0x010080c8 0x00000008 Code RO 6732 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o)
- 0x010080d0 0x010080d0 0x00000000 Code RO 6734 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o)
- 0x010080d0 0x010080d0 0x00000000 Code RO 6736 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o)
- 0x010080d0 0x010080d0 0x00000004 Code RO 6725 .ARM.Collect$$$$00002712 mc_p.l(entry2.o)
+ 0x010080c0 0x010080c0 0x00000000 Code RO 6358 * .ARM.Collect$$$$00000000 mc_p.l(entry.o)
+ 0x010080c0 0x010080c0 0x00000004 Code RO 6727 .ARM.Collect$$$$00000001 mc_p.l(entry2.o)
+ 0x010080c4 0x010080c4 0x00000004 Code RO 6730 .ARM.Collect$$$$00000004 mc_p.l(entry5.o)
+ 0x010080c8 0x010080c8 0x00000000 Code RO 6732 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o)
+ 0x010080c8 0x010080c8 0x00000000 Code RO 6734 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o)
+ 0x010080c8 0x010080c8 0x00000008 Code RO 6735 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o)
+ 0x010080d0 0x010080d0 0x00000000 Code RO 6737 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o)
+ 0x010080d0 0x010080d0 0x00000000 Code RO 6739 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o)
+ 0x010080d0 0x010080d0 0x00000004 Code RO 6728 .ARM.Collect$$$$00002712 mc_p.l(entry2.o)
0x010080d4 0x010080d4 0x0000000e Code RO 10 .emb_text system_n32wb03x.o
0x010080e2 0x010080e2 0x00000002 PAD
- 0x010080e4 0x010080e4 0x0000000c Code RO 4672 .emb_text n32wb03x_it.o
- 0x010080f0 0x010080f0 0x00000078 Code RO 6286 .emb_text port.o
+ 0x010080e4 0x010080e4 0x0000000c Code RO 4675 .emb_text n32wb03x_it.o
+ 0x010080f0 0x010080f0 0x00000078 Code RO 6289 .emb_text port.o
0x01008168 0x01008168 0x0000001c Code RO 4 .text startup_n32wb03x.o
- 0x01008184 0x01008184 0x0000002c Code RO 6358 .text mc_p.l(uidiv.o)
- 0x010081b0 0x010081b0 0x00000028 Code RO 6360 .text mc_p.l(idiv.o)
- 0x010081d8 0x010081d8 0x00000060 Code RO 6362 .text mc_p.l(uldiv.o)
- 0x01008238 0x01008238 0x0000000c Code RO 6364 .text mc_p.l(tolower.o)
- 0x01008244 0x01008244 0x00000024 Code RO 6366 .text mc_p.l(rand.o)
- 0x01008268 0x01008268 0x00000024 Code RO 6369 .text mc_p.l(memcpya.o)
- 0x0100828c 0x0100828c 0x00000024 Code RO 6371 .text mc_p.l(memseta.o)
- 0x010082b0 0x010082b0 0x0000000e Code RO 6373 .text mc_p.l(strlen.o)
- 0x010082be 0x010082be 0x0000001c Code RO 6375 .text mc_p.l(strcmp.o)
- 0x010082da 0x010082da 0x00000014 Code RO 6377 .text mc_p.l(memchr.o)
- 0x010082ee 0x010082ee 0x0000001a Code RO 6379 .text mc_p.l(memcmp.o)
- 0x01008308 0x01008308 0x00000012 Code RO 6381 .text mc_p.l(strcpy.o)
- 0x0100831a 0x0100831a 0x0000001e Code RO 6383 .text mc_p.l(strncmp.o)
- 0x01008338 0x01008338 0x0000003c Code RO 6676 .text mc_p.l(__0sscanf.o)
- 0x01008374 0x01008374 0x00000374 Code RO 6678 .text mc_p.l(scanf_fp.o)
- 0x010086e8 0x010086e8 0x00000076 Code RO 6682 .text mc_p.l(strtoul.o)
- 0x0100875e 0x0100875e 0x000000b2 Code RO 6684 .text mf_p.l(fadd.o)
- 0x01008810 0x01008810 0x0000007a Code RO 6686 .text mf_p.l(fmul.o)
+ 0x01008184 0x01008184 0x0000002c Code RO 6361 .text mc_p.l(uidiv.o)
+ 0x010081b0 0x010081b0 0x00000028 Code RO 6363 .text mc_p.l(idiv.o)
+ 0x010081d8 0x010081d8 0x00000060 Code RO 6365 .text mc_p.l(uldiv.o)
+ 0x01008238 0x01008238 0x0000000c Code RO 6367 .text mc_p.l(tolower.o)
+ 0x01008244 0x01008244 0x00000024 Code RO 6369 .text mc_p.l(rand.o)
+ 0x01008268 0x01008268 0x00000024 Code RO 6372 .text mc_p.l(memcpya.o)
+ 0x0100828c 0x0100828c 0x00000024 Code RO 6374 .text mc_p.l(memseta.o)
+ 0x010082b0 0x010082b0 0x0000000e Code RO 6376 .text mc_p.l(strlen.o)
+ 0x010082be 0x010082be 0x0000001c Code RO 6378 .text mc_p.l(strcmp.o)
+ 0x010082da 0x010082da 0x00000014 Code RO 6380 .text mc_p.l(memchr.o)
+ 0x010082ee 0x010082ee 0x0000001a Code RO 6382 .text mc_p.l(memcmp.o)
+ 0x01008308 0x01008308 0x00000012 Code RO 6384 .text mc_p.l(strcpy.o)
+ 0x0100831a 0x0100831a 0x0000001e Code RO 6386 .text mc_p.l(strncmp.o)
+ 0x01008338 0x01008338 0x0000003c Code RO 6679 .text mc_p.l(__0sscanf.o)
+ 0x01008374 0x01008374 0x00000374 Code RO 6681 .text mc_p.l(scanf_fp.o)
+ 0x010086e8 0x010086e8 0x00000076 Code RO 6685 .text mc_p.l(strtoul.o)
+ 0x0100875e 0x0100875e 0x000000b2 Code RO 6687 .text mf_p.l(fadd.o)
+ 0x01008810 0x01008810 0x0000007a Code RO 6689 .text mf_p.l(fmul.o)
0x0100888a 0x0100888a 0x00000002 PAD
- 0x0100888c 0x0100888c 0x00000164 Code RO 6690 .text mf_p.l(dadd.o)
- 0x010089f0 0x010089f0 0x000000d0 Code RO 6692 .text mf_p.l(dmul.o)
- 0x01008ac0 0x01008ac0 0x000000f0 Code RO 6694 .text mf_p.l(ddiv.o)
- 0x01008bb0 0x01008bb0 0x0000002c Code RO 6696 .text mf_p.l(dscalb.o)
- 0x01008bdc 0x01008bdc 0x0000000e Code RO 6700 .text mf_p.l(ffltui.o)
+ 0x0100888c 0x0100888c 0x00000164 Code RO 6693 .text mf_p.l(dadd.o)
+ 0x010089f0 0x010089f0 0x000000d0 Code RO 6695 .text mf_p.l(dmul.o)
+ 0x01008ac0 0x01008ac0 0x000000f0 Code RO 6697 .text mf_p.l(ddiv.o)
+ 0x01008bb0 0x01008bb0 0x0000002c Code RO 6699 .text mf_p.l(dscalb.o)
+ 0x01008bdc 0x01008bdc 0x0000000e Code RO 6703 .text mf_p.l(ffltui.o)
0x01008bea 0x01008bea 0x00000002 PAD
- 0x01008bec 0x01008bec 0x00000028 Code RO 6702 .text mf_p.l(dflti.o)
- 0x01008c14 0x01008c14 0x0000001c Code RO 6704 .text mf_p.l(dfltui.o)
- 0x01008c30 0x01008c30 0x0000001c Code RO 6706 .text mf_p.l(dfltul.o)
- 0x01008c4c 0x01008c4c 0x00000032 Code RO 6708 .text mf_p.l(ffixi.o)
+ 0x01008bec 0x01008bec 0x00000028 Code RO 6705 .text mf_p.l(dflti.o)
+ 0x01008c14 0x01008c14 0x0000001c Code RO 6707 .text mf_p.l(dfltui.o)
+ 0x01008c30 0x01008c30 0x0000001c Code RO 6709 .text mf_p.l(dfltul.o)
+ 0x01008c4c 0x01008c4c 0x00000032 Code RO 6711 .text mf_p.l(ffixi.o)
0x01008c7e 0x01008c7e 0x00000002 PAD
- 0x01008c80 0x01008c80 0x00000048 Code RO 6712 .text mf_p.l(dfixi.o)
- 0x01008cc8 0x01008cc8 0x00000040 Code RO 6714 .text mf_p.l(dfixul.o)
- 0x01008d08 0x01008d08 0x00000028 Code RO 6716 .text mf_p.l(f2d.o)
- 0x01008d30 0x01008d30 0x00000028 Code RO 6718 .text mf_p.l(cdcmple.o)
- 0x01008d58 0x01008d58 0x00000028 Code RO 6720 .text mf_p.l(cdrcmple.o)
- 0x01008d80 0x01008d80 0x00000038 Code RO 6722 .text mf_p.l(d2f.o)
- 0x01008db8 0x01008db8 0x0000007a Code RO 6738 .text mc_p.l(llmul.o)
- 0x01008e32 0x01008e32 0x00000020 Code RO 6740 .text mc_p.l(llshl.o)
- 0x01008e52 0x01008e52 0x00000022 Code RO 6742 .text mc_p.l(llushr.o)
- 0x01008e74 0x01008e74 0x00000026 Code RO 6744 .text mc_p.l(llsshr.o)
+ 0x01008c80 0x01008c80 0x00000048 Code RO 6715 .text mf_p.l(dfixi.o)
+ 0x01008cc8 0x01008cc8 0x00000040 Code RO 6717 .text mf_p.l(dfixul.o)
+ 0x01008d08 0x01008d08 0x00000028 Code RO 6719 .text mf_p.l(f2d.o)
+ 0x01008d30 0x01008d30 0x00000028 Code RO 6721 .text mf_p.l(cdcmple.o)
+ 0x01008d58 0x01008d58 0x00000028 Code RO 6723 .text mf_p.l(cdrcmple.o)
+ 0x01008d80 0x01008d80 0x00000038 Code RO 6725 .text mf_p.l(d2f.o)
+ 0x01008db8 0x01008db8 0x0000007a Code RO 6741 .text mc_p.l(llmul.o)
+ 0x01008e32 0x01008e32 0x00000020 Code RO 6743 .text mc_p.l(llshl.o)
+ 0x01008e52 0x01008e52 0x00000022 Code RO 6745 .text mc_p.l(llushr.o)
+ 0x01008e74 0x01008e74 0x00000026 Code RO 6747 .text mc_p.l(llsshr.o)
0x01008e9a 0x01008e9a 0x00000002 PAD
- 0x01008e9c 0x01008e9c 0x00000008 Code RO 6746 .text mc_p.l(ctype_o.o)
- 0x01008ea4 0x01008ea4 0x00000012 Code RO 6768 .text mc_p.l(isspace_o.o)
+ 0x01008e9c 0x01008e9c 0x00000008 Code RO 6749 .text mc_p.l(ctype_o.o)
+ 0x01008ea4 0x01008ea4 0x00000012 Code RO 6771 .text mc_p.l(isspace_o.o)
0x01008eb6 0x01008eb6 0x00000002 PAD
- 0x01008eb8 0x01008eb8 0x0000002c Code RO 6783 .text mc_p.l(scanf_char.o)
- 0x01008ee4 0x01008ee4 0x00000044 Code RO 6785 .text mc_p.l(_sgetc.o)
- 0x01008f28 0x01008f28 0x000000a6 Code RO 6787 .text mc_p.l(_strtoul.o)
+ 0x01008eb8 0x01008eb8 0x0000002c Code RO 6786 .text mc_p.l(scanf_char.o)
+ 0x01008ee4 0x01008ee4 0x00000044 Code RO 6788 .text mc_p.l(_sgetc.o)
+ 0x01008f28 0x01008f28 0x000000a6 Code RO 6790 .text mc_p.l(_strtoul.o)
0x01008fce 0x01008fce 0x00000002 PAD
- 0x01008fd0 0x01008fd0 0x000000a4 Code RO 6789 .text mc_p.l(strtod.o)
- 0x01009074 0x01009074 0x00000000 Code RO 6791 .text mc_p.l(iusefp.o)
- 0x01009074 0x01009074 0x00000082 Code RO 6792 .text mf_p.l(fepilogue.o)
- 0x010090f6 0x010090f6 0x000000be Code RO 6794 .text mf_p.l(depilogue.o)
- 0x010091b4 0x010091b4 0x00000024 Code RO 6798 .text mc_p.l(init.o)
- 0x010091d8 0x010091d8 0x0000001e Code RO 6802 .text mc_p.l(_chval.o)
+ 0x01008fd0 0x01008fd0 0x000000a4 Code RO 6792 .text mc_p.l(strtod.o)
+ 0x01009074 0x01009074 0x00000000 Code RO 6794 .text mc_p.l(iusefp.o)
+ 0x01009074 0x01009074 0x00000082 Code RO 6795 .text mf_p.l(fepilogue.o)
+ 0x010090f6 0x010090f6 0x000000be Code RO 6797 .text mf_p.l(depilogue.o)
+ 0x010091b4 0x010091b4 0x00000024 Code RO 6801 .text mc_p.l(init.o)
+ 0x010091d8 0x010091d8 0x0000001e Code RO 6805 .text mc_p.l(_chval.o)
0x010091f6 0x010091f6 0x00000002 PAD
- 0x010091f8 0x010091f8 0x00000338 Code RO 6804 .text mc_p.l(_scanf.o)
- 0x01009530 0x01009530 0x00000056 Code RO 6811 .text mc_p.l(__dczerorl2.o)
+ 0x010091f8 0x010091f8 0x00000338 Code RO 6807 .text mc_p.l(_scanf.o)
+ 0x01009530 0x01009530 0x00000056 Code RO 6814 .text mc_p.l(__dczerorl2.o)
0x01009586 0x01009586 0x00000002 PAD
- 0x01009588 0x01009588 0x0000000c Ven RO 6813 Veneer$$Code anon$$obj.o
- 0x01009594 0x01009594 0x0000000c Ven RO 6814 Veneer$$Code anon$$obj.o
- 0x010095a0 0x010095a0 0x0000000c Ven RO 6815 Veneer$$Code anon$$obj.o
- 0x010095ac 0x010095ac 0x0000000c Ven RO 6816 Veneer$$Code anon$$obj.o
- 0x010095b8 0x010095b8 0x0000000c Ven RO 6817 Veneer$$Code anon$$obj.o
- 0x010095c4 0x010095c4 0x0000000c Ven RO 6818 Veneer$$Code anon$$obj.o
- 0x010095d0 0x010095d0 0x0000000c Ven RO 6819 Veneer$$Code anon$$obj.o
- 0x010095dc 0x010095dc 0x0000000c Ven RO 6820 Veneer$$Code anon$$obj.o
- 0x010095e8 0x010095e8 0x0000000c Ven RO 6821 Veneer$$Code anon$$obj.o
- 0x010095f4 0x010095f4 0x0000000c Ven RO 6822 Veneer$$Code anon$$obj.o
- 0x01009600 0x01009600 0x0000000c Ven RO 6823 Veneer$$Code anon$$obj.o
- 0x0100960c 0x0100960c 0x0000000c Ven RO 6824 Veneer$$Code anon$$obj.o
- 0x01009618 0x01009618 0x0000000c Ven RO 6825 Veneer$$Code anon$$obj.o
- 0x01009624 0x01009624 0x0000000c Ven RO 6826 Veneer$$Code anon$$obj.o
- 0x01009630 0x01009630 0x0000000c Ven RO 6827 Veneer$$Code anon$$obj.o
- 0x0100963c 0x0100963c 0x0000000c Ven RO 6828 Veneer$$Code anon$$obj.o
- 0x01009648 0x01009648 0x0000000c Ven RO 6829 Veneer$$Code anon$$obj.o
- 0x01009654 0x01009654 0x0000000c Ven RO 6830 Veneer$$Code anon$$obj.o
- 0x01009660 0x01009660 0x0000000c Ven RO 6831 Veneer$$Code anon$$obj.o
+ 0x01009588 0x01009588 0x0000000c Ven RO 6816 Veneer$$Code anon$$obj.o
+ 0x01009594 0x01009594 0x0000000c Ven RO 6817 Veneer$$Code anon$$obj.o
+ 0x010095a0 0x010095a0 0x0000000c Ven RO 6818 Veneer$$Code anon$$obj.o
+ 0x010095ac 0x010095ac 0x0000000c Ven RO 6819 Veneer$$Code anon$$obj.o
+ 0x010095b8 0x010095b8 0x0000000c Ven RO 6820 Veneer$$Code anon$$obj.o
+ 0x010095c4 0x010095c4 0x0000000c Ven RO 6821 Veneer$$Code anon$$obj.o
+ 0x010095d0 0x010095d0 0x0000000c Ven RO 6822 Veneer$$Code anon$$obj.o
+ 0x010095dc 0x010095dc 0x0000000c Ven RO 6823 Veneer$$Code anon$$obj.o
+ 0x010095e8 0x010095e8 0x0000000c Ven RO 6824 Veneer$$Code anon$$obj.o
+ 0x010095f4 0x010095f4 0x0000000c Ven RO 6825 Veneer$$Code anon$$obj.o
+ 0x01009600 0x01009600 0x0000000c Ven RO 6826 Veneer$$Code anon$$obj.o
+ 0x0100960c 0x0100960c 0x0000000c Ven RO 6827 Veneer$$Code anon$$obj.o
+ 0x01009618 0x01009618 0x0000000c Ven RO 6828 Veneer$$Code anon$$obj.o
+ 0x01009624 0x01009624 0x0000000c Ven RO 6829 Veneer$$Code anon$$obj.o
+ 0x01009630 0x01009630 0x0000000c Ven RO 6830 Veneer$$Code anon$$obj.o
+ 0x0100963c 0x0100963c 0x0000000c Ven RO 6831 Veneer$$Code anon$$obj.o
+ 0x01009648 0x01009648 0x0000000c Ven RO 6832 Veneer$$Code anon$$obj.o
+ 0x01009654 0x01009654 0x0000000c Ven RO 6833 Veneer$$Code anon$$obj.o
+ 0x01009660 0x01009660 0x0000000c Ven RO 6834 Veneer$$Code anon$$obj.o
0x0100966c 0x0100966c 0x00000006 Code RO 192 i.ADC_ClearFlag n32wb03x_adc.o
0x01009672 0x01009672 0x0000000e Code RO 194 i.ADC_ConfigChannel n32wb03x_adc.o
0x01009680 0x01009680 0x00000054 Code RO 199 i.ADC_ConverValueToTemperature n32wb03x_adc.o
@@ -4932,25 +4932,25 @@ Memory Map of the image
0x0100982c 0x0100982c 0x0000000e Code RO 213 i.ADC_GetFlagStatus n32wb03x_adc.o
0x0100983a 0x0100983a 0x00000002 PAD
0x0100983c 0x0100983c 0x00000018 Code RO 218 i.ADC_SetOverSampleCounter n32wb03x_adc.o
- 0x01009854 0x01009854 0x000002ec Code RO 5075 i.AppBootset_CmdAppswitch app_bootset.o
- 0x01009b40 0x01009b40 0x00000034 Code RO 5076 i.AppBootset_CmdBsdump app_bootset.o
- 0x01009b74 0x01009b74 0x000002fc Code RO 5077 i.AppBootset_CmdBsset app_bootset.o
- 0x01009e70 0x01009e70 0x00000028 Code RO 4589 i.AppCli_Init app_cli.o
- 0x01009e98 0x01009e98 0x000000c8 Code RO 5006 i.AppParams_CmdAppget app_params.o
- 0x01009f60 0x01009f60 0x0000033c Code RO 5007 i.AppParams_CmdAppset app_params.o
- 0x0100a29c 0x0100a29c 0x00000520 Code RO 4591 i.CliTask app_cli.o
- 0x0100a7bc 0x0100a7bc 0x00000078 Code RO 4457 i.CmdBleLog cli_core.o
- 0x0100a834 0x0100a834 0x00000198 Code RO 4458 i.CmdDevInfo cli_core.o
- 0x0100a9cc 0x0100a9cc 0x00000090 Code RO 4459 i.CmdFactory cli_core.o
- 0x0100aa5c 0x0100aa5c 0x00000044 Code RO 4460 i.CmdHang cli_core.o
- 0x0100aaa0 0x0100aaa0 0x000000d4 Code RO 4461 i.CmdHelp cli_core.o
- 0x0100ab74 0x0100ab74 0x000000d0 Code RO 4462 i.CmdLed cli_core.o
- 0x0100ac44 0x0100ac44 0x00000014 Code RO 4463 i.CmdOta cli_core.o
- 0x0100ac58 0x0100ac58 0x00000034 Code RO 4464 i.CmdReset cli_core.o
- 0x0100ac8c 0x0100ac8c 0x000000e8 Code RO 4465 i.CmdSysInfo cli_core.o
- 0x0100ad74 0x0100ad74 0x00000070 Code RO 4466 i.CmdUartInfo cli_core.o
- 0x0100ade4 0x0100ade4 0x00000044 Code RO 4467 i.CmdUartRst cli_core.o
- 0x0100ae28 0x0100ae28 0x00000098 Code RO 4468 i.CmdVersion cli_core.o
+ 0x01009854 0x01009854 0x000002ec Code RO 5078 i.AppBootset_CmdAppswitch app_bootset.o
+ 0x01009b40 0x01009b40 0x00000034 Code RO 5079 i.AppBootset_CmdBsdump app_bootset.o
+ 0x01009b74 0x01009b74 0x000002fc Code RO 5080 i.AppBootset_CmdBsset app_bootset.o
+ 0x01009e70 0x01009e70 0x00000028 Code RO 4592 i.AppCli_Init app_cli.o
+ 0x01009e98 0x01009e98 0x000000c8 Code RO 5009 i.AppParams_CmdAppget app_params.o
+ 0x01009f60 0x01009f60 0x0000033c Code RO 5010 i.AppParams_CmdAppset app_params.o
+ 0x0100a29c 0x0100a29c 0x00000520 Code RO 4594 i.CliTask app_cli.o
+ 0x0100a7bc 0x0100a7bc 0x00000078 Code RO 4460 i.CmdBleLog cli_core.o
+ 0x0100a834 0x0100a834 0x00000198 Code RO 4461 i.CmdDevInfo cli_core.o
+ 0x0100a9cc 0x0100a9cc 0x00000090 Code RO 4462 i.CmdFactory cli_core.o
+ 0x0100aa5c 0x0100aa5c 0x00000044 Code RO 4463 i.CmdHang cli_core.o
+ 0x0100aaa0 0x0100aaa0 0x000000d4 Code RO 4464 i.CmdHelp cli_core.o
+ 0x0100ab74 0x0100ab74 0x000000d0 Code RO 4465 i.CmdLed cli_core.o
+ 0x0100ac44 0x0100ac44 0x00000014 Code RO 4466 i.CmdOta cli_core.o
+ 0x0100ac58 0x0100ac58 0x00000034 Code RO 4467 i.CmdReset cli_core.o
+ 0x0100ac8c 0x0100ac8c 0x000000e8 Code RO 4468 i.CmdSysInfo cli_core.o
+ 0x0100ad74 0x0100ad74 0x00000070 Code RO 4469 i.CmdUartInfo cli_core.o
+ 0x0100ade4 0x0100ade4 0x00000044 Code RO 4470 i.CmdUartRst cli_core.o
+ 0x0100ae28 0x0100ae28 0x00000098 Code RO 4471 i.CmdVersion cli_core.o
0x0100aec0 0x0100aec0 0x00000018 Code RO 745 i.DBG_ConfigPeriph n32wb03x_rcc.o
0x0100aed8 0x0100aed8 0x00000004 Code RO 487 i.DMA_ClearFlag n32wb03x_dma.o
0x0100aedc 0x0100aedc 0x00000088 Code RO 490 i.DMA_DeInit n32wb03x_dma.o
@@ -4968,16 +4968,16 @@ Memory Map of the image
0x0100b14c 0x0100b14c 0x00000004 Code RO 640 i.GPIO_ResetBits n32wb03x_gpio.o
0x0100b150 0x0100b150 0x00000004 Code RO 641 i.GPIO_SetBits n32wb03x_gpio.o
0x0100b154 0x0100b154 0x00000008 Code RO 642 i.GPIO_TogglePin n32wb03x_gpio.o
- 0x0100b15c 0x0100b15c 0x000000b0 Code RO 4673 i.HardFault_Handler n32wb03x_it.o
+ 0x0100b15c 0x0100b15c 0x000000b0 Code RO 4676 i.HardFault_Handler n32wb03x_it.o
0x0100b20c 0x0100b20c 0x0000000c Code RO 1986 i.IWDG_CntReload n32wb03x_iwdg.o
0x0100b218 0x0100b218 0x00000010 Code RO 1987 i.IWDG_Enable n32wb03x_iwdg.o
0x0100b228 0x0100b228 0x00000010 Code RO 1989 i.IWDG_ReloadKey n32wb03x_iwdg.o
0x0100b238 0x0100b238 0x0000000c Code RO 1990 i.IWDG_SetPrescalerDiv n32wb03x_iwdg.o
0x0100b244 0x0100b244 0x0000000c Code RO 1991 i.IWDG_WriteConfig n32wb03x_iwdg.o
- 0x0100b250 0x0100b250 0x00000008 Code RO 4972 i.LedBlink app_gpio.o
- 0x0100b258 0x0100b258 0x0000004c Code RO 4973 i.LedInit app_gpio.o
- 0x0100b2a4 0x0100b2a4 0x00000008 Code RO 4974 i.LedOff app_gpio.o
- 0x0100b2ac 0x0100b2ac 0x00000008 Code RO 4975 i.LedOn app_gpio.o
+ 0x0100b250 0x0100b250 0x00000008 Code RO 4975 i.LedBlink app_gpio.o
+ 0x0100b258 0x0100b258 0x0000004c Code RO 4976 i.LedInit app_gpio.o
+ 0x0100b2a4 0x0100b2a4 0x00000008 Code RO 4977 i.LedOff app_gpio.o
+ 0x0100b2ac 0x0100b2ac 0x00000008 Code RO 4978 i.LedOn app_gpio.o
0x0100b2b4 0x0100b2b4 0x00000078 Code RO 159 i.NVIC_Init misc.o
0x0100b32c 0x0100b32c 0x000000cc Code RO 11 i.OTPTrim_Read system_n32wb03x.o
0x0100b3f8 0x0100b3f8 0x00000024 Code RO 1947 i.Qflash_Erase_Sector n32wb03x_qflash.o
@@ -4992,13 +4992,13 @@ Memory Map of the image
0x0100b504 0x0100b504 0x0000001c Code RO 773 i.RCC_Enable_ADC_CLK_SRC_AUDIOPLL n32wb03x_rcc.o
0x0100b520 0x0100b520 0x00000074 Code RO 774 i.RCC_GetClocksFreqValue n32wb03x_rcc.o
0x0100b594 0x0100b594 0x00000030 Code RO 775 i.RCC_GetFlagStatus n32wb03x_rcc.o
- 0x0100b5c4 0x0100b5c4 0x00000002 Code RO 6287 i.SVC_Handler port.o
+ 0x0100b5c4 0x0100b5c4 0x00000002 Code RO 6290 i.SVC_Handler port.o
0x0100b5c6 0x0100b5c6 0x00000002 PAD
- 0x0100b5c8 0x0100b5c8 0x00000024 Code RO 6288 i.SysTick_Handler port.o
+ 0x0100b5c8 0x0100b5c8 0x00000024 Code RO 6291 i.SysTick_Handler port.o
0x0100b5ec 0x0100b5ec 0x00000034 Code RO 13 i.SystemGetMacAddr system_n32wb03x.o
0x0100b620 0x0100b620 0x00000180 Code RO 15 i.SystemInit system_n32wb03x.o
0x0100b7a0 0x0100b7a0 0x00000030 Code RO 16 i.SystemTrimValueGet system_n32wb03x.o
- 0x0100b7d0 0x0100b7d0 0x00000008 Code RO 4674 i.USART1_IRQHandler n32wb03x_it.o
+ 0x0100b7d0 0x0100b7d0 0x00000008 Code RO 4677 i.USART1_IRQHandler n32wb03x_it.o
0x0100b7d8 0x0100b7d8 0x00000032 Code RO 1520 i.USART_ConfigInt n32wb03x_usart.o
0x0100b80a 0x0100b80a 0x00000002 PAD
0x0100b80c 0x0100b80c 0x0000001c Code RO 1525 i.USART_Enable n32wb03x_usart.o
@@ -5009,122 +5009,122 @@ Memory Map of the image
0x0100b888 0x0100b888 0x00000088 Code RO 1534 i.USART_Init n32wb03x_usart.o
0x0100b910 0x0100b910 0x00000008 Code RO 1535 i.USART_ReceiveData n32wb03x_usart.o
0x0100b918 0x0100b918 0x00000008 Code RO 1537 i.USART_SendData n32wb03x_usart.o
- 0x0100b920 0x0100b920 0x00000020 Code RO 6620 i.__0printf mc_p.l(printfa.o)
- 0x0100b940 0x0100b940 0x00000028 Code RO 6622 i.__0sprintf mc_p.l(printfa.o)
- 0x0100b968 0x0100b968 0x0000002c Code RO 6625 i.__0vsnprintf mc_p.l(printfa.o)
- 0x0100b994 0x0100b994 0x0000002e Code RO 6796 i.__ARM_clz mf_p.l(depilogue.o)
+ 0x0100b920 0x0100b920 0x00000020 Code RO 6623 i.__0printf mc_p.l(printfa.o)
+ 0x0100b940 0x0100b940 0x00000028 Code RO 6625 i.__0sprintf mc_p.l(printfa.o)
+ 0x0100b968 0x0100b968 0x0000002c Code RO 6628 i.__0vsnprintf mc_p.l(printfa.o)
+ 0x0100b994 0x0100b994 0x0000002e Code RO 6799 i.__ARM_clz mf_p.l(depilogue.o)
0x0100b9c2 0x0100b9c2 0x00000002 PAD
- 0x0100b9c4 0x0100b9c4 0x00000008 Code RO 6776 i.__aeabi_errno_addr mc_p.l(errno.o)
- 0x0100b9cc 0x0100b9cc 0x00000064 Code RO 6652 i.__free$realloc mc_p.l(mallocr.o)
- 0x0100ba30 0x0100ba30 0x00000048 Code RO 6653 i.__malloc$realloc mc_p.l(mallocr.o)
- 0x0100ba78 0x0100ba78 0x00000174 Code RO 6627 i._fp_digits mc_p.l(printfa.o)
- 0x0100bbec 0x0100bbec 0x0000000e Code RO 6680 i._is_digit mc_p.l(scanf_fp.o)
+ 0x0100b9c4 0x0100b9c4 0x00000008 Code RO 6779 i.__aeabi_errno_addr mc_p.l(errno.o)
+ 0x0100b9cc 0x0100b9cc 0x00000064 Code RO 6655 i.__free$realloc mc_p.l(mallocr.o)
+ 0x0100ba30 0x0100ba30 0x00000048 Code RO 6656 i.__malloc$realloc mc_p.l(mallocr.o)
+ 0x0100ba78 0x0100ba78 0x00000174 Code RO 6630 i._fp_digits mc_p.l(printfa.o)
+ 0x0100bbec 0x0100bbec 0x0000000e Code RO 6683 i._is_digit mc_p.l(scanf_fp.o)
0x0100bbfa 0x0100bbfa 0x00000002 PAD
- 0x0100bbfc 0x0100bbfc 0x000006ec Code RO 6628 i._printf_core mc_p.l(printfa.o)
- 0x0100c2e8 0x0100c2e8 0x00000020 Code RO 6629 i._printf_post_padding mc_p.l(printfa.o)
- 0x0100c308 0x0100c308 0x0000002c Code RO 6630 i._printf_pre_padding mc_p.l(printfa.o)
- 0x0100c334 0x0100c334 0x00000016 Code RO 6631 i._snputc mc_p.l(printfa.o)
- 0x0100c34a 0x0100c34a 0x0000000a Code RO 6632 i._sputc mc_p.l(printfa.o)
- 0x0100c354 0x0100c354 0x00000032 Code RO 5115 i.add_item_to_array cjson.o
- 0x0100c386 0x0100c386 0x00000062 Code RO 5116 i.add_item_to_object cjson.o
- 0x0100c3e8 0x0100c3e8 0x00000074 Code RO 4169 i.app_ble_adv_init app_ble.o
- 0x0100c45c 0x0100c45c 0x00000002 Code RO 4170 i.app_ble_adv_msg_handler app_ble.o
+ 0x0100bbfc 0x0100bbfc 0x000006ec Code RO 6631 i._printf_core mc_p.l(printfa.o)
+ 0x0100c2e8 0x0100c2e8 0x00000020 Code RO 6632 i._printf_post_padding mc_p.l(printfa.o)
+ 0x0100c308 0x0100c308 0x0000002c Code RO 6633 i._printf_pre_padding mc_p.l(printfa.o)
+ 0x0100c334 0x0100c334 0x00000016 Code RO 6634 i._snputc mc_p.l(printfa.o)
+ 0x0100c34a 0x0100c34a 0x0000000a Code RO 6635 i._sputc mc_p.l(printfa.o)
+ 0x0100c354 0x0100c354 0x00000032 Code RO 5118 i.add_item_to_array cjson.o
+ 0x0100c386 0x0100c386 0x00000062 Code RO 5119 i.add_item_to_object cjson.o
+ 0x0100c3e8 0x0100c3e8 0x00000074 Code RO 4172 i.app_ble_adv_init app_ble.o
+ 0x0100c45c 0x0100c45c 0x00000002 Code RO 4173 i.app_ble_adv_msg_handler app_ble.o
0x0100c45e 0x0100c45e 0x00000002 PAD
- 0x0100c460 0x0100c460 0x00000044 Code RO 4171 i.app_ble_connected app_ble.o
- 0x0100c4a4 0x0100c4a4 0x0000005c Code RO 4172 i.app_ble_disconnected app_ble.o
- 0x0100c500 0x0100c500 0x00000098 Code RO 4173 i.app_ble_gap_params_init app_ble.o
- 0x0100c598 0x0100c598 0x0000004c Code RO 4174 i.app_ble_init app_ble.o
- 0x0100c5e4 0x0100c5e4 0x0000006c Code RO 4175 i.app_ble_msg_handler app_ble.o
- 0x0100c650 0x0100c650 0x000000ec Code RO 4698 i.app_ble_proto_cli_exec app_ble_proto.o
- 0x0100c73c 0x0100c73c 0x00000040 Code RO 4699 i.app_ble_proto_cli_rsp app_ble_proto.o
- 0x0100c77c 0x0100c77c 0x00000014 Code RO 4700 i.app_ble_proto_init app_ble_proto.o
- 0x0100c790 0x0100c790 0x0000000c Code RO 4701 i.app_ble_proto_log_get app_ble_proto.o
- 0x0100c79c 0x0100c79c 0x00000010 Code RO 4702 i.app_ble_proto_log_set app_ble_proto.o
- 0x0100c7ac 0x0100c7ac 0x0000001c Code RO 4703 i.app_ble_proto_on_disconnect app_ble_proto.o
- 0x0100c7c8 0x0100c7c8 0x000001a0 Code RO 4704 i.app_ble_proto_rx_bytes app_ble_proto.o
- 0x0100c968 0x0100c968 0x000000b8 Code RO 4705 i.app_ble_proto_send_frame app_ble_proto.o
- 0x0100ca20 0x0100ca20 0x00000050 Code RO 4177 i.app_ble_sec_init app_ble.o
- 0x0100ca70 0x0100ca70 0x0000000c Code RO 4592 i.app_cli_ota_mode_enter app_cli.o
+ 0x0100c460 0x0100c460 0x00000044 Code RO 4174 i.app_ble_connected app_ble.o
+ 0x0100c4a4 0x0100c4a4 0x0000005c Code RO 4175 i.app_ble_disconnected app_ble.o
+ 0x0100c500 0x0100c500 0x00000098 Code RO 4176 i.app_ble_gap_params_init app_ble.o
+ 0x0100c598 0x0100c598 0x0000004c Code RO 4177 i.app_ble_init app_ble.o
+ 0x0100c5e4 0x0100c5e4 0x0000006c Code RO 4178 i.app_ble_msg_handler app_ble.o
+ 0x0100c650 0x0100c650 0x000000ec Code RO 4701 i.app_ble_proto_cli_exec app_ble_proto.o
+ 0x0100c73c 0x0100c73c 0x00000040 Code RO 4702 i.app_ble_proto_cli_rsp app_ble_proto.o
+ 0x0100c77c 0x0100c77c 0x00000014 Code RO 4703 i.app_ble_proto_init app_ble_proto.o
+ 0x0100c790 0x0100c790 0x0000000c Code RO 4704 i.app_ble_proto_log_get app_ble_proto.o
+ 0x0100c79c 0x0100c79c 0x00000010 Code RO 4705 i.app_ble_proto_log_set app_ble_proto.o
+ 0x0100c7ac 0x0100c7ac 0x0000001c Code RO 4706 i.app_ble_proto_on_disconnect app_ble_proto.o
+ 0x0100c7c8 0x0100c7c8 0x000001a0 Code RO 4707 i.app_ble_proto_rx_bytes app_ble_proto.o
+ 0x0100c968 0x0100c968 0x000000b8 Code RO 4708 i.app_ble_proto_send_frame app_ble_proto.o
+ 0x0100ca20 0x0100ca20 0x00000050 Code RO 4180 i.app_ble_sec_init app_ble.o
+ 0x0100ca70 0x0100ca70 0x0000000c Code RO 4595 i.app_cli_ota_mode_enter app_cli.o
0x0100ca7c 0x0100ca7c 0x00000010 Code RO 3897 i.app_conn_params_update_evt_handler ns_ble_task.o
0x0100ca8c 0x0100ca8c 0x000000cc Code RO 3498 i.app_create_advertising ns_ble.o
0x0100cb58 0x0100cb58 0x0000005c Code RO 4051 i.app_dis_add_dis app_dis.o
0x0100cbb4 0x0100cbb4 0x00000104 Code RO 3898 i.app_entry_point_handler ns_ble_task.o
- 0x0100ccb8 0x0100ccb8 0x00000008 Code RO 4876 i.app_fan_get_rpm app_info.o
- 0x0100ccc0 0x0100ccc0 0x0000005c Code RO 4877 i.app_info_chip_temp_c10 app_info.o
- 0x0100cd1c 0x0100cd1c 0x00000018 Code RO 4878 i.app_info_cur_bank app_info.o
- 0x0100cd34 0x0100cd34 0x0000004c Code RO 4879 i.app_info_handle_query app_info.o
- 0x0100cd80 0x0100cd80 0x0000000c Code RO 4880 i.app_info_last_temp_raw app_info.o
- 0x0100cd8c 0x0100cd8c 0x0000002c Code RO 4881 i.app_info_tlv_snapshot app_info.o
- 0x0100cdb8 0x0100cdb8 0x00000020 Code RO 4882 i.app_info_vdd_mv app_info.o
+ 0x0100ccb8 0x0100ccb8 0x00000008 Code RO 4879 i.app_fan_get_rpm app_info.o
+ 0x0100ccc0 0x0100ccc0 0x0000005c Code RO 4880 i.app_info_chip_temp_c10 app_info.o
+ 0x0100cd1c 0x0100cd1c 0x00000018 Code RO 4881 i.app_info_cur_bank app_info.o
+ 0x0100cd34 0x0100cd34 0x0000004c Code RO 4882 i.app_info_handle_query app_info.o
+ 0x0100cd80 0x0100cd80 0x0000000c Code RO 4883 i.app_info_last_temp_raw app_info.o
+ 0x0100cd8c 0x0100cd8c 0x0000002c Code RO 4884 i.app_info_tlv_snapshot app_info.o
+ 0x0100cdb8 0x0100cdb8 0x00000020 Code RO 4885 i.app_info_vdd_mv app_info.o
0x0100cdd8 0x0100cdd8 0x0000001c Code RO 3899 i.app_init_timeout_evt_handler ns_ble_task.o
0x0100cdf4 0x0100cdf4 0x000000ac Code RO 3900 i.app_lsi_calib_evt_handler ns_ble_task.o
- 0x0100cea0 0x0100cea0 0x00000018 Code RO 4774 i.app_ota_abort app_ota.o
- 0x0100ceb8 0x0100ceb8 0x00000010 Code RO 4775 i.app_ota_chan_idle app_ota.o
- 0x0100cec8 0x0100cec8 0x00000020 Code RO 4776 i.app_ota_chan_rsp_ble app_ota.o
- 0x0100cee8 0x0100cee8 0x00000120 Code RO 4777 i.app_ota_chan_rx app_ota.o
- 0x0100d008 0x0100d008 0x00000010 Code RO 4778 i.app_ota_chan_rx_ble app_ota.o
- 0x0100d018 0x0100d018 0x00000020 Code RO 4779 i.app_ota_chan_rx_uart app_ota.o
- 0x0100d038 0x0100d038 0x00000008 Code RO 4780 i.app_ota_current_bank_base app_ota.o
- 0x0100d040 0x0100d040 0x00000158 Code RO 4781 i.app_ota_handle_frame app_ota.o
- 0x0100d198 0x0100d198 0x00000048 Code RO 4782 i.app_ota_reset_poll app_ota.o
- 0x0100d1e0 0x0100d1e0 0x00000008 Code RO 5008 i.app_params_get app_params.o
- 0x0100d1e8 0x0100d1e8 0x0000005c Code RO 5009 i.app_params_init app_params.o
- 0x0100d244 0x0100d244 0x0000002c Code RO 5011 i.app_params_restore_defaults app_params.o
+ 0x0100cea0 0x0100cea0 0x00000018 Code RO 4777 i.app_ota_abort app_ota.o
+ 0x0100ceb8 0x0100ceb8 0x00000010 Code RO 4778 i.app_ota_chan_idle app_ota.o
+ 0x0100cec8 0x0100cec8 0x00000020 Code RO 4779 i.app_ota_chan_rsp_ble app_ota.o
+ 0x0100cee8 0x0100cee8 0x00000120 Code RO 4780 i.app_ota_chan_rx app_ota.o
+ 0x0100d008 0x0100d008 0x00000010 Code RO 4781 i.app_ota_chan_rx_ble app_ota.o
+ 0x0100d018 0x0100d018 0x00000020 Code RO 4782 i.app_ota_chan_rx_uart app_ota.o
+ 0x0100d038 0x0100d038 0x00000008 Code RO 4783 i.app_ota_current_bank_base app_ota.o
+ 0x0100d040 0x0100d040 0x00000158 Code RO 4784 i.app_ota_handle_frame app_ota.o
+ 0x0100d198 0x0100d198 0x00000048 Code RO 4785 i.app_ota_reset_poll app_ota.o
+ 0x0100d1e0 0x0100d1e0 0x00000008 Code RO 5011 i.app_params_get app_params.o
+ 0x0100d1e8 0x0100d1e8 0x0000005c Code RO 5012 i.app_params_init app_params.o
+ 0x0100d244 0x0100d244 0x0000002c Code RO 5014 i.app_params_restore_defaults app_params.o
0x0100d270 0x0100d270 0x00000068 Code RO 4106 i.app_rdtss_add_rdts app_rdtss.o
0x0100d2d8 0x0100d2d8 0x00000004 Code RO 3257 i.app_sec_msg_dflt_handler ns_sec.o
0x0100d2dc 0x0100d2dc 0x00000078 Code RO 3499 i.app_set_adv_data ns_ble.o
0x0100d354 0x0100d354 0x000000c4 Code RO 3500 i.app_set_scan_rsp_data ns_ble.o
0x0100d418 0x0100d418 0x00000070 Code RO 3501 i.app_start_advertising ns_ble.o
- 0x0100d488 0x0100d488 0x00000002 Code RO 4178 i.app_user_msg_handler app_ble.o
+ 0x0100d488 0x0100d488 0x00000002 Code RO 4181 i.app_user_msg_handler app_ble.o
0x0100d48a 0x0100d48a 0x00000002 PAD
- 0x0100d48c 0x0100d48c 0x00000018 Code RO 4275 i.app_wdt_heartbeat main.o
- 0x0100d4a4 0x0100d4a4 0x00000074 Code RO 4276 i.app_wdt_init main.o
+ 0x0100d48c 0x0100d48c 0x00000018 Code RO 4278 i.app_wdt_heartbeat main.o
+ 0x0100d4a4 0x0100d4a4 0x00000074 Code RO 4279 i.app_wdt_init main.o
0x0100d518 0x0100d518 0x000000c0 Code RO 2033 i.attm_att_set_value lib_att.o
- 0x0100d5d8 0x0100d5d8 0x00000028 Code RO 4277 i.ble_schedule_task main.o
- 0x0100d600 0x0100d600 0x00000014 Code RO 4636 i.ble_up_on_cfm ble_up.o
- 0x0100d614 0x0100d614 0x00000058 Code RO 4637 i.ble_up_poll ble_up.o
- 0x0100d66c 0x0100d66c 0x00000010 Code RO 4638 i.ble_up_reset ble_up.o
- 0x0100d67c 0x0100d67c 0x00000048 Code RO 4639 i.ble_up_write ble_up.o
- 0x0100d6c4 0x0100d6c4 0x0000005c Code RO 5078 i.bootset_commit app_bootset.o
- 0x0100d720 0x0100d720 0x00000178 Code RO 5079 i.bootset_print app_bootset.o
- 0x0100d898 0x0100d898 0x000000ec Code RO 4379 i.bsp_usart_init bsp_usart.o
- 0x0100d984 0x0100d984 0x000000ac Code RO 4380 i.bsp_usart_read_byte bsp_usart.o
- 0x0100da30 0x0100da30 0x00000080 Code RO 4381 i.bsp_usart_rx_dma_start bsp_usart.o
- 0x0100dab0 0x0100dab0 0x00000048 Code RO 4383 i.bsp_usart_rx_isr_handler bsp_usart.o
- 0x0100daf8 0x0100daf8 0x00000074 Code RO 4384 i.bsp_usart_set_baud bsp_usart.o
- 0x0100db6c 0x0100db6c 0x00000020 Code RO 4385 i.bsp_usart_tx_lock bsp_usart.o
- 0x0100db8c 0x0100db8c 0x00000024 Code RO 4386 i.bsp_usart_tx_unlock bsp_usart.o
- 0x0100dbb0 0x0100dbb0 0x00000098 Code RO 4387 i.bsp_usart_write_dma bsp_usart.o
- 0x0100dc48 0x0100dc48 0x0000003a Code RO 5117 i.buffer_skip_whitespace cjson.o
+ 0x0100d5d8 0x0100d5d8 0x00000028 Code RO 4280 i.ble_schedule_task main.o
+ 0x0100d600 0x0100d600 0x00000014 Code RO 4639 i.ble_up_on_cfm ble_up.o
+ 0x0100d614 0x0100d614 0x00000058 Code RO 4640 i.ble_up_poll ble_up.o
+ 0x0100d66c 0x0100d66c 0x00000010 Code RO 4641 i.ble_up_reset ble_up.o
+ 0x0100d67c 0x0100d67c 0x00000048 Code RO 4642 i.ble_up_write ble_up.o
+ 0x0100d6c4 0x0100d6c4 0x0000005c Code RO 5081 i.bootset_commit app_bootset.o
+ 0x0100d720 0x0100d720 0x00000178 Code RO 5082 i.bootset_print app_bootset.o
+ 0x0100d898 0x0100d898 0x000000ec Code RO 4382 i.bsp_usart_init bsp_usart.o
+ 0x0100d984 0x0100d984 0x000000ac Code RO 4383 i.bsp_usart_read_byte bsp_usart.o
+ 0x0100da30 0x0100da30 0x00000080 Code RO 4384 i.bsp_usart_rx_dma_start bsp_usart.o
+ 0x0100dab0 0x0100dab0 0x00000048 Code RO 4386 i.bsp_usart_rx_isr_handler bsp_usart.o
+ 0x0100daf8 0x0100daf8 0x00000074 Code RO 4387 i.bsp_usart_set_baud bsp_usart.o
+ 0x0100db6c 0x0100db6c 0x00000020 Code RO 4388 i.bsp_usart_tx_lock bsp_usart.o
+ 0x0100db8c 0x0100db8c 0x00000024 Code RO 4389 i.bsp_usart_tx_unlock bsp_usart.o
+ 0x0100dbb0 0x0100dbb0 0x00000098 Code RO 4390 i.bsp_usart_write_dma bsp_usart.o
+ 0x0100dc48 0x0100dc48 0x0000003a Code RO 5120 i.buffer_skip_whitespace cjson.o
0x0100dc82 0x0100dc82 0x00000002 PAD
- 0x0100dc84 0x0100dc84 0x00000034 Code RO 5127 i.cJSON_AddNumberToObject cjson.o
- 0x0100dcb8 0x0100dcb8 0x00000064 Code RO 5141 i.cJSON_CreateNumber cjson.o
- 0x0100dd1c 0x0100dd1c 0x00000018 Code RO 5142 i.cJSON_CreateObject cjson.o
- 0x0100dd34 0x0100dd34 0x00000054 Code RO 5149 i.cJSON_Delete cjson.o
- 0x0100dd88 0x0100dd88 0x0000000a Code RO 5162 i.cJSON_GetObjectItem cjson.o
+ 0x0100dc84 0x0100dc84 0x00000034 Code RO 5130 i.cJSON_AddNumberToObject cjson.o
+ 0x0100dcb8 0x0100dcb8 0x00000064 Code RO 5144 i.cJSON_CreateNumber cjson.o
+ 0x0100dd1c 0x0100dd1c 0x00000018 Code RO 5145 i.cJSON_CreateObject cjson.o
+ 0x0100dd34 0x0100dd34 0x00000054 Code RO 5152 i.cJSON_Delete cjson.o
+ 0x0100dd88 0x0100dd88 0x0000000a Code RO 5165 i.cJSON_GetObjectItem cjson.o
0x0100dd92 0x0100dd92 0x00000002 PAD
- 0x0100dd94 0x0100dd94 0x00000050 Code RO 5166 i.cJSON_InitHooks cjson.o
- 0x0100dde4 0x0100dde4 0x00000012 Code RO 5173 i.cJSON_IsNumber cjson.o
- 0x0100ddf6 0x0100ddf6 0x00000012 Code RO 5174 i.cJSON_IsObject cjson.o
- 0x0100de08 0x0100de08 0x00000024 Code RO 5179 i.cJSON_New_Item cjson.o
- 0x0100de2c 0x0100de2c 0x00000022 Code RO 5180 i.cJSON_Parse cjson.o
+ 0x0100dd94 0x0100dd94 0x00000050 Code RO 5169 i.cJSON_InitHooks cjson.o
+ 0x0100dde4 0x0100dde4 0x00000012 Code RO 5176 i.cJSON_IsNumber cjson.o
+ 0x0100ddf6 0x0100ddf6 0x00000012 Code RO 5177 i.cJSON_IsObject cjson.o
+ 0x0100de08 0x0100de08 0x00000024 Code RO 5182 i.cJSON_New_Item cjson.o
+ 0x0100de2c 0x0100de2c 0x00000022 Code RO 5183 i.cJSON_Parse cjson.o
0x0100de4e 0x0100de4e 0x00000002 PAD
- 0x0100de50 0x0100de50 0x000000ec Code RO 5182 i.cJSON_ParseWithLengthOpts cjson.o
- 0x0100df3c 0x0100df3c 0x00000010 Code RO 5187 i.cJSON_PrintUnformatted cjson.o
- 0x0100df4c 0x0100df4c 0x0000000c Code RO 5195 i.cJSON_free cjson.o
- 0x0100df58 0x0100df58 0x00000028 Code RO 5197 i.cJSON_strdup cjson.o
- 0x0100df80 0x0100df80 0x00000034 Code RO 4959 i.caiic_crc32 boot_crc32.o
+ 0x0100de50 0x0100de50 0x000000ec Code RO 5185 i.cJSON_ParseWithLengthOpts cjson.o
+ 0x0100df3c 0x0100df3c 0x00000010 Code RO 5190 i.cJSON_PrintUnformatted cjson.o
+ 0x0100df4c 0x0100df4c 0x0000000c Code RO 5198 i.cJSON_free cjson.o
+ 0x0100df58 0x0100df58 0x00000028 Code RO 5200 i.cJSON_strdup cjson.o
+ 0x0100df80 0x0100df80 0x00000034 Code RO 4962 i.caiic_crc32 boot_crc32.o
0x0100dfb4 0x0100dfb4 0x0000002a Code RO 3071 i.check_client_char_cfg rdts_common.o
- 0x0100dfde 0x0100dfde 0x00000004 Code RO 4469 i.cli_cmd_count cli_core.o
+ 0x0100dfde 0x0100dfde 0x00000004 Code RO 4472 i.cli_cmd_count cli_core.o
0x0100dfe2 0x0100dfe2 0x00000002 PAD
- 0x0100dfe4 0x0100dfe4 0x00000018 Code RO 4470 i.cli_cmd_name cli_core.o
- 0x0100dffc 0x0100dffc 0x000000b4 Code RO 4471 i.cli_exec_line cli_core.o
- 0x0100e0b0 0x0100e0b0 0x0000002c Code RO 4472 i.cli_printf cli_core.o
- 0x0100e0dc 0x0100e0dc 0x00000068 Code RO 4593 i.cli_redraw_line app_cli.o
- 0x0100e144 0x0100e144 0x0000002c Code RO 4706 i.cli_rsp_out app_ble_proto.o
- 0x0100e170 0x0100e170 0x0000000c Code RO 4473 i.cli_set_output cli_core.o
- 0x0100e17c 0x0100e17c 0x00000024 Code RO 4474 i.cli_write cli_core.o
- 0x0100e1a0 0x0100e1a0 0x0000005c Code RO 5198 i.compare_double cjson.o
+ 0x0100dfe4 0x0100dfe4 0x00000018 Code RO 4473 i.cli_cmd_name cli_core.o
+ 0x0100dffc 0x0100dffc 0x000000b4 Code RO 4474 i.cli_exec_line cli_core.o
+ 0x0100e0b0 0x0100e0b0 0x0000002c Code RO 4475 i.cli_printf cli_core.o
+ 0x0100e0dc 0x0100e0dc 0x00000068 Code RO 4596 i.cli_redraw_line app_cli.o
+ 0x0100e144 0x0100e144 0x0000002c Code RO 4709 i.cli_rsp_out app_ble_proto.o
+ 0x0100e170 0x0100e170 0x0000000c Code RO 4476 i.cli_set_output cli_core.o
+ 0x0100e17c 0x0100e17c 0x00000024 Code RO 4477 i.cli_write cli_core.o
+ 0x0100e1a0 0x0100e1a0 0x0000005c Code RO 5201 i.compare_double cjson.o
0x0100e1fc 0x0100e1fc 0x0000002a Code RO 2709 i.diss_check_val_len diss.o
0x0100e226 0x0100e226 0x00000002 Code RO 2710 i.diss_cleanup diss.o
0x0100e228 0x0100e228 0x00000002 Code RO 2712 i.diss_create diss.o
@@ -5138,9 +5138,9 @@ Memory Map of the image
0x0100e47c 0x0100e47c 0x000000c0 Code RO 4053 i.diss_value_req_ind_handler app_dis.o
0x0100e53c 0x0100e53c 0x0000003a Code RO 2717 i.diss_value_to_handle diss.o
0x0100e576 0x0100e576 0x00000002 PAD
- 0x0100e578 0x0100e578 0x00000060 Code RO 5682 i.eTaskGetState tasks.o
- 0x0100e5d8 0x0100e5d8 0x00000098 Code RO 5200 i.ensure cjson.o
- 0x0100e670 0x0100e670 0x0000003c Code RO 4388 i.fputc bsp_usart.o
+ 0x0100e578 0x0100e578 0x00000060 Code RO 5685 i.eTaskGetState tasks.o
+ 0x0100e5d8 0x0100e5d8 0x00000098 Code RO 5203 i.ensure cjson.o
+ 0x0100e670 0x0100e670 0x0000003c Code RO 4391 i.fputc bsp_usart.o
0x0100e6ac 0x0100e6ac 0x000000f0 Code RO 3258 i.gapc_bond_ind_handler ns_sec.o
0x0100e79c 0x0100e79c 0x00000208 Code RO 3259 i.gapc_bond_req_ind_handler ns_sec.o
0x0100e9a4 0x0100e9a4 0x00000028 Code RO 3901 i.gapc_cmp_evt_handler ns_ble_task.o
@@ -5172,19 +5172,19 @@ Memory Map of the image
0x0100f644 0x0100f644 0x000000e0 Code RO 2951 i.gattc_read_req_ind_handler rdtss_task.o
0x0100f724 0x0100f724 0x00000110 Code RO 2952 i.gattc_write_req_ind_handler rdtss_task.o
0x0100f834 0x0100f834 0x0000006c Code RO 3072 i.get_cfg_handle rdts_common.o
- 0x0100f8a0 0x0100f8a0 0x00000098 Code RO 5201 i.get_object_item cjson.o
+ 0x0100f8a0 0x0100f8a0 0x00000098 Code RO 5204 i.get_object_item cjson.o
0x0100f938 0x0100f938 0x00000054 Code RO 3073 i.get_value_handle rdts_common.o
- 0x0100f98c 0x0100f98c 0x00000064 Code RO 4883 i.info_adc_init app_info.o
- 0x0100f9f0 0x0100f9f0 0x0000006c Code RO 4884 i.info_adc_read app_info.o
- 0x0100fa5c 0x0100fa5c 0x00000148 Code RO 4885 i.info_fill_item app_info.o
- 0x0100fba4 0x0100fba4 0x0000002c Code RO 4886 i.info_put_tlv app_info.o
- 0x0100fbd0 0x0100fbd0 0x00000030 Code RO 5665 i.infra_cjson_init infra_cjson.o
- 0x0100fc00 0x0100fc00 0x00000050 Code RO 6654 i.internal_alloc mc_p.l(mallocr.o)
- 0x0100fc50 0x0100fc50 0x00000044 Code RO 4278 i.led_task main.o
+ 0x0100f98c 0x0100f98c 0x00000064 Code RO 4886 i.info_adc_init app_info.o
+ 0x0100f9f0 0x0100f9f0 0x0000006c Code RO 4887 i.info_adc_read app_info.o
+ 0x0100fa5c 0x0100fa5c 0x00000148 Code RO 4888 i.info_fill_item app_info.o
+ 0x0100fba4 0x0100fba4 0x0000002c Code RO 4889 i.info_put_tlv app_info.o
+ 0x0100fbd0 0x0100fbd0 0x00000030 Code RO 5668 i.infra_cjson_init infra_cjson.o
+ 0x0100fc00 0x0100fc00 0x00000050 Code RO 6657 i.internal_alloc mc_p.l(mallocr.o)
+ 0x0100fc50 0x0100fc50 0x00000044 Code RO 4281 i.led_task main.o
0x0100fc94 0x0100fc94 0x00000030 Code RO 2402 i.llhwc_modem_setmode rwip_driver.o
0x0100fcc4 0x0100fcc4 0x00000130 Code RO 2403 i.llhwc_phy_prerx_flash rwip_driver.o
0x0100fdf4 0x0100fdf4 0x00000090 Code RO 2404 i.llhwc_setmode_reg_config rwip_driver.o
- 0x0100fe84 0x0100fe84 0x000001a4 Code RO 4279 i.main main.o
+ 0x0100fe84 0x0100fe84 0x000001a4 Code RO 4282 i.main main.o
0x01010028 0x01010028 0x0000005c Code RO 3502 i.ns_EXTI4_12_IRQHandler ns_ble.o
0x01010084 0x01010084 0x00000028 Code RO 3503 i.ns_HardFault_Handler ns_ble.o
0x010100ac 0x010100ac 0x00000020 Code RO 3505 i.ns_ble_add_prf_func_register ns_ble.o
@@ -5224,17 +5224,17 @@ Memory Map of the image
0x01010f54 0x01010f54 0x00000018 Code RO 3119 i.ns_sleep_lock_acquire ns_sleep.o
0x01010f6c 0x01010f6c 0x00000014 Code RO 3120 i.ns_sleep_lock_release ns_sleep.o
0x01010f80 0x01010f80 0x000000c8 Code RO 3195 i.ns_timer_api_process_handler ns_timer.o
- 0x01011048 0x01011048 0x00000024 Code RO 4783 i.ota_ble_sink app_ota.o
- 0x0101106c 0x0101106c 0x0000017c Code RO 4784 i.ota_on_data app_ota.o
- 0x010111e8 0x010111e8 0x000001b0 Code RO 4785 i.ota_on_end app_ota.o
- 0x01011398 0x01011398 0x00000022 Code RO 4786 i.ota_rd32 app_ota.o
+ 0x01011048 0x01011048 0x00000024 Code RO 4786 i.ota_ble_sink app_ota.o
+ 0x0101106c 0x0101106c 0x0000017c Code RO 4787 i.ota_on_data app_ota.o
+ 0x010111e8 0x010111e8 0x000001b0 Code RO 4788 i.ota_on_end app_ota.o
+ 0x01011398 0x01011398 0x00000022 Code RO 4789 i.ota_rd32 app_ota.o
0x010113ba 0x010113ba 0x00000002 PAD
- 0x010113bc 0x010113bc 0x000000a0 Code RO 4787 i.ota_respond app_ota.o
- 0x0101145c 0x0101145c 0x00000024 Code RO 4788 i.ota_uart_sink app_ota.o
- 0x01011480 0x01011480 0x000000a8 Code RO 5012 i.params_print_json app_params.o
- 0x01011528 0x01011528 0x0000005c Code RO 5013 i.params_save app_params.o
- 0x01011584 0x01011584 0x00000270 Code RO 5202 i.parse_string cjson.o
- 0x010117f4 0x010117f4 0x000003b4 Code RO 5203 i.parse_value cjson.o
+ 0x010113bc 0x010113bc 0x000000a0 Code RO 4790 i.ota_respond app_ota.o
+ 0x0101145c 0x0101145c 0x00000024 Code RO 4791 i.ota_uart_sink app_ota.o
+ 0x01011480 0x01011480 0x000000a8 Code RO 5015 i.params_print_json app_params.o
+ 0x01011528 0x01011528 0x0000005c Code RO 5016 i.params_save app_params.o
+ 0x01011584 0x01011584 0x00000270 Code RO 5205 i.parse_string cjson.o
+ 0x010117f4 0x010117f4 0x000003b4 Code RO 5206 i.parse_value cjson.o
0x01011ba8 0x01011ba8 0x00000044 Code RO 3552 i.patchx_enable ns_ble.o
0x01011bec 0x01011bec 0x00000088 Code RO 2583 i.prf_add_profile prf.o
0x01011c74 0x01011c74 0x00000010 Code RO 2586 i.prf_dst_task_get prf.o
@@ -5244,21 +5244,21 @@ Memory Map of the image
0x01011d14 0x01011d14 0x00000038 Code RO 2590 i.prf_get_task_from_id prf.o
0x01011d4c 0x01011d4c 0x000000b4 Code RO 2591 i.prf_init prf.o
0x01011e00 0x01011e00 0x00000030 Code RO 2592 i.prf_itf_get prf.o
- 0x01011e30 0x01011e30 0x000000be Code RO 5204 i.print cjson.o
+ 0x01011e30 0x01011e30 0x000000be Code RO 5207 i.print cjson.o
0x01011eee 0x01011eee 0x00000002 PAD
- 0x01011ef0 0x01011ef0 0x00000120 Code RO 5205 i.print_string_ptr cjson.o
- 0x01012010 0x01012010 0x000003f8 Code RO 5206 i.print_value cjson.o
- 0x01012408 0x01012408 0x00000038 Code RO 4707 i.proto_cli_out app_ble_proto.o
- 0x01012440 0x01012440 0x00000080 Code RO 4708 i.proto_dump app_ble_proto.o
- 0x010124c0 0x010124c0 0x00000058 Code RO 5684 i.prvAddCurrentTaskToDelayedList tasks.o
- 0x01012518 0x01012518 0x00000058 Code RO 5685 i.prvIdleTask tasks.o
- 0x01012570 0x01012570 0x00000054 Code RO 6242 i.prvInsertBlockIntoFreeList heap_4.o
- 0x010125c4 0x010125c4 0x000000cc Code RO 5686 i.prvListTasksWithinSingleList tasks.o
- 0x01012690 0x01012690 0x00000014 Code RO 6289 i.prvTaskExitError port.o
- 0x010126a4 0x010126a4 0x00000074 Code RO 6013 i.prvUnlockQueue queue.o
- 0x01012718 0x01012718 0x000000f4 Code RO 6243 i.pvPortMalloc heap_4.o
- 0x0101280c 0x0101280c 0x00000018 Code RO 5687 i.pvTaskIncrementMutexHeldCount tasks.o
- 0x01012824 0x01012824 0x00000024 Code RO 6290 i.pxPortInitialiseStack port.o
+ 0x01011ef0 0x01011ef0 0x00000120 Code RO 5208 i.print_string_ptr cjson.o
+ 0x01012010 0x01012010 0x000003f8 Code RO 5209 i.print_value cjson.o
+ 0x01012408 0x01012408 0x00000038 Code RO 4710 i.proto_cli_out app_ble_proto.o
+ 0x01012440 0x01012440 0x00000080 Code RO 4711 i.proto_dump app_ble_proto.o
+ 0x010124c0 0x010124c0 0x00000058 Code RO 5687 i.prvAddCurrentTaskToDelayedList tasks.o
+ 0x01012518 0x01012518 0x00000058 Code RO 5688 i.prvIdleTask tasks.o
+ 0x01012570 0x01012570 0x00000054 Code RO 6245 i.prvInsertBlockIntoFreeList heap_4.o
+ 0x010125c4 0x010125c4 0x000000cc Code RO 5689 i.prvListTasksWithinSingleList tasks.o
+ 0x01012690 0x01012690 0x00000014 Code RO 6292 i.prvTaskExitError port.o
+ 0x010126a4 0x010126a4 0x00000074 Code RO 6016 i.prvUnlockQueue queue.o
+ 0x01012718 0x01012718 0x000000f4 Code RO 6246 i.pvPortMalloc heap_4.o
+ 0x0101280c 0x0101280c 0x00000018 Code RO 5690 i.pvTaskIncrementMutexHeldCount tasks.o
+ 0x01012824 0x01012824 0x00000024 Code RO 6293 i.pxPortInitialiseStack port.o
0x01012848 0x01012848 0x0000003a Code RO 2953 i.rdtss_att_get_value rdtss_task.o
0x01012882 0x01012882 0x00000002 PAD
0x01012884 0x01012884 0x00000040 Code RO 2954 i.rdtss_att_info_rsp_handler rdtss_task.o
@@ -5282,54 +5282,54 @@ Memory Map of the image
0x01012db8 0x01012db8 0x00000124 Code RO 4110 i.rdtss_val_write_ind_handler app_rdtss.o
0x01012edc 0x01012edc 0x00000088 Code RO 4111 i.rdtss_value_req_ind_handler app_rdtss.o
0x01012f64 0x01012f64 0x00000080 Code RO 2962 i.rdtss_value_req_rsp_handler rdtss_task.o
- 0x01012fe4 0x01012fe4 0x00000074 Code RO 6655 i.realloc mc_p.l(mallocr.o)
+ 0x01012fe4 0x01012fe4 0x00000074 Code RO 6658 i.realloc mc_p.l(mallocr.o)
0x01013058 0x01013058 0x00000118 Code RO 2151 i.rwip_init rwip.o
0x01013170 0x01013170 0x000000f8 Code RO 2411 i.rwip_slp_isr rwip_driver.o
- 0x01013268 0x01013268 0x0000001c Code RO 6352 i.strtod m_ps.l(strtod.o)
+ 0x01013268 0x01013268 0x0000001c Code RO 6355 i.strtod m_ps.l(strtod.o)
0x01013284 0x01013284 0x00000002 Code RO 3200 i.timer_canceled_handler ns_timer.o
0x01013286 0x01013286 0x00000002 Code RO 3201 i.timer_modified_handler ns_timer.o
- 0x01013288 0x01013288 0x00000026 Code RO 6200 i.uxListRemove list.o
+ 0x01013288 0x01013288 0x00000026 Code RO 6203 i.uxListRemove list.o
0x010132ae 0x010132ae 0x00000002 PAD
- 0x010132b0 0x010132b0 0x0000000c Code RO 5689 i.uxTaskGetNumberOfTasks tasks.o
- 0x010132bc 0x010132bc 0x00000098 Code RO 5690 i.uxTaskGetSystemState tasks.o
- 0x01013354 0x01013354 0x00000020 Code RO 4280 i.vApplicationIdleHook main.o
- 0x01013374 0x01013374 0x00000016 Code RO 6201 i.vListInitialise list.o
- 0x0101338a 0x0101338a 0x00000006 Code RO 6202 i.vListInitialiseItem list.o
- 0x01013390 0x01013390 0x00000032 Code RO 6203 i.vListInsert list.o
- 0x010133c2 0x010133c2 0x00000018 Code RO 6204 i.vListInsertEnd list.o
+ 0x010132b0 0x010132b0 0x0000000c Code RO 5692 i.uxTaskGetNumberOfTasks tasks.o
+ 0x010132bc 0x010132bc 0x00000098 Code RO 5693 i.uxTaskGetSystemState tasks.o
+ 0x01013354 0x01013354 0x00000020 Code RO 4283 i.vApplicationIdleHook main.o
+ 0x01013374 0x01013374 0x00000016 Code RO 6204 i.vListInitialise list.o
+ 0x0101338a 0x0101338a 0x00000006 Code RO 6205 i.vListInitialiseItem list.o
+ 0x01013390 0x01013390 0x00000032 Code RO 6206 i.vListInsert list.o
+ 0x010133c2 0x010133c2 0x00000018 Code RO 6207 i.vListInsertEnd list.o
0x010133da 0x010133da 0x00000002 PAD
- 0x010133dc 0x010133dc 0x00000018 Code RO 6292 i.vPortEnterCritical port.o
- 0x010133f4 0x010133f4 0x0000001c Code RO 6293 i.vPortExitCritical port.o
- 0x01013410 0x01013410 0x00000044 Code RO 6244 i.vPortFree heap_4.o
- 0x01013454 0x01013454 0x00000018 Code RO 6294 i.vPortYield port.o
- 0x0101346c 0x0101346c 0x00000030 Code RO 5695 i.vTaskDelay tasks.o
- 0x0101349c 0x0101349c 0x00000010 Code RO 5700 i.vTaskInternalSetTimeOutState tasks.o
- 0x010134ac 0x010134ac 0x000000d0 Code RO 5701 i.vTaskList tasks.o
- 0x0101357c 0x0101357c 0x0000000c Code RO 5702 i.vTaskMissedYield tasks.o
- 0x01013588 0x01013588 0x00000024 Code RO 5704 i.vTaskPlaceOnEventList tasks.o
- 0x010135ac 0x010135ac 0x00000074 Code RO 5706 i.vTaskPriorityDisinheritAfterTimeout tasks.o
- 0x01013620 0x01013620 0x00000050 Code RO 5712 i.vTaskStartScheduler tasks.o
- 0x01013670 0x01013670 0x00000010 Code RO 5714 i.vTaskSuspendAll tasks.o
- 0x01013680 0x01013680 0x00000064 Code RO 5715 i.vTaskSwitchContext tasks.o
- 0x010136e4 0x010136e4 0x0000000c Code RO 6246 i.xPortGetFreeHeapSize heap_4.o
- 0x010136f0 0x010136f0 0x0000000c Code RO 6247 i.xPortGetMinimumEverFreeHeapSize heap_4.o
- 0x010136fc 0x010136fc 0x00000050 Code RO 6295 i.xPortStartScheduler port.o
- 0x0101374c 0x0101374c 0x00000024 Code RO 6024 i.xQueueCreateMutex queue.o
- 0x01013770 0x01013770 0x00000044 Code RO 6025 i.xQueueGenericCreate queue.o
- 0x010137b4 0x010137b4 0x0000006e Code RO 6026 i.xQueueGenericReset queue.o
- 0x01013822 0x01013822 0x0000018e Code RO 6027 i.xQueueGenericSend queue.o
- 0x010139b0 0x010139b0 0x00000074 Code RO 6031 i.xQueueGiveFromISR queue.o
- 0x01013a24 0x01013a24 0x00000142 Code RO 6037 i.xQueueReceive queue.o
- 0x01013b66 0x01013b66 0x00000172 Code RO 6039 i.xQueueSemaphoreTake queue.o
- 0x01013cd8 0x01013cd8 0x00000064 Code RO 5716 i.xTaskCheckForTimeOut tasks.o
- 0x01013d3c 0x01013d3c 0x00000178 Code RO 5717 i.xTaskCreate tasks.o
- 0x01013eb4 0x01013eb4 0x00000020 Code RO 5721 i.xTaskGetSchedulerState tasks.o
- 0x01013ed4 0x01013ed4 0x0000000c Code RO 5722 i.xTaskGetTickCount tasks.o
- 0x01013ee0 0x01013ee0 0x000000d4 Code RO 5724 i.xTaskIncrementTick tasks.o
- 0x01013fb4 0x01013fb4 0x00000068 Code RO 5727 i.xTaskPriorityDisinherit tasks.o
- 0x0101401c 0x0101401c 0x00000078 Code RO 5728 i.xTaskPriorityInherit tasks.o
- 0x01014094 0x01014094 0x00000064 Code RO 5729 i.xTaskRemoveFromEventList tasks.o
- 0x010140f8 0x010140f8 0x000000c8 Code RO 5730 i.xTaskResumeAll tasks.o
+ 0x010133dc 0x010133dc 0x00000018 Code RO 6295 i.vPortEnterCritical port.o
+ 0x010133f4 0x010133f4 0x0000001c Code RO 6296 i.vPortExitCritical port.o
+ 0x01013410 0x01013410 0x00000044 Code RO 6247 i.vPortFree heap_4.o
+ 0x01013454 0x01013454 0x00000018 Code RO 6297 i.vPortYield port.o
+ 0x0101346c 0x0101346c 0x00000030 Code RO 5698 i.vTaskDelay tasks.o
+ 0x0101349c 0x0101349c 0x00000010 Code RO 5703 i.vTaskInternalSetTimeOutState tasks.o
+ 0x010134ac 0x010134ac 0x000000d0 Code RO 5704 i.vTaskList tasks.o
+ 0x0101357c 0x0101357c 0x0000000c Code RO 5705 i.vTaskMissedYield tasks.o
+ 0x01013588 0x01013588 0x00000024 Code RO 5707 i.vTaskPlaceOnEventList tasks.o
+ 0x010135ac 0x010135ac 0x00000074 Code RO 5709 i.vTaskPriorityDisinheritAfterTimeout tasks.o
+ 0x01013620 0x01013620 0x00000050 Code RO 5715 i.vTaskStartScheduler tasks.o
+ 0x01013670 0x01013670 0x00000010 Code RO 5717 i.vTaskSuspendAll tasks.o
+ 0x01013680 0x01013680 0x00000064 Code RO 5718 i.vTaskSwitchContext tasks.o
+ 0x010136e4 0x010136e4 0x0000000c Code RO 6249 i.xPortGetFreeHeapSize heap_4.o
+ 0x010136f0 0x010136f0 0x0000000c Code RO 6250 i.xPortGetMinimumEverFreeHeapSize heap_4.o
+ 0x010136fc 0x010136fc 0x00000050 Code RO 6298 i.xPortStartScheduler port.o
+ 0x0101374c 0x0101374c 0x00000024 Code RO 6027 i.xQueueCreateMutex queue.o
+ 0x01013770 0x01013770 0x00000044 Code RO 6028 i.xQueueGenericCreate queue.o
+ 0x010137b4 0x010137b4 0x0000006e Code RO 6029 i.xQueueGenericReset queue.o
+ 0x01013822 0x01013822 0x0000018e Code RO 6030 i.xQueueGenericSend queue.o
+ 0x010139b0 0x010139b0 0x00000074 Code RO 6034 i.xQueueGiveFromISR queue.o
+ 0x01013a24 0x01013a24 0x00000142 Code RO 6040 i.xQueueReceive queue.o
+ 0x01013b66 0x01013b66 0x00000172 Code RO 6042 i.xQueueSemaphoreTake queue.o
+ 0x01013cd8 0x01013cd8 0x00000064 Code RO 5719 i.xTaskCheckForTimeOut tasks.o
+ 0x01013d3c 0x01013d3c 0x00000178 Code RO 5720 i.xTaskCreate tasks.o
+ 0x01013eb4 0x01013eb4 0x00000020 Code RO 5724 i.xTaskGetSchedulerState tasks.o
+ 0x01013ed4 0x01013ed4 0x0000000c Code RO 5725 i.xTaskGetTickCount tasks.o
+ 0x01013ee0 0x01013ee0 0x000000d4 Code RO 5727 i.xTaskIncrementTick tasks.o
+ 0x01013fb4 0x01013fb4 0x00000068 Code RO 5730 i.xTaskPriorityDisinherit tasks.o
+ 0x0101401c 0x0101401c 0x00000078 Code RO 5731 i.xTaskPriorityInherit tasks.o
+ 0x01014094 0x01014094 0x00000064 Code RO 5732 i.xTaskRemoveFromEventList tasks.o
+ 0x010140f8 0x010140f8 0x000000c8 Code RO 5733 i.xTaskResumeAll tasks.o
0x010141c0 0x010141c0 0x000001d8 Data RO 20 .constdata system_n32wb03x.o
0x01014398 0x01014398 0x0000000c Data RO 782 .constdata n32wb03x_rcc.o
0x010143a4 0x010143a4 0x00000324 Data RO 1952 .constdata n32wb03x_qflash.o
@@ -5350,17 +5350,17 @@ Memory Map of the image
0x01014ce0 0x01014ce0 0x00000136 Data RO 4112 .constdata app_rdtss.o
0x01014e16 0x01014e16 0x00000002 PAD
0x01014e18 0x01014e18 0x00000018 Data RO 4113 .constdata app_rdtss.o
- 0x01014e30 0x01014e30 0x000000cc Data RO 4476 .constdata cli_core.o
- 0x01014efc 0x01014efc 0x00000007 Data RO 4888 .constdata app_info.o
- 0x01014f03 0x01014f03 0x00000081 Data RO 6747 .constdata mc_p.l(ctype_o.o)
- 0x01014f84 0x01014f84 0x00000004 Data RO 6748 .constdata mc_p.l(ctype_o.o)
- 0x01014f88 0x01014f88 0x00000489 Data RO 4477 .conststring cli_core.o
+ 0x01014e30 0x01014e30 0x000000cc Data RO 4479 .constdata cli_core.o
+ 0x01014efc 0x01014efc 0x00000007 Data RO 4891 .constdata app_info.o
+ 0x01014f03 0x01014f03 0x00000081 Data RO 6750 .constdata mc_p.l(ctype_o.o)
+ 0x01014f84 0x01014f84 0x00000004 Data RO 6751 .constdata mc_p.l(ctype_o.o)
+ 0x01014f88 0x01014f88 0x00000489 Data RO 4480 .conststring cli_core.o
0x01015411 0x01015411 0x00000003 PAD
- 0x01015414 0x01015414 0x00000043 Data RO 5015 .conststring app_params.o
+ 0x01015414 0x01015414 0x00000043 Data RO 5018 .conststring app_params.o
0x01015457 0x01015457 0x00000001 PAD
- 0x01015458 0x01015458 0x00000091 Data RO 5080 .conststring app_bootset.o
+ 0x01015458 0x01015458 0x00000091 Data RO 5083 .conststring app_bootset.o
0x010154e9 0x010154e9 0x00000003 PAD
- 0x010154ec 0x010154ec 0x00000020 Data RO 6809 Region$$Table anon$$obj.o
+ 0x010154ec 0x010154ec 0x00000020 Data RO 6812 Region$$Table anon$$obj.o
Execution Region RW_IRAM1 (Exec base: 0x20004000, Load base: 0x0101550c, Size: 0x00007de8, Max: 0x0000c000, ABSOLUTE, COMPRESSED[0x00000618])
@@ -5376,46 +5376,46 @@ Memory Map of the image
0x20004734 COMPRESSED 0x00000002 Data RW 3924 .data ns_ble_task.o
0x20004736 COMPRESSED 0x00000001 Data RW 3925 .data ns_ble_task.o
0x20004737 COMPRESSED 0x00000001 Data RW 4114 .data app_rdtss.o
- 0x20004738 COMPRESSED 0x00000004 Data RW 4281 .data main.o
- 0x2000473c COMPRESSED 0x00000010 Data RW 4390 .data bsp_usart.o
- 0x2000474c COMPRESSED 0x00000004 Data RW 4478 .data cli_core.o
- 0x20004750 COMPRESSED 0x00000003 Data RW 4595 .data app_cli.o
+ 0x20004738 COMPRESSED 0x00000004 Data RW 4284 .data main.o
+ 0x2000473c COMPRESSED 0x00000010 Data RW 4393 .data bsp_usart.o
+ 0x2000474c COMPRESSED 0x00000004 Data RW 4481 .data cli_core.o
+ 0x20004750 COMPRESSED 0x00000003 Data RW 4598 .data app_cli.o
0x20004753 COMPRESSED 0x00000001 PAD
- 0x20004754 COMPRESSED 0x00000006 Data RW 4641 .data ble_up.o
- 0x2000475a COMPRESSED 0x0000000c Data RW 4710 .data app_ble_proto.o
+ 0x20004754 COMPRESSED 0x00000006 Data RW 4644 .data ble_up.o
+ 0x2000475a COMPRESSED 0x0000000c Data RW 4713 .data app_ble_proto.o
0x20004766 COMPRESSED 0x00000002 PAD
- 0x20004768 COMPRESSED 0x0000003c Data RW 4790 .data app_ota.o
- 0x200047a4 COMPRESSED 0x00000004 Data RW 4889 .data app_info.o
- 0x200047a8 COMPRESSED 0x00000002 Data RW 5016 .data app_params.o
- 0x200047aa COMPRESSED 0x00000001 Data RW 5081 .data app_bootset.o
+ 0x20004768 COMPRESSED 0x0000003c Data RW 4793 .data app_ota.o
+ 0x200047a4 COMPRESSED 0x00000004 Data RW 4892 .data app_info.o
+ 0x200047a8 COMPRESSED 0x00000002 Data RW 5019 .data app_params.o
+ 0x200047aa COMPRESSED 0x00000001 Data RW 5084 .data app_bootset.o
0x200047ab COMPRESSED 0x00000001 PAD
- 0x200047ac COMPRESSED 0x00000014 Data RW 5209 .data cjson.o
- 0x200047c0 COMPRESSED 0x00000001 Data RW 5666 .data infra_cjson.o
+ 0x200047ac COMPRESSED 0x00000014 Data RW 5212 .data cjson.o
+ 0x200047c0 COMPRESSED 0x00000001 Data RW 5669 .data infra_cjson.o
0x200047c1 COMPRESSED 0x00000003 PAD
- 0x200047c4 COMPRESSED 0x0000003c Data RW 5733 .data tasks.o
- 0x20004800 COMPRESSED 0x00000018 Data RW 6249 .data heap_4.o
- 0x20004818 COMPRESSED 0x00000004 Data RW 6296 .data port.o
- 0x2000481c COMPRESSED 0x00000004 Data RW 6367 .data mc_p.l(rand.o)
- 0x20004820 COMPRESSED 0x00000004 Data RW 6774 .data mc_p.l(mvars.o)
- 0x20004824 COMPRESSED 0x00000004 Data RW 6775 .data mc_p.l(mvars.o)
- 0x20004828 COMPRESSED 0x00000004 Data RW 6779 .data mc_p.l(errno.o)
+ 0x200047c4 COMPRESSED 0x0000003c Data RW 5736 .data tasks.o
+ 0x20004800 COMPRESSED 0x00000018 Data RW 6252 .data heap_4.o
+ 0x20004818 COMPRESSED 0x00000004 Data RW 6299 .data port.o
+ 0x2000481c COMPRESSED 0x00000004 Data RW 6370 .data mc_p.l(rand.o)
+ 0x20004820 COMPRESSED 0x00000004 Data RW 6777 .data mc_p.l(mvars.o)
+ 0x20004824 COMPRESSED 0x00000004 Data RW 6778 .data mc_p.l(mvars.o)
+ 0x20004828 COMPRESSED 0x00000004 Data RW 6782 .data mc_p.l(errno.o)
0x2000482c - 0x00000034 Zero RW 19 .bss system_n32wb03x.o
0x20004860 - 0x00000328 Zero RW 1951 .bss n32wb03x_qflash.o
0x20004b88 - 0x0000011c Zero RW 2594 .bss prf.o
0x20004ca4 - 0x00000050 Zero RW 3202 .bss ns_timer.o
0x20004cf4 - 0x0000005c Zero RW 3278 .bss ns_sec.o
0x20004d50 - 0x000001b0 Zero RW 3553 .bss ns_ble.o
- 0x20004f00 - 0x00000c00 Zero RW 4389 .bss bsp_usart.o
- 0x20005b00 - 0x000001e0 Zero RW 4475 .bss cli_core.o
- 0x20005ce0 - 0x00000240 Zero RW 4594 .bss app_cli.o
- 0x20005f20 - 0x00000200 Zero RW 4640 .bss ble_up.o
- 0x20006120 - 0x0000077b Zero RW 4709 .bss app_ble_proto.o
- 0x2000689b - 0x000001f7 Zero RW 4789 .bss app_ota.o
- 0x20006a92 - 0x00000030 Zero RW 4887 .bss app_info.o
+ 0x20004f00 - 0x00000c00 Zero RW 4392 .bss bsp_usart.o
+ 0x20005b00 - 0x000001e0 Zero RW 4478 .bss cli_core.o
+ 0x20005ce0 - 0x00000240 Zero RW 4597 .bss app_cli.o
+ 0x20005f20 - 0x00000200 Zero RW 4643 .bss ble_up.o
+ 0x20006120 - 0x0000077b Zero RW 4712 .bss app_ble_proto.o
+ 0x2000689b - 0x000001f7 Zero RW 4792 .bss app_ota.o
+ 0x20006a92 - 0x00000030 Zero RW 4890 .bss app_info.o
0x20006ac2 COMPRESSED 0x00000002 PAD
- 0x20006ac4 - 0x00000034 Zero RW 5014 .bss app_params.o
- 0x20006af8 - 0x000000f0 Zero RW 5732 .bss tasks.o
- 0x20006be8 - 0x00004800 Zero RW 6248 .bss heap_4.o
+ 0x20006ac4 - 0x00000034 Zero RW 5017 .bss app_params.o
+ 0x20006af8 - 0x000000f0 Zero RW 5735 .bss tasks.o
+ 0x20006be8 - 0x00004800 Zero RW 6251 .bss heap_4.o
0x2000b3e8 - 0x00000200 Zero RW 2 HEAP startup_n32wb03x.o
0x2000b5e8 - 0x00000800 Zero RW 1 STACK startup_n32wb03x.o
@@ -5429,12 +5429,12 @@ Image component sizes
696 188 0 0 0 12840 app_ble.o
1204 254 0 12 1915 9528 app_ble_proto.o
- 2032 1156 145 1 0 5563 app_bootset.o
+ 2032 1156 145 1 0 5615 app_bootset.o
1468 216 0 3 576 6799 app_cli.o
284 102 16 0 0 8644 app_dis.o
100 12 0 0 0 2298 app_gpio.o
868 110 7 4 48 8056 app_info.o
- 1910 160 0 60 503 14978 app_ota.o
+ 1910 160 0 60 503 15102 app_ota.o
1432 594 67 2 52 7737 app_params.o
626 156 334 1 0 6074 app_rdtss.o
196 36 0 6 512 2736 ble_up.o
@@ -5478,7 +5478,7 @@ Image component sizes
2552 254 0 60 240 27732 tasks.o
----------------------------------------------------------------------
- 41428 7512 4999 2076 30140 920339 Object Totals
+ 41428 7512 4999 2076 30140 920515 Object Totals
228 76 32 0 0 0 (incl. Generated)
40 0 11 27 2 0 (incl. Padding)
@@ -5572,8 +5572,8 @@ Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug
- 49408 7804 5132 2092 30140 906227 Grand Totals
- 49408 7804 5132 1560 30140 906227 ELF Image Totals (compressed)
+ 49408 7804 5132 2092 30140 906403 Grand Totals
+ 49408 7804 5132 1560 30140 906403 ELF Image Totals (compressed)
49408 7804 5132 1560 0 0 ROM Totals
==============================================================================
diff --git a/mcm-ddc-ble/MDK-ARM/bin/mcm-ddc-ble-app2.bin b/mcm-ddc-ble/MDK-ARM/bin/mcm-ddc-ble-app2.bin
index bab7a76..293276a 100644
Binary files a/mcm-ddc-ble/MDK-ARM/bin/mcm-ddc-ble-app2.bin and b/mcm-ddc-ble/MDK-ARM/bin/mcm-ddc-ble-app2.bin differ
diff --git a/mcm-ddc-ble/MDK-ARM/bin/mcm-ddc-ble.bin b/mcm-ddc-ble/MDK-ARM/bin/mcm-ddc-ble.bin
index c1d59c0..ad98bad 100644
Binary files a/mcm-ddc-ble/MDK-ARM/bin/mcm-ddc-ble.bin and b/mcm-ddc-ble/MDK-ARM/bin/mcm-ddc-ble.bin differ
diff --git a/mcm-ddc-ble/inc/app_ble_proto.h b/mcm-ddc-ble/inc/app_ble_proto.h
index 14a9cc0..d8b661a 100644
--- a/mcm-ddc-ble/inc/app_ble_proto.h
+++ b/mcm-ddc-ble/inc/app_ble_proto.h
@@ -23,28 +23,9 @@ extern "C" {
#include
-/* Frame types */
-#define BLE_FRAME_SOF 0xCA /* frame start byte */
-#define BLE_FRAME_HDR_LEN 5u /* SOF+TYPE+SEQ+LEN(2) */
-#define BLE_FRAME_CLI_REQ 0x01 /* phone -> device: one command line */
-#define BLE_FRAME_CLI_RSP 0x02 /* device -> phone: response text chunk */
-#define BLE_FRAME_CLI_RSP_END 0x03 /* device -> phone: {status u8} */
-#define BLE_FRAME_OTA_BEGIN 0x10 /* phone -> device: {size, crc32, version} */
-#define BLE_FRAME_OTA_DATA 0x11 /* phone -> device: {offset, data...} */
-#define BLE_FRAME_OTA_END 0x12 /* phone -> device: {crc32} */
-#define BLE_FRAME_OTA_ABORT 0x13 /* phone -> device: abort session (no payload) */
-#define BLE_FRAME_OTA_RSP 0x1F /* device -> phone: {cmd, status, offset} */
-#define BLE_FRAME_INFO_QUERY 0x20 /* phone -> device: {item_id}*n (empty/0xFF = all) */
-#define BLE_FRAME_INFO_RSP 0x21 /* device -> phone: TLV {id, len, value}*n */
-
-/* OTA_RSP / generic status codes */
-#define BLE_OTA_ST_OK 0
-#define BLE_OTA_ST_BAD_FRAME 1
-#define BLE_OTA_ST_BAD_STATE 2 /* bad state / bad offset sequence */
-#define BLE_OTA_ST_SIZE_TOO_BIG 3
-#define BLE_OTA_ST_CRC_FAIL 4
-#define BLE_OTA_ST_FLASH_FAIL 5
-#define BLE_OTA_ST_BANK_MISMATCH 6 /* image linked for the wrong bank */
+/* Frame type / OTA status constants moved to the shared wire header
+ * (Boot/src/ota_wire.h, also compiled into the bootloader download mode) */
+#include "ota_wire.h"
/**
* @brief Reset the protocol state machine.
diff --git a/mcm-ddc-ble/inc/app_version.h b/mcm-ddc-ble/inc/app_version.h
index 87c0d5b..432122e 100644
--- a/mcm-ddc-ble/inc/app_version.h
+++ b/mcm-ddc-ble/inc/app_version.h
@@ -9,12 +9,12 @@
#define __APP_VERSION_H__
#ifndef APP_FW_VERSION
-#define APP_FW_VERSION "V1.00.27"
+#define APP_FW_VERSION "V1.00.28"
#endif
/* Numeric form used by the BLE info query / OTA records: 0x00MMmmpp */
#ifndef APP_FW_VERSION_NUM
-#define APP_FW_VERSION_NUM 0x0001001Bu
+#define APP_FW_VERSION_NUM 0x0001001Cu
#endif
#endif /* __APP_VERSION_H__ */
diff --git a/mcm-ddc-ble/src/app_bootset.c b/mcm-ddc-ble/src/app_bootset.c
index 35e452a..f7682d9 100644
--- a/mcm-ddc-ble/src/app_bootset.c
+++ b/mcm-ddc-ble/src/app_bootset.c
@@ -23,8 +23,19 @@
#include
#include
+#ifdef BOOT_FIRMWARE
+#include "boot_usart.h" /* boot_delay_ms */
+#else
#include "FreeRTOS.h"
#include "task.h"
+#endif
+
+/* Let the final reply drain before the reboot (ms) */
+#ifdef BOOT_FIRMWARE
+#define bootset_reset_drain() boot_delay_ms(200u)
+#else
+#define bootset_reset_drain() vTaskDelay(pdMS_TO_TICKS(200))
+#endif
static uint8_t s_qflash_ready;
@@ -291,6 +302,6 @@ void AppBootset_CmdAppswitch(int argc, char* argv[])
}
cli_write("appsw: done, resetting...\r\n");
- vTaskDelay(pdMS_TO_TICKS(200));
+ bootset_reset_drain();
NVIC_SystemReset();
}
diff --git a/mcm-ddc-ble/src/app_ota.c b/mcm-ddc-ble/src/app_ota.c
index 3e402d4..79482d1 100644
--- a/mcm-ddc-ble/src/app_ota.c
+++ b/mcm-ddc-ble/src/app_ota.c
@@ -23,8 +23,7 @@
* survives this via the 5 s connection supervision timeout.
*/
#include "app_ota.h"
-#include "app_ble_proto.h"
-#include "bsp_usart.h"
+#include "ota_wire.h"
#include "dfu_layout.h"
#include "boot_crc32.h"
#include "n32wb03x.h"
@@ -33,8 +32,23 @@
#include
#include
+#ifdef BOOT_FIRMWARE
+/* Bootloader download mode: bare metal, no RTOS, no BLE. The millisecond
+ * base and the blocking UART TX come from boot_usart.c. */
+#include "boot_usart.h"
+#define ota_tick_t uint32_t
+#define ota_tick_get() boot_millis()
+#define OTA_MS_TO_TICKS(ms) (ms) /* boot tick is 1ms */
+#else
+#include "app_ble_proto.h"
+#include "bsp_usart.h"
+
#include "FreeRTOS.h"
#include "task.h"
+#define ota_tick_t TickType_t
+#define ota_tick_get() xTaskGetTickCount()
+#define OTA_MS_TO_TICKS(ms) pdMS_TO_TICKS(ms)
+#endif
/* armlink execution-region base symbol: address of this running image */
extern uint32_t Image$$ER_IROM1$$Base;
@@ -65,7 +79,7 @@ static uint8_t s_qflash_ready;
/* Deferred post-OTA_END reset (see OTA_RESET_GRACE_MS above) */
static volatile uint8_t s_rsp_consumed; /* END RSP taken by the host */
static volatile uint8_t s_reset_pending; /* reset scheduled, polled by the BLE task */
-static TickType_t s_reset_stamp;
+static ota_tick_t s_reset_stamp;
/* ------------------------------------------------------------------ */
/* Helpers */
@@ -153,7 +167,11 @@ static void ota_respond(uint8_t seq, uint8_t cmd_echo, uint8_t status, uint32_t
s_rsp_sink(fr, (uint16_t)sizeof(fr));
return;
}
+#ifdef BOOT_FIRMWARE
+ /* no legacy notify path in the bootloader - the sink is always set */
+#else
(void)app_ble_proto_send_frame(BLE_FRAME_OTA_RSP, seq, p, sizeof(p));
+#endif
}
uint32_t app_ota_current_bank_base(void)
@@ -235,6 +253,20 @@ static void ota_on_begin(uint8_t seq, const uint8_t* p, uint16_t len)
return;
}
+#ifdef BOOT_FIRMWARE
+ /* The bootloader runs from neither bank: update the INACTIVE bank per
+ * the bootsetting record (then flip active at OTA_END). An invalid
+ * record (bricked/blank device recovery) targets APP1. */
+ {
+ const caiic_bootsetting_t* bs = (const caiic_bootsetting_t*)CAIIC_BOOTSETTING_ADDR;
+ uint8_t bs_ok = (bs->magic == CAIIC_BOOT_MAGIC &&
+ bs->crc32 == caiic_crc32((const uint8_t*)bs,
+ (uint32_t)offsetof(caiic_bootsetting_t, crc32))) ? 1 : 0;
+ target = (bs_ok && bs->active_bank == CAIIC_ACTIVE_BANK1) ? CAIIC_APP2_BASE
+ : CAIIC_APP1_BASE;
+ }
+ (void)self;
+#else
/* Pick the opposite bank as the update target */
self = app_ota_current_bank_base();
if (self == CAIIC_APP1_BASE)
@@ -250,6 +282,7 @@ static void ota_on_begin(uint8_t seq, const uint8_t* p, uint16_t len)
ota_respond(seq, BLE_FRAME_OTA_BEGIN, BLE_OTA_ST_BAD_STATE, 0);
return;
}
+#endif
if (total < OTA_MIN_IMAGE_SIZE || total > CAIIC_APP_BANK_SIZE)
{
@@ -517,9 +550,9 @@ static void ota_on_end(uint8_t seq, const uint8_t* p, uint16_t len)
ota_respond(seq, BLE_FRAME_OTA_END, BLE_OTA_ST_OK, s_total_size);
/* Defer the reset until the host has fetched the END response (polled
- * from the BLE schedule task, which keeps running meanwhile so the ATT
- * read / notify flush can actually happen) */
- s_reset_stamp = xTaskGetTickCount();
+ * from the BLE schedule task / boot superloop, which keeps running
+ * meanwhile so the ATT read / UART drain can actually happen) */
+ s_reset_stamp = ota_tick_get();
s_reset_pending = 1;
}
@@ -532,10 +565,10 @@ void app_ota_reset_poll(void)
{
if (s_reset_pending)
{
- TickType_t elapsed = xTaskGetTickCount() - s_reset_stamp;
+ ota_tick_t elapsed = ota_tick_get() - s_reset_stamp;
- if ((s_rsp_consumed && elapsed >= pdMS_TO_TICKS(OTA_RESET_GRACE_MS)) ||
- elapsed >= pdMS_TO_TICKS(OTA_RESET_TIMEOUT_MS))
+ if ((s_rsp_consumed && elapsed >= OTA_MS_TO_TICKS(OTA_RESET_GRACE_MS)) ||
+ elapsed >= OTA_MS_TO_TICKS(OTA_RESET_TIMEOUT_MS))
{
NVIC_SystemReset();
}
@@ -676,7 +709,9 @@ void app_ota_chan_rx(const uint8_t* data, uint16_t len, app_ota_rsp_sink_fn sink
}
}
-/* --- BLE OTA characteristic (...e0005): write frames in, read RSP out --- */
+/* --- BLE OTA characteristic (...e0005): write frames in, read RSP out ---
+ * (application firmware only; the bootloader has no BLE) */
+#ifndef BOOT_FIRMWARE
#define OTA_BLE_RSP_BUF_SIZE 16u /* largest RSP frame = 7B hdr + 6B */
@@ -707,15 +742,20 @@ const uint8_t* app_ota_chan_rsp_ble(uint16_t* out_len)
s_bleRspLen = 0; /* consumed by the read */
return s_bleRsp;
}
+#endif /* !BOOT_FIRMWARE */
/* --- UART binary mode (CLI "ota"): RSP frames straight out on TX --- */
static void ota_uart_sink(const uint8_t* frame, uint16_t len)
{
+#ifdef BOOT_FIRMWARE
+ boot_usart_write(frame, len); /* blocking: frame physically out below */
+#else
bsp_usart_tx_lock();
bsp_usart_write_dma(frame, len);
bsp_usart_tx_unlock();
/* Blocking DMA TX: the frame is physically out when we get here */
+#endif
s_rsp_consumed = 1;
}
diff --git a/tools/merge_image.py b/tools/merge_image.py
index cb988ef..3665586 100644
--- a/tools/merge_image.py
+++ b/tools/merge_image.py
@@ -255,6 +255,13 @@ def main():
version = read_app_fw_version(root) or 0
boot_blob = load_bin(os.path.join(root, BOOT_BIN), "bootloader")
+ # The boot region is 16KB (bootsetting starts at 0x01004000) - a fatter
+ # bootloader would silently overlap the bootsetting sector.
+ if len(boot_blob) > BOOTSETTING_ADDR - BOOT_ADDR:
+ raise SystemExit("ERROR: bootloader bin %d bytes exceeds the 16KB "
+ "boot region - trim it before packaging"
+ % len(boot_blob))
+ check_initial_sp(boot_blob, "bootloader")
app_path = app_rel if os.path.isabs(app_rel) else os.path.join(root, app_rel)
app_blob = load_bin(app_path, "APP1")
diff --git a/tools/out/mothercup_ble_ota.bin b/tools/out/mothercup_ble_ota.bin
index 7367f4b..2fe9153 100644
Binary files a/tools/out/mothercup_ble_ota.bin and b/tools/out/mothercup_ble_ota.bin differ
diff --git a/tools/out/mothercup_ble_prod.bin b/tools/out/mothercup_ble_prod.bin
index 9d6163f..b4f335f 100644
Binary files a/tools/out/mothercup_ble_prod.bin and b/tools/out/mothercup_ble_prod.bin differ
diff --git a/tools/out/mothercup_ble_prod.hex b/tools/out/mothercup_ble_prod.hex
index 1fed4ee..ee05b64 100644
--- a/tools/out/mothercup_ble_prod.hex
+++ b/tools/out/mothercup_ble_prod.hex
@@ -1,5 +1,5 @@
:020000040100F9
-:1000000038480020E5000001ED000001EF0000018C
+:10000000585A0020E5000001ED000001EF0000015A
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000F1000001DE
:100030000000000000000000F3000001F5000001D6
@@ -11,10 +11,10 @@
:10009000F7000001F7000001F7000001F700000180
:1000A000F7000001F7000001F7000001F700000170
:1000B000F7000001F7000001F7000001F700000160
-:1000C0000348854600F056F80048004751050001F6
-:1000D0003848002040BA7047C0BA70470138FDD197
+:1000C0000348854600F00CF900480047411F000135
+:1000D000585A002040BA7047C0BA70470138FDD165
:1000E000704700000448804704480047FEE7FEE7E9
-:1000F000FEE7FEE7FEE7FEE795030001C100000111
+:1000F000FEE7FEE7FEE7FEE7F5110001C1000001A3
:1001000030B50B46014600202022012409E00D46AF
:10011000D5409D4205D31D469540491B2546954037
:1001200040191546521E002DF1DC30BD03460B432D
@@ -22,111 +22,794 @@
:1001400003E00B780370401C491C521EF9D2704723
:10015000D2B201E00270401C491EFBD2704700225F
:10016000F6E710B513460A4604461946FFF7F0FFB6
-:10017000204610BD064C0125064E05E0E36807CC7D
-:100180002B430C3C98471034B442F7D3FFF79CFF45
-:10019000C0070001D0070001F7B5D4B004460E46F1
-:1001A00000205390052052900025002700BFEFF358
-:1001B00010800090FF21453101A8FFF7D0FF00F02B
-:1001C000F1F905462448854218D1012000038442F4
-:1001D00002D1002053902AE001204003844202D142
-:1001E0004011539023E003200003844203D10120F7
-:1001F000400253901BE0529857B0F0BD174885421B
-:1002000013D101200003844201D153900FE001205B
-:100210004003844201D1539009E00320000384424B
-:1002200001D1539003E05298E6E75298E4E705AF16
-:100230000137FF2241320A4901A8FFF777FF012069
-:1002400000F04FF93146569A5398B84752900098AB
-:1002500000F047F95298CFE7C440130085601300BF
-:10026000E8050001F1B58AB0002009907D20C000AA
-:1002700008900125AD020027002007907F200690FE
-:1002800040240026002005900390200102900020C9
-:1002900001903E490A98884206D83D4800686102AC
-:1002A00088433B49086006E0394800680121C903DA
-:1002B0000843374908607D21C9000A98FFF720FFED
-:1002C0007D21C9000090FFF71BFF450100BF3048AA
-:1002D00000687F21090288430190200201990843A8
-:1002E0002B4908600520FFF7F9FE10E00120FFF719
-:1002F000F5FE2748406B02210840002800D007E0A7
-:100300000598411C05910899884200D900E0EDE765
-:1003100000BF1F48C06B86B2AE4201D9771B00E018
-:10032000AF1B0298874203D2E0B20390B8B20290AA
-:10033000AE4201D3069400E007940699079840184E
-:10034000C005000E04900498A04200D103E0049C74
-:1003500009988742BBD800BF0D4800687F21090279
-:1003600088430190039800020199084308490860F6
-:100370000846406840084000486000BF04484068A4
-:10038000042108400028F9D10BB0F0BD0090D00343
-:100390000010024010B53E48C0690121090708431A
-:1003A0003B49C861812000063A4908633A484861E0
-:1003B0003A4808623A48006803218903884338496B
-:1003C00008603421374800F073F836480069401C53
-:1003D000002803D033480069002817D12C48406812
-:1003E0000121090408432A4948600846406807215A
-:1003F00009028843264948600846406809150843B1
-:10040000234948602848FFF72DFF3FE021488069D5
-:100410004409640123480078C006C00E04431D4807
-:1004200084611B4800680121C9038843184908609A
-:10043000084600687F21090288430446194800697C
-:10044000000220431249086008464068012109045F
-:1004500008430F494860084640680721090288435D
-:100460000B49486008464068091508430849486038
-:100470000846006A0D490840054908620846006AB6
-:100480000849C968090208430149086210BD000013
-:1004900000100240007000400F0800001800020029
-:1004A00000100140004000200090D003FF00F8FF42
-:1004B00070B504460D462A46214601200003FFF789
-:1004C0006BFE70BD02E008C8121F08C1002AFAD1F5
-:1004D00070477047002001E001C1121F002AFBD1C4
-:1004E000704780F31088704730B502460B460021F4
-:1004F000C94312E01078521C414000240BE0480828
-:10050000CD07ED0F002D01D0074D00E0002568401C
-:100510000146601CC4B2082CF1DB18465B1E0028A3
-:10052000E8D1C84330BD00002083B8ED0446012067
-:10053000C007204305490863206880F3088800BF8E
-:1005400062B66068804700BFFEE7000000700040B0
-:10055000114C124D1249206888421AD12821204698
-:10056000FFF7C2FFA16A884213D16168022902D154
-:100570002146183101E0214608310846074A016842
-:10058000914205D3412292040168914200D205684C
-:1005900000BF2846FFF7CAFF0040000100800001AD
-:1005A00011C011CA70B5D2B00024002500BFEFF30E
-:1005B00010800646FF21453101A8FFF7D0FD01ACB0
-:1005C00001349822074901A8FFF7B0FD0120FFF789
-:1005D00088FFA04705463046FFF783FF284652B004
-:1005E00070BD00002807000140BA7047C0BA7047CC
-:1005F0000138FDD170470000F7B50325AD06286A24
-:1006000082B016460C46400840002862286A022143
-:1006100008432862286A8007FCD4662068600127A6
-:100620002F61A86AC005FCD5992068602F61A86A6F
-:10063000C005FCD5FF209130FFF7DAFFFF2301331F
-:10064000AB626846EF60352169602F61A96AC90510
-:10065000FCD5AB62A969EF60C9B205226A602F615F
-:10066000AA6AD205FCD5AB62AA690902D2B21143CB
-:100670000180C80702D0032005B0F0BDAB626869F5
-:10068000FF210831884368616869C91E08436861B1
-:1006900002980002483068600820A860EE602F6170
-:1006A000A86AC005FCD5FF200130A8620023F61C13
-:1006B000B0080ED0B2081148006899006054060ACC
-:1006C00009194E70060C000E8E705B1CC8709A42A1
-:1006D000F1D8FF200130A8626869FF210831884302
-:1006E0006861686938436861286A80088000286208
-:1006F000286A38432862002005B0F0BD8000000C55
-:10070000032080064169FF2208329143416142691A
-:1007100001210A434261026A920892000262026A5F
-:100720000A43026270470000002003218906096A1B
-:10073000490849000322920611621146096A022201
-:10074000114303229206116200BF03218906096A40
-:10075000022211400229F8D0D101032292069162AF
-:100760000321D1609F2151600121116100BF03214C
-:100770008906896AFF22013211409142F7D1032292
-:1007800092069162114688694969FF2208329143B5
-:100790000322920651611146496901221143032245
-:1007A000920651611146096A890889001162114651
-:1007B000096A012211430322920611627047000068
-:1007C000D00700010040002038080000D4040001D8
+:10017000204610BD421C0178401C0029FBD1801A8A
+:10018000704710B5002200E0521C835C8C5CA342D7
+:1001900001D1002BF8D1D8B2E1B2401A10BD30B570
+:1001A00004460020034600E05B1C934203D2E05C5F
+:1001B000CD5C401BF8D030BDF7B582B00F460026AD
+:1001C000029C01F037F90090006801902578641CCA
+:1001D000002D05D000F02CF80068405DC007F5D177
+:1001E0002B2D02D02D2D1CD0641E00980021016003
+:1001F00039462046049A00F01FF80146002F04D02B
+:100200003868A04201D1029838600098006802283E
+:100210000BD00098019A0260700506D5484205B0DF
+:10022000F0BD012080020643DFE70846F7E7000043
+:1002300000487047C82E0001F7B582B0029C002725
+:100240002078641C15460197302802D0002D15D067
+:1002500015E020780127641C782804D0582802D0A3
+:10026000002D09D00BE0002D01D0102D07D1002763
+:1002700010252078641C02E0082500E00A250026ED
+:10028000009610E00099012769430818020C2946DE
+:1002900080B2714300908E183804864201D3012049
+:1002A00001902078641C294600F02CF80028E9DA37
+:1002B0000398002805D0002F01D0641E00E0029CA6
+:1002C00004600198002806D001F0B4F80221016012
+:1002D000C81E05B0F0BD009930040843F9E70000DE
+:1002E000064C0125064E05E0E36807CC2B430C3C89
+:1002F00098471034B442F7D3FFF7E6FEFC31000113
+:100300001C3200013A2800D23038202302469A439A
+:10031000412A01D310463738884201D30020C04318
+:1003200070470000F0B58DB006460F462C224449B8
+:1003300002A8FFF7FBFE02A801F062FC002804D12E
+:1003400040A001F0C5FD0DB0F0BD022E0FDB01A9EC
+:10035000786802F019FA002805D1019801280DD01B
+:10036000019802280AD045A001F0B2FDEBE70398FE
+:10037000012801D1022000E0012001900199039899
+:10038000884204D14CA0019901F0D4FCDBE701982C
+:10039000012801D104A800E008A80446019801281A
+:1003A00001D14C4800E04C480090216800988142FF
+:1003B00007D16068002804D007218903606888425B
+:1003C00006D96368226845A0019901F0B3FCBAE739
+:1003D00050A001F07DFD6168206801F023FC054616
+:1003E000A168A94209D02B46A2685848019901F09A
+:1003F000A1FC57A001F06CFDA5E76368E26861A06D
+:10040000019901F097FC0198039002A801F002FB0A
+:10041000002803D06BA001F05BFD94E76EA001F013
+:1004200057FDC82001F00AFA00BFBFF34F8F714893
+:100430007149C860BFF34F8F00BF00BFFEE70000E7
+:100440000040000161707073773A20626F6F7473BF
+:10045000657474696E67207265636F726420696E7B
+:1004600076616C69642C2072656675736520746FA3
+:10047000207377697463680D0A0000007573616703
+:10048000653A206170707377205B317C325D202883
+:100490006E6F20617267203D2073776974636820F6
+:1004A000746F20746865206F746865722062616E75
+:1004B0006B290D0A0000000061707073773A2061AB
+:1004C0006C7265616479206F6E20415050256C75A7
+:1004D0000D0A00000080000100400201617070738D
+:1004E000773A2062616E6B256C75207265636F725E
+:1004F0006420696E76616C69642028616464723D71
+:1005000030782530386C582073697A653D256C75D4
+:10051000290D0A0061707073773A207665726966FA
+:1005200079696E672074617267657420696D6167AF
+:1005300065206372632028666577207365636F6E3C
+:100540006473292E2E2E0D0A000000006831000170
+:100550002020202020202072756E20424C45204F04
+:10056000544120746F207772697465206120766130
+:100570006C696420696D6167652066697273740DCA
+:100580000A00000061707073773A2062616E6B251B
+:100590006C7520696D616765206F6B2028766572C8
+:1005A0002030782530386C582C20256C7520422955
+:1005B0002C20737769746368696E672E2E2E0D0A7E
+:1005C0000000000061707073773A20666C61736898
+:1005D000206661696C0D0A0061707073773A20645F
+:1005E0006F6E652C20726573657474696E672E2E4C
+:1005F0002E0D0A000400FA0500ED00E030B58BB0C6
+:1006000004460D462C2204496846FFF78FFD6846D4
+:1006100001F040FA0BB030BD0040000170B58CB065
+:1006200006460C46032E0ADA53A001F051FC5AA0EC
+:1006300001F04EFC5E4801F04BFC0CB070BD694609
+:10064000A06802F0A1F8002803D05AA001F040FCF5
+:10065000F3E72C225C4901A8FFF768FD01A801F02F
+:10066000CFFA002806D12C2101A8FFF778FD57A06A
+:1006700001F02EFC63A16068FFF783FD00280CD118
+:100680000098012806D00098022803D05FA001F04E
+:100690001FFCD2E70098029058E06068007862285A
+:1006A00050D160684078312803D0606840783228A3
+:1006B00048D160684078312801D103A800E007A83C
+:1006C00005466168881C59A1FFF75BFD00280ED123
+:1006D00058490098884207D057490098884203D06B
+:1006E00056A001F0F5FBA8E7009828602EE06168AD
+:1006F000881C61A1FFF745FD00280BD10721890364
+:100700000098884203D95EA001F0E2FB95E70098CB
+:1007100068601BE06168881C62A1FFF732FD002859
+:1007200002D10098A86011E06168881C5EA1FFF703
+:1007300028FD002802D10098E86007E05BA001F0E6
+:10074000C7FB7AE759A001F0C3FB76E761685DA0BB
+:10075000009A01F0EFFA01A801F05CF9002803D03B
+:1007600061A001F0B5FB68E764A001F0B1FB01A84E
+:1007700001F090F900BF60E775736167653A206228
+:1007800073736574203C6669656C643E203C7661D9
+:100790006C3E0D0A0000000020206669656C643A1A
+:1007A00020616374697665203C317C323E0D0A001D
+:1007B000B031000162737365743A2062616420761F
+:1007C000616C75650D0A000000400001627373657D
+:1007D000743A206578697374696E67207265636F17
+:1007E000726420696E76616C69642C207265627532
+:1007F000696C642066726F6D2073637261746368E4
+:100800000D0A0000616374697665000062737365A8
+:10081000743A20616374697665206D757374206223
+:10082000652031206F7220320D0A0000616464720D
+:100830000000000000800001004002016273736547
+:10084000743A2061646472206D757374206265204F
+:1008500043414949435F415050315F424153452034
+:100860006F722043414949435F415050325F4241DA
+:1008700053450D0A0000000073697A65000000000E
+:1008800062737365743A2073697A6520657863656D
+:10089000656473207468652062616E6B2073697A89
+:1008A000650D0A006372630076657200627373659A
+:1008B000743A20756E6B6E6F776E206669656C6436
+:1008C0000D0A000062737365743A202573203D2081
+:1008D00030782530386C582C2077726974696E67CF
+:1008E0002E2E2E0D0A00000062737365743A206686
+:1008F0006C617368206661696C0D0A0062737365D0
+:10090000743A206F6B202876657269666965642980
+:100910000D0A0000F8B5164C16492068884208D127
+:100920002821204601F07EF9A16A884201D10120E8
+:1009300000E00020064665680FA112A001F0FAF958
+:10094000002E03D117A001F0C3FA0225294620A0EA
+:1009500001F0F0F900F07EFF7D21C9000090FFF763
+:10096000CFFB074639461FA001F0E4F9F8BD0000AF
+:100970000040000111C011CA56312E30312E3030E6
+:1009800000000000626F6F746C6F616465723A20E2
+:1009900025732C20646F776E6C6F6164206D6F64BB
+:1009A000650D0A00626F6F7473657474696E673ADF
+:1009B00020494E56414C4944202D204F544120742B
+:1009C00061726765747320415050310D0A00000058
+:1009D0006375722062616E6B3A20415050256C75D0
+:1009E0000D0A0000757074696D653A20256C7520DC
+:1009F000730D0A0070B506460D46022E1EDB00245C
+:100A000015E00C226243184B99586868FFF7B9FB50
+:100A100000280BD10C206043134BC01842680C20F7
+:100A20006043195811A001F085F970BD641C092CB0
+:100A3000E7D311A0696801F07DF9F6E717A001F08E
+:100A400047FA00240BE00C206043074BC0184268B3
+:100A50000C206043195805A001F06CF9641C092CA6
+:100A6000F1D300BFE1E70000A82A00012020252DD6
+:100A700038732025730D0A00756E6B6E6F776E20CC
+:100A8000636F6D6D616E643A2025732028747279EE
+:100A9000202768656C7027290D0A0000636F6D6D53
+:100AA000616E64733A0D0A0070B504460D46034842
+:100AB00001F00EFA01200249087070BDCC2E000131
+:100AC0000C40002008A001F003FAC82000F0B6FE98
+:100AD00000BFBFF34F8F08480849C860BFF34F8F6E
+:100AE00000BF00BFFEE70000726573657474696E35
+:100AF000672E2E2E0D0A00000400FA0500ED00E01E
+:100B000070B504460D4605A001F0E2F90BA001F016
+:100B1000DFF917A001F0DCF970BD00007573617298
+:100B200074313A2054583D5042362052583D50427C
+:100B3000372028414634290D0A000000626175649F
+:100B40003A203436303830302C20382064617461DB
+:100B500020626974732C206E6F20706172697479E1
+:100B60002C20312073746F70206269740D0A0000AC
+:100B7000666C6F7720636F6E74726F6C3A206E6F65
+:100B80006E653B2074783A20706F6C6C65643B2016
+:100B900072783A20444D412072696E672028334BA9
+:100BA000422C20706F6C6C6564290D0A00000000F7
+:100BB00070B504460D4605A107A001F0BBF8114829
+:100BC000016811A001F0B6F870BD000056312E305A
+:100BD000312E303000000000626F6F746C6F616402
+:100BE00065722076657273696F6E3A2025732028CE
+:100BF000646F776E6C6F6164206D6F6465290D0A98
+:100C0000000000000040002053797374656D436F4D
+:100C10007265436C6F636B203D20256C7520487AAC
+:100C20000D0A00000168254A1140016000210160A1
+:100C300041608160C1602249884208D12049083959
+:100C400049680F2211431E4A083A516035E01C4999
+:100C50001431884208D11A4908394968F0221143F1
+:100C6000174A083A516028E015492831884209D1CD
+:100C70001349083949680F2212021143104A083AF1
+:100C800051601AE00E493C31884209D10C490839BB
+:100C900049680F2212031143094A083A51600CE0D7
+:100CA00007495031884208D10549083949680F225F
+:100CB00012041143024A083A51607047FEFF0000D7
+:100CC00008000240002904D0026801231A43026090
+:100CD00003E00268014B1A4002607047FEFF00000B
+:100CE0000146486880B2704710B5002202680D4B7B
+:100CF0001A400C6A8B6823430C6923434C692343D5
+:100D00008C692343CC6923434C6A23438C6A234375
+:100D10001A430260CB6843600B6883604B68C36012
+:100D200010BD00000F80FFFF10B5002B01D0106137
+:100D300001E00024146110BD70B503460A4600218D
+:100D40000024002076E001268E40156835402C46B0
+:100D5000002C6ED05568022D02D05568122D20D17E
+:100D600008250D40002D0ED0586A4D07EE0E0F25B8
+:100D7000B5400646AE4330464E07F60E5569B540BF
+:100D8000284358620DE0186A4D07EE0E0F25B54056
+:100D90000646AE4330464E07F60E5569B540284329
+:100DA00018625568012D08D05568112D05D0556879
+:100DB000022D02D05568122D0BD1586801258D40A7
+:100DC0000646AE4330461579ED06ED0F8D402843BB
+:100DD000586018684E000325B5400646AE433046BD
+:100DE0001579AD07AD0F4E00B54028431860D8689F
+:100DF0004E000325B5400646AE4330464E0095688A
+:100E0000B5402843D860986801258D400646AE431A
+:100E10003046D5688D4028439860D86A4E00012539
+:100E2000B5400646AE4330464E001569B5402843EE
+:100E3000D862491C1568CD40002D84D170BD0000DA
+:100E4000054901600F21416100214160816001215C
+:100E5000C160002101617047FF3F0000F7B5D4B0C9
+:100E600004460E460020539005205290002500278E
+:100E700000BFEFF310800090FF21453101A8FFF77C
+:100E80006EF901F0A5FC05462448854218D10120E1
+:100E90000003844202D1002053902AE00120400345
+:100EA000844202D14011539023E003200003844286
+:100EB00003D10120400253901BE0529857B0F0BD7F
+:100EC0001748854213D101200003844201D1539079
+:100ED0000FE001204003844201D1539009E0032038
+:100EE0000003844201D1539003E05298E6E7529800
+:100EF000E4E705AF0137FF2241320A4901A8FFF7B5
+:100F000015F9012000F0A9FA3146569A5398B847CE
+:100F10005290009800F0A1FA5298CFE7C440130015
+:100F200085601300CE28000170B50446002500BF7F
+:100F300000BFEFF310800546012000F091FA00BFDA
+:100F400001200006241A20460549096888470646FC
+:100F500000BF284600F084FA00BF304670BD000094
+:100F60005040002010B508480849086094300849EE
+:100F70000860FF382D3807490860C92292000649E9
+:100F80000938FFF7D3F810BDCD4F002050400020A6
+:100F90005440002058400020202B0001F8B50446A2
+:100FA0000D461646002700BF00BFEFF3108007462E
+:100FB000012000F055FA00BF01200006241A324635
+:100FC00029462046054B1B689847009000BF3846CD
+:100FD00000F046FA00BF0098F8BD00005440002021
+:100FE000002905D0054A52690243044B5A6104E0C6
+:100FF000024A52698243014B5A6170470010024015
+:10100000002905D0054A92690243044B9A6104E025
+:10101000024A92698243014B9A6170470010024074
+:1010200010B500210022214B5B680424234019469F
+:10103000002902D0042906D102E01D4B036005E01F
+:101040001C4B036002E01A4B036000BF00BF174B4C
+:101050005B683024234019460909174B5A5C036822
+:10106000D3404360114B5B68072424022340194698
+:10107000090A124B5A5C4368D34083600B4B5B6890
+:10108000E40023401946C90A0C4B5A5C4368D3401C
+:10109000C360064BDB6A10242340002B02D0084BB0
+:1010A000036102E07D23DB03036110BD00100240F9
+:1010B0000090D0030048E8011C2B0001142B000114
+:1010C00000093D00F1B58AB0002009907D20C000E4
+:1010D00008900125AD020027002007907F20069090
+:1010E000402400260020059003902001029000205B
+:1010F00001903E490A98884206D83D48006861023E
+:1011000088433B49086006E0394800680121C9036B
+:101110000843374908607D21C9000A98FEF7F0FFAF
+:101120007D21C9000090FEF7EBFF450100BF30486C
+:1011300000687F2109028843019020020199084339
+:101140002B4908600520FEF7C9FF10E00120FEF7DB
+:10115000C5FF2748406B02210840002800D007E067
+:101160000598411C05910899884200D900E0EDE7F7
+:1011700000BF1F48C06B86B2AE4201D9771B00E0AA
+:10118000AF1B0298874203D2E0B20390B8B202903C
+:10119000AE4201D3069400E00794069907984018E0
+:1011A000C005000E04900498A04200D103E0049C06
+:1011B00009988742BBD800BF0D4800687F2109020B
+:1011C0008843019003980002019908430849086088
+:1011D0000846406840084000486000BF0448406836
+:1011E000042108400028F9D10BB0F0BD0090D003D5
+:1011F0000010024010B53E48C069012109070843AC
+:101200003B49C861812000063A4908633A48486171
+:101210003A4808623A4800680321890388433849FC
+:1012200008603421374800F073F836480069401CE4
+:10123000002803D033480069002817D12C484068A3
+:101240000121090408432A494860084640680721EB
+:101250000902884326494860084640680915084342
+:10126000234948602848FFF72DFF3FE02148806967
+:101270004409640123480078C006C00E04431D4899
+:1012800084611B4800680121C9038843184908602C
+:10129000084600687F21090288430446194800690E
+:1012A00000022043124908600846406801210904F1
+:1012B00008430F49486008464068072109028843EF
+:1012C0000B494860084640680915084308494860CA
+:1012D0000846006A0D490840054908620846006A48
+:1012E0000849C968090208430149086210BD0000A5
+:1012F00000100240007000400F08000018000200BB
+:1013000000100140604000200090D003FF00F8FF73
+:1013100070B504460D462A46214601200003FFF71A
+:101320009DFD70BD002905D0828901235B031A430E
+:10133000828103E08289024B1A408281704700005B
+:10134000FFDF0000002A03D0838A0B43838202E080
+:10135000838A8B43838270470246002001235B020D
+:10136000994200D100BF13880B40002B01D001200F
+:1013700000E0002070470000F0B589B005460E4639
+:1013800000240020089000BF00BF0027B08900287B
+:1013900000D000BF2F462C8A20480440F088044328
+:1013A0002C82AC891E480440B08831890843718979
+:1013B00008430443AC81AC8A1A480440B089044312
+:1013C000AC8201A8FFF72CFE1748874202D104988F
+:1013D000089001E003980890326891001923089A58
+:1013E0005A431046FEF78CFE079064210798FEF7DB
+:1013F00087FE04012109642041430798411A0691A0
+:1014000006990901084632306421FEF779FE00078B
+:10141000000F04432C8109B0F0BD0000FFCF000095
+:10142000F3E90000FFFC000000380140CA05D20DBE
+:1014300082807047004870475C40002002E008C886
+:10144000121F08C1002AFAD170477047002001E03E
+:1014500001C1121F002AFBD1704780F3108870472A
+:1014600080F3108870470000002007490870074982
+:10147000086007490860074908600749086007498C
+:101480000870074908707047104000202440002071
+:10149000284000202C400020344000204440002000
+:1014A000454000200020024908700249088070472A
+:1014B0004C40002048400020F7B584B00746494919
+:1014C00006980860002686E0BC5D47480078002842
+:1014D00004D0012810D0022874D13AE0CA2C0AD1D5
+:1014E0004248047001204249088005204149088093
+:1014F00001203D4908706BE03D4801880088401C90
+:101500003B4A1080394844541046008805281FD1B2
+:101510003649C978354A1279120211430846FF212B
+:10152000E131884205D900212F4A1170304A1180DB
+:101530000DE0C11D2F4A1180114609882C4A1288DE
+:10154000914201D1002100E00221274A117000BF21
+:101550003EE0274801880088401C254A1080234827
+:1015600044541046008823490988884228D11F48DE
+:10157000C0781E490979090208430546281D81B231
+:101580001A48401C00F09CFD0390681D1749095C37
+:10159000A81D164A105C00020143029102990398AB
+:1015A000884207D11046817840782B46521D019021
+:1015B00000F034F800200C4908700D49088000BF85
+:1015C00006E0FFE70020084908700949088000BFCD
+:1015D00000BF701C86B20598864200DA74E707B037
+:1015E000F0BD0000404000204C400020444D002051
+:1015F000484000204A40002031B5064A0121684693
+:10160000FFF75AFF04480478002003490870204679
+:1016100038BD0000A126000146400020F8B5044670
+:101620000D4616461F46102C06D0112C0AD0122C3F
+:101630000ED0132C24D111E03A463146284600F052
+:1016400085FD1EE03A463146284600F037FE18E098
+:101650003A463146284600F005FF12E0FFF704FF46
+:101660000948002213210368284600F0DBFF0748E1
+:1016700000680749884202D101200649087000E04D
+:1016800000BF00BFF8BD0000244000204040002003
+:10169000A12600014640002010B51148007800281E
+:1016A0001CD000F0D7F80F490968441A0E4800789A
+:1016B000002803D0FF202D30844203D27D2000017A
+:1016C00084420AD300BFBFF34F8F08480849C8605F
+:1016D000BFF34F8F00BF00BFFEE700BF10BD00008B
+:1016E0003A4000203C400020394000200400FA0528
+:1016F00000ED00E008B500240025354800F0E8FBC7
+:1017000000BFFFF7C9FF3348007800280ED000F073
+:10171000A1F8401B3049884208D900202D490870A3
+:10172000FFF7C0FE2DA000F0D3FB0024684600F0B8
+:101730002DF9002800D1E4E726480078002810D0D1
+:1017400000F088F8054668460078FFF755FF002846
+:1017500006D000201F4908702AA000F0B9FB002421
+:10176000CFE768460078082815D00A2805D00D284C
+:1017700002D07F2818D10FE000BF2DA000F0A8FBF9
+:1017800000202C490855084600F06EFA00241BA0E2
+:1017900000F09EFB1AE000BF002C04D0601EC4B213
+:1017A00025A000F095FB11E06846007820280CD3B6
+:1017B0004F2C0AD2684602782046611CCCB21D49E3
+:1017C0000A540121684600F00DF900BF00BF98E7F8
+:1017D000043000010C400020B80B00000D0A5B6FC4
+:1017E00074615D2062696E617279206D6F6465203D
+:1017F0004F4646202869646C65290D0A6361696952
+:10180000632D3E000D0A5B6F74615D2062696E613D
+:101810007279206D6F6465204F4646202861626FA3
+:101820007274290D0A63616969632D3E000000002E
+:101830000D0A0000F44C00200820080000B5024604
+:1018400000F008F8034600BF00F004F8C01A904208
+:10185000FAD300BD074800690121090408400028A7
+:1018600004D005480068401C03490860024800682D
+:101870007047000000E000E00840002000B595B08F
+:1018800001210820FFF7BCFB01218803FFF7B8FB0B
+:101890000FA8FFF7D5FA40200F90022010900420E7
+:1018A00014900FA93148FFF747FA80200F900420C9
+:1018B00014900FA92D48FFF73FFAE120C0020B90CA
+:1018C0000021684601864186818601870C21C186F8
+:1018D0000BA92748FFF750FD01210846FFF780FBC1
+:1018E00000212448FFF7EEF92248FFF79BF9012376
+:1018F000204A20491C390320FFF716FA1C48001D16
+:1019000000901D4801900020029003208002039067
+:101910000020049080200590002006900790202051
+:1019200008900002099000200A9069461148FFF7CC
+:10193000DBF900201149088001210E48FFF7C2F9A8
+:10194000012240210A48FFF7FDFC01210848FFF76A
+:10195000E9FC0B480B4948610020886105200861BB
+:1019600000200949086015B000BD0000000C0140CE
+:10197000003801401C000240944000200440002038
+:10198000FFF9000000E000E00840002070B50446C8
+:1019900000F01CF805460B480088A84201D1002041
+:1019A00070BD094807490988405C207003218902FD
+:1019B00004480088401CFEF7A3FB02480180012078
+:1019C000EEE70000044000209440002010B50448D9
+:1019D000FFF786F903218902081A80B210BD0000C2
+:1019E0001C00024070B505460E4600240CE0295D3F
+:1019F0000748FFF71BFD00BF80210548FFF7ACFC3F
+:101A00000028F9D0601C84B2B442F0DB70BD000045
+:101A10000038014010B5044600F02EF81048206050
+:101A2000204600F021F8A0620E48FFF77DFA00285A
+:101A300001D0012010BD2C2221460A48FFF7AEFA42
+:101A4000002801D00120F5E72C2206492046FEF7A8
+:101A5000A6FB002801D00120ECE70020EAE7000007
+:101A600011C011CA0040000110B5044628212046CB
+:101A700000F0D8F810BD000010B505480078002827
+:101A800004D1FFF76FFA01200149087010BD000072
+:101A90004D40002070B50446204600F0B1F8002803
+:101AA00001D015A000E016A005462A461A491BA041
+:101AB00000F040F920A0216800F03CF925A0616801
+:101AC00000F038F929A02369E268A16800F032F932
+:101AD00032A0616900F02EF936A0236AE269A1699B
+:101AE00000F028F92DA0616A00F024F93DA0A16A58
+:101AF00000F020F970BD000076616C6964000000A0
+:101B0000494E56414C49442028626164206D61670A
+:101B100069632F637263290000400001626F6F7474
+:101B200073657474696E6720402030782530386C96
+:101B3000583A2025730D0A0020206D6167696320E3
+:101B40002020202020203D2030782530386C580D72
+:101B50000A00000020206163746976655F62616E2F
+:101B60006B203D20256C750D0A000000202062616D
+:101B70006E6B313A20616464723D30782530386C88
+:101B8000582073697A653D256C75206372633D301A
+:101B9000782530386C580D0A0000000020202020E5
+:101BA00020202020207665723D30782530386C5812
+:101BB0000D0A0000202062616E6B323A206164647D
+:101BC000723D30782530386C582073697A653D2530
+:101BD0006C75206372633D30782530386C580D0A7F
+:101BE0000000000020206372633332202020202078
+:101BF00020203D2030782530386C580D0A00000038
+:101C000010B5044606492068884207D12046FFF7F0
+:101C10002BFFA16A884201D1012010BD0020FCE702
+:101C200011C011CA30B502460B460021C94312E06B
+:101C30001078521C414000240BE04808CD07ED0FFE
+:101C4000002D01D0074D00E0002568400146601CD2
+:101C5000C4B2082CF1DB18465B1E0028E8D1C8434B
+:101C600030BD00002083B8EDF0B589B007460026EE
+:101C70003C4621E000E0641C20782028FBD020783E
+:101C80000928F8D02078002800D11AE03046761CC8
+:101C9000800001A90C5000E0641C2078002805D0C9
+:101CA0002078202802D020780928F5D12078002833
+:101CB00002D000202070641C2078002801D0082E5B
+:101CC000D8DB00BF002E02D1002009B0F0BD0025F6
+:101CD00013E00C226A430D4B99580198FEF751FA14
+:101CE000002809D10C2068430849401801A98268DE
+:101CF000304690470020E8E76D1C092DE9D304A089
+:101D0000019900F017F80120DFE70000A82A000180
+:101D1000756E6B6E6F776E20636F6D6D616E643A7A
+:101D20002025732028747279202768656C70272914
+:101D30000D0A00000FB4F0B589B0644C0FA80890EC
+:101D4000B0E00E98007807900E98401C0E9007980F
+:101D5000252803D007982070641CA3E0002006907B
+:101D6000202605900E9800782D2804D10120069099
+:101D70000E98401C0E900E980078302803D1302623
+:101D80000E98401C0E900BE00E9800780E99491C9E
+:101D90000E91014630390A220598504308180590E3
+:101DA0000E980078302803DB0E9800783928EBDD98
+:101DB0000E9800786C2802D10E98401C0E900E9858
+:101DC0000578002D02D00E98401C0E90642D21D075
+:101DD00006DC252D58D0582D45D0632D58D112E062
+:101DE000732D04D0752D2CD0782D51D13AE02020C0
+:101DF0000090089802C808902046069B059A00F0BB
+:101E000009FD04464CE008980178001D08902170F7
+:101E1000641C45E0089880C80890FB0F002F01DA89
+:101E2000784200E038460A2202A9019000F019FD2C
+:101E3000009602A92046069B059A00F0EBFC04469A
+:101E40002EE0089901C900230A22089102A900F096
+:101E500008FD009602A92046069B059A00F0DAFCD0
+:101E600004461DE000BF089901C900231022089113
+:101E700002A900F0F6FC009602A92046069B059AEE
+:101E800000F0C8FC04460BE025202070641C07E02D
+:101E900025202070641C002D01D02570641C00BF1B
+:101EA00000BF00BF0E980078002804D007485430C7
+:101EB000844200D245E7002008902070034800F0DB
+:101EC00007F809B0F0BC08BC04B01847944C0020D7
+:101ED00070B504462046FEF74DF985B229462046E6
+:101EE000FFF780FD70BD000001460A684B68094895
+:101EF00082420DD3084882420AD8084608308342FD
+:101F000006D3072080030818834201D201207047BE
+:101F10000020FCE70140002000C000200446012012
+:101F2000C007204305490863206880F3088800BF84
+:101F300062B66068804700BFFEE7000000700040A6
+:101F40001CB52F4C2F480190002700262E492068F1
+:101F500088421CD128212046FFF764FEA16A8842EE
+:101F600015D16168022902D12146183101E02146CC
+:101F7000083108460127234A0168914206D34122CD
+:101F800092040168914201D20168019100BFFFF7FC
+:101F900075FC1EA000F00FFCFFF75CFC05460FE08F
+:101FA0006846FFF7F3FC002809D0684600780D2842
+:101FB00003D0684600780A2801D1012607E000BF57
+:101FC000FFF748FC401B7D2109018842E8D300BF90
+:101FD000002E0AD1002F08D10A48FFF785FF0028FC
+:101FE00003D1012619A000F0E6FB002E04D024A0A6
+:101FF00000F0E1FBFFF77EFB0198FFF78FFF000089
+:10200000004000010080000111C011CA0D0A5B628E
+:102010006F6F745D2043414949432D424F4F542017
+:1020200056312E30312E3030202D20456E746572A1
+:102030002077697468696E2032733A20646F776E16
+:102040006C6F6164206D6F64650D0A005B626F6F79
+:10205000745D206E6F2076616C6964206170702001
+:10206000696D6167652C20666F7263656420646FBB
+:10207000776E6C6F6164206D6F64650D0A000000FF
+:102080005B626F6F745D20444F574E4C4F4144204C
+:102090004D4F444520286F74612F636C69206F7623
+:1020A000657220554152542C202768656C7027209A
+:1020B000666F7220636F6D6D616E6473290D0A0027
+:1020C00030B502460F4817E01578521C2C026040CC
+:1020D00000230EE00124E4030440002C04D044005B
+:1020E000094D6C40A4B201E04404240C20465C1C61
+:1020F000E3B2082BEED300BF0B464C1EA1B2002B5F
+:10210000E2D130BDFFFF00002110000010B50446F1
+:1021100011E00C4909680C4A12688818FEF704FFA0
+:10212000002801D0052010BD0748006801210903DF
+:1021300040180549086004480068A042E9D300201F
+:10214000F1E70000144000202C400020F7B586B0D5
+:102150000C4615460C2D09D0102D07D00023012266
+:102160001021069800F05EFA09B0F0BD204600F09C
+:102170004DFA0646201D00F049FA05902046083029
+:1021800000F044FA0490102D04D120460C3000F0E9
+:102190003DFA00E00020039036480078002807D080
+:1021A0003548022210210368069800F03BFADBE76D
+:1021B000324F33493868884208D128213846FFF722
+:1021C00031FDB96A884201D1012000E00020019070
+:1021D0000198002804D07868012801D1294800E03E
+:1021E00029480290042E03D307208003864206D993
+:1021F000002303221021069800F014FAB4E72348C4
+:102200000078002804D1FEF7ADFE01201F490870B8
+:102210000120184908701E49029808601D48066090
+:102220001D49059808601D4904980860002012495E
+:1022300008601B4908601B4908601B490860039837
+:10224000C007C00F002806D0184800681849884207
+:1022500001D1012000E00020164908700020164935
+:10226000087000231A461021069800F0DBF900BF21
+:102270007AE70000104000202440002000400001C8
+:1022800011C011CA00400201008000013840002046
+:1022900014400020184000201C4000202040002056
+:1022A000284000202C4000203440002040400020E6
+:1022B000A12600014440002045400020F7B582B02F
+:1022C00061480078002807D10023022211210298DA
+:1022D00000F0A8F905B0F0BD0498042807D25B48C7
+:1022E000012211210368029800F09CF9F2E703989B
+:1022F00000F08CF901900398061D0498041F0094C7
+:10230000524901980968884212D051480078002843
+:1023100003D050480078002809D14C4802221121EE
+:102320000368029800F07EF901204A490870D1E75D
+:1023300046480068001948490968884207D9434857
+:10234000032211210368029800F06CF9C2E73F48AC
+:10235000006800193D49086008460068FFF7D6FE8E
+:102360000546002D21D13D48006800281DD00AE017
+:1023700031783A4802680068401C384B1860384889
+:102380008154761C641E35480068042801D2002C54
+:10239000EED132480068042807D10421304800F00B
+:1023A00019F9054600202D490860002D0BD1042C99
+:1023B00009D3A708BF003946304600F00BF905469F
+:1023C000F619E41B00BF002D08D1002C06D02246D0
+:1023D00031462348FDF7AAFE20480460002D09D0AD
+:1023E0001A482A4611210368029800F01BF9FFF7EA
+:1023F0003BF86FE70020174908701548007800285F
+:1024000019D0124801680098081A000B00030F4900
+:102410000968090B0903884205D10C4800680E4978
+:102420000968884206D109480022112103680298F0
+:1024300000F0F8F84EE705480022112103680298E1
+:1024400000F0F0F800BF45E71040002024400020D5
+:102450004440002045400020184000203440002027
+:1024600030400020F7B50E4650480078002806D1CD
+:10247000002302221221009800F0D4F8FEBD029839
+:10248000042807D04A48012212210368009800F06E
+:10249000C9F8F3E7304600F0B9F80546444800684B
+:1024A00044490968884207D0414802221221036842
+:1024B000009800F0B7F8E1E73F480068002820D016
+:1024C00008E0FF213C4802680068401C3A4B186055
+:1024D0003A488154384800680428F2D30421374828
+:1024E00000F078F8002809D031480522122103684D
+:1024F000009800F097F8FEF7B7FFBFE700202E49DD
+:1025000008602C4801682E480068FFF78BFB0446E2
+:10251000AC4203D12B480068844209D024480422ED
+:1025200012210368009800F07DF8FEF79DFFA5E7F3
+:1025300023480068001D00F069F80746204800683D
+:102540000830874206D31E4800681A4909684018B7
+:10255000B84209D81648062212210368009800F0F4
+:1025600061F8FEF781FF89E700F0A8F8002809D09C
+:102570000F48052212210368009800F053F8FEF777
+:1025800073FF7BE70020104908700A4800221221DF
+:102590000368009800F046F8FFF75CF90B49086003
+:1025A00001200B49087000BF68E7000010400020C0
+:1025B00024400020184000203440002030400020FB
+:1025C000144000201C400020394000203C400020E6
+:1025D0003A40002070B505460C460A4909680A4A87
+:1025E0001268881822462946FEF7D8FC002801D038
+:1025F000052070BD044800680019034908600020E8
+:10260000F7E7000014400020284000200146087829
+:102610004A78120210438A7812041043CA781206CC
+:1026200010437047FFB587B005460E461C46684606
+:1026300006750999417584752004010E6846C175B7
+:102640002002010E68460176200E6946487613483E
+:10265000006800281FD0CA21684601711F214171FE
+:1026600085710621C17100210172062205A9093078
+:10267000FDF75CFD0A2101A80130FFF721FD0746A7
+:102680006846C773391201740D2101A8034A126804
+:1026900090470BB0F0BD00BFFBE7000040400020BA
+:1026A00070B504460D4629462046FFF79BF90120E8
+:1026B0000149087070BD00003940002010B58CB091
+:1026C0002C222A4901A8FDF731FD294901988842A9
+:1026D00006D128212548FFF7A5FA0B99884203D097
+:1026E0002C2101A8FDF73BFD2148019021480068FD
+:1026F0002149884201D1012000E0022002901D48BA
+:1027000000681D49884201D103A800E007A80446DB
+:102710001848006820601948006860601848006820
+:10272000A06018480068E060282101A8FFF77AFA45
+:102730000B900E48FEF7F8FB002802D005200CB0E5
+:1027400010BD2C2201A90948FEF728FC002801D061
+:102750000520F4E72C22054901A8FDF720FD0028FB
+:1027600001D00520EBE70020E9E700000040000170
+:1027700011C011CA14400020008000011840002040
+:102780001C40002020400020F8B504460D460020E3
+:102790000090002269462046FDF70EFD064600988F
+:1027A000A04203D000980078002801D00120F8BD95
+:1027B0002E600020FBE710B5044604E02046641CB0
+:1027C0000121FFF70FF920780028F7D110BD000094
+:1027D00070B5D2B00024002500BFEFF3108006468C
+:1027E000FF21453101A8FDF7BAFC01AC0134982264
+:1027F000074901A8FDF79AFC0120FEF72EFEA0472D
+:1028000005463046FEF729FE284652B070BD00004E
+:102810000E2A0001F8B504460D4616461F46284606
+:10282000FDF7A8FC0090002F08D102E00698207068
+:10283000641C3046761E00998842F7DC03E0287855
+:1028400020706D1C641C28780028F8D102E020203C
+:102850002070641C3046761E00998842F7DC2046C2
+:10286000F8BDFFB583B007460C46002500BF3846CB
+:102870000599FDF745FC0E460A2E02D2304630304F
+:1028800001E030463730C2B22846691CCDB26946F5
+:102890000A5438460599FDF733FC0746002FE6D168
+:1028A0000698002805D02D222846691CCDB269461D
+:1028B0000A5406E0681EC0B205466946085C2070EE
+:1028C000641C002DF6D10020207007B0F0BD40BA86
+:1028D0007047C0BA70470138FDD170470000F7B5A6
+:1028E0000325AD06286A82B016460C464008400013
+:1028F0002862286A022108432862286A8007FCD4DB
+:102900006620686001272F61A86AC005FCD5992060
+:1029100068602F61A86AC005FCD5FF209130FFF7E1
+:10292000DAFFFF230133AB626846EF60352169604F
+:102930002F61A96AC905FCD5AB62A969EF60C9B26C
+:1029400005226A602F61AA6AD205FCD5AB62AA692A
+:102950000902D2B211430180C80702D0032005B09A
+:10296000F0BDAB626869FF2108318843686168691E
+:10297000C91E084368610298000248306860082058
+:10298000A860EE602F61A86AC005FCD5FF20013069
+:10299000A8620023F61CB0080ED0B20811480068E7
+:1029A00099006054060A09194E70060C000E8E70CC
+:1029B0005B1CC8709A42F1D8FF200130A862686998
+:1029C000FF21083188436861686938436861286A73
+:1029D000800880002862286A38432862002005B0F9
+:1029E000F0BD8000000C032080064169FF22083200
+:1029F00091434161426901210A434261026A92089E
+:102A000092000262026A0A430262704700000020DC
+:102A100003218906096A49084900032292061162C6
+:102A20001146096A0222114303229206116200BF75
+:102A300003218906096A022211400229F8D0D10136
+:102A40000322920691620321D1609F2151600121EE
+:102A5000116100BF03218906896AFF2201321140FA
+:102A60009142F7D103229206916211468869496921
+:102A7000FF220832914303229206516111464969AF
+:102A8000012211430322920651611146096A890805
+:102A9000890011621146096A01221143032292063C
+:102AA0001162704700000000E0300001AC3000010E
+:102AB000F50900019030000180300001B10B0001E8
+:102AC000A4300001AC2F000115090001E83000011D
+:102AD00054300001FD050001203100013C2F0001B0
+:102AE0001D060001603100012831000125030001AD
+:102AF00050300001742F0001A90A000118310001B3
+:102B0000E42F0001C50A000198300001F0300001F7
+:102B1000010B00010000000001020304000001029B
+:102B20000138FDD170470000F0B40324A406236AE5
+:102B30005B085B002362236A02252B432362236A1E
+:102B40009B07FCD4FF230133A3626569DE1DB543F7
+:102B5000656165691E1D3543656100026B3060600B
+:102B60000820A060E26001262661A06AC005FCD5AD
+:102B7000A3620023D21C90080ED095080F4800686D
+:102B80009A008854070A52185770070C000E977065
+:102B90005B1CD0709D42F1D86069FF2108318843E9
+:102BA0006061606930436061206A80088000206253
+:102BB000206A30432062F0BC002070478000000C87
+:102BC000F8B5064601200025C004864201D905203B
+:102BD000F8BD0324A406206A400840002062206A51
+:102BE000022108432062206A8007FCD4FF270137B6
+:102BF000A76200F0BBF8002801D0032515E00620ED
+:102C0000606001212161A06AC005FCD5A762300285
+:102C1000203060602161A06AC005FCD5A7620C4825
+:102C200000F0C8F8002800D102256069FF210831B2
+:102C3000884360616069012108436061206A8008FF
+:102C400080002062206A084320622846F8BD000008
+:102C5000E6960100F7B506460120C00482B015468D
+:102C6000864202D9052005B0F0BD03208006016A26
+:102C7000490849000162016A022211430162016AA6
+:102C80008907FCD4FF2101318162F2B28C1AA5427E
+:102C900000D8ACB20398009000F068F8002840D14A
+:102CA00006214806416001210161816AC905FCD500
+:102CB000FF2101310320800681624169FF22083231
+:102CC0009143416141690422114341613102323132
+:102CD0004160C4600022002C16D9009887183B7808
+:102CE000F87819467B7800061B021943BB781B0451
+:102CF000194301430802F978000A090608431949F3
+:102D00000860121DA242E8D3012103208006016160
+:102D1000816AC905FCD5FF2101318162124800F0AA
+:102D200049F8A54209D00398361900192D1BFF2434
+:102D300001340390A542ADD8ABE70320800641697A
+:102D4000FF220832914341614169012211434161EF
+:102D5000016A890889000162016A11430162002049
+:102D600005B0F0BD8000000C1A06000038B4012543
+:102D7000032080066A46C560352141600561816A8D
+:102D8000C905FCD5FF24013484628169C560CBB2DA
+:102D9000052141600561816AC905FCD584628069AD
+:102DA0001902C0B2014388B21180C00700D00120CF
+:102DB00038BC7047F8B400210125032292066B4607
+:102DC000D560352454601561946AE405FCD5FF276D
+:102DD000013797629469D560E4B2052656601561A3
+:102DE000966AF605FCD5976296692402F6B23443DA
+:102DF0001C80E30722D0814202D9F8BC0020704732
+:102E0000032292066B46D560352454601561491C37
+:102E1000946AE405FCD597629469D560E4B205260E
+:102E200056601561966AF605FCD597629269240290
+:102E3000D2B21443A2B21C80D207DCD1F8BC01206C
+:102E40007047000000404040404040404040414109
+:102E5000414141404040404040404040404040406F
+:102E60004040404040050202020202020202020209
+:102E70000202020202202020202020202020200206
+:102E80000202020202029090909090901010101096
+:102E90001010101010101010101010101010101032
+:102EA00002020202020288888888888808080808C6
+:102EB0000808080808080808080808080808080892
+:102EC0000202020240000000452E00015B6F7461A7
+:102ED0005D2062696E617279206D6F6465204F4E6E
+:102EE000202D2073656E642030784341204F54417B
+:102EF000206672616D6573206E6F770D0A28626CB3
+:102F0000655F70726F746F636F6C2E6D6420736594
+:102F10006374696F6E20362E363B204F54415F41FB
+:102F2000424F5254206F722033732069646C6520C5
+:102F30006578697473290D0A000000006273736577
+:102F400074203C6669656C643E203C76616C3E3A58
+:102F500020777269746520626F6F74736574746929
+:102F60006E67206669656C642028636172656675AA
+:102F70006C2129006F74613A205541525420656ECE
+:102F800074657273204F54412062696E61727920BA
+:102F90006672616D65206D6F6465202873656520BC
+:102FA00068656C70206F74612900000073686F772A
+:102FB00020626F6F7420696E666F202B20637572BC
+:102FC0002062616E6B20284F5441207772697465CE
+:102FD0007320746865204F544845522062616E6BBF
+:102FE0002900000072657365743A20737973746503
+:102FF0006D20726573657420287265626F6F742925
+:10300000000000000D0A434C49207265616479207C
+:1030100028626F6F746C6F6164657220646F776E85
+:103020006C6F6164206D6F6465292E205479706522
+:10303000202768656C702720666F7220636F6D6D46
+:10304000616E64732E0D0A63616969632D3E000031
+:103050006F746100627364756D703A2073686F7786
+:1030600020626F6F7473657474696E672072656334
+:103070006F7264202B2063726320636865636B004A
+:1030800073686F7720626F6F746C6F616465722014
+:1030900076657273696F6E0075617274696E666FC2
+:1030A00000000000646576696E666F0068656C708C
+:1030B000205B636D645D3A206C69737420636F6D8F
+:1030C0006D616E6473202F2073686F77206F6E655B
+:1030D00020636F6D6D616E6427732068656C70008E
+:1030E00068656C7000000000627364756D700000AC
+:1030F00075617274696E666F3A2073686F772055D8
+:1031000053415254312070696E732F626175642F80
+:10311000666F726D61740000726573657400000003
+:1031200062737365740000006170707377205B31A7
+:103130007C325D3A2073776974636820626F6F74C4
+:103140002062616E6B202863726320766572696607
+:1031500069656429202B207265626F6F740000001E
+:10316000617070737700000061707073773A20624D
+:10317000616E6B256C7520696D6167652063726394
+:10318000206D69736D6174636820287265636F7266
+:10319000642030782530386C582C20616374756158
+:1031A0006C2030782530386C58290D0A000000005A
+:1031B0002020202020202020206231616464727C45
+:1031C0006232616464727C623173697A657C6232F6
+:1031D00073697A657C62316372637C6232637263A5
+:1031E0007C62317665727C6232766572203C6865FD
+:1031F000787C6465633E0D0A000000001C3200010B
+:1032000000400020600000003C1400017C320001FE
+:1032100060400020F81900004C1400010090D00319
+:10322000000000000000000000000000000000009E
+:10323000000000000000000000000000000000008E
+:10324000000000000000000000000000000000007E
+:10325000000000000000000000000000000000006E
+:10326000000000000000000000000000000000005E
+:0C32700000000000000000000000000052
:1040000011C011CA010000000080000124DB000083
-:10401000192ACFC71B0001000000000000000000AB
-:0C40200000000000000000007EE8E73314
+:104010006EDA83231C000100000000000000000095
+:0C40200000000000000000001AC4DC25B5
:10800000E8BD002069810001718100015DB10001BE
:108010000000000000000000000000000000000060
:10802000000000000000000000000000C5B50001D5
@@ -780,8 +1463,8 @@
:10A8A000854203D134A003F069FC03E029463AA0B5
:10A8B00003F0FEFB09F00EFB7D21C900FDF762FCF1
:10A8C000014639A003F0F4FB08F00CFF01463AA062
-:10A8D00003F0EEFBF8BD00001B00010056312E30E6
-:10A8E000302E3237000000006669726D7761726544
+:10A8D00003F0EEFBF8BD00001C00010056312E30E5
+:10A8E000302E3238000000006669726D7761726543
:10A8F0003A202573202830782530386C58290D0AE5
:10A90000000000006375722062616E6B3A20415056
:10A910005025750D0A000000FF7F00006368697014
@@ -867,7 +1550,7 @@
:10AE10002C20727820717565756520666C75736875
:10AE200065640D0A0000000010B506A108A003F03B
:10AE30003FF90DA003F0A2F91948016819A003F029
-:10AE400037F910BD56312E30302E32370000000059
+:10AE400037F910BD56312E30302E32380000000058
:10AE50006669726D776172652076657273696F6E6F
:10AE60003A2025730D0A00006D636D2D6464632D17
:10AE7000626C653A20424C452872647473732920D1
@@ -2103,7 +2786,7 @@
:10FB500029F809B0F0BD13E0FDF76EFA10498842AC
:10FB600001D1022000E001206946087401200090C4
:10FB700004AB22460799069800F014F809B0F0BDCE
-:10FB8000079809B0F0BD0000FFFF00001B00010056
+:10FB8000079809B0F0BD0000FFFF00001C00010055
:10FB900000080240A4470020FF7F00000000204131
:10FBA0000040020130B4029C42540546491C88B210
:10FBB0002C54401C002180B2002C07D95A5C2A54D6
@@ -2165,7 +2848,7 @@
:10FF30003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3DF1
:10FF40003D0A0000206D636D2D6464632D626C6555
:10FF50003A20424C45202B204672656552544F533F
-:10FF6000202B20434C490A0056312E30302E323798
+:10FF6000202B20434C490A0056312E30302E323897
:10FF700000000000204669726D7761726520766529
:10FF80007273696F6E2025730A0000000040002024
:10FF90002053797374656D436F7265436C6F636B47
diff --git a/tools/out/mothercup_ble_prod_ota.bin b/tools/out/mothercup_ble_prod_ota.bin
index c1d59c0..ad98bad 100644
Binary files a/tools/out/mothercup_ble_prod_ota.bin and b/tools/out/mothercup_ble_prod_ota.bin differ
diff --git a/tools/out/mothercup_ble_prod_ota.json b/tools/out/mothercup_ble_prod_ota.json
index 0348e33..aa1208b 100644
--- a/tools/out/mothercup_ble_prod_ota.json
+++ b/tools/out/mothercup_ble_prod_ota.json
@@ -2,6 +2,6 @@
"file": "mothercup_ble_prod_ota.bin",
"target_bank": 1,
"size": 56100,
- "crc32": "0xC7CF2A19",
- "version": 65563
+ "crc32": "0x2383DA6E",
+ "version": 65564
}
\ No newline at end of file
diff --git a/tools/out/mothercup_ble_prod_ota_app2.bin b/tools/out/mothercup_ble_prod_ota_app2.bin
index bab7a76..293276a 100644
Binary files a/tools/out/mothercup_ble_prod_ota_app2.bin and b/tools/out/mothercup_ble_prod_ota_app2.bin differ
diff --git a/tools/out/mothercup_ble_prod_ota_app2.json b/tools/out/mothercup_ble_prod_ota_app2.json
index cfd8ec0..33ee9f8 100644
--- a/tools/out/mothercup_ble_prod_ota_app2.json
+++ b/tools/out/mothercup_ble_prod_ota_app2.json
@@ -2,6 +2,6 @@
"file": "mothercup_ble_prod_ota_app2.bin",
"target_bank": 2,
"size": 56400,
- "crc32": "0x0198204E",
- "version": 65563
+ "crc32": "0xE5D4D039",
+ "version": 65564
}
\ No newline at end of file