单文件内使用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类型(静态变量), 并实现读/写接口函数。
如果在应用中, 仅需要修改其中一个参数怎么办呢? 其实很简单, 根据上面的类似的方法修改, 增加基于 “基地址偏移量” 读/写的接口函数即可。
*/