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

6.6 KiB
Raw Blame History

Checklist

每个检查点对应 spec.md 中的一个删除目标或一项验证要求。 完成后请勾选 [x]。任一检查点失败,必须回到 tasks.md 创建修复任务并重新验证。 注:[x] 表示已通过本环境验证;[ ] 表示需用户在本地 IDE 中验证(如编译验证)。

A. 历史遗留字段

  • OTAHandler::ota_stateota_time 字段已从 OTA.h 删除
  • 全工程 Grep ota_stateota_time 命中数为 0

B. OTA 兼容旧接口

  • OTAHandler::handleOTAMessage() 声明已从 OTA.h 删除
  • OTAHandler::handleOTAMessage() 实现已从 OTA.cpp 删除
  • 全工程 Grep handleOTAMessage 命中数为 0
  • OTA 业务流程(握手、收包、擦除、写 Flash、跳转)行为与清理前等价(仅删除死代码,未改业务)

C. CAN 兼容旧 ACK 接口

  • CAN_transmiter::sendDATA_ACK(u32, bool) 声明已从 Can.h 删除
  • CAN_transmiter::sendDATA_ACK(u32, bool) 实现已从 Can.cpp 删除
  • CAN_transmiter::sendDATA_ACK(u32, u8*) 声明已从 Can.h 删除
  • CAN_transmiter::sendDATA_ACK(u32, u8*) 实现已从 Can.cpp 删除
  • 全工程 Grep sendDATA_ACK 命中数为 0
  • CAN 收发主流程(CANFD_AsyncSend / communication_check / onRx0Interrupt / onTxInterrupt)行为与清理前等价(仅删除死代码)

D. CAN DMA 占位接口

  • can_dma_init() 声明已从 Can.h 删除
  • can_dma_init() 实现已从 Can.cpp 删除
  • canfd_config() 中对 can_dma_init() 的调用已移除
  • 全工程 Grep can_dma_init 命中数为 0
  • CAN 初始化路径行为与清理前等价(FIFO 接收路径不变)

E. BootPlatform 预留占位接口

  • BootPlatform::getResetCause() 与 C 包装 get_reset_cause() 已删除
  • BootPlatform::initUnusedPins() 与 C 包装 unused_pin_init() 已删除
  • BootPlatform::printSystemClockInfo() 与 C 包装 print_system_clock_info() 已删除
  • BootPlatform::scanAppFlashContent() 与 C 包装 scanAppFlashContent() 已删除
  • BootPlatform 类整体去留决策已记录:已整体删除(4 个静态方法删完后类已空)
  • 全工程 Grep getResetCause|get_reset_cause|initUnusedPins|unused_pin_init|printSystemClockInfo|print_system_clock_info|scanAppFlashContent|class BootPlatform|BootPlatform:: 命中数为 0

F. SpiOta 保留空壳 ISR

  • SpiOta::onSpiInterrupt() 去留决策已记录:删除(依据:configureSpi0() 禁用 SPI0 RBNE/ERR/TBE 中断,未调用 nvic_irq_enable(SPI0_IRQn, ...),NVIC 未使能 → ISR 永不触发;启动文件 [WEAK] 引用会自动落到默认空实现)
  • onSpiInterrupt() 实现、声明与对应 extern "C" SPI0_IRQHandler 已删除
  • spi_ota_irq_handler C 包装已删除
  • SPI OTA 收发主流程(onCsAssert / onCsRelease / onCsExtiInterrupt / isrProcessFrame / poll)行为与清理前等价

G. 开发期备份文件

  • SpiOta.cpp.bak_20260528 已删除
  • SpiOta.cpp.bak_20260529_txdebug 已删除
  • RTE_Components(CBB-003的冲突副本1_2026-05-06 00-26-28).h 已删除(决策:IDE 合并冲突产物;csolution 只引用 RTE_Components.h,副本不会被编译器引用)

H. C 风格包装层审计

  • systick.h / systick.cpp:删除 systick_config / delay_1s / delay_decrement;保留 delay_1ms / delay_1us / system_soft_reset(有外部调用方)
  • initial.h / initial.cpp:除 Group E 已删除外,还删除 USART0_init / enter_deep_sleep / check_sleep;保留 EXTI5_9_IRQHandler / EXTI10_15_IRQHandler(extern "C" IRQ Handler,启动文件 [WEAK] 引用)
  • 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 的注释
  • Can.h / Can.cpp:can_gpio_init / canfd_config 保留(删除会破坏调用点,违反"严格只做删除"约束);CAN0_RX0_IRQHandler / CAN0_TX_IRQHandler 保留(extern "C" IRQ Handler)

I. 注释一致性

  • 全工程 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
  • SPI0_IRQHandler 仅在启动文件 RTE/Device/GD32E508VE/startup_gd32e50x_cl.s 的 [WEAK] EXPORT 处出现,属预期(SpiOta.cpp 中已 0 命中)
  • 没有任何注释仍指向不存在的符号

J. 行为零变化验证

  • BOOT 启动流程(main → initHardware → run)行为与清理前等价(仅删除死代码,未改启动顺序)
  • OTA 握手 / 收包 / 擦除 / 写 Flash / 跳转流程行为与清理前等价(仅删除 handleOTAMessage 死接口,所有实际链路走 handleLinkMessage)
  • CAN OTA 链路行为与清理前等价(仅删除 sendDATA_ACK 死接口和 can_dma_init 空占位,CANFD_AsyncSend 等主流程未改)
  • SPI OTA 链路行为与清理前等价(仅删除永不触发的 SPI0_IRQHandler,DMA 收发路径未改)
  • 睡眠/唤醒(BootSleepManager)流程行为与清理前等价(仅删除 enter_deep_sleep / check_sleep C 包装,C++ 实现未改)
  • 应用跳转(jumpToApplication)流程行为与清理前等价
  • Flash 布局、配置页布局、CRC 校验逻辑未被改动

K. 编译验证

  • 编译工具链可用性已检查:cbuild / csolution / cbuildgen 均不在 PATH;CMSIS_COMPILER_ROOT / CMSIS_PACK_ROOT 未设置;ARM 编译器(armcc/armclang/arm-none-eabi-gcc)均未找到
  • 编译验证未执行——当前环境编译工具链不可用,需用户在装有 CMSIS-Toolbox 的本地 IDE 中手动编译验证
  • 注释一致性扫描通过,无遗漏引用(理论上不会出现 undefined reference)

L. 不漏不错自检

  • 本 spec 涵盖 BOOT 自有源码(不含 RTE/Device 厂商库)中所有可识别的「旧版本兼容」「历史遗留」「预留占位」「死代码」目标
  • 每个删除目标在删除前均以 Grep 确认无调用方
  • 没有任何「错删仍在使用代码」的情况(保留项均明确记录保留原因:delay_1ms / delay_1us / system_soft_reset / EXTI*_IRQHandler / CAN*_IRQHandler / can_gpio_init / canfd_config)
  • 没有任何「漏删可识别死代码」的情况(19 个已删符号全部 Grep 验证 0 命中)