日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 大橙子瘋嵌入式


前言

繼上一版參數(shù)管理發(fā)布后,在實際使用中使用起來感覺還是有些繁瑣,而且定義參數(shù)后無形中多了很多參數(shù)枚舉定義,在添加參數(shù)時也需要根據(jù)不同參數(shù)要求使用不同的宏,使用起來依然不便捷。
針對上述問題又重新優(yōu)化了一版,根據(jù)不同參數(shù)要求可以使用相同的宏即可,因此整體在使用的感受上,簡化了使用方式。

利用了”多層宏替換“和”可變參數(shù)宏“等方式實現(xiàn),完成了只需要一兩個宏即可添加不同類型或者不同要求(是否有默認值、最大最小值等)的參數(shù)。

介紹

  • 通過將已定義變量(全局變量)添加到參數(shù)表進行參數(shù)的統(tǒng)一管理,單個參數(shù)包括了當前值、缺省值、最小值、最大值、參數(shù)名和屬性等信息。

  • 根據(jù)不同的場景添加不同要求的參數(shù)

  • 無缺省值、最小值和最大值限制,適合于記錄類型的參數(shù),比如狀態(tài)數(shù)據(jù)或歷史數(shù)據(jù)等

  • 有缺省值,但無最小值和最大值限制,適合于配置類型的參數(shù)

  • 有缺省值,最小值和最大值限制,適合于關(guān)鍵性類型的參數(shù),比如用戶參數(shù)或者關(guān)鍵的狀態(tài)數(shù)據(jù)等

  • 同時若單個參數(shù)表無法滿足參數(shù)數(shù)目或者參數(shù)分類管理,可定義多張參數(shù)表

  • 每張參數(shù)表中的參數(shù)ID唯一,不可重復(fù);不同參數(shù)表ID可以重復(fù)定義

  • 支持兩種參數(shù)類型

  • 數(shù)值類型:int、float、double等基本類型的參數(shù)

  • 字符串類型:char定義用來儲存字符串的數(shù)組

  • 支持參數(shù)校驗

  • 范圍校驗:根據(jù)參數(shù)的最大和最小值進行判斷,數(shù)值類型的參數(shù)則根據(jù)數(shù)值超出范圍判斷。而字符串則是根據(jù)字符串長度超出范圍判斷。

  • 自定義校驗:提供回調(diào)函數(shù),每個參數(shù)可設(shè)置自定義的校驗方式,比如某個參數(shù)需要設(shè)置為多少的倍數(shù),或者根據(jù)其他參數(shù)決定當前參數(shù)的取值范圍等。

  • 向下兼容(鍵值對)

  • 每個參數(shù)都需要指定唯一的ID,在后期版本迭代對參數(shù)表刪除、插入或添加參數(shù)時也能向下兼容,不會影響其他參數(shù)。

  • 啟用鍵值對后序列化的數(shù)據(jù)長度也會比較大,因為每個參數(shù)序列化時包含了ID和長度信息。

  • 可裁剪

  • 根據(jù)不同的平臺,可以對部分功能裁剪,或者修改配置適用于不同容量的芯片進行開發(fā)。

使用說明

以代碼進行展示,如何快速上手使用。

typedef struct { uint16_t usValue; uint8_t ucValue; uint32_t uiValue; float fValue; char szString_1[12]; double dValue; int16_t sValue; int8_t cValue; int32_t iValue; char szString_2[10];
}ParamDemo_t;

ParamDemo_t g_tTestVal = {
 .usValue = 20,
 .ucValue = 10,
 .uiValue = 1000,
 .fValue = 3.14,
 .szString_1 = "abcd",
 .dValue = 5.12,
 .sValue = -100,
 .cValue = -2,
 .iValue = 300,
 .szString_2 = "12234",
}; int8_t g_cTest = 50; char g_szString[10] = "qwer"; static int CheckSValue(const void *pCurParam);

cotParamInfo_t sg_ParamTable[] = {
 COT_PARAM_ITEM_BIND(1, g_tTestVal.usValue, COT_PARAM_UINT16, COT_PARAM_ATTR_WR),
 COT_PARAM_ITEM_BIND(2, g_tTestVal.ucValue, COT_PARAM_UINT8, COT_PARAM_ATTR_WR, 20),
 COT_PARAM_ITEM_BIND(3, g_tTestVal.uiValue, COT_PARAM_UINT32, COT_PARAM_ATTR_WR, 1000, 1000, 10000),
 COT_PARAM_ITEM_BIND(4, g_tTestVal.fValue, COT_PARAM_FLOAT, COT_PARAM_ATTR_WR, 10, -10.5, 10.5),
 COT_PARAM_ITEM_BIND(5, g_tTestVal.szString_1, COT_PARAM_STRING, COT_PARAM_ATTR_WR, "abcd", 3, sizeof(g_tTestVal.szString_1)),
 COT_PARAM_ITEM_BIND(6, g_tTestVal.dValue, COT_PARAM_DOUBLE, COT_PARAM_ATTR_WR, 0, -90.10, 100.10),
 COT_PARAM_ITEM_BIND(7, g_tTestVal.sValue, COT_PARAM_INT16, COT_PARAM_ATTR_WR, 100, -200, 200, CheckSValue), // 添加自定義校驗 COT_PARAM_ITEM_BIND_WITH_NAME(8, "g_cTest", g_cTest, COT_PARAM_INT8, COT_PARAM_ATTR_WR, 50, -100, 100), // 另取參數(shù)名 COT_PARAM_ITEM_BIND(9, g_szString, COT_PARAM_STRING, COT_PARAM_ATTR_WR, "XXX", 3, 6),
}; static int CheckSValue(const void *pCurParam) { const int16_t *p_sValue = (const int16_t *)pCurParam; if ((*p_sValue) % 2 != 0)
 { return -1;
 } return 0;
} int main() {
 cotParam_Init(&sg_tParamManager, sg_ParamTable, COT_PARAM_TABLE_SIZE(sg_ParamTable)); // 對某個變量當前參數(shù)進行范圍校驗,得到校驗結(jié)果后自行處理 cotParam_SingleParamSelfCheck(cotParam_FindParamByParamPtr(&sg_tParamManager, &g_test_3), &eCheckResult); if (eCheckResult != COT_PARAM_CHECK_OK) // 修改后檢查 {
 cotParam_SingleParamResetDefValue(cotParam_FindParamByParamPtr(&sg_tParamManager, &g_test_3)); // 如果校驗失敗,則恢復(fù)為默認值 } // 對某個變量參數(shù)變更后(當前值已經(jīng)變化)進行校驗處理,若超出范圍則恢復(fù)默認 g_test_3 = 1000;
 cotParam_SingleParamCheckProcess(cotParam_FindParamByParamPtr(&sg_tParamManager, &g_test_3), COT_PARAM_RESET_DEF); // 對某個變量參數(shù)在需要變更前(當前值沒有變化)進行校驗處理,得到校驗結(jié)果后自行處理 double tmp = 1000;
 cotParam_SingleParamCheckInput(cotParam_FindParamByParamPtr(&sg_tParamManager, &g_test_3), &tmp, &eCheckResult); if (eCheckResult == COT_PARAM_CHECK_OK)
 {
 g_test_3 = tmp;// 如果校驗成功,則修改 } // 對某個變量參數(shù)在需要變更前(當前值沒有變化)進行校驗處理,若新的值超出范圍則不更新變量參數(shù)當前的值 double tmp = 1000;
 cotParam_SingleParamUpdate(cotParam_FindParamByParamPtr(&sg_tParamManager, &g_test_3), &tmp, COT_PARAM_RESET_NONE)

}

下載鏈接

下載鏈接(點擊閱讀原文),或更新內(nèi)容可看:

https://gitee.com/cot_package/cot_param




本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉