|
在stm32h743系统,运行了RTX操作系统,然后DMA双缓冲方式 进行ADC采样。 HAL_ADC_ConvCpltCallback 函数中做一下ADC采样值的简单计算,
如以下代码, 之前 f1已经把ADC的数值读过来了。
优化选-0,都正常。
优化选-1,运行第1处,debug模式无法读取f1数值了,运行第2处,f2直接为0.
static void Calc_Batt_Capacity(uint16_t *pDat)
{
float f1, f2;
int i;
static float Battery_Voltage_Sum;
static uint8_t Battery_Voltage_Cycle;
// 求平均
f1 = 0;
for (i = 0; i < Battery_Voltage_Data_Buffer_Size; i++)
{
f1 += *pDat++;
}
f1 /= Battery_Voltage_Data_Buffer_Size;
// 电池电压
f1 = f1 * 11.0f * ADC_Ref_mV / ADC_FullScale; // 第1处
// 比例
f2 = (f1 - 23100.0f) / (29400.0f - 23100.0f); // 第2处
// 百分比
f2 = f2 * 100.0f;
if (f2 < 0)
{
f2 = 0;
Battery_Capacity = f2;
}
else if (f2 > 100.0f)
{
f2 = 100.0f;
Battery_Capacity = f2;
}
else //if(f2>=0 && f2 <=100.0f )
{
Battery_Voltage_Cycle++;
Battery_Voltage_Sum += f2;
if (Battery_Voltage_Cycle >= 5)
{
f2 = Battery_Voltage_Sum / Battery_Voltage_Cycle;
Battery_Voltage_Sum = 0;
Battery_Voltage_Cycle = 0;
Battery_Capacity = f2;
}
}
}
真是想不明白,哪儿的问题了
|
|