C语言参数管理代码框架
扫描二维码
随时随地手机看文章
前言
作为嵌入式的软件开发工程师,基本都会对参数的概念都不会陌生。
很多功能使用的变量都需要在程序运行过程中改变,掉电重启后还需要恢复原来的状态,就需要这些变量能够保存起来,写入flash或eeprom等储存芯片中,待程序重新运行时读取,这部分保存起来的变量通常称为参数。
参数可区分功能性配置、性能配置和软件内部实现;功能性配置和性能配置参数是指给提供客户关闭功能,配置性能的配置。
软件内部实现的参数配置,一般用于研发内部客户或维护部门故障排查和维护,不随意提供给外部。
外部的功能和性能配置参数,可提供客户进行修改,部分对于重要参数或因为商务原因,一般建议提供加密方法(不可见或超级管理员密码设置),不建议让客户随意配置
当然,参数并不是简单的保存和读取恢复,由于参数通常关系到软件的运行状态,因此对参数这部分的处理自然与普通变量有所不同,通常需要对参数从储存芯片中读取后做校验,防止掉电写入后的数据发生变化;
常规做法就是判断参数的取值范围,一旦超出范围,就需要缺省值恢复,防止程序运行出现严重异常问题。
介绍
参数管理框架代码,代码主要特点有:
采用表驱动方式统一管理所有参数,包括缺省值、最小值和最大值等
采用宏定义快速注册和添加参数进行管理
支持基本类型参数和字符串参数
支持序列化和反序列化,便于保存和读取校验
可通过串口协议或其他协议调用接口修改参数
代码示例
部分demo代码如下,阅读全部代码可下载源码。
PARAM_DEFINE (test, PARAM_INT16, 10, -100, 100); PARAM_DEFINE (test_2, PARAM_UINT16, 20, 0, 100); PARAM_DEFINE (test_3, PARAM_DOUBLE, 3.15, -10.5, 10.5); PARAM_DEFINE_STR (test_str, 10, "abcdef"); const ParamInfo_t sg_tParamList[]= { PARAM_REG(1, test, PARAM_INT16), PARAM_REG(2, test_2, PARAM_UINT16), PARAM_REG(3, test_3, PARAM_DOUBLE), PARAM_STR_REG(4, test_str), }; static ParamTable_t sg_tParamTable = {sg_tParamList, sizeof(sg_tParamList) / sizeof(sg_tParamList[0])}; int main () { uint32_t data = 16; double fdata = 7.25; uint8_t databuf[8]; InitAllParam(); ShowAllParam(); printf("\nModify: \n"); memcpy(databuf, &data, sizeof(data)); ModifyByName("test_2", databuf); memcpy(databuf, &fdata, sizeof(fdata)); ModifyByName("test_3", databuf); ShowAllParam(); printf("\nReset: \n"); ResetParam(); ShowAllParam(); return 0; }
下载链接
下载链接(点击阅读原文):https://gitee.com/const-zpc/param/tree/master





