BOOL CalbCurrSensorInitCurr(void) { static UINT16 s_Timer = 0; static INT16 s_siCurr[20] = {0}; INT32 siCurrSum = 0; INT16 siCurrOffset, i; DB_VALUE_T Value; if (TMR_GetTickCount() < 500) { return TRUE; } else if (s_Timer < 20) { s_siCurr[s_Timer] = DB_GetSysData(VID_SYS_CURR_ORG); s_Timer++; return TRUE; } else { for (i = 0; i < 20; i++) { siCurrSum += s_siCurr[i]; } siCurrOffset = siCurrSum / 20; if (BMS_ABS(siCurrOffset) <= PARA_GetUint16(PID_SYS_ALLOW_ZERO_CURR)) { Value.siData = 0 - siCurrOffset; PARA_SetToRam(PID_SYS_CURR_OFFSET, &Value); } } return FALSE; } 优化这段代码
时间: 2023-06-12 07:08:03 浏览: 45
这段代码存在以下几个问题:
1. 函数名不符合命名规范,建议改为 calibrateCurrentSensorOffset。
2. 变量命名不够清晰,建议改为 timer、currentSamples、currentSum、currentOffset。
3. 函数功能不够清晰,建议添加注释或者拆分成更小的函数实现单一功能。
4. 代码中 hardcode 的数字需要提取出来,建议使用常量或者配置参数的方式管理。
优化后的代码如下:
```
#define CURRENT_SAMPLES_NUM 20
/**
* @brief 校准电流传感器偏移量
* @return 是否完成校准
*/
BOOL calibrateCurrentSensorOffset(void) {
static UINT16 timer = 0;
static INT16 currentSamples[CURRENT_SAMPLES_NUM] = {0};
INT32 currentSum = 0;
INT16 currentOffset = 0;
DB_VALUE_T value;
if (TMR_GetTickCount() < 500) {
return TRUE;
} else if (timer < CURRENT_SAMPLES_NUM) {
currentSamples[timer] = DB_GetSysData(VID_SYS_CURR_ORG);
timer++;
return TRUE;
} else {
for (INT16 i = 0; i < CURRENT_SAMPLES_NUM; i++) {
currentSum += currentSamples[i];
}
currentOffset = currentSum / CURRENT_SAMPLES_NUM;
if (BMS_ABS(currentOffset) <= PARA_GetUint16(PID_SYS_ALLOW_ZERO_CURR)) {
value.siData = 0 - currentOffset;
PARA_SetToRam(PID_SYS_CURR_OFFSET, &value);
}
}
return FALSE;
}
```
优化后的代码解决了代码中存在的问题,增加了代码的可读性和可维护性。