Browse Source

添加舵机校验计算工具代码

master
tianjialong 2 years ago
parent
commit
74bf5890db
  1. BIN
      testtool/舵机校验计算工具/a.exe
  2. 75
      testtool/舵机校验计算工具/main.c

BIN
testtool/舵机校验计算工具/a.exe

75
testtool/舵机校验计算工具/main.c

@ -0,0 +1,75 @@
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DATA_ID 2
#define DATA_LEN 3
#define DATA_TYPE 4
#define DATA_CHECKSUM_START 4
/*
* FF FF FE 07 03 2A 08 00 03 E8 DA
* 0xFF 0xFF 0xFF
* ID ID1~250广 ID254
* =ID ++=N+2
*
* 0~N
* 0
*
*
* 2
*
*
* Checksum= (~ (ID + + + 1+ ...+ N)) & 0xFF
**/
uint8_t steering_gear_check_sum(int *buffer, int buffer_size) {
uint8_t checksum;
if (buffer[3] != (buffer_size - 3)) { // buffer_size减3是为了减去两个固定位以及数据长度位
printf("error\n");
return -1;
}
checksum = (buffer[DATA_ID] + buffer[DATA_LEN] + buffer[DATA_TYPE]); //
// checksum把数据长度算里面了
for (int i = 0; i < (buffer[DATA_LEN] - 2); i++) {
checksum += buffer[DATA_CHECKSUM_START + i];
}
return ((~checksum) & 0xff);
}
int get_int_buffer_len(int *buffer, int buffer_size) {
int buffer_len = 0;
int count = 0;
for (int i = 0; i < buffer_size; i++) {
if (0 == buffer[i]) {
if (count == 0) {
buffer_len = i;
}
count = count + 1;
} else {
count = 0;
}
if (count >= 3) {
break;
}
}
return buffer_len;
}
/*
* :
* 0xFF, 0xFF, 0x01, 0x02, 0x06
*/
int main(int argc, char *argv[]) {
int buffer[128] = {0xFF, 0xFF, 0x01, 0x04, 0x02, 0x38, 0x02}; //
printf("check sum:0X%x\n", steering_gear_check_sum(buffer, get_int_buffer_len(buffer, (sizeof(buffer) / sizeof(int)))));
return 0;
}
Loading…
Cancel
Save