refactor(结构债): S-4 删零消费点占位宏;S-2 消两处与 Inc 重复的 extern
用户批准「先只跑 1+2」(报告 §0.4 结构债三项 S-1/S-2/S-4 的评估结论)。 **S-4 闭环**:删除 `App/app/app_cfg.h` 里 4 个**全库零消费点**的宏 (`APP_NET_ENABLE` / `APP_ADC_ENABLE` / `APP_RS485_ENABLE` / `APP_SYS_TIME_SRC`),文件降格为「决策占位说明」——修改记录 v1.2 写明为什么删、 将来在真实初始化点接入门控时怎么接回;同时去掉 `app_main.c` 里只为它存在的 include。留「看着能裁剪、其实不生效」的宏比不留更糟:它不产生任何编译期效果, 却会让评审误信模块可裁剪——此前为了对冲这个误解,AGENTS 之外还得在 6 处文档各 写一句「未接线占位,别当开关用」。 **文档口径同步 17 处**:`App/app/README.md`、`App/README.md`、根 `README.md`、 `项目架构总览.md`、`项目部署环境要求.md`(§3.2 两行 + 配置表一行)、`产品需求 设计文档.md`(B0 结论 + 配置表)、`基线与待确认.md`、`排期详述.md` C5、`登记簿 .md` N-23 残余、`RAM使用分析与优化方案.md` 三处。 **顺带纠出另一个「文档里有、代码里从来没有」的东西**:`RAM使用分析与优化方案 .md` 把 `APP_CCM_ENABLE` 写成「加在 `App/app/app_cfg.h`」,全库只有那篇文档提 到它,从未落地——已就地标注「未实现,重开本簇时一起落地」,免得下一个读者以为 CCM 有回退开关。 **S-2 第一步**:删 `gd5f2gq5ue.c:47`、`sd2506.c:20` 两处与 `Inc/spi.h` / `Inc/i2c.h` 重复的 `extern`;GD5F 改 `#include "spi.h"`(沿用 `ch395f.c:22` 的既有做法)。 **镜像体积逐项不变**:`Code=213,188 RO-data=18,580 RW-data=1,184 ZI-data=131,504` 与改动前完全相同,`@build` 0 错 0 警告 → 两步均为行为中性。 报告 §0.4/§9 同步为实测口径并**认错**:S-2 不是旧写的「4 处」而是 **25 处** (`App/task/default_task.c:52-69` 一次就 18 行任务句柄/属性 extern; `stm32f4xx_it.c` 的 `fault_entry_hard` 属 ARMCC `__asm` 合法例外,不该「 修」);S-1 不是「语义层错位」而是**真实的 BSP→App 反向依赖**(NETCFG 10 处 include `App/cfg/cfg_file.h` + UI 3 个文件)。这两个旧数字是 v3.0 重写时沿用 未测所致。 途中被自家门禁正确拦下一次:在 .c 注释里写「S-2a」→ `+1 [校验1] 未登记编号 `,改成平实语言后转绿(正合既有纪律「代码注释禁用不可检索的内部编号」)。 门禁:`@build` 0/0;`check_ids.py --strict` 增量拦截通过、存量债 650 → 640、 可判定比例 82.83%(地板 82.6%+0.1pp);`check_doc_links.py --all --sections-strict` 146 文档 0 问题;`pre-commit` 相关文件全 Passed;字节卫生 15 个文件 BOM/CR/U+FFFD/行尾空格全清(`end-of-file-fixer` 修掉 app_cfg.h 的一个 多余空行)。未推送。
This commit is contained in:
@@ -473,7 +473,7 @@ FreeRTOS 堆不变(`free=17248 / min_ever=9312`)。验证链:`@build` 0/0
|
||||
}
|
||||
```
|
||||
|
||||
**风险门禁**:scatter 注释已提示"clone MCU 可能缺 SRAM3",同理 CCM 在克隆芯片上不可靠 → 加编译开关 `APP_CCM_ENABLE`(`App/app/app_cfg.h`),关闭时 `LV_MEM_ATTR` 等定义退化为空,缓冲全部落回主 SRAM(阶段 1.1 池缩到 16KB 后主 SRAM 也放得下)。真 ST 芯片默认开。
|
||||
**风险门禁**:scatter 注释已提示"clone MCU 可能缺 SRAM3",同理 CCM 在克隆芯片上不可靠 → 加编译开关 `APP_CCM_ENABLE`(**未实现**——2026-10-22 复核:`App/app/app_cfg.h` 里没有这个宏,重开本簇时要连它一起落地),关闭时 `LV_MEM_ATTR` 等定义退化为空,缓冲全部落回主 SRAM(§4.1.1 池缩到 16KB 后主 SRAM 也放得下)。真 ST 芯片默认开。
|
||||
|
||||
验证:map 中出现 `RW_CCM` 且 `*(CCM_DATA)` 各对象地址落在 0x10000000~0x100FFFF;`ram_report.py` 同时输出两个 Region 水位。
|
||||
|
||||
@@ -593,7 +593,7 @@ ISR 余量:该任务运行期间可能被中断打断的最深中断链(SPI/
|
||||
| LVGL 池缩小 → 分配失败 | 复杂界面/长字符串吃池 | 分步降(40→16→8)+ 每步全 UI 回归 + `LV_USE_MEM_MONITOR` 观测 |
|
||||
| 高水位低估 | 启动后未触发的路径(如格式化失败分支)没算进去 | 测试套件覆盖异常分支;保留 ≥30% free_min 底线 |
|
||||
| 第三方代码改动 | lftpd 被 pre-commit 排除,改动不受检查 | 最小侵入、台账登记、升级 lftpd 时需重放补丁 |
|
||||
| CubeMX 重生成 | `freertos.c`/`FreeRTOSConfig.h` 的 USER CODE 区受保护,但 CubeMX 改配置会覆盖部分生成区 | 所有内核宏改动集中在 USER CODE 区或 `app_cfg.h`;`.ioc` 与代码双向核对 |
|
||||
| CubeMX 重生成 | `freertos.c`/`FreeRTOSConfig.h` 的 USER CODE 区受保护,但 CubeMX 改配置会覆盖部分生成区 | 所有内核宏改动只集中在 USER CODE 区与 `Inc/FreeRTOSConfig.h`(`App/app/app_cfg.h` 已无任何宏,不是宏的落点);`.ioc` 与代码双向核对 |
|
||||
| 编码安全 | 新增 .c/.h 为 UTF-8 无 BOM;`Drivers/BSP/UI/*` 为 UTF-8 带 BOM | 遵守 AGENTS.md"源码编辑与编码安全"铁律:只用 Edit 工具改,不整文件重写 |
|
||||
|
||||
## 8. 附录
|
||||
@@ -662,7 +662,7 @@ V1 链接视图(map:Grand Totals / Image component sizes / Symbol Table)
|
||||
|
||||
V4 逐项相加须与 V1 的 `Image component sizes` 逐 .o 吻合;不等则以 V1 为准并记录差异原因。
|
||||
|
||||
**数据来源清单**:`STM32F407-Demo.sct`(区域)、`Inc/FreeRTOSConfig.h`(堆/优先级/静态分配开关)、`cmsis_os2.c:472-476`(**栈大小单位 = 字节**:内部 `/ sizeof(StackType_t)`)、`Src/freertos.c`(任务/队列/事件组属性)、`Lib/lv_conf.h`、`Lib/FatFs/ffconf.h`、`App/app/app_cfg.h` + `test/board/test_config.h`(构建口径)、`Drivers/BSP/**` + `App/**`(缓冲语义/用途/DMA 归属);**权威数据 = `@build` 重建后的 `.map`**(历史 map 不得用于结论)。
|
||||
**数据来源清单**:`STM32F407-Demo.sct`(区域)、`Inc/FreeRTOSConfig.h`(堆/优先级/静态分配开关)、`cmsis_os2.c:472-476`(**栈大小单位 = 字节**:内部 `/ sizeof(StackType_t)`)、`Src/freertos.c`(任务/队列/事件组属性)、`Lib/lv_conf.h`、`Lib/FatFs/ffconf.h`、`test/board/test_config.h`(构建口径;`App/app/app_cfg.h` 自 2026-10-22 起无宏,不再是口径来源)、`Drivers/BSP/**` + `App/**`(缓冲语义/用途/DMA 归属);**权威数据 = `@build` 重建后的 `.map`**(历史 map 不得用于结论)。
|
||||
|
||||
### 8.5 图表与台账重生成
|
||||
|
||||
|
||||
Reference in New Issue
Block a user