YF30137 七脚数码管显示驱动(Charlieplexing) + 取消 Boot strap 下载检测 (APP V1.00.30 / Boot V1.00.06)

This commit is contained in:
evan.liu 2026-09-06 20:11:53 +08:00
parent 5917cafb0c
commit e74751634b
24 changed files with 8280 additions and 7562 deletions

View File

@ -31,14 +31,9 @@ Section Cross References
system_n32wb03x.o(i.read_flash_ID) refers to system_n32wb03x.o(i.__set_PRIMASK) for __set_PRIMASK
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.boot_dl_strap_active) refers to n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphClk) for RCC_EnableAPB2PeriphClk
main.o(i.boot_dl_strap_active) refers to n32wb03x_gpio.o(i.GPIO_InitStruct) for GPIO_InitStruct
main.o(i.boot_dl_strap_active) refers to n32wb03x_gpio.o(i.GPIO_InitPeripheral) for GPIO_InitPeripheral
main.o(i.boot_dl_strap_active) refers to n32wb03x_gpio.o(i.GPIO_ReadInputDataBit) for GPIO_ReadInputDataBit
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 main.o(i.boot_dl_strap_active) for boot_dl_strap_active
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
@ -346,6 +341,7 @@ Removing Unused input sections from the image.
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).
@ -388,7 +384,7 @@ Removing Unused input sections from the image.
Removing n32wb03x_qflash.o(i.Qflash_Read), (68 bytes).
Removing n32wb03x_gpio.o(i.__ARM_common_switch8), (28 bytes).
97 unused section(s) (total 3906 bytes) removed from the image.
98 unused section(s) (total 3926 bytes) removed from the image.
==============================================================================
@ -398,46 +394,46 @@ Image Symbol Table
Symbol Name Value Ov Type Size Object(Section)
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isgraph_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 ispunct_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 isspace_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 ctype_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isgraph_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 isxdigit_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isupper_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/ctype/ctype.c 0x00000000 Number 0 ispunct_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isprint_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 entry7b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry8a.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 entry11b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.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 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 entry9b.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 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 memcpya.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/strcpy.c 0x00000000 Number 0 strcpy.o ABSOLUTE
../clib/microlib/string/strlen.c 0x00000000 Number 0 strlen.o ABSOLUTE
../clib/microlib/string/strncmp.c 0x00000000 Number 0 strncmp.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
../clib/scanf.c 0x00000000 Number 0 _chval.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
@ -514,117 +510,114 @@ Image Symbol Table
i.DMA_RequestRemap 0x01000dbc Section 0 n32wb03x_dma.o(i.DMA_RequestRemap)
i.GPIO_InitPeripheral 0x01000dcc Section 0 n32wb03x_gpio.o(i.GPIO_InitPeripheral)
i.GPIO_InitStruct 0x01000ed4 Section 0 n32wb03x_gpio.o(i.GPIO_InitStruct)
i.GPIO_ReadInputDataBit 0x01000ef0 Section 0 n32wb03x_gpio.o(i.GPIO_ReadInputDataBit)
i.OTPTrim_Read 0x01000f04 Section 0 system_n32wb03x.o(i.OTPTrim_Read)
i.Qflash_Erase_Sector 0x01000fd0 Section 0 n32wb03x_qflash.o(i.Qflash_Erase_Sector)
i.Qflash_Init 0x0100100c Section 0 n32wb03x_qflash.o(i.Qflash_Init)
i.Qflash_Write 0x01001044 Section 0 n32wb03x_qflash.o(i.Qflash_Write)
i.RCC_EnableAHBPeriphClk 0x01001088 Section 0 n32wb03x_rcc.o(i.RCC_EnableAHBPeriphClk)
i.RCC_EnableAPB2PeriphClk 0x010010a8 Section 0 n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphClk)
i.RCC_GetClocksFreqValue 0x010010c8 Section 0 n32wb03x_rcc.o(i.RCC_GetClocksFreqValue)
i.RCC_HsiCalib 0x0100116c Section 0 system_n32wb03x.o(i.RCC_HsiCalib)
RCC_HsiCalib 0x0100116d Thumb Code 296 system_n32wb03x.o(i.RCC_HsiCalib)
i.SystemInit 0x0100129c Section 0 system_n32wb03x.o(i.SystemInit)
i.SystemTrimValueRead 0x010013b8 Section 0 system_n32wb03x.o(i.SystemTrimValueRead)
i.USART_Enable 0x010013cc Section 0 n32wb03x_usart.o(i.USART_Enable)
i.USART_EnableDMA 0x010013ec Section 0 n32wb03x_usart.o(i.USART_EnableDMA)
i.USART_GetFlagStatus 0x01001400 Section 0 n32wb03x_usart.o(i.USART_GetFlagStatus)
i.USART_Init 0x01001420 Section 0 n32wb03x_usart.o(i.USART_Init)
i.USART_SendData 0x010014d4 Section 0 n32wb03x_usart.o(i.USART_SendData)
i.__aeabi_errno_addr 0x010014dc Section 0 errno.o(i.__aeabi_errno_addr)
i.__scatterload_copy 0x010014e4 Section 14 handlers.o(i.__scatterload_copy)
i.__scatterload_null 0x010014f2 Section 2 handlers.o(i.__scatterload_null)
i.__scatterload_zeroinit 0x010014f4 Section 14 handlers.o(i.__scatterload_zeroinit)
i.__set_PRIMASK 0x01001502 Section 0 system_n32wb03x.o(i.__set_PRIMASK)
__set_PRIMASK 0x01001503 Thumb Code 6 system_n32wb03x.o(i.__set_PRIMASK)
i.__set_PRIMASK 0x01001508 Section 0 n32wb03x_qflash.o(i.__set_PRIMASK)
__set_PRIMASK 0x01001509 Thumb Code 6 n32wb03x_qflash.o(i.__set_PRIMASK)
i.app_ota_abort 0x01001510 Section 0 app_ota.o(i.app_ota_abort)
i.app_ota_chan_idle 0x0100154c Section 0 app_ota.o(i.app_ota_chan_idle)
i.app_ota_chan_rx 0x01001560 Section 0 app_ota.o(i.app_ota_chan_rx)
i.app_ota_chan_rx_uart 0x010016a0 Section 0 app_ota.o(i.app_ota_chan_rx_uart)
i.app_ota_handle_frame 0x010016c4 Section 0 app_ota.o(i.app_ota_handle_frame)
i.app_ota_reset_poll 0x01001740 Section 0 app_ota.o(i.app_ota_reset_poll)
i.boot_cli_redraw 0x0100179c Section 0 boot_cli.o(i.boot_cli_redraw)
boot_cli_redraw 0x0100179d Thumb Code 60 boot_cli.o(i.boot_cli_redraw)
i.boot_cli_run 0x010017e8 Section 0 boot_cli.o(i.boot_cli_run)
i.boot_cli_tab_complete 0x01001a08 Section 0 boot_cli.o(i.boot_cli_tab_complete)
boot_cli_tab_complete 0x01001a09 Thumb Code 306 boot_cli.o(i.boot_cli_tab_complete)
i.boot_delay_ms 0x01001b4c Section 0 boot_usart.o(i.boot_delay_ms)
i.boot_dl_strap_active 0x01001b64 Section 0 main.o(i.boot_dl_strap_active)
boot_dl_strap_active 0x01001b65 Thumb Code 58 main.o(i.boot_dl_strap_active)
i.boot_millis 0x01001ba4 Section 0 boot_usart.o(i.boot_millis)
i.boot_usart_init 0x01001bcc Section 0 boot_usart.o(i.boot_usart_init)
i.boot_usart_read 0x01001cdc Section 0 boot_usart.o(i.boot_usart_read)
i.boot_usart_rx_head 0x01001d1c Section 0 boot_usart.o(i.boot_usart_rx_head)
boot_usart_rx_head 0x01001d1d Thumb Code 18 boot_usart.o(i.boot_usart_rx_head)
i.boot_usart_write 0x01001d34 Section 0 boot_usart.o(i.boot_usart_write)
i.bootset_commit 0x01001d64 Section 0 app_bootset.o(i.bootset_commit)
bootset_commit 0x01001d65 Thumb Code 74 app_bootset.o(i.bootset_commit)
i.bootset_crc 0x01001db8 Section 0 app_bootset.o(i.bootset_crc)
bootset_crc 0x01001db9 Thumb Code 14 app_bootset.o(i.bootset_crc)
i.bootset_ensure_qflash 0x01001dc8 Section 0 app_bootset.o(i.bootset_ensure_qflash)
bootset_ensure_qflash 0x01001dc9 Thumb Code 22 app_bootset.o(i.bootset_ensure_qflash)
i.bootset_print 0x01001de4 Section 0 app_bootset.o(i.bootset_print)
bootset_print 0x01001de5 Thumb Code 98 app_bootset.o(i.bootset_print)
i.bootset_valid 0x01001f50 Section 0 app_bootset.o(i.bootset_valid)
bootset_valid 0x01001f51 Thumb Code 32 app_bootset.o(i.bootset_valid)
i.caiic_crc32 0x01001f74 Section 0 boot_crc32.o(i.caiic_crc32)
i.cli_exec_line 0x01001fb8 Section 0 boot_cli.o(i.cli_exec_line)
cli_exec_line 0x01001fb9 Thumb Code 162 boot_cli.o(i.cli_exec_line)
i.cli_history_add 0x01002084 Section 0 boot_cli.o(i.cli_history_add)
cli_history_add 0x01002085 Thumb Code 106 boot_cli.o(i.cli_history_add)
i.cli_history_get 0x010020fc Section 0 boot_cli.o(i.cli_history_get)
cli_history_get 0x010020fd Thumb Code 36 boot_cli.o(i.cli_history_get)
i.cli_printf 0x01002128 Section 0 boot_cli.o(i.cli_printf)
i.cli_write 0x010022c4 Section 0 boot_cli.o(i.cli_write)
i.image_sane 0x010022dc Section 0 main.o(i.image_sane)
image_sane 0x010022dd Thumb Code 44 main.o(i.image_sane)
i.jump_to_app 0x01002310 Section 0 main.o(i.jump_to_app)
jump_to_app 0x01002311 Thumb Code 30 main.o(i.jump_to_app)
i.main 0x01002334 Section 0 main.o(i.main)
i.ota_crc16 0x010024f8 Section 0 app_ota.o(i.ota_crc16)
ota_crc16 0x010024f9 Thumb Code 68 app_ota.o(i.ota_crc16)
i.ota_erase_up_to 0x01002544 Section 0 app_ota.o(i.ota_erase_up_to)
ota_erase_up_to 0x01002545 Thumb Code 54 app_ota.o(i.ota_erase_up_to)
i.ota_on_begin 0x01002584 Section 0 app_ota.o(i.ota_on_begin)
ota_on_begin 0x01002585 Thumb Code 294 app_ota.o(i.ota_on_begin)
i.ota_on_data 0x010026f4 Section 0 app_ota.o(i.ota_on_data)
ota_on_data 0x010026f5 Thumb Code 396 app_ota.o(i.ota_on_data)
i.ota_on_end 0x0100289c Section 0 app_ota.o(i.ota_on_end)
ota_on_end 0x0100289d Thumb Code 326 app_ota.o(i.ota_on_end)
i.ota_program 0x01002a0c Section 0 app_ota.o(i.ota_program)
ota_program 0x01002a0d Thumb Code 46 app_ota.o(i.ota_program)
i.ota_rd32 0x01002a44 Section 0 app_ota.o(i.ota_rd32)
ota_rd32 0x01002a45 Thumb Code 24 app_ota.o(i.ota_rd32)
i.ota_respond 0x01002a5c Section 0 app_ota.o(i.ota_respond)
ota_respond 0x01002a5d Thumb Code 118 app_ota.o(i.ota_respond)
i.ota_uart_sink 0x01002ad8 Section 0 app_ota.o(i.ota_uart_sink)
ota_uart_sink 0x01002ad9 Thumb Code 22 app_ota.o(i.ota_uart_sink)
i.ota_update_bootsetting 0x01002af4 Section 0 app_ota.o(i.ota_update_bootsetting)
ota_update_bootsetting 0x01002af5 Thumb Code 174 app_ota.o(i.ota_update_bootsetting)
i.parse_u32 0x01002bc0 Section 0 app_bootset.o(i.parse_u32)
parse_u32 0x01002bc1 Thumb Code 46 app_bootset.o(i.parse_u32)
i.puts_boot 0x01002bee Section 0 main.o(i.puts_boot)
puts_boot 0x01002bef Thumb Code 24 main.o(i.puts_boot)
i.read_flash_ID 0x01002c08 Section 0 system_n32wb03x.o(i.read_flash_ID)
read_flash_ID 0x01002c09 Thumb Code 62 system_n32wb03x.o(i.read_flash_ID)
i.str_pad 0x01002c4c Section 0 boot_cli.o(i.str_pad)
str_pad 0x01002c4d Thumb Code 78 boot_cli.o(i.str_pad)
i.u32_to_str 0x01002c9a Section 0 boot_cli.o(i.u32_to_str)
u32_to_str 0x01002c9b Thumb Code 108 boot_cli.o(i.u32_to_str)
.constdata 0x01002d06 Section 472 system_n32wb03x.o(.constdata)
.constdata 0x01002ee0 Section 108 boot_cli.o(.constdata)
s_cmds 0x01002ee0 Data 108 boot_cli.o(.constdata)
.constdata 0x01002f4c Section 12 n32wb03x_rcc.o(.constdata)
s_ApbPresTable 0x01002f4c Data 8 n32wb03x_rcc.o(.constdata)
s_AhbPresTable 0x01002f54 Data 4 n32wb03x_rcc.o(.constdata)
.constdata 0x01002f58 Section 804 n32wb03x_qflash.o(.constdata)
.constdata 0x0100327c Section 129 ctype_o.o(.constdata)
.constdata 0x01003300 Section 4 ctype_o.o(.constdata)
table 0x01003300 Data 4 ctype_o.o(.constdata)
.conststring 0x01003304 Section 666 boot_cli.o(.conststring)
.conststring 0x010035a0 Section 145 app_bootset.o(.conststring)
i.OTPTrim_Read 0x01000ef0 Section 0 system_n32wb03x.o(i.OTPTrim_Read)
i.Qflash_Erase_Sector 0x01000fbc Section 0 n32wb03x_qflash.o(i.Qflash_Erase_Sector)
i.Qflash_Init 0x01000ff8 Section 0 n32wb03x_qflash.o(i.Qflash_Init)
i.Qflash_Write 0x01001030 Section 0 n32wb03x_qflash.o(i.Qflash_Write)
i.RCC_EnableAHBPeriphClk 0x01001074 Section 0 n32wb03x_rcc.o(i.RCC_EnableAHBPeriphClk)
i.RCC_EnableAPB2PeriphClk 0x01001094 Section 0 n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphClk)
i.RCC_GetClocksFreqValue 0x010010b4 Section 0 n32wb03x_rcc.o(i.RCC_GetClocksFreqValue)
i.RCC_HsiCalib 0x01001158 Section 0 system_n32wb03x.o(i.RCC_HsiCalib)
RCC_HsiCalib 0x01001159 Thumb Code 296 system_n32wb03x.o(i.RCC_HsiCalib)
i.SystemInit 0x01001288 Section 0 system_n32wb03x.o(i.SystemInit)
i.SystemTrimValueRead 0x010013a4 Section 0 system_n32wb03x.o(i.SystemTrimValueRead)
i.USART_Enable 0x010013b8 Section 0 n32wb03x_usart.o(i.USART_Enable)
i.USART_EnableDMA 0x010013d8 Section 0 n32wb03x_usart.o(i.USART_EnableDMA)
i.USART_GetFlagStatus 0x010013ec Section 0 n32wb03x_usart.o(i.USART_GetFlagStatus)
i.USART_Init 0x0100140c Section 0 n32wb03x_usart.o(i.USART_Init)
i.USART_SendData 0x010014c0 Section 0 n32wb03x_usart.o(i.USART_SendData)
i.__aeabi_errno_addr 0x010014c8 Section 0 errno.o(i.__aeabi_errno_addr)
i.__scatterload_copy 0x010014d0 Section 14 handlers.o(i.__scatterload_copy)
i.__scatterload_null 0x010014de Section 2 handlers.o(i.__scatterload_null)
i.__scatterload_zeroinit 0x010014e0 Section 14 handlers.o(i.__scatterload_zeroinit)
i.__set_PRIMASK 0x010014ee Section 0 system_n32wb03x.o(i.__set_PRIMASK)
__set_PRIMASK 0x010014ef Thumb Code 6 system_n32wb03x.o(i.__set_PRIMASK)
i.__set_PRIMASK 0x010014f4 Section 0 n32wb03x_qflash.o(i.__set_PRIMASK)
__set_PRIMASK 0x010014f5 Thumb Code 6 n32wb03x_qflash.o(i.__set_PRIMASK)
i.app_ota_abort 0x010014fc Section 0 app_ota.o(i.app_ota_abort)
i.app_ota_chan_idle 0x01001538 Section 0 app_ota.o(i.app_ota_chan_idle)
i.app_ota_chan_rx 0x0100154c Section 0 app_ota.o(i.app_ota_chan_rx)
i.app_ota_chan_rx_uart 0x0100168c Section 0 app_ota.o(i.app_ota_chan_rx_uart)
i.app_ota_handle_frame 0x010016b0 Section 0 app_ota.o(i.app_ota_handle_frame)
i.app_ota_reset_poll 0x0100172c Section 0 app_ota.o(i.app_ota_reset_poll)
i.boot_cli_redraw 0x01001788 Section 0 boot_cli.o(i.boot_cli_redraw)
boot_cli_redraw 0x01001789 Thumb Code 60 boot_cli.o(i.boot_cli_redraw)
i.boot_cli_run 0x010017d4 Section 0 boot_cli.o(i.boot_cli_run)
i.boot_cli_tab_complete 0x010019f4 Section 0 boot_cli.o(i.boot_cli_tab_complete)
boot_cli_tab_complete 0x010019f5 Thumb Code 306 boot_cli.o(i.boot_cli_tab_complete)
i.boot_delay_ms 0x01001b38 Section 0 boot_usart.o(i.boot_delay_ms)
i.boot_millis 0x01001b50 Section 0 boot_usart.o(i.boot_millis)
i.boot_usart_init 0x01001b78 Section 0 boot_usart.o(i.boot_usart_init)
i.boot_usart_read 0x01001c88 Section 0 boot_usart.o(i.boot_usart_read)
i.boot_usart_rx_head 0x01001cc8 Section 0 boot_usart.o(i.boot_usart_rx_head)
boot_usart_rx_head 0x01001cc9 Thumb Code 18 boot_usart.o(i.boot_usart_rx_head)
i.boot_usart_write 0x01001ce0 Section 0 boot_usart.o(i.boot_usart_write)
i.bootset_commit 0x01001d10 Section 0 app_bootset.o(i.bootset_commit)
bootset_commit 0x01001d11 Thumb Code 74 app_bootset.o(i.bootset_commit)
i.bootset_crc 0x01001d64 Section 0 app_bootset.o(i.bootset_crc)
bootset_crc 0x01001d65 Thumb Code 14 app_bootset.o(i.bootset_crc)
i.bootset_ensure_qflash 0x01001d74 Section 0 app_bootset.o(i.bootset_ensure_qflash)
bootset_ensure_qflash 0x01001d75 Thumb Code 22 app_bootset.o(i.bootset_ensure_qflash)
i.bootset_print 0x01001d90 Section 0 app_bootset.o(i.bootset_print)
bootset_print 0x01001d91 Thumb Code 98 app_bootset.o(i.bootset_print)
i.bootset_valid 0x01001efc Section 0 app_bootset.o(i.bootset_valid)
bootset_valid 0x01001efd Thumb Code 32 app_bootset.o(i.bootset_valid)
i.caiic_crc32 0x01001f20 Section 0 boot_crc32.o(i.caiic_crc32)
i.cli_exec_line 0x01001f64 Section 0 boot_cli.o(i.cli_exec_line)
cli_exec_line 0x01001f65 Thumb Code 162 boot_cli.o(i.cli_exec_line)
i.cli_history_add 0x01002030 Section 0 boot_cli.o(i.cli_history_add)
cli_history_add 0x01002031 Thumb Code 106 boot_cli.o(i.cli_history_add)
i.cli_history_get 0x010020a8 Section 0 boot_cli.o(i.cli_history_get)
cli_history_get 0x010020a9 Thumb Code 36 boot_cli.o(i.cli_history_get)
i.cli_printf 0x010020d4 Section 0 boot_cli.o(i.cli_printf)
i.cli_write 0x01002270 Section 0 boot_cli.o(i.cli_write)
i.image_sane 0x01002288 Section 0 main.o(i.image_sane)
image_sane 0x01002289 Thumb Code 44 main.o(i.image_sane)
i.jump_to_app 0x010022bc Section 0 main.o(i.jump_to_app)
jump_to_app 0x010022bd Thumb Code 30 main.o(i.jump_to_app)
i.main 0x010022e0 Section 0 main.o(i.main)
i.ota_crc16 0x01002464 Section 0 app_ota.o(i.ota_crc16)
ota_crc16 0x01002465 Thumb Code 68 app_ota.o(i.ota_crc16)
i.ota_erase_up_to 0x010024b0 Section 0 app_ota.o(i.ota_erase_up_to)
ota_erase_up_to 0x010024b1 Thumb Code 54 app_ota.o(i.ota_erase_up_to)
i.ota_on_begin 0x010024f0 Section 0 app_ota.o(i.ota_on_begin)
ota_on_begin 0x010024f1 Thumb Code 294 app_ota.o(i.ota_on_begin)
i.ota_on_data 0x01002660 Section 0 app_ota.o(i.ota_on_data)
ota_on_data 0x01002661 Thumb Code 396 app_ota.o(i.ota_on_data)
i.ota_on_end 0x01002808 Section 0 app_ota.o(i.ota_on_end)
ota_on_end 0x01002809 Thumb Code 326 app_ota.o(i.ota_on_end)
i.ota_program 0x01002978 Section 0 app_ota.o(i.ota_program)
ota_program 0x01002979 Thumb Code 46 app_ota.o(i.ota_program)
i.ota_rd32 0x010029b0 Section 0 app_ota.o(i.ota_rd32)
ota_rd32 0x010029b1 Thumb Code 24 app_ota.o(i.ota_rd32)
i.ota_respond 0x010029c8 Section 0 app_ota.o(i.ota_respond)
ota_respond 0x010029c9 Thumb Code 118 app_ota.o(i.ota_respond)
i.ota_uart_sink 0x01002a44 Section 0 app_ota.o(i.ota_uart_sink)
ota_uart_sink 0x01002a45 Thumb Code 22 app_ota.o(i.ota_uart_sink)
i.ota_update_bootsetting 0x01002a60 Section 0 app_ota.o(i.ota_update_bootsetting)
ota_update_bootsetting 0x01002a61 Thumb Code 174 app_ota.o(i.ota_update_bootsetting)
i.parse_u32 0x01002b2c Section 0 app_bootset.o(i.parse_u32)
parse_u32 0x01002b2d Thumb Code 46 app_bootset.o(i.parse_u32)
i.puts_boot 0x01002b5a Section 0 main.o(i.puts_boot)
puts_boot 0x01002b5b Thumb Code 24 main.o(i.puts_boot)
i.read_flash_ID 0x01002b74 Section 0 system_n32wb03x.o(i.read_flash_ID)
read_flash_ID 0x01002b75 Thumb Code 62 system_n32wb03x.o(i.read_flash_ID)
i.str_pad 0x01002bb8 Section 0 boot_cli.o(i.str_pad)
str_pad 0x01002bb9 Thumb Code 78 boot_cli.o(i.str_pad)
i.u32_to_str 0x01002c06 Section 0 boot_cli.o(i.u32_to_str)
u32_to_str 0x01002c07 Thumb Code 108 boot_cli.o(i.u32_to_str)
.constdata 0x01002c72 Section 472 system_n32wb03x.o(.constdata)
.constdata 0x01002e4c Section 108 boot_cli.o(.constdata)
s_cmds 0x01002e4c Data 108 boot_cli.o(.constdata)
.constdata 0x01002eb8 Section 12 n32wb03x_rcc.o(.constdata)
s_ApbPresTable 0x01002eb8 Data 8 n32wb03x_rcc.o(.constdata)
s_AhbPresTable 0x01002ec0 Data 4 n32wb03x_rcc.o(.constdata)
.constdata 0x01002ec4 Section 804 n32wb03x_qflash.o(.constdata)
.constdata 0x010031e8 Section 129 ctype_o.o(.constdata)
.constdata 0x0100326c Section 4 ctype_o.o(.constdata)
table 0x0100326c Data 4 ctype_o.o(.constdata)
.conststring 0x01003270 Section 666 boot_cli.o(.conststring)
.conststring 0x0100350c 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)
@ -772,48 +765,47 @@ Image Symbol Table
DMA_RequestRemap 0x01000dbd Thumb Code 16 n32wb03x_dma.o(i.DMA_RequestRemap)
GPIO_InitPeripheral 0x01000dcd Thumb Code 262 n32wb03x_gpio.o(i.GPIO_InitPeripheral)
GPIO_InitStruct 0x01000ed5 Thumb Code 24 n32wb03x_gpio.o(i.GPIO_InitStruct)
GPIO_ReadInputDataBit 0x01000ef1 Thumb Code 20 n32wb03x_gpio.o(i.GPIO_ReadInputDataBit)
OTPTrim_Read 0x01000f05 Thumb Code 192 system_n32wb03x.o(i.OTPTrim_Read)
Qflash_Erase_Sector 0x01000fd1 Thumb Code 54 n32wb03x_qflash.o(i.Qflash_Erase_Sector)
Qflash_Init 0x0100100d Thumb Code 36 n32wb03x_qflash.o(i.Qflash_Init)
Qflash_Write 0x01001045 Thumb Code 62 n32wb03x_qflash.o(i.Qflash_Write)
RCC_EnableAHBPeriphClk 0x01001089 Thumb Code 28 n32wb03x_rcc.o(i.RCC_EnableAHBPeriphClk)
RCC_EnableAPB2PeriphClk 0x010010a9 Thumb Code 28 n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphClk)
RCC_GetClocksFreqValue 0x010010c9 Thumb Code 140 n32wb03x_rcc.o(i.RCC_GetClocksFreqValue)
SystemInit 0x0100129d Thumb Code 250 system_n32wb03x.o(i.SystemInit)
SystemTrimValueRead 0x010013b9 Thumb Code 20 system_n32wb03x.o(i.SystemTrimValueRead)
USART_Enable 0x010013cd Thumb Code 26 n32wb03x_usart.o(i.USART_Enable)
USART_EnableDMA 0x010013ed Thumb Code 20 n32wb03x_usart.o(i.USART_EnableDMA)
USART_GetFlagStatus 0x01001401 Thumb Code 30 n32wb03x_usart.o(i.USART_GetFlagStatus)
USART_Init 0x01001421 Thumb Code 162 n32wb03x_usart.o(i.USART_Init)
USART_SendData 0x010014d5 Thumb Code 8 n32wb03x_usart.o(i.USART_SendData)
__aeabi_errno_addr 0x010014dd Thumb Code 4 errno.o(i.__aeabi_errno_addr)
__rt_errno_addr 0x010014dd Thumb Code 0 errno.o(i.__aeabi_errno_addr)
__scatterload_copy 0x010014e5 Thumb Code 14 handlers.o(i.__scatterload_copy)
__scatterload_null 0x010014f3 Thumb Code 2 handlers.o(i.__scatterload_null)
__scatterload_zeroinit 0x010014f5 Thumb Code 14 handlers.o(i.__scatterload_zeroinit)
app_ota_abort 0x01001511 Thumb Code 32 app_ota.o(i.app_ota_abort)
app_ota_chan_idle 0x0100154d Thumb Code 12 app_ota.o(i.app_ota_chan_idle)
app_ota_chan_rx 0x01001561 Thumb Code 298 app_ota.o(i.app_ota_chan_rx)
app_ota_chan_rx_uart 0x010016a1 Thumb Code 26 app_ota.o(i.app_ota_chan_rx_uart)
app_ota_handle_frame 0x010016c5 Thumb Code 106 app_ota.o(i.app_ota_handle_frame)
app_ota_reset_poll 0x01001741 Thumb Code 70 app_ota.o(i.app_ota_reset_poll)
boot_cli_run 0x010017e9 Thumb Code 432 boot_cli.o(i.boot_cli_run)
boot_delay_ms 0x01001b4d Thumb Code 24 boot_usart.o(i.boot_delay_ms)
boot_millis 0x01001ba5 Thumb Code 30 boot_usart.o(i.boot_millis)
boot_usart_init 0x01001bcd Thumb Code 238 boot_usart.o(i.boot_usart_init)
boot_usart_read 0x01001cdd Thumb Code 54 boot_usart.o(i.boot_usart_read)
boot_usart_write 0x01001d35 Thumb Code 42 boot_usart.o(i.boot_usart_write)
caiic_crc32 0x01001f75 Thumb Code 62 boot_crc32.o(i.caiic_crc32)
cli_printf 0x01002129 Thumb Code 408 boot_cli.o(i.cli_printf)
cli_write 0x010022c5 Thumb Code 22 boot_cli.o(i.cli_write)
main 0x01002335 Thumb Code 210 main.o(i.main)
TRIM_READ_CMD_CODE 0x01002d06 Data 320 system_n32wb03x.o(.constdata)
CMD_RDID 0x01002e46 Data 152 system_n32wb03x.o(.constdata)
const_qflash_cmd 0x01002f58 Data 804 n32wb03x_qflash.o(.constdata)
__ctype_table 0x0100327c Data 129 ctype_o.o(.constdata)
Region$$Table$$Base 0x01003634 Number 0 anon$$obj.o(Region$$Table)
Region$$Table$$Limit 0x01003654 Number 0 anon$$obj.o(Region$$Table)
OTPTrim_Read 0x01000ef1 Thumb Code 192 system_n32wb03x.o(i.OTPTrim_Read)
Qflash_Erase_Sector 0x01000fbd Thumb Code 54 n32wb03x_qflash.o(i.Qflash_Erase_Sector)
Qflash_Init 0x01000ff9 Thumb Code 36 n32wb03x_qflash.o(i.Qflash_Init)
Qflash_Write 0x01001031 Thumb Code 62 n32wb03x_qflash.o(i.Qflash_Write)
RCC_EnableAHBPeriphClk 0x01001075 Thumb Code 28 n32wb03x_rcc.o(i.RCC_EnableAHBPeriphClk)
RCC_EnableAPB2PeriphClk 0x01001095 Thumb Code 28 n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphClk)
RCC_GetClocksFreqValue 0x010010b5 Thumb Code 140 n32wb03x_rcc.o(i.RCC_GetClocksFreqValue)
SystemInit 0x01001289 Thumb Code 250 system_n32wb03x.o(i.SystemInit)
SystemTrimValueRead 0x010013a5 Thumb Code 20 system_n32wb03x.o(i.SystemTrimValueRead)
USART_Enable 0x010013b9 Thumb Code 26 n32wb03x_usart.o(i.USART_Enable)
USART_EnableDMA 0x010013d9 Thumb Code 20 n32wb03x_usart.o(i.USART_EnableDMA)
USART_GetFlagStatus 0x010013ed Thumb Code 30 n32wb03x_usart.o(i.USART_GetFlagStatus)
USART_Init 0x0100140d Thumb Code 162 n32wb03x_usart.o(i.USART_Init)
USART_SendData 0x010014c1 Thumb Code 8 n32wb03x_usart.o(i.USART_SendData)
__aeabi_errno_addr 0x010014c9 Thumb Code 4 errno.o(i.__aeabi_errno_addr)
__rt_errno_addr 0x010014c9 Thumb Code 0 errno.o(i.__aeabi_errno_addr)
__scatterload_copy 0x010014d1 Thumb Code 14 handlers.o(i.__scatterload_copy)
__scatterload_null 0x010014df Thumb Code 2 handlers.o(i.__scatterload_null)
__scatterload_zeroinit 0x010014e1 Thumb Code 14 handlers.o(i.__scatterload_zeroinit)
app_ota_abort 0x010014fd Thumb Code 32 app_ota.o(i.app_ota_abort)
app_ota_chan_idle 0x01001539 Thumb Code 12 app_ota.o(i.app_ota_chan_idle)
app_ota_chan_rx 0x0100154d Thumb Code 298 app_ota.o(i.app_ota_chan_rx)
app_ota_chan_rx_uart 0x0100168d Thumb Code 26 app_ota.o(i.app_ota_chan_rx_uart)
app_ota_handle_frame 0x010016b1 Thumb Code 106 app_ota.o(i.app_ota_handle_frame)
app_ota_reset_poll 0x0100172d Thumb Code 70 app_ota.o(i.app_ota_reset_poll)
boot_cli_run 0x010017d5 Thumb Code 432 boot_cli.o(i.boot_cli_run)
boot_delay_ms 0x01001b39 Thumb Code 24 boot_usart.o(i.boot_delay_ms)
boot_millis 0x01001b51 Thumb Code 30 boot_usart.o(i.boot_millis)
boot_usart_init 0x01001b79 Thumb Code 238 boot_usart.o(i.boot_usart_init)
boot_usart_read 0x01001c89 Thumb Code 54 boot_usart.o(i.boot_usart_read)
boot_usart_write 0x01001ce1 Thumb Code 42 boot_usart.o(i.boot_usart_write)
caiic_crc32 0x01001f21 Thumb Code 62 boot_crc32.o(i.caiic_crc32)
cli_printf 0x010020d5 Thumb Code 408 boot_cli.o(i.cli_printf)
cli_write 0x01002271 Thumb Code 22 boot_cli.o(i.cli_write)
main 0x010022e1 Thumb Code 194 main.o(i.main)
TRIM_READ_CMD_CODE 0x01002c72 Data 320 system_n32wb03x.o(.constdata)
CMD_RDID 0x01002db2 Data 152 system_n32wb03x.o(.constdata)
const_qflash_cmd 0x01002ec4 Data 804 n32wb03x_qflash.o(.constdata)
__ctype_table 0x010031e8 Data 129 ctype_o.o(.constdata)
Region$$Table$$Base 0x010035a0 Number 0 anon$$obj.o(Region$$Table)
Region$$Table$$Limit 0x010035c0 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)
@ -829,166 +821,164 @@ Memory Map of the image
Image Entry point : 0x010000c1
Load Region LR_IROM1 (Base: 0x01000000, Size: 0x000036b4, Max: 0x00004000, ABSOLUTE)
Load Region LR_IROM1 (Base: 0x01000000, Size: 0x00003620, Max: 0x00004000, ABSOLUTE)
Execution Region ER_IROM1 (Exec base: 0x01000000, Load base: 0x01000000, Size: 0x00003654, Max: 0x00004000, ABSOLUTE)
Execution Region ER_IROM1 (Exec base: 0x01000000, Load base: 0x01000000, Size: 0x000035c0, 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 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)
0x010000c0 0x010000c0 0x00000000 Code RO 1230 * .ARM.Collect$$$$00000000 mc_p.l(entry.o)
0x010000c0 0x010000c0 0x00000004 Code RO 1255 .ARM.Collect$$$$00000001 mc_p.l(entry2.o)
0x010000c4 0x010000c4 0x00000004 Code RO 1258 .ARM.Collect$$$$00000004 mc_p.l(entry5.o)
0x010000c8 0x010000c8 0x00000000 Code RO 1260 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o)
0x010000c8 0x010000c8 0x00000000 Code RO 1262 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o)
0x010000c8 0x010000c8 0x00000008 Code RO 1263 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o)
0x010000d0 0x010000d0 0x00000000 Code RO 1265 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o)
0x010000d0 0x010000d0 0x00000000 Code RO 1267 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o)
0x010000d0 0x010000d0 0x00000004 Code RO 1256 .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 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)
0x01000100 0x01000100 0x0000002c Code RO 1233 .text mc_p.l(uidiv.o)
0x0100012c 0x0100012c 0x00000024 Code RO 1235 .text mc_p.l(memcpya.o)
0x01000150 0x01000150 0x00000024 Code RO 1237 .text mc_p.l(memseta.o)
0x01000174 0x01000174 0x0000000e Code RO 1239 .text mc_p.l(strlen.o)
0x01000182 0x01000182 0x0000001c Code RO 1241 .text mc_p.l(strcmp.o)
0x0100019e 0x0100019e 0x00000014 Code RO 1243 .text mc_p.l(memchr.o)
0x010001b2 0x010001b2 0x0000001a Code RO 1245 .text mc_p.l(memcmp.o)
0x010001cc 0x010001cc 0x00000012 Code RO 1247 .text mc_p.l(strcpy.o)
0x010001de 0x010001de 0x0000001e Code RO 1249 .text mc_p.l(strncmp.o)
0x010001fc 0x010001fc 0x00000076 Code RO 1253 .text mc_p.l(strtoul.o)
0x01000272 0x01000272 0x00000002 PAD
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)
0x01000274 0x01000274 0x00000008 Code RO 1269 .text mc_p.l(ctype_o.o)
0x0100027c 0x0100027c 0x000000a6 Code RO 1304 .text mc_p.l(_strtoul.o)
0x01000322 0x01000322 0x00000002 PAD
0x01000324 0x01000324 0x00000024 Code RO 1311 .text mc_p.l(init.o)
0x01000348 0x01000348 0x0000001e Code RO 1313 .text mc_p.l(_chval.o)
0x01000324 0x01000324 0x00000024 Code RO 1306 .text mc_p.l(init.o)
0x01000348 0x01000348 0x0000001e Code RO 1308 .text mc_p.l(_chval.o)
0x01000366 0x01000366 0x00000002 PAD
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 0x00000104 Code RO 296 i.CmdHelp boot_cli.o
0x01000b3c 0x01000b3c 0x0000001c Code RO 297 i.CmdOta boot_cli.o
0x01000b58 0x01000b58 0x0000003c Code RO 298 i.CmdReset boot_cli.o
0x01000b94 0x01000b94 0x000000b0 Code RO 299 i.CmdUartInfo boot_cli.o
0x01000c44 0x01000c44 0x00000074 Code RO 300 i.CmdVersion boot_cli.o
0x01000cb8 0x01000cb8 0x000000a0 Code RO 1113 i.DMA_DeInit n32wb03x_dma.o
0x01000d58 0x01000d58 0x0000001c Code RO 1114 i.DMA_EnableChannel n32wb03x_dma.o
0x01000d74 0x01000d74 0x00000008 Code RO 1115 i.DMA_GetCurrDataCounter n32wb03x_dma.o
0x01000d7c 0x01000d7c 0x00000040 Code RO 1118 i.DMA_Init n32wb03x_dma.o
0x01000dbc 0x01000dbc 0x00000010 Code RO 1119 i.DMA_RequestRemap n32wb03x_dma.o
0x01000dcc 0x01000dcc 0x00000106 Code RO 825 i.GPIO_InitPeripheral n32wb03x_gpio.o
0x01000368 0x01000368 0x000002d8 Code RO 515 i.AppBootset_CmdAppswitch app_bootset.o
0x01000640 0x01000640 0x00000020 Code RO 516 i.AppBootset_CmdBsdump app_bootset.o
0x01000660 0x01000660 0x000002f8 Code RO 517 i.AppBootset_CmdBsset app_bootset.o
0x01000958 0x01000958 0x000000e0 Code RO 290 i.CmdDevInfo boot_cli.o
0x01000a38 0x01000a38 0x00000104 Code RO 291 i.CmdHelp boot_cli.o
0x01000b3c 0x01000b3c 0x0000001c Code RO 292 i.CmdOta boot_cli.o
0x01000b58 0x01000b58 0x0000003c Code RO 293 i.CmdReset boot_cli.o
0x01000b94 0x01000b94 0x000000b0 Code RO 294 i.CmdUartInfo boot_cli.o
0x01000c44 0x01000c44 0x00000074 Code RO 295 i.CmdVersion boot_cli.o
0x01000cb8 0x01000cb8 0x000000a0 Code RO 1108 i.DMA_DeInit n32wb03x_dma.o
0x01000d58 0x01000d58 0x0000001c Code RO 1109 i.DMA_EnableChannel n32wb03x_dma.o
0x01000d74 0x01000d74 0x00000008 Code RO 1110 i.DMA_GetCurrDataCounter n32wb03x_dma.o
0x01000d7c 0x01000d7c 0x00000040 Code RO 1113 i.DMA_Init n32wb03x_dma.o
0x01000dbc 0x01000dbc 0x00000010 Code RO 1114 i.DMA_RequestRemap n32wb03x_dma.o
0x01000dcc 0x01000dcc 0x00000106 Code RO 820 i.GPIO_InitPeripheral n32wb03x_gpio.o
0x01000ed2 0x01000ed2 0x00000002 PAD
0x01000ed4 0x01000ed4 0x0000001c Code RO 826 i.GPIO_InitStruct n32wb03x_gpio.o
0x01000ef0 0x01000ef0 0x00000014 Code RO 828 i.GPIO_ReadInputDataBit n32wb03x_gpio.o
0x01000f04 0x01000f04 0x000000cc Code RO 11 i.OTPTrim_Read system_n32wb03x.o
0x01000fd0 0x01000fd0 0x0000003c Code RO 1192 i.Qflash_Erase_Sector n32wb03x_qflash.o
0x0100100c 0x0100100c 0x00000038 Code RO 1193 i.Qflash_Init n32wb03x_qflash.o
0x01001044 0x01001044 0x00000044 Code RO 1195 i.Qflash_Write n32wb03x_qflash.o
0x01001088 0x01001088 0x00000020 Code RO 601 i.RCC_EnableAHBPeriphClk n32wb03x_rcc.o
0x010010a8 0x010010a8 0x00000020 Code RO 605 i.RCC_EnableAPB2PeriphClk n32wb03x_rcc.o
0x010010c8 0x010010c8 0x000000a4 Code RO 613 i.RCC_GetClocksFreqValue n32wb03x_rcc.o
0x0100116c 0x0100116c 0x00000130 Code RO 12 i.RCC_HsiCalib system_n32wb03x.o
0x0100129c 0x0100129c 0x0000011c Code RO 16 i.SystemInit system_n32wb03x.o
0x010013b8 0x010013b8 0x00000014 Code RO 18 i.SystemTrimValueRead system_n32wb03x.o
0x010013cc 0x010013cc 0x00000020 Code RO 947 i.USART_Enable n32wb03x_usart.o
0x010013ec 0x010013ec 0x00000014 Code RO 948 i.USART_EnableDMA n32wb03x_usart.o
0x01001400 0x01001400 0x0000001e Code RO 954 i.USART_GetFlagStatus n32wb03x_usart.o
0x0100141e 0x0100141e 0x00000002 PAD
0x01001420 0x01001420 0x000000b4 Code RO 956 i.USART_Init n32wb03x_usart.o
0x010014d4 0x010014d4 0x00000008 Code RO 959 i.USART_SendData n32wb03x_usart.o
0x010014dc 0x010014dc 0x00000008 Code RO 1302 i.__aeabi_errno_addr mc_p.l(errno.o)
0x010014e4 0x010014e4 0x0000000e Code RO 1317 i.__scatterload_copy mc_p.l(handlers.o)
0x010014f2 0x010014f2 0x00000002 Code RO 1318 i.__scatterload_null mc_p.l(handlers.o)
0x010014f4 0x010014f4 0x0000000e Code RO 1319 i.__scatterload_zeroinit mc_p.l(handlers.o)
0x01001502 0x01001502 0x00000006 Code RO 19 i.__set_PRIMASK system_n32wb03x.o
0x01001508 0x01001508 0x00000006 Code RO 1196 i.__set_PRIMASK n32wb03x_qflash.o
0x0100150e 0x0100150e 0x00000002 PAD
0x01001510 0x01001510 0x0000003c Code RO 411 i.app_ota_abort app_ota.o
0x0100154c 0x0100154c 0x00000014 Code RO 412 i.app_ota_chan_idle app_ota.o
0x01001560 0x01001560 0x00000140 Code RO 413 i.app_ota_chan_rx app_ota.o
0x010016a0 0x010016a0 0x00000024 Code RO 414 i.app_ota_chan_rx_uart app_ota.o
0x010016c4 0x010016c4 0x0000007c Code RO 416 i.app_ota_handle_frame app_ota.o
0x01001740 0x01001740 0x0000005c Code RO 417 i.app_ota_reset_poll app_ota.o
0x0100179c 0x0100179c 0x0000004c Code RO 301 i.boot_cli_redraw boot_cli.o
0x010017e8 0x010017e8 0x00000220 Code RO 302 i.boot_cli_run boot_cli.o
0x01001a08 0x01001a08 0x00000144 Code RO 303 i.boot_cli_tab_complete boot_cli.o
0x01001b4c 0x01001b4c 0x00000018 Code RO 244 i.boot_delay_ms boot_usart.o
0x01001b64 0x01001b64 0x00000040 Code RO 174 i.boot_dl_strap_active main.o
0x01001ba4 0x01001ba4 0x00000028 Code RO 245 i.boot_millis boot_usart.o
0x01001bcc 0x01001bcc 0x00000110 Code RO 246 i.boot_usart_init boot_usart.o
0x01001cdc 0x01001cdc 0x00000040 Code RO 247 i.boot_usart_read boot_usart.o
0x01001d1c 0x01001d1c 0x00000018 Code RO 248 i.boot_usart_rx_head boot_usart.o
0x01001d34 0x01001d34 0x00000030 Code RO 249 i.boot_usart_write boot_usart.o
0x01001d64 0x01001d64 0x00000054 Code RO 523 i.bootset_commit app_bootset.o
0x01001db8 0x01001db8 0x0000000e Code RO 524 i.bootset_crc app_bootset.o
0x01001dc6 0x01001dc6 0x00000002 PAD
0x01001dc8 0x01001dc8 0x0000001c Code RO 525 i.bootset_ensure_qflash app_bootset.o
0x01001de4 0x01001de4 0x0000016c Code RO 526 i.bootset_print app_bootset.o
0x01001f50 0x01001f50 0x00000024 Code RO 527 i.bootset_valid app_bootset.o
0x01001f74 0x01001f74 0x00000044 Code RO 231 i.caiic_crc32 boot_crc32.o
0x01001fb8 0x01001fb8 0x000000cc Code RO 304 i.cli_exec_line boot_cli.o
0x01002084 0x01002084 0x00000078 Code RO 305 i.cli_history_add boot_cli.o
0x010020fc 0x010020fc 0x0000002c Code RO 306 i.cli_history_get boot_cli.o
0x01002128 0x01002128 0x0000019c Code RO 307 i.cli_printf boot_cli.o
0x010022c4 0x010022c4 0x00000016 Code RO 308 i.cli_write boot_cli.o
0x010022da 0x010022da 0x00000002 PAD
0x010022dc 0x010022dc 0x00000034 Code RO 175 i.image_sane main.o
0x01002310 0x01002310 0x00000024 Code RO 176 i.jump_to_app main.o
0x01002334 0x01002334 0x000001c4 Code RO 177 i.main main.o
0x010024f8 0x010024f8 0x0000004c Code RO 418 i.ota_crc16 app_ota.o
0x01002544 0x01002544 0x00000040 Code RO 419 i.ota_erase_up_to app_ota.o
0x01002584 0x01002584 0x00000170 Code RO 420 i.ota_on_begin app_ota.o
0x010026f4 0x010026f4 0x000001a8 Code RO 421 i.ota_on_data app_ota.o
0x0100289c 0x0100289c 0x00000170 Code RO 422 i.ota_on_end app_ota.o
0x01002a0c 0x01002a0c 0x00000038 Code RO 423 i.ota_program app_ota.o
0x01002a44 0x01002a44 0x00000018 Code RO 424 i.ota_rd32 app_ota.o
0x01002a5c 0x01002a5c 0x0000007c Code RO 425 i.ota_respond app_ota.o
0x01002ad8 0x01002ad8 0x0000001c Code RO 426 i.ota_uart_sink app_ota.o
0x01002af4 0x01002af4 0x000000cc Code RO 427 i.ota_update_bootsetting app_ota.o
0x01002bc0 0x01002bc0 0x0000002e Code RO 528 i.parse_u32 app_bootset.o
0x01002bee 0x01002bee 0x00000018 Code RO 178 i.puts_boot main.o
0x01002c06 0x01002c06 0x00000002 PAD
0x01002c08 0x01002c08 0x00000044 Code RO 20 i.read_flash_ID system_n32wb03x.o
0x01002c4c 0x01002c4c 0x0000004e Code RO 309 i.str_pad boot_cli.o
0x01002c9a 0x01002c9a 0x0000006c Code RO 310 i.u32_to_str boot_cli.o
0x01002d06 0x01002d06 0x000001d8 Data RO 23 .constdata system_n32wb03x.o
0x01002ede 0x01002ede 0x00000002 PAD
0x01002ee0 0x01002ee0 0x0000006c Data RO 312 .constdata boot_cli.o
0x01002f4c 0x01002f4c 0x0000000c Data RO 621 .constdata n32wb03x_rcc.o
0x01002f58 0x01002f58 0x00000324 Data RO 1198 .constdata n32wb03x_qflash.o
0x0100327c 0x0100327c 0x00000081 Data RO 1275 .constdata mc_p.l(ctype_o.o)
0x010032fd 0x010032fd 0x00000003 PAD
0x01003300 0x01003300 0x00000004 Data RO 1276 .constdata mc_p.l(ctype_o.o)
0x01003304 0x01003304 0x0000029a Data RO 313 .conststring boot_cli.o
0x0100359e 0x0100359e 0x00000002 PAD
0x010035a0 0x010035a0 0x00000091 Data RO 529 .conststring app_bootset.o
0x01003631 0x01003631 0x00000003 PAD
0x01003634 0x01003634 0x00000020 Data RO 1315 Region$$Table anon$$obj.o
0x01000ed4 0x01000ed4 0x0000001c Code RO 821 i.GPIO_InitStruct n32wb03x_gpio.o
0x01000ef0 0x01000ef0 0x000000cc Code RO 11 i.OTPTrim_Read system_n32wb03x.o
0x01000fbc 0x01000fbc 0x0000003c Code RO 1187 i.Qflash_Erase_Sector n32wb03x_qflash.o
0x01000ff8 0x01000ff8 0x00000038 Code RO 1188 i.Qflash_Init n32wb03x_qflash.o
0x01001030 0x01001030 0x00000044 Code RO 1190 i.Qflash_Write n32wb03x_qflash.o
0x01001074 0x01001074 0x00000020 Code RO 596 i.RCC_EnableAHBPeriphClk n32wb03x_rcc.o
0x01001094 0x01001094 0x00000020 Code RO 600 i.RCC_EnableAPB2PeriphClk n32wb03x_rcc.o
0x010010b4 0x010010b4 0x000000a4 Code RO 608 i.RCC_GetClocksFreqValue n32wb03x_rcc.o
0x01001158 0x01001158 0x00000130 Code RO 12 i.RCC_HsiCalib system_n32wb03x.o
0x01001288 0x01001288 0x0000011c Code RO 16 i.SystemInit system_n32wb03x.o
0x010013a4 0x010013a4 0x00000014 Code RO 18 i.SystemTrimValueRead system_n32wb03x.o
0x010013b8 0x010013b8 0x00000020 Code RO 942 i.USART_Enable n32wb03x_usart.o
0x010013d8 0x010013d8 0x00000014 Code RO 943 i.USART_EnableDMA n32wb03x_usart.o
0x010013ec 0x010013ec 0x0000001e Code RO 949 i.USART_GetFlagStatus n32wb03x_usart.o
0x0100140a 0x0100140a 0x00000002 PAD
0x0100140c 0x0100140c 0x000000b4 Code RO 951 i.USART_Init n32wb03x_usart.o
0x010014c0 0x010014c0 0x00000008 Code RO 954 i.USART_SendData n32wb03x_usart.o
0x010014c8 0x010014c8 0x00000008 Code RO 1297 i.__aeabi_errno_addr mc_p.l(errno.o)
0x010014d0 0x010014d0 0x0000000e Code RO 1312 i.__scatterload_copy mc_p.l(handlers.o)
0x010014de 0x010014de 0x00000002 Code RO 1313 i.__scatterload_null mc_p.l(handlers.o)
0x010014e0 0x010014e0 0x0000000e Code RO 1314 i.__scatterload_zeroinit mc_p.l(handlers.o)
0x010014ee 0x010014ee 0x00000006 Code RO 19 i.__set_PRIMASK system_n32wb03x.o
0x010014f4 0x010014f4 0x00000006 Code RO 1191 i.__set_PRIMASK n32wb03x_qflash.o
0x010014fa 0x010014fa 0x00000002 PAD
0x010014fc 0x010014fc 0x0000003c Code RO 406 i.app_ota_abort app_ota.o
0x01001538 0x01001538 0x00000014 Code RO 407 i.app_ota_chan_idle app_ota.o
0x0100154c 0x0100154c 0x00000140 Code RO 408 i.app_ota_chan_rx app_ota.o
0x0100168c 0x0100168c 0x00000024 Code RO 409 i.app_ota_chan_rx_uart app_ota.o
0x010016b0 0x010016b0 0x0000007c Code RO 411 i.app_ota_handle_frame app_ota.o
0x0100172c 0x0100172c 0x0000005c Code RO 412 i.app_ota_reset_poll app_ota.o
0x01001788 0x01001788 0x0000004c Code RO 296 i.boot_cli_redraw boot_cli.o
0x010017d4 0x010017d4 0x00000220 Code RO 297 i.boot_cli_run boot_cli.o
0x010019f4 0x010019f4 0x00000144 Code RO 298 i.boot_cli_tab_complete boot_cli.o
0x01001b38 0x01001b38 0x00000018 Code RO 239 i.boot_delay_ms boot_usart.o
0x01001b50 0x01001b50 0x00000028 Code RO 240 i.boot_millis boot_usart.o
0x01001b78 0x01001b78 0x00000110 Code RO 241 i.boot_usart_init boot_usart.o
0x01001c88 0x01001c88 0x00000040 Code RO 242 i.boot_usart_read boot_usart.o
0x01001cc8 0x01001cc8 0x00000018 Code RO 243 i.boot_usart_rx_head boot_usart.o
0x01001ce0 0x01001ce0 0x00000030 Code RO 244 i.boot_usart_write boot_usart.o
0x01001d10 0x01001d10 0x00000054 Code RO 518 i.bootset_commit app_bootset.o
0x01001d64 0x01001d64 0x0000000e Code RO 519 i.bootset_crc app_bootset.o
0x01001d72 0x01001d72 0x00000002 PAD
0x01001d74 0x01001d74 0x0000001c Code RO 520 i.bootset_ensure_qflash app_bootset.o
0x01001d90 0x01001d90 0x0000016c Code RO 521 i.bootset_print app_bootset.o
0x01001efc 0x01001efc 0x00000024 Code RO 522 i.bootset_valid app_bootset.o
0x01001f20 0x01001f20 0x00000044 Code RO 226 i.caiic_crc32 boot_crc32.o
0x01001f64 0x01001f64 0x000000cc Code RO 299 i.cli_exec_line boot_cli.o
0x01002030 0x01002030 0x00000078 Code RO 300 i.cli_history_add boot_cli.o
0x010020a8 0x010020a8 0x0000002c Code RO 301 i.cli_history_get boot_cli.o
0x010020d4 0x010020d4 0x0000019c Code RO 302 i.cli_printf boot_cli.o
0x01002270 0x01002270 0x00000016 Code RO 303 i.cli_write boot_cli.o
0x01002286 0x01002286 0x00000002 PAD
0x01002288 0x01002288 0x00000034 Code RO 174 i.image_sane main.o
0x010022bc 0x010022bc 0x00000024 Code RO 175 i.jump_to_app main.o
0x010022e0 0x010022e0 0x00000184 Code RO 176 i.main main.o
0x01002464 0x01002464 0x0000004c Code RO 413 i.ota_crc16 app_ota.o
0x010024b0 0x010024b0 0x00000040 Code RO 414 i.ota_erase_up_to app_ota.o
0x010024f0 0x010024f0 0x00000170 Code RO 415 i.ota_on_begin app_ota.o
0x01002660 0x01002660 0x000001a8 Code RO 416 i.ota_on_data app_ota.o
0x01002808 0x01002808 0x00000170 Code RO 417 i.ota_on_end app_ota.o
0x01002978 0x01002978 0x00000038 Code RO 418 i.ota_program app_ota.o
0x010029b0 0x010029b0 0x00000018 Code RO 419 i.ota_rd32 app_ota.o
0x010029c8 0x010029c8 0x0000007c Code RO 420 i.ota_respond app_ota.o
0x01002a44 0x01002a44 0x0000001c Code RO 421 i.ota_uart_sink app_ota.o
0x01002a60 0x01002a60 0x000000cc Code RO 422 i.ota_update_bootsetting app_ota.o
0x01002b2c 0x01002b2c 0x0000002e Code RO 523 i.parse_u32 app_bootset.o
0x01002b5a 0x01002b5a 0x00000018 Code RO 177 i.puts_boot main.o
0x01002b72 0x01002b72 0x00000002 PAD
0x01002b74 0x01002b74 0x00000044 Code RO 20 i.read_flash_ID system_n32wb03x.o
0x01002bb8 0x01002bb8 0x0000004e Code RO 304 i.str_pad boot_cli.o
0x01002c06 0x01002c06 0x0000006c Code RO 305 i.u32_to_str boot_cli.o
0x01002c72 0x01002c72 0x000001d8 Data RO 23 .constdata system_n32wb03x.o
0x01002e4a 0x01002e4a 0x00000002 PAD
0x01002e4c 0x01002e4c 0x0000006c Data RO 307 .constdata boot_cli.o
0x01002eb8 0x01002eb8 0x0000000c Data RO 616 .constdata n32wb03x_rcc.o
0x01002ec4 0x01002ec4 0x00000324 Data RO 1193 .constdata n32wb03x_qflash.o
0x010031e8 0x010031e8 0x00000081 Data RO 1270 .constdata mc_p.l(ctype_o.o)
0x01003269 0x01003269 0x00000003 PAD
0x0100326c 0x0100326c 0x00000004 Data RO 1271 .constdata mc_p.l(ctype_o.o)
0x01003270 0x01003270 0x0000029a Data RO 308 .conststring boot_cli.o
0x0100350a 0x0100350a 0x00000002 PAD
0x0100350c 0x0100350c 0x00000091 Data RO 524 .conststring app_bootset.o
0x0100359d 0x0100359d 0x00000003 PAD
0x010035a0 0x010035a0 0x00000020 Data RO 1310 Region$$Table anon$$obj.o
Execution Region RW_IRAM1 (Exec base: 0x20004000, Load base: 0x01003654, Size: 0x00001cd8, Max: 0x0000c000, ABSOLUTE)
Execution Region RW_IRAM1 (Exec base: 0x20004000, Load base: 0x010035c0, Size: 0x00001cd8, Max: 0x0000c000, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x20004000 0x01003654 0x00000004 Data RW 24 .data system_n32wb03x.o
0x20004004 0x01003658 0x00000008 Data RW 251 .data boot_usart.o
0x2000400c 0x01003660 0x00000003 Data RW 314 .data boot_cli.o
0x2000400f 0x01003663 0x00000001 PAD
0x20004010 0x01003664 0x0000003d Data RW 429 .data app_ota.o
0x2000404d 0x010036a1 0x00000001 Data RW 530 .data app_bootset.o
0x2000404e 0x010036a2 0x00000002 PAD
0x20004050 0x010036a4 0x0000000c Data RW 1199 .data n32wb03x_qflash.o
0x2000405c 0x010036b0 0x00000004 Data RW 1305 .data mc_p.l(errno.o)
0x20004000 0x010035c0 0x00000004 Data RW 24 .data system_n32wb03x.o
0x20004004 0x010035c4 0x00000008 Data RW 246 .data boot_usart.o
0x2000400c 0x010035cc 0x00000003 Data RW 309 .data boot_cli.o
0x2000400f 0x010035cf 0x00000001 PAD
0x20004010 0x010035d0 0x0000003d Data RW 424 .data app_ota.o
0x2000404d 0x0100360d 0x00000001 Data RW 525 .data app_bootset.o
0x2000404e 0x0100360e 0x00000002 PAD
0x20004050 0x01003610 0x0000000c Data RW 1194 .data n32wb03x_qflash.o
0x2000405c 0x0100361c 0x00000004 Data RW 1300 .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 - 0x00000330 Zero RW 311 .bss boot_cli.o
0x20004fc4 - 0x000001e7 Zero RW 428 .bss app_ota.o
0x200051ab 0x010036b4 0x00000001 PAD
0x200051ac - 0x00000328 Zero RW 1197 .bss n32wb03x_qflash.o
0x200054d4 0x010036b4 0x00000004 PAD
0x20004094 - 0x00000c00 Zero RW 245 .bss boot_usart.o
0x20004c94 - 0x00000330 Zero RW 306 .bss boot_cli.o
0x20004fc4 - 0x000001e7 Zero RW 423 .bss app_ota.o
0x200051ab 0x01003620 0x00000001 PAD
0x200051ac - 0x00000328 Zero RW 1192 .bss n32wb03x_qflash.o
0x200054d4 0x01003620 0x00000004 PAD
0x200054d8 - 0x00000800 Zero RW 1 STACK startup_n32wb03x.o
@ -1004,9 +994,9 @@ Image component sizes
2796 756 774 3 816 18440 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
500 208 0 0 0 5019 main.o
276 18 0 0 0 4372 n32wb03x_dma.o
310 4 0 0 0 2948 n32wb03x_gpio.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
@ -1014,7 +1004,7 @@ Image component sizes
900 60 472 4 52 124580 system_n32wb03x.o
----------------------------------------------------------------------
10660 2738 2438 92 7288 193297 Object Totals
10512 2684 2438 92 7288 191977 Object Totals
0 0 32 0 0 0 (incl. Generated)
14 0 7 3 5 0 (incl. Padding)
@ -1067,15 +1057,15 @@ Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug
11334 2762 2574 96 7288 190609 Grand Totals
11334 2762 2574 96 7288 190609 ELF Image Totals
11334 2762 2574 96 0 0 ROM Totals
11186 2708 2574 96 7288 189377 Grand Totals
11186 2708 2574 96 7288 189377 ELF Image Totals
11186 2708 2574 96 0 0 ROM Totals
==============================================================================
Total RO Size (Code + RO Data) 13908 ( 13.58kB)
Total RO Size (Code + RO Data) 13760 ( 13.44kB)
Total RW Size (RW Data + ZI Data) 7384 ( 7.21kB)
Total ROM Size (Code + RO Data + RW Data) 14004 ( 13.68kB)
Total ROM Size (Code + RO Data + RW Data) 13856 ( 13.53kB)
==============================================================================

Binary file not shown.

View File

@ -2,19 +2,19 @@
Rebuild target 'caiic_boot'
assembling startup_n32wb03x.s...
compiling boot_crc32.c...
compiling main.c...
compiling system_n32wb03x.c...
compiling app_bootset.c...
compiling n32wb03x_gpio.c...
compiling main.c...
compiling boot_usart.c...
compiling boot_cli.c...
compiling n32wb03x_dma.c...
compiling app_ota.c...
compiling app_bootset.c...
compiling boot_cli.c...
compiling system_n32wb03x.c...
compiling n32wb03x_rcc.c...
compiling n32wb03x_dma.c...
compiling n32wb03x_usart.c...
compiling n32wb03x_qflash.c...
linking...
Program Size: Code=11334 RO-data=2574 RW-data=96 ZI-data=7288
Program Size: Code=11186 RO-data=2574 RW-data=96 ZI-data=7288
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).

View File

@ -6,6 +6,6 @@
#ifndef __BOOT_VERSION_H__
#define __BOOT_VERSION_H__
#define BOOT_FW_VERSION "V1.00.05"
#define BOOT_FW_VERSION "V1.00.06"
#endif /* __BOOT_VERSION_H__ */

View File

@ -7,12 +7,13 @@
* production download and bricked-device recovery.
*
* Download mode entry:
* 0. strap pin held HIGH (3.3 V) at reset - forces download mode
* deterministically, no host on the UART needed,
* 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
* 0. press Enter within the 2 s window printed in the boot banner, or
* 1. 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.
* The former PB5 strap-pin entry was removed (the pin is needed by the
* display); the two remaining entries still cover download and bricked
* device recovery.
*
* Policy: the application image CRC is verified during the OTA process
* (app_ota.c) BEFORE bootsetting is switched - the normal boot path never
@ -36,16 +37,6 @@
#define SRAM_SP_MIN 0x20004001u
#define SRAM_SP_MAX 0x2000C000u
/* Download-mode strap pin: tie it HIGH (the board's 3.3 V rail) at reset to
* force download mode. PB5 is free on the STB board (not SWD PA4/PA5, not
* USART1 PB6/PB7, not LED PB0/PA6, not 32.768 kHz crystal PB8/PB9, not the
* user keys PB1/PB2) and is broken out on header J3 next to the UART pins.
* The internal pull-down keeps the un-strapped state LOW (normal boot); an
* external 3.3 V drive overrides that weak pull-down cleanly. */
#define BOOT_DL_STRAP_GPIO GPIOB
#define BOOT_DL_STRAP_CLK RCC_APB2_PERIPH_GPIOB
#define BOOT_DL_STRAP_PIN GPIO_PIN_5
extern void boot_cli_run(void); /* boot_cli.c - never returns */
/**
@ -94,24 +85,6 @@ static void puts_boot(const char* s)
}
}
/**
* @brief Configure the download strap pin as a pull-down input and read it.
* @return 1 when the pin is HIGH (3.3 V applied -> enter download mode).
*/
static int boot_dl_strap_active(void)
{
GPIO_InitType s;
RCC_EnableAPB2PeriphClk(BOOT_DL_STRAP_CLK, ENABLE);
GPIO_InitStruct(&s);
s.Pin = BOOT_DL_STRAP_PIN;
s.GPIO_Mode = GPIO_MODE_INPUT;
s.GPIO_Pull = GPIO_PULL_DOWN;
GPIO_InitPeripheral(BOOT_DL_STRAP_GPIO, &s);
return (GPIO_ReadInputDataBit(BOOT_DL_STRAP_GPIO, BOOT_DL_STRAP_PIN) == Bit_SET) ? 1 : 0;
}
/**
* @brief Main program.
*/
@ -144,14 +117,7 @@ int main(void)
puts_boot("\r\n[boot] CAIIC-BOOT " BOOT_FW_VERSION
" - Enter within 2s: download mode\r\n");
/* Entry 0 (strap): 3.3 V held on the strap pin forces download mode */
if (boot_dl_strap_active())
{
enter_dl = 1;
puts_boot("[boot] strap pin HIGH (3V3): download mode\r\n");
}
/* Entry 1: Enter key inside the window (skipped when strap already set) */
/* Entry 0: Enter key inside the 2 s window */
if (!enter_dl)
{
window_start = boot_millis();
@ -166,7 +132,7 @@ int main(void)
}
}
/* Entry 2 (recovery): no jumpable image at all */
/* Entry 1 (recovery): no jumpable image at all */
if (!enter_dl && !bs_ok && !image_sane(CAIIC_APP1_BASE))
{
enter_dl = 1;

View File

@ -0,0 +1,227 @@
# YF30137 七脚数码屏驱动真值表
> 依据《数码屏YF30137.dwg》引脚定义图还原。7 个 IO 脚,Charlieplexing(两两复用电极)驱动。
> 段位结构:DIG1~DIG5 各 7 段(A~G)= 35 段,DIG6 两段(A6=°F、B6=小数点)= 2 段,共 37 段。
## 约定
- **脚号对应**(脚 N = 网络 LED_N = MCU 引脚):
- LED_1 = PB0 LED_2 = PB1 LED_3 = PA0 LED_4 = PA1 LED_5 = PB11 LED_6 = PB13 LED_7 = PA6
- `x→y` = **脚 x 拉高、脚 y 拉低**,其余 5 个脚全部**高阻(输入)**。
- 逐段点亮:点一段 → 全高阻 → 点下一段,同一数字的多段**不能同时点**(脚共用)。
- 若实测段「反相不亮」,把每个脚对的高/低对调即可(段位对应不变)。
## 一、段 → 脚 总表
| 段 | DIG1 | DIG2 | DIG3 | DIG4 | DIG5 | DIG6 |
|---|---|---|---|---|---|---|
| A | 2→1 | 3→2 | 4→3 | 5→4 | 6→5 | 7→6(°F) |
| B | 3→1 | 4→2 | 5→3 | 6→4 | 7→5 | 1→7(小数点) |
| C | 4→1 | 5→2 | 6→3 | 7→4 | 1→6 | — |
| D | 5→1 | 6→2 | 7→3 | 1→5 | 2→6 | — |
| E | 6→1 | 7→2 | 1→4 | 2→5 | 3→6 | — |
| F | 7→1 | 1→3 | 2→4 | 3→5 | 4→6 | — |
| G | 1→2 | 2→3 | 3→4 | 4→5 | 5→6 | — |
## 二、字符段码表(哪个字符亮哪些段)
| 字符 | 亮段 | 字符 | 亮段 | 字符 | 亮段 |
|---|---|---|---|---|---|
| **0** | ABCDEF | **1** | BC | **2** | ABDEG |
| **3** | ABCDG | **4** | BCFG | **5** | ACDFG |
| **6** | ACDEFG | **7** | ABC | **8** | ABCDEFG |
| **9** | ABCDFG | **A** | ABCEFG | **b** | CDEFG |
| **C** | ADEF | **d** | BCDEG | **E** | ADEFG |
| **F** | AEFG | **H** | BCEFG | **L** | DEF |
| **P** | ABEFG | **U** | BCDEF | **o** | CDEG |
| **n** | CEG | **r** | EG | **y** | BCDFG |
| **t** | DEFG | | | | |
> 说明:`b`、`d`、`o`、`n`、`r`、`y`、`t` 为小写字母(避免与数字 8/0 混淆);
> `A`、`C`、`E`、`F`、`H`、`L`、`P`、`U` 为大写。
## 三、DIG1 组合表(数字 + 字母)
| 字符 | 亮段 | 脚对(高→低) |
|---|---|---|
| **0** | ABCDEF | 2→1,3→1,4→1,5→1,6→1,7→1 |
| **1** | BC | 3→1,4→1 |
| **2** | ABDEG | 2→1,3→1,5→1,6→1,1→2 |
| **3** | ABCDG | 2→1,3→1,4→1,5→1,1→2 |
| **4** | BCFG | 3→1,4→1,7→1,1→2 |
| **5** | ACDFG | 2→1,4→1,5→1,7→1,1→2 |
| **6** | ACDEFG | 2→1,4→1,5→1,6→1,7→1,1→2 |
| **7** | ABC | 2→1,3→1,4→1 |
| **8** | ABCDEFG | 2→1,3→1,4→1,5→1,6→1,7→1,1→2 |
| **9** | ABCDFG | 2→1,3→1,4→1,5→1,7→1,1→2 |
| **A** | ABCEFG | 2→1,3→1,4→1,6→1,7→1,1→2 |
| **b** | CDEFG | 4→1,5→1,6→1,7→1,1→2 |
| **C** | ADEF | 2→1,5→1,6→1,7→1 |
| **d** | BCDEG | 3→1,4→1,5→1,6→1,1→2 |
| **E** | ADEFG | 2→1,5→1,6→1,7→1,1→2 |
| **F** | AEFG | 2→1,6→1,7→1,1→2 |
| **H** | BCEFG | 3→1,4→1,6→1,7→1,1→2 |
| **L** | DEF | 5→1,6→1,7→1 |
| **P** | ABEFG | 2→1,3→1,6→1,7→1,1→2 |
| **U** | BCDEF | 3→1,4→1,5→1,6→1,7→1 |
| **o** | CDEG | 4→1,5→1,6→1,1→2 |
| **n** | CEG | 4→1,6→1,1→2 |
| **r** | EG | 6→1,1→2 |
| **y** | BCDFG | 3→1,4→1,5→1,7→1,1→2 |
| **t** | DEFG | 5→1,6→1,7→1,1→2 |
## 三、DIG2 组合表(数字 + 字母)
| 字符 | 亮段 | 脚对(高→低) |
|---|---|---|
| **0** | ABCDEF | 3→2,4→2,5→2,6→2,7→2,1→3 |
| **1** | BC | 4→2,5→2 |
| **2** | ABDEG | 3→2,4→2,6→2,7→2,2→3 |
| **3** | ABCDG | 3→2,4→2,5→2,6→2,2→3 |
| **4** | BCFG | 4→2,5→2,1→3,2→3 |
| **5** | ACDFG | 3→2,5→2,6→2,1→3,2→3 |
| **6** | ACDEFG | 3→2,5→2,6→2,7→2,1→3,2→3 |
| **7** | ABC | 3→2,4→2,5→2 |
| **8** | ABCDEFG | 3→2,4→2,5→2,6→2,7→2,1→3,2→3 |
| **9** | ABCDFG | 3→2,4→2,5→2,6→2,1→3,2→3 |
| **A** | ABCEFG | 3→2,4→2,5→2,7→2,1→3,2→3 |
| **b** | CDEFG | 5→2,6→2,7→2,1→3,2→3 |
| **C** | ADEF | 3→2,6→2,7→2,1→3 |
| **d** | BCDEG | 4→2,5→2,6→2,7→2,2→3 |
| **E** | ADEFG | 3→2,6→2,7→2,1→3,2→3 |
| **F** | AEFG | 3→2,7→2,1→3,2→3 |
| **H** | BCEFG | 4→2,5→2,7→2,1→3,2→3 |
| **L** | DEF | 6→2,7→2,1→3 |
| **P** | ABEFG | 3→2,4→2,7→2,1→3,2→3 |
| **U** | BCDEF | 4→2,5→2,6→2,7→2,1→3 |
| **o** | CDEG | 5→2,6→2,7→2,2→3 |
| **n** | CEG | 5→2,7→2,2→3 |
| **r** | EG | 7→2,2→3 |
| **y** | BCDFG | 4→2,5→2,6→2,1→3,2→3 |
| **t** | DEFG | 6→2,7→2,1→3,2→3 |
## 三、DIG3 组合表(数字 + 字母)
| 字符 | 亮段 | 脚对(高→低) |
|---|---|---|
| **0** | ABCDEF | 4→3,5→3,6→3,7→3,1→4,2→4 |
| **1** | BC | 5→3,6→3 |
| **2** | ABDEG | 4→3,5→3,7→3,1→4,3→4 |
| **3** | ABCDG | 4→3,5→3,6→3,7→3,3→4 |
| **4** | BCFG | 5→3,6→3,2→4,3→4 |
| **5** | ACDFG | 4→3,6→3,7→3,2→4,3→4 |
| **6** | ACDEFG | 4→3,6→3,7→3,1→4,2→4,3→4 |
| **7** | ABC | 4→3,5→3,6→3 |
| **8** | ABCDEFG | 4→3,5→3,6→3,7→3,1→4,2→4,3→4 |
| **9** | ABCDFG | 4→3,5→3,6→3,7→3,2→4,3→4 |
| **A** | ABCEFG | 4→3,5→3,6→3,1→4,2→4,3→4 |
| **b** | CDEFG | 6→3,7→3,1→4,2→4,3→4 |
| **C** | ADEF | 4→3,7→3,1→4,2→4 |
| **d** | BCDEG | 5→3,6→3,7→3,1→4,3→4 |
| **E** | ADEFG | 4→3,7→3,1→4,2→4,3→4 |
| **F** | AEFG | 4→3,1→4,2→4,3→4 |
| **H** | BCEFG | 5→3,6→3,1→4,2→4,3→4 |
| **L** | DEF | 7→3,1→4,2→4 |
| **P** | ABEFG | 4→3,5→3,1→4,2→4,3→4 |
| **U** | BCDEF | 5→3,6→3,7→3,1→4,2→4 |
| **o** | CDEG | 6→3,7→3,1→4,3→4 |
| **n** | CEG | 6→3,1→4,3→4 |
| **r** | EG | 1→4,3→4 |
| **y** | BCDFG | 5→3,6→3,7→3,2→4,3→4 |
| **t** | DEFG | 7→3,1→4,2→4,3→4 |
## 三、DIG4 组合表(数字 + 字母)
| 字符 | 亮段 | 脚对(高→低) |
|---|---|---|
| **0** | ABCDEF | 5→4,6→4,7→4,1→5,2→5,3→5 |
| **1** | BC | 6→4,7→4 |
| **2** | ABDEG | 5→4,6→4,1→5,2→5,4→5 |
| **3** | ABCDG | 5→4,6→4,7→4,1→5,4→5 |
| **4** | BCFG | 6→4,7→4,3→5,4→5 |
| **5** | ACDFG | 5→4,7→4,1→5,3→5,4→5 |
| **6** | ACDEFG | 5→4,7→4,1→5,2→5,3→5,4→5 |
| **7** | ABC | 5→4,6→4,7→4 |
| **8** | ABCDEFG | 5→4,6→4,7→4,1→5,2→5,3→5,4→5 |
| **9** | ABCDFG | 5→4,6→4,7→4,1→5,3→5,4→5 |
| **A** | ABCEFG | 5→4,6→4,7→4,2→5,3→5,4→5 |
| **b** | CDEFG | 7→4,1→5,2→5,3→5,4→5 |
| **C** | ADEF | 5→4,1→5,2→5,3→5 |
| **d** | BCDEG | 6→4,7→4,1→5,2→5,4→5 |
| **E** | ADEFG | 5→4,1→5,2→5,3→5,4→5 |
| **F** | AEFG | 5→4,2→5,3→5,4→5 |
| **H** | BCEFG | 6→4,7→4,2→5,3→5,4→5 |
| **L** | DEF | 1→5,2→5,3→5 |
| **P** | ABEFG | 5→4,6→4,2→5,3→5,4→5 |
| **U** | BCDEF | 6→4,7→4,1→5,2→5,3→5 |
| **o** | CDEG | 7→4,1→5,2→5,4→5 |
| **n** | CEG | 7→4,2→5,4→5 |
| **r** | EG | 2→5,4→5 |
| **y** | BCDFG | 6→4,7→4,1→5,3→5,4→5 |
| **t** | DEFG | 1→5,2→5,3→5,4→5 |
## 三、DIG5 组合表(数字 + 字母)
| 字符 | 亮段 | 脚对(高→低) |
|---|---|---|
| **0** | ABCDEF | 6→5,7→5,1→6,2→6,3→6,4→6 |
| **1** | BC | 7→5,1→6 |
| **2** | ABDEG | 6→5,7→5,2→6,3→6,5→6 |
| **3** | ABCDG | 6→5,7→5,1→6,2→6,5→6 |
| **4** | BCFG | 7→5,1→6,4→6,5→6 |
| **5** | ACDFG | 6→5,1→6,2→6,4→6,5→6 |
| **6** | ACDEFG | 6→5,1→6,2→6,3→6,4→6,5→6 |
| **7** | ABC | 6→5,7→5,1→6 |
| **8** | ABCDEFG | 6→5,7→5,1→6,2→6,3→6,4→6,5→6 |
| **9** | ABCDFG | 6→5,7→5,1→6,2→6,4→6,5→6 |
| **A** | ABCEFG | 6→5,7→5,1→6,3→6,4→6,5→6 |
| **b** | CDEFG | 1→6,2→6,3→6,4→6,5→6 |
| **C** | ADEF | 6→5,2→6,3→6,4→6 |
| **d** | BCDEG | 7→5,1→6,2→6,3→6,5→6 |
| **E** | ADEFG | 6→5,2→6,3→6,4→6,5→6 |
| **F** | AEFG | 6→5,3→6,4→6,5→6 |
| **H** | BCEFG | 7→5,1→6,3→6,4→6,5→6 |
| **L** | DEF | 2→6,3→6,4→6 |
| **P** | ABEFG | 6→5,7→5,3→6,4→6,5→6 |
| **U** | BCDEF | 7→5,1→6,2→6,3→6,4→6 |
| **o** | CDEG | 1→6,2→6,3→6,5→6 |
| **n** | CEG | 1→6,3→6,5→6 |
| **r** | EG | 3→6,5→6 |
| **y** | BCDFG | 7→5,1→6,2→6,4→6,5→6 |
| **t** | DEFG | 2→6,3→6,4→6,5→6 |
## 四、DIG6 指示段(不是数字位)
| 段 | 功能 | 点亮方式 |
|---|---|---|
| A6(上面) | 华氏度 °F 符号 | 7→6 |
| B6(下面) | 小数点 DP | 1→7 |
> DIG6 只有这两段,无 C~G。
## 五、固件换算公式
设段 `S`(A=0…G=6)、位 `D`(DIG1=1…DIG5=5):
```
HIGH脚 = ((S + D) % 7) + 1
LOW脚 = D + (S + D) / 7 // 整除
```
DIG6 两个固定脚对:`°F = 7高6低`,`小数点 = 1高7低`。
## 六、控制要点
1. **7 个脚必须支持三态**(高/低/高阻):点段前先把 7 脚全切输入,再只把目标 2 脚切输出。
2. **限流电阻**:若 YF30137 内部无电阻,每脚(或每段)串 100~330Ω(看亮度),否则烧段/烧 IO。
3. **防鬼影**:点完一段立即切回全高阻再点下一段。
4. **刷新率**:温度用 3 位(DIG1~3)+ 小数点,共 21+1 段,全扫一遍 ≥ 50~60Hz(每段约 0.7ms)。
5. **扫描实现**:建议用定时器中断(TIM3 或 SysTick)逐段点亮,别用主循环阻塞。
## 七、温度显示示例(8.0~36.7℃,格式 XX.X)
| 温度 | DIG1 | DIG2 | DIG3 | 小数点(B6) | °F(A6) |
|---|---|---|---|---|---|
| 36.7 | 3 | 6 | 7 | 1→7 | 灭(摄氏) |
| 8.0 | (灭/空白) | 8 | 0 | 1→7 | 灭(摄氏) |
| 25.0 | 2 | 5 | 0 | 1→7 | 灭(摄氏) |

View File

@ -1461,3 +1461,31 @@ APP2 链接的镜像发向 APP1 区。设备端 END 校验(向量表 Reset PC
(`APP_FW_VERSION_NUM` 0x0001001C → 0x0001001D)。
- 构建/出包:Boot bin 14004B;APP1 bin 56120B(crc 0x747E4248,ver 0x0001001D),
APP2 56420B;OTA 载荷随 APP 一并更新。
## 58. YF30137 七脚数码管显示驱动 + 取消 Boot strap 下载检测(2026-09-06,APP V1.00.30 / Boot V1.00.06)
- 新增 YF30137 七脚数码管显示驱动(Charlieplexing,7 个 GPIO 直接扫描,
段位真值表见 `docs/YF30137_驱动真值表.md`):
- `mcm-ddc-ble/src/app_display.c` + `inc/app_display.h`:独立 FreeRTOS 任务
`display_task`(优先级 1、栈 256 字、20ms 帧周期)逐段点亮;
- 7 脚映射(脚1~7 = 网络 LED_1~7):PB0 / PB1 / PA0 / PA1 / PB11 / PB13 / PA6;
- 段→脚公式 `HIGH=((S+D)%7)+1`、`LOW=D+(S+D)/7`(S=A0..G6,D=DIG1..5),
DIG6 两指示段:A6=°F(7高6低)、B6=小数点(1高7低);
- 三态驱动:点段时高脚拉高/低脚拉低、其余 5 脚高阻,点完立即回高阻(防鬼影);
- 显示接口:`volatile` 全局变量(float 数值 / type 类型 / base 进制)+
无锁 `display_set(value, type, base)`;`base=10` 十进制(1 位小数)、
`base=16` 十六进制(整数按 hex);`type` 控制 °F 指示灯;负号用 G 段;
- 显示能力:5 位数字 + 小数点 + °F,段码含 0~9 / A~F / H L P U o n r y t。
- 原 LED1(PB0)/LED2(PA6) 运行/连接指示灯移除(两脚让给数码管):
- `main.c` 删 `led_task` 与 `LedInit(LED1/LED2)`,改创建 `display_task`;
- `app_ble.c` 删 `app_ble_connected/disconnected` 里的 LED2 `LedOn/LedOff`;
- `mcm-ddc-ble.uvprojx` USER 组加入 `app_display.c`(3 个 target)。
- Boot 取消 PB5 strap 引脚进 download 模式(管脚让出):
- `Boot/src/main.c` 删 `boot_dl_strap_active()` 与 strap 检测分支,保留
USART1 2s 回车窗口 + 无有效镜像自动进 download 两条路径(功能仍在)。
- 版本:APP `V1.00.29` → `V1.00.30`(NUM 0x0001001D → 0x0001001E);
Boot `V1.00.05` → `V1.00.06`。
- 构建/出包:APP1 bin 56584B(ver 0x0001001E)、APP2 56888B;Boot bin 13856B
(16KB 区内);整包 + OTA 包已更新。APP ZI 不变(30140),`__initial_sp`
0x2000BDF0 距 0x2000C000 悬崖 528B(merge_image.py 报 within 1KB 警告,
为既有状态,非本次引入,后续加 ZI 需注意)。

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1083,6 +1083,11 @@
<FileType>1</FileType>
<FilePath>..\src\app_gpio.c</FilePath>
</File>
<File>
<FileName>app_display.c</FileName>
<FileType>1</FileType>
<FilePath>..\src\app_display.c</FilePath>
</File>
<File>
<FileName>app_params.c</FileName>
<FileType>1</FileType>
@ -2244,6 +2249,11 @@
<FileType>1</FileType>
<FilePath>..\src\app_gpio.c</FilePath>
</File>
<File>
<FileName>app_display.c</FileName>
<FileType>1</FileType>
<FilePath>..\src\app_display.c</FilePath>
</File>
<File>
<FileName>app_params.c</FileName>
<FileType>1</FileType>
@ -3114,6 +3124,11 @@
<FileType>1</FileType>
<FilePath>..\src\app_gpio.c</FilePath>
</File>
<File>
<FileName>app_display.c</FileName>
<FileType>1</FileType>
<FilePath>..\src\app_display.c</FilePath>
</File>
<File>
<FileName>app_params.c</FileName>
<FileType>1</FileType>
@ -3984,6 +3999,11 @@
<FileType>1</FileType>
<FilePath>..\src\app_gpio.c</FilePath>
</File>
<File>
<FileName>app_display.c</FileName>
<FileType>1</FileType>
<FilePath>..\src\app_display.c</FilePath>
</File>
<File>
<FileName>app_params.c</FileName>
<FileType>1</FileType>

View File

@ -0,0 +1,48 @@
/**
* @file app_display.h
* @brief YF30137 7-segment display driver.
*
* The YF30137 is a 7-pin Charlieplexed LED module:
* - 5 seven-segment digits (DIG1..DIG5, segments A..G)
* - DIG6 holds two single indicators: A6 = "deg F", B6 = decimal point
*
* A dedicated FreeRTOS task (display_task) scans the module continuously.
* Every other task updates the display simply by calling display_set();
* the scan task only reads the global state and never blocks callers.
*/
#ifndef __APP_DISPLAY_H__
#define __APP_DISPLAY_H__
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
/* Display type / unit (controls the DIG6 "deg F" indicator A6) */
#define DISP_TYPE_CELSIUS 0u /* degree C: A6 off */
#define DISP_TYPE_FAHRENHEIT 1u /* degree F: A6 on */
/* Number base for the displayed value */
#define DISP_BASE_DECIMAL 10u
#define DISP_BASE_HEX 16u
/**
* @brief Update what the display should show (read by the scan task).
* @param value floating value to display
* @param type DISP_TYPE_CELSIUS / DISP_TYPE_FAHRENHEIT
* @param base DISP_BASE_DECIMAL (1 decimal place) / DISP_BASE_HEX
* @note Non-blocking; may be called from any task context.
*/
void display_set(float value, uint8_t type, uint8_t base);
/**
* @brief Display driver FreeRTOS task: Charlieplexing scan loop, never returns.
*/
void display_task(void *pvParameters);
#ifdef __cplusplus
}
#endif
#endif /* __APP_DISPLAY_H__ */

View File

@ -9,12 +9,12 @@
#define __APP_VERSION_H__
#ifndef APP_FW_VERSION
#define APP_FW_VERSION "V1.00.29"
#define APP_FW_VERSION "V1.00.30"
#endif
/* Numeric form used by the BLE info query / OTA records: 0x00MMmmpp */
#ifndef APP_FW_VERSION_NUM
#define APP_FW_VERSION_NUM 0x0001001Du
#define APP_FW_VERSION_NUM 0x0001001Eu
#endif
#endif /* __APP_VERSION_H__ */

View File

@ -314,7 +314,6 @@ void app_ble_init(void)
*/
void app_ble_connected(void)
{
LedOn(LED2_PORT,LED2_PIN);
notify_en = 0;
if (app_ble_proto_log_get())
{
@ -341,7 +340,6 @@ void app_ble_disconnected(void)
ns_ble_adv_start();
app_ble_proto_on_disconnect(); /* drop half RX frame + uplink buffer */
LedOff(LED2_PORT,LED2_PIN);
notify_en = 0;
if (app_ble_proto_log_get())
{

View File

@ -0,0 +1,395 @@
/**
* @file app_display.c
* @brief YF30137 7-segment display driver (Charlieplexing, 7 GPIOs).
*
* The YF30137 is a 7-pin Charlieplexed display: every segment is a LED wired
* between a unique ordered pair of the 7 pins. Lighting one segment means
* driving its "high" pin HIGH, its "low" pin LOW and leaving the other five
* pins high-impedance, one segment at a time (the shared pins forbid lighting
* several segments of one digit simultaneously).
*
* Pin mapping (net name -> MCU pin):
* pin1 = LED_1 = PB0 pin2 = LED_2 = PB1 pin3 = LED_3 = PA0
* pin4 = LED_4 = PA1 pin5 = LED_5 = PB11 pin6 = LED_6 = PB13
* pin7 = LED_7 = PA6
*
* Segment (s) of digit (d) is lit by pin HIGH -> pin LOW:
* HIGH = ((s + d) % 7) + 1
* LOW = d + (s + d) / 7 (s: A=0..G=6, d: DIG1=1..DIG5=5)
*
* DIG6 indicators:
* A6 (deg F) = pin7 HIGH, pin6 LOW
* B6 (dot) = pin1 HIGH, pin7 LOW
*
* Other tasks update the display via display_set(); this task only reads the
* volatile globals and scans, so it never blocks the callers.
*/
#include "app_display.h"
#include "n32wb03x.h"
#include "ns_delay.h"
#include "FreeRTOS.h"
#include "task.h"
#include "app_wdt.h"
/** @addtogroup
* @{
*/
/* Private typedef -----------------------------------------------------------*/
/** One display pin (GPIO port + pin). */
typedef struct
{
GPIO_Module *port;
uint16_t pin;
} disp_pin_t;
/* Private define ------------------------------------------------------------*/
/** Per-segment on-time in us (sets brightness and scan rate). */
#define DISP_SEG_ON_US 250u
/** Number of full seven-segment digits. */
#define DISP_DIGITS 5u
/* Segment bit mask, bit0=A .. bit6=G. */
#define SEG_BLANK 0x00u
#define SEG_MINUS 0x40u /* '-' = G only */
/* Decode marker codes (not a real digit). */
#define CHAR_MINUS 0x10u
#define CHAR_BLANK 0xFFu
/* Private constants ----------------------------------------------------------*/
/** Display pin table, index 0..6 = display pin 1..7. */
static const disp_pin_t s_disp_pin[7] =
{
{ GPIOB, GPIO_PIN_0 }, /* pin1 = LED_1 = PB0 */
{ GPIOB, GPIO_PIN_1 }, /* pin2 = LED_2 = PB1 */
{ GPIOA, GPIO_PIN_0 }, /* pin3 = LED_3 = PA0 */
{ GPIOA, GPIO_PIN_1 }, /* pin4 = LED_4 = PA1 */
{ GPIOB, GPIO_PIN_11 }, /* pin5 = LED_5 = PB11 */
{ GPIOB, GPIO_PIN_13 }, /* pin6 = LED_6 = PB13 */
{ GPIOA, GPIO_PIN_6 }, /* pin7 = LED_7 = PA6 */
};
/* Seven-segment codes, bit0=A .. bit6=G. */
static const uint8_t s_seg_digit[10] =
{
0x3Fu, /* 0 = ABCDEF */
0x06u, /* 1 = BC */
0x5Bu, /* 2 = ABDEG */
0x4Fu, /* 3 = ABCDG */
0x66u, /* 4 = BCFG */
0x6Du, /* 5 = ACDFG */
0x7Du, /* 6 = ACDEFG */
0x07u, /* 7 = ABC */
0x7Fu, /* 8 = ABCDEFG */
0x6Fu, /* 9 = ABCDFG */
};
/* Hex digit codes, index 0..5 = A..F. */
static const uint8_t s_seg_hex[6] =
{
0x77u, /* A = ABCEFG */
0x7Cu, /* b = CDEFG */
0x39u, /* C = ADEF */
0x5Eu, /* d = BCDEG */
0x79u, /* E = ADEFG */
0x71u, /* F = AEFG */
};
/* Private variables ----------------------------------------------------------*/
/** Display value written by other tasks through display_set(). */
static volatile float g_disp_value = 0.0f;
/** Display unit: DISP_TYPE_CELSIUS / DISP_TYPE_FAHRENHEIT. */
static volatile uint8_t g_disp_type = DISP_TYPE_CELSIUS;
/** Number base: DISP_BASE_DECIMAL / DISP_BASE_HEX. */
static volatile uint8_t g_disp_base = DISP_BASE_DECIMAL;
/* Private function prototypes -----------------------------------------------*/
/* Private functions ----------------------------------------------------------*/
/**
* @brief Set a display pin to input (high-impedance).
*/
static void pin_input(uint8_t idx)
{
GPIO_InitType s;
GPIO_InitStruct(&s);
s.Pin = s_disp_pin[idx].pin;
s.GPIO_Mode = GPIO_MODE_INPUT;
s.GPIO_Pull = GPIO_NO_PULL;
GPIO_InitPeripheral(s_disp_pin[idx].port, &s);
}
/**
* @brief Set a display pin to push-pull output HIGH.
*/
static void pin_high(uint8_t idx)
{
GPIO_InitType s;
GPIO_InitStruct(&s);
s.Pin = s_disp_pin[idx].pin;
s.GPIO_Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitPeripheral(s_disp_pin[idx].port, &s);
GPIO_SetBits(s_disp_pin[idx].port, s_disp_pin[idx].pin);
}
/**
* @brief Set a display pin to push-pull output LOW.
*/
static void pin_low(uint8_t idx)
{
GPIO_InitType s;
GPIO_InitStruct(&s);
s.Pin = s_disp_pin[idx].pin;
s.GPIO_Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitPeripheral(s_disp_pin[idx].port, &s);
GPIO_ResetBits(s_disp_pin[idx].port, s_disp_pin[idx].pin);
}
/**
* @brief Put all seven display pins into high-impedance (input).
*/
static void all_pins_input(void)
{
uint8_t i;
for (i = 0; i < 7; i++)
{
pin_input(i);
}
}
/**
* @brief Light one segment: pin h HIGH, pin l LOW, others stay high-Z, then
* release both pins back to high-Z.
*/
static void seg_pair_on(uint8_t h, uint8_t l)
{
pin_high(h);
pin_low(l);
delay_n_10us(DISP_SEG_ON_US / 10u);
pin_input(h);
pin_input(l);
}
/**
* @brief Light segment s (A=0..G=6) of digit d (1..5).
*/
static void seg_on(uint8_t s, uint8_t d)
{
uint8_t h = (uint8_t)((s + d) % 7u);
uint8_t l = (uint8_t)((d - 1u) + (s + d) / 7u);
seg_pair_on(h, l);
}
/**
* @brief Light the DIG6 "deg F" indicator (A6).
*/
static void dig6_degf_on(void)
{
seg_pair_on(6u, 5u); /* pin7 HIGH, pin6 LOW */
}
/**
* @brief Light the DIG6 decimal-point indicator (B6).
*/
static void dig6_dp_on(void)
{
seg_pair_on(0u, 6u); /* pin1 HIGH, pin7 LOW */
}
/**
* @brief Map a decode character to its segment bit mask.
*/
static uint8_t seg_of_char(uint8_t c)
{
if (c <= 9u)
{
return s_seg_digit[c];
}
if (c < 0x10u)
{
return s_seg_hex[c - 0xAu];
}
if (c == CHAR_MINUS)
{
return SEG_MINUS;
}
return SEG_BLANK;
}
/**
* @brief Decode the display value into 5 digit codes + a decimal-point flag.
* @param value value to display
* @param base DISP_BASE_DECIMAL (1 decimal place) or DISP_BASE_HEX
* @param digits out: 5 codes (0..9, 0xA..0xF for hex, CHAR_MINUS, CHAR_BLANK)
* @param dp_flag out: 1 = light the DIG6 decimal point
*/
static void display_decode(float value, uint8_t base, uint8_t *digits, uint8_t *dp_flag)
{
uint8_t i, j;
*dp_flag = 0u;
for (i = 0; i < DISP_DIGITS; i++)
{
digits[i] = CHAR_BLANK;
}
if (base == DISP_BASE_HEX)
{
uint32_t iv = (uint32_t)(int32_t)value; /* integer part */
uint8_t hx[DISP_DIGITS];
uint8_t lead = 1u;
for (j = 0; j < DISP_DIGITS; j++)
{
hx[DISP_DIGITS - 1u - j] = (uint8_t)(iv & 0xFu);
iv >>= 4u;
}
for (j = 0; j < DISP_DIGITS; j++)
{
if (lead && hx[j] == 0u && j < (DISP_DIGITS - 1u))
{
digits[j] = CHAR_BLANK; /* blank leading zeros */
}
else
{
lead = 0u;
digits[j] = hx[j];
}
}
}
else /* DISP_BASE_DECIMAL */
{
int neg = (value < 0.0f);
float a = neg ? -value : value;
int32_t scaled;
uint8_t dc[DISP_DIGITS];
uint8_t lead = 1u;
if (a > 9999.9f)
{
a = 9999.9f;
}
scaled = (int32_t)(a * 10.0f + 0.5f); /* value * 10, 1 decimal */
for (j = 0; j < DISP_DIGITS; j++)
{
dc[DISP_DIGITS - 1u - j] = (uint8_t)(scaled % 10);
scaled /= 10;
}
for (j = 0; j < DISP_DIGITS; j++)
{
if (lead && dc[j] == 0u && j < (DISP_DIGITS - 1u))
{
digits[j] = CHAR_BLANK; /* blank leading zeros */
}
else
{
lead = 0u;
digits[j] = dc[j];
}
}
*dp_flag = 1u; /* decimal point always on */
if (neg)
{
for (j = 0; j < DISP_DIGITS; j++)
{
if (digits[j] != CHAR_BLANK)
{
break;
}
}
if (j > 0u)
{
digits[j - 1u] = CHAR_MINUS; /* '-' just before the value */
}
}
}
}
/* Public functions -----------------------------------------------------------*/
/**
* @brief Update the display content.
* @param value floating value to display
* @param type DISP_TYPE_CELSIUS / DISP_TYPE_FAHRENHEIT
* @param base DISP_BASE_DECIMAL / DISP_BASE_HEX
*/
void display_set(float value, uint8_t type, uint8_t base)
{
/* A single scan frame may observe a partially-updated triple; that is
* harmless for a display and keeps the setter lock-free. */
g_disp_value = value;
g_disp_type = type;
g_disp_base = base;
}
/**
* @brief Display driver task: decode the global value and scan every lit
* segment, one at a time, forever.
*/
void display_task(void *pvParameters)
{
(void)pvParameters;
all_pins_input();
for (;;)
{
float value = g_disp_value;
uint8_t type = g_disp_type;
uint8_t base = g_disp_base;
uint8_t digits[DISP_DIGITS];
uint8_t dp_flag;
uint8_t d, s;
uint8_t segmask;
display_decode(value, base, digits, &dp_flag);
app_wdt_heartbeat();
/* DIG1..DIG5 */
for (d = 1u; d <= DISP_DIGITS; d++)
{
segmask = seg_of_char(digits[d - 1u]);
if (segmask == SEG_BLANK)
{
continue;
}
for (s = 0; s < 7u; s++)
{
if (segmask & (1u << s))
{
seg_on(s, d);
}
}
}
/* DIG6 indicators */
if (type != DISP_TYPE_CELSIUS)
{
dig6_degf_on();
}
if (dp_flag)
{
dig6_dp_on();
}
/* one scan frame done: yield; a 20 ms refresh is enough for the display */
vTaskDelay(pdMS_TO_TICKS(20));
}
}
/**
* @}
*/

View File

@ -85,6 +85,7 @@
#include "app_version.h"
#include "app_user_config.h"
#include "app_wdt.h"
#include "app_display.h"
#include "n32wb03x_iwdg.h"
/* Private typedef -----------------------------------------------------------*/
@ -104,8 +105,8 @@
#define BLE_SCHED_TASK_STACK (512) /* stack in words */
#define BLE_SCHED_TASK_PRIORITY (2)
#define LED_TASK_STACK (128) /* stack in words */
#define LED_TASK_PRIORITY (1)
#define DISP_TASK_STACK (256) /* stack in words */
#define DISP_TASK_PRIORITY (1)
/* Private constants ----------------------------------------------------------*/
/* Private variables ----------------------------------------------------------*/
@ -188,28 +189,6 @@ static void ble_schedule_task(void *pvParameters)
}
}
/**
* @brief LED blink task: toggle LED1 (PB0) as a run indicator; the half
* period comes from the APP_DATA parameter record (led1_blink_ms,
* "appset led <50..10000>"). LED2 (PA6) stays owned by
* app_ble.c as the connection state LED.
*/
static void led_task(void *pvParameters)
{
(void)pvParameters;
for (;;)
{
uint16_t period = app_params_get()->led1_blink_ms;
if (period < PARAM_LED1_BLINK_MS_MIN)
{
period = PARAM_LED1_BLINK_MS_DEF;
}
app_wdt_heartbeat();
LedBlink(LED1_PORT, LED1_PIN);
vTaskDelay(pdMS_TO_TICKS(period));
}
}
/**
* @brief main function
* @param
@ -250,10 +229,6 @@ int main(void)
/* frame protocol frontend: CLI-over-BLE (rdtss characteristics) */
app_ble_proto_init();
// periph init
LedInit(LED1_PORT,LED1_PIN); // power led
LedInit(LED2_PORT,LED2_PIN); //connection state
/* Load APP_DATA parameter record (defaults in RAM when invalid) */
app_params_init();
@ -264,9 +239,9 @@ int main(void)
/* BLE kernel schedule task (replaces the bare-metal while loop) */
xTaskCreate(ble_schedule_task, "BLE", BLE_SCHED_TASK_STACK, NULL,
BLE_SCHED_TASK_PRIORITY, NULL);
/* LED1 blink task */
xTaskCreate(led_task, "LED", LED_TASK_STACK, NULL,
LED_TASK_PRIORITY, NULL);
/* YF30137 7-seg display scan task (Charlieplexing over 7 GPIOs) */
xTaskCreate(display_task, "DISP", DISP_TASK_STACK, NULL,
DISP_TASK_PRIORITY, NULL);
/* CLI task (command parsing/execution/response over UART + BLE) */
AppCli_Init();

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,7 +1,7 @@
{
"file": "mothercup_ble_prod_ota.bin",
"target_bank": 1,
"size": 56120,
"crc32": "0x747E4248",
"version": 65565
"size": 56584,
"crc32": "0xEE8BBF75",
"version": 65566
}

View File

@ -1,7 +1,7 @@
{
"file": "mothercup_ble_prod_ota_app2.bin",
"target_bank": 2,
"size": 56420,
"crc32": "0x4F5B94CD",
"version": 65565
"size": 56888,
"crc32": "0x7D11C1E5",
"version": 65566
}