# rt_param **Repository Path**: redocCheng/rt_param ## Basic Information - **Project Name**: rt_param - **Description**: 一个基于 EasyFlash(ENV)的参数持久化模块,面向 RT-Thread 工程使用。 - **Primary Language**: C - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-02-07 - **Last Updated**: 2025-12-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # param 基于 EasyFlash(ENV)的参数持久化模块,面向 RT-Thread 工程使用。 - 英文说明:`README.en.md` ## 功能特性 - 提供简单的 Key-Value 参数持久化(当前实现以 32-bit 整型为主) - 读写互斥保护 - 写入通过消息队列异步落盘,避免在业务线程中直接写 Flash ## 依赖 - RT-Thread:线程/互斥量/消息队列等 IPC 能力(`rtthread.h`) - EasyFlash:ENV 存储(`easyflash.h`) - ulog:日志输出(`ulog.h`) > 注意:本模块不负责初始化 EasyFlash,请确保在调用 `param_init()` 之前已经完成 EasyFlash 初始化。 ## 文件说明 - `param.h`:对外 API 声明 - `param.c`:实现(创建线程、消息队列,调用 EasyFlash ENV 接口) ## 默认配置(`param.c`) - 写入线程优先级:19 - 写入线程栈大小:2048 - 写入线程时间片:400 - 消息队列深度:32 ## 快速上手 1. 将 `param.c`、`param.h` 添加到你的 RT-Thread 工程并参与编译 2. 确保 EasyFlash 已初始化(按你的工程方式调用 `ef_init()` / 启用 ENV) 3. 在系统启动阶段调用 `param_init()` 4. 对每个参数调用 `param_key_value_init()`,随后通过 `param_key_value_set()` 异步写入更新值 示例: ```c #include "param.h" static uint32_t baudrate; static void app_init(void) { /* 先确保 EasyFlash 已初始化(此处以伪代码表示) */ /* ef_init(); */ /* 初始化参数模块(创建线程/互斥量/消息队列) */ param_init(); /* 从 ENV 读取;若不存在则写入默认值并回填到变量 */ param_key_value_init("baudrate", &baudrate, 115200); /* 修改并异步写入 */ baudrate = 9600; param_key_value_set("baudrate", &baudrate); } ``` ## API 说明 - `int param_init(void)`:初始化模块资源(互斥量/消息队列/后台写入线程) - `void param_key_value_init(char *key, uint32_t *value, uint32_t value_default)`:读取参数;不存在则写入默认值 - `void param_key_value_set(char *key, uint32_t *value)`:将 `*value` 异步写入 ENV ## 运行机制与注意事项 - 异步写入:`param_key_value_set()` 仅投递消息,真正写 Flash 在后台线程执行;如对掉电一致性要求高,请在应用层做好“写入完成”的等待/确认机制。 - Key 生命周期:消息队列中保存的是 `key` 指针,建议使用字符串常量或静态存储的字符串,避免传入栈上临时缓冲区。 - 队列容量:默认消息队列深度为 32(见 `param.c`),高频写入场景可能导致投递失败;如需更可靠的行为,可扩展为返回错误码或增大队列。 - 当前类型:对外 API 使用 `uint32_t`;如需支持字符串/结构体等,可参考 EasyFlash 的 `ef_set_env_blob()`/`ef_get_env_blob()` 扩展接口。 ## 许可证 代码文件头部声明为 Apache-2.0(见 `param.c`/`param.h`)。