5869c0307b
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/ — 通信协议(纯逻辑层)
存放跨接口复用的协议逻辑(解析 / 组帧 / 状态机),零 I/O、依赖注入, 可被任意任务/接口承载;板端 I/O 胶水在对应 task(如
App/task/iec104_serv.c)。 其余协议实现暂分散在:
- RS-485 侧:
App/task/rs485_task.c(CRC 在驱动内)- 网络侧:
Drivers/BSP/NET/- 远端显示:
docs/UI设计/RemoDispBus协议与接收设计说明.md
已落地协议
| 子目录 | 协议 | 说明 |
|---|---|---|
iec104/ |
IEC 60870-5-104 被控站(TCP 2404 上行) | 纯逻辑三件套(asdu/pts/link,零 I/O,数据源 vtable 注入)→ 全栈 L0.5 主机单测;板端胶水与点表决策 → docs/子系统设计/IEC104上行设计说明.md |
何时使用本目录
当出现跨接口复用的协议逻辑(如统一的帧编解码器、协议状态机)时,落到此处, 避免散落到各 task 里。新增后请在本 README 补一行说明。