首页 / knowledge/代码解析/hmi/led
app_led.h
源文件路径:
hmi/led/app_led.h所属模块:hmi/led(人机界面 - WS2812 灯带应用层) 代码行数:47
1. 文件职责
本文件是新增 WS2812 灯带应用层(2026-04-17 新建)的对外头文件,只声明两个函数 led_test_color_cycle()、led_display_task(),并定义一个宏 LED_TASK_PERIOD。
它处在"逻辑状态 → 灯带颜色"这条数据流的入口位置:led_display_task() 是设计上供 uCOS-II 任务周期性调用的刷新入口(周期 10 ms 由 LED_TASK_PERIOD 描述),内部从 BMS/网络状态取值后调用灯带编码层 led_dev.c。头部唯一的实现在 hmi/led/app_led.c。
本文件被 hmi/led.h:17 包含,从而间接暴露给 hmi/led.c、hmi/key.c、system/board_init/board_init.c、midware/debug/board_test.c 等所有包含 led.h 的模块;它自己又 #include "app_led_cfg.h" 把颜色枚举、颜色宏与 led_dev.h 一并传递下去。
2. 关键数据结构与宏
| 名称 | 类型(结构体/枚举/宏/联合体) | 说明 |
|---|---|---|
__APP_LED_H__ | 宏(防重包含) | 头文件保护宏,hmi/led/app_led.h:10-11 |
LED_TASK_PERIOD | 宏(= 10) | 设计上的灯带刷新周期(单位应为 ms),hmi/led/app_led.h:20。全工程仅此一处出现,当前未被任何代码使用 |
本文件不含结构体、枚举、联合体定义,也不声明任何全局变量。
3. 函数清单
本文件只有函数声明,没有任何函数定义。
| 函数名 | 作用域(static/全局) | 说明(一句话) |
|---|---|---|
led_test_color_cycle | 全局(声明,hmi/led/app_led.h:42) | 灯带颜色循环自检函数;全工程只有这一处声明,没有任何定义 |
led_display_task | 全局(声明,hmi/led/app_led.h:43) | 灯带刷新任务函数,定义于 hmi/led/app_led.c:68 |
4. 核心逻辑解析
本文件是纯声明头,无逻辑。相关的时序约定:
LED_TASK_PERIOD(10) 暗示调用方应以 10 ms 为节拍调用led_display_task(),但当前工程中没有任何任务调用它(见 5、6 节的调用点核查),且app_led.c内部并不使用该宏 —— 实际刷新节拍由led_display_task()自己的 1000 ms 强制刷新 + 状态变化触发决定。led_test_color_cycle()无定义,一旦有代码调用会在链接期报undefined symbol。
5. 对外接口
本文件导出(供外部使用)
| 名称 | 类型 | 使用方 |
|---|---|---|
led_test_color_cycle | 函数声明(无定义) | 无调用点 |
led_display_task | 函数声明 | 无调用点(全工程 grep 只命中 app_led.c:68 的定义与 app_led.h:43 的声明) |
LED_TASK_PERIOD | 宏 | 无使用点 |
本文件间接暴露(通过 include 传递)
| 名称 | 来源 | 说明 |
|---|---|---|
led_color_t、STATUS_LED_COLOR_E、SOC_LED_COLOR_E、SYS_COLOR_*、SOC_COLOR_*、sys_current_status_color | hmi/led/app_led_cfg.h | 颜色定义与系统状态色全局量,hmi/led/app_led.h:16 |
WS2812_FLAG_U、RKP_LED_NUM、LED_SOC_NUM、LED_LONG_NUM、LED_BITS、LED_BUFFER_SIZE、T0_PULSE/T1_PULSE、g_u16_ws2812_data、g_u_ws2812_flag、ws2812_*() | hmi/led/led_dev.h(经 app_led_cfg.h → led_dev.h) | WS2812 编码层 |
6. 依赖关系
- 依赖:
app_led_cfg.h(hmi/led/app_led.h:16)→ 进而led_dev.h、chip.h、includes.h、bms.h、ems.h。 - 被依赖:
hmi/led/app_led.c:13hmi/led/led_dev.c:51hmi/led.h:17(从而hmi/led.c、hmi/key.c、system/board_init/board_init.c、midware/debug/board_test.c均间接看到)midware/interface/modbus/modbus.c:45(#include "app_led.h")
7. 备注与风险点
led_test_color_cycle()声明了但没有实现,也没有调用点,属于典型的"占位后未完成"代码。LED_TASK_PERIOD定义了但没有任何引用,led_display_task()也没有被任何 uCOS-II 任务调用(user/main.c中创建的 16 个任务里没有 LED 灯带任务)。这意味着 WS2812 灯带初始化后(system/board_init/board_init.c:242调用ws2812_init())再也不会被刷新,hmi/led/app_led.c、app_led_cfg.c、led_dev.c三份文件的运行期逻辑实际处于未接线状态。- 文件头注释块(
hmi/led/app_led.h:2)写的是File Name: app_led_cfg.h,与真实文件名app_led.h不符(本目录 6 个文件的注释头存在相互复制粘贴的错误,见各文件对应文档)。 - 头文件
#include链把ems.h(网络层)与bms.h(设备中间件)拉进来,仅为了转发app_led_cfg.h的依赖,耦合面偏大。