mirror of
https://gitee.com/const-zpc/param.git
synced 2025-02-06 04:38:21 +08:00
✨ feat: 增加已定义变量的参数绑定实现,如结构体的成员变量
This commit is contained in:
parent
761e5b4b60
commit
75809f74eb
@ -66,6 +66,14 @@ int OnSaveCallback(const uint8_t *pBuf, uint16_t len, bool isFinish)
|
||||
|
||||
/****************************************** 模拟储存设备操作 ******************************************************/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16_t test1;
|
||||
float test2;
|
||||
char str[20];
|
||||
}ParamDemo_t;
|
||||
|
||||
static ParamDemo_t sg_tTest;
|
||||
|
||||
|
||||
PARAM_DEFINE_DAT (g_test, PARAM_INT16, 10);
|
||||
@ -76,6 +84,9 @@ PARAM_DEFINE_DAT_RANGE (g_test_4, PARAM_INT8, 8, -10, 10);
|
||||
PARAM_DEFINE_DAT_RANGE (g_test_5, PARAM_UINT32, 620, 500, 10000);
|
||||
PARAM_DEFINE_DAT_RANGE (g_test_6, PARAM_UINT8, 45, 5, 100);
|
||||
PARAM_DEFINE_DAT_RANGE (g_test_7, PARAM_INT64, 5, -542, 5450);
|
||||
PARAM_DEFINE_BIND_DAT_RANGE(sg_tTest_test1, PARAM_UINT16, 20, 10, 2000); // 为即将绑定的变量定义相关参数信息
|
||||
PARAM_DEFINE_BIND_DAT(sg_tTest_test2, PARAM_FLOAT); // 为即将绑定的变量定义相关参数信息,初值为sg_tTest 变量定义时的初值
|
||||
PARAM_DEFINE_BIND_STR_RANGE(sg_tTest_str, sizeof(sg_tTest.str), "const-zpc", 6);
|
||||
|
||||
ParamInfo_t sg_ParamTable[] = {
|
||||
PARAM_ITEM_DAT(1, g_test, PARAM_ATTR_WR),
|
||||
@ -86,6 +97,9 @@ ParamInfo_t sg_ParamTable[] = {
|
||||
PARAM_ITEM_DAT_RANGE(6, g_test_5, PARAM_ATTR_WR),
|
||||
PARAM_ITEM_DAT_RANGE(7, g_test_6, PARAM_ATTR_WR),
|
||||
PARAM_ITEM_DAT_RANGE(8, g_test_7, PARAM_ATTR_WR),
|
||||
PARAM_ITEM_DAT_RANGE_BIND(9, sg_tTest_test1, sg_tTest.test1, PARAM_ATTR_WR),
|
||||
PARAM_ITEM_DAT_BIND(10, sg_tTest_test2, sg_tTest.test2, PARAM_ATTR_WR),
|
||||
PARAM_ITEM_STR_RANGE_BIND(11, sg_tTest_str, sg_tTest.str, PARAM_ATTR_WR),
|
||||
};
|
||||
|
||||
|
||||
|
@ -11,6 +11,9 @@ PARAM_EXTERN_DAT(g_test_4, PARAM_INT8);
|
||||
PARAM_EXTERN_DAT(g_test_5, PARAM_UINT32);
|
||||
PARAM_EXTERN_DAT(g_test_6, PARAM_UINT8);
|
||||
PARAM_EXTERN_DAT(g_test_7, PARAM_INT64);
|
||||
PARAM_EXTERN_BIND_DAT(sg_tTest_test1, PARAM_UINT16);
|
||||
PARAM_EXTERN_BIND_DAT(sg_tTest_test2, PARAM_FLOAT);
|
||||
PARAM_EXTERN_BIND_STR(sg_tTest_str, 20);
|
||||
|
||||
|
||||
#define PARAM_UPDATE(name, val, ret) {\
|
||||
|
@ -64,6 +64,44 @@
|
||||
const type##_T min_##name = minVal;\
|
||||
const type##_T max_##name = maxVal;
|
||||
|
||||
/**
|
||||
* @brief 为已定义的变量定义参数相关信息
|
||||
*
|
||||
* @param name 参数名(变量名)
|
||||
* @param type 参数类型 @enum ParamType_e 取值
|
||||
*/
|
||||
#define PARAM_DEFINE_BIND_DAT(name, type) \
|
||||
enum {PARAM_TYPE_##name = type};\
|
||||
enum {PARAM_INIT_ATTR_##name = 0};
|
||||
|
||||
/**
|
||||
* @brief 为已定义的变量定义参数相关信息, 具有默认值
|
||||
*
|
||||
* @param name 参数名(变量名)
|
||||
* @param type 参数类型 @enum ParamType_e 取值
|
||||
* @param defVal 默认值
|
||||
*/
|
||||
#define PARAM_DEFINE_BIND_DAT_DEF(name, type, defVal) \
|
||||
enum {PARAM_TYPE_##name = type};\
|
||||
enum {PARAM_INIT_ATTR_##name = (PARAM_ATTR_RESET)};\
|
||||
const type##_T def_##name = defVal;
|
||||
|
||||
/**
|
||||
* @brief 为已定义的变量定义参数相关信息, 具有默认值和范围校验
|
||||
*
|
||||
* @param name 参数名(变量名)
|
||||
* @param type 参数类型 @enum ParamType_e 取值
|
||||
* @param defVal 默认值
|
||||
* @param minVal 最小值
|
||||
* @param maxVal 最大值
|
||||
*/
|
||||
#define PARAM_DEFINE_BIND_DAT_RANGE(name, type, defVal, minVal, maxVal) \
|
||||
enum {PARAM_TYPE_##name = type};\
|
||||
enum {PARAM_INIT_ATTR_##name = (PARAM_ATTR_RANGE | PARAM_ATTR_RESET)};\
|
||||
const type##_T def_##name = defVal;\
|
||||
const type##_T min_##name = minVal;\
|
||||
const type##_T max_##name = maxVal;
|
||||
|
||||
#if PARAM_USE_STRING_TYPE
|
||||
/**
|
||||
* @brief 定义字符串参数
|
||||
@ -77,7 +115,7 @@
|
||||
char name[length] = {defVal};\
|
||||
|
||||
/**
|
||||
* @brief 定义字符串参数
|
||||
* @brief 定义字符串参数, 具有默认值
|
||||
*
|
||||
* @param name 参数名(变量名)
|
||||
* @param length 字符串预留最大长度(包括结束符'\0')
|
||||
@ -102,12 +140,50 @@
|
||||
const char def_##name[] = {defVal};\
|
||||
const param_size_t min_##name = minLength;\
|
||||
const param_size_t max_##name = length - 1;
|
||||
|
||||
|
||||
/**
|
||||
* @brief 为已定义的字符串变量定义参数相关信息
|
||||
*
|
||||
* @param name 参数名(变量名)
|
||||
* @param length 字符串预留最大长度(包括结束符'\0')
|
||||
* @param initVal 初始值
|
||||
*/
|
||||
#define PARAM_DEFINE_BIND_STR(name, length) \
|
||||
enum {PARAM_INIT_ATTR_##name = 0};
|
||||
|
||||
/**
|
||||
* @brief 为已定义的字符串变量定义参数相关信息, 具有默认值
|
||||
*
|
||||
* @param name 参数名(变量名)
|
||||
* @param length 字符串预留最大长度(包括结束符'\0')
|
||||
* @param defVal 默认值
|
||||
*/
|
||||
#define PARAM_DEFINE_BIND_STR_DEF(name, length, defVal) \
|
||||
enum {PARAM_INIT_ATTR_##name = (PARAM_ATTR_RESET)};\
|
||||
const char def_##name[] = {defVal};
|
||||
|
||||
/**
|
||||
* @brief 为已定义的字符串变量定义参数相关信息, 具有默认值和长度校验
|
||||
*
|
||||
* @param name 参数名(变量名)
|
||||
* @param length 字符串预留最大长度(包括结束符'\0')
|
||||
* @param defVal 默认值
|
||||
* @param minLength 最小长度
|
||||
*/
|
||||
#define PARAM_DEFINE_BIND_STR_RANGE(name, length, defVal, minLength) \
|
||||
enum {PARAM_INIT_ATTR_##name = (PARAM_ATTR_RANGE | PARAM_ATTR_RESET)};\
|
||||
const char def_##name[] = {defVal};\
|
||||
const param_size_t min_##name = minLength;\
|
||||
const param_size_t max_##name = length - 1;
|
||||
|
||||
#endif
|
||||
|
||||
#if (PARAM_NAME_MAX_LENGTH > 1)
|
||||
/**
|
||||
* @brief 普通参数注册
|
||||
*
|
||||
* @attention 对应的宏定义: PARAM_DEFINE_DAT / PARAM_DEFINE_DAT_DEF / PARAM_DEFINE_DAT_RANGE
|
||||
* @param _id 参数唯一 ID
|
||||
* @param _name 参数名(变量名)
|
||||
* @param _attr 参数读/写属性组合(PARAM_ATTR_READ/PARAM_ATTR_WRITE)
|
||||
@ -141,10 +217,52 @@
|
||||
.unDefValuePtr.pVoid = (void *)&def_##_name, \
|
||||
.unMinValuePtr.pVoid = (void *)&min_##_name, \
|
||||
.unMaxValuePtr.pVoid = (void *)&max_##_name}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 为数值变量绑定普通参数进行注册
|
||||
*
|
||||
* @attention 对应的宏定义: PARAM_DEFINE_BIND_DAT / PARAM_DEFINE_BIND_DAT_DEF / PARAM_DEFINE_BIND_DAT_RANGE
|
||||
* @param _id 参数唯一 ID
|
||||
* @param _name 参数名(变量名)
|
||||
* @param variable 需要绑定的已定义变量
|
||||
* @param _attr 参数读/写属性组合(PARAM_ATTR_READ/PARAM_ATTR_WRITE)
|
||||
*/
|
||||
#define PARAM_ITEM_DAT_BIND(_id, _name, _variable, _attr) { .pszName = #_name, \
|
||||
.id = _id, \
|
||||
.type = PARAM_TYPE_##_name, \
|
||||
.length = sizeof(_variable), \
|
||||
.attr = (_attr | PARAM_INIT_ATTR_##_name), \
|
||||
.unCurValuePtr.pVoid = &(_variable), \
|
||||
.unDefValuePtr.pVoid = NULL, \
|
||||
.unMinValuePtr.pVoid = NULL, \
|
||||
.unMaxValuePtr.pVoid = NULL}
|
||||
|
||||
#define PARAM_ITEM_DAT_DEF_BIND(_id, _name, _variable, _attr) { .pszName = #_name, \
|
||||
.id = _id, \
|
||||
.type = PARAM_TYPE_##_name, \
|
||||
.length = sizeof(_variable), \
|
||||
.attr = (_attr | PARAM_INIT_ATTR_##_name), \
|
||||
.unCurValuePtr.pVoid = &(_variable), \
|
||||
.unDefValuePtr.pVoid = (void *)&def_##_name, \
|
||||
.unMinValuePtr.pVoid = NULL, \
|
||||
.unMaxValuePtr.pVoid = NULL}
|
||||
|
||||
#define PARAM_ITEM_DAT_RANGE_BIND(_id, _name, _variable, _attr) { .pszName = #_name, \
|
||||
.id = _id, \
|
||||
.type = PARAM_TYPE_##_name, \
|
||||
.length = sizeof(_variable), \
|
||||
.attr = (_attr | PARAM_INIT_ATTR_##_name), \
|
||||
.unCurValuePtr.pVoid = &(_variable), \
|
||||
.unDefValuePtr.pVoid = (void *)&def_##_name, \
|
||||
.unMinValuePtr.pVoid = (void *)&min_##_name, \
|
||||
.unMaxValuePtr.pVoid = (void *)&max_##_name}
|
||||
|
||||
#if PARAM_USE_STRING_TYPE
|
||||
/**
|
||||
* @brief 字符串参数注册
|
||||
*
|
||||
* @attention 对应的宏定义: PARAM_DEFINE_STR / PARAM_DEFINE_DAT_STR / PARAM_DEFINE_DAT_STR
|
||||
* @param _id 参数唯一 ID
|
||||
* @param _name 参数名(变量名)
|
||||
* @param _attr 参数读/写属性组合(PARAM_ATTR_READ/PARAM_ATTR_WRITE)
|
||||
@ -178,6 +296,45 @@
|
||||
.unDefValuePtr.pVoid = (void *)&def_##_name, \
|
||||
.unMinValuePtr.pVoid = (void *)&min_##_name, \
|
||||
.unMaxValuePtr.pVoid = (void *)&max_##_name}
|
||||
|
||||
/**
|
||||
* @brief 为字符串变量绑定字符串参数进行注册
|
||||
*
|
||||
* @attention 对应的宏定义: PARAM_DEFINE_BIND_STR / PARAM_DEFINE_BIND_DAT_STR / PARAM_DEFINE_BIND_DAT_STR
|
||||
* @param _id 参数唯一 ID
|
||||
* @param _name 参数名(变量名)
|
||||
* @param variable 需要绑定的已定义字符串变量
|
||||
* @param _attr 参数读/写属性组合(PARAM_ATTR_READ/PARAM_ATTR_WRITE)
|
||||
*/
|
||||
#define PARAM_ITEM_STR_BIND(_id, _name, _variabl, _attr) { .pszName = #_name, \
|
||||
.id = _id, \
|
||||
.type = PARAM_STRING, \
|
||||
.length = sizeof(_variabl), \
|
||||
.attr = (_attr | PARAM_INIT_ATTR_##_name), \
|
||||
.unCurValuePtr.pVoid = _variabl, \
|
||||
.unDefValuePtr.pVoid = NULL, \
|
||||
.unMinValuePtr.pVoid = NULL, \
|
||||
.unMaxValuePtr.pVoid = NULL}
|
||||
|
||||
#define PARAM_ITEM_STR_DEF_BIND(_id, _name, _variabl, _attr) { .pszName = #_name, \
|
||||
.id = _id, \
|
||||
.type = PARAM_STRING, \
|
||||
.length = sizeof(_variabl), \
|
||||
.attr = (_attr | PARAM_INIT_ATTR_##_name), \
|
||||
.unCurValuePtr.pVoid = _variabl, \
|
||||
.unDefValuePtr.pVoid = (void *)&def_##_name, \
|
||||
.unMinValuePtr.pVoid = NULL, \
|
||||
.unMaxValuePtr.pVoid = NULL}
|
||||
|
||||
#define PARAM_ITEM_STR_RANGE_BIND(_id, _name, _variabl, _attr) { .pszName = #_name, \
|
||||
.id = _id, \
|
||||
.type = PARAM_STRING, \
|
||||
.length = sizeof(_variabl), \
|
||||
.attr = (_attr | PARAM_INIT_ATTR_##_name), \
|
||||
.unCurValuePtr.pVoid = _variabl, \
|
||||
.unDefValuePtr.pVoid = (void *)&def_##_name, \
|
||||
.unMinValuePtr.pVoid = (void *)&min_##_name, \
|
||||
.unMaxValuePtr.pVoid = (void *)&max_##_name}
|
||||
#endif
|
||||
#else
|
||||
|
||||
@ -270,6 +427,18 @@
|
||||
const extern type##_T min_##name;\
|
||||
const extern type##_T max_##name;
|
||||
|
||||
/**
|
||||
* @brief 绑定的数值参数声明
|
||||
*
|
||||
* @param name 参数名(变量名)
|
||||
* @param type 参数类型 @enum ParamType_e 取值
|
||||
*/
|
||||
#define PARAM_EXTERN_BIND_DAT(name, type) \
|
||||
typedef type##_T param_##name##_t;\
|
||||
const extern type##_T def_##name;\
|
||||
const extern type##_T min_##name;\
|
||||
const extern type##_T max_##name;
|
||||
|
||||
/**
|
||||
* @brief 字符串参数声明
|
||||
*
|
||||
@ -283,6 +452,18 @@
|
||||
const extern param_size_t min_##name;\
|
||||
const extern param_size_t max_##name;
|
||||
|
||||
/**
|
||||
* @brief 绑定的字符串参数声明
|
||||
*
|
||||
* @param name 参数名(变量名)
|
||||
* @param length 字符串预留最大长度
|
||||
*/
|
||||
#define PARAM_EXTERN_BIND_STR(name, length) \
|
||||
typedef char* param_##name##_t;\
|
||||
const extern char def_##name[];\
|
||||
const extern param_size_t min_##name;\
|
||||
const extern param_size_t max_##name;
|
||||
|
||||
// 根据参数名获取该参数的类型定义
|
||||
#define PARAM_DECLTYPE(name) param_##name##_t
|
||||
|
||||
|
@ -4,6 +4,15 @@
|
||||
#include "unity.h"
|
||||
#include "param.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16_t test1;
|
||||
float test2;
|
||||
char str[20];
|
||||
}ParamDemo_t;
|
||||
|
||||
static ParamDemo_t sg_tTest;
|
||||
|
||||
PARAM_DEFINE_DAT (g_test_1, PARAM_INT16, 10);
|
||||
PARAM_DEFINE_DAT_DEF (g_test_2, PARAM_UINT16, 20);
|
||||
PARAM_DEFINE_DAT_RANGE (g_test_float, PARAM_FLOAT, 3.15, -10, 10);
|
||||
@ -26,6 +35,11 @@ PARAM_DEFINE_DAT_RANGE (g_test_u32, PARAM_UINT32, 1000, 900, 10000);
|
||||
PARAM_DEFINE_DAT_RANGE (g_test_u64, PARAM_UINT64, 8000, 100, 1000000);
|
||||
#endif
|
||||
|
||||
PARAM_DEFINE_BIND_DAT_RANGE(sg_tTest_test1, PARAM_UINT16, 20, 10, 2000); // 为即将绑定的变量定义相关参数信息
|
||||
PARAM_DEFINE_BIND_DAT(sg_tTest_test2, PARAM_FLOAT); // 为即将绑定的变量定义相关参数信息,初值为sg_tTest 变量定义时的初值
|
||||
#if PARAM_USE_STRING_TYPE
|
||||
PARAM_DEFINE_BIND_STR_RANGE(sg_tTest_str, sizeof(sg_tTest.str), "const-zpc", 6);
|
||||
#endif
|
||||
|
||||
ParamInfo_t sg_ParamTable[] = {
|
||||
PARAM_ITEM_DAT(1, g_test_1, PARAM_ATTR_WR),
|
||||
@ -48,6 +62,11 @@ ParamInfo_t sg_ParamTable[] = {
|
||||
PARAM_ITEM_DAT_RANGE(12, g_test_u32, PARAM_ATTR_NONE),
|
||||
#if PARAM_USE_64_BIT_LENGTH
|
||||
PARAM_ITEM_DAT_RANGE(13, g_test_u64, PARAM_ATTR_WR),
|
||||
#endif
|
||||
PARAM_ITEM_DAT_RANGE_BIND(14, sg_tTest_test1, sg_tTest.test1, PARAM_ATTR_WR),
|
||||
PARAM_ITEM_DAT_BIND(15, sg_tTest_test2, sg_tTest.test2, PARAM_ATTR_WR),
|
||||
#if PARAM_USE_STRING_TYPE
|
||||
PARAM_ITEM_STR_RANGE_BIND(16, sg_tTest_str, sg_tTest.str, PARAM_ATTR_WR),
|
||||
#endif
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user