Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

Arduino用の超速CRCチェッカー

CRC(Cyclic Redundancy Check / 巡回冗長符号)は、自前でパケットを作るなら必須の項目です。
これがないと、ダメパケットも受け取ってデータがゴミだらけになったりします。
非力な軽量無線やシリアル線直付けな構成なんかだと、特に。

実際のところ

ただ一々仕様みて実装するのは
Arduino用の超速CRCチェッカーがありました
……いままで泥臭く自力で作っていた僕は一体……??

使い方は、こんな感じ。

/*
  FastCRC-Example
  (c) Frank Boesing 2014
*/

#include <FastCRC.h>

FastCRC32 CRC32;

uint8_t buf[9] = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};

void setup() {

  delay(1500);
  Serial.begin(115200);

  Serial.println("CRC Example");
  Serial.println();

  Serial.print("CRC32 of \"");

  for (unsigned int i = 0; i < sizeof(buf); i++) {
    Serial.print((char) buf[i]);
  }

  Serial.print("\" is: 0x");
  Serial.println( CRC32.crc32(buf, sizeof(buf)), HEX );

}

種類

CRC7、MODBUS、XMODEM用といったよくあるパターンもそのまんま書いてくれているので
態々地獄実装をしなくてすみます。

たとえばPOSIX準拠32bitCRCは
CKSUM, CRC-32/POSIX (poly=0x04c11db7 init=0x00000000 refin=false refout=false xorout=0xffffffff check=0x765e7680)
だそうです。

興味がある方は実装を読んでみても面白いでしょう。