#define BATTERY_VALUE_SUM_COUNTER_MAX (100L)
static u16 battery_value_tab[BATTERY_VALUE_SUM_COUNTER_MAX];
static u16 get_battery_level_average()
{
static u32 prev_bat = 0;
u32 max_bat = 0;
u32 battery_value_sum = 0;
///自己做100次累加值,再取平均
u32 avg_bat = battery_value_sum/BATTERY_VALUE_SUM_COUNTER_MAX;
u32 tmp_bat = 0;
/* printf("1-prev_bat:%d..max_bat:%d..avg_bat:%d...\n", */
/* prev_bat,max_bat,avg_bat); */
if(MAX(max_bat,avg_bat) - MIN(max_bat,avg_bat) < 8){
///波动很小,直接返回avg_bat
}else if(MAX(max_bat,avg_bat) - MIN(max_bat,avg_bat) < 20){
avg_bat = MAX(max_bat,avg_bat);
prev_bat = avg_bat;
}else{
tmp_bat = prev_bat;
prev_bat = (avg_bat * 10 + max_bat * 10)/20;
avg_bat = tmp_bat;
}
/* printf("2-prev_bat:%d..max_bat:%d..avg_bat:%d---\n", */
/* prev_bat,max_bat,avg_bat); */
return avg_bat;///(battery_value_sum/BATTERY_VALUE_SUM_COUNTER_MAX);
}