Files
STM32F4-Base/App/task
wandering1 60a650c175 fix(adc_task): 接上从未被调用的任务初始化入口(含判定层参照系)
问题:adc_task_func 函数头写「限定条件:adc_task_init() 已调用」,但
adc_task_init() 全库无调用点;同类空壳 net_task_init()(体内只有一条
DBG_INFO,函数头却写「创建 TCP Server 监听 Socket」)同样无人调用。

判定层为什么今天还没坏:状态全在 .bss(复位即 0),且 adc_health 的
首拍只建基线、不判定,所以漏调 init 只是「少清一次」。但假契约会让
下一个接手者照它推理,故必须修在成灾之前。

改动:
- adc_task_func 进入循环之前(开闸 s_consumer_ready 之前)自己调用
  adc_task_init(),不依赖外部接线;init 与首拍之间无抢占窗口
- adc_task_init() 去掉 DBG_INFO 并在函数头标注禁止加日志:它落在
  adcTask 静态最坏调用链上,每条 DBG_* 约 216 B 栈,而这条启动行
  无诊断价值(存活由首帧日志与 TASK_WD_ADC 心跳证明)
- 删除 net_task.c/.h 里的空壳 net_task_init()(声明 + 定义 + 误述)
- docs/算法/采样有效性校验设计说明.md §14 与变更记录同步改写:
  原来登记的「init 不在产品路径」事实已修复,不留过时结论

实测(任务工作树 adc-health,构建 + 静态分析):
- @build 0 错 0 警;Code 213356 → 213424(+68 B)
- RW-data 1184 / ZI-data 131480 逐字节不变 ⇒ RAM 零增量
- stack_report:adcTask 静态最坏链 1320 B → 1320 B 不变,
  余 1240 B / 48% 仍 PASS(netTask 1912 B、protectTask 872 B 不变)
- ADC 有效性单测 31/31 通过(钩子按 adc_task.c 自动触发)
- 字节卫生自查:BOM 无 / CR 0 / U+FFFD 0,字符串字面量纯 ASCII
  (中文只在注释里),新增行无非 ASCII 字面量

gate: only mem-budget/mem-numbers pending lead ledger backfill
pre-commit run --all-files = 33 Passed / 2 Failed,失败仅这两条,
均为台账受管区与本树 .map 的 Flash 差异(233,120 → 233,188,即本次
+68 B);RW_IRAM1 75,240 与 RW_CCM 57,376 与台账完全一致。按并行
分支约定本分支不跑 --write,台账由 Lead 合并后统一回填。

另记一处门禁缺口(非本次引入):ui-golden 的黄金参考 simulator/
tests/ref/ 被 .gitignore 排除、从未入库,新工作树里必然失败;本树
用 check_content_pages.py --update 生成 11 页基线后 ui-golden Passed
(即本次改动对 UI 像素中性)。是否让基线入库待裁。
2026-10-22 00:43:31 +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