EMS 知识库
首页 / knowledge/代码解析/midware/interface/drm

drm.h

源文件路径:midware/interface/drm/drm.h 所属模块:midware / interface / drm(DRM 需求响应接口) 代码行数:26

1. 文件职责

本文件是 DRM(Demand Response Mode)模块的对外声明头,只有三条函数原型,没有任何类型、宏或变量定义。它存在的意义是把 midware/interface/drm/drm.c 的三个入口暴露给调度层(midware/interface/interface.c),同时通过 #include "includes.h" 把工程公共类型(u8/u16/u32 等)带进来。头文件本身不含逻辑、不持有状态,也不做参数校验,属于典型的"薄声明层"。其对应的实现细节(DRM0 ADC 分档、DRM1~4 GPIO 打包、RRCR/EZA/§14a/WLV 映射)全部在 drm.c 中。

2. 关键数据结构与宏

名称类型说明
__DRM_H宏(drm.h:9)头文件防重复包含守卫,风格与工程其它模块一致(__XXX_H)
(无)—本文件未定义任何结构体、枚举、联合体、位域或常量宏。DRM 相关的数据结构(u16_drm_state 等)与配置枚举(RRCR_EZA_STATUS_E)分别定义在 drm.c:21 与 logic/logic.h:114
includes.h被引入的头(drm.h:13)工程总包含头,提供 u8/u16/u32/s32/TRUE/FALSE/ENABLE 等基础定义

3. 函数清单

函数名作用域说明
drm_init全局(声明于 drm.h:21,实现于 drm.c:33)上电初始化,把 g_t_logic_info.u8_drm_mode 复位为 16(DRM 无效)
drm_mode_judge全局(声明于 drm.h:22,实现于 drm.c:67)DRM 主判定:1 s 节流采集 + 模式判定 + RRCR/EZA/§14a/WLV 限值计算
drm_get全局(声明于 drm.h:23,实现于 drm.c:44)读 DRM1~DRM4 GPIO 并打包成 u16_drm_state

本文件共有 3 条函数原型,全部为全局作用域,无 static 声明、无函数指针 typedef、无 extern 变量声明。

4. 核心逻辑解析

本文件无任何可执行逻辑,不存在状态机、算法、通信帧格式或定时时序。以下只说明三条原型在使用侧的时序约定,供实现与调用对齐:

5. 对外接口

本文件导出

名称类型使用方
drm_init函数原型(drm.h:21)midware/interface/interface.c:215(经 drm.h 包含)
drm_mode_judge函数原型(drm.h:22)midware/interface/interface.c:219
drm_get函数原型(drm.h:23)无外部调用者(仅 drm.c 内部)

本文件不导出任何变量:u16_drm_state(drm.c:21)虽为全局符号,但未在此头文件中 extern 声明。

本文件调用的外部函数 / 变量

无。头文件只 #include "includes.h" 并声明三个原型,不引用任何外部符号。

6. 依赖关系

依赖

includes.h(drm.h:13)。这是唯一的 include,用于取得 u8/u16/u32 等基础类型别名。

被依赖

7. 备注与风险点

  1. 头文件自包含性不足:drm.h 只 include includes.h,但三条原型的参数/返回都是 void,所以不依赖其它类型;这一处没有问题。真正的风险在于实现文件 drm.c 额外依赖 gpio.h、logic.h、inverter.h,而这些依赖没有体现在头文件里,其他模块若只想用 drm_get() 必须自行补齐 include。
  2. 缺少版本信息:文件头注释(drm.h:1–8)的 @version、@date、@brief 三个字段全部留空,与同目录 dry_node.h(有 V1.0.0 / 2017/05/18)风格不一致。
  3. drm_get() 过度暴露(drm.h:23):实现中只服务于 drm_mode_judge() 内部的采集步骤,建议改为 static 并从头文件移除;若为调试/产测保留,应在注释中说明调用者。
  4. 无版本/兼容性宏:不像部分厂商协议头文件会定义寄存器表版本,本头文件没有任何可配置项,所有阈值(800/3000、0.5568/0.4432)硬编码在 .c 中,无法通过头文件覆盖。
  5. 函数命名未带模块前缀以外的语义:drm_get() 名字过于通用,容易被误认为"获取 DRM 状态并返回",实际它只写全局变量、无返回值。建议改名 drm_signal_sample() 或补注释。