А разве crc SEND не изменится после таких манипуляций?
Или получается, что если в структуре uint8_t crc в конце объявлен, то и в области памяти он будет последним (всегда)?
Обычно, когда контрольные суммы в пакетах данных присутствуют, делают так:
зануляют поле КС в структуре.
считают КС
вписывают назад
при таком подходе вовсе не обязательно пихать CRC в конец структуры и вычитать ее длину потом. Считайте вместе с этим полем, просто занулите его перед использованием
А еще лучше , вообще отказаться от контрольной суммы и передавть просто два байта - один в начале , другой в конце. 0x55 в начале, 0xaa в конце. Если у вас линия шумная, то там испортится весь пакет и, в частности, байты-маркеры. Так проще и сумму считать не нужно.
А если нет? Ну вот “испортится” всего лишь один байтик в середине посылки.
Который отвечает за запуск “Орешника”, например.. Ой-ёёёё..
Иногда, сами знаете, лучше перебдеть и переспросить не принятое..
ну, если орешника. не нужно пытаться заранее предугадать все проблемы.
из моего опыта - если шум, то портится чуть ли не половина данных, а то и вовсе - все.
Контрольные суммы в протоколах передачи данных используют там, где нет контроля за линией, за ее длиной. Если же “линия“ - это ваши коротенькие провода от ардуины к сенсору, то правильнее будет хорошенько позаботиться об экранировании. Тогда и контрольные суммы не нужны. Если ваши провода идут через участок к забору, а на проводах сидят вороны и сушится белье, тогда , да. Делайте ЦРЦ.
Я пытаюсь донести мысль о том, что если у вас есть физический контроль над линией связи (т.е. вы сами определяете длину и маршрут) то правильнее будет не проверки ошибок делать, а сделать надежную линию передачи данных.
Но в качестве саморазвития, почему бы и не прикрутить CRC, в принципе. Но если вы за отказоустойчивость радеете, тогда опять же, ЦРЦ
особо не поможет. Пришел вам пакет, выяснилось что битый. Ну так чо, запускать Орешник? Или нет? Или теперь сообщать как-то, “перепошли еще разок, пакетик испортился“?
Нет, это все неправильный подход. Вот вам, от вояк: Шлите по два (три , десять) одинаковых пакета. Закрытые контрольной суммой, если уж прям орешник-орешник