ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
1280548 Топик полностью
Adept (01.02.2023 12:05, просмотров: 177) ответил vpv.vpv на Переполнения буфера быть не должно, переполнение означает порчу данных. А так, я не вижу, в чём засада. При обмене используются два кольцевых буфера, один на приём, другой на выдачу. В каждом три волятильных параметра, голова, хвост и счётчик. По голове буфер набивается, по хвосту очищается. Допустим, буфер 500 байт, набилось 100, можно передавать. Передаём длину "100" и байты, после контрольную сумму. Приемник сообщил, что в пакете ошибка. Хорошо, повторим. Смотрим на
формат пакета менять нельзя, и назначение буфера комбинированное - приёмный, и одновременно передающий. Заголовок формируется на лету, часть пакета из других данных, потом к нему приаттачивается этот буфер, и в конце контрольная сумма. Если было переполнение буфера (на самом деле контрольная точка за полсотни байт до конца), - формируется и передаётся заголовок с излишней длиной пакета, блок данных (в сумме около 40+ байт), а потом уже начинает передаваться кольцевой 

приёмный буфер, который будет одновременно и заполняться входящими данными. По окончании приёма по UART (CRLF, или таймаут в пару байт), добиваем пакет до заявленной длины нулями. В общем, с двумя указателями реализуется вроде всё.

...делать нужно так, как нужно. А как ненужно - делать не нужно (С) Винни-Пух :)