车辆状态信息

当然可以!以下是将你提供的车辆状态信息转换为 C 语言模块 的完整实现,包含 vehicle_status.hvehicle_status.c 两个文件,采用模块化、可重用、适合嵌入式系统的设计风格。


vehicle_status.h

/**
 * @file vehicle_status.h
 * @brief 车辆状态信息显示模块 - 头文件
 * 
 * 定义车辆各功能模块的状态项结构及对外接口。
 */

#ifndef VEHICLE_STATUS_H
#define VEHICLE_STATUS_H

#include <stddef.h>  // for size_t

/**
 * @brief 单个状态项结构体
 */
typedef struct {
    const char* item_name;   ///< 功能项名称(如"电池信息")
    const char* status;      ///< 当前状态字符串(如"显示正常")
} VehicleStatusItem;

/**
 * @brief 获取状态项数组的指针
 * @return 指向静态状态项数组的指针
 */
const VehicleStatusItem* vehicle_status_get_list(void);

/**
 * @brief 获取状态项总数
 * @return 状态项数量
 */
size_t vehicle_status_get_count(void);

/**
 * @brief 检查所有状态是否均为“显示正常”
 * @return 1 表示全部正常,0 表示存在异常
 */
int vehicle_status_is_all_normal(void);

#endif // VEHICLE_STATUS_H

vehicle_status.c

/**
 * @file vehicle_status.c
 * @brief 车辆状态信息显示模块 - 实现文件
 */

#include "vehicle_status.h"
#include <string.h>  // for strcmp

// 静态状态项数据(只读,编译期初始化)
static const VehicleStatusItem s_vehicle_status_list[] = {
    {"电池信息", "显示正常"},
    {"电机信息", "显示正常"},
    {"车速信号(转速、精度确认)", "显示正常"},
    {"ready挡信号", "显示正常"},
    {"挡位信号(仪表应该显示实际档位)", "显示正常"},
    {"SOC信号", "显示正常"},
    {"总里程信号", "显示正常"},
    {"故障码信号(历史故障码)", "显示正常"},
    {"急停开关信号", "显示正常"},
    {"取力器、变速箱信息", "显示正常"},
    {"充电状态", "显示正常"},
    {"货箱升起状态", "显示正常"},
    {"灯光信息(所有灯光提示)", "显示正常"},
    {"变速箱相关信息", "显示正常"},
    {"前后桥制动力压", "显示正常"},
    {"制动信号", "显示正常"},
    {"胎压", "显示正常"},
    {"软件版本", "显示正常"},
    {"工作时间", "显示正常"},
    {"内部重要参数", "显示正常"}
};

// 计算数组元素个数
static const size_t s_vehicle_status_count = 
    sizeof(s_vehicle_status_list) / sizeof(s_vehicle_status_list[0]);

// 对外接口实现
const VehicleStatusItem* vehicle_status_get_list(void) {
    return s_vehicle_status_list;
}

size_t vehicle_status_get_count(void) {
    return s_vehicle_status_count;
}

int vehicle_status_is_all_normal(void) {
    for (size_t i = 0; i < s_vehicle_status_count; ++i) {
        if (strcmp(s_vehicle_status_list[i].status, "显示正常") != 0) {
            return 0; // 发现异常项
        }
    }
    return 1; // 全部正常
}

✅ 使用示例(main.c

#include <stdio.h>
#include "vehicle_status.h"

int main(void) {
    const VehicleStatusItem* list = vehicle_status_get_list();
    size_t count = vehicle_status_get_count();

    printf("=== 车辆状态信息 ===\n");
    for (size_t i = 0; i < count; ++i) {
        printf("%-35s : %s\n", list[i].item_name, list[i].status);
    }

    if (vehicle_status_is_all_normal()) {
        printf("\n✅ 所有状态正常。\n");
    } else {
        printf("\n⚠️  存在异常状态!\n");
    }

    return 0;
}

🔧 编译命令(以 GCC 为例)

gcc main.c vehicle_status.c -o vehicle_status_demo
./vehicle_status_demo

💡 特点说明

  • 封装性好:数据 s_vehicle_status_liststatic,外部只能通过接口访问。
  • 只读安全:使用 const 防止意外修改。
  • 可扩展:未来若需支持动态更新状态,只需将 status 改为非常量,并提供 set_status() 接口。
  • 嵌入式友好:无动态内存分配,适合资源受限环境。

思考:

  • 支持动态更新状态(例如从 CAN 总线读取后更新)
  • 添加错误码或优先级字段
  • 导出为 JSON 或用于通信协议

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐