feat(adc): B1 实现 ADC 采集链路(adcTask + 看门狗)

B1(ADC 采集链路)落地,消化 P1-1:
- adc_task.c:空桩 -> 真实消费者。每 1ms 触发一次 CONVST,
  用 tpafe5160_snapshot() 原子取数(AGENTS 铁律)+ 帧统计 +
  每 10s 心跳日志。只取数,不做保护运算。
- Src/freertos.c:手工创建 adcTask(512 words / Normal,落
  USER CODE 保护区,同 timeSyncTask 先例)。
- task_watchdog:新增 TASK_WD_ADC;required_mask 产品 0x37 ->
  0x77、ENABLE_HW_LAYER_TESTS 0x35 -> 0x75。
- default_task.c:栈水位探针增列 adcTask(extern + 表项)。
- 脚本:stack_report.py 增 ROOTS/RUNTIME_ALIAS;gen_task_table
  增 adcTask(README/AGENTS 任务表已 --write)。
- 单测:watchdog_test.c beat_all/掩码断言同步(39 断言全绿)。
- 文档:待处理内容/看门狗设计/RAM 方案/继保规划 同步。

验证:@build 0 错 0 警;stack_report 静态最坏链 504B(余 75%);
pre-commit 全绿。剩 @test 实机闭环。
This commit is contained in:
2026-10-10 14:33:32 +08:00
parent dee6233d50
commit 883c9dd0cc
16 changed files with 165 additions and 58 deletions
+6 -4
View File
@@ -116,13 +116,14 @@ static void start_and_clear(void) {
s_feed_count = 0;
}
/* 全员置位(默认必需掩码 0x37 = bit0|1|2|4|5) */
/* 全员置位(默认必需掩码 0x77 = bit0|1|2|4|5|6,含 adcTask) */
static void beat_all(void) {
task_wd_beat(TASK_WD_DEFAULT);
task_wd_beat(TASK_WD_NET);
task_wd_beat(TASK_WD_FTP);
task_wd_beat(TASK_WD_UI);
task_wd_beat(TASK_WD_TIMESYNC);
task_wd_beat(TASK_WD_ADC);
}
/* ===================== 用例 ===================== */
@@ -151,7 +152,7 @@ static void tc_003_all_beat_feeds(void) {
beat_all();
poll_advance(100);
CHECK(s_feed_count == 1, "全员到位喂狗 1 次");
CHECK(task_wd_last_mask() == 0x37u, "last_mask == 0x37(bit0|1|2|4|5)");
CHECK(task_wd_last_mask() == 0x77u, "last_mask == 0x77(bit0|1|2|4|5|6)");
}
static void tc_004_take_and_clear(void) {
@@ -172,9 +173,10 @@ static void tc_005_mask_required(void) {
task_wd_beat(TASK_WD_NET);
task_wd_beat(TASK_WD_FTP);
task_wd_beat(TASK_WD_TIMESYNC);
task_wd_beat(TASK_WD_ADC);
poll_advance(100);
CHECK(s_feed_count == 0, "缺 UI 位 → 不喂狗");
CHECK(task_wd_last_mask() == (0x37u & ~(1u << TASK_WD_UI)),
CHECK(task_wd_last_mask() == (0x77u & ~(1u << TASK_WD_UI)),
"last_mask 精确记录缺失位");
}
@@ -250,7 +252,7 @@ static void tc_011_observers(void) {
CHECK(task_wd_is_armed() == 1, "is_armed == 1(已启动)");
beat_all();
poll_advance(100);
CHECK(task_wd_last_mask() == 0x37u, "last_mask 反映最近一次抽样");
CHECK(task_wd_last_mask() == 0x77u, "last_mask 反映最近一次抽样");
CHECK(task_wd_miss_count() == 0u, "全程达标 → miss_count == 0");
}