docs: 错误码传播审计收口并删除该文档(E-xx 转历史编号族)
本次会话先后销项与关闭: - 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。
This commit is contained in:
@@ -292,12 +292,13 @@ static void phase7_test_timeout(void)
|
||||
}
|
||||
|
||||
/* TC 704:多 Socket 并发 TCP Client。
|
||||
* Socket 0~7 由索引寻址 + 缓冲显式分配即可全部使用(FUN_PARA bit0 是保留位,
|
||||
* 与 Socket 个数无关,见 TRAP-NET-15);本用例同时打开 Socket 0~7,
|
||||
* 各自连 PC echo server,每路独立收发 PHASE7_EXCH_SIZE 字节回显并比对,
|
||||
* 验证 8 个 Socket 均能独立工作。依赖 PC 端 tcp_server 支持并发连接。 */
|
||||
* 并发上限 = NET_MAX_SOCKETS(8) − 3 个常驻监听(FTP / 对时 / 远显)= 5;
|
||||
* 本用例同时打开 Socket 0~4,各自连 PC echo server,每路独立收发
|
||||
* PHASE7_EXCH_SIZE 字节回显并比对,验证 5 个 Socket 均能独立工作。
|
||||
* 依赖 PC 端 tcp_server 支持并发连接(--max-conn ≥ 5)。
|
||||
* (2026-10-15:原值 8 超出并发上限,socket create #5 必失败。) */
|
||||
#ifndef PHASE7_MULTI_COUNT
|
||||
#define PHASE7_MULTI_COUNT 8
|
||||
#define PHASE7_MULTI_COUNT 5
|
||||
#endif
|
||||
#ifndef PHASE7_MULTI_BASE_PORT
|
||||
#define PHASE7_MULTI_BASE_PORT 51000
|
||||
@@ -853,6 +854,7 @@ void net_layer_test_main(void)
|
||||
int32_t sockfd = -1;
|
||||
int32_t phase_active = 0;
|
||||
uint32_t accept_retry = 0;
|
||||
uint32_t gen = 0; /* 建立监听时的网络代次(代次变化 = 网络已重建) */
|
||||
struct net_sockaddr_in client_addr;
|
||||
int32_t addrlen = sizeof(client_addr);
|
||||
|
||||
@@ -880,6 +882,7 @@ void net_layer_test_main(void)
|
||||
return;
|
||||
}
|
||||
DBG_INFO("Test task: listening on 8080 (single-socket mode)");
|
||||
gen = net_get_generation(); /* 记录本监听对应的网络代次 */
|
||||
|
||||
/* ==================== 事件驱动阶段 ====================
|
||||
* Phase 6/8~11(NET 层)在 TCP 监听循环中运行,需要 PC 客户端连接。
|
||||
@@ -898,6 +901,25 @@ void net_layer_test_main(void)
|
||||
) {
|
||||
int32_t acc = net_accept(sockfd, (struct net_sockaddr *)&client_addr, &addrlen);
|
||||
if (acc < 0) {
|
||||
/* 网络重建(代次变化)→ 旧监听随芯片复位失效,重建 8080 监听 */
|
||||
if (net_get_generation() != gen) {
|
||||
struct net_sockaddr_in addr;
|
||||
DBG_INFO("Test task: network rebuilt, relisten 8080");
|
||||
net_close(sockfd);
|
||||
sockfd = net_socket(NET_AF_INET, NET_SOCK_STREAM);
|
||||
memset(&addr, 0, sizeof(addr));
|
||||
addr.sin_family = NET_AF_INET;
|
||||
addr.sin_port = net_htons(8080);
|
||||
if (sockfd < 0 ||
|
||||
net_bind(sockfd, (struct net_sockaddr *)&addr, sizeof(addr)) < 0 ||
|
||||
net_listen(sockfd) < 0) {
|
||||
DBG_ERROR("Test task: relisten failed");
|
||||
return;
|
||||
}
|
||||
gen = net_get_generation();
|
||||
accept_retry = 0;
|
||||
continue;
|
||||
}
|
||||
if (accept_retry % 100 == 0) {
|
||||
DBG_INFO("Test task: waiting for connection...");
|
||||
}
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@
|
||||
|---|---|
|
||||
| `run_boot_test.py` | **`@test` 一键闭环**:开串口+清日志 → 烧录 → wait-idle → `verify_log` 校验(退出码 0=PASS) |
|
||||
| `verify_log.py` | **日志标记校验**:Required / Forbidden 标记 → PASS / FAIL;可选 `--require-suite-summary` 校验套件汇总行(`=== <名称>: N/M PASSED (failed=0) ===` 且 `N>0`),抓"没跑到汇总行/断言数为 0"的盲区(T-2) |
|
||||
| `e02_probe.py` | E-02 专项探针(错误码传播审计) |
|
||||
| `e02_probe.py` | E-02 专项探针(历史审计编号) |
|
||||
|
||||
### 网络 / FTP
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
* TC-CFG-021 非法键定义拒绝(UINT len 非 1/2/4、MAC len≠6、STR len>79)
|
||||
* TC-CFG-022 段名超长拒绝(≥ CFG_NAME_MAX)
|
||||
* TC-CFG-023 挂回调段 data_size > CFG_SNAP_MAX 拒绝
|
||||
* TC-CFG-024 键名超长拒绝(≥ CFG_NAME_MAX);恰好 15 字符(= CFG_FILE_MAX_NAME_LEN)接受
|
||||
* —— load 契约(cfg_file_load)——
|
||||
* TC-CFG-030 文件缺失 -> 生成出厂模板写盘 + 返回 0
|
||||
* TC-CFG-031 文件存在 -> 解析有效键进 RAM 副本
|
||||
@@ -574,6 +575,31 @@ static void tc_register(void) {
|
||||
r.p_cb = NULL;
|
||||
CHECK(cfg_file_register(&r) == 0, "same section without callback accepted");
|
||||
}
|
||||
|
||||
printf("[TC-CFG-024] key name length limit\n");
|
||||
{
|
||||
cfg_section_reg_t r;
|
||||
static const cfg_key_def_t long_key[] = {
|
||||
{ "0123456789abcdef", CFG_VAL_UINT, 0u, 1u } /* 16 chars >= CFG_NAME_MAX(16) */
|
||||
};
|
||||
static const cfg_key_def_t max_key[] = {
|
||||
{ "0123456789abcde", CFG_VAL_UINT, 0u, 1u } /* 15 chars = CFG_FILE_MAX_NAME_LEN */
|
||||
};
|
||||
|
||||
vfs_reset();
|
||||
memset(&r, 0, sizeof(r));
|
||||
r.name = "klen";
|
||||
r.p_data = &s_net_data;
|
||||
r.p_defaults = &s_net_def;
|
||||
r.data_size = 8u;
|
||||
r.key_count = 1u;
|
||||
|
||||
r.p_keys = long_key;
|
||||
CHECK(cfg_file_register(&r) == -1, "key name >= 16 chars rejected");
|
||||
|
||||
r.p_keys = max_key;
|
||||
CHECK(cfg_file_register(&r) == 0, "key name == 15 chars accepted");
|
||||
}
|
||||
}
|
||||
|
||||
/* TC-CFG-030~034:load 契约 */
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
"""E-02 头阻塞专项台架探针(timeSync 侧,A/B 对照用)。
|
||||
|
||||
场景(错误码传播审计.md E-02 的 timeSync 触发形态):
|
||||
场景(历史审计 E-02 的 timeSync 触发形态,属主文档已于 2026-10-15 删除):
|
||||
1. 一个"挂起"的对时客户端连上 :8888 后不发任何数据(空闲/故障客户端,
|
||||
常见工况)——旧固件在此触发 30s 阻塞 net_recv 独占 netTask,
|
||||
全体消费者的队列消息停摆最长 30s;
|
||||
|
||||
Reference in New Issue
Block a user