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

下载链接

下载链接(点击阅读原文):参数管理框架源码

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
要回答关于函数func的问题,首先需要了解其C语言代码框架和过程体。函数func的C语言代码框架通常包括函数名、返回类型、参数列表和过程体。 函数名是函数的标识符,用于引用和调用函数。返回类型指定了函数返回的结果类型,可以是整数、浮点数、字符等。参数列表包括了函数所需的输入参数,可以是零个或多个参数,每个参数都有自己的类型和名称。过程体是函数的具体实现,其中包含了一系列语句和表达式,用来完成特定的任务。 在使用函数func之前,需要先声明其原型,即函数的名称、返回类型和参数列表。通过声明函数原型,可以在主程序中使用函数func的调用。 在函数的过程体中,可以使用C语言的各种语句和表达式来实现特定的功能。例如,可以使用赋值语句给变量赋值,使用条件语句判断特定条件是否满足,使用循环语句实现循环操作等等。 函数func的执行过程通常分为以下几步:首先,根据参数列表定义函数的形式参数,并分配内存空间。然后,按照代码框架中的语句和表达式执行相应的操作。在过程体中可以调用其他函数或操作数据,并使用控制流语句进行条件判断和循环操作。最后,根据返回类型的要求,将函数的结果返回给调用者。 总而言之,函数func的C语言代码框架和过程体提供了一种定义和实现特定功能的机制。通过合理编写函数体,可以实现各种不同的功能需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大橙子疯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值