求助 mega328串口通讯 只要加上crc这段程序就卡死-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1871|回复: 0

[未解决] 求助 mega328串口通讯 只要加上crc这段程序就卡死

[复制链接]
发表于 2021-4-6 08:38 | 显示全部楼层 |阅读模式
char mb_data [ 128 ] = { 0 } ;
int  mb_len = 0 ;
bool mb_state = 1;
void setup() {
  Serial . begin ( 115200 , SERIAL_8N1);
}
void loop() {
  if ( Serial . available ( )  > 0 ) {
    mb_state = 0;
    mb_data [ mb_len ]  = char ( Serial . read ( ) ) ;
    mb_len++ ;
  } else {
    if (!mb_state) {
      while (Serial.read() >= 0);
      uint16_t crc_hy = crc_16 ( mb_data ,  4 );
      Serial . println(crc_hy );
      for (int i = 0  ;  i < mb_len ; i++ ) {
        Serial . print( mb_data[ i ] );
        mb_data[ i ] = 0;
      }
      mb_len = 0 ;
      mb_state = 1;
    }
  }
}
uint16_t crc_16 ( char *data ,  int len )
{
  unsigned int i ,  crc ;
  unsigned int table [ 256 ]  = { 0 } ;
  for ( i = 0 ;  i <=  255 ;  i++ )  {
    table [ i + 1 ]  = 0 ;
    crc = i ;
    for ( int n = 1 ;  n <=  8 ;  n++ )  {
      if ( ( crc & 1 )  !=  0 )  {
        crc = crc >>  1 ^ 40961 ;
      }  else {
        crc = crc >>  1 ;
      }
    }
    table [ i + 1 ]  = crc ;
  }
  crc = 65535 ;
  for ( i = 0 ;  i < len ;  i++ )  {
    crc = (  crc >>  8 )  ^ table [ ( byte ( data [ i ] )  ^ ( crc & 255 ) )  + 1 ] ;
  }
  return (uint16_t(crc)) ;
}

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 10:00 , Processed in 0.097970 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表