Всю голову уже сломал в попытках посчитать контрольную сумму.
По условию* контрольная сумма - CRC-16/MCRF4XX
Есть пакет: FE 1C F5 01 01 1E 5B 59 00 00 5F C3 4F 3B 69 2E 0F BD DB 33 22 40 EF 8A 4A 3A 7A FF 74 B9 51 37 06 BA 33 67
В котором последние 2 байта - контрольная сумма 0x3367
( хотя, скорей всего, они записаны младшим байтом вперед, и в итоге контрольная сумма = 0x3367 )
Первый байт FE - заголовок, и по условию* он не считается в контрольную сумму.
Остается: 1C F5 01 01 1E 5B 59 00 00 5F C3 4F 3B 69 2E 0F BD DB 33 22 40 EF 8A 4A 3A 7A FF 74 B9 51 37 06 BA
Но если посчитать контрольную сумму, то она будет равна 0x1503 что не равно нашей контрольной сумме..
(рассчитываю калькулятором - https://crccalc.com/ )
В условии* CRC включает байт CRC_EXTRA.
В условии* не сказано как рассчитывать CRC_EXTRA. Предполагается использование стандартных библиотек (Си, Си++, Си# и Python).Когда отправитель вычисляет контрольную сумму для сообщения, он добавляет CRC_EXTRA_байт в конец данных, по которым вычисляется контрольная сумма. Получатель вычисляет контрольную сумму для полученного сообщения и добавляет свою собственную CRC_EXTRA для конкретного идентификатора сообщения.
Если CRC_EXTRA для отправителя и получателя разные, контрольные суммы не будут совпадать.
Такой подход гарантирует, что будут декодированы только сообщения, в которых отправитель и получатель используют одну и ту же структуру сообщения
(или, по крайней мере, это делает ошибку гораздо менее вероятной, как для любого приложения контрольной суммы).
Я же хочу написать небольшую программу на AVR-ассемблере, позволяющую декодировать данные сообщения, соответственно мне понадобится подпрограмма расчета контрольной суммы для данного типа сообщений.
****************************
Пытался заглянуть в код библиотеки https://github.com/mavlink/c_library_v2 ... checksum.h
Но ни черта не понял.
Особенно не понятно откуда взялось число 0xf0b8..
****************************


