Универсальный кольцевой буфер

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Аватара пользователя
Dimon49773
Встал на лапы
Сообщения: 108
Зарегистрирован: Ср янв 18, 2012 16:33:58

Универсальный кольцевой буфер

Сообщение Dimon49773 »

Всем привет...
Возникла такая необходимость создать универсальный кольцевой буфер для хранения разнотипных данных на С.
Универсальность должна состоять в возможности записывать разнотипные данные и разное их количество.

Прошу помочь советами и исходниками если есть.
Спасибо
Реклама
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Универсальный кольцевой буфер

Сообщение ChipKiller »

Dimon49773 писал(а):Возникла такая необходимость создать универсальный кольцевой буфер для хранения разнотипных данных на С. Универсальность должна состоять в возможности записывать разнотипные данные и разное их количество.
... вопрос из разряда "сам не знаю, чего хочу" :)) Прежде чем писать такое, хотя бы бегло посмотрите книжку по структурам данных. Само название кольцевой буфер уже говорит об ограничении размера, так что разное их количество - весьма условно. Как минимум в кольцевом буфере придется использовать указатели на структуры.
Реклама
Аватара пользователя
Dimon49773
Встал на лапы
Сообщения: 108
Зарегистрирован: Ср янв 18, 2012 16:33:58

Re: Универсальный кольцевой буфер

Сообщение Dimon49773 »

я в курсе...хотелось бы пример, а если нету так и скажи
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Универсальный кольцевой буфер

Сообщение ChipKiller »

Dimon49773 писал(а):..хотелось бы пример
... пример чего???
ChipKiller писал(а):.... в кольцевом буфере придется использовать указатели на структуры
.. создаете структуру которая описывает тип и размер данных и при заполнении помещаете ее в кольцевой буфер ( как работает кольцевой буфер Вы ...в курсе)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Dimon49773
Встал на лапы
Сообщения: 108
Зарегистрирован: Ср янв 18, 2012 16:33:58

Re: Универсальный кольцевой буфер

Сообщение Dimon49773 »

создаю я структуру...
далее мне нужно эти данные разбить на байты, которые записывать в массив байтов
это одна из идей, но не знаю как реализовать более близко к аппаратному исполнению
Реклама
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: Универсальный кольцевой буфер

Сообщение avreal »

Это тот же вопрос или другой?
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Реклама
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Универсальный кольцевой буфер

Сообщение uk8amk »

Dimon49773 писал(а):далее мне нужно эти данные разбить на байты, которые записывать в массив байтов
Примерно так должно быть:

Код: Выделить всё

struct
 {
 char a;
 short b;
 long c;
 float d;
 } my_struct;

char *byte_ptr;
byte_ptr = (char*) &my_struct;//получить адрес структуры
//далее разберем по байтам
for( i=0; i<sizeof(my_struct); i++ )
    write_to_your_memory( *byte_ptr++ );
sizeof() для вашего процессора компилятор должен считать в байтах, т.к. для разных архитектур может считаться и словами(например ARM). Ну можно и в явном виде указать константу в коде.
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: Универсальный кольцевой буфер

Сообщение avreal »

uk8amk писал(а):sizeof() для вашего процессора компилятор должен считать в байтах, т.к. для разных архитектур может считаться и словами(например ARM). Ну можно и в явном виде указать константу в коде.
По стандарту C

Код: Выделить всё

sizeof(char) == sizeof(unsigned char) == sizeof(signed char) == 1
«железно», «прибито гвоздями» и т.д.
Т.е. по определению оператор sizeof возвращает размер в char-ах и не иначе. Будь то 8051 или какой-то хитрый DSP.

Другое дело, что char может быть 16-битным. Но тогда просто sizeof( 32_битное_целое ) == 2. И на работоспособность копирования *pointer_to_char++ по счётчику до sizeof() это не повлияет.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Универсальный кольцевой буфер

Сообщение uk8amk »

avreal писал(а):По стандарту C
Сорри, действительно что-то попутал.
Ответить

Вернуться в «Разные вопросы по МК»