docs+scripts: 删除测试与架构专项文档并把引用改成就地口径
这是并行的另一路在飞的改动(本会话按用户「全部提交」指示代为落盘): 移除 docs/任务规划/测试与架构专项.md,并把指向它的引用改成就地口径 (app_assert.h / net_socket.c / ch395f_test.h 头注释改指本文件注释或 对应文档,check_size_gate.py 与 ram_baseline.py 的出处改指 CI 文档, RAM预算台账、暂缓-RS485、采集与算法层设计说明、cubemx-survival、 id-check、两份 README 同步改引)。 如要拆回:git reset --soft HEAD~1 即可把这一笔退回工作区。 合树后 @build 0 错 0 警(Code=236456 RO=28124 RW=1876 ZI=137084)。
This commit is contained in:
@@ -37,7 +37,7 @@
|
||||
#include "dbg_log.h"
|
||||
|
||||
/*
|
||||
* 模块级轻量断言(S12,规格 docs/任务规划/测试与架构专项.md §2.1):本模块用
|
||||
* 模块级轻量断言(规格 = app_assert.h 头注释):本模块用
|
||||
* APP_ASSERT 表达 2 处状态机不变量——生产构建(开关默认关闭)编译期消失、
|
||||
* .map 无新增符号;打开态复用 configASSERT 的同一个失败钩子(不是 DBG_ERROR,
|
||||
* 断言点常在"内核状态已不可信"的现场,走裸控制台更稳)。
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
* 模块名称:模块级轻量断言宏(APP_ASSERT)
|
||||
* 模块功能:给自研代码里"不该发生"的**内部不变量**一个统一出口——编译期整体
|
||||
* 裁剪,生产构建零符号零开销;打开后与 configASSERT 共用同一个失败钩子。
|
||||
* 规格出处:docs/任务规划/测试与架构专项.md §2.1。该节的代码块自称"示意,非最终
|
||||
* 实现",本文件即落地实现;与示意稿的两处差异见下方"落地差异"。
|
||||
* 落地差异(相对 §2.1 示意稿,均为有意):
|
||||
* 规格出处:本头注释即规格正文(原专项文档已删除,2026-10-28;历史见 git log)。
|
||||
* 早期示意稿自称"示意,非最终实现",本文件即落地实现;与示意稿的两处
|
||||
* 差异见下方"落地差异"。
|
||||
* 落地差异(相对早期示意稿,均为有意):
|
||||
* 1. 断言点**不再额外发一条 DBG_ERROR**:钩子本身就打印 file:line(断言唯一有
|
||||
* 价值的现场信息),而每条 DBG_* 调用点约 90 B Flash + 216 B 栈(AGENTS
|
||||
* 「日志不是免费的」);断言点又常处在"内核状态已不可信"的现场,走裸控制台
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
# 测试与架构改进专项(P1 收尾 / S1x / A-x)
|
||||
|
||||
> 编号空间见 `docs/任务规划/README.md` §0;排期位置见 `docs/任务规划/README.md` §2 顺序表。
|
||||
> **`S` 裸形 / `T-x` / `A-x` 三族**是 2026-10-02 版复审的**条目编号**——编号**不随条目删除而回收**(现存有效条目 = 「采集链路测试可验证性约束」「体积门禁 CI 强制路径」与「CI 远端闭环未验证」);
|
||||
> 其他文档若引用这些编号,其证据见对应模块文档与 `git log`。已完成事项的证据沉淀:
|
||||
> `../测试说明/系统时钟单元测试说明.md`(S1-a)、`../测试说明/配置文件单元测试说明.md`(S1-b)、
|
||||
> `../测试说明/测试开发标准流程.md` §4.2.1(主机侧纯逻辑单测适格台账)、`../测试说明/模拟器差距清单.md`(S13)、
|
||||
> `../测试说明/实机测试实施指南.md`(S4/S5/S7/S9/S11)、`../问题记录/GD5F2GQ5UE_Trap_Records.md`(S9)、
|
||||
> `../测试说明/主机单测覆盖率口径.md` §9「P1 落地」与「P2 落地」(S1-c:`sys_log_mcu` 106 例、
|
||||
> `time_sync` 既有 4 例,两套均已被 `test-coverage` 总闸覆盖)。
|
||||
>
|
||||
> **本文件只剩 1 项未闭环**(「采集链路测试可验证性约束」,且 RS485 侧随 B2 暂缓)。2026-10-25 复核时把已销项条目
|
||||
> 压缩成证据指针——原来的详述与「完成即销项」规则冲突,留着会让读者以为还有活。
|
||||
|
||||
## 1. P1 收尾(0 项)
|
||||
|
||||
**测试固件静态 RAM 预算** 已于 2026-10-25 销项(`task/P1-10-test-fw`→73f9e10):
|
||||
CH395F 套件 5 档构建全部链接通过,最坏态 `RW_IRAM1` 91,088 B / 69.5%(距 92% 线余 29,498 B);
|
||||
`@test` f3 轮 VERDICT PASS(Phase 1/12/15 = 9/9、1/1、21/21)。**数字与规范正文的唯一出处**是
|
||||
`test/board/ch395f_test.h` 的开关区注释,本文件不再重复。
|
||||
|
||||
**约束(仍然有效)**:**不建议**扩 scatter 到 192 KB——破坏既有克隆芯片兼容决策。
|
||||
|
||||
## 2. 测试与架构改进专项(S1x / A-x)
|
||||
|
||||
**未闭环一览**
|
||||
|
||||
| 编号 | 事项 | 状态 | 详述 |
|
||||
|---|---|---|---|
|
||||
| **采集链路测试可验证性约束** | ADC / RS485 采集链路的**测试可验证性约束** | ⏸ ADC 侧随 B1 闭环;**RS485 侧随 B2 暂缓(`暂缓-RS485.md`)** | §2.2 |
|
||||
|
||||
### 2.1 S12:模块级轻量断言宏(✅ 2026-10-25 销项)
|
||||
|
||||
实现 `Drivers/BSP/app_assert.h`(→658fbe7)。**落位从示意稿的 `App/util/` 改到 `Drivers/BSP/`
|
||||
的理由 = layer-deps 方向约束**,载于该头注释与提交正文。生产构建 `APP_ASSERT_ENABLE` 关闭时
|
||||
宏展开为 `((void)0)`,零符号零开销——口径唯一正文 = 该头文件注释。
|
||||
|
||||
### 2.2 采集链路测试可验证性约束:ADC / RS485 ⏸
|
||||
|
||||
**背景**:`adc_task.c` 已实现(B1,2026-10-10),`rs485_task.c` 仍是空桩,`App/protocol/` 只有 README 与 `.gitkeep`。
|
||||
本项不是"缺陷",而是**对上游 B2 的设计约束**(B1 已完成;**B2 暂缓中,见 `暂缓-RS485.md`——重启 B2 动手前必须先落实本约束**,否则后续无法补测)。
|
||||
|
||||
**约束**(建议纳入 B2 设计):
|
||||
|
||||
1. **协议解析必须与硬件 I/O 分离**——`App/protocol/` 的解析函数应接受
|
||||
`(const uint8_t *buf, size_t len)` 并返回解析结果,使其成为 主机侧纯逻辑单测的**天然适格对象**
|
||||
(参考 `cfg_file` 的"核心 + 后端"模式);
|
||||
2. **采集缓冲必须双缓冲 + 序号**——否则消费者读到撕裂数据,
|
||||
且**撕裂在单测里测不出来**(时序相关),必须在设计上消除;
|
||||
3. **DE 收尾必须有超时路径覆盖**(RS485 半双工特有陷阱)。
|
||||
|
||||
**完成判据**:B2 设计文档体现上述三条;协议解析函数有对应主机侧纯逻辑单测。(B1 侧:ADC 无协议解析面,其"同一时刻性"由原子快照保证、已闭环。)
|
||||
|
||||
### 2.3 「体积门禁 CI 强制路径」残余:CI 体积门禁盲区(✅ 2026-10-25 销项)
|
||||
|
||||
同码凭证 + CI 复核→564715c、跨树稳定修复→7c4628b。**口径唯一正文** = `scripts/check_size_gate.py`
|
||||
的 docstring(含"CI 侧跳过 `mem-numbers` 的边界"与本地强制路径)。`docs/内存管理/RAM预算台账.md`
|
||||
§1 仍指向本条目名,读那里的数字即可,不必回本文件。
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
- **门禁**:pre-commit `mem-budget` 钩子(`scripts/ram_baseline.py --gate`)——
|
||||
RW_IRAM1 / RW_CCM 任一 >92% 即拦提交,并打印 Top-10 RW+ZI 对象定位增量;
|
||||
无 `.map` 时自适应跳过(CI 盲区登记在 `docs/任务规划/测试与架构专项.md`「体积门禁 CI 强制路径」残余)。
|
||||
无 `.map` 时自适应跳过(CI 侧跳过 `mem-numbers` 的边界 = `scripts/check_size_gate.py` 的 docstring,唯一正文)。
|
||||
- **阈值依据**:92% 由 2026-09 体系评审提出、2026-10-12 落地为门禁(提出时的报告条目已随销项删除,闭环说明见 `RAM使用分析与优化方案.md` §4 阶段 3「长效机制」与本文)——留 ~8% 给突发缓冲与栈抬升,
|
||||
触线即触发排期,而不是静默逼近溢出。
|
||||
- **软提醒**(不拦提交):tsv 末行落后于 `.map`(忘跑 `--update`)、`.map` 早于最新源码(忘 `@build`)。
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
python scripts/check_size_gate.py --ci [--warn-only]
|
||||
python scripts/check_size_gate.py --show
|
||||
|
||||
设计依据:docs/任务规划/测试与架构专项.md、docs/CI/README.md。
|
||||
设计依据:本 docstring(体积门禁口径的唯一正文)、docs/CI/README.md。
|
||||
创建日期:2026-10-25
|
||||
"""
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ RAM 预算门禁 + 趋势台账(登记簿条目「缩堆迁 CCM 后半(暂
|
||||
1. **92% 阈值门禁**(`--gate`,pre-commit `mem-budget` 钩子入口):
|
||||
RW_IRAM1 / RW_CCM 任一区占比 > 92% → FAIL,并附 Top-10 RW+ZI 对象表;
|
||||
无 `.map`(未做 Keil 构建)→ 自适应跳过(与 `mem-numbers` 同口径,
|
||||
CI 盲区登记在 `docs/任务规划/测试与架构专项.md`)。
|
||||
CI 盲区口径见 `scripts/check_size_gate.py` 的 docstring)。
|
||||
`--gate` 同时校验台账受管区与 `.map` 一致(防漂移,同 `mem-numbers` 思路)。
|
||||
2. **趋势基线** `scripts/ram_baseline.tsv`(`--update` 每次 @build 后追加一行;
|
||||
`--trend` 看趋势并高亮 RW+ZI 较上一行增长 >1 KB 的对象——方案 §4.0.3
|
||||
|
||||
@@ -86,7 +86,7 @@ extern "C" {
|
||||
* test/run_all_suites.py 的 _rewrite_config 只改 TEST_SUITE_* 行(那些行没有行尾
|
||||
* 跨行注释)所以一直没炸;本文件是"人手工切阶段"的入口,必须自身安全。
|
||||
*
|
||||
* 链接余量构建实测(条目属主 docs/任务规划/测试与架构专项.md;2026-10-25,
|
||||
* 链接余量构建实测(2026-10-25,本文件即数字与结论的唯一出处;2026-10-28 复核:
|
||||
* RW_IRAM1 = 128 KB 的 .sct 区,92% 红线 = 120,586 B):
|
||||
* 配置(TEST_SUITE_CH395F + 阶段) Code ZI RW_IRAM1 距红线余量
|
||||
* 产品基线(阶段全关) 214,104 131,852 75,632 57.7% 44,954 B
|
||||
@@ -122,7 +122,7 @@ extern "C" {
|
||||
* 该条目关心的 PHASE5 三块静态缓冲(3 x PHASE5_CHUNK_SIZE = 4093)确实进了链接:
|
||||
* hw_full 的 ch395f_test_task.o 数据段 = 12,285 B(3 x 4093 = 12,279 + 其余 6 B)。
|
||||
* "理论余量足够"由未实测转为已实测:最坏态还余 29,634 B,不必把 .sct 扩到 192 KB
|
||||
* (与该条目"不建议扩 scatter"的约束一致)。RW_CCM 四档恒为 57,376 B / 87.9%——
|
||||
* (**约束:不建议把 scatter 扩到 192 KB**——会破坏既有克隆芯片兼容决策)。RW_CCM 四档恒为 57,376 B / 87.9%——
|
||||
* 但该区已贴着 92% 线,任何往 CCM 加东西的改动都得单独核算。
|
||||
*/
|
||||
#if defined(ENABLE_PHASE1_TESTS) || defined(ENABLE_PHASE2_TESTS) || \
|
||||
|
||||
@@ -69,7 +69,7 @@ from unit_test_harness import TestBuild, run_host_unit_test # noqa: E402
|
||||
# net_socket.c 的 S12 断言试点(2 处 APP_ASSERT)要包含它。这里刻意**用真头不造桩**——
|
||||
# 桩与真头漂移正是本 runner「常量闸」要防的那类自洽假绿(stub/dbg_log.h 那种必须做桩
|
||||
# 的是平台层,断言宏不是平台层:它无状态、开关默认关,真头在宿主下只剩一条 #define)。
|
||||
# 依据 docs/任务规划/测试与架构专项.md §2.1。
|
||||
# 规格正文 = Drivers/BSP/app_assert.h 头注释(原专项文档已删除)。
|
||||
BUILD = TestBuild(
|
||||
name="NET Socket Tests",
|
||||
src=os.path.join(HERE, "net_socket_test.c"),
|
||||
|
||||
Reference in New Issue
Block a user