Здравствуйте. Хочу сделать свой простенький протокол. Будут всего один-два провода для данных, но в целом вопросы не про это. В общем по таймеру или прерыванию МК будет получать биты пакета. Хотелось бы что бы они по приходу попадали в какой-либо буфер, а основная программа бы в любой момент (возможно даже по среди приема очередного пакета) могла их от туда забрать и передать в процедуру обработки пакета. Я так понял, что для этого обычно используют кольцевой буфер, но возникли некоторые вопросы: 1. Возможно ли в с кольцевым буфером работать по битам? Или мне нужно при приеме накопить сначала восемь бит и только потом отправить их в буфер? Если нужна переменная, то как это сделать? Просто две переменный сделать (одну под счетчик, другую под биты) и после записи если счетчик равен восьми, то обнуляю счетчик и байт отправить в кольцевой? 2. Если не ошибаюсь, то чтение из буфера занимает не один такт. Что будет если посреди чтения сработает прерывание и в этом прерывании начнется процедура записи? Могут ли так потеряться, исказиться или остаться необработанными данные в буфере? Может нужно сделать флаг, который запретит записывать в буфер, пока идет процедура чтения? Или потеря данных таки образом исключена?
Ну и вообще подход правильный? Может советы какие есть. Свой протокол делаю что бы просто научится. В основном интересует только правильная организация буфера (физический уровень протокола и процедура обработки пакетов - это другой вопрос), поскольку и чтение и запись могут начаться в абсолютно любой момент (даже одновременно), а организовать желательно так, что бы я ничего не потерял (ну не считая переполнения буфера конечно же).
поскольку минимальная порция данных, обрабатываемая АЛУ "за раз" это байт, вам придется накапливать порции по 8 битов, "упаковывая" их в последовательность байтов. пока не представляю ситуации, когда "протокол" будет именно БИТОВЫМ. думаю, прежде чем городить свой протокол, вам стоит ознакомиться со стандартными последовательными синхронными и асинхронными протоколами.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Если пакет содержит признак начала пакета и/или контрольную сумму, то принимать надо сразу весь пакет в буфер, проверять контрольную сумму и передавать на обработку. В таком случае речи о кольцевом буфере идти не может. Нужен только счётчик принятых байтов (ну или битов, как вы хотели) - указатель на место в буфере.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 45
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения