mypow、插值计算、CRC校验和函数

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);
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值