LVGL-C 实现一个Map临时缓存,便于全局按照键值对存取数据

实现功能描述:

LVGL是基于C语言开发,虽然C语言特性很强大,但是实际项目开发所需要的复杂数据结构自行封装。LVGL是基于面向对象的编程设计框架,所以基于这一思想,巧妙设计一个类似java语言的Map数据结构来缓存临时数据,便于复杂的LVGL GUI 交互进行UI绑定数据。

创建代码文件:map.h map.c

1. 数据结构的结构体封装

点击查看代码
// 定义映射项类型
    typedef struct
    {
        int key;
        void *value;
    } lvgl_mapped_data_t;

    // 分配映射结构体
    typedef struct
    {
        int size;
        lvgl_mapped_data_t *data;
    } lvgl_data_map_t;

2. 相关函数申明

点击查看代码
    #include <stdlib.h>
    #define MAP_SIZE 2 // 大小 取决于 key多少
    #define SPEED_DATA_KEY 0
    #define WATER_DATA_KEY 1

    // 映射表
    static lvgl_data_map_t *map = NULL;
    // 初始化映射表
    void lvgl_data_map_init(int initial_size);
    // 设置映射表
    void lvgl_data_map_set(const int key, void *value);
    // 获取映射表
    void *lvgl_data_map_get(const int key);
    // 释放映射表
    void lvgl_data_map_free();

3. 相关函数定义

点击查看代码

// 按照键值对   key-value  取值的数据结构
/**
 * 初始化映射数据
 */
void lvgl_data_map_init(int initial_size)
{
    map = malloc(sizeof(lvgl_data_map_t));
    map->size = initial_size;
    map->data = malloc(sizeof(lvgl_mapped_data_t) * initial_size);
    // 初始化映射数据
    for (int i = 0; i < initial_size; i++)
    {
        map->data[i].key = i;
        map->data[i].value = NULL;
    }
    return map;
}
/**
 * 添加键值对
 */
void lvgl_data_map_set(const int key, void *value)
{
    if (map == NULL || key < 0 || value == NULL)
        return;
    if (map->data[key].key == key)
    {
        map->data[key].value = value;
    }
}

/**
 * 根据键值对取值
 */
void *lvgl_data_map_get(const int key)
{
    if (map == NULL || key < 0)
        return NULL;
    if (map->data[key].key >= 0)
    {
        return map->data[key].value;
    }
    return NULL;
}
/**
 * 释放映射数据
 */
void lvgl_data_map_free()
{
    if (map == NULL)
        return;
    free(map->data);
    free(map);
}

4. 初始化,函数调用示例:

点击查看代码

    // 初始化MAP(临时缓存) 
    lvgl_data_map_init(MAP_SIZE);
    //按KEY向映射表存数据
    lvgl_data_map_set(SPEED_DATA_KEY, 100);
    lvgl_data_map_set(WATER_DATA_KEY, "23");
    //按KEY从映射表取数据
    PRINT("lvgl_data_map_get SPEED_DATA_KEY = %d \n", lvgl_data_map_get(SPEED_DATA_KEY));
    PRINT("lvgl_data_map_get WATER_DATA_KEY = %s \n", lvgl_data_map_get(WATER_DATA_KEY));

posted @ 2024-12-31 10:10  滴滴小码农~  阅读(107)  评论(0)    收藏  举报