Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


L-783M пропуски

Вы не вошли.

 Поиск | Регистрация | Вход 

OT
21.04.2011 09:02:13
#1

Гость

L-783M пропуски

Добрый день! Пишу программу в C++ Builder 2007. Написал регистратор.
IRQSTEP = FIFO = 2048
PAGES = 4
while (Status)
{
   if (sync2 != *sync)
   {
        sync2 = *sync;
        if (sync2 == 4096)
        {
            x = 0;
        }
        if (sync2 == 8192)
        {
            x = 1;
        }
        for (i = 0; i < 4096; i++)
        {
            fb << *(data + 4096*x + i) << endl;
        }
    }
}
Алгоритм таков: при изменении значения *sync, проверяется его значение, если оно 4096, считываем данные от *data до *(data + 4096)
если *sync = 8192 ститываем данные от *(data + 4096) до *(data + 8192).
Скажите, что не так? Заранее спасибо!

21.04.2011 10:33:53
#2

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L-783M пропуски

все зависит от скорости сбора данных...

21.04.2011 11:01:09
#3

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: L-783M пропуски

С точки зрения скорости я бы не стал ставить вывод в iostream прямо в цикл чтения отсчетов из памяти.
Лучше бы убрать куда-то во внешний массив, который потом разбирается в фоновом потоке

Условно что-то типа

data_type outbuf[OUTBUFNUM][4096];
volatile int outbufidx_r = 0;
volatile int outbufidx_w = 0;
...
int next_idx_w = (outbufidx_w + 1) % OUTBUFNUM;
if (next_idx_w != outbufidx_r)
    {
    memcpy(outbuf[outbufidx_w], data + ((sync2 & 0x2000) >> 1), 4096 * sizeof(data_type);
    outbufidx_w = next_idx_w;
    }
else
    {
    // ошибка - буфер переполнен
    }

И в потоке чтения что-то типа
while (outbufidx_r != outbufidx_w)
    { // буфер не пуст
    for (int i = 0; i < 4096; i++)
        {
        fb << outbuf[outbufidx_r][i] << endl;
        }
    outbufidx_r = (outbufidx_r + 1) % OUTBUFNUM;
    }

По-хорошему надо добавить корректную обработку кольцевого буфера (проверки на переполнение и т.п.)

OT
22.04.2011 10:46:43
#4

Гость

Re: L-783M пропуски

Спасибо за помощь!)