506eccc68f
本次会话先后销项与关闭: - E-61 SD2506 清 INTAF:原实现只读取 CTR1,而按手册 ARST=0 时读操作 不清标志,属空操作;改为读-改-写 CTR1,并按手册订正 CTR1 位宏 (INTAF/INTDF/BLF 位置,ARST 归 CTR3) - E-16 cfg_file:新增 CFG_FILE_MAX_NAME_LEN(段名/键名 ≤15),注册时 拒绝超长键名;s_gen_document 两处 snprintf 改检查式;补 TC-CFG-024 用例(主机单测 149→151 PASSED) - E-23 TC704:PHASE7_MULTI_COUNT 8→5(并发上限 = 8 − 3 个常驻监听), accept 失败分支加网络代次检查(网络重建即重建监听) - E-26(UDP)按“保留 API + 文档定案”关闭;E-30 评估为不必要后关闭; N-4(ACCEPT 决定不实施)关闭 审计文档剩余 5 项 P2 + 2 项监督,经用户裁定“都不重要”后整体删除: - 删除 docs/问题记录/错误码传播审计.md(634 行) - 九类缺陷模式表迁入 docs/编号规范.md §4.2.1(PAT-01~09) - E-xx 转为纯历史编号族:编号规范 §4.1 属主改“无(原属主已删除)”, §4.3 保持冻结;全仓 26 处引用按“保留编号、去悬空文档名”处理 - 顺带修正 N-4 收口遗留:排期详述 C1 才是 E-25/E-27/E-28 的承载处 (审计 §4 曾误写为登记簿);README 两处 C1 旧名改回“net 层跨上下文收口” 一并提交此前遗留的体系层评审报告 2026-10-14 复核 WIP(六维评分复核、 未闭环 Top 5→3、三区水位实测刷新)。 校验:Keil 构建 0 错误 0 警告(Code=212344);check_doc_links --sections-strict 与 --all(142 文档)通过;内存双台账刷新后均 PASS。
7.9 KiB
7.9 KiB
RAM 预算台账(配额 · 趋势 · 门禁)
定位:
docs/内存管理/RAM使用分析与优化方案.md§8.2 模板与docs/问题记录/项目审查与优化建议报告.md§5.5 三件套的落地件(2026-10-12,登记簿 N-27 前半 / W1-0)。 回答三个问题:每个子系统还能用多少 RAM(配额)、总量趋势往哪走(基线 TSV)、 超了怎么拦(92% 门禁)。数字不手抄:下方受管区由
scripts/ram_baseline.py --write从.map生成, pre-commitmem-budget钩子校验一致性(同mem-numbers的"事实源唯一"思路)。 配额是规划值,本文件 §2 是配额与阈值的唯一权威(2026-09 体系评审提出、2026-10-12 落地后报告侧条目已销项),改动 = 先登记本文件 §6 变更记录,再改ram_baseline.py的QUOTAS。 区域放置与 DMA 可达性规则 →内存内容分配策略.md(本文件不重复)。
1. 区域预算与门禁(受管区)
| 区域 | 用量 | 容量 | 占比 | 门禁(≤92%) |
|---|---|---|---|---|
| ER_IROM1 (Flash) | 231,084 B | 1,048,576 B | 22.0% | 参考 |
| RW_CCM | 57,376 B | 65,280 B | 87.9% | PASS |
| UNINIT_CCM | 48 B | 256 B | 18.8% | 参考 |
| RW_IRAM1 | 98,144 B | 131,072 B | 74.9% | PASS |
| 子系统(静态 RW+ZI;除 RTOS 堆在 CCM 外均在 SRAM1) | 现值 | 配额 | 状态 |
|---|---|---|---|
| 网络 | 13,690 B | 12 KB | ⚠ 超 1.4 KB |
| 存储 | 7,056 B | 12 KB | OK |
| UI | 54,988 B | 16 KB | ⚠ 超 37.7 KB |
| RTOS 堆 | 57,376 B | 56 KB | 堆=配额 |
| 应用 | 13,247 B | 8 KB | ⚠ 超 4.9 KB |
| 其它 | 9,184 B | — | 参考 |
- 门禁:pre-commit
mem-budget钩子(scripts/ram_baseline.py --gate)—— RW_IRAM1 / RW_CCM 任一 >92% 即拦提交,并打印 Top-10 RW+ZI 对象定位增量; 无.map时自适应跳过(CI 盲区登记在docs/任务规划/测试与架构专项.mdA-5 残余)。 - 阈值依据:92% 由 2026-09 体系评审提出、2026-10-12 落地为门禁(提出时的报告条目已随销项删除,闭环说明见
docs/问题记录/项目审查与优化建议报告.md§5.5)——留 ~8% 给突发缓冲与栈抬升, 触线即触发排期,而不是静默逼近溢出。 - 软提醒(不拦提交):tsv 末行落后于
.map(忘跑--update)、.map早于最新源码(忘@build)。 - 子系统归集为参考值:按对象名前缀归集(口径见 §2),合计与区域总量可差几十字节
(链接器填充行与
UNINIT_CCM等小区分段所致);区域行才是门禁事实源。
2. 子系统配额口径
配额值(ram_baseline.py 的 QUOTAS,本文件即唯一权威;
RTOS 堆 2026-10-12 B5 扩容 48→56 KB 见 §6):网络 12 KB / 存储 12 KB /
UI 16 KB / RTOS 堆 56 KB / 应用 8 KB。归集口径(按 .map 对象名,首匹配):
| 子系统 | 计入对象(前缀/精确名) | 不计入 |
|---|---|---|
| 网络 | ch395f* net_* lftpd* ftp_task* |
ui_net_sink(算 UI) |
| 存储 | gd5f* nand_* ff* diskio* vol_lock* + dhara 裸名(map/journal/nand/fctl/era.o) |
cfg_*(算应用) |
| UI | lv_* ui_*(含 ui_net_sink、ui_task) |
— |
| RTOS 堆 | heap_4.o(CCM)——配额 = configTOTAL_HEAP_SIZE 本身 |
内核对象(tasks/queue/timers/... 归"其它") |
| 应用 | App/ 其余:采集 adc_*、保护 prot_*、相量 phasor/sample_ring、配置 cfg_*、日志 sys_/dbg_/console_log、对时 time_sync*、sys_clock、task_watchdog、sha256、tpafe*、sd2506、default_task 等 |
— |
| 其它 | 内核对象、HAL、CMSIS、启动文件、C 库、链接器填充 | — |
现状判读(2026-10-12 建档):
- UI ⚠ 超配额 = W3 的既有债务,不是新增违规:LVGL 池 40 KB(R-9 目标 16 KB)+ 帧/远显缓冲
≈12.8 KB(R-2 目标迁 CCM)——配额 16 KB 描述的是 R-9/R-2 落地后的目标态(排期见
docs/任务规划/README.md§2 W3)。 - RTOS 堆 = 配额本身:56 KB 即
configTOTAL_HEAP_SIZE(2026-10-12 B5 由 48 KB 扩容,见 §6;heap_4.o另含 32 B 元数据,不计超);改堆 = 改配额,必须先过本文件 §6 登记。 - 应用 ⚠ 小幅超:8 KB 为报告规划值;2026-10-10 栈整改把 3 处
FIL从栈搬进 BSS (静态 +4,128 B,见docs/内存管理/RAM使用分析与优化方案.md§4"2026-10-10 复测")—— 属已评审的"以空间换栈安全",差额在此如实体现。
3. CCM 分配台账(谁能用 CCM)
| 项 | 值 | 说明 |
|---|---|---|
| CCM 容量 | RW_CCM Max 见受管区 |
scatter RW_CCM;仅 CPU 可达,DMA 不可达(RM0090 §3.1.1) |
| 现占用 | 仅 FreeRTOS 堆 heap_4(56 KB,2026-09-21 迁入;2026-10-12 B5 扩容 48→56 KB) |
其余候选全部仍在 SRAM1 |
| 现余量 | 受管区 RW_CCM 容量 − 占用(≈8 KB) | 不够 R-2 后半的 UI 侧待迁体量(R-9 后仍 ≈30 KB) |
| R-2 后半解锁链 | ① R-9:LV_MEM_SIZE 40→16 KB(待迁体量降到 ~30 KB)→ ② 堆 56→32 KB(docs/内存管理/RAM使用分析与优化方案.md §2.2,再腾 24 KB;⚠ 2026-10-12 B5 反向扩容至 56 KB——9 任务栈 + 队列实测需要,缩回 32 KB 前必须重跑 stack_report.py + 上板 min_ever 复测)→ ③ CCM 余 ~32 KB ≥ 30 KB → 迁入 |
顺序不可颠倒;每步前后跑 stack_report.py / ram_report.py(铁律) |
| 迁入前置 | 目标缓冲必须过 DMA 可达性清单(内存内容分配策略.md) |
违例 = 静默传错(N-11 同类坑);克隆芯片 CCM 可靠性风险见 docs/内存管理/RAM使用分析与优化方案.md §7 |
4. 趋势基线(scripts/ram_baseline.tsv)
- 每次
@build后:& '.venv\Scripts\python.exe' scripts/ram_baseline.py --update追加一行(Code/RO/RW/ZI + 三区水位 + Top-10 RW+ZI 对象;同日重跑覆盖当日行)。 - 看趋势 / 找增量:
scripts/ram_baseline.py --trend——高亮较上一行 RW+ZI 增长 >1 KB 的对象, 即docs/内存管理/RAM使用分析与优化方案.md§0.3 "ZI 增量 >1KB 必须在提交说明中解释"的机械化;提交说明直接抄--trend输出行。
5. 超配额流程
新增/扩大静态缓冲导致子系统越过配额:先登记再动手——本文件 §6 加一行 (日期 / 子系统 / 现值→新值 / 原因 / 决定人),提交说明引用该行。 92% 门禁拦的是总量,配额管的是结构(谁挤占了谁),两者不可互替。
6. 变更记录
| 日期 | 变更 | 原因 / 出处 |
|---|---|---|
| 2026-10-12 | 建档:三件套落地(本台账 + scripts/ram_baseline.py + scripts/ram_baseline.tsv + pre-commit mem-budget 钩子) |
登记簿 N-27 前半(W1-0);docs/问题记录/项目审查与优化建议报告.md §5.5 |
| 2026-10-12 | RTOS 堆配额 48 KB → 56 KB(QUOTAS 同步) |
B5 protectTask 立项:iec104Task(2.5KB)+protectTask(2KB)+TCB 入堆后 48KB 池 min_ever 预估跌破 3,072 B 告警线 → .ioc L1 参数 configTOTAL_HEAP_SIZE 49152→57344(CCM 水位 75.3%→87.9%,仍 <92% 门禁;CCM 空闲降至 ≈8 KB)。连带影响见 §3 R-2 后半链注记 |
| 2026-10-12 | 任务栈 +1536 B(堆内用量,配额 56 KB 不变):defaultTask 1024→1280 words(+1024 B)、timeSyncTask 512→640 words(+512 B);产品任务栈合计 37,632→39,168 B | 登记簿 N-33 栈收口:B7 定值持久化把 defaultTask 静态链推到 3016 B(余 1080 < 30% 线)、timeSyncTask 链 1264 B(余 784 < ISR 底线 1024);B6 台架背书 min_ever=10000 → 抬后实测 heap free=16400 / min_ever=8464(与预算 −1536 完全吻合,>3072 告警线);stack_report 9 任务 0 FAIL + @test PASS,见 RAM使用分析与优化方案.md §1.4 |