feat(adc): 新增变比维 r 三维折算,录波段格式升 v2

采样板注入 Ua=5V/Ia=0.5A 读数偏小,根因是固件只输出引脚电压、
缺「端子→引脚」变比。折算改三维:

工程量 = (code + b) × k[µV/码] × 1e-6 × r

k 保持 ROM 引脚 LSB,b 为零点,r 为端子变比(int32 Q16)。
变比不能并进 k:UA 端子域 k 达 1.5e5 µV/码、Q16 溢出 int32;
r 单独存 Q16 不溢出。两点标定改标 r,k 仍是板级事实。

- 新开单段 [adc_cal_sec](8 键 r_ua..r_in),cfg 段数达 8/8 上限
- 一次变比复用 prot_set 四项,不新开段;r=0 表示本路不折算
- ROM 默认带台架实测变比(电压族 1000、电流族 29.4118),
  烧进固件即显二次值;VALID 仍须两点标定,两者互不派生
- eng 判据改「每路要么已配变比、要么削顶不显示」,不再看 VALID
- 104 地址 0x8050~0x8057 写 r,run_par_cal_r_set 写值与置脏同函数
- 录波 v2:通道表加 int32 r_q16,头 128→160、整段 5250→5282;
  code_to_milli 用余数分解换等价单次圆整,20 万组大整数对拍 0 不符
- 文档同步:采集与算法层/通道映射/故障录波/网络配置/配置文件/
  产品需求/内存台账,历史带日期实测数字按冻结口径不改
- 单测 13 套全绿,/keil-build 0 错误 0 警告(256024/31760/
  2080/152368),RAM 实测回填内存内容分配策略 §6.1
This commit is contained in:
2026-11-11 11:31:34 +08:00
parent 8115fb9a87
commit 3675b89e8e
35 changed files with 1653 additions and 505 deletions
+8 -6
View File
@@ -87,7 +87,7 @@
* (自检已上报、卷保留、不重格式化),等下次上电重新 resume */
#define STORAGE_BRINGUP_RETRIES 3u
/* 录波段落盘持锁耗时告警线(lead 裁③i):一次心跳整段 5250 B(约 21 次 256 B
/* 录波段落盘持锁耗时告警线(lead 裁③i):一次心跳整段 5282 B(约 21 次 256 B
* f_write),设计 §4.2 预估落盘窗「几十 ms」;越过本线说明本段在占用 defaultTask
* 喂狗链前的最慢一段,按事件补一条 WARN(不是周期行),并把历史峰值留在本层
* 静态里供收工报告核喂狗余量(vol_lock.h 铁律「等锁即毁喂狗链」的前例在案) */
@@ -267,7 +267,8 @@ void default_task_func(void *argument) {
syslog_post(SYSLOG_OPER, "settings saved");
}
/* 运行参数段落盘(「数据可信」这一项):同款脏语义;save = 引擎整档外科写
* ([run_par] 9 键 + 被 adc_cal_set 联动改写的 [adc_cal] 两段一趟落) */
* ([run_par] 9 键 + 被 adc_cal_set() / adc_cal_set_ratio() 联动改写的
* [adc_cal] / [adc_cal_ofs] / [adc_cal_sec] 三段一趟落) */
(void)run_par_store_save();
/* [comm] 段落盘(道G task-9 通讯设置页):同款脏位、每轮无条件,
* 无事件位(task-8 D5 口径——ca 改后重启生效,落盘只保断电不丢) */
@@ -624,7 +625,7 @@ static FRESULT storage_bring_up(FATFS *fs) {
* 入口参数:无 void
* 返回值:无 void
* 限定条件:仅 defaultTask 主循环调用(vol_idle_sync_poll 之后);内部绝不阻塞——
* try 锁 + 有界段长(5250 B / 256 B ≈ 21 次 f_write,设计 §4.2 预估几十 ms),
* try 锁 + 有界段长(5282 B / 256 B ≈ 21 次 f_write,设计 §4.2 预估几十 ms),
* 绝不把喂狗点做成等待态(vol_lock.h 使用约定:defaultTask 一律 try)
* 函数说明:所有权按 docs/子系统设计/故障录波设计说明.md §5.1——环的生产者是
* adcTask,本道是唯一落盘消费者;跨任务握手只认 wave_ring_sealed()。
@@ -632,9 +633,10 @@ static FRESULT storage_bring_up(FATFS *fs) {
* ① 打开一律 FA_WRITE|FA_CREATE_ALWAYS(**覆盖,不是追加**):段名是 100 个
* 槽位的轮转复用(wave_store.h 的「号 0..99 轮转覆盖,写满回绕盖最老的」),
* 槽位被复用时同名文件已存在——用 FA_OPEN_APPEND 会把新段接在旧段尾巴上,
* 文件长成 5250×N,而回放页的单段读侧要求 size == 5250,于是逐件判
* 文件长成 段长×N,而回放页的单段读侧要求 size == 段长,于是逐件判
* 「长度废」(reject=2),全板没有一段放得出来。2026-11-10 板级实测:
* 100 个文件 / 1868 段全部合法、零损坏,纯粹是容器尺寸与写侧追加语义相抵。
* 100 个文件 / 1868 段全部合法、零损坏,纯粹是容器尺寸与写侧追加语义相抵
* (当时段长 5250 B = v1 布局;v2 加变比维后为 5282 B,判据形状不变)。
* 本移植 FA_CREATE_ALWAYS 会 remove_chain 并清零目录项的 FileSize,
* 是真正的截断(Lib/FatFs/ff.c 的 f_open 覆盖分支);
* 注意 FA_CREATE_ALWAYS 单独用**不含 FA_WRITE**(本移植旧式标志位),
@@ -802,7 +804,7 @@ static void wave_store_drain(void) {
if (rc == WAVE_ST_DONE) {
break;
}
if (++iter > 32u) { /* 5250/256 = 21 片;游标卡死时的有界保险 */
if (++iter > 32u) { /* 5282/256 ≈ 21 片;游标卡死时的有界保险 */
why = "pack stall";
break;
}