Страница 1 из 1

Помогите правильно организовать прием и обработку пакетов

Добавлено: Ср июл 25, 2018 18:51:46
Orel007127
Здравствуйте. Хочу сделать свой простенький протокол. Будут всего один-два провода для данных, но в целом вопросы не про это. В общем по таймеру или прерыванию МК будет получать биты пакета. Хотелось бы что бы они по приходу попадали в какой-либо буфер, а основная программа бы в любой момент (возможно даже по среди приема очередного пакета) могла их от туда забрать и передать в процедуру обработки пакета. Я так понял, что для этого обычно используют кольцевой буфер, но возникли некоторые вопросы:
1. Возможно ли в с кольцевым буфером работать по битам? Или мне нужно при приеме накопить сначала восемь бит и только потом отправить их в буфер? Если нужна переменная, то как это сделать? Просто две переменный сделать (одну под счетчик, другую под биты) и после записи если счетчик равен восьми, то обнуляю счетчик и байт отправить в кольцевой?
2. Если не ошибаюсь, то чтение из буфера занимает не один такт. Что будет если посреди чтения сработает прерывание и в этом прерывании начнется процедура записи? Могут ли так потеряться, исказиться или остаться необработанными данные в буфере? Может нужно сделать флаг, который запретит записывать в буфер, пока идет процедура чтения? Или потеря данных таки образом исключена?

Ну и вообще подход правильный? Может советы какие есть. Свой протокол делаю что бы просто научится. В основном интересует
только правильная организация буфера (физический уровень протокола и процедура обработки пакетов - это другой вопрос), поскольку и чтение и запись могут начаться в абсолютно любой момент (даже одновременно), а организовать желательно так, что бы я ничего не потерял (ну не считая переполнения буфера конечно же).

Re: Помогите правильно организовать прием и обработку пакето

Добавлено: Ср июл 25, 2018 20:39:28
VladislavS
Сдаётся мне ТС UART изобретает?

Re: Помогите правильно организовать прием и обработку пакето

Добавлено: Ср июл 25, 2018 20:41:09
ARV
поскольку минимальная порция данных, обрабатываемая АЛУ "за раз" это байт, вам придется накапливать порции по 8 битов, "упаковывая" их в последовательность байтов. пока не представляю ситуации, когда "протокол" будет именно БИТОВЫМ.
думаю, прежде чем городить свой протокол, вам стоит ознакомиться со стандартными последовательными синхронными и асинхронными протоколами.

Re: Помогите правильно организовать прием и обработку пакето

Добавлено: Чт июл 26, 2018 10:20:41
technik-1017
Если пакет содержит признак начала пакета и/или контрольную сумму, то принимать надо сразу весь пакет в буфер, проверять контрольную сумму и передавать на обработку. В таком случае речи о кольцевом буфере идти не может. Нужен только счётчик принятых байтов (ну или битов, как вы хотели) - указатель на место в буфере.