60a650c175
问题: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 像素中性)。是否让基线入库待裁。
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