1df02c4658
F0(唯一代码改动,#if DTU_BENCH 闸内,产品影像零漂移): adc_task.c 原无符号判据 (uint32_t)(now-next)>=PERIOD 在 next=now+PERIOD 挂出后立刻成立(now<next 差值回绕成巨数),台架实证 1 kHz 连发请求: ovf 每秒 +1000、段节奏被去重钳到 ~1.5 s/段,违背 ON 行承诺 「1 seg / 2000 ms」。改有符号比较(半程内回绕安全)。修复后实测 seg 恰 +5/10 s;bench Code=255284 vs 产品 254820(差 464 B)证门控。 第四幕三判据板级实证(手册 §6 步骤 3 逐条对上): - 临界占卷命中唯一 [ERR] seg drop: ring abandoned(idx=36),心跳 err 恰 +1,段号不推进、同号 5250 B 重写(P1/P2/P3 + sha256 固化); - 长占卷 72.6 s 静默自弃 err 1→15 零留痕(不是每拍刷屏最严形态); - 占卷期间 104 STARTDT 实测应答 + UI 主菜单照常(丢录波不丢采集)。 现场发现 F1(单发未复现软件复位,只记不断)/F2(lftpd 放锁早于 DOWNLOAD 落账 ~0.13 s,临界命中方法钥匙)/F3(pack_next 留痕板级 首见,同族分支)入设计说明 §10 闭环记录。 文档销项:设计说明 §5.2 L163 / §10 留痕名清单 / 板级行 / 未跑清单 四处标记闭环 + 新增「bench 定时自抓与占卷弃段观察闭环记录」小节; 到场轮手册 §1 第四幕行标已完成 + §6 收工状态注记。 收工:FILLER/FILL2/FILL3 删净,产品构建 21:32:52 已烧(除 #53 i104 首绑 FAIL 行外 8/9 required 全过、端口 STARTDT 实测活,沿用 11-06 先例定性);UI 主菜单;证据目录 docs/测试说明/测试数据/ wave_bench_20261107/(README 判据对照 + 原始/复原串口摘录 + 各轮 JSON + 启动锚点两跑日志)。
App/task/ — FreeRTOS 任务实现
6 个任务的入口函数与任务体。任务创建在
Src/freertos.c(MX_FREERTOS_Init), 栈大小/优先级的唯一事实源也是Src/freertos.c;本目录只放任务实现。
任务清单
| 文件 | 任务 | 优先级 | 职责 |
|---|---|---|---|
default_task.c/h |
defaultTask | Normal | FTL + FatFS 挂载、配置引擎属主、syslog 唯一写者、LED 指示 |
net_task.c/h |
netTask | Normal | net_stack_bring_up → 置 NET_READY → 循环 net_poll + net_process_messages |
ui_task.c/h |
uiTask | BelowNormal | LVGL 界面(菜单 / 内容页 / 待机)+ 推流 |
adc_task.c/h |
adcTask | AboveNormal | ADC 采集消费:TPAFE5160 快照 + 消费 STM32 ADC1 DMA 乒乓缓冲一帧,经 ../algo/adc_input.c 按语义取数(采样节拍由 TIM3 硬件触发) |
rs485_task.c/h |
(RS-485 任务) | — | 半双工 RS-485 协议通信 |
../sync/time_sync.c |
timeSyncTask | Normal | 墙钟时间同步(实现不在本目录,见 ../sync/README.md) |
上表栈大小/优先级以
Src/freertos.c为准(README.md/AGENTS.md的任务表由scripts/gen_task_table.py生成,勿手抄)。
就绪屏障(重要)
任务间不用魔法延时,改用 App/app/sys_events.h 的 Event Flags:
SYS_EVT_NET_READY/SYS_EVT_STORAGE_READY等是状态位——等待时必须osFlagsWaitAny|osFlagsNoClear,不能用默认消费型等待(否则先到的消费者会清掉位, 导致ftpTask的WaitAll(两位)永不成立 → FTP 静默不监听)SYS_EVT_CFG_SAVE/SYS_EVT_NET_RECONFIG等命令位保持消费型等待
平台约束(改本目录前必读)
- 内核启动前禁止任何 FreeRTOS/CMSIS-RTOS API 调用(
osMessageQueueNew等会杀死启动) - 就绪屏障位一律用
osFlagsNoClear - 内存预算紧张,改栈/缓冲前先核算(
docs/内存管理/)
相关文档
- 启动顺序与屏障:
docs/架构设计/项目启动顺序管理.md - 内存与定栈规则:
docs/内存管理/RAM使用分析与优化方案.md - 栈水位实测:
scripts/stack_report.py