Files
Motor_v2/docs/review/STATIC_ANALYSIS_NOTES_复核_2026-10-19.md
T

4.0 KiB
Raw Blame History

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。

条目 原结论 当前状态 证据 / 说明
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 的问题。