/* * 模块名称:UI 数据组装器(ui_data_feed) * 模块功能:App → UI 数据通道的"写侧"——按节拍从采集/算法/保护/协议/时钟各模块 * 取数,组装成 docs/UI设计/UI_数据供给设计说明.md §4 契约的三帧 * (实时量 rt / 参数 par / 装置信息 info),经 Drivers/BSP/UI/ui_data.h * 的发布 API 推给 UI 层;本模块是快照的**唯一填充者** * 适用范围:App/app(装配层:可同时 include 两侧头,方向仍是上层依赖下层, * scripts/check_layer_deps.py 只拦"Drivers/BSP 目录反向 include App 目录") * 线程约定:uiTask 上下文,主循环每轮调 ui_data_feed_tick() 一次;与页面读写同 * 上下文串行 → 无锁(docs/UI设计/UI_数据供给设计说明.md §5.1)。 * ⚠ 不得在 adcTask/protectTask/netTask 里调用本模块 * 端接法:MCU = App/task/ui_task.c 主循环;PC 模拟器**不链接本文件**(模拟器不跑 * 固件装配链,快照由 simulator/main.c 直接发布固定帧保证像素回归可复现, * 见 docs/UI设计/UI_数据供给设计说明.md §9.2;模拟器豁免登记在 * scripts/check_registration.py 的 SIM_EXEMPT) * 作者:王建锋 * 创建日期:2026-10-25 * 修改记录: * v1.0 2026-10-25 王建锋 创建(道E task-14) * v1.1 2026-10-26 DTU 项目组 道F task-1:tick 兼任定值写路径的落定节拍 * (契约 §6.2;实现见 .c 的 s_param_ops) */ #ifndef UI_DATA_FEED_H #define UI_DATA_FEED_H #ifdef __cplusplus extern "C" { #endif /* * 函数功能:装配节拍入口——先落定一条定值整定请求(写方向),再发布实时帧与 * 信息帧(满 200 ms 一次)、参数帧(仅校验和变化时);首轮立即发布 * (免启动后出现一闪的 "--") * 入口参数:无 * 返回值:无 * 限定条件:uiTask 上下文,主循环每轮一次(UI 循环周期 10 ms);页面"保存"按键 * 与本页节拍同上下文,故写路径的投递/落定之间不需要任何锁 * (Drivers/BSP/UI/ui_data.h 写路径节) * 函数说明:本函数每轮代价 = 一次 tick 差值比较 + 一次校验和比较 + 一次 * ui_data_param_drain()(队列空时只是一次计数判断);真正的取数与组装 * 只在到期时发生(docs/UI设计/UI_数据供给设计说明.md §5.2)。 * ⚠ drain 排在取校验和**之前**:本轮写入的定值要在本轮就被"校验和变化 * 才发"那道门看见,页面才能在同一帧里同时显示 OK 与新值 * 内部零阻塞、零堆分配、零日志(日志每条约 90 B Flash + 216 B 栈, * 200 ms 周期打不起);整定失败态走屏上通道,不打日志 */ void ui_data_feed_tick(void); #ifdef __cplusplus } #endif #endif /* UI_DATA_FEED_H */