docs(review): 专家评审 2026-10-19
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -0,0 +1,34 @@
|
|||||||
|
# STATIC_ANALYSIS_NOTES 复核修订版(2026-10-19)
|
||||||
|
|
||||||
|
> 原文件:仓库根目录 `STATIC_ANALYSIS_NOTES.md`(最后修改于 7c4aaa5,2026-09-01),本次保留未改。
|
||||||
|
> 复核基线:master `86ca766`(2026-10-13)。完整评审见 [Motor_v2_专家评审_2026-10-19.html](Motor_v2_专家评审_2026-10-19.html)。
|
||||||
|
|
||||||
|
| 条目 | 原结论 | 当前状态 | 证据 / 说明 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| SUP-GLB-001 编译期常量(ADC/health/config constexpr) | 误报/偏离 | **仍成立** | ADC.cpp:22-47;health.cpp:107;config.h 全部为 constexpr |
|
||||||
|
| 硬件单例 FOC / sampler / CAN0_transmiter / KTH7823 / thermalController / Version | 接受单例 | **仍成立** | FOC.cpp:28;ADC.cpp:60;Can.cpp:86;ang_sensor.cpp:39;health.cpp:104;initial.cpp:218 |
|
||||||
|
| TaskScheduler scheduler 短临界区 | 已保护,接受 | **仍成立** | main.cpp:68-72 关中断取快照并清位;taskFlags volatile(initial.h:75);两写入方同抢占级 |
|
||||||
|
| CAN RX/TX 队列临界区与 PRIMASK 恢复 | 已保护,接受 | **基本成立,但有遗漏** | Can.cpp:644-731、480;遗漏:主循环 CANFD_AsyncSend 直接写邮箱与 TX ISR 竞争(Can.cpp:1395/744,见M21) |
|
||||||
|
| ADC injected 电流缓存不加临界区 | 保留现状 | **风险仍在** | ADC.cpp:62-63、467-481 存在三相撕裂/丢 ready(M33);建议序号双读而非 PRIMASK |
|
||||||
|
| “加 PRIMASK 后实机连续重启”归因于时序 | 归因时序 | **归因不成立** | 10 周期级临界区不足以致复位;更可能是 update_current 提前返回分支(ADC.cpp:468)未恢复中断 + 与 systick 改动捆绑未隔离 + 50 ms 看门狗(IRC40K)余量小;无复位原因记录无法定位 |
|
||||||
|
| systick DWT CPU 占用统计 | 允许小误差 | **仍成立** | systick.cpp:75-79、193-206;仅诊断值 |
|
||||||
|
| ang_sensor SPI DMA 完成标志 | 接受 volatile 标志 | **已过时** | 已改为寄存器轮询 spi_rw_half_word_polling(ang_sensor.cpp:57-82),标志不存在;新问题:TRANS 等待无超时(:78) |
|
||||||
|
| Timer total_us100_counter | 仅 ISR 使用,接受 | **仍成立** | Timer.cpp:19、149-153;可改为 ISR 内 static |
|
||||||
|
| health voltage_state / last_vbus_slow | 模块私有,接受 | **仍成立(有残留)** | health.cpp:112-113 文件内 static;last_vbus_slow 只写不读 |
|
||||||
|
| SUP-CMP-001 normalizeAngle360 浮点比较 | 无需容差 | **比较结论成立,但有新缺陷** | ang_sensor.h:103-111 输入 Inf/NaN 时死循环(M16) |
|
||||||
|
| printf:FOC 齿槽校准打印位于 FOC_DEBUG | 正式版不编译 | **已过时** | 9fbd9c3 已移除齿槽补偿;FOC_DEBUG 仅剩 motor.cpp:245 一处 |
|
||||||
|
| versionToString 去 snprintf | 已改 | **仍成立** | initial.cpp:302-346 |
|
||||||
|
| AUTO-MET-001 calibrate_cogging_tick 拆分 | 已拆分 | **已过时** | 函数随齿槽功能删除;Can.cpp:1186 bit4 改为保留位 |
|
||||||
|
| AUTO-MET-001 communication_check 拆分 | 已拆分 | **已落实** | Can.cpp:841-1115 |
|
||||||
|
| AUTO-MET-001 do_task 拆分 | 已拆分 | **已落实** | tasks.cpp:296-399 |
|
||||||
|
| “实编仍需在 Keil/CMSIS/cbuild 环境验证” | 待验证 | **仍未验证** | 本次评审为静态评审,未实编;cproject -O3 覆盖 build-types(M38)需一并处理 |
|
||||||
|
|
||||||
|
## 需要写回原记录的修订要点
|
||||||
|
|
||||||
|
1. 删除/标注过时:齿槽校准相关两条(FOC_DEBUG 打印、calibrate_cogging_tick 拆分),9fbd9c3 已移除齿槽补偿。
|
||||||
|
2. ang_sensor 已改为寄存器轮询,“SPI DMA 完成标志”条目应替换为“轮询超时”条目,并补 TRANS 等待超时。
|
||||||
|
3. ADC 电流缓存:保留“不加长临界区”的原则,但撕裂风险真实存在,建议改用序号双读;“加 PRIMASK 导致重启”的归因应改为“未定位”,并在启动时记录复位原因后在独立分支复现。
|
||||||
|
4. CAN 队列:补充“主循环 CANFD_AsyncSend 直接写邮箱与 TX ISR 竞争”的偏离说明或修复。
|
||||||
|
5. normalizeAngle360:比较结论成立,但需补充非有限输入保护。
|
||||||
|
6. health:`last_vbus_slow` 只写不读,可删除。
|
||||||
|
7. 实编验证仍未完成;同时修正 cproject 中强制 -O3 覆盖 build-types 的问题。
|
||||||
Reference in New Issue
Block a user