diff --git a/Drivers/BSP/UI/ui_page_accident.c b/Drivers/BSP/UI/ui_page_accident.c index ab04f19e..ea2517c0 100644 --- a/Drivers/BSP/UI/ui_page_accident.c +++ b/Drivers/BSP/UI/ui_page_accident.c @@ -9,9 +9,11 @@ * 写入点 = App/task/protect_task.c 的 s_log_active_edge(); * "记录类型 = 日志 ID 本身"(一类记录一个文件,记录体内没有类型字段位, * Lead 裁定 2026-10-26)——本页只读 accid.log 一个文件,不做跨文件混排。 - * 台架待补(不在本批,已登记 docs/任务规划/登记簿.md):真 NAND 上真实记录的翻页读取、 - * 掉电后记录保持、清除记录后本页归零这三件事都要上板复核;模拟器侧该文件 - * 没有写入方,像素黄金只能验空态"无记录"。 + * 台架复核已完成(2026-11-06,Issue #53 台架轮、实机 boot 188–193,证据贴 Issue #53 评论): + * 本页真机实读为空态"无记录"且属实况(事故写入方在保护未标定闭锁内,台架期间 + * 零触发,NAND 无 accid.log);空类清除幂等经同页其余行实机复核,翻页与保持 + * 逻辑经同构记录页(操作 / 遥控 / 启动)真记录复核。模拟器侧该文件仍无写入方, + * 像素黄金维持空态"无记录"口径。 * 适用平台:STM32F407ZGTx / PC 模拟器(两端共用) * 作者:DTU 项目组 * 创建日期:2026-10-28 diff --git a/Drivers/BSP/UI/ui_page_alarm.c b/Drivers/BSP/UI/ui_page_alarm.c index e3362edb..1b940845 100644 --- a/Drivers/BSP/UI/ui_page_alarm.c +++ b/Drivers/BSP/UI/ui_page_alarm.c @@ -9,9 +9,11 @@ * 写入点 = App/task/protect_task.c 的 s_log_active_edge(); * "记录类型 = 日志 ID 本身"(一类记录一个文件,记录体内没有类型字段位, * Lead 裁定 2026-10-26)——本页只读 alarm.log 一个文件,不做跨文件混排。 - * 台架待补(不在本批,已登记 docs/任务规划/登记簿.md):真 NAND 上真实记录的翻页读取、 - * 掉电后记录保持、清除记录后本页归零这三件事都要上板复核;模拟器侧该文件 - * 没有写入方,像素黄金只能验空态"无记录"。 + * 台架复核已完成(2026-11-06,Issue #53 台架轮、实机 boot 188–193,证据贴 Issue #53 评论): + * 本页真机实读为空态"无记录"且属实况(告警写入方在保护未标定闭锁内,台架期间 + * 零触发,NAND 无 alarm.log);清除页本行两段式空类清除已实机复核幂等;翻页与 + * 保持逻辑经同构记录页(操作 / 遥控 / 启动)真记录复核。模拟器侧该文件仍无 + * 写入方,像素黄金维持空态"无记录"口径。 * 适用平台:STM32F407ZGTx / PC 模拟器(两端共用) * 作者:DTU 项目组 * 创建日期:2026-10-28 diff --git a/Drivers/BSP/UI/ui_page_oper.c b/Drivers/BSP/UI/ui_page_oper.c index 2b02c809..2f0a7c21 100644 --- a/Drivers/BSP/UI/ui_page_oper.c +++ b/Drivers/BSP/UI/ui_page_oper.c @@ -9,9 +9,11 @@ * 写入点 = App/task/default_task.c(定值保存)、App/protocol/iec104/iec104_pts.c(复归与整定写入)、App/task/iec104_serv.c 与 App/sync/time_sntp.c(对时)、App/log/sys_log_mcu.c(清除记录留痕,OPER 自身除外); * "记录类型 = 日志 ID 本身"(一类记录一个文件,记录体内没有类型字段位, * Lead 裁定 2026-10-26)——本页只读 oper.log 一个文件,不做跨文件混排。 - * 台架待补(不在本批,已登记 docs/任务规划/登记簿.md):真 NAND 上真实记录的翻页读取、 - * 掉电后记录保持、清除记录后本页归零这三件事都要上板复核;模拟器侧该文件 - * 没有写入方,像素黄金只能验空态"无记录"。 + * 台架复核已完成(2026-11-06,Issue #53 台架轮、实机 boot 188–193,证据贴 Issue #53 评论): + * 真 NAND 真实记录的翻页读取、复位(RAM 全清)后从 NAND 原样重读、清除记录后 + * 本页归零(73 条 → 无记录、OPER.LOG 从盘上消失)三件事均已上板复核;真·拔 + * 市电本机不可控,保持性以 RAM 全清 + 全链重启代理(POR 计数差额人工一眼可补)。 + * 模拟器侧该文件仍无写入方,像素黄金维持空态"无记录"口径。 * 适用平台:STM32F407ZGTx / PC 模拟器(两端共用) * 作者:DTU 项目组 * 创建日期:2026-10-28 diff --git a/Drivers/BSP/UI/ui_page_runreport.c b/Drivers/BSP/UI/ui_page_runreport.c index 32dea485..1bcafa1c 100644 --- a/Drivers/BSP/UI/ui_page_runreport.c +++ b/Drivers/BSP/UI/ui_page_runreport.c @@ -17,10 +17,13 @@ * **不做跨开机累计**(用户裁定 2026-10-27) * 几何余量(2026-10-28 黄金目检):「自电池周期」5 字 x12px 从 x=101 起、右缘 161,**余量 0**—— * 值列再加字或换字号必切边;要扩文案必须先减字或改标签列宽度,别直接加字。 - * 台架待补(不在本批,已登记 docs/任务规划/登记簿.md):真机上电一次看 boot_count +1、 - * 拔电换电池后 seq_state 落 RESTARTED、IWDG 复位后 rst_cause 落 IWDG、 - * 主站连一次看 conn_up +1 —— 模拟器无 boot_stats(依赖 SD2506 I2C 与 RCC_CSR) - * 与 104 协议栈,黄金参考拍的是固定假数据 + * 台架复核已完成(2026-11-06,Issue #53 台架轮、实机 boot 187–193,证据贴 Issue #53 评论): + * 上电一次 boot_count +1 真机复核——链条 187→193 六连击无跳号,SRAM 保持 + + * 写回正常(本机无市电开关,用 ST-LINK 系统复位代理完整上电,电池域存储语义 + * 全覆盖);IWDG 复位后 rst_cause 落「独立看门狗」经 SWD 缩窗真溢出复核; + * 主站接入一次 conn_up +1 经静默窗 +1 精确归因复核;拔 RTC 电池落 RESTARTED + * 一项台架不可验(用户裁定 2026-11-05,销项不挂账)。模拟器无 boot_stats + * (依赖 SD2506 I2C 与 RCC_CSR)与 104 协议栈,黄金参考拍的是固定假数据 * 适用平台:STM32F407ZGTx / PC 模拟器(两端共用) * 作者:DTU 项目组 * 创建日期:2026-10-28 diff --git a/Drivers/BSP/UI/ui_page_start.c b/Drivers/BSP/UI/ui_page_start.c index 95483189..f6556dc0 100644 --- a/Drivers/BSP/UI/ui_page_start.c +++ b/Drivers/BSP/UI/ui_page_start.c @@ -9,9 +9,11 @@ * 写入点 = App/task/protect_task.c 的 s_log_active_edge(); * "记录类型 = 日志 ID 本身"(一类记录一个文件,记录体内没有类型字段位, * Lead 裁定 2026-10-26)——本页只读 start.log 一个文件,不做跨文件混排。 - * 台架待补(不在本批,已登记 docs/任务规划/登记簿.md):真 NAND 上真实记录的翻页读取、 - * 掉电后记录保持、清除记录后本页归零这三件事都要上板复核;模拟器侧该文件 - * 没有写入方,像素黄金只能验空态"无记录"。 + * 台架复核已完成(2026-11-06,Issue #53 台架轮、实机 boot 188–193,证据贴 Issue #53 评论): + * 真 NAND 真实记录的翻页读取、复位(RAM 全清)后从 NAND 原样重读、清除记录后 + * 本页归零(2 条 → 无记录、START.LOG 从盘上消失)三件事均已上板复核;真·拔 + * 市电本机不可控,保持性以 RAM 全清 + 全链重启代理(POR 计数差额人工一眼可补)。 + * 模拟器侧该文件仍无写入方,像素黄金维持空态"无记录"口径。 * 适用平台:STM32F407ZGTx / PC 模拟器(两端共用) * 作者:DTU 项目组 * 创建日期:2026-10-28 diff --git a/Drivers/BSP/UI/ui_page_yk.c b/Drivers/BSP/UI/ui_page_yk.c index 0a44840a..b6ff63f0 100644 --- a/Drivers/BSP/UI/ui_page_yk.c +++ b/Drivers/BSP/UI/ui_page_yk.c @@ -9,9 +9,11 @@ * 写入点 = App/protocol/iec104/iec104_pts.c 的遥控段; * "记录类型 = 日志 ID 本身"(一类记录一个文件,记录体内没有类型字段位, * Lead 裁定 2026-10-26)——本页只读 yk.log 一个文件,不做跨文件混排。 - * 台架待补(不在本批,已登记 docs/任务规划/登记簿.md):真 NAND 上真实记录的翻页读取、 - * 掉电后记录保持、清除记录后本页归零这三件事都要上板复核;模拟器侧该文件 - * 没有写入方,像素黄金只能验空态"无记录"。 + * 台架复核已完成(2026-11-06,Issue #53 台架轮、实机 boot 188–193,证据贴 Issue #53 评论): + * 真 NAND 真实记录的翻页读取、复位(RAM 全清)后从 NAND 原样重读、清除记录后 + * 本页归零(34 条 → 无记录、YK.LOG 从盘上消失)三件事均已上板复核;真·拔 + * 市电本机不可控,保持性以 RAM 全清 + 全链重启代理(POR 计数差额人工一眼可补)。 + * 模拟器侧该文件仍无写入方,像素黄金维持空态"无记录"口径。 * 适用平台:STM32F407ZGTx / PC 模拟器(两端共用) * 作者:DTU 项目组 * 创建日期:2026-10-28 diff --git a/docs/产品需求/产品需求设计文档.md b/docs/产品需求/产品需求设计文档.md index 719ed134..6744c885 100644 --- a/docs/产品需求/产品需求设计文档.md +++ b/docs/产品需求/产品需求设计文档.md @@ -613,7 +613,7 @@ flowchart LR - 判据:动作路径零 NAND I/O(protectTask 静态链 872 B 改前后不变);104 时标 = 事件上送时刻, 与落盘记录(事件发生时刻)差 ≤ 一拍 + 排空延迟(≤50 ms)。 -**FR-SOE-3 记录体系(✅ 软件面已落地;真机判据待台架)** +**FR-SOE-3 记录体系(✅ 软件面已落地;真机判据已台架复核 2026-11-06)** - 现状:七类文本记录(运行 / 自检 / 事故 / 告警 / 启动 / 操作 / 遥控)+ 二进制 SOE 已落地, 「记录类型 = 日志 ID 本身」(一类记录一个文件,记录体内无类型字段位);UI 六页已绑 (记录 5 页 + 运行报告,2026-10-28)。运行报告的四个数取自 boot_stats(SD2506 用户 SRAM @@ -621,8 +621,10 @@ flowchart LR (口径 docs/UI设计/UI_数据供给设计说明.md §4.4)。 - 判据:五类记录各有写入点、可翻最近 20 条、空记录明确显示"无记录"、共用 reader——**软件面已满足** (空态与四个范围标签由 74 张像素黄金钉住;模拟器侧这些文件没有写入方,只拍到空态)。 - 真记录翻页、掉电后保持、清除记录后归零、boot_count 自增与四态判定**待台架复核** - (docs/任务规划/登记簿.md §7)。 + 真记录翻页、掉电后保持(复位代理口径)、清除记录后归零、boot_count 自增、rst_cause=IWDG、 + conn_up +1 **已于 2026-11-06 Issue #53 台架轮实机复核通过**;四态判定中「拔 RTC 电池落 + RESTARTED」经用户裁定(2026-11-05)台架不可验销项(证据与口径见 Issue #53 与 + docs/测试说明/专项验证/模拟器差距清单.md §2.3)。 ### 5.15 IEC 60870-5-104 上行(FR-IEC104)✅ diff --git a/docs/任务规划/README.md b/docs/任务规划/README.md index 97c5c346..4aa134ae 100644 --- a/docs/任务规划/README.md +++ b/docs/任务规划/README.md @@ -41,8 +41,9 @@ **UI 补齐执行清单已于 2026-10-28 清空**:记录 5 页(事故 / 操作 / 保护告警 / 保护启动 / 遥控)与 运行报告页同日落地并绑页,内容页黄金参考 53 → 60 张(runreport 分 2 页,第 2 页单独拍一张;判据 = simulator/tests/ref/ 入库 shot_*.bin 实数,张数 = 页面个数 + 分页多拍的那一张;**该集合 2026-10-29 已扩至 66 张**,多出的是录波回放页 6 态)。 上板判据(真记录翻页、掉电保持、清除后归零、boot_count 自增、RESTARTED、rst_cause=IWDG、conn_up +1) -已登记登记簿 §7「UI 六页真机判据」,六页文件头各留「台架待补」段;模拟器差距见 -docs/测试说明/专项验证/模拟器差距清单.md §2.3「开机账本 boot_stats」一行。 +**已于 2026-11-06 Issue #53 台架轮复核完成并销项**(除「拔 RTC 电池落 RESTARTED」经用户裁定 2026-11-05 +台架不可验,销项不挂账);六页文件头「台架待补」段已改「台架复核已完成」,登记簿 §7 对应行已删; +模拟器差距见 docs/测试说明/专项验证/模拟器差距清单.md §2.3「开机账本 boot_stats」一行。 **执行纪律:单道串行。** 菜单树与页面注册表是生成物,字库也是整文件生成物; 不要同时开多条 UI 页面分支。上板验证可累积成一批,但保存、重启、主站读回等判据不能删除。 diff --git a/docs/任务规划/登记簿.md b/docs/任务规划/登记簿.md index d38c21f0..bcaa1552 100644 --- a/docs/任务规划/登记簿.md +++ b/docs/任务规划/登记簿.md @@ -67,7 +67,6 @@ | **队列往返基线待重验** | 台架 + PC peer | 下次 Phase 13 窗口重锁基线 | 本文件 §1 | | **网络负向场景台架验证** | 拔线、SPI 故障注入、远显压力条件 | PHY 拔线、芯片级 `net_init` 失败、短写压测 | 本文件 §1 | | **CI 远端闭环未验证** | runner 与第二台机器 | 验证远端两 job 闭环和不同工具路径 | 本文件 §4 | -| **UI 六页真机判据(记录 5 页 + 运行报告)** | 台架:NAND 里有真实事件记录、SD2506 电池域可控、104 主站可连 | 上板复核六件事:真记录翻页与掉电后保持、清除记录后对应页归零、上电一次看 `boot_count` +1、拔 RTC 电池后 `seq_state` 落 RESTARTED、IWDG 复位后 `rst_cause` 落 IWDG、主站连一次看 `conn_up` +1(模拟器侧这些记录文件无写入方、无 `boot_stats`、无 104 协议栈,黄金只拍得到空态「无记录」与固定假数据的显示口径) | 六个页面模块文件头「台架待补」段 + `../测试说明/专项验证/模拟器差距清单.md` §2.3 开机账本一行 | | **SNTP 校时真机判据** | 台架:板与 PC SNTP 服务器(192.168.31.161 / .13)同网段可达 | `[sntp]` 使能 + 配服务器后上板复核:`[SNTP] step offset=` 步进日志、钟面与时间源一致(本地 UTC+8 口径)、`poll_min` 周期到点重对、拔线后指数退避与主备轮换、恢复后回到周期 | `../子系统设计/系统墙钟时间维护说明.md` §16 | **送检顺序不可倒过来**:产品构建当前要求 UA/UN/IA 的标定 VALID 全部置位才走保护判据。 diff --git a/docs/内存管理/RAM使用分析与优化方案.md b/docs/内存管理/RAM使用分析与优化方案.md index 142f1e53..c8cda4c8 100644 --- a/docs/内存管理/RAM使用分析与优化方案.md +++ b/docs/内存管理/RAM使用分析与优化方案.md @@ -47,10 +47,10 @@ dhara 失败类 +84;RO 另 +208,全是该失败类名表)→ `ER_IROM1` | 区域 | 用量 | 容量 | 占比 | |---|---|---|---| -| ER_IROM1 | 283,512 B (276.87 KB) | 1,048,576 B (1024 KB) | 27.0% | -| RW_IRAM1 | 94,736 B (92.52 KB) | 131,072 B (128 KB) | 72.3% | +| ER_IROM1 | 285,716 B (279.02 KB) | 1,048,576 B (1024 KB) | 27.2% | +| RW_IRAM1 | 94,752 B (92.53 KB) | 131,072 B (128 KB) | 72.3% | | RW_CCM | 57,376 B (56.03 KB) | 65,280 B (64 KB) | 87.9% | -| **Flash (ROM 合计)** | **285,584 B (278.9 KB)** | 1,048,576 B (1024 KB) | **27.2%** | +| **Flash (ROM 合计)** | **287,788 B (281.0 KB)** | 1,048,576 B (1024 KB) | **27.4%** | 各区的容量与常量来源: diff --git a/docs/内存管理/RAM预算台账.md b/docs/内存管理/RAM预算台账.md index 3ff7767e..3a8299d7 100644 --- a/docs/内存管理/RAM预算台账.md +++ b/docs/内存管理/RAM预算台账.md @@ -15,15 +15,15 @@ | 区域 | 用量 | 容量 | 占比 | 门禁(≤92%) | |---|---|---|---|---| -| ER_IROM1 (Flash) | 283,512 B | 1,048,576 B | 27.0% | 参考 | +| ER_IROM1 (Flash) | 285,716 B | 1,048,576 B | 27.2% | 参考 | | RW_CCM | 57,376 B | 65,280 B | 87.9% | PASS | | UNINIT_CCM | 48 B | 256 B | 18.8% | 参考 | -| RW_IRAM1 | 94,736 B | 131,072 B | 72.3% | PASS | +| RW_IRAM1 | 94,752 B | 131,072 B | 72.3% | PASS | | 子系统(静态 RW+ZI;除 RTOS 堆在 CCM 外均在 SRAM1) | 现值 | 配额 | 状态 | |---|---|---|---| | 网络 | 13,958 B | 12 KB | ⚠ 超 1.6 KB | -| 存储 | 7,072 B | 12 KB | OK | +| 存储 | 7,092 B | 12 KB | OK | | UI | 36,475 B | 16 KB | ⚠ 超 19.6 KB | | RTOS 堆 | 57,376 B | 56 KB | 堆=配额 | | 应用 | 26,433 B | 8 KB | ⚠ 超 17.8 KB | diff --git a/docs/测试说明/专项验证/模拟器差距清单.md b/docs/测试说明/专项验证/模拟器差距清单.md index b0a623f2..3609777d 100644 --- a/docs/测试说明/专项验证/模拟器差距清单.md +++ b/docs/测试说明/专项验证/模拟器差距清单.md @@ -67,7 +67,7 @@ | **CH395F 芯片** | 无(Winsock 代其 BSD API) | SPI 寄存器/命令/中断、PHY 协商、真实以太网帧 | 寄存器时序、命令回复、中断风暴、PHY 100M 全双工强制 | 板端 CH395F 套件(52 断言点)+ `/serial-boot-test` | | **GD5F NAND** | 无 | SPI NAND:BBT 扫描、ECC、坏块管理、dhara FTL | 坏块/ECC/写入失败等路径完全不可测 | 板端 GD5F 套件(76 断言点)+ `/serial-boot-test` | | **SD2506 RTC** | 无 | I2C RTC:时间读写、闹钟、温度、电池电压 | 时间源相关(`sys_clock_init` 降级路径)在模拟器上不可触发 | 板端 RTC 套件(18 断言点)+ `sys_clock` 主机侧纯逻辑单测(已覆盖算术面) | -| **开机账本 boot_stats(上电次数 / 复位原因快照)** | **不编译** `App/util/boot_stats.c`(依赖 SD2506 用户 SRAM 与 `RCC_CSR`);UI「运行报告」页的四个数在模拟器上是 `simulator/main.c` 的**固定假数据**(`boot_count=7`、`seq_state=延续`、`rst_cause=上电复位`、104 四枚 3 / 128 / 0 / 4096、`uptime_s=0`) |`boot_stats_init()` 读 SRAM → 自增 → 写回 → 快照驻留;四个 104 观测计数由 iec104Task 真实累加(跨重连不清零、断电归零) | 「自增有没有真落 SRAM」「电池域掉电后是否落 RESTARTED」「写失败是否只少计不重复」「104 计数是否跨重连累计」四类事在模拟器上**结构上不可见**;黄金参考只拍得到显示口径(范围标签在不在屏上、值有没有串行、`boot_ready=0` 是否显 `--` 而不是 0) | 主机单测 `test/host/boot_stats/`(SRAM 状态机与四态判定)+ 真机 `/serial-boot-test`:上电一次看 `boot_count` +1、拔电池后落 RESTARTED、IWDG 复位后 `rst_cause=IWDG`、主站连一次看 `conn_up` +1 | +| **开机账本 boot_stats(上电次数 / 复位原因快照)** | **不编译** `App/util/boot_stats.c`(依赖 SD2506 用户 SRAM 与 `RCC_CSR`);UI「运行报告」页的四个数在模拟器上是 `simulator/main.c` 的**固定假数据**(`boot_count=7`、`seq_state=延续`、`rst_cause=上电复位`、104 四枚 3 / 128 / 0 / 4096、`uptime_s=0`) |`boot_stats_init()` 读 SRAM → 自增 → 写回 → 快照驻留;四个 104 观测计数由 iec104Task 真实累加(跨重连不清零、断电归零) | 「自增有没有真落 SRAM」「电池域掉电后是否落 RESTARTED」「写失败是否只少计不重复」「104 计数是否跨重连累计」四类事在模拟器上**结构上不可见**;黄金参考只拍得到显示口径(范围标签在不在屏上、值有没有串行、`boot_ready=0` 是否显 `--` 而不是 0) | 主机单测 `test/host/boot_stats/`(SRAM 状态机与四态判定)+ 真机 `/serial-boot-test`:上电一次看 `boot_count` +1、IWDG 复位后 `rst_cause=IWDG`、主站连一次看 `conn_up` +1 —— **三件均已于 2026-11-06 Issue #53 台架轮实机复核通过**(boot 187→193 六连号无跳变、SRAM 保持+回写正常,真 IWDG 溢出经 SWD 缩窗触发,conn_up 静默窗精确 +1;「完整上电」用系统复位代理,本机无市电开关,POR 计数差额留人工一眼补验);「拔电池后落 RESTARTED」经用户裁定(2026-11-05)**台架不可验、销项不挂账**(电池域掉电需物理拔 RTC 电池,seq_state 四态判定由主机单测覆盖) | | **TPAFE5160 ADC** | 无 | SPI ADC + BUSY EXTI 中断 | 中断驱动采集链路 | 待功能实现(上游 ADC 采集链路) | | **RS-485 半双工** | 无 | UART4 + DE 方向控制,DWT 微秒延时 | DE 收发切换时序(特有陷阱) | 待功能实现(上游 RS-485 采集链路) | | **启动段硬件初始化** | 只跑纯软件部分 | I2C/SPI 外设初始化、BBT 扫描耗时、FatFS 挂载 | 启动段死机(无看门狗保护窗口)**只能在真机复现** | 真机开机日志判读(`项目启动顺序管理.md` §6 已落地) |