ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

mavlink协议CRC校验

2022-03-10 11:31:21  阅读:246  来源: 互联网

标签:const crc checksum mavlink 校验 CRC uint16 uint8 accumulate


 1 // ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
 2 //
 3 
 4 #include <iostream>
 5 #define X25_INIT_CRC 0xffff
 6 inline void crc_accumulate(uint8_t data, uint16_t *crcAccum)
 7 {
 8     uint8_t tmp;
 9     tmp = data ^ (uint8_t)(*crcAccum & 0xff);
10     tmp ^= (tmp << 4);
11     *crcAccum = (*crcAccum >> 8) ^ (tmp << 8) ^ (tmp << 3) ^ (tmp >> 4);
12 }
13 inline void crc_init(uint16_t* crcAccum)
14 {
15     *crcAccum = X25_INIT_CRC;
16 }
17 inline uint16_t crc_calculate(const uint8_t* pBuffer, uint16_t length)
18 {
19     uint16_t crcTmp;
20     crc_init(&crcTmp);
21     while (length--) {
22         crc_accumulate(*pBuffer++, &crcTmp);
23     }
24     return crcTmp;
25 }
26 inline void crc_accumulate_buffer(uint16_t *crcAccum, const char *pBuffer, uint16_t length)
27 {
28     const uint8_t *p = (const uint8_t *)pBuffer;
29     while (length--) {
30         crc_accumulate(*p++, crcAccum);
31     }
32 }
33 #ifndef MAVLINK_MESSAGE_CRCS
34 #define MAVLINK_MESSAGE_CRCS {50, 124, 137, 0, 237, 217, 104, 119, 117, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 137, 214, 159, 220, 168, 24, 23, 170, 144, 67, 115, 39, 246, 185, 104, 237, 244, 222, 212, 9, 254, 230, 28, 28, 132, 221, 232, 11, 153, 41, 39, 78, 196, 132, 0, 15, 3, 0, 0, 0, 0, 0, 167, 183, 119, 191, 118, 148, 21, 0, 243, 124, 0, 0, 38, 20, 158, 152, 143, 0, 0, 14, 106, 49, 22, 143, 140, 5, 150, 0, 231, 183, 63, 54, 47, 0, 0, 0, 0, 0, 0, 175, 102, 158, 208, 56, 93, 138, 108, 32, 185, 84, 34, 174, 124, 237, 4, 76, 128, 56, 116, 134, 237, 203, 250, 87, 203, 220, 25, 226, 46, 29, 223, 85, 6, 229, 203, 1, 195, 109, 168, 181, 47, 72, 131, 127, 0, 103, 154, 178, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 163, 105, 151, 35, 150, 179, 0, 0, 0, 0, 0, 90, 104, 85, 95, 130, 184, 81, 8, 204, 49, 170, 44, 83, 46, 0}
35 #endif
36 static const uint8_t mavlink_message_crcs[256] = MAVLINK_MESSAGE_CRCS;
37 int main()
38 {
39     unsigned char *buff =(unsigned char*) "\xFE\x19\x3B\x01\x01\x16\x00\xA0\x8C\x45\x36\x04\x87\x01\x4D\x4E\x54\x5F\x41\x4E\x47\x4D\x41\x58\x5F\x50\x41\x4E\x00\x00\x04\xE2\xD6";
40     uint16_t checksum;
41     uint8_t ck[2];
42     checksum = crc_calculate((const uint8_t*)&buff[1], 5);
43     crc_accumulate_buffer(&checksum, (const char *)&buff[6], buff[1]);
44     crc_accumulate(mavlink_message_crcs[buff[5]], &checksum);
45     ck[0] = (uint8_t)(checksum & 0xFF);
46     ck[1] = (uint8_t)(checksum >> 8);
47     printf("%02x\n", ck[0]);
48     printf("%02x\n", ck[1]);
49     system("pause");
50     return 0;
51 }

 

标签:const,crc,checksum,mavlink,校验,CRC,uint16,uint8,accumulate
来源: https://www.cnblogs.com/gushandujian/p/15988739.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有