From 8b1744744ed8df1d6c5437010ec2b9dc1facc935 Mon Sep 17 00:00:00 2001 From: "evan.liu" <583229071@qq.com> Date: Sun, 6 Sep 2026 08:58:01 +0800 Subject: [PATCH] =?UTF-8?q?boot=20V1.01.04:=20download=20CLI=20=E7=A7=BB?= =?UTF-8?q?=E6=A4=8D=20UP/DOWN=20=E5=8E=86=E5=8F=B2=E5=AF=BC=E8=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Boot/src/boot_cli.c: 命令历史环形缓冲(8条) + ESC [ A/B 箭头历史导航, 回车入栈/重画提示符+整行, shownLen 同步维护 - help 提示串更新为 'keys: TAB = complete, UP/DOWN = history' (与 APP 一致) - Boot/src/boot_version.h: V1.01.03 -> V1.01.04 - docs/开发日志.md: 新增 §56 --- Boot/MDK-ARM/Listings/caiic_boot.map | 714 +++++++------ Boot/MDK-ARM/bin/caiic_boot.bin | Bin 13592 -> 13972 bytes Boot/MDK-ARM/build.log | 16 +- Boot/src/boot_cli.c | 118 ++- Boot/src/boot_version.h | 2 +- docs/开发日志.md | 18 + tools/out/mothercup_ble_prod.bin | Bin 88868 -> 88868 bytes tools/out/mothercup_ble_prod.hex | 1462 +++++++++++++------------- 8 files changed, 1246 insertions(+), 1084 deletions(-) diff --git a/Boot/MDK-ARM/Listings/caiic_boot.map b/Boot/MDK-ARM/Listings/caiic_boot.map index dc2aafe..ddb53dc 100644 --- a/Boot/MDK-ARM/Listings/caiic_boot.map +++ b/Boot/MDK-ARM/Listings/caiic_boot.map @@ -93,6 +93,11 @@ Section Cross References 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_history_get) for cli_history_get + boot_cli.o(i.boot_cli_run) refers to strcpy.o(.text) for strcpy + boot_cli.o(i.boot_cli_run) refers to boot_cli.o(i.boot_cli_redraw) for boot_cli_redraw + boot_cli.o(i.boot_cli_run) refers to strlen.o(.text) for strlen + boot_cli.o(i.boot_cli_run) refers to boot_cli.o(i.cli_history_add) for cli_history_add 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_cli.o(i.boot_cli_tab_complete) for boot_cli_tab_complete boot_cli.o(i.boot_cli_run) refers to boot_usart.o(i.boot_usart_write) for boot_usart_write @@ -110,6 +115,12 @@ Section Cross References 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_history_add) refers to strcmp.o(.text) for strcmp + boot_cli.o(i.cli_history_add) refers to strcpy.o(.text) for strcpy + boot_cli.o(i.cli_history_add) refers to boot_cli.o(.data) for s_histCount + boot_cli.o(i.cli_history_add) refers to boot_cli.o(.bss) for s_history + boot_cli.o(i.cli_history_get) refers to boot_cli.o(.data) for s_histHead + boot_cli.o(i.cli_history_get) refers to boot_cli.o(.bss) for s_history 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 @@ -387,38 +398,38 @@ Image Symbol Table Symbol Name Value Ov Type Size Object(Section) - ../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 isgraph_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 isspace_o.o ABSOLUTE + ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isupper_o.o ABSOLUTE + ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isprint_o.o ABSOLUTE + ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 islower_o.o ABSOLUTE ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isxdigit_o.o ABSOLUTE + ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isdigit_o.o ABSOLUTE + ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 iscntrl_o.o ABSOLUTE + ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isblank_o.o ABSOLUTE + ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isalpha_o.o ABSOLUTE + ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isalnum_o.o ABSOLUTE + ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 ctype_o.o ABSOLUTE + ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isspace_o.o ABSOLUTE ../clib/microlib/division.c 0x00000000 Number 0 uidiv.o ABSOLUTE ../clib/microlib/errno.c 0x00000000 Number 0 errno.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry5.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.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 entry5.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.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 entry8b.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.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/string/memchr.c 0x00000000 Number 0 memchr.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/memcpy.c 0x00000000 Number 0 memcpyb.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/strcpy.c 0x00000000 Number 0 strcpy.o ABSOLUTE @@ -488,134 +499,140 @@ Image Symbol Table CmdDevInfo 0x01000959 Thumb Code 90 boot_cli.o(i.CmdDevInfo) i.CmdHelp 0x01000a38 Section 0 boot_cli.o(i.CmdHelp) CmdHelp 0x01000a39 Thumb Code 120 boot_cli.o(i.CmdHelp) - i.CmdOta 0x01000b08 Section 0 boot_cli.o(i.CmdOta) - CmdOta 0x01000b09 Thumb Code 20 boot_cli.o(i.CmdOta) - i.CmdReset 0x01000b24 Section 0 boot_cli.o(i.CmdReset) - CmdReset 0x01000b25 Thumb Code 34 boot_cli.o(i.CmdReset) - i.CmdUartInfo 0x01000b60 Section 0 boot_cli.o(i.CmdUartInfo) - CmdUartInfo 0x01000b61 Thumb Code 26 boot_cli.o(i.CmdUartInfo) - i.CmdVersion 0x01000c10 Section 0 boot_cli.o(i.CmdVersion) - CmdVersion 0x01000c11 Thumb Code 26 boot_cli.o(i.CmdVersion) - i.DMA_DeInit 0x01000c84 Section 0 n32wb03x_dma.o(i.DMA_DeInit) - i.DMA_EnableChannel 0x01000d24 Section 0 n32wb03x_dma.o(i.DMA_EnableChannel) - i.DMA_GetCurrDataCounter 0x01000d40 Section 0 n32wb03x_dma.o(i.DMA_GetCurrDataCounter) - i.DMA_Init 0x01000d48 Section 0 n32wb03x_dma.o(i.DMA_Init) - i.DMA_RequestRemap 0x01000d88 Section 0 n32wb03x_dma.o(i.DMA_RequestRemap) - i.GPIO_InitPeripheral 0x01000d98 Section 0 n32wb03x_gpio.o(i.GPIO_InitPeripheral) - i.GPIO_InitStruct 0x01000ea0 Section 0 n32wb03x_gpio.o(i.GPIO_InitStruct) - i.GPIO_ReadInputDataBit 0x01000ebc Section 0 n32wb03x_gpio.o(i.GPIO_ReadInputDataBit) - i.OTPTrim_Read 0x01000ed0 Section 0 system_n32wb03x.o(i.OTPTrim_Read) - i.Qflash_Erase_Sector 0x01000f9c Section 0 n32wb03x_qflash.o(i.Qflash_Erase_Sector) - i.Qflash_Init 0x01000fd8 Section 0 n32wb03x_qflash.o(i.Qflash_Init) - i.Qflash_Write 0x01001010 Section 0 n32wb03x_qflash.o(i.Qflash_Write) - i.RCC_EnableAHBPeriphClk 0x01001054 Section 0 n32wb03x_rcc.o(i.RCC_EnableAHBPeriphClk) - i.RCC_EnableAPB2PeriphClk 0x01001074 Section 0 n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphClk) - i.RCC_GetClocksFreqValue 0x01001094 Section 0 n32wb03x_rcc.o(i.RCC_GetClocksFreqValue) - i.RCC_HsiCalib 0x01001138 Section 0 system_n32wb03x.o(i.RCC_HsiCalib) - RCC_HsiCalib 0x01001139 Thumb Code 296 system_n32wb03x.o(i.RCC_HsiCalib) - i.SystemInit 0x01001268 Section 0 system_n32wb03x.o(i.SystemInit) - i.SystemTrimValueRead 0x01001384 Section 0 system_n32wb03x.o(i.SystemTrimValueRead) - i.USART_Enable 0x01001398 Section 0 n32wb03x_usart.o(i.USART_Enable) - i.USART_EnableDMA 0x010013b8 Section 0 n32wb03x_usart.o(i.USART_EnableDMA) - i.USART_GetFlagStatus 0x010013cc Section 0 n32wb03x_usart.o(i.USART_GetFlagStatus) - i.USART_Init 0x010013ec Section 0 n32wb03x_usart.o(i.USART_Init) - i.USART_SendData 0x010014a0 Section 0 n32wb03x_usart.o(i.USART_SendData) - i.__aeabi_errno_addr 0x010014a8 Section 0 errno.o(i.__aeabi_errno_addr) - i.__scatterload_copy 0x010014b0 Section 14 handlers.o(i.__scatterload_copy) - i.__scatterload_null 0x010014be Section 2 handlers.o(i.__scatterload_null) - i.__scatterload_zeroinit 0x010014c0 Section 14 handlers.o(i.__scatterload_zeroinit) - i.__set_PRIMASK 0x010014ce Section 0 system_n32wb03x.o(i.__set_PRIMASK) - __set_PRIMASK 0x010014cf Thumb Code 6 system_n32wb03x.o(i.__set_PRIMASK) - i.__set_PRIMASK 0x010014d4 Section 0 n32wb03x_qflash.o(i.__set_PRIMASK) - __set_PRIMASK 0x010014d5 Thumb Code 6 n32wb03x_qflash.o(i.__set_PRIMASK) - i.app_ota_abort 0x010014dc Section 0 app_ota.o(i.app_ota_abort) - i.app_ota_chan_idle 0x01001518 Section 0 app_ota.o(i.app_ota_chan_idle) - i.app_ota_chan_rx 0x0100152c Section 0 app_ota.o(i.app_ota_chan_rx) - i.app_ota_chan_rx_uart 0x0100166c Section 0 app_ota.o(i.app_ota_chan_rx_uart) - i.app_ota_handle_frame 0x01001690 Section 0 app_ota.o(i.app_ota_handle_frame) - i.app_ota_reset_poll 0x0100170c Section 0 app_ota.o(i.app_ota_reset_poll) - i.boot_cli_redraw 0x01001768 Section 0 boot_cli.o(i.boot_cli_redraw) - boot_cli_redraw 0x01001769 Thumb Code 60 boot_cli.o(i.boot_cli_redraw) - i.boot_cli_run 0x010017b4 Section 0 boot_cli.o(i.boot_cli_run) - i.boot_cli_tab_complete 0x01001910 Section 0 boot_cli.o(i.boot_cli_tab_complete) - boot_cli_tab_complete 0x01001911 Thumb Code 306 boot_cli.o(i.boot_cli_tab_complete) - i.boot_delay_ms 0x01001a54 Section 0 boot_usart.o(i.boot_delay_ms) - i.boot_dl_strap_active 0x01001a6c Section 0 main.o(i.boot_dl_strap_active) - boot_dl_strap_active 0x01001a6d Thumb Code 58 main.o(i.boot_dl_strap_active) - i.boot_millis 0x01001aac Section 0 boot_usart.o(i.boot_millis) - i.boot_usart_init 0x01001ad4 Section 0 boot_usart.o(i.boot_usart_init) - i.boot_usart_read 0x01001be4 Section 0 boot_usart.o(i.boot_usart_read) - i.boot_usart_rx_head 0x01001c24 Section 0 boot_usart.o(i.boot_usart_rx_head) - boot_usart_rx_head 0x01001c25 Thumb Code 18 boot_usart.o(i.boot_usart_rx_head) - i.boot_usart_write 0x01001c3c Section 0 boot_usart.o(i.boot_usart_write) - i.bootset_commit 0x01001c6c Section 0 app_bootset.o(i.bootset_commit) - bootset_commit 0x01001c6d Thumb Code 74 app_bootset.o(i.bootset_commit) - i.bootset_crc 0x01001cc0 Section 0 app_bootset.o(i.bootset_crc) - bootset_crc 0x01001cc1 Thumb Code 14 app_bootset.o(i.bootset_crc) - i.bootset_ensure_qflash 0x01001cd0 Section 0 app_bootset.o(i.bootset_ensure_qflash) - bootset_ensure_qflash 0x01001cd1 Thumb Code 22 app_bootset.o(i.bootset_ensure_qflash) - i.bootset_print 0x01001cec Section 0 app_bootset.o(i.bootset_print) - bootset_print 0x01001ced Thumb Code 98 app_bootset.o(i.bootset_print) - i.bootset_valid 0x01001e58 Section 0 app_bootset.o(i.bootset_valid) - bootset_valid 0x01001e59 Thumb Code 32 app_bootset.o(i.bootset_valid) - i.caiic_crc32 0x01001e7c Section 0 boot_crc32.o(i.caiic_crc32) - i.cli_exec_line 0x01001ec0 Section 0 boot_cli.o(i.cli_exec_line) - cli_exec_line 0x01001ec1 Thumb Code 162 boot_cli.o(i.cli_exec_line) - i.cli_printf 0x01001f8c Section 0 boot_cli.o(i.cli_printf) - i.cli_write 0x01002128 Section 0 boot_cli.o(i.cli_write) - i.image_sane 0x01002140 Section 0 main.o(i.image_sane) - image_sane 0x01002141 Thumb Code 44 main.o(i.image_sane) - i.jump_to_app 0x01002174 Section 0 main.o(i.jump_to_app) - jump_to_app 0x01002175 Thumb Code 30 main.o(i.jump_to_app) - i.main 0x01002198 Section 0 main.o(i.main) - i.ota_crc16 0x0100235c Section 0 app_ota.o(i.ota_crc16) - ota_crc16 0x0100235d Thumb Code 68 app_ota.o(i.ota_crc16) - i.ota_erase_up_to 0x010023a8 Section 0 app_ota.o(i.ota_erase_up_to) - ota_erase_up_to 0x010023a9 Thumb Code 54 app_ota.o(i.ota_erase_up_to) - i.ota_on_begin 0x010023e8 Section 0 app_ota.o(i.ota_on_begin) - ota_on_begin 0x010023e9 Thumb Code 294 app_ota.o(i.ota_on_begin) - i.ota_on_data 0x01002558 Section 0 app_ota.o(i.ota_on_data) - ota_on_data 0x01002559 Thumb Code 396 app_ota.o(i.ota_on_data) - i.ota_on_end 0x01002700 Section 0 app_ota.o(i.ota_on_end) - ota_on_end 0x01002701 Thumb Code 326 app_ota.o(i.ota_on_end) - i.ota_program 0x01002870 Section 0 app_ota.o(i.ota_program) - ota_program 0x01002871 Thumb Code 46 app_ota.o(i.ota_program) - i.ota_rd32 0x010028a8 Section 0 app_ota.o(i.ota_rd32) - ota_rd32 0x010028a9 Thumb Code 24 app_ota.o(i.ota_rd32) - i.ota_respond 0x010028c0 Section 0 app_ota.o(i.ota_respond) - ota_respond 0x010028c1 Thumb Code 118 app_ota.o(i.ota_respond) - i.ota_uart_sink 0x0100293c Section 0 app_ota.o(i.ota_uart_sink) - ota_uart_sink 0x0100293d Thumb Code 22 app_ota.o(i.ota_uart_sink) - i.ota_update_bootsetting 0x01002958 Section 0 app_ota.o(i.ota_update_bootsetting) - ota_update_bootsetting 0x01002959 Thumb Code 174 app_ota.o(i.ota_update_bootsetting) - i.parse_u32 0x01002a24 Section 0 app_bootset.o(i.parse_u32) - parse_u32 0x01002a25 Thumb Code 46 app_bootset.o(i.parse_u32) - i.puts_boot 0x01002a52 Section 0 main.o(i.puts_boot) - puts_boot 0x01002a53 Thumb Code 24 main.o(i.puts_boot) - i.read_flash_ID 0x01002a6c Section 0 system_n32wb03x.o(i.read_flash_ID) - read_flash_ID 0x01002a6d Thumb Code 62 system_n32wb03x.o(i.read_flash_ID) - i.str_pad 0x01002ab0 Section 0 boot_cli.o(i.str_pad) - str_pad 0x01002ab1 Thumb Code 78 boot_cli.o(i.str_pad) - i.u32_to_str 0x01002afe Section 0 boot_cli.o(i.u32_to_str) - u32_to_str 0x01002aff Thumb Code 108 boot_cli.o(i.u32_to_str) - .constdata 0x01002b6a Section 472 system_n32wb03x.o(.constdata) - .constdata 0x01002d44 Section 108 boot_cli.o(.constdata) - s_cmds 0x01002d44 Data 108 boot_cli.o(.constdata) - .constdata 0x01002db0 Section 12 n32wb03x_rcc.o(.constdata) - s_ApbPresTable 0x01002db0 Data 8 n32wb03x_rcc.o(.constdata) - s_AhbPresTable 0x01002db8 Data 4 n32wb03x_rcc.o(.constdata) - .constdata 0x01002dbc Section 804 n32wb03x_qflash.o(.constdata) - .constdata 0x010030e0 Section 129 ctype_o.o(.constdata) - .constdata 0x01003164 Section 4 ctype_o.o(.constdata) - table 0x01003164 Data 4 ctype_o.o(.constdata) - .conststring 0x01003168 Section 666 boot_cli.o(.conststring) - .conststring 0x01003404 Section 145 app_bootset.o(.conststring) + i.CmdOta 0x01000b1c Section 0 boot_cli.o(i.CmdOta) + CmdOta 0x01000b1d Thumb Code 20 boot_cli.o(i.CmdOta) + i.CmdReset 0x01000b38 Section 0 boot_cli.o(i.CmdReset) + CmdReset 0x01000b39 Thumb Code 34 boot_cli.o(i.CmdReset) + i.CmdUartInfo 0x01000b74 Section 0 boot_cli.o(i.CmdUartInfo) + CmdUartInfo 0x01000b75 Thumb Code 26 boot_cli.o(i.CmdUartInfo) + i.CmdVersion 0x01000c24 Section 0 boot_cli.o(i.CmdVersion) + CmdVersion 0x01000c25 Thumb Code 26 boot_cli.o(i.CmdVersion) + i.DMA_DeInit 0x01000c98 Section 0 n32wb03x_dma.o(i.DMA_DeInit) + i.DMA_EnableChannel 0x01000d38 Section 0 n32wb03x_dma.o(i.DMA_EnableChannel) + i.DMA_GetCurrDataCounter 0x01000d54 Section 0 n32wb03x_dma.o(i.DMA_GetCurrDataCounter) + i.DMA_Init 0x01000d5c Section 0 n32wb03x_dma.o(i.DMA_Init) + i.DMA_RequestRemap 0x01000d9c Section 0 n32wb03x_dma.o(i.DMA_RequestRemap) + i.GPIO_InitPeripheral 0x01000dac Section 0 n32wb03x_gpio.o(i.GPIO_InitPeripheral) + i.GPIO_InitStruct 0x01000eb4 Section 0 n32wb03x_gpio.o(i.GPIO_InitStruct) + i.GPIO_ReadInputDataBit 0x01000ed0 Section 0 n32wb03x_gpio.o(i.GPIO_ReadInputDataBit) + i.OTPTrim_Read 0x01000ee4 Section 0 system_n32wb03x.o(i.OTPTrim_Read) + i.Qflash_Erase_Sector 0x01000fb0 Section 0 n32wb03x_qflash.o(i.Qflash_Erase_Sector) + i.Qflash_Init 0x01000fec Section 0 n32wb03x_qflash.o(i.Qflash_Init) + i.Qflash_Write 0x01001024 Section 0 n32wb03x_qflash.o(i.Qflash_Write) + i.RCC_EnableAHBPeriphClk 0x01001068 Section 0 n32wb03x_rcc.o(i.RCC_EnableAHBPeriphClk) + i.RCC_EnableAPB2PeriphClk 0x01001088 Section 0 n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphClk) + i.RCC_GetClocksFreqValue 0x010010a8 Section 0 n32wb03x_rcc.o(i.RCC_GetClocksFreqValue) + i.RCC_HsiCalib 0x0100114c Section 0 system_n32wb03x.o(i.RCC_HsiCalib) + RCC_HsiCalib 0x0100114d Thumb Code 296 system_n32wb03x.o(i.RCC_HsiCalib) + i.SystemInit 0x0100127c Section 0 system_n32wb03x.o(i.SystemInit) + i.SystemTrimValueRead 0x01001398 Section 0 system_n32wb03x.o(i.SystemTrimValueRead) + i.USART_Enable 0x010013ac Section 0 n32wb03x_usart.o(i.USART_Enable) + i.USART_EnableDMA 0x010013cc Section 0 n32wb03x_usart.o(i.USART_EnableDMA) + i.USART_GetFlagStatus 0x010013e0 Section 0 n32wb03x_usart.o(i.USART_GetFlagStatus) + i.USART_Init 0x01001400 Section 0 n32wb03x_usart.o(i.USART_Init) + i.USART_SendData 0x010014b4 Section 0 n32wb03x_usart.o(i.USART_SendData) + i.__aeabi_errno_addr 0x010014bc Section 0 errno.o(i.__aeabi_errno_addr) + i.__scatterload_copy 0x010014c4 Section 14 handlers.o(i.__scatterload_copy) + i.__scatterload_null 0x010014d2 Section 2 handlers.o(i.__scatterload_null) + i.__scatterload_zeroinit 0x010014d4 Section 14 handlers.o(i.__scatterload_zeroinit) + i.__set_PRIMASK 0x010014e2 Section 0 system_n32wb03x.o(i.__set_PRIMASK) + __set_PRIMASK 0x010014e3 Thumb Code 6 system_n32wb03x.o(i.__set_PRIMASK) + i.__set_PRIMASK 0x010014e8 Section 0 n32wb03x_qflash.o(i.__set_PRIMASK) + __set_PRIMASK 0x010014e9 Thumb Code 6 n32wb03x_qflash.o(i.__set_PRIMASK) + i.app_ota_abort 0x010014f0 Section 0 app_ota.o(i.app_ota_abort) + i.app_ota_chan_idle 0x0100152c Section 0 app_ota.o(i.app_ota_chan_idle) + i.app_ota_chan_rx 0x01001540 Section 0 app_ota.o(i.app_ota_chan_rx) + i.app_ota_chan_rx_uart 0x01001680 Section 0 app_ota.o(i.app_ota_chan_rx_uart) + i.app_ota_handle_frame 0x010016a4 Section 0 app_ota.o(i.app_ota_handle_frame) + i.app_ota_reset_poll 0x01001720 Section 0 app_ota.o(i.app_ota_reset_poll) + i.boot_cli_redraw 0x0100177c Section 0 boot_cli.o(i.boot_cli_redraw) + boot_cli_redraw 0x0100177d Thumb Code 60 boot_cli.o(i.boot_cli_redraw) + i.boot_cli_run 0x010017c8 Section 0 boot_cli.o(i.boot_cli_run) + i.boot_cli_tab_complete 0x010019e8 Section 0 boot_cli.o(i.boot_cli_tab_complete) + boot_cli_tab_complete 0x010019e9 Thumb Code 306 boot_cli.o(i.boot_cli_tab_complete) + i.boot_delay_ms 0x01001b2c Section 0 boot_usart.o(i.boot_delay_ms) + i.boot_dl_strap_active 0x01001b44 Section 0 main.o(i.boot_dl_strap_active) + boot_dl_strap_active 0x01001b45 Thumb Code 58 main.o(i.boot_dl_strap_active) + i.boot_millis 0x01001b84 Section 0 boot_usart.o(i.boot_millis) + i.boot_usart_init 0x01001bac Section 0 boot_usart.o(i.boot_usart_init) + i.boot_usart_read 0x01001cbc Section 0 boot_usart.o(i.boot_usart_read) + i.boot_usart_rx_head 0x01001cfc Section 0 boot_usart.o(i.boot_usart_rx_head) + boot_usart_rx_head 0x01001cfd Thumb Code 18 boot_usart.o(i.boot_usart_rx_head) + i.boot_usart_write 0x01001d14 Section 0 boot_usart.o(i.boot_usart_write) + i.bootset_commit 0x01001d44 Section 0 app_bootset.o(i.bootset_commit) + bootset_commit 0x01001d45 Thumb Code 74 app_bootset.o(i.bootset_commit) + i.bootset_crc 0x01001d98 Section 0 app_bootset.o(i.bootset_crc) + bootset_crc 0x01001d99 Thumb Code 14 app_bootset.o(i.bootset_crc) + i.bootset_ensure_qflash 0x01001da8 Section 0 app_bootset.o(i.bootset_ensure_qflash) + bootset_ensure_qflash 0x01001da9 Thumb Code 22 app_bootset.o(i.bootset_ensure_qflash) + i.bootset_print 0x01001dc4 Section 0 app_bootset.o(i.bootset_print) + bootset_print 0x01001dc5 Thumb Code 98 app_bootset.o(i.bootset_print) + i.bootset_valid 0x01001f30 Section 0 app_bootset.o(i.bootset_valid) + bootset_valid 0x01001f31 Thumb Code 32 app_bootset.o(i.bootset_valid) + i.caiic_crc32 0x01001f54 Section 0 boot_crc32.o(i.caiic_crc32) + i.cli_exec_line 0x01001f98 Section 0 boot_cli.o(i.cli_exec_line) + cli_exec_line 0x01001f99 Thumb Code 162 boot_cli.o(i.cli_exec_line) + i.cli_history_add 0x01002064 Section 0 boot_cli.o(i.cli_history_add) + cli_history_add 0x01002065 Thumb Code 106 boot_cli.o(i.cli_history_add) + i.cli_history_get 0x010020dc Section 0 boot_cli.o(i.cli_history_get) + cli_history_get 0x010020dd Thumb Code 36 boot_cli.o(i.cli_history_get) + i.cli_printf 0x01002108 Section 0 boot_cli.o(i.cli_printf) + i.cli_write 0x010022a4 Section 0 boot_cli.o(i.cli_write) + i.image_sane 0x010022bc Section 0 main.o(i.image_sane) + image_sane 0x010022bd Thumb Code 44 main.o(i.image_sane) + i.jump_to_app 0x010022f0 Section 0 main.o(i.jump_to_app) + jump_to_app 0x010022f1 Thumb Code 30 main.o(i.jump_to_app) + i.main 0x01002314 Section 0 main.o(i.main) + i.ota_crc16 0x010024d8 Section 0 app_ota.o(i.ota_crc16) + ota_crc16 0x010024d9 Thumb Code 68 app_ota.o(i.ota_crc16) + i.ota_erase_up_to 0x01002524 Section 0 app_ota.o(i.ota_erase_up_to) + ota_erase_up_to 0x01002525 Thumb Code 54 app_ota.o(i.ota_erase_up_to) + i.ota_on_begin 0x01002564 Section 0 app_ota.o(i.ota_on_begin) + ota_on_begin 0x01002565 Thumb Code 294 app_ota.o(i.ota_on_begin) + i.ota_on_data 0x010026d4 Section 0 app_ota.o(i.ota_on_data) + ota_on_data 0x010026d5 Thumb Code 396 app_ota.o(i.ota_on_data) + i.ota_on_end 0x0100287c Section 0 app_ota.o(i.ota_on_end) + ota_on_end 0x0100287d Thumb Code 326 app_ota.o(i.ota_on_end) + i.ota_program 0x010029ec Section 0 app_ota.o(i.ota_program) + ota_program 0x010029ed Thumb Code 46 app_ota.o(i.ota_program) + i.ota_rd32 0x01002a24 Section 0 app_ota.o(i.ota_rd32) + ota_rd32 0x01002a25 Thumb Code 24 app_ota.o(i.ota_rd32) + i.ota_respond 0x01002a3c Section 0 app_ota.o(i.ota_respond) + ota_respond 0x01002a3d Thumb Code 118 app_ota.o(i.ota_respond) + i.ota_uart_sink 0x01002ab8 Section 0 app_ota.o(i.ota_uart_sink) + ota_uart_sink 0x01002ab9 Thumb Code 22 app_ota.o(i.ota_uart_sink) + i.ota_update_bootsetting 0x01002ad4 Section 0 app_ota.o(i.ota_update_bootsetting) + ota_update_bootsetting 0x01002ad5 Thumb Code 174 app_ota.o(i.ota_update_bootsetting) + i.parse_u32 0x01002ba0 Section 0 app_bootset.o(i.parse_u32) + parse_u32 0x01002ba1 Thumb Code 46 app_bootset.o(i.parse_u32) + i.puts_boot 0x01002bce Section 0 main.o(i.puts_boot) + puts_boot 0x01002bcf Thumb Code 24 main.o(i.puts_boot) + i.read_flash_ID 0x01002be8 Section 0 system_n32wb03x.o(i.read_flash_ID) + read_flash_ID 0x01002be9 Thumb Code 62 system_n32wb03x.o(i.read_flash_ID) + i.str_pad 0x01002c2c Section 0 boot_cli.o(i.str_pad) + str_pad 0x01002c2d Thumb Code 78 boot_cli.o(i.str_pad) + i.u32_to_str 0x01002c7a Section 0 boot_cli.o(i.u32_to_str) + u32_to_str 0x01002c7b Thumb Code 108 boot_cli.o(i.u32_to_str) + .constdata 0x01002ce6 Section 472 system_n32wb03x.o(.constdata) + .constdata 0x01002ec0 Section 108 boot_cli.o(.constdata) + s_cmds 0x01002ec0 Data 108 boot_cli.o(.constdata) + .constdata 0x01002f2c Section 12 n32wb03x_rcc.o(.constdata) + s_ApbPresTable 0x01002f2c Data 8 n32wb03x_rcc.o(.constdata) + s_AhbPresTable 0x01002f34 Data 4 n32wb03x_rcc.o(.constdata) + .constdata 0x01002f38 Section 804 n32wb03x_qflash.o(.constdata) + .constdata 0x0100325c Section 129 ctype_o.o(.constdata) + .constdata 0x010032e0 Section 4 ctype_o.o(.constdata) + table 0x010032e0 Data 4 ctype_o.o(.constdata) + .conststring 0x010032e4 Section 666 boot_cli.o(.conststring) + .conststring 0x01003580 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) + .data 0x2000400c Section 3 boot_cli.o(.data) s_otaMode 0x2000400c Data 1 boot_cli.o(.data) + s_histCount 0x2000400d Data 1 boot_cli.o(.data) + s_histHead 0x2000400e 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) @@ -646,14 +663,15 @@ Image Symbol Table .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) + .bss 0x20004c94 Section 816 boot_cli.o(.bss) + s_history 0x20004c94 Data 640 boot_cli.o(.bss) + s_txBuf 0x20004f14 Data 96 boot_cli.o(.bss) + s_line 0x20004f74 Data 80 boot_cli.o(.bss) + .bss 0x20004fc4 Section 487 app_ota.o(.bss) + s_chanBuf 0x20004fc4 Data 487 app_ota.o(.bss) + .bss 0x200051ac Section 808 n32wb03x_qflash.o(.bss) + ram_qflash_cmd 0x200051ac Data 808 n32wb03x_qflash.o(.bss) + STACK 0x200054d8 Section 2048 startup_n32wb03x.o(STACK) Global Symbols @@ -747,61 +765,61 @@ Image Symbol Table AppBootset_CmdAppswitch 0x01000369 Thumb Code 282 app_bootset.o(i.AppBootset_CmdAppswitch) AppBootset_CmdBsdump 0x01000641 Thumb Code 28 app_bootset.o(i.AppBootset_CmdBsdump) AppBootset_CmdBsset 0x01000661 Thumb Code 348 app_bootset.o(i.AppBootset_CmdBsset) - DMA_DeInit 0x01000c85 Thumb Code 152 n32wb03x_dma.o(i.DMA_DeInit) - DMA_EnableChannel 0x01000d25 Thumb Code 24 n32wb03x_dma.o(i.DMA_EnableChannel) - DMA_GetCurrDataCounter 0x01000d41 Thumb Code 8 n32wb03x_dma.o(i.DMA_GetCurrDataCounter) - DMA_Init 0x01000d49 Thumb Code 58 n32wb03x_dma.o(i.DMA_Init) - DMA_RequestRemap 0x01000d89 Thumb Code 16 n32wb03x_dma.o(i.DMA_RequestRemap) - GPIO_InitPeripheral 0x01000d99 Thumb Code 262 n32wb03x_gpio.o(i.GPIO_InitPeripheral) - GPIO_InitStruct 0x01000ea1 Thumb Code 24 n32wb03x_gpio.o(i.GPIO_InitStruct) - GPIO_ReadInputDataBit 0x01000ebd Thumb Code 20 n32wb03x_gpio.o(i.GPIO_ReadInputDataBit) - OTPTrim_Read 0x01000ed1 Thumb Code 192 system_n32wb03x.o(i.OTPTrim_Read) - Qflash_Erase_Sector 0x01000f9d Thumb Code 54 n32wb03x_qflash.o(i.Qflash_Erase_Sector) - Qflash_Init 0x01000fd9 Thumb Code 36 n32wb03x_qflash.o(i.Qflash_Init) - Qflash_Write 0x01001011 Thumb Code 62 n32wb03x_qflash.o(i.Qflash_Write) - RCC_EnableAHBPeriphClk 0x01001055 Thumb Code 28 n32wb03x_rcc.o(i.RCC_EnableAHBPeriphClk) - RCC_EnableAPB2PeriphClk 0x01001075 Thumb Code 28 n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphClk) - RCC_GetClocksFreqValue 0x01001095 Thumb Code 140 n32wb03x_rcc.o(i.RCC_GetClocksFreqValue) - SystemInit 0x01001269 Thumb Code 250 system_n32wb03x.o(i.SystemInit) - SystemTrimValueRead 0x01001385 Thumb Code 20 system_n32wb03x.o(i.SystemTrimValueRead) - USART_Enable 0x01001399 Thumb Code 26 n32wb03x_usart.o(i.USART_Enable) - USART_EnableDMA 0x010013b9 Thumb Code 20 n32wb03x_usart.o(i.USART_EnableDMA) - USART_GetFlagStatus 0x010013cd Thumb Code 30 n32wb03x_usart.o(i.USART_GetFlagStatus) - USART_Init 0x010013ed Thumb Code 162 n32wb03x_usart.o(i.USART_Init) - USART_SendData 0x010014a1 Thumb Code 8 n32wb03x_usart.o(i.USART_SendData) - __aeabi_errno_addr 0x010014a9 Thumb Code 4 errno.o(i.__aeabi_errno_addr) - __rt_errno_addr 0x010014a9 Thumb Code 0 errno.o(i.__aeabi_errno_addr) - __scatterload_copy 0x010014b1 Thumb Code 14 handlers.o(i.__scatterload_copy) - __scatterload_null 0x010014bf Thumb Code 2 handlers.o(i.__scatterload_null) - __scatterload_zeroinit 0x010014c1 Thumb Code 14 handlers.o(i.__scatterload_zeroinit) - app_ota_abort 0x010014dd Thumb Code 32 app_ota.o(i.app_ota_abort) - app_ota_chan_idle 0x01001519 Thumb Code 12 app_ota.o(i.app_ota_chan_idle) - app_ota_chan_rx 0x0100152d Thumb Code 298 app_ota.o(i.app_ota_chan_rx) - app_ota_chan_rx_uart 0x0100166d Thumb Code 26 app_ota.o(i.app_ota_chan_rx_uart) - app_ota_handle_frame 0x01001691 Thumb Code 106 app_ota.o(i.app_ota_handle_frame) - app_ota_reset_poll 0x0100170d Thumb Code 70 app_ota.o(i.app_ota_reset_poll) - boot_cli_run 0x010017b5 Thumb Code 240 boot_cli.o(i.boot_cli_run) - boot_delay_ms 0x01001a55 Thumb Code 24 boot_usart.o(i.boot_delay_ms) - boot_millis 0x01001aad Thumb Code 30 boot_usart.o(i.boot_millis) - boot_usart_init 0x01001ad5 Thumb Code 238 boot_usart.o(i.boot_usart_init) - boot_usart_read 0x01001be5 Thumb Code 54 boot_usart.o(i.boot_usart_read) - boot_usart_write 0x01001c3d Thumb Code 42 boot_usart.o(i.boot_usart_write) - caiic_crc32 0x01001e7d Thumb Code 62 boot_crc32.o(i.caiic_crc32) - cli_printf 0x01001f8d Thumb Code 408 boot_cli.o(i.cli_printf) - cli_write 0x01002129 Thumb Code 22 boot_cli.o(i.cli_write) - main 0x01002199 Thumb Code 210 main.o(i.main) - TRIM_READ_CMD_CODE 0x01002b6a Data 320 system_n32wb03x.o(.constdata) - CMD_RDID 0x01002caa Data 152 system_n32wb03x.o(.constdata) - const_qflash_cmd 0x01002dbc Data 804 n32wb03x_qflash.o(.constdata) - __ctype_table 0x010030e0 Data 129 ctype_o.o(.constdata) - Region$$Table$$Base 0x01003498 Number 0 anon$$obj.o(Region$$Table) - Region$$Table$$Limit 0x010034b8 Number 0 anon$$obj.o(Region$$Table) + DMA_DeInit 0x01000c99 Thumb Code 152 n32wb03x_dma.o(i.DMA_DeInit) + DMA_EnableChannel 0x01000d39 Thumb Code 24 n32wb03x_dma.o(i.DMA_EnableChannel) + DMA_GetCurrDataCounter 0x01000d55 Thumb Code 8 n32wb03x_dma.o(i.DMA_GetCurrDataCounter) + DMA_Init 0x01000d5d Thumb Code 58 n32wb03x_dma.o(i.DMA_Init) + DMA_RequestRemap 0x01000d9d Thumb Code 16 n32wb03x_dma.o(i.DMA_RequestRemap) + GPIO_InitPeripheral 0x01000dad Thumb Code 262 n32wb03x_gpio.o(i.GPIO_InitPeripheral) + GPIO_InitStruct 0x01000eb5 Thumb Code 24 n32wb03x_gpio.o(i.GPIO_InitStruct) + GPIO_ReadInputDataBit 0x01000ed1 Thumb Code 20 n32wb03x_gpio.o(i.GPIO_ReadInputDataBit) + OTPTrim_Read 0x01000ee5 Thumb Code 192 system_n32wb03x.o(i.OTPTrim_Read) + Qflash_Erase_Sector 0x01000fb1 Thumb Code 54 n32wb03x_qflash.o(i.Qflash_Erase_Sector) + Qflash_Init 0x01000fed Thumb Code 36 n32wb03x_qflash.o(i.Qflash_Init) + Qflash_Write 0x01001025 Thumb Code 62 n32wb03x_qflash.o(i.Qflash_Write) + RCC_EnableAHBPeriphClk 0x01001069 Thumb Code 28 n32wb03x_rcc.o(i.RCC_EnableAHBPeriphClk) + RCC_EnableAPB2PeriphClk 0x01001089 Thumb Code 28 n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphClk) + RCC_GetClocksFreqValue 0x010010a9 Thumb Code 140 n32wb03x_rcc.o(i.RCC_GetClocksFreqValue) + SystemInit 0x0100127d Thumb Code 250 system_n32wb03x.o(i.SystemInit) + SystemTrimValueRead 0x01001399 Thumb Code 20 system_n32wb03x.o(i.SystemTrimValueRead) + USART_Enable 0x010013ad Thumb Code 26 n32wb03x_usart.o(i.USART_Enable) + USART_EnableDMA 0x010013cd Thumb Code 20 n32wb03x_usart.o(i.USART_EnableDMA) + USART_GetFlagStatus 0x010013e1 Thumb Code 30 n32wb03x_usart.o(i.USART_GetFlagStatus) + USART_Init 0x01001401 Thumb Code 162 n32wb03x_usart.o(i.USART_Init) + USART_SendData 0x010014b5 Thumb Code 8 n32wb03x_usart.o(i.USART_SendData) + __aeabi_errno_addr 0x010014bd Thumb Code 4 errno.o(i.__aeabi_errno_addr) + __rt_errno_addr 0x010014bd Thumb Code 0 errno.o(i.__aeabi_errno_addr) + __scatterload_copy 0x010014c5 Thumb Code 14 handlers.o(i.__scatterload_copy) + __scatterload_null 0x010014d3 Thumb Code 2 handlers.o(i.__scatterload_null) + __scatterload_zeroinit 0x010014d5 Thumb Code 14 handlers.o(i.__scatterload_zeroinit) + app_ota_abort 0x010014f1 Thumb Code 32 app_ota.o(i.app_ota_abort) + app_ota_chan_idle 0x0100152d Thumb Code 12 app_ota.o(i.app_ota_chan_idle) + app_ota_chan_rx 0x01001541 Thumb Code 298 app_ota.o(i.app_ota_chan_rx) + app_ota_chan_rx_uart 0x01001681 Thumb Code 26 app_ota.o(i.app_ota_chan_rx_uart) + app_ota_handle_frame 0x010016a5 Thumb Code 106 app_ota.o(i.app_ota_handle_frame) + app_ota_reset_poll 0x01001721 Thumb Code 70 app_ota.o(i.app_ota_reset_poll) + boot_cli_run 0x010017c9 Thumb Code 432 boot_cli.o(i.boot_cli_run) + boot_delay_ms 0x01001b2d Thumb Code 24 boot_usart.o(i.boot_delay_ms) + boot_millis 0x01001b85 Thumb Code 30 boot_usart.o(i.boot_millis) + boot_usart_init 0x01001bad Thumb Code 238 boot_usart.o(i.boot_usart_init) + boot_usart_read 0x01001cbd Thumb Code 54 boot_usart.o(i.boot_usart_read) + boot_usart_write 0x01001d15 Thumb Code 42 boot_usart.o(i.boot_usart_write) + caiic_crc32 0x01001f55 Thumb Code 62 boot_crc32.o(i.caiic_crc32) + cli_printf 0x01002109 Thumb Code 408 boot_cli.o(i.cli_printf) + cli_write 0x010022a5 Thumb Code 22 boot_cli.o(i.cli_write) + main 0x01002315 Thumb Code 210 main.o(i.main) + TRIM_READ_CMD_CODE 0x01002ce6 Data 320 system_n32wb03x.o(.constdata) + CMD_RDID 0x01002e26 Data 152 system_n32wb03x.o(.constdata) + const_qflash_cmd 0x01002f38 Data 804 n32wb03x_qflash.o(.constdata) + __ctype_table 0x0100325c Data 129 ctype_o.o(.constdata) + Region$$Table$$Base 0x01003614 Number 0 anon$$obj.o(Region$$Table) + Region$$Table$$Limit 0x01003634 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) + __initial_sp 0x20005cd8 Data 0 startup_n32wb03x.o(STACK) @@ -811,165 +829,167 @@ Memory Map of the image Image Entry point : 0x010000c1 - Load Region LR_IROM1 (Base: 0x01000000, Size: 0x00003518, Max: 0x00004000, ABSOLUTE) + Load Region LR_IROM1 (Base: 0x01000000, Size: 0x00003694, Max: 0x00004000, ABSOLUTE) - Execution Region ER_IROM1 (Exec base: 0x01000000, Load base: 0x01000000, Size: 0x000034b8, Max: 0x00004000, ABSOLUTE) + Execution Region ER_IROM1 (Exec base: 0x01000000, Load base: 0x01000000, Size: 0x00003634, 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 1225 * .ARM.Collect$$$$00000000 mc_p.l(entry.o) - 0x010000c0 0x010000c0 0x00000004 Code RO 1250 .ARM.Collect$$$$00000001 mc_p.l(entry2.o) - 0x010000c4 0x010000c4 0x00000004 Code RO 1253 .ARM.Collect$$$$00000004 mc_p.l(entry5.o) - 0x010000c8 0x010000c8 0x00000000 Code RO 1255 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o) - 0x010000c8 0x010000c8 0x00000000 Code RO 1257 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o) - 0x010000c8 0x010000c8 0x00000008 Code RO 1258 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o) - 0x010000d0 0x010000d0 0x00000000 Code RO 1260 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o) - 0x010000d0 0x010000d0 0x00000000 Code RO 1262 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o) - 0x010000d0 0x010000d0 0x00000004 Code RO 1251 .ARM.Collect$$$$00002712 mc_p.l(entry2.o) + 0x010000c0 0x010000c0 0x00000000 Code RO 1235 * .ARM.Collect$$$$00000000 mc_p.l(entry.o) + 0x010000c0 0x010000c0 0x00000004 Code RO 1260 .ARM.Collect$$$$00000001 mc_p.l(entry2.o) + 0x010000c4 0x010000c4 0x00000004 Code RO 1263 .ARM.Collect$$$$00000004 mc_p.l(entry5.o) + 0x010000c8 0x010000c8 0x00000000 Code RO 1265 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o) + 0x010000c8 0x010000c8 0x00000000 Code RO 1267 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o) + 0x010000c8 0x010000c8 0x00000008 Code RO 1268 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o) + 0x010000d0 0x010000d0 0x00000000 Code RO 1270 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o) + 0x010000d0 0x010000d0 0x00000000 Code RO 1272 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o) + 0x010000d0 0x010000d0 0x00000004 Code RO 1261 .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 1228 .text mc_p.l(uidiv.o) - 0x0100012c 0x0100012c 0x00000024 Code RO 1230 .text mc_p.l(memcpya.o) - 0x01000150 0x01000150 0x00000024 Code RO 1232 .text mc_p.l(memseta.o) - 0x01000174 0x01000174 0x0000000e Code RO 1234 .text mc_p.l(strlen.o) - 0x01000182 0x01000182 0x0000001c Code RO 1236 .text mc_p.l(strcmp.o) - 0x0100019e 0x0100019e 0x00000014 Code RO 1238 .text mc_p.l(memchr.o) - 0x010001b2 0x010001b2 0x0000001a Code RO 1240 .text mc_p.l(memcmp.o) - 0x010001cc 0x010001cc 0x00000012 Code RO 1242 .text mc_p.l(strcpy.o) - 0x010001de 0x010001de 0x0000001e Code RO 1244 .text mc_p.l(strncmp.o) - 0x010001fc 0x010001fc 0x00000076 Code RO 1248 .text mc_p.l(strtoul.o) + 0x01000100 0x01000100 0x0000002c Code RO 1238 .text mc_p.l(uidiv.o) + 0x0100012c 0x0100012c 0x00000024 Code RO 1240 .text mc_p.l(memcpya.o) + 0x01000150 0x01000150 0x00000024 Code RO 1242 .text mc_p.l(memseta.o) + 0x01000174 0x01000174 0x0000000e Code RO 1244 .text mc_p.l(strlen.o) + 0x01000182 0x01000182 0x0000001c Code RO 1246 .text mc_p.l(strcmp.o) + 0x0100019e 0x0100019e 0x00000014 Code RO 1248 .text mc_p.l(memchr.o) + 0x010001b2 0x010001b2 0x0000001a Code RO 1250 .text mc_p.l(memcmp.o) + 0x010001cc 0x010001cc 0x00000012 Code RO 1252 .text mc_p.l(strcpy.o) + 0x010001de 0x010001de 0x0000001e Code RO 1254 .text mc_p.l(strncmp.o) + 0x010001fc 0x010001fc 0x00000076 Code RO 1258 .text mc_p.l(strtoul.o) 0x01000272 0x01000272 0x00000002 PAD - 0x01000274 0x01000274 0x00000008 Code RO 1264 .text mc_p.l(ctype_o.o) - 0x0100027c 0x0100027c 0x000000a6 Code RO 1299 .text mc_p.l(_strtoul.o) + 0x01000274 0x01000274 0x00000008 Code RO 1274 .text mc_p.l(ctype_o.o) + 0x0100027c 0x0100027c 0x000000a6 Code RO 1309 .text mc_p.l(_strtoul.o) 0x01000322 0x01000322 0x00000002 PAD - 0x01000324 0x01000324 0x00000024 Code RO 1301 .text mc_p.l(init.o) - 0x01000348 0x01000348 0x0000001e Code RO 1303 .text mc_p.l(_chval.o) + 0x01000324 0x01000324 0x00000024 Code RO 1311 .text mc_p.l(init.o) + 0x01000348 0x01000348 0x0000001e Code RO 1313 .text mc_p.l(_chval.o) 0x01000366 0x01000366 0x00000002 PAD - 0x01000368 0x01000368 0x000002d8 Code RO 510 i.AppBootset_CmdAppswitch app_bootset.o - 0x01000640 0x01000640 0x00000020 Code RO 511 i.AppBootset_CmdBsdump app_bootset.o - 0x01000660 0x01000660 0x000002f8 Code RO 512 i.AppBootset_CmdBsset app_bootset.o + 0x01000368 0x01000368 0x000002d8 Code RO 520 i.AppBootset_CmdAppswitch app_bootset.o + 0x01000640 0x01000640 0x00000020 Code RO 521 i.AppBootset_CmdBsdump app_bootset.o + 0x01000660 0x01000660 0x000002f8 Code RO 522 i.AppBootset_CmdBsset app_bootset.o 0x01000958 0x01000958 0x000000e0 Code RO 295 i.CmdDevInfo boot_cli.o - 0x01000a38 0x01000a38 0x000000d0 Code RO 296 i.CmdHelp boot_cli.o - 0x01000b08 0x01000b08 0x0000001c Code RO 297 i.CmdOta boot_cli.o - 0x01000b24 0x01000b24 0x0000003c Code RO 298 i.CmdReset boot_cli.o - 0x01000b60 0x01000b60 0x000000b0 Code RO 299 i.CmdUartInfo boot_cli.o - 0x01000c10 0x01000c10 0x00000074 Code RO 300 i.CmdVersion boot_cli.o - 0x01000c84 0x01000c84 0x000000a0 Code RO 1103 i.DMA_DeInit n32wb03x_dma.o - 0x01000d24 0x01000d24 0x0000001c Code RO 1104 i.DMA_EnableChannel n32wb03x_dma.o - 0x01000d40 0x01000d40 0x00000008 Code RO 1105 i.DMA_GetCurrDataCounter n32wb03x_dma.o - 0x01000d48 0x01000d48 0x00000040 Code RO 1108 i.DMA_Init n32wb03x_dma.o - 0x01000d88 0x01000d88 0x00000010 Code RO 1109 i.DMA_RequestRemap n32wb03x_dma.o - 0x01000d98 0x01000d98 0x00000106 Code RO 815 i.GPIO_InitPeripheral n32wb03x_gpio.o - 0x01000e9e 0x01000e9e 0x00000002 PAD - 0x01000ea0 0x01000ea0 0x0000001c Code RO 816 i.GPIO_InitStruct n32wb03x_gpio.o - 0x01000ebc 0x01000ebc 0x00000014 Code RO 818 i.GPIO_ReadInputDataBit n32wb03x_gpio.o - 0x01000ed0 0x01000ed0 0x000000cc Code RO 11 i.OTPTrim_Read system_n32wb03x.o - 0x01000f9c 0x01000f9c 0x0000003c Code RO 1182 i.Qflash_Erase_Sector n32wb03x_qflash.o - 0x01000fd8 0x01000fd8 0x00000038 Code RO 1183 i.Qflash_Init n32wb03x_qflash.o - 0x01001010 0x01001010 0x00000044 Code RO 1185 i.Qflash_Write n32wb03x_qflash.o - 0x01001054 0x01001054 0x00000020 Code RO 591 i.RCC_EnableAHBPeriphClk n32wb03x_rcc.o - 0x01001074 0x01001074 0x00000020 Code RO 595 i.RCC_EnableAPB2PeriphClk n32wb03x_rcc.o - 0x01001094 0x01001094 0x000000a4 Code RO 603 i.RCC_GetClocksFreqValue n32wb03x_rcc.o - 0x01001138 0x01001138 0x00000130 Code RO 12 i.RCC_HsiCalib system_n32wb03x.o - 0x01001268 0x01001268 0x0000011c Code RO 16 i.SystemInit system_n32wb03x.o - 0x01001384 0x01001384 0x00000014 Code RO 18 i.SystemTrimValueRead system_n32wb03x.o - 0x01001398 0x01001398 0x00000020 Code RO 937 i.USART_Enable n32wb03x_usart.o - 0x010013b8 0x010013b8 0x00000014 Code RO 938 i.USART_EnableDMA n32wb03x_usart.o - 0x010013cc 0x010013cc 0x0000001e Code RO 944 i.USART_GetFlagStatus n32wb03x_usart.o - 0x010013ea 0x010013ea 0x00000002 PAD - 0x010013ec 0x010013ec 0x000000b4 Code RO 946 i.USART_Init n32wb03x_usart.o - 0x010014a0 0x010014a0 0x00000008 Code RO 949 i.USART_SendData n32wb03x_usart.o - 0x010014a8 0x010014a8 0x00000008 Code RO 1292 i.__aeabi_errno_addr mc_p.l(errno.o) - 0x010014b0 0x010014b0 0x0000000e Code RO 1307 i.__scatterload_copy mc_p.l(handlers.o) - 0x010014be 0x010014be 0x00000002 Code RO 1308 i.__scatterload_null mc_p.l(handlers.o) - 0x010014c0 0x010014c0 0x0000000e Code RO 1309 i.__scatterload_zeroinit mc_p.l(handlers.o) - 0x010014ce 0x010014ce 0x00000006 Code RO 19 i.__set_PRIMASK system_n32wb03x.o - 0x010014d4 0x010014d4 0x00000006 Code RO 1186 i.__set_PRIMASK n32wb03x_qflash.o - 0x010014da 0x010014da 0x00000002 PAD - 0x010014dc 0x010014dc 0x0000003c Code RO 401 i.app_ota_abort app_ota.o - 0x01001518 0x01001518 0x00000014 Code RO 402 i.app_ota_chan_idle app_ota.o - 0x0100152c 0x0100152c 0x00000140 Code RO 403 i.app_ota_chan_rx app_ota.o - 0x0100166c 0x0100166c 0x00000024 Code RO 404 i.app_ota_chan_rx_uart app_ota.o - 0x01001690 0x01001690 0x0000007c Code RO 406 i.app_ota_handle_frame app_ota.o - 0x0100170c 0x0100170c 0x0000005c Code RO 407 i.app_ota_reset_poll app_ota.o - 0x01001768 0x01001768 0x0000004c Code RO 301 i.boot_cli_redraw boot_cli.o - 0x010017b4 0x010017b4 0x0000015c Code RO 302 i.boot_cli_run boot_cli.o - 0x01001910 0x01001910 0x00000144 Code RO 303 i.boot_cli_tab_complete boot_cli.o - 0x01001a54 0x01001a54 0x00000018 Code RO 244 i.boot_delay_ms boot_usart.o - 0x01001a6c 0x01001a6c 0x00000040 Code RO 174 i.boot_dl_strap_active main.o - 0x01001aac 0x01001aac 0x00000028 Code RO 245 i.boot_millis boot_usart.o - 0x01001ad4 0x01001ad4 0x00000110 Code RO 246 i.boot_usart_init boot_usart.o - 0x01001be4 0x01001be4 0x00000040 Code RO 247 i.boot_usart_read boot_usart.o - 0x01001c24 0x01001c24 0x00000018 Code RO 248 i.boot_usart_rx_head boot_usart.o - 0x01001c3c 0x01001c3c 0x00000030 Code RO 249 i.boot_usart_write boot_usart.o - 0x01001c6c 0x01001c6c 0x00000054 Code RO 513 i.bootset_commit app_bootset.o - 0x01001cc0 0x01001cc0 0x0000000e Code RO 514 i.bootset_crc app_bootset.o - 0x01001cce 0x01001cce 0x00000002 PAD - 0x01001cd0 0x01001cd0 0x0000001c Code RO 515 i.bootset_ensure_qflash app_bootset.o - 0x01001cec 0x01001cec 0x0000016c Code RO 516 i.bootset_print app_bootset.o - 0x01001e58 0x01001e58 0x00000024 Code RO 517 i.bootset_valid app_bootset.o - 0x01001e7c 0x01001e7c 0x00000044 Code RO 231 i.caiic_crc32 boot_crc32.o - 0x01001ec0 0x01001ec0 0x000000cc Code RO 304 i.cli_exec_line boot_cli.o - 0x01001f8c 0x01001f8c 0x0000019c Code RO 305 i.cli_printf boot_cli.o - 0x01002128 0x01002128 0x00000016 Code RO 306 i.cli_write boot_cli.o - 0x0100213e 0x0100213e 0x00000002 PAD - 0x01002140 0x01002140 0x00000034 Code RO 175 i.image_sane main.o - 0x01002174 0x01002174 0x00000024 Code RO 176 i.jump_to_app main.o - 0x01002198 0x01002198 0x000001c4 Code RO 177 i.main main.o - 0x0100235c 0x0100235c 0x0000004c Code RO 408 i.ota_crc16 app_ota.o - 0x010023a8 0x010023a8 0x00000040 Code RO 409 i.ota_erase_up_to app_ota.o - 0x010023e8 0x010023e8 0x00000170 Code RO 410 i.ota_on_begin app_ota.o - 0x01002558 0x01002558 0x000001a8 Code RO 411 i.ota_on_data app_ota.o - 0x01002700 0x01002700 0x00000170 Code RO 412 i.ota_on_end app_ota.o - 0x01002870 0x01002870 0x00000038 Code RO 413 i.ota_program app_ota.o - 0x010028a8 0x010028a8 0x00000018 Code RO 414 i.ota_rd32 app_ota.o - 0x010028c0 0x010028c0 0x0000007c Code RO 415 i.ota_respond app_ota.o - 0x0100293c 0x0100293c 0x0000001c Code RO 416 i.ota_uart_sink app_ota.o - 0x01002958 0x01002958 0x000000cc Code RO 417 i.ota_update_bootsetting app_ota.o - 0x01002a24 0x01002a24 0x0000002e Code RO 518 i.parse_u32 app_bootset.o - 0x01002a52 0x01002a52 0x00000018 Code RO 178 i.puts_boot main.o - 0x01002a6a 0x01002a6a 0x00000002 PAD - 0x01002a6c 0x01002a6c 0x00000044 Code RO 20 i.read_flash_ID system_n32wb03x.o - 0x01002ab0 0x01002ab0 0x0000004e Code RO 307 i.str_pad boot_cli.o - 0x01002afe 0x01002afe 0x0000006c Code RO 308 i.u32_to_str boot_cli.o - 0x01002b6a 0x01002b6a 0x000001d8 Data RO 23 .constdata system_n32wb03x.o - 0x01002d42 0x01002d42 0x00000002 PAD - 0x01002d44 0x01002d44 0x0000006c Data RO 310 .constdata boot_cli.o - 0x01002db0 0x01002db0 0x0000000c Data RO 611 .constdata n32wb03x_rcc.o - 0x01002dbc 0x01002dbc 0x00000324 Data RO 1188 .constdata n32wb03x_qflash.o - 0x010030e0 0x010030e0 0x00000081 Data RO 1265 .constdata mc_p.l(ctype_o.o) - 0x01003161 0x01003161 0x00000003 PAD - 0x01003164 0x01003164 0x00000004 Data RO 1266 .constdata mc_p.l(ctype_o.o) - 0x01003168 0x01003168 0x0000029a Data RO 311 .conststring boot_cli.o - 0x01003402 0x01003402 0x00000002 PAD - 0x01003404 0x01003404 0x00000091 Data RO 519 .conststring app_bootset.o - 0x01003495 0x01003495 0x00000003 PAD - 0x01003498 0x01003498 0x00000020 Data RO 1305 Region$$Table anon$$obj.o + 0x01000a38 0x01000a38 0x000000e4 Code RO 296 i.CmdHelp boot_cli.o + 0x01000b1c 0x01000b1c 0x0000001c Code RO 297 i.CmdOta boot_cli.o + 0x01000b38 0x01000b38 0x0000003c Code RO 298 i.CmdReset boot_cli.o + 0x01000b74 0x01000b74 0x000000b0 Code RO 299 i.CmdUartInfo boot_cli.o + 0x01000c24 0x01000c24 0x00000074 Code RO 300 i.CmdVersion boot_cli.o + 0x01000c98 0x01000c98 0x000000a0 Code RO 1113 i.DMA_DeInit n32wb03x_dma.o + 0x01000d38 0x01000d38 0x0000001c Code RO 1114 i.DMA_EnableChannel n32wb03x_dma.o + 0x01000d54 0x01000d54 0x00000008 Code RO 1115 i.DMA_GetCurrDataCounter n32wb03x_dma.o + 0x01000d5c 0x01000d5c 0x00000040 Code RO 1118 i.DMA_Init n32wb03x_dma.o + 0x01000d9c 0x01000d9c 0x00000010 Code RO 1119 i.DMA_RequestRemap n32wb03x_dma.o + 0x01000dac 0x01000dac 0x00000106 Code RO 825 i.GPIO_InitPeripheral n32wb03x_gpio.o + 0x01000eb2 0x01000eb2 0x00000002 PAD + 0x01000eb4 0x01000eb4 0x0000001c Code RO 826 i.GPIO_InitStruct n32wb03x_gpio.o + 0x01000ed0 0x01000ed0 0x00000014 Code RO 828 i.GPIO_ReadInputDataBit n32wb03x_gpio.o + 0x01000ee4 0x01000ee4 0x000000cc Code RO 11 i.OTPTrim_Read system_n32wb03x.o + 0x01000fb0 0x01000fb0 0x0000003c Code RO 1192 i.Qflash_Erase_Sector n32wb03x_qflash.o + 0x01000fec 0x01000fec 0x00000038 Code RO 1193 i.Qflash_Init n32wb03x_qflash.o + 0x01001024 0x01001024 0x00000044 Code RO 1195 i.Qflash_Write n32wb03x_qflash.o + 0x01001068 0x01001068 0x00000020 Code RO 601 i.RCC_EnableAHBPeriphClk n32wb03x_rcc.o + 0x01001088 0x01001088 0x00000020 Code RO 605 i.RCC_EnableAPB2PeriphClk n32wb03x_rcc.o + 0x010010a8 0x010010a8 0x000000a4 Code RO 613 i.RCC_GetClocksFreqValue n32wb03x_rcc.o + 0x0100114c 0x0100114c 0x00000130 Code RO 12 i.RCC_HsiCalib system_n32wb03x.o + 0x0100127c 0x0100127c 0x0000011c Code RO 16 i.SystemInit system_n32wb03x.o + 0x01001398 0x01001398 0x00000014 Code RO 18 i.SystemTrimValueRead system_n32wb03x.o + 0x010013ac 0x010013ac 0x00000020 Code RO 947 i.USART_Enable n32wb03x_usart.o + 0x010013cc 0x010013cc 0x00000014 Code RO 948 i.USART_EnableDMA n32wb03x_usart.o + 0x010013e0 0x010013e0 0x0000001e Code RO 954 i.USART_GetFlagStatus n32wb03x_usart.o + 0x010013fe 0x010013fe 0x00000002 PAD + 0x01001400 0x01001400 0x000000b4 Code RO 956 i.USART_Init n32wb03x_usart.o + 0x010014b4 0x010014b4 0x00000008 Code RO 959 i.USART_SendData n32wb03x_usart.o + 0x010014bc 0x010014bc 0x00000008 Code RO 1302 i.__aeabi_errno_addr mc_p.l(errno.o) + 0x010014c4 0x010014c4 0x0000000e Code RO 1317 i.__scatterload_copy mc_p.l(handlers.o) + 0x010014d2 0x010014d2 0x00000002 Code RO 1318 i.__scatterload_null mc_p.l(handlers.o) + 0x010014d4 0x010014d4 0x0000000e Code RO 1319 i.__scatterload_zeroinit mc_p.l(handlers.o) + 0x010014e2 0x010014e2 0x00000006 Code RO 19 i.__set_PRIMASK system_n32wb03x.o + 0x010014e8 0x010014e8 0x00000006 Code RO 1196 i.__set_PRIMASK n32wb03x_qflash.o + 0x010014ee 0x010014ee 0x00000002 PAD + 0x010014f0 0x010014f0 0x0000003c Code RO 411 i.app_ota_abort app_ota.o + 0x0100152c 0x0100152c 0x00000014 Code RO 412 i.app_ota_chan_idle app_ota.o + 0x01001540 0x01001540 0x00000140 Code RO 413 i.app_ota_chan_rx app_ota.o + 0x01001680 0x01001680 0x00000024 Code RO 414 i.app_ota_chan_rx_uart app_ota.o + 0x010016a4 0x010016a4 0x0000007c Code RO 416 i.app_ota_handle_frame app_ota.o + 0x01001720 0x01001720 0x0000005c Code RO 417 i.app_ota_reset_poll app_ota.o + 0x0100177c 0x0100177c 0x0000004c Code RO 301 i.boot_cli_redraw boot_cli.o + 0x010017c8 0x010017c8 0x00000220 Code RO 302 i.boot_cli_run boot_cli.o + 0x010019e8 0x010019e8 0x00000144 Code RO 303 i.boot_cli_tab_complete boot_cli.o + 0x01001b2c 0x01001b2c 0x00000018 Code RO 244 i.boot_delay_ms boot_usart.o + 0x01001b44 0x01001b44 0x00000040 Code RO 174 i.boot_dl_strap_active main.o + 0x01001b84 0x01001b84 0x00000028 Code RO 245 i.boot_millis boot_usart.o + 0x01001bac 0x01001bac 0x00000110 Code RO 246 i.boot_usart_init boot_usart.o + 0x01001cbc 0x01001cbc 0x00000040 Code RO 247 i.boot_usart_read boot_usart.o + 0x01001cfc 0x01001cfc 0x00000018 Code RO 248 i.boot_usart_rx_head boot_usart.o + 0x01001d14 0x01001d14 0x00000030 Code RO 249 i.boot_usart_write boot_usart.o + 0x01001d44 0x01001d44 0x00000054 Code RO 523 i.bootset_commit app_bootset.o + 0x01001d98 0x01001d98 0x0000000e Code RO 524 i.bootset_crc app_bootset.o + 0x01001da6 0x01001da6 0x00000002 PAD + 0x01001da8 0x01001da8 0x0000001c Code RO 525 i.bootset_ensure_qflash app_bootset.o + 0x01001dc4 0x01001dc4 0x0000016c Code RO 526 i.bootset_print app_bootset.o + 0x01001f30 0x01001f30 0x00000024 Code RO 527 i.bootset_valid app_bootset.o + 0x01001f54 0x01001f54 0x00000044 Code RO 231 i.caiic_crc32 boot_crc32.o + 0x01001f98 0x01001f98 0x000000cc Code RO 304 i.cli_exec_line boot_cli.o + 0x01002064 0x01002064 0x00000078 Code RO 305 i.cli_history_add boot_cli.o + 0x010020dc 0x010020dc 0x0000002c Code RO 306 i.cli_history_get boot_cli.o + 0x01002108 0x01002108 0x0000019c Code RO 307 i.cli_printf boot_cli.o + 0x010022a4 0x010022a4 0x00000016 Code RO 308 i.cli_write boot_cli.o + 0x010022ba 0x010022ba 0x00000002 PAD + 0x010022bc 0x010022bc 0x00000034 Code RO 175 i.image_sane main.o + 0x010022f0 0x010022f0 0x00000024 Code RO 176 i.jump_to_app main.o + 0x01002314 0x01002314 0x000001c4 Code RO 177 i.main main.o + 0x010024d8 0x010024d8 0x0000004c Code RO 418 i.ota_crc16 app_ota.o + 0x01002524 0x01002524 0x00000040 Code RO 419 i.ota_erase_up_to app_ota.o + 0x01002564 0x01002564 0x00000170 Code RO 420 i.ota_on_begin app_ota.o + 0x010026d4 0x010026d4 0x000001a8 Code RO 421 i.ota_on_data app_ota.o + 0x0100287c 0x0100287c 0x00000170 Code RO 422 i.ota_on_end app_ota.o + 0x010029ec 0x010029ec 0x00000038 Code RO 423 i.ota_program app_ota.o + 0x01002a24 0x01002a24 0x00000018 Code RO 424 i.ota_rd32 app_ota.o + 0x01002a3c 0x01002a3c 0x0000007c Code RO 425 i.ota_respond app_ota.o + 0x01002ab8 0x01002ab8 0x0000001c Code RO 426 i.ota_uart_sink app_ota.o + 0x01002ad4 0x01002ad4 0x000000cc Code RO 427 i.ota_update_bootsetting app_ota.o + 0x01002ba0 0x01002ba0 0x0000002e Code RO 528 i.parse_u32 app_bootset.o + 0x01002bce 0x01002bce 0x00000018 Code RO 178 i.puts_boot main.o + 0x01002be6 0x01002be6 0x00000002 PAD + 0x01002be8 0x01002be8 0x00000044 Code RO 20 i.read_flash_ID system_n32wb03x.o + 0x01002c2c 0x01002c2c 0x0000004e Code RO 309 i.str_pad boot_cli.o + 0x01002c7a 0x01002c7a 0x0000006c Code RO 310 i.u32_to_str boot_cli.o + 0x01002ce6 0x01002ce6 0x000001d8 Data RO 23 .constdata system_n32wb03x.o + 0x01002ebe 0x01002ebe 0x00000002 PAD + 0x01002ec0 0x01002ec0 0x0000006c Data RO 312 .constdata boot_cli.o + 0x01002f2c 0x01002f2c 0x0000000c Data RO 621 .constdata n32wb03x_rcc.o + 0x01002f38 0x01002f38 0x00000324 Data RO 1198 .constdata n32wb03x_qflash.o + 0x0100325c 0x0100325c 0x00000081 Data RO 1275 .constdata mc_p.l(ctype_o.o) + 0x010032dd 0x010032dd 0x00000003 PAD + 0x010032e0 0x010032e0 0x00000004 Data RO 1276 .constdata mc_p.l(ctype_o.o) + 0x010032e4 0x010032e4 0x0000029a Data RO 313 .conststring boot_cli.o + 0x0100357e 0x0100357e 0x00000002 PAD + 0x01003580 0x01003580 0x00000091 Data RO 529 .conststring app_bootset.o + 0x01003611 0x01003611 0x00000003 PAD + 0x01003614 0x01003614 0x00000020 Data RO 1315 Region$$Table anon$$obj.o - Execution Region RW_IRAM1 (Exec base: 0x20004000, Load base: 0x010034b8, Size: 0x00001a58, Max: 0x0000c000, ABSOLUTE) + Execution Region RW_IRAM1 (Exec base: 0x20004000, Load base: 0x01003634, Size: 0x00001cd8, Max: 0x0000c000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object - 0x20004000 0x010034b8 0x00000004 Data RW 24 .data system_n32wb03x.o - 0x20004004 0x010034bc 0x00000008 Data RW 251 .data boot_usart.o - 0x2000400c 0x010034c4 0x00000001 Data RW 312 .data boot_cli.o - 0x2000400d 0x010034c5 0x00000003 PAD - 0x20004010 0x010034c8 0x0000003d Data RW 419 .data app_ota.o - 0x2000404d 0x01003505 0x00000001 Data RW 520 .data app_bootset.o - 0x2000404e 0x01003506 0x00000002 PAD - 0x20004050 0x01003508 0x0000000c Data RW 1189 .data n32wb03x_qflash.o - 0x2000405c 0x01003514 0x00000004 Data RW 1295 .data mc_p.l(errno.o) + 0x20004000 0x01003634 0x00000004 Data RW 24 .data system_n32wb03x.o + 0x20004004 0x01003638 0x00000008 Data RW 251 .data boot_usart.o + 0x2000400c 0x01003640 0x00000003 Data RW 314 .data boot_cli.o + 0x2000400f 0x01003643 0x00000001 PAD + 0x20004010 0x01003644 0x0000003d Data RW 429 .data app_ota.o + 0x2000404d 0x01003681 0x00000001 Data RW 530 .data app_bootset.o + 0x2000404e 0x01003682 0x00000002 PAD + 0x20004050 0x01003684 0x0000000c Data RW 1199 .data n32wb03x_qflash.o + 0x2000405c 0x01003690 0x00000004 Data RW 1305 .data mc_p.l(errno.o) 0x20004060 - 0x00000034 Zero RW 22 .bss system_n32wb03x.o 0x20004094 - 0x00000c00 Zero RW 250 .bss boot_usart.o - 0x20004c94 - 0x000000b0 Zero RW 309 .bss boot_cli.o - 0x20004d44 - 0x000001e7 Zero RW 418 .bss app_ota.o - 0x20004f2b 0x01003518 0x00000001 PAD - 0x20004f2c - 0x00000328 Zero RW 1187 .bss n32wb03x_qflash.o - 0x20005254 0x01003518 0x00000004 PAD - 0x20005258 - 0x00000800 Zero RW 1 STACK startup_n32wb03x.o + 0x20004c94 - 0x00000330 Zero RW 311 .bss boot_cli.o + 0x20004fc4 - 0x000001e7 Zero RW 428 .bss app_ota.o + 0x200051ab 0x01003694 0x00000001 PAD + 0x200051ac - 0x00000328 Zero RW 1197 .bss n32wb03x_qflash.o + 0x200054d4 0x01003694 0x00000004 PAD + 0x200054d8 - 0x00000800 Zero RW 1 STACK startup_n32wb03x.o ============================================================================== @@ -981,7 +1001,7 @@ Image component sizes 2092 1148 145 1 0 6739 app_bootset.o 2388 322 0 61 487 12597 app_ota.o - 2384 684 774 1 176 17112 boot_cli.o + 2764 730 774 3 816 18436 boot_cli.o 68 6 0 0 0 874 boot_crc32.o 472 66 0 8 3072 4161 boot_usart.o 628 262 0 0 0 5643 main.o @@ -994,9 +1014,9 @@ Image component sizes 900 60 472 4 52 124580 system_n32wb03x.o ---------------------------------------------------------------------- - 10248 2666 2438 92 6648 191969 Object Totals + 10628 2712 2438 92 7288 193293 Object Totals 0 0 32 0 0 0 (incl. Generated) - 14 0 7 5 5 0 (incl. Padding) + 14 0 7 3 5 0 (incl. Padding) ---------------------------------------------------------------------- @@ -1047,15 +1067,15 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug - 10922 2690 2574 96 6648 189369 Grand Totals - 10922 2690 2574 96 6648 189369 ELF Image Totals - 10922 2690 2574 96 0 0 ROM Totals + 11302 2736 2574 96 7288 190605 Grand Totals + 11302 2736 2574 96 7288 190605 ELF Image Totals + 11302 2736 2574 96 0 0 ROM Totals ============================================================================== - Total RO Size (Code + RO Data) 13496 ( 13.18kB) - Total RW Size (RW Data + ZI Data) 6744 ( 6.59kB) - Total ROM Size (Code + RO Data + RW Data) 13592 ( 13.27kB) + Total RO Size (Code + RO Data) 13876 ( 13.55kB) + Total RW Size (RW Data + ZI Data) 7384 ( 7.21kB) + Total ROM Size (Code + RO Data + RW Data) 13972 ( 13.64kB) ============================================================================== diff --git a/Boot/MDK-ARM/bin/caiic_boot.bin b/Boot/MDK-ARM/bin/caiic_boot.bin index f0d3351bc7821cadda6434047a713f8f8177b710..ae39ffd07908735f7d16ae5bafaa9e8b7d9d3e19 100644 GIT binary patch delta 2723 zcmXw53ve6N6}@+5>torL6%v1Cc~_RLwIj=)$f@0ssXt^RK}ifrNJ0YG#iVi|#lt5! z=>&&?1Oq83yfAfu7G(<5rhHs$Qj)f=9hy!lw1bpDhZ1N-rc^Do!*-fxC9S0GU6Ib{ z>D_zo_r1OEzBj%5*q(|HcLM(z0RD@{mo(TJzvHMkVqDP(_~Fi@=bG`rPt!KU?aad6 z%_X|ne(o6lk=YEL#^tL4{i~T|=;`_}2VzmYFM{&-w6ZyQf%Dle;Os<*lMPuAi{m(r zVp$BQIk6Js%I>}l`y~dQu6lD z#n4CukE48B9;XdqZU*HE@@t6QNg9pXvE+AXZqVN5Q65&KcNMvjJJ`*hEgI5<0p^I8KqLm;4ArP6RFqaZ>Ims{H+0$ugaIsjW3Kz5lZ-pjP6*Mne+cidR;q% zIHM_24k_q53Tljd1s%C5r>A$By=kn+B>TX)iCf6AR+F21CC7$Le*aUs{mJd5@kDNK zawK$11fE6t&8+U_Tp?qS4Dl-6b(U*tk$9p`sVHAc9T0v85Z08}RFl*zH4y%)npyzRmv3LP zzjITkuY-PmcGfZ@U9XNWj5;jd*nG*2-|+HVhT5;$xOD@+mJf~Hd*9vn>?gzh9vI*;p)pus>0Sws* z*p(TlW&A(=sK0cHGq$Et-jipU^8FZR_uCq|zj@iSwp%NoN>waeeZPatm!j|!&gyfTd-gme7d^rWo)ykmXLYT2-+6eG+}<$+)hvL&P|DrGC#O zIp3N%H0yZ3SQQUBb_6XGQv)3z?Q!Uv)R{#I!dnA*<;85Tv?ZV^6PiidMEp1{zCNMb z4Tv>yXsf!g#|drb3%XTh!74~vk7c<8@arj+UTIxmQd72*`5*~yAoGWlx_Oyc9y5My z78_y~(Gx2Xy>U~bPUK>fq9UQJd}O|jkW*QYRG$zeku*1_iX@Lz*{Lxxs6`yxsb%|Z?8fNm!bLye_@&qPA&O`Gr4H!RZmA;amRoR0zn=#AI*RRyM%_xX7v(eJ8y^=QhfJTKj!1fa7m)pod_&*;tWjWo|=ST7`wH-vH4 zNMA=t^Fk5LZ=~6?wbx9BGAK+LG-WhnBZCLheY}m7E5b$m@~~~TlNA4vI!M@8d>iqf zratADIBOV$kc5Z(4?lDmA1xKm9JbDSNSakqFjGF>3>|-O&`f`h*gqW_4dQKf`A0zKvF9chsQBRyqXh zZ>f(R6pBf9#jtLHS})sX9k!Llooqp1?z!qI2yvzh306cc9_i#{?GP`xX|;(HXd zjOwnO#<6b#kCOSix``c4&K8QLT{|>S7ZZIwA6p|lfXi4^=x%AuHd38+W;Nw=szXBzo7;(R$%3ygt|^c$ zmTYurH0Aru?yBehsj?1N7k4SmMqTabj~;V1BVNsZ(RhMe$g*4A68Bk_z3hIO`fYSW zlN%jB%<_SvVQ90&Y6Gp3omwlM6}c{*SMJS6pKLbbiZ64EN#K1!^RSmL7GD5Dno`AP zJq_FkIrffcwexiDu_VYdw3U{aEl})QMoxg7Y)a*opX8WRtmghsUrOA773@**QEo_O z6)ipJVZoNVh9rEtjDJY3^Dz=kW<>(!!7IEjTvjWoLW)`HB~NF z%$LsTg@&^h!iEV$!Y)yv71N_5r#M-rEE>l7NWJbTS zc4Z^$i=_^#fsw2z-AE4^fMy?Hs&M;ON)2=c<&@_$Y^ik!dzpP@BYL9UD{b6Z$`5#! zMsEq=49(Ltno0qGspG2vw_5 delta 2342 zcmXw5eQ*=k5r2Cp%d%u!5+TOevU#TuN3tbr91IE|AyJeb=2k;s#@W0EvuEL>=c$Na%$5~d7Nn07))iQ^`tX&RDiOF7-?bk{wH z&S>xb-tNAA``+%`)$x5JdtBW+3H^c)xQX-)5?kBuc_o~*jtT_2cfRsr9rT@6oB&%` z3HM{Jw}l<%j>DgslW(z(v=KPh#zelOb#H+LEt$?FNLTc-32B;ZbY6#32NRrhU!DYu zGB5(cvNVivL3{c>)H<)T3BH!QQDAAl(>+~yH@g+N&*||5O@I_(g5|D`w+i1w-U0o$ z+1-h`L_7(jAdMAZgdgU{K`PZqkWc>*H6GWGXMcoaTz{W}bW2U`wfKRvw6SAF7vmfA zj)~@J(n+9yYG}eLmWq6%{o@Bw{riQT`0Xz2ih}e|p>(2ux=&1^!lo_ohxPJOtc?&Ri9}-1__3 zfr>hAb%?!MQNMUpubo{XwunKINSlnxI~b(J?6ZoyxNmaoc7?ZMb%=n7uDGV$QF4$3 zJ!v9+ps>b8-A72_=%gb_q`zvU&N6GFjMne@)#N)}x$8wZyQGmYpBBUpwEuug#oTn+ z?s#9{?#LPpBcVvPDdH!A6;UFc(a4M;zixEQZ&Hq%>{B|cm&FFVY}W{F#Sj?sNxc=V zzNQg>0xc>>Fu6(Q^K8TX5*IGnt`vzVI%vpE1}1l!P(Lng!bQ*GqAOWbW)C{jmQQTK zigZcPm+{P&1-bN*U~R@ZOJUcL zWVbeBGEp0mrhYR~jBl9)2<3*oA{9DBU0$gjtMXSxu`twRxDgVxW%zLz)#Y}LAJ^q# zjjgGw;F>kIqiQ?6$=<4ph%8U)7GSRTuPcw)x&bXM7XkBN?oQDn(l7INbp1&FfTyJK z%d1wzhw^504Ecmk#r;`A@D0>fH~V$fEDCOwQW!R!;wV21r>s#!enz2!1xL5aep0=@ z?UD+@AaBU;sZLyQP3fdgRCWzp=)z&=sTNe+qzoYM+j#`%>lF57wWn^E27(PYen};Q zAKCxTdGY&N4t#VYjd_;y)R3zb7WT9WpXLa4$7};2l%vXfIq-H0c0>--1dcL$+Vg|z zCsi&A13FTc;Un4j|m|p`z5zgObO*N6g3z$5R2I`s)dj-+7cm59N zzgQ=&F^Vxb%AT%S3Qw`An#kHtg(igrkya^zWE{s1C6x5_%_YVVw<@j4cps4(mG-1> z&s^Ua;-C^q#`h4(udGgv;Yd@y+J6EUP?(GQOBdyUemZ~O*rYDl{VAI;0*j7gMwq3? z+*`;!JBj5GuV{ds^*#x`tjV`5v|saK)LJw{UNzq`pw3KgJX>RR#*nvZMWPck(UAYa zUi8&)Yc%$@uaz5D*{rV#mZn_(Isl1%Cosl23+&^7$c+}5x9)dX4^o%vu+KbFVA4I6 z+&xCh9<;*Uuj?~eLK|bYo-o$4#wbY`avuwXmT=GOOboSi`*ik;P?hH~{b#7>!l!1B z67K?mPmmEJi8(`Fp|CTd2jC*(>!0JwH8xb=vGR}t6y{4RAR_)Eh+t4=REuNQe#saU)RfXh+BC#3o{q90g z+=l&=kT=5wa`TO#LR^A1vLNrwvsK}(AhQ?4KKLSaI_%_*{Cp{aDAIB}fiR99BzGx+ zPLtnC;NcPiM-fYi*IEgjNBj}Ck~m@w@kOLQp1@ZqcOjKH2%JIQ0OA1RHpD|nal}|K z32?l{{6a?|)4zeF?rj?5xzCzYbFHm>%{lxNgZ+{ApyI?r0+q`M^x! 0u) + { + uint8_t last = (uint8_t)((s_histHead + CLI_HISTORY_SIZE - 1u) % CLI_HISTORY_SIZE); + if (strcmp(s_history[last], line) == 0) + { + return; + } + } + strcpy(s_history[s_histHead], line); + s_histHead = (uint8_t)((s_histHead + 1u) % CLI_HISTORY_SIZE); + if (s_histCount < CLI_HISTORY_SIZE) + { + s_histCount++; + } +} + +/** + * @brief Get a history entry; nav = 0 is the newest entry. + */ +static const char* cli_history_get(int nav) +{ + int idx = ((int)s_histHead - 1 - nav + CLI_HISTORY_SIZE) % CLI_HISTORY_SIZE; + return s_history[idx]; +} + /** * @brief Download-mode main loop. Never returns (leaves via reset only). */ void boot_cli_run(void) { static char s_line[CLI_LINE_SIZE]; - uint16_t len = 0; + uint16_t len = 0; + uint16_t shownLen = 0; /* chars currently displayed after the prompt */ + uint8_t escState = 0; /* 0=normal, 1=got ESC, 2=got ESC '[' */ + int histNav = -1; /* -1 = editing, 0.. = history entry (0=newest) */ uint32_t otaLastRx = 0; cli_write("\r\nCLI ready (bootloader download mode). Type 'help' for commands.\r\n" @@ -504,7 +552,8 @@ void boot_cli_run(void) s_otaMode = 0; app_ota_chan_idle(); cli_write("\r\n[ota] binary mode OFF (idle)\r\n" BOOT_CLI_PROMPT); - len = 0; + len = 0; + shownLen = 0; } if (boot_usart_read(&ch) == 0) @@ -519,19 +568,67 @@ void boot_cli_run(void) { s_otaMode = 0; cli_write("\r\n[ota] binary mode OFF (abort)\r\n" BOOT_CLI_PROMPT); - len = 0; + len = 0; + shownLen = 0; } continue; } + /* Escape sequences (arrow keys: ESC '[' 'A'/'B') */ + if (escState == 1) + { + escState = (ch == '[') ? 2 : 0; + continue; + } + if (escState == 2) + { + escState = 0; + if (ch == 'A') /* UP: older history entry */ + { + if (histNav + 1 < (int)s_histCount) + { + histNav++; + strcpy(s_line, cli_history_get(histNav)); + shownLen = boot_cli_redraw(s_line, shownLen); + len = (uint16_t)strlen(s_line); + } + } + else if (ch == 'B') /* DOWN: newer entry / back to empty line */ + { + if (histNav >= 0) + { + histNav--; + if (histNav >= 0) + { + strcpy(s_line, cli_history_get(histNav)); + } + else + { + s_line[0] = '\0'; + } + shownLen = boot_cli_redraw(s_line, shownLen); + len = (uint16_t)strlen(s_line); + } + } + /* other escape sequences are ignored */ + continue; + } + switch (ch) { + case CLI_KEY_ESC: + escState = 1; + break; + case '\r': case '\n': cli_write("\r\n"); s_line[len] = '\0'; + cli_history_add(s_line); /* copy before dispatch tokenizes in place */ (void)cli_exec_line(s_line); - len = 0; + len = 0; + shownLen = 0; + histNav = -1; cli_write(BOOT_CLI_PROMPT); break; @@ -541,18 +638,21 @@ void boot_cli_run(void) { len--; cli_write("\b \b"); + shownLen = len; } break; case CLI_KEY_TAB: - len = boot_cli_tab_complete(s_line, len); + len = boot_cli_tab_complete(s_line, len); + shownLen = len; break; default: - if (ch >= 0x20u && len < CLI_LINE_SIZE - 1u) + if (ch >= 0x20u && ch < 0x7Fu && len < CLI_LINE_SIZE - 1u) { s_line[len++] = (char)ch; boot_usart_write(&ch, 1); /* echo */ + shownLen = len; } break; } diff --git a/Boot/src/boot_version.h b/Boot/src/boot_version.h index fd410f9..64aa2f9 100644 --- a/Boot/src/boot_version.h +++ b/Boot/src/boot_version.h @@ -6,6 +6,6 @@ #ifndef __BOOT_VERSION_H__ #define __BOOT_VERSION_H__ -#define BOOT_FW_VERSION "V1.01.03" +#define BOOT_FW_VERSION "V1.01.04" #endif /* __BOOT_VERSION_H__ */ diff --git a/docs/开发日志.md b/docs/开发日志.md index 835f961..2e84cf2 100644 --- a/docs/开发日志.md +++ b/docs/开发日志.md @@ -1431,3 +1431,21 @@ APP2 链接的镜像发向 APP1 区。设备端 END 校验(向量表 Reset PC 一致(提示只放在 `help` 里)。 - 版本:`Boot/src/boot_version.h` V1.01.02 → V1.01.03;构建 0E/0W, `Code=10922 RO-data=2574 RW-data=96 ZI-data=6648`。 + +## 56. Boot download CLI 移植 UP/DOWN 历史(2026-09-06,Boot V1.01.04) + +- 从 APP 的 `mcm-ddc-ble/src/app_cli.c` 把 **UP/DOWN 箭头历史导航**移植到 + `Boot/src/boot_cli.c`,与 TAB 补全一起使 Boot CLI 行编辑能力与 APP 对齐: + - 命令历史环形缓冲 `s_history[CLI_HISTORY_SIZE=8][CLI_LINE_SIZE=80]` + + `cli_history_add()`(跳过空行/相邻重复)/ `cli_history_get(nav)`; + - `boot_cli_run()`:新增 `escState`(ESC / ESC '[' 两级状态机,识别 + `ESC [ A`=上、`ESC [ B`=下)、`histNav`(-1=编辑,0..=历史索引)、 + `shownLen`(屏显行长,用于重画);UP 取更早历史、DOWN 取更新/回空行, + 切换时 `boot_cli_redraw()` 重画提示符+整行; + - 回车执行前 `cli_history_add()` 入栈并复位 `histNav/shownLen`;退格/回显/ + TAB 均同步维护 `shownLen`;普通字符回显加 `ch < 0x7F` 过滤(对齐 APP); + - `help` 提示串由 `keys: TAB = complete` 更新为 + `keys: TAB = complete, UP/DOWN = history`(与 APP 一致)。 +- 版本:`Boot/src/boot_version.h` V1.01.03 → V1.01.04;构建 0E/0W, + `Code=11302 RO-data=2574 RW-data=96 ZI-data=7288`(+640B 历史环), + bin 13972B(16KB 区内),`__initial_sp=0x20005CD8`(远离 0x2000C000 悬崖)。 diff --git a/tools/out/mothercup_ble_prod.bin b/tools/out/mothercup_ble_prod.bin index 4728338a6f7c869ffb321e312daf4913da49af41..90a6465b61e47265ff154c8652effebb1f1e3ffc 100644 GIT binary patch delta 2729 zcmXw54R9O96@KsZW682DD=6!9W0o4O0g~QCgrjzpgb2q^)a*rc(;-ASKYD1X__PRSWHKou-_mlXQJ&(iyGx zz3=_*-rKkP>`BwJCry>_?*RT20Q?t?&uOsJ0q0>~%)F`@@ckW!&$i;epJnZcTbY&n zHkayVd$}X{M`ky4nOCj_46J36p||_}0*JGbm4xUqj*!(rDI>q`yUTqxL3`@~|4e)96NSe-C@ybY|qFYMbj^ zfFR)bi9>T{sZ28XOF!61>b1pf^j}rHIfU|M#j?5ag)u2c2|t|E9qTen@jq!_(~dCC zXo^%o3c8+xnv*_3M{X?W>3zXoGdEzGy=UIYEfiQ=iJN<&z=lc!y^j_4rni#D!-d`H zk;qLkcoOB;^17F^%MoZn^1ebOJxcSQW$$Jc7KhU;aje(yW)Cpi)3xzR%QoD0F?am- zsR2wP4=Lcy(rpp@@fBqCh6;W|vRaRk=UTiHPt@xw$`>>Hgx>)~HRWZsMCy|o34ck= zECA^H;8=3Jbz_&mlYRkq#yTTit&T5@I<3C+xfQXo2rW|mB3(l!_B^<4sWN_e&~nvM z%|Jw_YPXn45>R#hf0I7Sc}n`v=_Nm#FTI}ac(JaMJ;;jXJkWWKFBN zM5FwN%!-tz7&U7Mnl2Lz5m7?>R#&~H{fqql z^R^hs4;7%*n9`{Og>mP>`Bw%q=S{@jQvjbKAxOOxZH_%ty=t=J1h~Nit+%;==c17i z$fE^V)Rbqmoy*QE$@$w^?r5;?*6`GT^-sVL(^t}zCyK-5@0x;cjWZzMKvfFK3+XM( zRt~b7%aT6{_GpS%1F<9l{B>lxgRIspTm3$be#>N1SJ^INlDkx{r_-E&T@qS#ykD$N zMx5Kj)`_Ws&JT7u^-b!^qXf~-p`!9^zE8R#q$v|xiL{aUaaw#sO1B#jYm?AkeSVh< z+AZgGtEy$IFljxQ=Tg9Lpj7&#^`S{k*-GYvB)E>u?@R0E2CNMS1CIxzp-fcc{~=}YMumEBXj3G?h+Z99I#u&&y_n_TEk802@=Qp!82 z?si)JpPn-l{kE!CkEX0C^3q*t06NN2U8nn4PH%FrW_cc?dLePVA&RqR`Z_|E7mPH& znq^PceQh$5Lt)CGDWf?%8Qh%>@^(_Lj2iisQTuEcDgGm~pRh0acH%$Ie9SL#wkQY@ z2@m!ky!RkJP$rx{Xq)wrG_Rsyp?rKf5ZuH^Gfnh=MFyMsEBUaq&%kTS>ltSV8X(#b zLUvRAYGGdnct_Z>AB76i9nD}g);xA0a-8Vuq$Gjb)Jk%ktjS1-w-1o*X}6lz8d{kQ`sAUOs^KL>0|J*ZPuO_90K4vmNzh(Gr^7^?MKpe3SVr~M42$nj&~mD~3K~bg z4m?VhtLi7Vx45>~)kv1kUsrFp*Vmk{JP&Ww4e>*R99;zC8~(2xKh!vl)hnrFm(!IB z%B|XgdAf(_>-pI_;ci^P;zEzNIp0im)|J=(_)xrIEt*)4IOqVi&axx^ao@ARd_Yp{|%AU?nisjSl5iyjvC z);G4O-Y`y24VaUn&_adNm9rh48ZadEXF@^gVE1`9beMCtXa%*TPHL)L!o-)&>4k=~ zR>Fn}L&7dnp_%BhQBYhg>%9Wq>?>_ve2R^e>gY-H(UWFpZy({lAOvnAeS<{r?Q*{!N?0a%0=<2&f7Aej$7Kh= zMq0}Jlo@EJ` z@3PzDH{!7bOn^99fN^$=nF6s)B>^`5W0ZJYJCywijxp^+4#ZnZYNyEujH#0zG@pyD z%iEJ}vm`=bXl68N5y}L%#rE-oDE`AjAAWla+oB*oR47Xh%?=6)boiod7&g|{75J3DP0l@fSX>$!&ovQ-r#I4x)-LWEOij1f3ZBs=qhb2@iAYibW=%ZIHT^%K8#i_ zs=KqX_@fDO1VlM+Sb0J*cEAIPb80+0fa9N3gMUOJbNyMG{&kq$&`GHMH`OVpwGaA6 zl*t_<-H-u}%oENcJRWyUER%mlq@k;}`|y+iVr8d_PZo_W3fd zf3QC>Pi$h_*a%OpkSF zXg1zXpe#Z-D=O&9ha3?P($)66E3PYcE4C4a8K&+!o9#G zHR`M!VAkAEcULwrD}(g6m5tRCTK)WTpqa(R>##_|fwXIg{X;H%xPZvdbGowvXZhvxgI6?$PPG9@`e+aZS7=qk*|s zvxyG6ulg}BCfThGm`t3Nh%;{_OYl(>KjD}$kHGO^L6h!Q57zi6r(!06pn*2!zqSi$KaSHs!Pwy z9B;zWrO=<%uIap>06)U&(g%tI6|Tw=&VjIjPunp{j%2G zuuTQtiW|SG5Z;IEf9E{-eKQAMZXMU-UdD2|R3p=nyOaMkM>toHbr|>x6!{{))17ygi8dHO!lF{yuH3Yxcj4$pdNN zoUK3Gd*I_$1;E zxg!x9Bw~x)mGJJkF*u1hAU7vsJBa9$S0*NLe-W&4Kc@X0<(&BDY*FG_z_W2OPDCN6OUq??BKQEDqio}gOod8E8^d?+m4Sm| zZ6#z`F%M>Bi(G;=vxKpCe<6)w)QIav5KfB zeU80|Nt?N{q!COwR*JlZnDl_WTNq4p(c&j`SJO(kK~qgZxJm!s`vhCXnbWAuoK9Iv#Q` z`=4GyAd0liMj(Wv8_88hAY$-42s~U$-~eI~@x2xTXAob(o)SZ>B0h&S$P)Mp*PTeE zb^<4mH;mYixD)XxQVcOxP67;TGQJQlWQNv~)IF_}tm(5h0&iT|h(4WPvYx3sjsI@2 mUvm8@pIk_wYAJz!oad?uIh$(lx>TA