全局变量的替换方式

单文件内使用static变量或结构体 ,需要外部模块来修改参数的时候,就使用函数接口来实现

///////////////////////////////////////////////////////////////////////////

//举个例子,不加互斥量,如下_

static uint32_t g_cell_voltage = 600;

void set_cell_voltage(uint32_t value)
{
        g_cell_voltage = value;
}

uint32_t get_cell_voltage(void)
{
        return g_cell_voltage;
}
/////////////////////////////////////////////////////////////////////////
/*
//写之前先想好程序架构,分好层次,构思好每个模块的数据结构,在单文件内使用static变量或结构〿
需要外部模块来修改参数的时候,就使用函数接口来实现
*/

使用模块化封装配置“参数”,结构更清晰:

 // 模块接口h文件中:
typedef struct {
  Param_A;
  Param_B;
  Param_C;
} User_Param_Typedef;

bool ModuleName_SetParam(User_Param_Typedef *param);
bool ModuleName_GetParam(User_Param_Typedef *param);

////////////////////////////////////////////////////////////
 // 模块实现c文件中:
static User_Param_Typedef user_param;
static bool user_access_locked;

bool ModuleName_SetParam(User_Param_Typedef *param)
{
  // 此处还可以增加对参数的保护特性
  user_param.Param_A = param->Parma_A;
  user_param.Param_B = param->Parma_B;
  user_param.Param_C = param->Parma_C;
  return true;
}

bool ModuleName_GetParam(User_Param_Typedef *param)
{
  // 此处还可以增加对参数的保护特性
  param->Param_A = user_param.Parma_A;
  param->Param_B = user_param.Parma_B;
  param->Param_C = user_param.Parma_C;
  return true;
}
///////////////////////////////////////////////////////////////
 // app文件中:

...
// 配置参数
User_Param_Typedef  user_param;    // 临时变量(局部变量 ) 或 静态变量
user_param.Param_A = 1;
user_param.Param_B = 2;
user_param.Param_C = 3;
ModuleName_SetParam(&user_param);
...

// 获取参数
ModuleName_GetParam(&user_param);

////////////////////////////////////////////////////////////////////

/*
比如像用于配置的“参数”类的变量, 一般情况下这类模块中的变量会比较多。
这种情况,如果单独封装每个变量的访问API接口,肯定不现实(接口太多了, 不符合模块接口尽量简单化原则)。
可以采用类似于stm32库函数的做法, 对这些参数进行打包封装为“结构体变量”类型, 并在h文件中导出。
在c文件中把这个参数定义为static类型(静态变量), 并实现读/写接口函数。
如果在应用中, 仅需要修改其中一个参数怎么办呢?  其实很简单, 根据上面的类似的方法修改, 增加基于 “基地址偏移量” 读/写的接口函数即可。
*/

你可能感兴趣的:(c语言)