Files
GD32E50X_BOOT/docs/review/prune-boot-dead-code_复核_2026-10-19.html
T

41 lines
6.0 KiB
HTML
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.
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>prune-boot-dead-code 规格复核 2026-10-19</title><style>
body{font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;margin:0;background:#f5f6f8;color:#1f2328;line-height:1.6}
.wrap{max-width:1180px;margin:0 auto;padding:28px 24px 60px}
h1{font-size:26px;margin:0 0 6px}h2{font-size:20px;margin:36px 0 12px;padding-bottom:6px;border-bottom:2px solid #d0d7de}
h3{font-size:16px;margin:20px 0 8px}
.meta{color:#57606a;font-size:13px}
table{border-collapse:collapse;width:100%;background:#fff;font-size:13px;margin:8px 0}
th,td{border:1px solid #d0d7de;padding:6px 8px;vertical-align:top;text-align:left}
th{background:#eef1f4;white-space:nowrap}
code,.loc{font-family:Consolas,Menlo,monospace;font-size:12px;word-break:break-all}
.sev{display:inline-block;padding:1px 8px;border-radius:10px;color:#fff;font-weight:600;font-size:12px;white-space:nowrap}
.s0{background:#a40e26}.s1{background:#d1242f}.s2{background:#bf8700}.s3{background:#1f6feb}
.card{background:#fff;border:1px solid #d0d7de;border-radius:8px;padding:14px 18px;margin:10px 0}
.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.kpi{background:#fff;border:1px solid #d0d7de;border-radius:8px;padding:12px;text-align:center}
.kpi b{display:block;font-size:26px}
pre{background:#0d1117;color:#e6edf3;padding:14px;border-radius:8px;overflow:auto;font-size:12px;line-height:1.45}
.ok{color:#1a7f37;font-weight:600}.no{color:#d1242f;font-weight:600}.warn{color:#9a6700;font-weight:600}
</style></head><body><div class="wrap">
<h1>prune-boot-dead-code 规格复核(修订版)</h1>
<div class="meta">原文件:.trae/specs/prune-boot-dead-code/spec.md、tasks.md、checklist.md(保留不动)· 复核基线 644c8fb · 2026-10-19</div>
<div class="card">结论:原规格的 19 个删除目标、备份文件与冲突副本清理在当前代码中<b class="ok">全部仍成立</b>;唯一未完成项“编译验证”<b class="no">仍无法从仓库证实</b>;“行为零变化”一项因之后 10 个功能提交已不再适用;新增死代码与注释漂移需要一轮续做。详见主报告
<a href="GD32E50X_BOOT_专家评审_2026-10-19.html#R39">GD32E50X_BOOT_专家评审_2026-10-19.html</a>。</div>
<h2>逐条复核</h2><table><tr><th>原条目</th><th>结论</th><th>2026-10-19 复核(基于 644c8fb)</th><th>状态</th></tr><tr><td>A</td><td>删除 OTAHandler::ota_stateota_time</td><td>全仓 grep 0 命中</td><td class="ok">仍成立</td></tr><tr><td>B</td><td>删除 handleOTAMessage 旧接口</td><td>0 命中;链路统一走 handleLinkMessage</td><td class="ok">仍成立</td></tr><tr><td>C</td><td>删除 sendDATA_ACK 两个重载</td><td>0 命中</td><td class="ok">仍成立</td></tr><tr><td>D</td><td>删除 can_dma_init 占位</td><td>0 命中;canfd_config 中无调用</td><td class="ok">仍成立</td></tr><tr><td>E</td><td>删除 BootPlatform 及其 4 个预留接口</td><td>0 命中</td><td class="ok">仍成立</td></tr><tr><td>F</td><td>删除 SPI0_IRQHandler 空壳 ISR</td><td>仅启动文件 [WEAK] 处出现;SpiOta.cpp:725-727 仍禁用 SPI0 中断,未使能 SPI0_IRQn</td><td class="ok">仍成立</td></tr><tr><td>G</td><td>删除 .bak 备份与 RTE 冲突副本</td><td>仓库中已不存在</td><td class="ok">仍成立</td></tr><tr><td>H</td><td>C 包装层审计(保留 delay_1ms/1us、system_soft_reset、EXTI/CAN IRQ)</td><td>保留项仍有调用方;spi_ota_* 仅剩类型名 spi_ota_frame_type_t</td><td class="ok">仍成立</td></tr><tr><td>I</td><td>注释一致性(已删符号 0 命中)</td><td>已删符号仍 0 命中;但出现新的注释漂移(见 R39)</td><td class="warn">部分退化</td></tr><tr><td>J</td><td>行为零变化</td><td>该次提交(3377a2e)之后又有 10 个功能提交,行为已演进,此项仅对当时快照有意义</td><td class="warn">不再适用</td></tr><tr><td>K/G2.2</td><td>编译验证(当时未执行)</td><td>仓库仍无 CI 与构建产物,无法从仓库证实;且构建依赖仓库外 spi_link(R31),克隆后无法独立编译</td><td class="no">仍未完成</td></tr><tr><td>L</td><td>“不漏不错”自检</td><td>当时范围内成立;之后新增 branchToApplication(未使用)、HW_*SyncManChannel/HW_SetLed 等死代码(R30、R39)</td><td class="warn">需续做</td></tr></table>
<h2>复核方法</h2>
<pre>for s in 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 USART0_init enter_deep_sleep check_sleep; do
grep -rn "$s" --include=*.c --include=*.cpp --include=*.h GD32E50X_BOOT/ # 结果均为 0
done
grep -rn SPI0_IRQHandler GD32E50X_BOOT/ # 仅 startup_gd32e50x_cl.s [WEAK]
grep -n nvic_irq_enable GD32E50X_BOOT/device/SpiOta.cpp # 仅 EXTI10_15_IRQn,SPI0 未使能</pre>
<h2>建议续做(prune 第二轮)</h2>
<table><tr><th>目标</th><th>位置</th><th>说明</th></tr>
<tr><td>branchToApplication</td><td class="loc">GD32E50X_BOOT/sys/OTA.cpp:25-37</td><td>naked 跳转函数,无调用方</td></tr>
<tr><td>HW_Enable/DisableSyncManChannel、HW_SetLed、HW_Reset/SetALEventMask、HW_GetSyncMan、s_alEventMask</td><td class="loc">GD32E50X_BOOT/comm/ecat/boot_ecat_hw.cpp:649-665 等</td><td>SSC 5.11 未调用,且其中两处写错寄存器</td></tr>
<tr><td>escResetForJump(被注释调用)</td><td class="loc">GD32E50X_BOOT/comm/ecat/boot_ecat_hw.cpp:511,552</td><td>应先决定恢复还是删除(见主报告 R15)</td></tr>
<tr><td>注释漂移</td><td class="loc">ota_layout.h:5、config.h:19、OTA.cpp:138、OTA.cpp:957-958</td><td>路径、“见上方注释块”、配置字数量、过时行号</td></tr>
<tr><td>编译验证</td><td>—</td><td>先把 spi_link 纳入仓库,再以 CI 跑 cbuild 完成原 K/G2.2 项</td></tr></table>
</div></body></html>