fix(algo): Q10 定值宏改单精度;收口 Flash 优化簇并更正审查报告三处误判

影响面:一个头文件宏(App/algo/prot_set.h)+ 七份文档口径;固件行为逐位
等价,无功能变化。门禁全绿后提交,未推送。

验证链
- @build:0 错 0 警;Code 213,520 → 213,188(−332 B),RO/RW/ZI 不变。
- 真机 @test PASS:戳 fw build: Oct 22 2026 10:36:15 suite=NONE;无
  [ERR]/ERROR/FAIL/Fault;708 ms 到 net init: OK;protect task start、
  i104: listening on 2404、[STACK] 三面水位齐。
- 主机单测:prot_set 90/90、prot_elm 47/47、iec104 97/97。
- 等价性穷举:宏内 42 个字面量;int32 全域 ÷1024 往返 4,494,305 例零
  差异;×1024 方向 20 万随机 float 零差异(×/÷1024 是 2^10 指数平移,
  不产生尾数舍入)→ 定值默认值/上下限、校验和、104 上送值全部不变。

F-6 双精度软浮点(已落地)
- 两个 Q10 宏去掉显式 (double)、1024.0 → 1024.0f:保护判据每 20 ms 每
  元件 3 次定值读取改走 F407 单精度 FPU,不再软件模拟。
- .map 里 dflti/d2f/f2d/dfixi/fepilogue 共 300 B 消失;自研侧对双精度
  helper 的引用归零。
- 更正报告归因:全库 0 处 %f(扫 App/Src/Inc/Drivers 共 173 个 .c/.h),
  剩下 dadd/dmul/ddiv/depilogue/dfixul = 1,018 B 由 MicroLIB printfa.o 的
  _printf_core → _fp_digits 无条件引用,只要还用 snprintf 就删不掉;
  报告"把 %f 改整数刻度"没有可执行对象。

F-4 LVGL 死代码(判定不做)
- 报告列的五项字节数逐字节仍准(合计 10,060 B),但没有一项有开关:
  根因是 lv_draw_sw.c 的 execute_drawing() 无条件 switch 引用全部 task
  类型,链接器 --remove 无从下手。
- 唯一总开关 LV_DRAW_SW_COMPLEX 被 ui_deco.c 的"浅 V"3 px 粗斜腿依赖
  (斜段与其所需 mask 核心都在该开关内);2026-09-03 已实测失败并把两端
  =1 固化 → UI_设计架构.md §1.4 第 7 条。
- 报告原"mask/grad 是文字与矩形绘制必经路径"证伪:字形走 blend 层
  mask_buf,不经 lv_draw_sw_mask_*。
- 剩余路线需给 Lib/lvgl 打本地补丁(上限 ≈16 KB),而 Flash 仅占 22.1%、
  无 OTA/双镜像预算 → 收益不抵代价;图片链同理不打补丁。

F-5 uvprojx 空 TU(降级为观察项)
- 实测 326 个 .c / LVGL 201 个 / .map 零产出 127 个;但增量构建 4~5 s、
  空 TU 只在全量重建或改 lv_conf.h 时才重编,且远程 CI 刻意不跑 @build。
- 报告原"编译时长 −40%"无基线记录,不复述;真要做用 Keil 原生
  <IncludeInBuild>0</IncludeInBuild>,且排在任何 lv_conf.h 改动之后。

文档与台账
- 审查报告 §0.1/§0.4/§1/注册表/§5.1/§5.4/§6.4/W4 行按实测更正,补
  2026-10-22 变更记录行与 F-4/F-6 记录去处行;登记簿 N-28 改写为"三项
  已判定、仅剩 F-5 观察项"。
- 更正 FTL 写回缓存旧口径(sys_log_mcu.c 注释、运行与自检记录设计说明
  §4.4、实机测试实施指南 §9.1):f_close 经 sync_fs → CTRL_SYNC →
  ftl_flush_cache 已落盘,"写另一个文件逼出脏页"不是必要条件;2026-10-02
  那次"复位后写入整段丢失"根因是 dhara resume 锚错 checkpoint。
- 部署环境要求 §3.3 资源预算由 2026-09-11 快照刷新为 2026-10-22 实测,
  并补 CCM 红线行(旧"SRAM 95.4%/极度紧张"的说法早已失效)。
- ram_baseline.py --update/--write、check_mem_numbers.py --write 已回填:
  mem-budget(SRAM1 57.4% / CCM 87.9%,阈值 92%)与 mem-numbers 转绿。
This commit is contained in:
2026-10-22 11:03:05 +08:00
parent af411866a8
commit d4867ddbe2
10 changed files with 63 additions and 40 deletions
@@ -495,12 +495,14 @@ $env:DTU_KEIL_UV4 = 'D:\NotExist\UV4.exe' # 仅当前会话,不动用户级
### 3.3 资源预算(部署红线)
实测(2026-09-11 快照口径,现汇总于 `docs/内存管理/RAM使用分析与优化方案.md`):
实测(**2026-10-22 `@build` 快照**)。实时权威值恒以 `docs/内存管理/RAM预算台账.md` 与
`docs/内存管理/RAM使用分析与优化方案.md` §2.1 受管快照为准,本节只是部署视角的摘要:
| 资源 | 已用 | 总量 | 利用率 | 余量 | 红线说明 |
|---|---|---|---|---|---|
| Flash | 232,000 B(226.6 KB) | 1 MB | 22.1% | ~798 KB | 充裕 |
| 主 SRAM(静态区+堆) | 125,104 B(122.2 KB) | 128 KB | **95.4%** | **5.8 KB** | **极度紧张**:新增任何静态缓冲/任务栈前必须先核算 RAM 余量 |
| Flash(`ER_IROM1` = Code + RO) | 231,768 B(226.3 KB) | 1 MB | 22.1% | ≈804 KB | **充裕**:产品需求无 OTA / 双镜像预算,Flash 不是卡点;死代码裁剪簇已收口 → `docs/问题记录/项目审查与优化建议报告.md` §5.4 |
| 主 SRAM1(静态区;FreeRTOS 堆已迁 CCM) | 75,264 B(73.5 KB) | 128 KB | 57.4% | 55,808 B | 已不紧张——2026-10-11 堆迁 CCM 与 2026-10-15 `LV_MEM_SIZE` 40→16 KB 两步的结果 |
| CCM(`RW_CCM` 段) | 57,376 B(56.0 KB) | 65,280 B | **87.9%** | **7,904 B** | **当前真正的红线**:加任务 / 抬栈 / 加堆会先在这里撞墙;`mem-budget` 钩子在 92% 拦提交 |
- LVGL 内存池 16 KB(静态占用,2026-10-15 由 40 KB 收缩);FreeRTOS 堆 56 KB(CCM)
- 任务栈预算(words,1 word = 4 B):