P1-9修复:NET层测试缓冲声明前移文件首部,消除Phase 6使用先于声明的#20编译断裂;s_rx_buf条件补Phase 9门控,7配置构建复验

This commit is contained in:
2026-09-16 12:34:09 +08:00
parent 2bed82471d
commit e7348c48ba
2 changed files with 44 additions and 30 deletions
+5 -4
View File
@@ -11,7 +11,7 @@
| 级别 | 数量 | 说明 |
|---|---|---|
| P0 | 0 | 未发现"当前必然失败"的核心流程 bug |
| P1 | 10 | 5 项已修复(P1-2/3/4/5/6,2026-09-15);5 项未修:P1-1 ADC / P1-7 MAC 顺序 / P1-8 重建恢复 / P1-9 NET 层测试编译断裂 / P1-10 测试固件 RAM 溢出 |
| P1 | 10 | 6 项已修复(P1-2/3/4/5/6,2026-09-15;P1-9,2026-09-16);4 项未修:P1-1 ADC / P1-7 MAC 顺序 / P1-8 重建恢复 / P1-10 测试固件 RAM 溢出 |
| P2 | 16 | 健壮性/错误传播/文档失真 |
| P3 | 13 | 卫生项,可随其他修改顺手处理 |
@@ -80,12 +80,13 @@
- **修复建议**:失败写 syslog 自检记录 + LED 指示 + 周期重试(如 30s 一次),不得自驻留。
- **置信度**:high。
### P1-9 NET 层测试固件编译断裂(s_rx_buf 使用先于声明)
### P1-9 NET 层测试固件编译断裂(s_rx_buf 使用先于声明)✅ 已修复(2026-09-16)
- **位置**:`test/net_test_task.c:60`(`phase6_run` 内引用)vs `:431`(声明)
- **证据**:`s_rx_buf`/`s_tx_buf`(各 32KB)声明在文件后段,`phase6_run` 在 60 行先使用 → ARMCC `#20: identifier "s_rx_buf" is undefined`;文件诞生即此顺序(2026-08 `88160a5`),NET 层配置逾两周不可编译;A/B 对照(HEAD vs P1-6 修复后)报错相同,与 P1-6 变更无关。
- **影响**:全部 NET 层测试构建(Phase 6~11)无法编译;P1-6 的 NET 模式运行验证与 CH395F NET 套件回归被阻塞。
- **修复建议**:两个 static 声明前移到文件首部(首次使用之前)或加前向声明,1~2 行改动;修复后须立即重验 NET 层配置(将暴露 P1-10 的 RAM 溢出)。
- **置信度**:high(构建实测复现)。
- **修复**(2026-09-16 实际实施):① 两个 static 声明与其依赖的 Phase 8 方向配置块(`PHASE8_DIR_*` / `PHASE8_DIRECTION` / `PHASE8_FILE_SIZE`)整体前移到文件首部(`TEST_BUF_SIZE` 之后、Phase 6 首次使用之前)——方向配置与声明的相对顺序不变,各方向(ECHO/SEND/RECV)的缓冲门控语义不变;② 顺带修复同类伴随缺陷:`phase9_run` 亦使用 `s_rx_buf` 而原声明条件遗漏 Phase 9(PHASE9-only 配置仍会 `#20` 断裂)→ `s_rx_buf` 条件补 `defined(ENABLE_PHASE9_TESTS)`,文件头注释同步更正。
- **验证**(2026-09-16,7 配置构建复验,ARMCC V5.06u7 增量构建):① 产品构建 0 错 0 警,ZI=125952B 与审计基线完全一致(产品配置零静态增量);② PHASE7-only 0 错 0 警且链接成功(该配置无 32KB 静态缓冲,全链绿色);③ PHASE6 / PHASE9 / PHASE10 / PHASE8-ECHO / PHASE8-SEND / PHASE8-RECV 六配置 `net_test_task.c` 编译阶段均 0 错 0 警(#20 消除;ECHO 声明双缓冲、SEND 仅 `s_tx_buf`、RECV 仅 `s_rx_buf`,方向门控逐一实测正确);③ 中各配置链接阶段报 `L6406E/L6407E` scatter 溢出——即修复建议预判的 P1-10 暴露(32KB 缓冲超出 4.4KB 静态余量),与本次修复无关,留待 P1-10 处置。
- **置信度**:high(构建实测复现;修复后 7 配置构建复验通过)。
### P1-10 测试固件静态 RAM 预算溢出(128KB scatter vs 产品镜像 123.6KB)
- **位置**:`MDK-ARM/STM32F407-Demo/STM32F407-Demo.sct`(`RW_IRAM1 0x20000000 0x00020000` = 128KB;芯片 192KB 的上部 64KB 有意未映射,克隆芯片兼容性考量)
+39 -26
View File
@@ -22,7 +22,7 @@
/*
* 收发缓冲区 —— 全局静态,不在任务栈上。
* s_rx_buf 仅在 Phase 6(Echo)/8(大文件)/10(边界)/11(KeepAlive) 中使用。
* s_rx_buf 用于 Phase 6(Echo)/8(大文件)/9(Select)/10(边界)/11(KeepAlive)。
* s_tx_buf 仅在 Phase 8(大文件) 和 Phase 10(边界) 中使用。
* Phase 7(TCP Client) 使用函数内局部小缓冲(64B 递增 + 回显)。
*
@@ -37,6 +37,44 @@
*/
#define TEST_BUF_SIZE 32768
/*
* 缓冲区声明前置于全部 Phase 代码:声明必须早于任何使用点(Phase 6
* 即首次使用 s_rx_buf)。P1-9 修复:原声明位于文件后段(Phase 8 注释块
* 之后),phase6_run 使用先于声明 → ARMCC #20 identifier undefined,
* 全部 NET 层测试配置不可编译。声明条件按各 Phase 实际用缓冲精确门控:
* s_rx_buf —— Phase 6(Echo)/9(Select)/11(KeepAlive) 恒用,
* Phase 8(大文件) 非 SEND 方向用;
* s_tx_buf —— Phase 8(大文件) 非 RECV 方向(填充发送窗口)及
* Phase 10(边界) 用。
* PHASE8_DIRECTION 由下方方向配置块定义(仅 ENABLE_PHASE8_TESTS 时);
* #if 中未定义标识符按 0(ECHO) 处理,方向门控结果与配置一致。
*/
/* Phase 8 方向配置:须早于下方缓冲声明,以按方向精确控制 s_tx_buf 等是否参与编译 */
#ifdef ENABLE_PHASE8_TESTS
#define PHASE8_DIR_ECHO 0
#define PHASE8_DIR_SEND 1
#define PHASE8_DIR_RECV 2
#ifndef PHASE8_FILE_SIZE
#define PHASE8_FILE_SIZE 102400 /* 100KB */
#endif
#ifndef PHASE8_DIRECTION
#define PHASE8_DIRECTION PHASE8_DIR_ECHO
#endif
#endif
#if defined(ENABLE_PHASE6_TESTS) || \
(defined(ENABLE_PHASE8_TESTS) && (PHASE8_DIRECTION != PHASE8_DIR_SEND)) || \
defined(ENABLE_PHASE9_TESTS) || defined(ENABLE_PHASE10_TESTS) || \
defined(ENABLE_PHASE11_TESTS)
static uint8_t s_rx_buf[TEST_BUF_SIZE];
#endif
/* s_tx_buf 仅 SEND/ECHO(及 Phase 10)需要;RECV 不发送,避免未使用变量警告 */
#if (defined(ENABLE_PHASE8_TESTS) && (PHASE8_DIRECTION != PHASE8_DIR_RECV)) || \
defined(ENABLE_PHASE10_TESTS)
static uint8_t s_tx_buf[TEST_BUF_SIZE];
#endif
/* ===================================================================
* Phase 6 — NET 层 TCP Echo(基础收发)
@@ -412,31 +450,6 @@ void net_layer_client_test_main(void)
* 2 = RECV PC 发 100KB(+4B CRC32 尾),MCU 收齐字节+CRC 校验
* =================================================================== */
/* Phase 8 方向配置:须早于下方缓冲声明,以按方向精确控制 s_tx_buf 等是否参与编译 */
#ifdef ENABLE_PHASE8_TESTS
#define PHASE8_DIR_ECHO 0
#define PHASE8_DIR_SEND 1
#define PHASE8_DIR_RECV 2
#ifndef PHASE8_FILE_SIZE
#define PHASE8_FILE_SIZE 102400 /* 100KB */
#endif
#ifndef PHASE8_DIRECTION
#define PHASE8_DIRECTION PHASE8_DIR_ECHO
#endif
#endif
#if defined(ENABLE_PHASE6_TESTS) || \
(defined(ENABLE_PHASE8_TESTS) && (PHASE8_DIRECTION != PHASE8_DIR_SEND)) || \
defined(ENABLE_PHASE10_TESTS) || defined(ENABLE_PHASE11_TESTS)
static uint8_t s_rx_buf[TEST_BUF_SIZE];
#endif
/* s_tx_buf 仅 SEND/ECHO(及 Phase 10)需要;RECV 不发送,避免未使用变量警告 */
#if (defined(ENABLE_PHASE8_TESTS) && (PHASE8_DIRECTION != PHASE8_DIR_RECV)) || \
defined(ENABLE_PHASE10_TESTS)
static uint8_t s_tx_buf[TEST_BUF_SIZE];
#endif
#ifdef ENABLE_PHASE8_TESTS
/* CRC32(标准,与 Python zlib.crc32 一致;初始 0xFFFFFFFF,末异或 0xFFFFFFFF)