资源实测与物理验收记录
本文补充发布检查清单的记录方法,接口以当前开发候选为依据。当前这些现场项目均为NOT_RUN;本文不是已部署或验收通过的报告。功能说明、候选结果和现场能力分别见候选状态与能力矩阵。
开始前固定具体操作授权、设备身份和接线、稳定固件/Web摘要、配置备份与恢复方式。部署必须有本次实际写入及验证证据;历史COM/IP不能作为当前身份。重启、断电、配置/RTC写入、故障注入和输出动作分别列入授权范围。未知条件的输出用例保持NOT_RUN。
一次测试的共同记录
每轮使用新的runId和证据目录,保留失败及其后的恢复。至少记录:
| 类别 | 必填内容 |
|---|---|
| 版本 | 板卡/硬件修订、芯片、实测PSRAM状态、候选摘要、固件/Web SHA256、部署报告摘要、观测器版本 |
| 现场 | 授权记录、身份与接线证据引用、模块/仪器、允许的恢复动作、停止条件 |
| 条件 | 配置摘要、业务/网络/服务器负载、实例数、采样频率、预热规则、稳态窗口、峰值观察方法与验收阈值 |
| 每条样本 | 用例/事件ID、启动会话、配置摘要、主机UTC和单调时标、设备uptime及回绕、接口与HTTP状态、耗时、原始响应文件与SHA256 |
| 结果 | 有效样本/预期数、缺测原因、首次失败、恢复后首次新鲜成功、残留故障;命令结果、读回、物理反馈分列 |
身份、配置和原始响应按恢复与配置保全保存,公开报告只引用脱敏摘要。没有数据时记录未知或未测,不能用0补齐。
六组功能与资源对照
每项适用可选功能在同一板卡、固件和业务条件下比较以下状态。每组保留自己的配置摘要;不同配置样本不能拼成一次固定配置长稳。
| 状态 | 操作条件 | 重点观察 |
|---|---|---|
| S0 | 全可选功能关闭,保留测量必需入口 | 基线与仍存在的共享服务 |
| S1 | 启用目标功能、无实例 | 是否出现无用途任务/分配,实际owner和待重启状态 |
| S2 | 单实例 | 有效采样/动作、共享与实例资源 |
| S3 | 多实例 | 容量准入、队列、时延、内存与栈压力 |
| S4 | 停用,按声明方式生效或重启 | 配置保持、任务/实例/租约是否确实退役 |
| S5 | 再启用与恢复 | 新实例与新鲜业务数据、资源恢复、旧故障是否保留 |
先记录至少三次冷启动和一次稳定基线,每次启动独立编号。各组按同一预热和采样规则比较稳态、操作前后以及事先定义的峰值窗口;冷启动及S4重启须在维护范围内。初始化失败、低内存和网络/总线故障另建窗口,不丢弃失败样本。
三次冷启动只建立测量基线,不替代原计划的生命周期目标。另建启停/重配100次、冷启动20次、热启动20次三类记录;执行前冻结各类实际步骤、允许范围与退出阈值。逐次保存循环号、启动会话、操作与生效结果、前后资源/配置证据、失败/恢复及物理反馈;汇总计划数、尝试数、完成数、成功数、失败数和未完成原因。未执行与中断/缺证据分别记录,不把某次恢复成功填作整批通过。
| 证据 | 采集入口与字段 | 解释限制 |
|---|---|---|
| 轻量内部DRAM | /api/system/status的data.memory.dram8Free/dram8Largest,单位B | 不用总heap或PSRAM余量替代内部DRAM |
| 分池内存 | 完整/api/system/info?full=1或/api/system/diag-bundle的data.memory.capabilityPools;保存internal8/internalDma/psram8的observed/free/minFree/largestBlock与sampledAtUptimeMs | 裸/api/system/info默认精简;显式full仍可能因内存保护降级,probe/health或精简响应不替代完整快照;池存在重叠,不能相加;minFree不等于本次操作峰值 |
| 运行资源 | /api/peripherals/resources原始响应的data.runtime和各来源可用的owner、generation、busy、fault、retiring、cleanupPending字段 | 跨来源非原子;未登记SDK资源保持未知;配置删除不证明实际释放 |
| 任务栈 | 获准开发者单次POST /api/system/task-stack-snapshot;保留HTTP、success/status/reason、completeAtCapture、数量变化、captureDurationUs及taskNumber/highWaterBytes | 不轮询、不绕过30秒冷却;任务编号不跨重启对齐;未知/忙/超容量不是空任务列表,0水位不能当未知 |
| 业务 | 成功/预期数、数据质量/年龄、队列/超时/分配失败、保护/降级、复位原因、时延p95/p99/最大值 | 没有实测来源的CPU值保持未知;平均值不能替代最差情况 |
分池完整响应和单次栈扫描都有开销,统一记录请求顺序及其干扰窗口;栈扫描可能暂停调度,须观察同窗业务时延与WDT。离散采样可能漏过瞬时峰值,未覆盖时明确标记。SDK各heap低点也不保证同时发生。
静态Flash/RAM另取相同工具链条件的map/bin。运行期开关不缩小固件;S2−S1、S3−S2只能作为同条件观察差值,不能直接称每实例固定成本。六组数据齐全也不自动证明全部功能组合、故障恢复或长期无泄漏。
RTC保持和走时记录
沿用DS1302说明。先核实模块、电池、电压、充电配置与安全断电方法,冻结日历解释、时区、运行/暂停状态、断电时长和误差容限。没有独立参考时间及其不确定度,精度保持待判定;本流程不要求自动校时或改变涓流充电。
- 断电前保存RTC日历/运行状态、独立参考读数及采集起止时刻。同时记录系统
timeSource/timeQuality/timeSourceAuthenticated/timeSyncAgeMs/timeSyncSequence/activeTimezone;系统时间的来源记录本身不是独立准确参考。 - 在单独获准的测试设备上移除主电源并保留已核实的备用供电,记录实际断电起止参考时标、供电和环境观察。未明确回供/负载安全时不执行断电。
- 恢复后,在任何可能改变RTC日历的操作前保存第二组RTC/参考配对、读回延迟、日历合法性和运行状态。期间发生写时或无法排除写时的窗口,不能用于证明电池保持成功。
- 将“可读/持续计时”和“走时精度”分开判定。在日历解释固定、无校时或时区歧义的条件下,记录两次RTC减参考的偏差
offset0/offset1,观察ppm为(offset1-offset0)/参考经过秒数×10^6。同时给出读数分辨率、参考及读取延迟不确定度;短窗口不足以判定时不填写0ppm。 - 分别保存Web、规则/MQTT和适用实体显示的实际值、采样时刻、来源及年龄。不同采样时刻不要求逐字相等;格式正确不代表保持或精度通过。
记录中保留模块/电池证据、日历解释、参考及不确定度、两次RTC/参考原值、读取起止、实际断电时长、偏差/漂移、误差容限、期间写时/来源变化与原始证据。
外设故障窗口与物理反馈
复用各模块现有配置步骤,在同一个用例中补以下记录。故障方法、预期安全状态、停止条件与恢复动作须事先确定;未知响应不自动重放。
| 范围 | 同窗口的最低记录 |
|---|---|
| SD | 卡/文件系统、SPI/CS及共享客户、专用测试文件原长度/SHA256、写后重新读取长度/SHA256、mount/owner/recovery状态及容量样本年龄;只对可牺牲介质实施获准的满盘/断电故障,不默认支持热拔卡 |
| UART / Modbus | 对端与逻辑电平/收发器、控制器/引脚/参数、实际发送与接收字节/时刻、预期帧/边界、错误与代际、恢复后第一帧;通用文本计数不替代Modbus CRC或硬件溢出证据,故障输入不连接未授权输出规则 |
| ADS1115 | 板型/PSRAM、模块、MUX/量程/速率、输入电气条件、参考仪器及校准信息、参考值/原码/换算/质量/年龄/容差、NACK或断线窗口和恢复新样本;量程不等于端口允许电压 |
| MCP23017 | RESET/供电证据、A7/B7及实际通道、启停物理电平/负载反馈、输入参考和读回、故障/退役/恢复时刻;寄存器ACK不证明外部RESET或负载安全 |
| PCA9685 | 独立上电/OE实际电平、共享频率、通道、频率/脉宽实测与仪器、使能/禁用/停止物理结果、失联/失电与新会话恢复;沿用prepare/上电确认流程,角度指令不等于实测角度,OE HIGH不等于负载断电 |
| RGB面板/触摸 | 专用固件与板/屏修订、显示方向/边缘/撕裂/黑屏、按下抬起/导航与触点、背光、负载/时长、画面证据与失败时刻、同窗HTTP/采样/栈/DMA;网页预览或扫描接口不代替实体显示/触摸,蜂鸣器和输出另列授权 |
每个故障事件保留eventId、前置、故障方法、预期安全状态、首次失败、尝试次数、命令/读回/物理结果、恢复动作、首次新鲜成功、前后资源、残留故障、原始证据和结论。恢复成功不覆盖原失败;未尝试为NOT_RUN,前置不具备为BLOCKED。
SD的文件SHA256与HTTP响应SHA256分别保存。使用现有Web接口做字节对照时,先选定不超过4096字节的已知ASCII测试文件,在 GET /api/peripherals/read?id=<SD逻辑ID>&action=read&path=<沙箱文件>&maxBytes=4096 成功后,对JSON解码得到的 data.content 按UTF-8编码取文件字节,核对 data.length、预期长度和SHA256;不添加BOM或转换换行,也不对整个JSON响应计算“文件哈希”。超限文件会拒绝整份读取,当前接口没有分段下载;大于4096字节或二进制文件须另附获准的安全卸载/断电及读卡器完整读回证据,缺少该证据时文件完整性保持未确认。写入成功或容量变化不能代替读回,更不能证明断电后耐久性。
与长稳、独立试用的衔接
按发布清单完成2小时探索、24小时混合负载、7天固定候选观察,保留有效跨度、样本数量、空档和累计失败。固件或关键配置变化另起窗口,稳定环境和故障注入分窗。
当前test-device-soak.py服务于COM15/ECM50-A类业务,test-screen-panel-soak.mjs服务于面板业务;换URL不能自动适配其它板卡或H1场景。两者现有内部内存样本仅包含dram8Free/dram8Largest,分池DMA/PSRAM和全任务栈须按上文补采并关联同一run。其它板型执行前明确实际入口、字段/单位、有效样本与业务计数,尚未准备的组合保持BLOCKED,不为复用脚本改造现场配置。
两份脚本的PASS也不自动完成原计划的24小时头尾内存筛查。test-device-soak.py当前没有头尾中位数下降判定;面板脚本在至少60个样本、头尾差超过8192字节且超过基线25%时才标记sustainedHeapDecline,不是计划的初始筛查线max(2 KiB, 基线的2%)。另附以下记录,按事先冻结的同负载、预热和窗口定义分别分析内部DRAM及最大连续块;不能为满足阈值重新挑选窗口。
| 记录项 | 必填内容 |
|---|---|
| 窗口与来源 | 指标原始路径、单位、run/boot/config摘要、头尾窗口起止、预期/有效样本数、缺测/异常保留方式、原始样本引用 |
| 筛查计算 | 头尾中位数、下降字节和比例、采用阈值及批准来源;原计划建议线单独注明为初始筛查,不等同泄漏定论 |
| 判定 | 未测、缺数据/不可比较、满足冻结筛查条件或超线待调查;保留调查结论,不用脚本PASS补齐 |
| 长期复核 | 7天趋势、持续单向下降、未回收对象及同窗业务/恢复证据;额定功能的保护线与约定余量另行核对 |
NC01~NC04及V14沿用零代码验收操作卡。技术窗口、物理准确度/负载反馈与独立用户操作分别验收,自动化工具不代签独立试用。

