double mypow(double num,double n)
{
double value =1;
int i =1;
if(n ==0)
{
value =1;
}
else
{
while(i++<= n)
{
value *= num;
}
}
return value;
}
/*******************************************************************************
* @函数名称 calBatPercentVal
* @函数说明 根据修正参数数组计算电池电量百分比,插值计算
* @输入参数 advalGot-获得的AD值
* @输出参数 电池电量百分比值
* @返回参数 无
*****************************************************************************/
float calBatPercentVal(uint16_t advalGot)//根据修正参数数组计算电池电量百分比,插值计算
{
uint8_t tmpCtr; //循环控制变量
uint8_t inx, inx2; //插值区间编号
float ReturnVal; //函数返回值
uint8_t Len=11;
//寻找插值区间
inx = 0;
for (tmpCtr = 0; tmpCtr < Len-1; tmpCtr++)
{
if ((advalGot >= ADVal_axis[tmpCtr])
&& (advalGot < ADVal_axis[tmpCtr + 1]))
{
inx = tmpCtr;
break;
}
else if (advalGot >= ADVal_axis[Len-1])
{
inx = Len - 2;
break;
}
}
inx2 = inx + 1;
//计算插值
ReturnVal = Percent_axis[inx2] - ((ADVal_axis[inx2] - advalGot) * (Percent_axis[inx2] - Percent_axis[inx]) / (ADVal_axis[inx2] - ADVal_axis[inx]));
ReturnVal = (int)(ReturnVal+0.5)>(int)ReturnVal?(int)(ReturnVal+1):(int)ReturnVal;//四舍五入取整
return ReturnVal;
}
/*=======================================================
函数名:
参 数: uint8_t *ptr :待计算CRC值的数组起始地址
uint8_t count:待计算CRC值的数据长度
返回值: uint8_t :CRC计算结果
功能描述: 计算数据串的CRC值
=========================================================*/
uint8_t Calcrc1(uint8_t *ptr,uint8_t count)
{
//count 是待求CRC 校验码的字节数
uint8_t i,a,b ;
uint8_t crc=0x00 ;
uint8_t crc1 ;
//指向数组中连续的三个字符(byte),8 位的
ptr[count]=0x00 ;
while(count>0)
{
count--;
crc1=*ptr++;
//在while 中补充下一个字符(8 个bit)
for(i=0;i<8;++i)
{
//判断crc1 高位是否为1
if(crc1&0x80)
{
crc=crc^0x01 ;
}
crc1=crc1<<1 ;
if(crc&0x01)
{
crc=crc^0x18 ;
}
a=crc<<7 ;
b=crc>>1 ;
crc=b|a ;
}
}
return(crc);
}