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));

浙公网安备 33010602011771号