Member 13951336 Ответов: 3

Кольцевой буфер со штампом времени


Всем привет,

У меня есть потребность в кольцевом буфере (на языке Си)

Что я уже пробовал:

Всем привет,

У меня есть потребность в кольцевом буфере (на языке Си), который может содержать объекты любого типа во время выполнения (почти данные будут разными значениями сигнала, такими как ток (100 мс и 10 мс) и температура и т. д.) ( Я не уверен, должен ли он быть фиксированным размером или нет), и он должен быть очень высокой производительностью. хотя он находится в многозадачной встроенной среде.

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

Любой код или идеи будут высоко оценены. некоторые из необходимых операций таковы:

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

Rick York

Вы пробовали искать фразу "кольцевой буфер" как здесь, так и в google? Есть много и много результатов, найденных, и довольно много здесь тоже.

3 Ответов

Рейтинг:
2

Jochen Arndt

Создайте структуру для хранения в кольцевом буфере:

typedef struct rbuf_data 
{
    time_t timestamp; /* or any other time type */
    int data_type; /* defines the type of data (and so also it's length) */
    void *data; /* with variable data size */
    /*char data[MAX_DATA_SIZE];*/ /* with fixed or limited data size */
};
rbuf_data rbuf[RBUF_SIZE];

При наличии данных с переменным размером данные должны быть распределены с помощью malloc() перед переходом к функции put и освобождается при перезаписи при переполнении буфера.

В противном случае скопируйте данные с помощью memcpy() с соответствующим размером при добавлении новых данных.


Рейтинг:
1

Patrice T

Цитата:
Мне нужен кольцевой буфер (на языке Си), который может содержать объекты любого типа во время выполнения

Это может быть трудно, так как C строго типизирован и не является объектом.
Вам нужно уточнить ваше требование.
Если я правильно понимаю, вам нужен буфер для регистрации последних n записей, чтобы иметь возможность перечитывать записи после ошибки.
Круговой буфер - Википедия[^]

Мы не делаем вашу домашнюю работу.
Домашнее задание не предназначено для проверки ваших навыков просить других людей сделать вашу работу, оно предназначено для того, чтобы заставить вас думать и помочь вашему учителю проверить ваше понимание курсов, которые вы прошли, а также проблем, которые вы испытываете при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по исправлению положения.
Любая ваша неудача поможет вам узнать, что работает, а что нет, это называется "методом проб и ошибок".
Так что попробуйте, перечитайте свои уроки и приступайте к работе. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.

Как программист, ваша задача-создавать алгоритмы это решает конкретные проблемы, и вы не можете полагаться на кого-то другого, чтобы вечно делать это за вас, поэтому есть время, когда вам придется научиться этому. И чем скорее, тем лучше.
Когда вы просто просите решение, это похоже на попытку научиться водить машину, обучая кого-то другого.
Создание алгоритма - это в основном поиск математики и необходимая адаптация к вашей реальной проблеме.


Рейтинг:
0

OriginalGriff

Это не совсем так работает.
Мы не делаем вашу работу за вас.
Если вы хотите, чтобы кто - то написал ваш код, вы должны заплатить- я предлагаю вам пойти в Freelancer.com и спросите там.

Но знайте: вы получаете то, за что платите. Плати копейки, получай обезьян.

Идея "развития" заключается в следующем: "систематическое использование научно - технических знаний для достижения конкретных целей или требований." BusinessDictionary.com[^]
Это не то же самое, что "быстро гуглите и сдавайтесь, если я не могу найти точно правильный код".
Так что либо заплатите кому-нибудь за это, либо научитесь писать сами. Мы здесь не для того, чтобы делать это за вас.