求助 crc16 校验的这段代码 有点看不懂 求大神显灵解救

2019-07-20 09:45发布

uint16_t UpdateCRC16(uint16_t crcIn, uint8_t byte)
{
  uint32_t crc = crcIn;       //crcIn =0;
  uint32_t in = byte|0x100;   //??????2»¶® °Ñμúèyλ(±£Ö¤μúèyλÎa 1 )

  do
  {  
    crc <<= 1;
    in <<= 1;      //êy&#190;Y×óò&#198;ò&#187;&#206;&#187;

    if(in&0x100)   //
    {
      ++crc;      
    }

    if(crc&0x10000)
    {
      crc ^= 0x1021;
    }
} while(!(in&0x10000));

return (crc&0xffffu); //&#206;T·&#251;o&#197;êy&#190;YààDí
}

/**
  * @brief  Cal CRC16 for YModem Packet
  * @param  data
  * @param  length
  * @retval CRC value
  */
uint16_t Cal_CRC16(const uint8_t* data, uint32_t size)
{
  uint32_t crc = 0;
  const uint8_t* dataEnd = data+size; //&#214;&#184;&#207;ò*data μ&#196;&#196;&#169;&#206;2

  while(data<dataEnd)
  {
    crc = UpdateCRC16(crc,*data++);   //&#207;è*data oó*(data+1)
  }
  crc = UpdateCRC16(crc,0);
  crc = UpdateCRC16(crc,0);

  return (crc&0xffffu);
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。