Files
STM32F4-Base/App
wandering1 411594bf67 feat(采集标定): 卡1 TPAFE 量程口径定死 + 卡3 cfg_file 补 CFG_VAL_INT
卡 1(文档口径;卡 0/12 实测类按用户指示跳过,只落口径与占位):
- ADC通道映射说明.md 文首摘要行的 ±10 V 更正为 ±5 V 双极性:板上 RANGE
  接 GND,±5 V 满量程 = 10 V 跨度,LSB ≈ 152.59 µV/码(@引脚)
- §7 TPAFE 量程行重写并括注 ±10 V 是芯片可选档(RANGE=HIGH,跨度 20 V、
  LSB 305.18 µV)、本板未用;§1 缺陷实质 2 补「满量程 = 10 V 跨度」
- 新增 §7.1 端到端量纲链路分段口径:②引脚侧 LSB 系数定死(TPAFE 152.59 /
  STM32 805.66 µV/码,纯转换器事实、与前端网络无关,卡 2 的 ROM 默认按此
  冻结);③1k+1k 网络「2:1 分压 vs 源阻抗匹配」两读法待卡 0 注入斜率判别;
  ④端子→AINn 变比为仓库缺口待卡 0b;305.18/1611.3 定性为读法 A 的条件值、
  判别前禁入代码;§9 变更记录编号不动(继保规划有指向本文件 §9 的跨文档
  引用),新增行追加于其后
- 全仓其余 ±10 V 仅剩芯片手册转写与 tpafe5160 RANGE 枚举可选档注释
  (芯片能力描述,非本板口径);数据可信.md §2.1 冲突挂账归 lead 销项

卡 3(代码;cfg_file.c 带 BOM,编辑后核 EF BB BF 完好):
- 新增值类型 CFG_VAL_INT(枚举尾部追加、既有值不变;len 1/2/4 小端补码):
  s_decode_int() = strtol + ERANGE + 宽度上下界双校验(两端 long 均 32 位,
  超范围文本饱和成 LONG_MAX 仅比界抓不住,ERANGE 必查);s_encode() 带负号
  %ld 输出;cfg_file_register() 拒 INT 非法 len
- 单测新增 TC-CONFIG-006/007/008:-1 / INT32_MIN / INT32_MAX / 越界拒绝
  (含饱和带 2147483648)/ 编码带负号 / [sys] 段 load-save-load 往返一致 /
  注册拒绝 INT len=3 —— cfg_file 套件 200/200 PASS
- 回归:net_cfg 45/45、ftp_cfg 16/16 PASS,既有 network/ftp 段行为不变
- 越界改动说明:TC-CONFIG-006~008 定义行登记进属主文档
  docs/测试说明/配置文件单元测试说明.md(id-check 增量拦截要求在属主登记处
  补定义,该文件不在本卡写范围但为门禁唯一修复路径,仅追加 3 行用例 + 1 行
  变更记录,lead 评审时留意)

gate:@build 0 错误 0 警告(Code=214104 RO=18860 RW=1204 ZI=131852);
RAM 增量 0 B(RW/ZI 与 ram_baseline 2026-10-24 行完全一致,IRAM1 57.7%、
CCM 87.9% 不变),Flash +324 B;uvprojx 零挂载变化、未入库。
staged 门禁全绿,唯 mem-numbers / mem-budget 因 Flash 增量需台账回填
(--write 目标 docs/内存管理/** 属单写者文件,本道不得触碰):
gate: only mem-budget/mem-numbers pending lead ledger backfill
(--all-files 全量自查确认失败面仅此两条;BOM/CR/U+FFFD/字面量 ASCII 已
手工自查)
2026-10-25 03:13:32 +08:00
..

App/ — 应用层

自研代码(非 CubeMX 生成、非第三方库)。本目录是项目的应用层:任务编排、业务逻辑、 日志与配置引擎、工具函数。所有文件遵循 docs/代码规范/嵌入式C语言代码规范_V1.0.md。

职责

Src/main.c(CubeMX 初始化)→ app_main_init(本目录 app/app_main.c)→ osKernelStart → 6 个 FreeRTOS 任务(见 task/)。osKernelStart 之前全是内核启动前代码,禁止调用任何 FreeRTOS/CMSIS-RTOS API(见 AGENTS.md「平台约束」)。

目录结构(按职责分层)

目录 内容 README
app/ 应用入口与全局:app_main.c/h(初始化入口)、app_cfg.h(裁剪决策占位说明,当前无宏)、sys_events.h(就绪事件) app/README.md
cfg/ 配置引擎:/config.ini 解析 + 原子持久化(旧二进制档已废弃,2026-10-10) cfg/README.md
sync/ 时间同步任务:time_sync.c/h sync/README.md
algo/ 采集与算法层(L1/L2/L3):语义取数 + 有效性判定 + 采样环/相量/测频 + 定值模型 + 保护元件框架 algo/README.md(索引);设计 → docs/算法/采集与算法层设计说明.md
log/ 日志子系统:syslog(NAND)+ 控制台单写者日志 log/README.md
task/ FreeRTOS 任务实现(6 个任务) task/README.md
util/ 通用工具:CRC / 环形缓冲 / 墙钟时间 util/README.md
protocol/ 通信协议(预留,当前为空) protocol/README.md

关键约束

  • 配置引擎单任务收敛:cfg/ 为静态态、属主是 defaultTask;UI 保存请求经 SYS_EVT_CFG_SAVE 事件唤醒,netTask/uiTask 不得直接触碰配置引擎
  • syslog 唯一写者:/log/* 只由 defaultTask 写入
  • 新增任务/缓冲/栈前必须先核算 RAM 余量(docs/内存管理/)

相关文档

  • 架构全景:docs/架构设计/项目架构总览.md
  • 启动顺序:docs/架构设计/项目启动顺序管理.md
  • 配置引擎:docs/子系统设计/配置文件设计说明.md
  • 日志:docs/子系统设计/控制台单写者日志设计说明.md、docs/子系统设计/运行与自检记录设计说明.md