首页 / knowledge/代码解析/hmi
led.h
源文件路径:
hmi/led.h所属模块:hmi(人机界面) 代码行数:26
1. 文件职责
本文件是 EMS 指示灯(LED)显示模块的对外头文件,只做两件事:声明 hmi/led.c 导出的两个函数 led_display_test() 与 led_display(),并把 LED 模块所需的公共依赖一次性拉进来。它本身不含任何数据结构、宏或变量定义,是一个纯声明头。
它处在 HMI 数据流的"灯显出口"位置:上层由 hmi/key.c 的 task_hmi_parse() 任务在每轮循环中先调用一次 led_display_test()(hmi/key.c:8896,开机点亮自检),之后在 for(;;) 里周期调用 led_display()(hmi/key.c:8953)刷新指示灯。灯的颜色与闪烁节拍全部由 led_display() 内部根据逆变器/电池/电表/联网状态现场计算,本头文件不参与任何计算。
它同时是 LED 新旧两套实现的"交汇点":#include "app_led.h"(hmi/led.h:17)把 2026 年新增的 WS2812 灯带模块(app_led.c/app_led_cfg.c/led_dev.c)一并引入,使 hmi/led.c 可以直接读写 sys_current_status_color 这个跨文件的颜色状态量。
2. 关键数据结构与宏
本文件没有定义任何结构体、枚举、宏或变量。
| 名称 | 类型(结构体/枚举/宏/联合体) | 说明 |
|---|---|---|
__LED_H__ | 宏(防重包含) | 头文件保护宏,hmi/led.h:9-10 |
| (无) | — | 本文件不含结构体、枚举、联合体、常量宏定义 |
3. 函数清单
本文件只有函数声明,没有任何函数定义。
| 函数名 | 作用域(static/全局) | 说明(一句话) |
|---|---|---|
led_display_test | 全局(声明,hmi/led.h:22) | 开机/切换显示类型时的灯显自检函数,定义于 hmi/led.c:42 |
led_display | 全局(声明,hmi/led.h:23) | 指示灯周期刷新主函数,定义于 hmi/led.c:157 |
4. 核心逻辑解析
本文件是纯声明头,无逻辑。与它相关的时序约束如下:
- 调用节拍由
hmi/key.c的task_hmi_parse()(uCOS-II 任务TASK_HMI_PRIO)决定:led_display_test()只在任务初始化阶段调用一次(hmi/key.c:8896);led_display()在for(;;)主循环中每轮调用一次(hmi/key.c:8953),循环末尾按显示类型睡眠 10 ms 或 100 ms(hmi/key.c:8964、hmi/key.c:8970、hmi/key.c:8975、hmi/key.c:8978)。 led_display()内部所有闪烁节拍(100/200/500/1000/2000 ms)都以OSTimeGet()的 1 ms tick 为基准自行计数,不依赖本文件提供任何时间基准。
5. 对外接口
本文件导出(供外部使用)
| 名称 | 类型 | 使用方 |
|---|---|---|
led_display_test | 函数声明 | hmi/key.c:8896 |
led_display | 函数声明 | hmi/key.c:8953 |
本文件间接暴露(通过 include 传递)
| 名称 | 来源 | 说明 |
|---|---|---|
includes.h | UCOSII/uCOS-CONFIG/includes.h | 全局类型/OS 头,hmi/led.h:13 |
data.h | data/data.h | 数据层公共类型与 g_t_config_data 等,hmi/led.h:14 |
bms.h | midware/bms/bms.h | BMS 中间件接口,hmi/led.h:15 |
inverter.h | midware/inverter/inverter.h | 逆变器中间件接口与 INVERTER_TYPE 机型宏,hmi/led.h:16 |
app_led.h | hmi/led/app_led.h | 新增 WS2812 灯带任务接口,hmi/led.h:17;并继续传递 app_led_cfg.h → led_dev.h |
6. 依赖关系
- 依赖:
includes.h、data.h、bms.h、inverter.h、app_led.h(hmi/led.h:13-17)。 - 被依赖:
hmi/led.c:13(#include "led.h")hmi/key.c:26(#include "led.h")midware/debug/board_test.c:12(#include "led.h")system/board_init/board_init.c:27(#include "led.h")
7. 备注与风险点
- 本头文件只声明了
led_display_test()/led_display(),而hmi/led.c内部大量依赖g_t_error_log_tab、g_t_logic_info、g_t_app_info、g_stEMSInfo、g_t_wireless_info等全局量,这些都不是通过led.h引入的,而是靠各个.c文件自己再#include。只要包含led.h就会连带拉进inverter.h(含机型宏)与整套app_led.h/led_dev.h,头文件依赖较重。 hmi/led.h的#include列表与文件实际使用范围不完全一致(例如data.h、bms.h、inverter.h是给led.c用的,但对仅 includeled.h的board_init.c、board_test.c来说是多余的)。- 文件头注释块(
hmi/led.h:1-8)除@file :led.h外无版本、日期、作者信息,属于历史遗留的空注释。