docs(screenlink): 屏板链路档去「说明」并瘦身,控制台档收编台架日志口
屏板链路设计说明.md -> 屏板链路设计.md(去档名「说明」,与 ADC 节拍 / 运行与自检记录两篇口径一致);控制台单写者日志设计说明.md 同改。 两档并存期间旧名引用 0 残留。 - 屏板链路 §3.2 台架日志口(RS232#1 / CN1 端子 / COM3)移入控制台档 §3.4:日志口的接线属 UART5 控制台通道,不属屏板链路;屏板档只留 「别去 CN1 找 USART1 端子」这句接线防错提示。 - 屏板链路 §7.1 由「根因账本 + 修复前后对比」改写为现状描述:延迟 应答机制表 + 耗时分解表 + 两个计数口径 + 已知边界,40 行压到 24 行。 顺带修正 §8 的错引:原指 `网络自愈架构设计.md` §8(实为「延后项」, 不含 uiTask 内容)改为 §4.1 `net_reconcile_tick`。 - §9.1 增补长稳行(串口日志 2026-11-13 18:31 -> 2026-11-15 21:43, 单次上电 51.2 h:rx=658262 ok=658262、crc/len/fmt/err 全 0、 drop=7 仅启动期、kerr/abor/bad=0、全程 off=0);§9.2 销项三条 (仪器项、2 h 长稳、len=7 观察项),新增「按键通路」一条——51.2 h 日志 keys=0 kq=0 dfok=0 dfold=0,延迟应答在真机上从未执行过。 - 删除 sb_frame_b_build_logo() 及 SB_LOGO_MAGIC_* / SB_SCREEN_W/H 与对应单测(TC-SBPROTO-022/023 全组、024c/024d),组帧入口只剩 sb_frame_b_build_image()。sb_proto 单测 59 -> 45 条,45/45 通过。 - cfg_file.c 出厂模板三条中文字面量改 \uXXXX 转义:消除全量重编时的 4 条 #870-D invalid multibyte character sequence,运行期字节不变, 源码回到纯 ASCII(符合「字符串字面量必须纯 ASCII」)。 验证:keil-build 0 Error 0 Warning;sb_proto 45/45、sb_link 164/164; pre-commit 48 钩子全 Passed;check_doc_links --sections-strict 通过。
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* 模块名称:控制台单写者日志(console_log)主机侧单元测试
|
||||
* 模块功能:在 PC 上离线验证 App/log/console_log.c 的单写者契约(G1~G5 / K1~K5,见
|
||||
* docs/子系统设计/控制台单写者日志设计说明.md):环形缓冲入环与分块发送、
|
||||
* docs/子系统设计/控制台单写者日志设计.md):环形缓冲入环与分块发送、
|
||||
* 行级原子、192B 截断、写者未注册/ISR 上下文的直发(未注册期自 2026-10-26
|
||||
* 起是**整行独占**,不再是"无锁":M 族 TC-CONLOG-170 至 TC-CONLOG-179 钉"别的写者插不进
|
||||
* 一行、让路行逐字节等同直发、让位不丢、真溢出才 [ERR]")、缓冲满有界等待与
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
这些在台架上
|
||||
要么一年一遇、要么现场已被复位冲掉;把 100/250/300ms 三条时间线做成显式量之后,
|
||||
299ms 与 300ms 的差别就是一行断言。详见
|
||||
docs/子系统设计/控制台单写者日志设计说明.md(G1~G5 / K1~K5 / §12 ORE 僵尸通道)。
|
||||
docs/子系统设计/控制台单写者日志设计.md(G1~G5 / K1~K5 / §12 ORE 僵尸通道)。
|
||||
|
||||
桩的边界:console_log.h 与 sys_events.h 用真实头(SYS_EVT_CONSOLE_TX 位定义一改即
|
||||
编译期报错);usart.h 是桩但只暴露本模块访问的 huart5 + MX_UART5_Init,
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误。
|
||||
|
||||
设计依据:docs/子系统设计/控制台单写者日志设计说明.md、docs/测试说明/单元测试/主机单测覆盖率口径.md §9「P2 落地」清单第 3 条
|
||||
设计依据:docs/子系统设计/控制台单写者日志设计.md、docs/测试说明/单元测试/主机单测覆盖率口径.md §9「P2 落地」清单第 3 条
|
||||
创建日期:2026-10-24
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
退出码:0 = 全程无超时且 CRC 全对;1 = 出现超时/CRC 错/断连;2 = 用法错误。
|
||||
|
||||
设计依据:docs/子系统设计/屏板链路设计说明.md §9.1(双通道并发)。
|
||||
设计依据:docs/子系统设计/屏板链路设计.md §9.1(双通道并发)。
|
||||
创建日期:2026-10-30
|
||||
"""
|
||||
import argparse
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误。
|
||||
|
||||
设计依据:docs/子系统设计/屏板链路设计说明.md §6(状态灯映射表)。
|
||||
设计依据:docs/子系统设计/屏板链路设计.md §6(状态灯映射表)。
|
||||
创建日期:2026-10-29
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误(找不到编译器 / 编译失败 / 无汇总行)。
|
||||
|
||||
设计依据:docs/子系统设计/屏板链路设计说明.md §2(收中断与错误处理判据、接收只要 16 B);
|
||||
设计依据:docs/子系统设计/屏板链路设计.md §2(收中断与错误处理判据、接收只要 16 B);
|
||||
docs/产品需求/产品需求设计文档.md §5.16.2(帧 A 结构)。
|
||||
创建日期:2026-10-29
|
||||
"""
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* 3. 坏帧分支(长度不对 / 地址不对 / 功能码不对 / CRC 错)在台架上要造噪声才出现,
|
||||
* 一出现就被复位冲掉;主机侧是几行断言。
|
||||
*
|
||||
* 覆盖点(对应 docs/子系统设计/屏板链路设计说明.md §2 的收中断与错误处理判据):
|
||||
* 覆盖点(对应 docs/子系统设计/屏板链路设计.md §2 的收中断与错误处理判据):
|
||||
* TC-SBLINK-001 init 参数守卫:空句柄 / 波特率不是 SB_LINK_BAUD(后者必须不挂接收)
|
||||
* TC-SBLINK-002 init 正常:挂接收一次、缓冲 = SB_LINK_RX_BUF_SIZE(16 B,不是 4208)
|
||||
* TC-SBLINK-003 未初始化就重挂接收:BSP_ERR_STATE,且不碰外设
|
||||
@@ -34,7 +34,7 @@
|
||||
* TC-SBLINK-013 统计上报的时基回绕:now_ms 跨 0xFFFFFFFF 仍按差值法工作
|
||||
* TC-SBLINK-014 统计快照:空指针守卫、字段逐项对得上
|
||||
*
|
||||
* 覆盖点(对应 docs/子系统设计/屏板链路设计说明.md §4 的组帧与时序判据):
|
||||
* 覆盖点(对应 docs/子系统设计/屏板链路设计.md §4 的组帧与时序判据):
|
||||
* TC-SBLINK-016 组帧入口守卫:未初始化 / 空显存指针
|
||||
* TC-SBLINK-017 帧 B 内容:点阵逐字节、info[0..3] 小端掩码、info[4..7] 非 LOGO、
|
||||
* 998 B 填充全 0、CRC 覆盖 [0, 4205]
|
||||
@@ -49,7 +49,7 @@
|
||||
* TC-SBLINK-026 上报行:fb/tx 列可见;离线行排在周期行之前且不重复
|
||||
*
|
||||
* 覆盖点(2026-10-30 按键延迟整治:按键召唤延迟应答,
|
||||
* docs/子系统设计/屏板链路设计说明.md §7.1):
|
||||
* docs/子系统设计/屏板链路设计.md §7.1):
|
||||
* TC-SBLINK-030 按键召唤不立刻起发:扣住本答、键照常进队、不误记丢单
|
||||
* TC-SBLINK-031 放行链:画面更新 + 组帧 OK + key_rendered 凭据 → 下一拍发一帧、
|
||||
* dfok 计数、放行后不再复发的
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误(找不到编译器 / 编译失败 / 无汇总行)。
|
||||
|
||||
设计依据:docs/产品需求/产品需求设计文档.md §5.16.2(帧结构);
|
||||
docs/子系统设计/屏板链路设计说明.md §4(CRC 口径);
|
||||
docs/子系统设计/屏板链路设计.md §4(CRC 口径);
|
||||
协议事实源 = 屏板固件工程 D:\\Code\\DTU Code\\DTU-LCD 的 CRC16.c / MODBUS.c。
|
||||
创建日期:2026-10-29
|
||||
"""
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
* 完全同形,无法归因。主机侧把 CRC 与字节序钉死,才谈得上"发出去的就是对的"。
|
||||
* 2. 帧 A 的坏帧分支(长度不对 / 地址不对 / 功能码不对 / CRC 错)在台架上要造噪声才可能出现,
|
||||
* 且一出现就被复位冲掉;主机侧是几行断言。
|
||||
* 3. 帧 B 4208 B 的边界(填充段参与 CRC、LOGO 宽高装不下点阵)不占 MCU 的 RAM,毫秒级。
|
||||
* 3. 帧 B 4208 B 的边界(填充段参与 CRC、整帧重写)不占 MCU 的 RAM,毫秒级。
|
||||
*
|
||||
* 覆盖点(对应 docs/产品需求/产品需求设计文档.md §5.16.2 帧结构与任务规划 1-1 判据):
|
||||
* TC-SBPROTO-001 CRC-16/MODBUS 教科书校验值:"123456789" -> 0x4B37
|
||||
@@ -26,9 +26,7 @@
|
||||
* TC-SBPROTO-014 帧 A 参数守卫:空指针两路;失败时不动 *p_out
|
||||
* TC-SBPROTO-020 帧 B 普通图:点阵逐字节、掩码小端、info[4..7] 为 0、填充段全 0、CRC 自校验
|
||||
* TC-SBPROTO-021 帧 B 普通图:整帧重写(预填 0xAA 的缓冲被清干净)、重复组帧结果一致
|
||||
* TC-SBPROTO-022 帧 B LOGO:宽高大端、魔数 0x89 0x45、info[6..7] 为 0、CRC 自校验
|
||||
* TC-SBPROTO-023 帧 B LOGO 宽高守卫:161x159 与 160x161 被拒(按字节数判容量)、宽或高为 0 被拒
|
||||
* TC-SBPROTO-024 帧 B 参数守卫:空指针三处
|
||||
* TC-SBPROTO-024 帧 B 参数守卫:空指针两处
|
||||
* TC-SBPROTO-030 帧 B 自校验:改点阵 / 改填充段 / 改 CRC 自身 / 长度不对
|
||||
* TC-SBPROTO-040 屏板侧视角:用屏板 Check_CRC 的口径(高低互换后比对)复核本模块组的两种帧
|
||||
*
|
||||
@@ -323,7 +321,7 @@ static void tc_frame_b_image(void)
|
||||
|
||||
CHECK((s_frame[SB_FRAME_B_INFO_OFF + 4U] == 0U) && (s_frame[SB_FRAME_B_INFO_OFF + 5U] == 0U) &&
|
||||
(s_frame[SB_FRAME_B_INFO_OFF + 6U] == 0U) && (s_frame[SB_FRAME_B_INFO_OFF + 7U] == 0U),
|
||||
"TC-SBPROTO-020d info[4..7] stay 0 for a normal picture (the LOGO magic must not leak in)");
|
||||
"TC-SBPROTO-020d info[4..7] stay 0 for a normal picture (reserved bytes)");
|
||||
|
||||
for (i = SB_FRAME_B_PAD_OFF; i < SB_FRAME_B_CRC_OFF; i++)
|
||||
{
|
||||
@@ -371,44 +369,7 @@ static void tc_frame_b_rewrite(void)
|
||||
"TC-SBPROTO-021d the same inputs give a byte-identical frame (idempotent)");
|
||||
}
|
||||
|
||||
static void tc_frame_b_logo(void)
|
||||
{
|
||||
fill_bmp_pattern();
|
||||
CHECK(sb_frame_b_build_logo(s_frame, s_bmp, 160U, 160U) == BSP_OK,
|
||||
"TC-SBPROTO-022 building a 160x160 LOGO frame succeeds");
|
||||
CHECK((s_frame[SB_FRAME_B_INFO_OFF + 0U] == 0x00U) && (s_frame[SB_FRAME_B_INFO_OFF + 1U] == 0xA0U) &&
|
||||
(s_frame[SB_FRAME_B_INFO_OFF + 2U] == 0x00U) && (s_frame[SB_FRAME_B_INFO_OFF + 3U] == 0xA0U),
|
||||
"TC-SBPROTO-022b width and height go into info[0..3] big-endian");
|
||||
CHECK((s_frame[SB_FRAME_B_INFO_OFF + 4U] == 0x89U) && (s_frame[SB_FRAME_B_INFO_OFF + 5U] == 0x45U),
|
||||
"TC-SBPROTO-022c the LOGO magic 0x89 0x45 sits in info[4..5]");
|
||||
CHECK((s_frame[SB_FRAME_B_INFO_OFF + 6U] == 0U) && (s_frame[SB_FRAME_B_INFO_OFF + 7U] == 0U),
|
||||
"TC-SBPROTO-022d info[6..7] stay 0 (reserved)");
|
||||
CHECK(sb_frame_b_verify(s_frame, (uint16_t)SB_FRAME_B_LEN) == BSP_OK,
|
||||
"TC-SBPROTO-022e the LOGO frame verifies");
|
||||
CHECK(screen_board_accepts(s_frame, (uint16_t)SB_FRAME_B_LEN) == 1,
|
||||
"TC-SBPROTO-040b the board side Check_CRC accepts the LOGO frame");
|
||||
|
||||
/* 小图也要能组:1x1 只需 1 字节点阵 */
|
||||
CHECK(sb_frame_b_build_logo(s_frame, s_bmp, 1U, 1U) == BSP_OK,
|
||||
"TC-SBPROTO-022f a 1x1 LOGO is accepted (the capacity check is about bytes, not pixels)");
|
||||
}
|
||||
|
||||
static void tc_frame_b_logo_guard(void)
|
||||
{
|
||||
fill_bmp_pattern();
|
||||
|
||||
/* 161x159 = 25599 像素(看起来"装得下"),实际要 21x159 = 3339 B > 3200 B */
|
||||
CHECK(sb_frame_b_build_logo(s_frame, s_bmp, 161U, 159U) == BSP_ERR_PARAM,
|
||||
"TC-SBPROTO-023 161x159 is rejected: 3339 bytes of bitmap do not fit in 3200");
|
||||
CHECK(sb_frame_b_build_logo(s_frame, s_bmp, 160U, 161U) == BSP_ERR_PARAM,
|
||||
"TC-SBPROTO-023b 160x161 is rejected (3220 bytes)");
|
||||
CHECK(sb_frame_b_build_logo(s_frame, s_bmp, 168U, 152U) == BSP_OK,
|
||||
"TC-SBPROTO-023c 168x152 is accepted (exactly 3192 bytes, width not a multiple of 8 is fine)");
|
||||
CHECK(sb_frame_b_build_logo(s_frame, s_bmp, 0U, 160U) == BSP_ERR_PARAM,
|
||||
"TC-SBPROTO-023d a zero width is rejected");
|
||||
CHECK(sb_frame_b_build_logo(s_frame, s_bmp, 160U, 0U) == BSP_ERR_PARAM,
|
||||
"TC-SBPROTO-023e a zero height is rejected");
|
||||
}
|
||||
|
||||
static void tc_frame_b_guard(void)
|
||||
{
|
||||
@@ -418,10 +379,6 @@ static void tc_frame_b_guard(void)
|
||||
"TC-SBPROTO-024 a null frame buffer is rejected (image)");
|
||||
CHECK(sb_frame_b_build_image(s_frame, 0, 0U) == BSP_ERR_PARAM,
|
||||
"TC-SBPROTO-024b a null bitmap is rejected (image)");
|
||||
CHECK(sb_frame_b_build_logo(0, s_bmp, 160U, 160U) == BSP_ERR_PARAM,
|
||||
"TC-SBPROTO-024c a null frame buffer is rejected (LOGO)");
|
||||
CHECK(sb_frame_b_build_logo(s_frame, 0, 160U, 160U) == BSP_ERR_PARAM,
|
||||
"TC-SBPROTO-024d a null bitmap is rejected (LOGO)");
|
||||
CHECK(sb_frame_b_verify(0, (uint16_t)SB_FRAME_B_LEN) == BSP_ERR_PARAM,
|
||||
"TC-SBPROTO-024e a null frame is rejected by verify");
|
||||
}
|
||||
@@ -475,10 +432,6 @@ int main(void)
|
||||
tc_frame_b_image();
|
||||
printf("-- frame B: full-frame rewrite / idempotence --\n");
|
||||
tc_frame_b_rewrite();
|
||||
printf("-- frame B: LOGO (width/height + magic) --\n");
|
||||
tc_frame_b_logo();
|
||||
printf("-- frame B: LOGO capacity guard --\n");
|
||||
tc_frame_b_logo_guard();
|
||||
printf("-- frame B: argument guards --\n");
|
||||
tc_frame_b_guard();
|
||||
printf("-- frame B: self-verification --\n");
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
的间隙"(那是屏板断帧的硬约束,只能上逻辑分析仪或接真屏板时看)。别把 span 通过
|
||||
当成那条判据通过。
|
||||
|
||||
接法(docs/子系统设计/屏板链路设计说明.md §3.3):
|
||||
接法(docs/子系统设计/屏板链路设计.md §3.3):
|
||||
适配器 TXD -> U5.B10(网络 ST_RX0,PA10) 适配器 RXD -> U5.A10(网络 ST_TX0,PA9)
|
||||
适配器 GND -> 板地
|
||||
⚠ 必须交叉接(TX 对 RX);USART1 的 TTL 只从 U5 出去,CN1 上没有 USART1 端子。
|
||||
@@ -41,7 +41,7 @@
|
||||
退出码:0 = 按时发完且(`--reply` 时)所有应答都对;1 = 串口打不开 / 发送失败;
|
||||
2 = 用法错误;3 = 有应答不合格。
|
||||
|
||||
设计依据:docs/子系统设计/屏板链路设计说明.md §2(接收判据)、§4(发送口径)、§3.3(台架接法)。
|
||||
设计依据:docs/子系统设计/屏板链路设计.md §2(接收判据)、§4(发送口径)、§3.3(台架接法)。
|
||||
创建日期:2026-10-29
|
||||
"""
|
||||
import argparse
|
||||
|
||||
Reference in New Issue
Block a user