From 5869c0307bb0c65e5cbe7263903c0b5d702d763f Mon Sep 17 00:00:00 2001 From: Wanderingss <1624155937@qq.com> Date: Tue, 27 Oct 2026 04:27:11 +0800 Subject: [PATCH] =?UTF-8?q?fix(104):=20=E6=B6=88=E6=8E=89=20cppcheck=20?= =?UTF-8?q?=E4=B8=A4=E6=A0=B9=E5=B8=B8=E9=A9=BB=E7=BA=A2=E2=80=94=E2=80=94?= =?UTF-8?q?=E5=9B=9E=E6=98=BE=E4=B8=8D=E5=86=8D=E4=BC=A0=E6=9C=AA=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E7=BC=93=E5=86=B2=E3=80=81blen=20=E6=94=B6?= =?UTF-8?q?=E4=BD=9C=E7=94=A8=E5=9F=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit L0 静态门禁(pre-commit)历史 36 次启动里 28 红 / 7 绿 / 1 取消,最后一次绿是 10-12 19:17 的 run 23;此后连续全红。恒定的一根就是 cppcheck:本机(与 runner 同机、同一 Machine 级 Cppcheck 2.21.0)以钩子原样参数复现,诊断与 runner 日志 task-54/58/60/62/64、以及 master 上那条「Failing after 6m49s」的归档 run 26 逐字一致——不是版本漂移,也不是抑制文件缺失。 两条诊断与处置: - s_cmd_con:body 仅在 n>0 时写入,n==0(回显超长退化为空信息体)时把未初始 化缓冲连同长度 0 一起传给 s_send_asdu。现实现内 len>0 才 memcpy,故无运行时 缺陷,但契约脆弱、门禁照拦。改为把 body 声明收进真要回显的分支,空信息体 分支显式传 NULL。 - s_spont_step:blen 只在 pend_yx 分支使用,声明移入该分支。 验证(基线 b24b2b5):cppcheck 原样复刻钩子 args → RC=0 零输出;@build 0 错误 0 警告(Code 231712→231732,+20 B);ram_baseline.py --update 重盖体积同码凭证、 --write 同步受管区台账,check_mem_numbers.py --write 同步 RAM 快照表。本次触发的 14 根钩子全 Passed(含 test-coverage)。 环境与遗留(非本笔引入):这台 runner 原本只有 VS2019/MSVC 14.29,没有 Microsoft.CodeCoverage.Console.exe,test-coverage 恒 [ENV] exit 2;今日已装 VS2026 BuildTools 18.11.12324.101(E 盘,含 mscoverage 18.11 与 MSVC 14.44/14.51/14.52),本笔按 14.51.36231 跑通覆盖率总闸 40/40 套、相对基线零 回退——与量基线那台同版本,故分母可比。CI 侧仍差两步:① 机器级 DTU_MSVC_CL 还指 C 盘 14.29,需改指 E 盘这套并重启 runner 守护进程(SYSTEM 只在进程启动 时读机器变量);② ci_runner_bootstrap.ps1 的 Find-MsvcCl 只扫 %ProgramFiles% 派生的 C 盘根且取首个命中(2019 在前),重跑 -SetEnv 会把对齐抹掉,应改用 vswhere + 版本降序。 --- App/protocol/iec104/iec104_link.c | 18 ++++++++++++------ docs/内存管理/RAM使用分析与优化方案.md | 4 ++-- docs/内存管理/RAM预算台账.md | 2 +- scripts/ram_baseline.tsv | 1 + scripts/size_attestation.json | 12 ++++++------ 5 files changed, 22 insertions(+), 15 deletions(-) diff --git a/App/protocol/iec104/iec104_link.c b/App/protocol/iec104/iec104_link.c index 25533a74..a8f63ba7 100644 --- a/App/protocol/iec104/iec104_link.c +++ b/App/protocol/iec104/iec104_link.c @@ -161,18 +161,23 @@ static int s_send_asdu(iec104_link_t *lk, uint8_t type, uint8_t vsq, */ static void s_cmd_con(iec104_link_t *lk, uint8_t type, const uint8_t *obj, uint16_t obj_len, uint8_t cot, uint8_t pn) { - uint8_t body[BODY_MAX]; uint16_t n = obj_len; if (n > BODY_MAX) { - n = 0u; + n = 0u; /* 超长回显退化为空信息体 */ } if (n > 0u) { + uint8_t body[BODY_MAX]; /* 作用域收进真要回显的分支,不把未初始化缓冲传下去 */ + (void)memcpy(body, obj, n); + (void)s_send_asdu(lk, type, 1u, cot, + (pn != 0u) ? IEC104_COT_BIT_PN : 0u, + 0u, 0u, body, n, 0u); + } else { + (void)s_send_asdu(lk, type, 1u, cot, + (pn != 0u) ? IEC104_COT_BIT_PN : 0u, + 0u, 0u, NULL, 0u, 0u); } - (void)s_send_asdu(lk, type, 1u, cot, - (pn != 0u) ? IEC104_COT_BIT_PN : 0u, - 0u, 0u, body, n, 0u); } /* ---------------- 数据上送 ---------------- */ @@ -280,12 +285,13 @@ static void s_spont_step(iec104_link_t *lk, uint8_t *budget) { uint8_t body[8]; /* 最大 = SIQ + CP56(7)(M_SP_TB_1) */ uint8_t i; uint8_t d; - uint8_t blen; uint8_t type; int rc; while ((*budget > 0u) && ((lk->pend_yx != 0u) || (lk->pend_yc != 0u))) { if (lk->pend_yx != 0u) { + uint8_t blen; + i = 0u; while (i < 33u) { if ((lk->pend_yx & (1uLL << i)) != 0u) { diff --git a/docs/内存管理/RAM使用分析与优化方案.md b/docs/内存管理/RAM使用分析与优化方案.md index 87ee4733..c606c3a5 100644 --- a/docs/内存管理/RAM使用分析与优化方案.md +++ b/docs/内存管理/RAM使用分析与优化方案.md @@ -47,10 +47,10 @@ dhara 失败类 +84;RO 另 +208,全是该失败类名表)→ `ER_IROM1` | 区域 | 用量 | 容量 | 占比 | |---|---|---|---| -| ER_IROM1 | 257,272 B (251.24 KB) | 1,048,576 B (1024 KB) | 24.5% | +| ER_IROM1 | 257,292 B (251.26 KB) | 1,048,576 B (1024 KB) | 24.5% | | RW_IRAM1 | 80,312 B (78.43 KB) | 131,072 B (128 KB) | 61.3% | | RW_CCM | 57,376 B (56.03 KB) | 65,280 B (64 KB) | 87.9% | -| **Flash (ROM 合计)** | **258,792 B (252.7 KB)** | 1,048,576 B (1024 KB) | **24.7%** | +| **Flash (ROM 合计)** | **258,812 B (252.7 KB)** | 1,048,576 B (1024 KB) | **24.7%** | 各区的容量与常量来源: diff --git a/docs/内存管理/RAM预算台账.md b/docs/内存管理/RAM预算台账.md index ed60dc60..e4cd5e76 100644 --- a/docs/内存管理/RAM预算台账.md +++ b/docs/内存管理/RAM预算台账.md @@ -15,7 +15,7 @@ | 区域 | 用量 | 容量 | 占比 | 门禁(≤92%) | |---|---|---|---|---| -| ER_IROM1 (Flash) | 257,272 B | 1,048,576 B | 24.5% | 参考 | +| ER_IROM1 (Flash) | 257,292 B | 1,048,576 B | 24.5% | 参考 | | RW_CCM | 57,376 B | 65,280 B | 87.9% | PASS | | UNINIT_CCM | 48 B | 256 B | 18.8% | 参考 | | RW_IRAM1 | 80,312 B | 131,072 B | 61.3% | PASS | diff --git a/scripts/ram_baseline.tsv b/scripts/ram_baseline.tsv index 121b5c3e..67f802bf 100644 --- a/scripts/ram_baseline.tsv +++ b/scripts/ram_baseline.tsv @@ -9,3 +9,4 @@ date code ro rw zi er_irom1 er_pct iram1 iram1_pct ccm ccm_pct top_rwzi 2026-10-24 213780 18860 1204 131852 232640 22.2 75632 57.7 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6766;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4128;sys_log_mcu.o=3944;default_task.o=2736 2026-10-25 224860 24640 1332 135100 249500 23.8 79008 60.3 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6770;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4128;sys_log_mcu.o=3944;default_task.o=2736 2026-10-26 231712 25560 1520 136216 257272 24.5 80312 61.3 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6770;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4132;sys_log_mcu.o=4003;default_task.o=2736 +2026-10-27 231732 25560 1520 136216 257292 24.5 80312 61.3 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6770;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4132;sys_log_mcu.o=4003;default_task.o=2736 diff --git a/scripts/size_attestation.json b/scripts/size_attestation.json index 72b7f3a9..b14b31d1 100644 --- a/scripts/size_attestation.json +++ b/scripts/size_attestation.json @@ -1,15 +1,15 @@ { - "built_at": "2026-10-26T23:32:22+08:00", - "fingerprint": "06808c35e47b1113c385277d666806349a09249384347b3ecfd6f27ee79948b0", + "built_at": "2026-10-27T04:22:20+08:00", + "fingerprint": "5ab1da8af5fdc79575db4a1f7d9838660a23d953a533e3b78c6dd681c5d7bb22", "fingerprint_files": 1430, "fingerprint_source": "git-index", "gated_regions": [ "RW_IRAM1", "RW_CCM" ], - "git_head": "b623a406ad58c2d281d8e54f118999a0016da328", + "git_head": "b24b2b5f3113fafc086e5562941c9504d3990619", "map": "MDK-ARM/STM32F407-Demo/STM32F407-Demo.map", - "map_mtime": 1793026332, + "map_mtime": 1793046012, "pct": { "ER_IROM1": 24.54, "RW_CCM": 87.89, @@ -19,7 +19,7 @@ "regions": { "ER_IROM1": { "max": 1048576, - "size": 257272 + "size": 257292 }, "RW_CCM": { "max": 65280, @@ -37,7 +37,7 @@ "schema": 2, "scope_note": "\u540c\u7801\u51ed\u8bc1\uff1a\u6307\u7eb9\u8986\u76d6\u56fa\u4ef6\u4f53\u79ef\u76f8\u5173\u6e90\u7801\uff0c\u53e3\u5f84\u89c1\u672c\u811a\u672c docstring", "sizes": { - "code": 231712, + "code": 231732, "ro_data": 25560, "rw_data": 1520, "zi_data": 136216