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:
+1
-1
@@ -13,7 +13,7 @@ FreeRTOS/CMSIS-RTOS API**(见 `AGENTS.md`「平台约束」)。
|
||||
|
||||
| 目录 | 内容 | README |
|
||||
|---|---|---|
|
||||
| `app/` | **应用入口与全局**:`app_main.c/h`(初始化入口)、`app_cfg.h`(编译开关)、`sys_events.h`(就绪事件) | [`app/README.md`](app/README.md) |
|
||||
| `app/` | **应用入口与全局**:`app_main.c/h`(初始化入口)、`app_cfg.h`(裁剪决策占位说明,当前无宏)、`sys_events.h`(就绪事件) | [`app/README.md`](app/README.md) |
|
||||
| `cfg/` | **配置引擎**:`/config.ini` 解析 + 原子持久化(旧二进制档已废弃,2026-10-10) | [`cfg/README.md`](cfg/README.md) |
|
||||
| `sync/` | **时间同步任务**:`time_sync.c/h` | [`sync/README.md`](sync/README.md) |
|
||||
| `algo/` | **采集与算法层(L1/L2/L3)**:语义取数 + 有效性判定 + 采样环/相量/测频 + 定值模型 + 保护元件框架 | [`algo/README.md`](algo/README.md)(索引);设计 → `docs/算法/采集与算法层设计说明.md` |
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
| 文件 | 作用 |
|
||||
|---|---|
|
||||
| `app_main.c/h` | **应用初始化入口 `app_main_init`**:时间子系统优先 → RS485 → NAND → ADC → 诊断(在 `osKernelStart` 之前执行) |
|
||||
| `app_cfg.h` | **功能模块编译开关**(裁剪测试套件/模块用) |
|
||||
| `app_cfg.h` | **功能裁剪的决策占位说明**——2026-10-22 起**不含任何宏**(原 3 个 `APP_*_ENABLE` 零消费点,已删;接回方法见该文件修改记录 v1.2) |
|
||||
| `sys_events.h` | **系统就绪事件定义**(CMSIS-RTOS v2 Event Flags:`SYS_EVT_NET_READY` / `SYS_EVT_STORAGE_READY` / `SYS_EVT_FTP_READY` / `SYS_EVT_TIMESYNC_READY` 及命令位) |
|
||||
|
||||
## 初始化顺序(`app_main_init`)
|
||||
|
||||
+12
-33
@@ -1,47 +1,26 @@
|
||||
/*
|
||||
* 模块名称:Application Configuration
|
||||
* 模块功能:应用层全局配置宏(**预留占位,当前均未接线**)
|
||||
* 模块功能:功能裁剪开关的决策占位说明(**本头文件当前不提供任何宏,也不被任何 .c 包含**)
|
||||
* 适用平台:STM32F407ZGTx
|
||||
* 作者:王建锋
|
||||
* 创建日期:2026-07-19
|
||||
* 修改记录:
|
||||
* v1.0 2026-07-19 王建锋 创建初始版本
|
||||
* v1.1 2026-10-04 王建锋 P2-12:下列宏此前被表述为"功能模块使能开关",但全库
|
||||
* 零代码引用(grep 仅本文件有定义)——"开关名存实亡"会
|
||||
* 误导评审者以为模块可裁剪。现如实标注为**预留占位**:
|
||||
* 当前**不门控任何代码**,各模块一律编译进产品。是否/
|
||||
* 如何接线取决于产品定义(docs/任务规划/README.md §2 阶段 B0),
|
||||
* 确认后再在真实初始化点(如 app_main.c 的 rs485_init /
|
||||
* tpafe5160_init)加门控;在此之前**不要**把它们当开关用。
|
||||
* v1.1 2026-10-04 王建锋 P2-12:如实标注三个 APP_*_ENABLE 为"未接线占位"(全库零消费点)
|
||||
* v1.2 2026-10-22 王建锋 S-4 收口(报告 S-4 / 登记簿 C5):删除 4 个零消费点的宏
|
||||
* (APP_NET_ENABLE / APP_ADC_ENABLE / APP_RS485_ENABLE /
|
||||
* APP_SYS_TIME_SRC)。留"看起来能裁剪、其实不生效"的宏比不留更糟:
|
||||
* 评审者会误信模块可裁剪,而关掉它们不会产生任何编译期效果。
|
||||
* 需要真实门控时(产品定义 B0 落定后),在真实初始化点接入并**在本
|
||||
* 文件登记**,同时接回 App/app/app_main.c 的 include;在此之前
|
||||
* 本模块一律编译进产品(各外设的常驻事实见
|
||||
* docs/环境与部署/项目部署环境要求.md §3.2)。
|
||||
* 注意:本文件不是 App/app/README.md 里说的"编译开关",那行已同步更正。
|
||||
*/
|
||||
|
||||
#ifndef APP_CFG_H
|
||||
#define APP_CFG_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 系统时钟源选择(**预留占位,未接线**)
|
||||
* 0 - DWT CYCCNT(当前实现:console_log.c 直接使用 DWT,未读本宏)
|
||||
* 1 - TIM2(未实现)
|
||||
* 说明:本宏当前无任何消费点;实际的"与时间源无关硬上界"由 console_log.c 内联
|
||||
* 使能 DWT 实现,不经过本宏。
|
||||
*/
|
||||
#define APP_SYS_TIME_SRC 0
|
||||
|
||||
/*
|
||||
* 功能模块"预留开关"(**当前均未接线,不门控任何代码**)
|
||||
* 三个宏一律保持定义(= 模块编译进产品);它们**不产生任何编译期效果**,
|
||||
* 仅作为产品定义(B0)落定后接入真实门控的占位锚点。
|
||||
*/
|
||||
#define APP_NET_ENABLE
|
||||
#define APP_ADC_ENABLE
|
||||
#define APP_RS485_ENABLE
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
/* 故意不提供任何宏:功能裁剪当前不存在。理由与接回方法见上方修改记录 v1.2。 */
|
||||
|
||||
#endif /* APP_CFG_H */
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
*/
|
||||
|
||||
#include "app_main.h"
|
||||
#include "app_cfg.h"
|
||||
|
||||
#include "main.h" /* ST_DIR4_GPIO_Port / ST_DIR4_Pin 等 CubeMX 宏 */
|
||||
#include "stm32f4xx_it.h" /* fault_handler_enable() */
|
||||
|
||||
Reference in New Issue
Block a user