Roc*_*net 5 c microcontroller crc c-preprocessor
我正在为一个只有几个字节RAM的小型8位微控制器编写代码.它有一个简单的工作,即传输7个16位字,然后传输这些字的CRC.在编译时选择单词的值.CRC具体是"字0到字6的除法的余数,因为无符号数除以多项式x ^ 8 +x²+ x + 1(初始值0xFF)."
是否可以使用C预处理器在编译时计算这些字节的CRC ?
#define CALC_CRC(a,b,c,d,e,f,g) /* what goes here? */
#define W0 0x6301
#define W1 0x12AF
#define W2 0x7753
#define W3 0x0007
#define W4 0x0007
#define W5 0x5621
#define W6 0x5422
#define CRC CALC_CRC(W0, W1, W2, W3, W4, W5, W6)
Run Code Online (Sandbox Code Playgroud)
最简单的校验和算法是所谓的纵向奇偶校验,它将数据分成具有固定位数 n 的“字”,然后计算所有这些字的异或。结果作为额外单词附加到消息中。
为了检查消息的完整性,接收方计算其所有字的异或,包括校验和;如果结果不是带有 n 个零的字,则接收方知道发生了传输错误。
(来源:维基百科)
在你的例子中:
#define CALC_LRC(a,b,c,d,e,f) ((a)^(b)^(c)^(d)^(e)^(f))
Run Code Online (Sandbox Code Playgroud)