Java — вычисление Arduino CRC и последовательное чтение

У меня есть строка: «: 0100000035» что я отправил с Android в Arduino через Bluetooth, в Android CRC этой строки: E9601FB

В моем эскизе функция расчета CRC:

static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};

unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ (data >> (0 * 4));
crc = pgm_read_dword_near(crc_table + (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> (1 * 4));
crc = pgm_read_dword_near(crc_table + (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}

unsigned long crc_string(char *s)
{
unsigned long crc = ~0L;
while (*s)
crc = crc_update(crc, *s++);
crc = ~crc;
return crc;
}

цикл чтения создает массив символов: char[11] bufferline
bufferline = ":0100000035"

но когда я печатаю CRC Serial.println(crc_string(bufferline), HEX); это дает: F1D51E33
и если я делаю так: Serial.println(crc_string(":0100000035"), HEX); это дает право CRC: E9601FB

Я что-то пропустил?

Спасибо

0

Решение

Функция crc_string вычисляет CRC массива байтов, пока не найдет байт \ 0. Когда вы определяете переменную буферной линии, вы определяете ее как размер 11, не оставляя места для \ 0 вашей целевой строки, поэтому функция crc_string продолжит сканирование памяти после буферной строки, пока не найдет \ 0 в памяти … Решить проблема, определить переменную буферную линию размером 12 или более.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector