From e7348c48bada6044c74c7402c1d80883f94a7a4e Mon Sep 17 00:00:00 2001 From: Wanderingss <1624155937@qq.com> Date: Wed, 16 Sep 2026 12:34:09 +0800 Subject: [PATCH] =?UTF-8?q?P1-9=E4=BF=AE=E5=A4=8D=EF=BC=9ANET=E5=B1=82?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=BC=93=E5=86=B2=E5=A3=B0=E6=98=8E=E5=89=8D?= =?UTF-8?q?=E7=A7=BB=E6=96=87=E4=BB=B6=E9=A6=96=E9=83=A8=EF=BC=8C=E6=B6=88?= =?UTF-8?q?=E9=99=A4Phase=206=E4=BD=BF=E7=94=A8=E5=85=88=E4=BA=8E=E5=A3=B0?= =?UTF-8?q?=E6=98=8E=E7=9A=84#20=E7=BC=96=E8=AF=91=E6=96=AD=E8=A3=82?= =?UTF-8?q?=EF=BC=9Bs=5Frx=5Fbuf=E6=9D=A1=E4=BB=B6=E8=A1=A5Phase=209?= =?UTF-8?q?=E9=97=A8=E6=8E=A7=EF=BC=8C7=E9=85=8D=E7=BD=AE=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E5=A4=8D=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/项目审计改进清单.md | 9 +++--- test/net_test_task.c | 65 ++++++++++++++++++++++++---------------- 2 files changed, 44 insertions(+), 30 deletions(-) diff --git a/docs/项目审计改进清单.md b/docs/项目审计改进清单.md index c9f8dac9..24e680c7 100644 --- a/docs/项目审计改进清单.md +++ b/docs/项目审计改进清单.md @@ -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 有意未映射,克隆芯片兼容性考量) diff --git a/test/net_test_task.c b/test/net_test_task.c index 389cb7ae..8ce92346 100644 --- a/test/net_test_task.c +++ b/test/net_test_task.c @@ -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)