Boot改为跳转时不校验镜像CRC(校验移到OTA升级过程),修复Keil下载后无法调试;新增debug_app.ini调试旁路;补充开发日志(第19节)与mcm-ddc-ble工程日志
This commit is contained in:
parent
5e9de32eee
commit
5d5c1d827c
13
AGENTS.md
13
AGENTS.md
@ -7,11 +7,13 @@
|
|||||||
当前活跃工程:
|
当前活跃工程:
|
||||||
|
|
||||||
- **`mcm-ddc-04/`** — 主工程(APP,链接在 APP1 bank `0x01008000`/224KB):UART(printf 重定向 + DMA 发送 + RX 中断)、CLI 命令框架(UART + BLE 双通道)、FreeRTOS 多任务、GPIO 点灯、BLE 协议栈(自定义 GATT 透传服务 CLS)、BLE OTA 双 bank 直写升级(见开发日志第 15/16 节、`docs/ble_protocol.md`)。
|
- **`mcm-ddc-04/`** — 主工程(APP,链接在 APP1 bank `0x01008000`/224KB):UART(printf 重定向 + DMA 发送 + RX 中断)、CLI 命令框架(UART + BLE 双通道)、FreeRTOS 多任务、GPIO 点灯、BLE 协议栈(自定义 GATT 透传服务 CLS)、BLE OTA 双 bank 直写升级(见开发日志第 15/16 节、`docs/ble_protocol.md`)。
|
||||||
- **`Boot/`** — 自写精简 bootloader(链接在 `0x01000000`/16KB):bootsetting 裁决 + 镜像 CRC32 校验 + VTOR 重映射跳转;首次无 bootsetting 时向量检查后直跳 APP1。
|
- **`Boot/`** — 自写精简 bootloader(链接在 `0x01000000`/16KB):只做 bootsetting 裁决(magic + 自身 CRC32)选 bank + 向量表 sanity 检查后直跳;**镜像 CRC 在 OTA 升级过程中校验(app_ota.c OTA_END),Boot 跳转时不校验**(开发日志第 19 节)。
|
||||||
|
- **`mcm-ddc-ble/`** — 独立 BLE 工程(基于 SDK rdtss 例程,链接在 `0x01000000`,无 bootloader/OTA):BLE↔USART1 透传 + FreeRTOS(BLE 调度任务 + LED1 点灯任务),睡眠已锁保 SWD。日志在 `mcm-ddc-ble/docs/开发日志.md`。
|
||||||
|
|
||||||
仓库顶层目录:
|
仓库顶层目录:
|
||||||
|
|
||||||
- `mcm-ddc-04/` — 主工程(应用代码、MDK 工程文件、开发日志)
|
- `mcm-ddc-04/` — 主工程(应用代码、MDK 工程文件、开发日志)
|
||||||
|
- `mcm-ddc-ble/` — 独立 BLE 工程(rdtss 蓝本 + FreeRTOS,0x01000000 直跑)
|
||||||
- `Boot/` — bootloader 工程(`src/main.c`、`dfu_layout.h`、`boot_crc32.c`;后两个被 APP 工程以相对路径 `..\..\Boot\src` 共用)
|
- `Boot/` — bootloader 工程(`src/main.c`、`dfu_layout.h`、`boot_crc32.c`;后两个被 APP 工程以相对路径 `..\..\Boot\src` 共用)
|
||||||
- `tools/` — 烧录包工具:`merge_image.py`(合并 boot+APP 为整片 hex/bin)、`make_package.bat`(一键构建+合并)、`flash_package.bat`(NSpyocd 整片烧录),产物在 `tools/out/`
|
- `tools/` — 烧录包工具:`merge_image.py`(合并 boot+APP 为整片 hex/bin)、`make_package.bat`(一键构建+合并)、`flash_package.bat`(NSpyocd 整片烧录),产物在 `tools/out/`
|
||||||
- `nations-tec/` — 厂商资源:SDK V2.0.0、DFP 器件包、STB 开发板资料、官方 PDF 文档。**这些内容为只读参考资料,不要修改。**
|
- `nations-tec/` — 厂商资源:SDK V2.0.0、DFP 器件包、STB 开发板资料、官方 PDF 文档。**这些内容为只读参考资料,不要修改。**
|
||||||
@ -73,11 +75,10 @@ SDK 源码(固件库、CMSIS、FreeRTOS V9.0.0、BLE 协议栈/profile/ns_libr
|
|||||||
烧录与运行:
|
烧录与运行:
|
||||||
|
|
||||||
1. Keil 打开 `MDK-ARM/embeddedSrc.uvprojx`,F7 编译
|
1. Keil 打开 `MDK-ARM/embeddedSrc.uvprojx`,F7 编译
|
||||||
2. NS-LINK 接 SWD(PA4/PA5),F8 下载
|
2. NS-LINK 接 SWD(PA4/PA5),F8 下载——Boot 跳转不校验镜像 CRC 后,Keil 直接下载 APP 即可正常启动调试;工程调试配置挂了 `MDK-ARM/debug_app.ini`(强制 SP/PC 从 APP1 向量表取,跳过 Boot 旁路,可选)
|
||||||
3. 串口助手接 PB6(TX)/PB7(RX),115200 8N1,复位后应看到启动 banner 与 `caiic->` CLI 提示符(输入 `help` 查看命令;LED 滚动日志默认关闭,用 `log on` 打开)
|
3. 独立运行(脱调试器)需烧整片包:`tools\flash_package.bat tools\out\caiic_full.bin`(改代码后先 `make_package.bat` 重新出包)。**板子上烧过其他 0x01000000 起步的程序会覆盖 Boot/bootsetting,恢复靠重烧整片包**
|
||||||
4. BLE:手机 nRF Connect 应能搜到并连接 `CAIIC-MCM`,可见自定义服务(写特征 + notify 特征)
|
4. 串口助手接 PB6(TX)/PB7(RX),115200 8N1,复位后应看到启动 banner 与 `caiic->` CLI 提示符(输入 `help` 查看命令;LED 滚动日志默认关闭,用 `log on` 打开)
|
||||||
|
5. BLE:手机 nRF Connect 应能搜到并连接 `CAIIC-MCM`,可见自定义服务(写特征 + notify 特征)
|
||||||
注意:本工程当前尚未在真实硬件上实测(见开发日志第 8、9、10、15 节)。
|
|
||||||
|
|
||||||
## 硬件引脚约束(重要)
|
## 硬件引脚约束(重要)
|
||||||
|
|
||||||
|
|||||||
@ -31,9 +31,7 @@ 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(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.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
|
system_n32wb03x.o(i.system_delay_n_10us) refers to system_n32wb03x.o(.emb_text) for system_delay_cycles
|
||||||
main.o(i.bank_crc_ok) refers to boot_crc32.o(i.caiic_crc32) for caiic_crc32
|
|
||||||
main.o(i.main) refers to boot_crc32.o(i.caiic_crc32) for caiic_crc32
|
main.o(i.main) refers to boot_crc32.o(i.caiic_crc32) for caiic_crc32
|
||||||
main.o(i.main) refers to main.o(i.bank_crc_ok) for bank_crc_ok
|
|
||||||
main.o(i.main) refers to main.o(i.bank_vector_ok) for bank_vector_ok
|
main.o(i.main) refers to main.o(i.bank_vector_ok) for bank_vector_ok
|
||||||
main.o(i.main) refers to main.o(i.jump_to_app) for jump_to_app
|
main.o(i.main) refers to main.o(i.jump_to_app) for jump_to_app
|
||||||
entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry10a.o(.ARM.Collect$$$$0000000D) for __rt_final_cpp
|
entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry10a.o(.ARM.Collect$$$$0000000D) for __rt_final_cpp
|
||||||
@ -77,8 +75,9 @@ Image Symbol Table
|
|||||||
Symbol Name Value Ov Type Size Object(Section)
|
Symbol Name Value Ov Type Size Object(Section)
|
||||||
|
|
||||||
../clib/microlib/division.c 0x00000000 Number 0 uidiv.o ABSOLUTE
|
../clib/microlib/division.c 0x00000000 Number 0 uidiv.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 entry.o ABSOLUTE
|
../clib/microlib/init/entry.s 0x00000000 Number 0 entry.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 entry9b.o ABSOLUTE
|
||||||
../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.o ABSOLUTE
|
../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.o ABSOLUTE
|
||||||
../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE
|
../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE
|
||||||
@ -88,10 +87,9 @@ Image Symbol Table
|
|||||||
../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE
|
../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE
|
||||||
../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE
|
../clib/microlib/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 entry5.o ABSOLUTE
|
||||||
../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE
|
|
||||||
../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE
|
../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.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 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/memset.c 0x00000000 Number 0 memseta.o ABSOLUTE
|
||||||
..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\startup\startup_n32wb03x.s 0x00000000 Number 0 startup_n32wb03x.o ABSOLUTE
|
..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\startup\startup_n32wb03x.s 0x00000000 Number 0 startup_n32wb03x.o ABSOLUTE
|
||||||
..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\system_n32wb03x.c 0x00000000 Number 0 system_n32wb03x.o ABSOLUTE
|
..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\system_n32wb03x.c 0x00000000 Number 0 system_n32wb03x.o ABSOLUTE
|
||||||
@ -129,17 +127,15 @@ Image Symbol Table
|
|||||||
i.__scatterload_zeroinit 0x010004d4 Section 14 handlers.o(i.__scatterload_zeroinit)
|
i.__scatterload_zeroinit 0x010004d4 Section 14 handlers.o(i.__scatterload_zeroinit)
|
||||||
i.__set_PRIMASK 0x010004e2 Section 0 system_n32wb03x.o(i.__set_PRIMASK)
|
i.__set_PRIMASK 0x010004e2 Section 0 system_n32wb03x.o(i.__set_PRIMASK)
|
||||||
__set_PRIMASK 0x010004e3 Thumb Code 6 system_n32wb03x.o(i.__set_PRIMASK)
|
__set_PRIMASK 0x010004e3 Thumb Code 6 system_n32wb03x.o(i.__set_PRIMASK)
|
||||||
i.bank_crc_ok 0x010004e8 Section 0 main.o(i.bank_crc_ok)
|
i.bank_vector_ok 0x010004e8 Section 0 main.o(i.bank_vector_ok)
|
||||||
bank_crc_ok 0x010004e9 Thumb Code 48 main.o(i.bank_crc_ok)
|
bank_vector_ok 0x010004e9 Thumb Code 46 main.o(i.bank_vector_ok)
|
||||||
i.bank_vector_ok 0x01000518 Section 0 main.o(i.bank_vector_ok)
|
i.caiic_crc32 0x01000518 Section 0 boot_crc32.o(i.caiic_crc32)
|
||||||
bank_vector_ok 0x01000519 Thumb Code 46 main.o(i.bank_vector_ok)
|
i.jump_to_app 0x0100055c Section 0 main.o(i.jump_to_app)
|
||||||
i.caiic_crc32 0x01000548 Section 0 boot_crc32.o(i.caiic_crc32)
|
jump_to_app 0x0100055d Thumb Code 30 main.o(i.jump_to_app)
|
||||||
i.jump_to_app 0x0100058c Section 0 main.o(i.jump_to_app)
|
i.main 0x01000580 Section 0 main.o(i.main)
|
||||||
jump_to_app 0x0100058d Thumb Code 30 main.o(i.jump_to_app)
|
i.read_flash_ID 0x010005c4 Section 0 system_n32wb03x.o(i.read_flash_ID)
|
||||||
i.main 0x010005b0 Section 0 main.o(i.main)
|
read_flash_ID 0x010005c5 Thumb Code 62 system_n32wb03x.o(i.read_flash_ID)
|
||||||
i.read_flash_ID 0x01000660 Section 0 system_n32wb03x.o(i.read_flash_ID)
|
.constdata 0x01000608 Section 472 system_n32wb03x.o(.constdata)
|
||||||
read_flash_ID 0x01000661 Thumb Code 62 system_n32wb03x.o(i.read_flash_ID)
|
|
||||||
.constdata 0x010006a4 Section 472 system_n32wb03x.o(.constdata)
|
|
||||||
.bss 0x20000000 Section 52 system_n32wb03x.o(.bss)
|
.bss 0x20000000 Section 52 system_n32wb03x.o(.bss)
|
||||||
STACK 0x20000038 Section 2048 startup_n32wb03x.o(STACK)
|
STACK 0x20000038 Section 2048 startup_n32wb03x.o(STACK)
|
||||||
|
|
||||||
@ -227,12 +223,12 @@ Image Symbol Table
|
|||||||
__scatterload_copy 0x010004c5 Thumb Code 14 handlers.o(i.__scatterload_copy)
|
__scatterload_copy 0x010004c5 Thumb Code 14 handlers.o(i.__scatterload_copy)
|
||||||
__scatterload_null 0x010004d3 Thumb Code 2 handlers.o(i.__scatterload_null)
|
__scatterload_null 0x010004d3 Thumb Code 2 handlers.o(i.__scatterload_null)
|
||||||
__scatterload_zeroinit 0x010004d5 Thumb Code 14 handlers.o(i.__scatterload_zeroinit)
|
__scatterload_zeroinit 0x010004d5 Thumb Code 14 handlers.o(i.__scatterload_zeroinit)
|
||||||
caiic_crc32 0x01000549 Thumb Code 62 boot_crc32.o(i.caiic_crc32)
|
caiic_crc32 0x01000519 Thumb Code 62 boot_crc32.o(i.caiic_crc32)
|
||||||
main 0x010005b1 Thumb Code 162 main.o(i.main)
|
main 0x01000581 Thumb Code 56 main.o(i.main)
|
||||||
TRIM_READ_CMD_CODE 0x010006a4 Data 320 system_n32wb03x.o(.constdata)
|
TRIM_READ_CMD_CODE 0x01000608 Data 320 system_n32wb03x.o(.constdata)
|
||||||
CMD_RDID 0x010007e4 Data 152 system_n32wb03x.o(.constdata)
|
CMD_RDID 0x01000748 Data 152 system_n32wb03x.o(.constdata)
|
||||||
Region$$Table$$Base 0x0100087c Number 0 anon$$obj.o(Region$$Table)
|
Region$$Table$$Base 0x010007e0 Number 0 anon$$obj.o(Region$$Table)
|
||||||
Region$$Table$$Limit 0x0100088c Number 0 anon$$obj.o(Region$$Table)
|
Region$$Table$$Limit 0x010007f0 Number 0 anon$$obj.o(Region$$Table)
|
||||||
trim_stored 0x20000000 Data 52 system_n32wb03x.o(.bss)
|
trim_stored 0x20000000 Data 52 system_n32wb03x.o(.bss)
|
||||||
__initial_sp 0x20000838 Data 0 startup_n32wb03x.o(STACK)
|
__initial_sp 0x20000838 Data 0 startup_n32wb03x.o(STACK)
|
||||||
|
|
||||||
@ -244,54 +240,53 @@ Memory Map of the image
|
|||||||
|
|
||||||
Image Entry point : 0x010000c1
|
Image Entry point : 0x010000c1
|
||||||
|
|
||||||
Load Region LR_IROM1 (Base: 0x01000000, Size: 0x0000088c, Max: 0x00004000, ABSOLUTE)
|
Load Region LR_IROM1 (Base: 0x01000000, Size: 0x000007f0, Max: 0x00004000, ABSOLUTE)
|
||||||
|
|
||||||
Execution Region ER_IROM1 (Exec base: 0x01000000, Load base: 0x01000000, Size: 0x0000088c, Max: 0x00004000, ABSOLUTE)
|
Execution Region ER_IROM1 (Exec base: 0x01000000, Load base: 0x01000000, Size: 0x000007f0, Max: 0x00004000, ABSOLUTE)
|
||||||
|
|
||||||
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
|
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
|
||||||
|
|
||||||
0x01000000 0x01000000 0x000000c0 Data RO 3 RESET startup_n32wb03x.o
|
0x01000000 0x01000000 0x000000c0 Data RO 3 RESET startup_n32wb03x.o
|
||||||
0x010000c0 0x010000c0 0x00000000 Code RO 232 * .ARM.Collect$$$$00000000 mc_p.l(entry.o)
|
0x010000c0 0x010000c0 0x00000000 Code RO 227 * .ARM.Collect$$$$00000000 mc_p.l(entry.o)
|
||||||
0x010000c0 0x010000c0 0x00000004 Code RO 243 .ARM.Collect$$$$00000001 mc_p.l(entry2.o)
|
0x010000c0 0x010000c0 0x00000004 Code RO 238 .ARM.Collect$$$$00000001 mc_p.l(entry2.o)
|
||||||
0x010000c4 0x010000c4 0x00000004 Code RO 246 .ARM.Collect$$$$00000004 mc_p.l(entry5.o)
|
0x010000c4 0x010000c4 0x00000004 Code RO 241 .ARM.Collect$$$$00000004 mc_p.l(entry5.o)
|
||||||
0x010000c8 0x010000c8 0x00000000 Code RO 248 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o)
|
0x010000c8 0x010000c8 0x00000000 Code RO 243 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o)
|
||||||
0x010000c8 0x010000c8 0x00000000 Code RO 250 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o)
|
0x010000c8 0x010000c8 0x00000000 Code RO 245 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o)
|
||||||
0x010000c8 0x010000c8 0x00000008 Code RO 251 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o)
|
0x010000c8 0x010000c8 0x00000008 Code RO 246 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o)
|
||||||
0x010000d0 0x010000d0 0x00000000 Code RO 253 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o)
|
0x010000d0 0x010000d0 0x00000000 Code RO 248 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o)
|
||||||
0x010000d0 0x010000d0 0x00000000 Code RO 255 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o)
|
0x010000d0 0x010000d0 0x00000000 Code RO 250 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o)
|
||||||
0x010000d0 0x010000d0 0x00000004 Code RO 244 .ARM.Collect$$$$00002712 mc_p.l(entry2.o)
|
0x010000d0 0x010000d0 0x00000004 Code RO 239 .ARM.Collect$$$$00002712 mc_p.l(entry2.o)
|
||||||
0x010000d4 0x010000d4 0x0000000e Code RO 10 .emb_text system_n32wb03x.o
|
0x010000d4 0x010000d4 0x0000000e Code RO 10 .emb_text system_n32wb03x.o
|
||||||
0x010000e2 0x010000e2 0x00000002 PAD
|
0x010000e2 0x010000e2 0x00000002 PAD
|
||||||
0x010000e4 0x010000e4 0x0000001c Code RO 4 .text startup_n32wb03x.o
|
0x010000e4 0x010000e4 0x0000001c Code RO 4 .text startup_n32wb03x.o
|
||||||
0x01000100 0x01000100 0x0000002c Code RO 235 .text mc_p.l(uidiv.o)
|
0x01000100 0x01000100 0x0000002c Code RO 230 .text mc_p.l(uidiv.o)
|
||||||
0x0100012c 0x0100012c 0x00000024 Code RO 237 .text mc_p.l(memcpya.o)
|
0x0100012c 0x0100012c 0x00000024 Code RO 232 .text mc_p.l(memcpya.o)
|
||||||
0x01000150 0x01000150 0x00000024 Code RO 239 .text mc_p.l(memseta.o)
|
0x01000150 0x01000150 0x00000024 Code RO 234 .text mc_p.l(memseta.o)
|
||||||
0x01000174 0x01000174 0x00000024 Code RO 257 .text mc_p.l(init.o)
|
0x01000174 0x01000174 0x00000024 Code RO 252 .text mc_p.l(init.o)
|
||||||
0x01000198 0x01000198 0x000000cc Code RO 11 i.OTPTrim_Read system_n32wb03x.o
|
0x01000198 0x01000198 0x000000cc Code RO 11 i.OTPTrim_Read system_n32wb03x.o
|
||||||
0x01000264 0x01000264 0x00000130 Code RO 12 i.RCC_HsiCalib system_n32wb03x.o
|
0x01000264 0x01000264 0x00000130 Code RO 12 i.RCC_HsiCalib system_n32wb03x.o
|
||||||
0x01000394 0x01000394 0x0000011c Code RO 16 i.SystemInit system_n32wb03x.o
|
0x01000394 0x01000394 0x0000011c Code RO 16 i.SystemInit system_n32wb03x.o
|
||||||
0x010004b0 0x010004b0 0x00000014 Code RO 18 i.SystemTrimValueRead system_n32wb03x.o
|
0x010004b0 0x010004b0 0x00000014 Code RO 18 i.SystemTrimValueRead system_n32wb03x.o
|
||||||
0x010004c4 0x010004c4 0x0000000e Code RO 261 i.__scatterload_copy mc_p.l(handlers.o)
|
0x010004c4 0x010004c4 0x0000000e Code RO 256 i.__scatterload_copy mc_p.l(handlers.o)
|
||||||
0x010004d2 0x010004d2 0x00000002 Code RO 262 i.__scatterload_null mc_p.l(handlers.o)
|
0x010004d2 0x010004d2 0x00000002 Code RO 257 i.__scatterload_null mc_p.l(handlers.o)
|
||||||
0x010004d4 0x010004d4 0x0000000e Code RO 263 i.__scatterload_zeroinit mc_p.l(handlers.o)
|
0x010004d4 0x010004d4 0x0000000e Code RO 258 i.__scatterload_zeroinit mc_p.l(handlers.o)
|
||||||
0x010004e2 0x010004e2 0x00000006 Code RO 19 i.__set_PRIMASK system_n32wb03x.o
|
0x010004e2 0x010004e2 0x00000006 Code RO 19 i.__set_PRIMASK system_n32wb03x.o
|
||||||
0x010004e8 0x010004e8 0x00000030 Code RO 174 i.bank_crc_ok main.o
|
0x010004e8 0x010004e8 0x0000002e Code RO 174 i.bank_vector_ok main.o
|
||||||
0x01000518 0x01000518 0x0000002e Code RO 175 i.bank_vector_ok main.o
|
0x01000516 0x01000516 0x00000002 PAD
|
||||||
0x01000546 0x01000546 0x00000002 PAD
|
0x01000518 0x01000518 0x00000044 Code RO 215 i.caiic_crc32 boot_crc32.o
|
||||||
0x01000548 0x01000548 0x00000044 Code RO 220 i.caiic_crc32 boot_crc32.o
|
0x0100055c 0x0100055c 0x00000024 Code RO 175 i.jump_to_app main.o
|
||||||
0x0100058c 0x0100058c 0x00000024 Code RO 176 i.jump_to_app main.o
|
0x01000580 0x01000580 0x00000044 Code RO 176 i.main main.o
|
||||||
0x010005b0 0x010005b0 0x000000b0 Code RO 177 i.main main.o
|
0x010005c4 0x010005c4 0x00000044 Code RO 20 i.read_flash_ID system_n32wb03x.o
|
||||||
0x01000660 0x01000660 0x00000044 Code RO 20 i.read_flash_ID system_n32wb03x.o
|
0x01000608 0x01000608 0x000001d8 Data RO 23 .constdata system_n32wb03x.o
|
||||||
0x010006a4 0x010006a4 0x000001d8 Data RO 23 .constdata system_n32wb03x.o
|
0x010007e0 0x010007e0 0x00000010 Data RO 254 Region$$Table anon$$obj.o
|
||||||
0x0100087c 0x0100087c 0x00000010 Data RO 259 Region$$Table anon$$obj.o
|
|
||||||
|
|
||||||
|
|
||||||
Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x0100088c, Size: 0x00000838, Max: 0x0000c000, ABSOLUTE)
|
Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x010007f0, Size: 0x00000838, Max: 0x0000c000, ABSOLUTE)
|
||||||
|
|
||||||
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
|
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
|
||||||
|
|
||||||
0x20000000 - 0x00000034 Zero RW 22 .bss system_n32wb03x.o
|
0x20000000 - 0x00000034 Zero RW 22 .bss system_n32wb03x.o
|
||||||
0x20000034 0x0100088c 0x00000004 PAD
|
0x20000034 0x010007f0 0x00000004 PAD
|
||||||
0x20000038 - 0x00000800 Zero RW 1 STACK startup_n32wb03x.o
|
0x20000038 - 0x00000800 Zero RW 1 STACK startup_n32wb03x.o
|
||||||
|
|
||||||
|
|
||||||
@ -303,12 +298,12 @@ Image component sizes
|
|||||||
Code (inc. data) RO Data RW Data ZI Data Debug Object Name
|
Code (inc. data) RO Data RW Data ZI Data Debug Object Name
|
||||||
|
|
||||||
68 6 0 0 0 874 boot_crc32.o
|
68 6 0 0 0 874 boot_crc32.o
|
||||||
306 20 0 0 0 4735 main.o
|
150 18 0 0 0 4115 main.o
|
||||||
28 8 192 0 2048 744 startup_n32wb03x.o
|
28 8 192 0 2048 744 startup_n32wb03x.o
|
||||||
900 60 472 0 52 95112 system_n32wb03x.o
|
900 60 472 0 52 95112 system_n32wb03x.o
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
1306 94 680 0 2104 101465 Object Totals
|
1150 92 680 0 2104 100845 Object Totals
|
||||||
0 0 16 0 0 0 (incl. Generated)
|
0 0 16 0 0 0 (incl. Generated)
|
||||||
4 0 0 0 4 0 (incl. Padding)
|
4 0 0 0 4 0 (incl. Padding)
|
||||||
|
|
||||||
@ -350,15 +345,15 @@ Image component sizes
|
|||||||
|
|
||||||
Code (inc. data) RO Data RW Data ZI Data Debug
|
Code (inc. data) RO Data RW Data ZI Data Debug
|
||||||
|
|
||||||
1508 110 680 0 2104 101337 Grand Totals
|
1352 108 680 0 2104 100761 Grand Totals
|
||||||
1508 110 680 0 2104 101337 ELF Image Totals
|
1352 108 680 0 2104 100761 ELF Image Totals
|
||||||
1508 110 680 0 0 0 ROM Totals
|
1352 108 680 0 0 0 ROM Totals
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
Total RO Size (Code + RO Data) 2188 ( 2.14kB)
|
Total RO Size (Code + RO Data) 2032 ( 1.98kB)
|
||||||
Total RW Size (RW Data + ZI Data) 2104 ( 2.05kB)
|
Total RW Size (RW Data + ZI Data) 2104 ( 2.05kB)
|
||||||
Total ROM Size (Code + RO Data + RW Data) 2188 ( 2.14kB)
|
Total ROM Size (Code + RO Data + RW Data) 2032 ( 1.98kB)
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@ -17,7 +17,7 @@ Library Manager: ArmAr.exe V5.06 update 6 (build 750)
|
|||||||
Hex Converter: FromElf.exe V5.06 update 6 (build 750)
|
Hex Converter: FromElf.exe V5.06 update 6 (build 750)
|
||||||
CPU DLL: SARMCM3.DLL V5.31.0.0
|
CPU DLL: SARMCM3.DLL V5.31.0.0
|
||||||
Dialog DLL: DARMCM1.DLL V1.19.3.0
|
Dialog DLL: DARMCM1.DLL V1.19.3.0
|
||||||
Target DLL: UL2CM3.DLL V1.163.4.0
|
Target DLL: CMSIS_AGDI.dll V1.32.6.0
|
||||||
Dialog DLL: TARMCM1.DLL V1.14.2.0
|
Dialog DLL: TARMCM1.DLL V1.14.2.0
|
||||||
|
|
||||||
<h2>Project:</h2>
|
<h2>Project:</h2>
|
||||||
@ -27,6 +27,10 @@ Project File Date: 09/02/2026
|
|||||||
<h2>Output:</h2>
|
<h2>Output:</h2>
|
||||||
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin'
|
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin'
|
||||||
Build target 'caiic_boot'
|
Build target 'caiic_boot'
|
||||||
|
compiling main.c...
|
||||||
|
linking...
|
||||||
|
Program Size: Code=1352 RO-data=680 RW-data=0 ZI-data=2104
|
||||||
|
FromELF: creating hex file...
|
||||||
After Build - User command #1: fromelf --bin --output=.\bin\caiic_boot.bin .\Objects\caiic_boot.axf
|
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).
|
".\Objects\caiic_boot.axf" - 0 Error(s), 0 Warning(s).
|
||||||
|
|
||||||
@ -41,7 +45,7 @@ Package Vendor: Nationstech
|
|||||||
D:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device
|
D:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device
|
||||||
|
|
||||||
<h2>Collection of Component Files used:</h2>
|
<h2>Collection of Component Files used:</h2>
|
||||||
Build Time Elapsed: 00:00:01
|
Build Time Elapsed: 00:00:00
|
||||||
</pre>
|
</pre>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
:10009000F7000001F7000001F7000001F700000180
|
:10009000F7000001F7000001F7000001F700000180
|
||||||
:1000A000F7000001F7000001F7000001F700000170
|
:1000A000F7000001F7000001F7000001F700000170
|
||||||
:1000B000F7000001F7000001F7000001F700000160
|
:1000B000F7000001F7000001F7000001F700000160
|
||||||
:1000C0000348854600F056F800480047B105000196
|
:1000C0000348854600F056F80048004781050001C6
|
||||||
:1000D0003808002040BA7047C0BA70470138FDD1D7
|
:1000D0003808002040BA7047C0BA70470138FDD1D7
|
||||||
:1000E000704700000448804704480047FEE7FEE7E9
|
:1000E000704700000448804704480047FEE7FEE7E9
|
||||||
:1000F000FEE7FEE7FEE7FEE795030001C100000111
|
:1000F000FEE7FEE7FEE7FEE795030001C100000111
|
||||||
@ -24,10 +24,10 @@
|
|||||||
:10016000F6E710B513460A4604461946FFF7F0FFB6
|
:10016000F6E710B513460A4604461946FFF7F0FFB6
|
||||||
:10017000204610BD064C0125064E05E0E36807CC7D
|
:10017000204610BD064C0125064E05E0E36807CC7D
|
||||||
:100180002B430C3C98471034B442F7D3FFF79CFF45
|
:100180002B430C3C98471034B442F7D3FFF79CFF45
|
||||||
:100190007C0800018C080001F7B5D4B004460E4677
|
:10019000E0070001F0070001F7B5D4B004460E46B1
|
||||||
:1001A00000205390052052900025002700BFEFF358
|
:1001A00000205390052052900025002700BFEFF358
|
||||||
:1001B00010800090FF21453101A8FFF7D0FF00F02B
|
:1001B00010800090FF21453101A8FFF7D0FF00F02B
|
||||||
:1001C0004FFA05462448854218D101200003844295
|
:1001C00001FA05462448854218D1012000038442E3
|
||||||
:1001D00002D1002053902AE001204003844202D142
|
:1001D00002D1002053902AE001204003844202D142
|
||||||
:1001E0004011539023E003200003844203D10120F7
|
:1001E0004011539023E003200003844203D10120F7
|
||||||
:1001F000400253901BE0529857B0F0BD174885421B
|
:1001F000400253901BE0529857B0F0BD174885421B
|
||||||
@ -37,7 +37,7 @@
|
|||||||
:100230000137FF2241320A4901A8FFF777FF012069
|
:100230000137FF2241320A4901A8FFF777FF012069
|
||||||
:1002400000F04FF93146569A5398B84752900098AB
|
:1002400000F04FF93146569A5398B84752900098AB
|
||||||
:1002500000F047F95298CFE7C440130085601300BF
|
:1002500000F047F95298CFE7C440130085601300BF
|
||||||
:10026000A4060001F1B58AB0002009907D20C000ED
|
:1002600008060001F1B58AB0002009907D20C00089
|
||||||
:1002700008900125AD020027002007907F200690FE
|
:1002700008900125AD020027002007907F200690FE
|
||||||
:1002800040240026002005900390200102900020C9
|
:1002800040240026002005900390200102900020C9
|
||||||
:1002900001903E490A98884206D83D4800686102AC
|
:1002900001903E490A98884206D83D4800686102AC
|
||||||
@ -77,64 +77,54 @@
|
|||||||
:1004B00070B504460D462A46214601200003FFF789
|
:1004B00070B504460D462A46214601200003FFF789
|
||||||
:1004C0006BFE70BD02E008C8121F08C1002AFAD1F5
|
:1004C0006BFE70BD02E008C8121F08C1002AFAD1F5
|
||||||
:1004D00070477047002001E001C1121F002AFBD1C4
|
:1004D00070477047002001E001C1121F002AFBD1C4
|
||||||
:1004E000704780F31088704770B504460D46206849
|
:1004E000704780F31088704710B501460B68486864
|
||||||
:1004F000002804D00721C9032068884201D90020C0
|
:1004F00042085200180C000401246407A04208D1ED
|
||||||
:1005000070BD2846216800F01FF86168884201D15B
|
:100500008A4206D30720C0030818824201D2012084
|
||||||
:100510000120F5E70020F3E710B501460B684868B5
|
:1005100010BD0020FCE7000030B502460B4600216C
|
||||||
:1005200042085200180C000401246407A04208D1BC
|
:10052000C94312E01078521C414000240BE04808F7
|
||||||
:100530008A4206D30720C0030818824201D2012054
|
:10053000CD07ED0F002D01D0074D00E000256840EC
|
||||||
:1005400010BD0020FCE7000030B502460B4600213C
|
:100540000146601CC4B2082CF1DB18465B1E002873
|
||||||
:10055000C94312E01078521C414000240BE04808C7
|
:10055000E8D1C84330BD00002083B8ED044672B630
|
||||||
:10056000CD07ED0F002D01D0074D00E000256840BC
|
:100560000120C007204305490863206880F30888FC
|
||||||
:100570000146601CC4B2082CF1DB18465B1E002843
|
:1005700000BF6068804700BFFEE7000000700040D9
|
||||||
:10058000E8D1C84330BD00002083B8ED044672B600
|
:100580000D4C0E4D0E49206888420BD1202120468B
|
||||||
:100590000120C007204305490863206880F30888CC
|
:10059000FFF7C2FF216A884204D16068022801D1B6
|
||||||
:1005A00000BF6068804700BFFEE7000000700040A9
|
:1005A0004125AD042846FFF79FFF002802D02846CA
|
||||||
:1005B000284C002528492068884234D12021204633
|
:1005B000FFF7D4FF00BFFEE700400001008000010C
|
||||||
:1005C000FFF7C2FF216A88422DD16068012808D157
|
:1005C00011C011CA70B5D2B00024002500BFEFF3EE
|
||||||
:1005D000224920460830FFF787FF002801D01F4D31
|
:1005D00010800646FF21453101A8FFF7C0FD01ACA0
|
||||||
:1005E00030E0606802280AD1412189042046143095
|
:1005E00001349822074901A8FFF7A0FD0120FFF779
|
||||||
:1005F000FFF77AFF002802D04125AD0422E0174919
|
:1005F00078FFA04705463046FFF773FF284652B004
|
||||||
:1006000020460830FFF770FF002801D0134D19E095
|
:1006000070BD00004807000140BA7047C0BA70478B
|
||||||
:100610004121890420461430FFF766FF002811D0DD
|
:100610000138FDD170470000F7B50325AD06286A03
|
||||||
:100620004125AD040EE00D48FFF776FF002801D00C
|
:1006200082B016460C46400840002862286A022123
|
||||||
:100630000A4D07E041208004FFF76EFF002801D03B
|
:1006300008432862286A8007FCD466206860012786
|
||||||
:100640004125AD04002D02D02846FFF79FFF00BFD3
|
:100640002F61A86AC005FCD5992068602F61A86A4F
|
||||||
:10065000FEE700000040000111C011CA0080000147
|
:10065000C005FCD5FF209130FFF7DAFFFF230133FF
|
||||||
:1006600070B5D2B00024002500BFEFF3108006461D
|
:10066000AB626846EF60352169602F61A96AC905F0
|
||||||
:10067000FF21453101A8FFF772FD01AC013498223A
|
:10067000FCD5AB62A969EF60C9B205226A602F613F
|
||||||
:10068000074901A8FFF752FD0120FFF72AFFA04705
|
:10068000AA6AD205FCD5AB62AA690902D2B21143AB
|
||||||
:1006900005463046FFF725FF284652B070BD0000E2
|
:100690000180C80702D0032005B0F0BDAB626869D5
|
||||||
:1006A000E407000140BA7047C0BA70470138FDD175
|
:1006A000FF210831884368616869C91E0843686191
|
||||||
:1006B00070470000F7B50325AD06286A82B01646DC
|
:1006B00002980002483068600820A860EE602F6150
|
||||||
:1006C0000C46400840002862286A0221084328623C
|
:1006C000A86AC005FCD5FF200130A8620023F61CF3
|
||||||
:1006D000286A8007FCD46620686001272F61A86A19
|
:1006D000B0080ED0B2081148006899006054060AAC
|
||||||
:1006E000C005FCD5992068602F61A86AC005FCD5BB
|
:1006E00009194E70060C000E8E705B1CC8709A4281
|
||||||
:1006F000FF209130FFF7DAFFFF230133AB6268463A
|
:1006F000F1D8FF200130A8626869FF2108318843E2
|
||||||
:10070000EF60352169602F61A96AC905FCD5AB622C
|
:100700006861686938436861286A800880002862E7
|
||||||
:10071000A969EF60C9B205226A602F61AA6AD20591
|
:10071000286A38432862002005B0F0BD8000000C34
|
||||||
:10072000FCD5AB62AA690902D2B211430180C807A5
|
:10072000032080064169FF220832914341614269FA
|
||||||
:1007300002D0032005B0F0BDAB626869FF2108312B
|
:1007300001210A434261026A920892000262026A3F
|
||||||
:10074000884368616869C91E0843686102980002AD
|
:100740000A43026270470000002003218906096AFB
|
||||||
:10075000483068600820A860EE602F61A86AC00574
|
:10075000490849000322920611621146096A0222E1
|
||||||
:10076000FCD5FF200130A8620023F61CB0080ED093
|
:10076000114303229206116200BF03218906096A20
|
||||||
:10077000B2081148006899006054060A09194E70C1
|
:10077000022211400229F8D0D1010322920691628F
|
||||||
:10078000060C000E8E705B1CC8709A42F1D8FF20D8
|
:100780000321D1609F2151600121116100BF03212C
|
||||||
:100790000130A8626869FF2108318843686168698F
|
:100790008906896AFF22013211409142F7D1032272
|
||||||
:1007A00038436861286A800880002862286A3843D4
|
:1007A00092069162114688694969FF220832914395
|
||||||
:1007B0002862002005B0F0BD8000000C03208006F8
|
:1007B0000322920651611146496901221143032225
|
||||||
:1007C0004169FF22083291434161426901210A4394
|
:1007C000920651611146096A890889001162114631
|
||||||
:1007D0004261026A920892000262026A0A4302625D
|
:1007D000096A012211430322920611627047000048
|
||||||
:1007E00070470000002003218906096A4908490072
|
:1007E000F00700010000002038080000D4040001D8
|
||||||
:1007F0000322920611621146096A02221143032262
|
|
||||||
:100800009206116200BF03218906096A0222114083
|
|
||||||
:100810000229F8D0D1010322920691620321D1600E
|
|
||||||
:100820009F2151600121116100BF03218906896A5E
|
|
||||||
:10083000FF22013211409142F7D1032292069162C8
|
|
||||||
:10084000114688694969FF220832914303229206C2
|
|
||||||
:1008500051611146496901221143032292065161F7
|
|
||||||
:100860001146096A8908890011621146096A012244
|
|
||||||
:100870001143032292061162704700008C080001A8
|
|
||||||
:0C0880000000002038080000D404000133
|
|
||||||
:04000005010000C135
|
:04000005010000C135
|
||||||
:00000001FF
|
:00000001FF
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<title>Static Call Graph - [.\Objects\caiic_boot.axf]</title></head>
|
<title>Static Call Graph - [.\Objects\caiic_boot.axf]</title></head>
|
||||||
<body><HR>
|
<body><HR>
|
||||||
<H1>Static Call Graph for image .\Objects\caiic_boot.axf</H1><HR>
|
<H1>Static Call Graph for image .\Objects\caiic_boot.axf</H1><HR>
|
||||||
<BR><P>#<CALLGRAPH># ARM Linker, 5060750: Last Updated: Wed Sep 02 05:36:40 2026
|
<BR><P>#<CALLGRAPH># ARM Linker, 5060750: Last Updated: Wed Sep 02 08:07:05 2026
|
||||||
<BR><P>
|
<BR><P>
|
||||||
<H3>Maximum Stack Usage = 736 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
|
<H3>Maximum Stack Usage = 736 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
|
||||||
Call chain for Maximum Stack Depth:</H3>
|
Call chain for Maximum Stack Depth:</H3>
|
||||||
@ -72,7 +72,7 @@ Global Symbols
|
|||||||
<P><STRONG><a name="[28]"></a>__main</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
|
<P><STRONG><a name="[28]"></a>__main</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
|
||||||
<BR>[Address Reference Count : 1]<UL><LI> startup_n32wb03x.o(.text)
|
<BR>[Address Reference Count : 1]<UL><LI> startup_n32wb03x.o(.text)
|
||||||
</UL>
|
</UL>
|
||||||
<P><STRONG><a name="[3c]"></a>_main_stk</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))
|
<P><STRONG><a name="[3b]"></a>_main_stk</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))
|
||||||
|
|
||||||
<P><STRONG><a name="[29]"></a>_main_scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
|
<P><STRONG><a name="[29]"></a>_main_scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
|
||||||
<BR><BR>[Calls]<UL><LI><a href="#[2a]">>></a> __scatterload
|
<BR><BR>[Calls]<UL><LI><a href="#[2a]">>></a> __scatterload
|
||||||
@ -82,19 +82,19 @@ Global Symbols
|
|||||||
<BR><BR>[Called By]<UL><LI><a href="#[2a]">>></a> __scatterload
|
<BR><BR>[Called By]<UL><LI><a href="#[2a]">>></a> __scatterload
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[3d]"></a>_main_clock</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008))
|
<P><STRONG><a name="[3c]"></a>_main_clock</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008))
|
||||||
|
|
||||||
<P><STRONG><a name="[3e]"></a>_main_cpp_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A))
|
<P><STRONG><a name="[3d]"></a>_main_cpp_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A))
|
||||||
|
|
||||||
<P><STRONG><a name="[3f]"></a>_main_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B))
|
<P><STRONG><a name="[3e]"></a>_main_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B))
|
||||||
|
|
||||||
<P><STRONG><a name="[40]"></a>__rt_final_cpp</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D))
|
<P><STRONG><a name="[3f]"></a>__rt_final_cpp</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D))
|
||||||
|
|
||||||
<P><STRONG><a name="[41]"></a>__rt_final_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F))
|
<P><STRONG><a name="[40]"></a>__rt_final_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F))
|
||||||
|
|
||||||
<P><STRONG><a name="[42]"></a>__asm___17_system_n32wb03x_c_f233b82c____REV16</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, system_n32wb03x.o(.emb_text), UNUSED)
|
<P><STRONG><a name="[41]"></a>__asm___17_system_n32wb03x_c_f233b82c____REV16</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, system_n32wb03x.o(.emb_text), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[43]"></a>__asm___17_system_n32wb03x_c_f233b82c____REVSH</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, system_n32wb03x.o(.emb_text), UNUSED)
|
<P><STRONG><a name="[42]"></a>__asm___17_system_n32wb03x_c_f233b82c____REVSH</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, system_n32wb03x.o(.emb_text), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[2b]"></a>system_delay_cycles</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, system_n32wb03x.o(.emb_text))
|
<P><STRONG><a name="[2b]"></a>system_delay_cycles</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, system_n32wb03x.o(.emb_text))
|
||||||
<BR><BR>[Calls]<UL><LI><a href="#[2b]">>></a> system_delay_cycles
|
<BR><BR>[Calls]<UL><LI><a href="#[2b]">>></a> system_delay_cycles
|
||||||
@ -241,7 +241,7 @@ Global Symbols
|
|||||||
<P><STRONG><a name="[6]"></a>WWDG_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_n32wb03x.o(.text))
|
<P><STRONG><a name="[6]"></a>WWDG_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_n32wb03x.o(.text))
|
||||||
<BR>[Address Reference Count : 1]<UL><LI> startup_n32wb03x.o(RESET)
|
<BR>[Address Reference Count : 1]<UL><LI> startup_n32wb03x.o(RESET)
|
||||||
</UL>
|
</UL>
|
||||||
<P><STRONG><a name="[44]"></a>__aeabi_uidiv</STRONG> (Thumb, 0 bytes, Stack size 12 bytes, uidiv.o(.text), UNUSED)
|
<P><STRONG><a name="[43]"></a>__aeabi_uidiv</STRONG> (Thumb, 0 bytes, Stack size 12 bytes, uidiv.o(.text), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[36]"></a>__aeabi_uidivmod</STRONG> (Thumb, 44 bytes, Stack size 12 bytes, uidiv.o(.text))
|
<P><STRONG><a name="[36]"></a>__aeabi_uidivmod</STRONG> (Thumb, 44 bytes, Stack size 12 bytes, uidiv.o(.text))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = __aeabi_uidivmod
|
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = __aeabi_uidivmod
|
||||||
@ -254,18 +254,18 @@ Global Symbols
|
|||||||
<LI><a href="#[32]">>></a> read_flash_ID
|
<LI><a href="#[32]">>></a> read_flash_ID
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[45]"></a>__aeabi_memcpy4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED)
|
<P><STRONG><a name="[44]"></a>__aeabi_memcpy4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[46]"></a>__aeabi_memcpy8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED)
|
<P><STRONG><a name="[45]"></a>__aeabi_memcpy8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[2d]"></a>__aeabi_memset</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
|
<P><STRONG><a name="[2d]"></a>__aeabi_memset</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
|
||||||
<BR><BR>[Called By]<UL><LI><a href="#[2e]">>></a> _memset$wrapper
|
<BR><BR>[Called By]<UL><LI><a href="#[2e]">>></a> _memset$wrapper
|
||||||
<LI><a href="#[2c]">>></a> __aeabi_memclr
|
<LI><a href="#[2c]">>></a> __aeabi_memclr
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[47]"></a>__aeabi_memset4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
|
<P><STRONG><a name="[46]"></a>__aeabi_memset4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[48]"></a>__aeabi_memset8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
|
<P><STRONG><a name="[47]"></a>__aeabi_memset8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[2c]"></a>__aeabi_memclr</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
|
<P><STRONG><a name="[2c]"></a>__aeabi_memclr</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
|
||||||
<BR><BR>[Calls]<UL><LI><a href="#[2d]">>></a> __aeabi_memset
|
<BR><BR>[Calls]<UL><LI><a href="#[2d]">>></a> __aeabi_memset
|
||||||
@ -276,7 +276,7 @@ Global Symbols
|
|||||||
<LI><a href="#[32]">>></a> read_flash_ID
|
<LI><a href="#[32]">>></a> read_flash_ID
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[49]"></a>__aeabi_memclr8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
|
<P><STRONG><a name="[48]"></a>__aeabi_memclr8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[2e]"></a>_memset$wrapper</STRONG> (Thumb, 18 bytes, Stack size 8 bytes, memseta.o(.text), UNUSED)
|
<P><STRONG><a name="[2e]"></a>_memset$wrapper</STRONG> (Thumb, 18 bytes, Stack size 8 bytes, memseta.o(.text), UNUSED)
|
||||||
<BR><BR>[Calls]<UL><LI><a href="#[2d]">>></a> __aeabi_memset
|
<BR><BR>[Calls]<UL><LI><a href="#[2d]">>></a> __aeabi_memset
|
||||||
@ -288,7 +288,7 @@ Global Symbols
|
|||||||
<BR>[Called By]<UL><LI><a href="#[29]">>></a> _main_scatterload
|
<BR>[Called By]<UL><LI><a href="#[29]">>></a> _main_scatterload
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[4a]"></a>__scatterload_rt2</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)
|
<P><STRONG><a name="[49]"></a>__scatterload_rt2</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[30]"></a>OTPTrim_Read</STRONG> (Thumb, 192 bytes, Stack size 368 bytes, system_n32wb03x.o(i.OTPTrim_Read))
|
<P><STRONG><a name="[30]"></a>OTPTrim_Read</STRONG> (Thumb, 192 bytes, Stack size 368 bytes, system_n32wb03x.o(i.OTPTrim_Read))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 712<LI>Call Chain = OTPTrim_Read ⇒ read_flash_ID
|
<BR><BR>[Stack]<UL><LI>Max Depth = 712<LI>Call Chain = OTPTrim_Read ⇒ read_flash_ID
|
||||||
@ -317,26 +317,24 @@ Global Symbols
|
|||||||
<BR>[Called By]<UL><LI><a href="#[27]">>></a> SystemInit
|
<BR>[Called By]<UL><LI><a href="#[27]">>></a> SystemInit
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[4b]"></a>__scatterload_copy</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED)
|
<P><STRONG><a name="[4a]"></a>__scatterload_copy</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[4c]"></a>__scatterload_null</STRONG> (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED)
|
<P><STRONG><a name="[4b]"></a>__scatterload_null</STRONG> (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[4d]"></a>__scatterload_zeroinit</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)
|
<P><STRONG><a name="[4c]"></a>__scatterload_zeroinit</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[39]"></a>caiic_crc32</STRONG> (Thumb, 62 bytes, Stack size 12 bytes, boot_crc32.o(i.caiic_crc32))
|
<P><STRONG><a name="[38]"></a>caiic_crc32</STRONG> (Thumb, 62 bytes, Stack size 12 bytes, boot_crc32.o(i.caiic_crc32))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = caiic_crc32
|
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = caiic_crc32
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
||||||
<LI><a href="#[38]">>></a> bank_crc_ok
|
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[26]"></a>main</STRONG> (Thumb, 162 bytes, Stack size 0 bytes, main.o(i.main))
|
<P><STRONG><a name="[26]"></a>main</STRONG> (Thumb, 56 bytes, Stack size 0 bytes, main.o(i.main))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = main ⇒ bank_crc_ok ⇒ caiic_crc32
|
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = main ⇒ caiic_crc32
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[39]">>></a> caiic_crc32
|
<BR>[Calls]<UL><LI><a href="#[38]">>></a> caiic_crc32
|
||||||
<LI><a href="#[3b]">>></a> jump_to_app
|
<LI><a href="#[3a]">>></a> jump_to_app
|
||||||
<LI><a href="#[3a]">>></a> bank_vector_ok
|
<LI><a href="#[39]">>></a> bank_vector_ok
|
||||||
<LI><a href="#[38]">>></a> bank_crc_ok
|
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Address Reference Count : 1]<UL><LI> entry9a.o(.ARM.Collect$$$$0000000B)
|
<BR>[Address Reference Count : 1]<UL><LI> entry9a.o(.ARM.Collect$$$$0000000B)
|
||||||
</UL><P>
|
</UL><P>
|
||||||
@ -367,21 +365,13 @@ Local Symbols
|
|||||||
<BR>[Called By]<UL><LI><a href="#[30]">>></a> OTPTrim_Read
|
<BR>[Called By]<UL><LI><a href="#[30]">>></a> OTPTrim_Read
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[38]"></a>bank_crc_ok</STRONG> (Thumb, 48 bytes, Stack size 16 bytes, main.o(i.bank_crc_ok))
|
<P><STRONG><a name="[39]"></a>bank_vector_ok</STRONG> (Thumb, 46 bytes, Stack size 8 bytes, main.o(i.bank_vector_ok))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = bank_crc_ok ⇒ caiic_crc32
|
|
||||||
</UL>
|
|
||||||
<BR>[Calls]<UL><LI><a href="#[39]">>></a> caiic_crc32
|
|
||||||
</UL>
|
|
||||||
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
|
||||||
</UL>
|
|
||||||
|
|
||||||
<P><STRONG><a name="[3a]"></a>bank_vector_ok</STRONG> (Thumb, 46 bytes, Stack size 8 bytes, main.o(i.bank_vector_ok))
|
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = bank_vector_ok
|
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = bank_vector_ok
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[3b]"></a>jump_to_app</STRONG> (Thumb, 30 bytes, Stack size 0 bytes, main.o(i.jump_to_app))
|
<P><STRONG><a name="[3a]"></a>jump_to_app</STRONG> (Thumb, 30 bytes, Stack size 0 bytes, main.o(i.jump_to_app))
|
||||||
<BR><BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
<BR><BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
||||||
</UL>
|
</UL>
|
||||||
<P>
|
<P>
|
||||||
|
|||||||
@ -30,7 +30,7 @@ I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc
|
|||||||
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h)(0x68CD0B36)
|
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h)(0x68CD0B36)
|
||||||
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h)(0x68CD0B30)
|
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h)(0x68CD0B30)
|
||||||
I (D:\Keil_v5\ARM\ARMCC\include\string.h)(0x5EC77604)
|
I (D:\Keil_v5\ARM\ARMCC\include\string.h)(0x5EC77604)
|
||||||
F (..\src\main.c)(0x6A96D51D)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\src -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc
-ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device
-ID:\Keil_v5\ARM\CMSIS\Include
-D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER
-o .\objects\main.o --omf_browse .\objects\main.crf --depend .\objects\main.d)
|
F (..\src\main.c)(0x6A97688E)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\src -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc
-ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device
-ID:\Keil_v5\ARM\CMSIS\Include
-D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER
-o .\objects\main.o --omf_browse .\objects\main.crf --depend .\objects\main.d)
|
||||||
I (D:\Keil_v5\ARM\ARMCC\include\stddef.h)(0x5EC775FC)
|
I (D:\Keil_v5\ARM\ARMCC\include\stddef.h)(0x5EC775FC)
|
||||||
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h)(0x68CD0B30)
|
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h)(0x68CD0B30)
|
||||||
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h)(0x5FA56A96)
|
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h)(0x5FA56A96)
|
||||||
@ -59,7 +59,7 @@ I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc
|
|||||||
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h)(0x68CD0B36)
|
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h)(0x68CD0B36)
|
||||||
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h)(0x68CD0B36)
|
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h)(0x68CD0B36)
|
||||||
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h)(0x68CD0B30)
|
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h)(0x68CD0B30)
|
||||||
I (..\src\dfu_layout.h)(0x6A96D505)
|
I (..\src\dfu_layout.h)(0x6A9768A2)
|
||||||
I (..\src\boot_crc32.h)(0x6A96D505)
|
I (..\src\boot_crc32.h)(0x6A96D505)
|
||||||
F (..\src\boot_crc32.c)(0x6A96D5A0)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\src -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc
-ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device
-ID:\Keil_v5\ARM\CMSIS\Include
-D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER
-o .\objects\boot_crc32.o --omf_browse .\objects\boot_crc32.crf --depend .\objects\boot_crc32.d)
|
F (..\src\boot_crc32.c)(0x6A96D5A0)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\src -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc
-ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device
-ID:\Keil_v5\ARM\CMSIS\Include
-D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER
-o .\objects\boot_crc32.o --omf_browse .\objects\boot_crc32.crf --depend .\objects\boot_crc32.d)
|
||||||
I (..\src\boot_crc32.h)(0x6A96D505)
|
I (..\src\boot_crc32.h)(0x6A96D505)
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,5 +1,9 @@
|
|||||||
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin'
|
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin'
|
||||||
Build target 'caiic_boot'
|
Build target 'caiic_boot'
|
||||||
|
compiling main.c...
|
||||||
|
linking...
|
||||||
|
Program Size: Code=1352 RO-data=680 RW-data=0 ZI-data=2104
|
||||||
|
FromELF: creating hex file...
|
||||||
After Build - User command #1: fromelf --bin --output=.\bin\caiic_boot.bin .\Objects\caiic_boot.axf
|
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).
|
".\Objects\caiic_boot.axf" - 0 Error(s), 0 Warning(s).
|
||||||
Build Time Elapsed: 00:00:01
|
Build Time Elapsed: 00:00:00
|
||||||
|
|||||||
@ -42,7 +42,7 @@ extern "C" {
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint32_t size; /* image size in bytes */
|
uint32_t size; /* image size in bytes */
|
||||||
uint32_t crc32; /* IEEE CRC32 of the whole image */
|
uint32_t crc32; /* IEEE CRC32 of the whole image (verified at OTA time) */
|
||||||
uint32_t version; /* e.g. 0x010001 = V1.00.01 */
|
uint32_t version; /* e.g. 0x010001 = V1.00.01 */
|
||||||
} caiic_bank_t;
|
} caiic_bank_t;
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,16 @@
|
|||||||
/**
|
/**
|
||||||
* @file main.c
|
* @file main.c
|
||||||
* @brief CAIIC minimal bootloader: bootsetting arbitration, image CRC32
|
* @brief CAIIC minimal bootloader: bootsetting arbitration, vector sanity
|
||||||
* check, vector remap and jump to the active application bank.
|
* check, vector remap and jump to the active application bank.
|
||||||
*
|
*
|
||||||
* No interrupts, no peripherals: flash is read through the memory map only.
|
* No interrupts, no peripherals: flash is read through the memory map only.
|
||||||
* If nothing valid is found the CPU stays here forever (recover via SWD).
|
*
|
||||||
|
* Policy: the application image CRC is verified during the OTA process
|
||||||
|
* (app_ota.c) BEFORE bootsetting is switched - boot itself never validates
|
||||||
|
* image contents, it only trusts the bootsetting sector integrity
|
||||||
|
* (magic + own CRC32) to pick the active bank, then jumps straight to it.
|
||||||
|
* If the chosen vector table looks dead the CPU stays here forever
|
||||||
|
* (recover via SWD).
|
||||||
*/
|
*/
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include "n32wb03x.h"
|
#include "n32wb03x.h"
|
||||||
@ -25,18 +31,6 @@ static int bank_vector_ok(uint32_t base)
|
|||||||
(reset >= base) && (reset < base + CAIIC_APP_BANK_SIZE);
|
(reset >= base) && (reset < base + CAIIC_APP_BANK_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Check a bank image against its bootsetting CRC32 record.
|
|
||||||
*/
|
|
||||||
static int bank_crc_ok(const caiic_bank_t* bank, uint32_t base)
|
|
||||||
{
|
|
||||||
if (bank->size == 0 || bank->size > CAIIC_APP_BANK_SIZE)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return bank->crc32 == caiic_crc32((const uint8_t*)base, bank->size);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Remap the vector table to the app and jump to it. Never returns.
|
* @brief Remap the vector table to the app and jump to it. Never returns.
|
||||||
*/
|
*/
|
||||||
@ -60,44 +54,21 @@ static void jump_to_app(uint32_t base)
|
|||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
const caiic_bootsetting_t* bs = (const caiic_bootsetting_t*)CAIIC_BOOTSETTING_ADDR;
|
const caiic_bootsetting_t* bs = (const caiic_bootsetting_t*)CAIIC_BOOTSETTING_ADDR;
|
||||||
uint32_t target = 0;
|
uint32_t target = CAIIC_APP1_BASE; /* default bank */
|
||||||
|
|
||||||
|
/* Pick the active bank. Only the bootsetting sector integrity is
|
||||||
|
* checked (magic + its own CRC32); the app image itself is NOT
|
||||||
|
* verified here - it was already verified at OTA time before this
|
||||||
|
* record was written. */
|
||||||
if (bs->magic == CAIIC_BOOT_MAGIC &&
|
if (bs->magic == CAIIC_BOOT_MAGIC &&
|
||||||
bs->crc32 == caiic_crc32((const uint8_t*)bs, offsetof(caiic_bootsetting_t, crc32)))
|
bs->crc32 == caiic_crc32((const uint8_t*)bs, offsetof(caiic_bootsetting_t, crc32)) &&
|
||||||
|
bs->active_bank == CAIIC_ACTIVE_BANK2)
|
||||||
{
|
{
|
||||||
/* Bootsetting valid: jump to the active bank if its image checks out */
|
target = CAIIC_APP2_BASE;
|
||||||
if (bs->active_bank == CAIIC_ACTIVE_BANK1 && bank_crc_ok(&bs->bank1, CAIIC_APP1_BASE))
|
|
||||||
{
|
|
||||||
target = CAIIC_APP1_BASE;
|
|
||||||
}
|
|
||||||
else if (bs->active_bank == CAIIC_ACTIVE_BANK2 && bank_crc_ok(&bs->bank2, CAIIC_APP2_BASE))
|
|
||||||
{
|
|
||||||
target = CAIIC_APP2_BASE;
|
|
||||||
}
|
|
||||||
/* Active bank corrupted: fall back to any bank with a valid image */
|
|
||||||
else if (bank_crc_ok(&bs->bank1, CAIIC_APP1_BASE))
|
|
||||||
{
|
|
||||||
target = CAIIC_APP1_BASE;
|
|
||||||
}
|
|
||||||
else if (bank_crc_ok(&bs->bank2, CAIIC_APP2_BASE))
|
|
||||||
{
|
|
||||||
target = CAIIC_APP2_BASE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Blank/invalid bootsetting (first flash): vector sanity check only */
|
|
||||||
if (bank_vector_ok(CAIIC_APP1_BASE))
|
|
||||||
{
|
|
||||||
target = CAIIC_APP1_BASE;
|
|
||||||
}
|
|
||||||
else if (bank_vector_ok(CAIIC_APP2_BASE))
|
|
||||||
{
|
|
||||||
target = CAIIC_APP2_BASE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (target != 0)
|
/* Last-resort sanity: never jump into a blank/garbage vector table */
|
||||||
|
if (bank_vector_ok(target))
|
||||||
{
|
{
|
||||||
jump_to_app(target);
|
jump_to_app(target);
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -27,7 +27,8 @@ Project File Date: 09/01/2026
|
|||||||
<h2>Output:</h2>
|
<h2>Output:</h2>
|
||||||
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin'
|
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin'
|
||||||
Build target 'N32WB03X'
|
Build target 'N32WB03X'
|
||||||
compiling main.c...
|
compiling app_ota.c...
|
||||||
|
compiling cli_core.c...
|
||||||
linking...
|
linking...
|
||||||
Program Size: Code=38080 RO-data=6932 RW-data=10600 ZI-data=33056
|
Program Size: Code=38080 RO-data=6932 RW-data=10600 ZI-data=33056
|
||||||
FromELF: creating hex file...
|
FromELF: creating hex file...
|
||||||
@ -45,7 +46,7 @@ Package Vendor: Nationstech
|
|||||||
D:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device
|
D:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device
|
||||||
|
|
||||||
<h2>Collection of Component Files used:</h2>
|
<h2>Collection of Component Files used:</h2>
|
||||||
Build Time Elapsed: 00:00:01
|
Build Time Elapsed: 00:00:02
|
||||||
</pre>
|
</pre>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<title>Static Call Graph - [.\Objects\embeddedSrc.axf]</title></head>
|
<title>Static Call Graph - [.\Objects\embeddedSrc.axf]</title></head>
|
||||||
<body><HR>
|
<body><HR>
|
||||||
<H1>Static Call Graph for image .\Objects\embeddedSrc.axf</H1><HR>
|
<H1>Static Call Graph for image .\Objects\embeddedSrc.axf</H1><HR>
|
||||||
<BR><P>#<CALLGRAPH># ARM Linker, 5060750: Last Updated: Wed Sep 02 06:32:32 2026
|
<BR><P>#<CALLGRAPH># ARM Linker, 5060750: Last Updated: Wed Sep 02 08:07:08 2026
|
||||||
<BR><P>
|
<BR><P>
|
||||||
<H3>Maximum Stack Usage = 840 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
|
<H3>Maximum Stack Usage = 840 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
|
||||||
Call chain for Maximum Stack Depth:</H3>
|
Call chain for Maximum Stack Depth:</H3>
|
||||||
|
|||||||
@ -1970,7 +1970,7 @@ I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc
|
|||||||
I (..\app\bsp_led.h)(0x6A96BAAF)
|
I (..\app\bsp_led.h)(0x6A96BAAF)
|
||||||
I (..\app\app_tasks.h)(0x6A96C2F1)
|
I (..\app\app_tasks.h)(0x6A96C2F1)
|
||||||
I (..\app\app_ota.h)(0x6A96E4EB)
|
I (..\app\app_ota.h)(0x6A96E4EB)
|
||||||
I (..\..\Boot\src\dfu_layout.h)(0x6A96D505)
|
I (..\..\Boot\src\dfu_layout.h)(0x6A9768A2)
|
||||||
I (D:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x5EC775FC)
|
I (D:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x5EC775FC)
|
||||||
I (D:\Keil_v5\ARM\ARMCC\include\string.h)(0x5EC77604)
|
I (D:\Keil_v5\ARM\ARMCC\include\string.h)(0x5EC77604)
|
||||||
I (D:\Keil_v5\ARM\ARMCC\include\stdarg.h)(0x5EC775FC)
|
I (D:\Keil_v5\ARM\ARMCC\include\stdarg.h)(0x5EC775FC)
|
||||||
@ -1989,7 +1989,7 @@ F (..\app\app_ota.c)(0x6A96E545)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --
|
|||||||
I (..\app\app_ota.h)(0x6A96E4EB)
|
I (..\app\app_ota.h)(0x6A96E4EB)
|
||||||
I (D:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5EC775FC)
|
I (D:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5EC775FC)
|
||||||
I (..\app\ble\app_ble_proto.h)(0x6A96E490)
|
I (..\app\ble\app_ble_proto.h)(0x6A96E490)
|
||||||
I (..\..\Boot\src\dfu_layout.h)(0x6A96D505)
|
I (..\..\Boot\src\dfu_layout.h)(0x6A9768A2)
|
||||||
I (..\..\Boot\src\boot_crc32.h)(0x6A96D505)
|
I (..\..\Boot\src\boot_crc32.h)(0x6A96D505)
|
||||||
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h)(0x68CD0B30)
|
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h)(0x68CD0B30)
|
||||||
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h)(0x5FA56A96)
|
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h)(0x5FA56A96)
|
||||||
|
|||||||
@ -1,9 +1,10 @@
|
|||||||
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin'
|
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin'
|
||||||
Build target 'N32WB03X'
|
Build target 'N32WB03X'
|
||||||
compiling main.c...
|
compiling app_ota.c...
|
||||||
|
compiling cli_core.c...
|
||||||
linking...
|
linking...
|
||||||
Program Size: Code=38108 RO-data=6932 RW-data=10600 ZI-data=33056
|
Program Size: Code=38080 RO-data=6932 RW-data=10600 ZI-data=33056
|
||||||
FromELF: creating hex file...
|
FromELF: creating hex file...
|
||||||
After Build - User command #1: fromelf --bin --output=.\bin\embeddedSrc.bin .\Objects\embeddedSrc.axf
|
After Build - User command #1: fromelf --bin --output=.\bin\embeddedSrc.bin .\Objects\embeddedSrc.axf
|
||||||
".\Objects\embeddedSrc.axf" - 0 Error(s), 0 Warning(s).
|
".\Objects\embeddedSrc.axf" - 0 Error(s), 0 Warning(s).
|
||||||
Build Time Elapsed: 00:00:01
|
Build Time Elapsed: 00:00:02
|
||||||
|
|||||||
19
mcm-ddc-04/MDK-ARM/debug_app.ini
Normal file
19
mcm-ddc-04/MDK-ARM/debug_app.ini
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/* Keil debugger startup script for mcm-ddc-04 (APP1 @ 0x01008000).
|
||||||
|
*
|
||||||
|
* Why: Keil downloads only the APP1 image. The bootsetting record at
|
||||||
|
* 0x01004000 (written by tools/merge_image.py) still holds the CRC of the
|
||||||
|
* last packaged build, so after any Keil re-download the bootloader at
|
||||||
|
* 0x01000000 rejects the APP and spins forever -> debug never reaches main.
|
||||||
|
*
|
||||||
|
* Fix: skip the natural boot path, force SP/PC from the APP1 vector table.
|
||||||
|
* µVision executes this file after LOAD + RESET, then "Run to main()" does
|
||||||
|
* the rest. For standalone (no debugger) runs, flash tools/out/caiic_full.bin
|
||||||
|
* instead - it carries a bootsetting CRC that matches the APP image.
|
||||||
|
*/
|
||||||
|
FUNC void Setup(void)
|
||||||
|
{
|
||||||
|
SP = _RDWORD(0x01008000); /* APP1 initial MSP */
|
||||||
|
PC = _RDWORD(0x01008004); /* APP1 Reset_Handler */
|
||||||
|
}
|
||||||
|
|
||||||
|
Setup();
|
||||||
@ -113,7 +113,7 @@
|
|||||||
<tDllPa></tDllPa>
|
<tDllPa></tDllPa>
|
||||||
<tDlgDll></tDlgDll>
|
<tDlgDll></tDlgDll>
|
||||||
<tDlgPa></tDlgPa>
|
<tDlgPa></tDlgPa>
|
||||||
<tIfile></tIfile>
|
<tIfile>.\debug_app.ini</tIfile>
|
||||||
<pMon>BIN\CMSIS_AGDI.dll</pMon>
|
<pMon>BIN\CMSIS_AGDI.dll</pMon>
|
||||||
</DebugOpt>
|
</DebugOpt>
|
||||||
<TargetDriverDllRegistry>
|
<TargetDriverDllRegistry>
|
||||||
|
|||||||
@ -417,3 +417,42 @@ ISR 内不得调用 FreeRTOS FromISR API(本工程 BLE 事件均在 BLE 任务
|
|||||||
(≈552B)+ 队列/互斥锁(≈370B)≈ 19.9KB,剩余仅 ~600B——未耗尽但余量偏小。
|
(≈552B)+ 队列/互斥锁(≈370B)≈ 19.9KB,剩余仅 ~600B——未耗尽但余量偏小。
|
||||||
`configTOTAL_HEAP_SIZE` 由 20KB 调至 **22KB**(RW+ZI=43656B,主栈余量约 5.4KB)。
|
`configTOTAL_HEAP_SIZE` 由 20KB 调至 **22KB**(RW+ZI=43656B,主栈余量约 5.4KB)。
|
||||||
编译:0 Error / 0 Warning,`Code=37996 RO-data=6856 RW-data=10600 ZI-data=33056`。
|
编译:0 Error / 0 Warning,`Code=37996 RO-data=6856 RW-data=10600 ZI-data=33056`。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
日期:2026-09-02
|
||||||
|
|
||||||
|
## 19. Boot 跳转策略调整:校验移到升级过程,解决 Keil 下载无法调试
|
||||||
|
|
||||||
|
### 19.1 现象与根因
|
||||||
|
|
||||||
|
加了诊断代码重新编译后,Keil 下载/调试**能连上但全速跑永远到不了 main**。根因:
|
||||||
|
|
||||||
|
- Keil 下载只写 APP1 区(0x01000000 起的镜像由 Keil 的 FLM 按 axf 地址 0x01008000 写入),
|
||||||
|
**不会更新 bootsetting(0x01004000)里记录的 APP1 CRC32**——那是上次 `merge_image.py`
|
||||||
|
打整片包时算的。
|
||||||
|
- 复位链路:芯片 ROM → Boot → 校验 bootsetting → 校验 APP1 镜像 CRC → **不匹配,拒绝跳转**,
|
||||||
|
CPU 停在 Boot 的 `for(;;)`。Keil 的 "Run to main" 走的是自然启动,自然卡在 Boot。
|
||||||
|
- 所以任何一次 Keil 重新下载(不只是诊断代码)都会触发;引入 Boot 之前没有这层校验,故以前正常。
|
||||||
|
|
||||||
|
验证方法:调试状态 halt 看 PC,落在 0x01000000~0x01003FFF 即 Boot 空转。
|
||||||
|
|
||||||
|
### 19.2 调整内容
|
||||||
|
|
||||||
|
- **Boot(`Boot/src/main.c`)改为跳转时不校验镜像 CRC**:只检查 bootsetting 扇区自身完整性
|
||||||
|
(magic + 自身 CRC32)选出 active bank,再做向量表 sanity(MSP 在 SRAM、复位向量在 bank 内)
|
||||||
|
兜底后直接跳转;bootsetting 无效时默认 APP1。删除 `bank_crc_ok()` 及双 bank CRC 回退。
|
||||||
|
- **镜像 CRC 校验职责完全在升级过程**:`app_ota.c` OTA_END 已对新镜像整体 CRC32 比对,
|
||||||
|
通过才写 bootsetting 切 bank 复位——OTA 链路安全性不变。
|
||||||
|
- 新增 `MDK-ARM/debug_app.ini` 并挂到工程调试配置(uvoptx `<tIfile>`):调试器下载后强制
|
||||||
|
`SP/PC = APP1 向量表`,跳过 Boot 直进 APP。Boot 不校验后该脚本已非必需,保留为纯调试可选旁路。
|
||||||
|
- Boot 重建 0E0W(`Code=1352`,bin 2032B),`tools/make_package.bat` 重新出整片包
|
||||||
|
(caiic_full 79464B)。
|
||||||
|
|
||||||
|
### 19.3 影响与注意
|
||||||
|
|
||||||
|
- Keil 直接下载 APP 即可启动和调试,开发节奏恢复。
|
||||||
|
- 代价:OTA 流程之外的镜像损坏(如 Keil 下载中途断电)不再被 Boot 拦截——向量检查只能挡
|
||||||
|
全空/乱码。这是"简单"换来的取舍。
|
||||||
|
- **在板子上烧过其他 0x01000000 起步的程序(SDK 例程 / mcm-ddc-ble)会覆盖 Boot 和
|
||||||
|
bootsetting**,恢复方法:`tools\flash_package.bat tools\out\caiic_full.bin` 重烧整片包。
|
||||||
|
|||||||
84
mcm-ddc-ble/docs/开发日志.md
Normal file
84
mcm-ddc-ble/docs/开发日志.md
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
# mcm-ddc-ble 开发日志
|
||||||
|
|
||||||
|
独立 BLE 工程:从 0x01000000 直接起跑(无 bootloader、无 OTA),用于在单镜像环境下
|
||||||
|
验证 BLE 功能与后续功能开发。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
日期:2026-09-02
|
||||||
|
|
||||||
|
## 1. 工程创建(基于 SDK rdtss 例程)
|
||||||
|
|
||||||
|
### 1.1 选型
|
||||||
|
|
||||||
|
以 `nations-tec/N32WB03x_SDK_V2.0.0/projects/n32wb03x_EVAL/ble/rdtss` 为蓝本:
|
||||||
|
BLE 原始数据透传服务(128-bit UUID,下行写 + 上行 notify),与 mcm-ddc-04 的自定义
|
||||||
|
GATT 透传服务(CLS)形态最接近,适合作为手机 APP 通信协议的载体。heart_rate 是标准
|
||||||
|
profile,不适合做数据通道。
|
||||||
|
|
||||||
|
### 1.2 移植方式
|
||||||
|
|
||||||
|
- 整目录复制 `src/`、`inc/`、`MDK-ARM/` 到 `mcm-ddc-ble/`,工程改名 `mcm-ddc-ble`,
|
||||||
|
输出 `bin/mcm-ddc-ble.bin`。
|
||||||
|
- uvprojx/uvoptx 中 268+11 处 SDK 相对路径由 `..\..\..\..\..\` 重定向为
|
||||||
|
`..\..\nations-tec\N32WB03x_SDK_V2.0.0\`(新工程深度不同);
|
||||||
|
另有 11+3 处 `..\..\..\dfu\common` 指向 SDK 的 `projects/n32wb03x_EVAL/dfu/common`。
|
||||||
|
`nations-tec/` 只读,未做任何修改。
|
||||||
|
- 只使用第一个 target `N32WB03x`(IROM 0x01000000/0x40000);`OTA_IMG_1`/`OTA_IMG_2`
|
||||||
|
两个 target 未适配(其 after-build 脚本会写 SDK 目录),不要构建。
|
||||||
|
|
||||||
|
### 1.3 引脚核对(重点:避开 SWD)
|
||||||
|
|
||||||
|
- SWD 调试管脚:SWCLK=PA4 / SWDIO=PA5,全工程无任何占用。
|
||||||
|
- LED1=PB0、LED2=PA6(与 mcm-ddc-04、STB 板一致)。
|
||||||
|
- USART1 透传通道:TX=PB6 / RX=PB7(AF4,115200 8N1),与我们板子一致。
|
||||||
|
- 日志 LPUART:TX=PB1(NS_LOG)。
|
||||||
|
- `app_usart.h` 里的 PIN_4/PIN_5 是被注释掉的 USART2 备选(PB4/PB5),无影响。
|
||||||
|
|
||||||
|
### 1.4 保 SWD:禁止睡眠
|
||||||
|
|
||||||
|
例程主循环会进 deep sleep,SWD 随之断开(readme 也提示需 RESET 时机烧录)。
|
||||||
|
在 `main.c` 主循环前调用 `ns_sleep_lock_acquire()` 永久锁睡眠,SWD 全程可调试;
|
||||||
|
代价是功耗偏高(仅调试阶段,后续做低功耗时再评估)。
|
||||||
|
|
||||||
|
### 1.5 构建
|
||||||
|
|
||||||
|
`UV4 -b mcm-ddc-ble.uvprojx -t "N32WB03x"`:0 Error / 0 Warning,
|
||||||
|
`Code=23340 RO-data=3352 RW-data=1876 ZI-data=6052`,bin 28224B。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
日期:2026-09-02
|
||||||
|
|
||||||
|
## 2. 接入 FreeRTOS + 点灯任务
|
||||||
|
|
||||||
|
### 2.1 内容
|
||||||
|
|
||||||
|
- 内核:SDK 自带 FreeRTOS V9(`middlewares/Third_Party/FreeRTOS`),工程新增 FREERTOS 组:
|
||||||
|
`tasks/queue/list/timers.c` + `heap_4.c` + `port.c`(RVDS/ARM_CM0),只加进 `N32WB03x` target。
|
||||||
|
- `inc/FreeRTOSConfig.h`:从 mcm-ddc-04 移植,heap 缩为 **8KB**(本工程仅 3 个任务);
|
||||||
|
SVC/PendSV/SysTick 由 port 接管(宏映射),本工程无 `n32wb03x_it.c`,无重复定义问题。
|
||||||
|
- `main.c` 任务化:
|
||||||
|
- `ble_schedule_task`(512 字栈,优先级 2):`rwip_schedule()` + 1ms 延时,
|
||||||
|
替代裸机 while 循环(rwip 只允许单上下文运行)。
|
||||||
|
- `led_task`(128 字栈,优先级 1):LED1(PB0) 每 500ms 翻转做运行指示;
|
||||||
|
LED2(PA6) 仍由 app_ble.c 驱动作连接状态指示。
|
||||||
|
- 睡眠保持锁定(deep sleep 与 RTOS tick 冲突,且保 SWD)。
|
||||||
|
- 串口透传路径为事件驱动(`usart_forward_to_ble_loop` 由 profile 回调触发、
|
||||||
|
`app_usart_tx_process` 由 BLE 消息处理触发),rwip_schedule 进任务后行为不变。
|
||||||
|
|
||||||
|
### 2.2 踩坑记录
|
||||||
|
|
||||||
|
脚本往 uvprojx 写路径时 `\t` 被 Python 解释成制表符(`Source\tasks.c` → `Source<TAB>asks.c`),
|
||||||
|
Keil 报 `cannot create command input file 'source tasks.__i'`;另外 `<FileName>` 必须写纯文件名
|
||||||
|
(带路径会被 Keil 当成对象名,同样报此错)。修正后全量重建通过。
|
||||||
|
|
||||||
|
### 2.3 构建
|
||||||
|
|
||||||
|
0 Error / 0 Warning,`Code=24736 RO-data=3352 RW-data=1964 ZI-data=14484`;
|
||||||
|
bin ≈ 27.4KB,RAM(RW+ZI)≈ 16.1KB / 48KB(含 8KB FreeRTOS heap)。
|
||||||
|
|
||||||
|
### 2.4 上板预期
|
||||||
|
|
||||||
|
LED1 每 500ms 闪烁;手机可搜到并连接 `NS_RDTSS`,连接后 LED2 亮;
|
||||||
|
串口(PB6/PB7,115200)与手机 BLE 互发透传。
|
||||||
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user