feat: 增加已定义变量的参数绑定实现,如结构体的成员变量

This commit is contained in:
const_zpc@163.com 2023-06-18 21:43:07 +08:00
parent 761e5b4b60
commit 75809f74eb
4 changed files with 218 additions and 1 deletions

View File

@ -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),
};

View File

@ -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) {\

View File

@ -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

View File

@ -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
};