求最近10次平均值

static void calculate_average_vol(void)
{
static u32 Fre_average_val=0,Fre_change_val=0;
static u32 Fre_averagelast_val=0;
static u32 Fre_val_buf[10];

if(Fre_average_val >= sys.energyValue)
{
	Fre_change_val = Fre_average_val - sys.energyValue;
}
else
{
	Fre_change_val = sys.energyValue - Fre_average_val;
}
if(Fre_change_val < 100) //--100范围内,不抖动
{
	sys.energyValue = Fre_averagelast_val;
}
else
{	
	u8 i=0;
	u32 sum=0;
	u32	Fre_averagecurr_val=0;
	u32	Fre_averchange_val=0;
	for(i = 9; i > 0; i--)//--移位
	{
		Fre_val_buf[i] = Fre_val_buf[i-1];
	}
	Fre_val_buf[0] = sys.energyValue;

	for(i = 0; i < 10; i++)//--求平均值
	{
		sum = sum + Fre_val_buf[i];
	}	
	Fre_average_val = sum / 10;
	Fre_averagecurr_val = Fre_average_val;
	if(Fre_average_val >= sys.energyValue)
	{
		Fre_averchange_val = Fre_average_val - sys.energyValue;
	}
	else
	{
		Fre_averchange_val = sys.energyValue - Fre_average_val;
	}
	if(Fre_averchange_val > 1000)
	{
		sys.energyValue = 0;
	}
	else
	{
		sys.energyValue = Fre_averagecurr_val;	
		Fre_averagelast_val = sys.energyValue;
	}

		
}	

}

你可能感兴趣的:(驱动)