Цитата(menzoda @ Jun 3 2014, 14:09)

Вместе с указателем на данные передавать указатель на начало и конец массива?
допустим, функция кроме указателя на начало данных получила указатель на начало и конец массива. Как это обработать на Си, чтобы за концом массива, брались данные из начала?
Пока что я думаю завести переменную счётчик, чтобы знать положение PTR в массиве, когда вызывается функция обработки, копировать данные в другой массив, той же длины с учётом счётчика.
Как то так:
j = count;
for(i = 0; i <= N-1; i++)
{
array_dest[i] = array_src[j];
j++;
if(j == N)
j = 0;
}
где count = это положение самого "свежего отсчёта" в массиве array_src. таким образом, мы получим в массиве array_dest всегда данные начиная с самого свежего элемента исходного массива.
Такой подход самый тупой и, что называется, в лоб.
мне думается, что он будет самым затратным из возможных, и для реалтаймовых задач нерациональным.
Цитата(mempfis_ @ Jun 3 2014, 14:12)

Функция getArray() возвращает или-1 если нет данных, или данные
Код
signed int getArray(void)
{
signed int res = -1;
if(head == tail) return res; //нет данных - возвращаем -1
res = buff[tail];
tail++;
if(tail >= BUFF_SIZE) tail = 0;
return res; //возвращаем данные
}
Эти 2 процедуры позволяют организовать FIFO данных без проверки переполнения буффера.
Если Вам критично отслеживать переполнение, то всегда можно ввести переменную status, которой можно присваивать статусы empty/not_empty/full
Также довольно легко вместо данных, возвращать указатели на данные.
не понимаю, ну получил я указатель на данные в буфере. Функция обработки берёт по указателю N байт (по сути весь массив с началом в указателе) и если указатель пришёлся на конец буфера, то функция возьмёт данные где-то пределами массива.
В идеале мне нужна циклическая адресация, чтобы за концом массива шло начало в адресном пространстве.