Files
STM32F4-Base/App/task
super_agent_bot 1df02c4658
CI / 静态门禁 (pre-commit) (push) Failing after 4m54s
CI / 主机侧单测 (MSVC) (push) Successful in 51s
CI / 静态门禁 (pre-commit) (pull_request) Failing after 4m29s
CI / 主机侧单测 (MSVC) (pull_request) Failing after 41s
fix(wave): bench 定时自抓到期判定无符号回绕恒真修复,第四幕板级闭环入档(#84)
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 + 启动锚点两跑日志)。
2026-11-07 21:55:06 +08:00
..

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