Files
STM32F4-Base/scripts/stack_tolerance.tsv
T
wandering1 13001f2ae4 feat(门禁): 栈判据定稿——静态 margin 唯一拦提交、运行时水位只告警、采集不健康整轮作废
task-32 裁定落成可执行件(道F 交付)。不是二选一而是**分权**:静态最坏链 margin 仍是唯一拦提交项(由
`stack_report.py` 守,它本就把运行时峰值取进 max);新增 `stack_gate.py` 管台架侧——趋势只出 WARN,
**绝对底线**(free_min < 25% cfg)是运行时唯一有 FAIL 权限的一档,**采集健康门不过 = VOID / exit 2**,
不红不绿、不进台账。把「daemon 死了 status 仍报正常、rx_lines=0」那类事故机械化:门不过与设备故障
exit 1 分开记,按码聚合的人不会把端口没开当成又崩了一次栈。

容差是推导的:tol = 上取整到 16 B 的 max(128 B, 2×实测摆动),实测 80 B ⇒ 统一 160 B,登记进
`scripts/stack_tolerance.tsv` 带来源列;**改数权限写死**——只有台架重测后才允许回填,禁止为让某轮变绿
而调大容差(被这把尺考核的人不得当场决定尺子的松紧),且这句话**紧贴数值写**。

`--selftest` 14 条能红,开发中抓到作者三个真错(身份戳正则把 __DATE__ 月份写成三位数字、一度把跨轮戳
不同当 VOID 会让判据永不可用、文档 §4.0.2 被 doc-links 抓跨文档串号)。**不接 pre-commit**:它的输入
是台架串口采集,提交时既无设备也无当轮日志,挂上去要么永远 SKIP、要么拿上一轮日志判这一轮的码(与
体积门禁那条假凭证同族)。
2026-10-27 11:31:53 +08:00

1.2 KiB

1# scripts/stack_tolerance.tsv -- 栈水位跨轮容差(字节)。判据裁定见
2# docs/内存管理/RAM使用分析与优化方案.md §4.0.6 第③条;用法:scripts/stack_gate.py。
3#
4# 容差是**推导值不是拍的**:tol(task) = 向上取整到 16 B 格的 max(128 B, 2 x 同镜像实测最大摆动)。
5# 实测来源(台架原始日志在 docs/测试说明/boot_log_data/):
6# 2026-10-26 task-30(同一份 1d4b6a17 像、4 圈仅复位):uiTask 4116~4188 = 72 B、adcTask 80 B
7# 2026-10-27 task-42(HEAD 像、4 圈仅复位):全部任务零摆动
8# -> 最大同镜像摆动 80 B => tol = max(128, 160) = **160 B**,全任务统一。
9# 谁改这个数:**只允许台架**在「改栈配置 / 抬栈 / 新增 DBG 日志调用点」后重测同镜像摆动并回填,
10# 并在下面那列写上来源;**禁止为了让某一轮变绿而调大容差**(与 Forbidden 令牌那条同源:
11# 判据的松紧不能由被它考核的人当场决定)。
12# 格式:task<TAB>bytes<TAB>来源
13default160task-30/42 实测同镜像最大摆动 80 B x2(2026-10-27)
14net160同上
15ftp160同上
16ui160同上
17timesync160同上
18adc160同上
19iec104160同上
20protect160同上
21test160同上(仅测试构建创建)