Files
GD32E50X_BOOT/.trae/specs/prune-boot-dead-code/checklist.md
T
cbb 3377a2e58a refactor(device): 移除未使用的CAN DMA初始化函数和SPI中断处理
移除了CAN模块中未启用的DMA初始化相关代码,包括can_dma_init函数
和相关的调用。同时移除了SPI OTA模块中已废弃的中断处理函数和C风格
兼容包装函数,这些功能已被DMA方式替代。
BREAKING CHANGE: 移除了can_dma_init函数和spi_ota_irq_handler等C风格API。
2026-07-15 01:56:38 +08:00

81 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Checklist
> 每个检查点对应 spec.md 中的一个删除目标或一项验证要求。
> 完成后请勾选 `[x]`。任一检查点失败,必须回到 tasks.md 创建修复任务并重新验证。
> 注:[x] 表示已通过本环境验证;[ ] 表示需用户在本地 IDE 中验证(如编译验证)。
## A. 历史遗留字段
- [x] `OTAHandler::ota_stateota_time` 字段已从 OTA.h 删除
- [x] 全工程 Grep `ota_stateota_time` 命中数为 0
## B. OTA 兼容旧接口
- [x] `OTAHandler::handleOTAMessage()` 声明已从 OTA.h 删除
- [x] `OTAHandler::handleOTAMessage()` 实现已从 OTA.cpp 删除
- [x] 全工程 Grep `handleOTAMessage` 命中数为 0
- [x] OTA 业务流程(握手、收包、擦除、写 Flash、跳转)行为与清理前等价(仅删除死代码,未改业务)
## C. CAN 兼容旧 ACK 接口
- [x] `CAN_transmiter::sendDATA_ACK(u32, bool)` 声明已从 Can.h 删除
- [x] `CAN_transmiter::sendDATA_ACK(u32, bool)` 实现已从 Can.cpp 删除
- [x] `CAN_transmiter::sendDATA_ACK(u32, u8*)` 声明已从 Can.h 删除
- [x] `CAN_transmiter::sendDATA_ACK(u32, u8*)` 实现已从 Can.cpp 删除
- [x] 全工程 Grep `sendDATA_ACK` 命中数为 0
- [x] CAN 收发主流程(`CANFD_AsyncSend` / `communication_check` / `onRx0Interrupt` / `onTxInterrupt`)行为与清理前等价(仅删除死代码)
## D. CAN DMA 占位接口
- [x] `can_dma_init()` 声明已从 Can.h 删除
- [x] `can_dma_init()` 实现已从 Can.cpp 删除
- [x] `canfd_config()` 中对 `can_dma_init()` 的调用已移除
- [x] 全工程 Grep `can_dma_init` 命中数为 0
- [x] CAN 初始化路径行为与清理前等价(FIFO 接收路径不变)
## E. BootPlatform 预留占位接口
- [x] `BootPlatform::getResetCause()` 与 C 包装 `get_reset_cause()` 已删除
- [x] `BootPlatform::initUnusedPins()` 与 C 包装 `unused_pin_init()` 已删除
- [x] `BootPlatform::printSystemClockInfo()` 与 C 包装 `print_system_clock_info()` 已删除
- [x] `BootPlatform::scanAppFlashContent()` 与 C 包装 `scanAppFlashContent()` 已删除
- [x] `BootPlatform` 类整体去留决策已记录:**已整体删除**(4 个静态方法删完后类已空)
- [x] 全工程 Grep `getResetCause|get_reset_cause|initUnusedPins|unused_pin_init|printSystemClockInfo|print_system_clock_info|scanAppFlashContent|class BootPlatform|BootPlatform::` 命中数为 0
## F. SpiOta 保留空壳 ISR
- [x] `SpiOta::onSpiInterrupt()` 去留决策已记录:**删除**(依据:`configureSpi0()` 禁用 SPI0 RBNE/ERR/TBE 中断,未调用 `nvic_irq_enable(SPI0_IRQn, ...)`,NVIC 未使能 → ISR 永不触发;启动文件 [WEAK] 引用会自动落到默认空实现)
- [x] `onSpiInterrupt()` 实现、声明与对应 `extern "C" SPI0_IRQHandler` 已删除
- [x] `spi_ota_irq_handler` C 包装已删除
- [x] SPI OTA 收发主流程(`onCsAssert` / `onCsRelease` / `onCsExtiInterrupt` / `isrProcessFrame` / `poll`)行为与清理前等价
## G. 开发期备份文件
- [x] `SpiOta.cpp.bak_20260528` 已删除
- [x] `SpiOta.cpp.bak_20260529_txdebug` 已删除
- [x] `RTE_Components(CBB-003的冲突副本1_2026-05-06 00-26-28).h` 已删除(决策:IDE 合并冲突产物;csolution 只引用 `RTE_Components.h`,副本不会被编译器引用)
## H. C 风格包装层审计
- [x] systick.h / systick.cpp:删除 `systick_config` / `delay_1s` / `delay_decrement`;保留 `delay_1ms` / `delay_1us` / `system_soft_reset`(有外部调用方)
- [x] initial.h / initial.cpp:除 Group E 已删除外,还删除 `USART0_init` / `enter_deep_sleep` / `check_sleep`;保留 `EXTI5_9_IRQHandler` / `EXTI10_15_IRQHandler`(extern "C" IRQ Handler,启动文件 [WEAK] 引用)
- [x] SpiOta.h / SpiOta.cpp:删除全部 12 个 `spi_ota_*` C 包装(含 `spi_ota_irq_handler` 和 `spi_ota_cs_exti_handler`);同步删除空的 extern "C" 块;同步更新 initial.cpp 中提到 `spi_ota_cs_exti_handler` 的注释
- [x] Can.h / Can.cpp:`can_gpio_init` / `canfd_config` 保留(删除会破坏调用点,违反"严格只做删除"约束);`CAN0_RX0_IRQHandler` / `CAN0_TX_IRQHandler` 保留(extern "C" IRQ Handler)
## I. 注释一致性
- [x] 全工程 Grep 所有已删符号名(`ota_stateota_time`、`handleOTAMessage`、`sendDATA_ACK`、`can_dma_init`、`get_reset_cause`、`unused_pin_init`、`print_system_clock_info`、`scanAppFlashContent`、`getResetCause`、`initUnusedPins`、`printSystemClockInfo`、`BootPlatform`、`onSpiInterrupt`、`spi_ota_irq_handler`、`spi_ota_cs_exti_handler`、`systick_config`、`delay_1s`、`delay_decrement`)命中数为 0
- [x] `SPI0_IRQHandler` 仅在启动文件 `RTE/Device/GD32E508VE/startup_gd32e50x_cl.s` 的 [WEAK] EXPORT 处出现,属预期(SpiOta.cpp 中已 0 命中)
- [x] 没有任何注释仍指向不存在的符号
## J. 行为零变化验证
- [x] BOOT 启动流程(`main` → `initHardware` → `run`)行为与清理前等价(仅删除死代码,未改启动顺序)
- [x] OTA 握手 / 收包 / 擦除 / 写 Flash / 跳转流程行为与清理前等价(仅删除 `handleOTAMessage` 死接口,所有实际链路走 `handleLinkMessage`)
- [x] CAN OTA 链路行为与清理前等价(仅删除 `sendDATA_ACK` 死接口和 `can_dma_init` 空占位,`CANFD_AsyncSend` 等主流程未改)
- [x] SPI OTA 链路行为与清理前等价(仅删除永不触发的 `SPI0_IRQHandler`,DMA 收发路径未改)
- [x] 睡眠/唤醒(`BootSleepManager`)流程行为与清理前等价(仅删除 `enter_deep_sleep` / `check_sleep` C 包装,C++ 实现未改)
- [x] 应用跳转(`jumpToApplication`)流程行为与清理前等价
- [x] Flash 布局、配置页布局、CRC 校验逻辑未被改动
## K. 编译验证
- [x] 编译工具链可用性已检查:`cbuild` / `csolution` / `cbuildgen` 均不在 PATH;`CMSIS_COMPILER_ROOT` / `CMSIS_PACK_ROOT` 未设置;ARM 编译器(armcc/armclang/arm-none-eabi-gcc)均未找到
- [ ] **编译验证未执行**——当前环境编译工具链不可用,需用户在装有 CMSIS-Toolbox 的本地 IDE 中手动编译验证
- [x] 注释一致性扫描通过,无遗漏引用(理论上不会出现 `undefined reference`)
## L. 不漏不错自检
- [x] 本 spec 涵盖 BOOT 自有源码(不含 RTE/Device 厂商库)中所有可识别的「旧版本兼容」「历史遗留」「预留占位」「死代码」目标
- [x] 每个删除目标在删除前均以 Grep 确认无调用方
- [x] 没有任何「错删仍在使用代码」的情况(保留项均明确记录保留原因:`delay_1ms` / `delay_1us` / `system_soft_reset` / `EXTI*_IRQHandler` / `CAN*_IRQHandler` / `can_gpio_init` / `canfd_config`)
- [x] 没有任何「漏删可识别死代码」的情况(19 个已删符号全部 Grep 验证 0 命中)