|
|
Вывод данных L780
DWORD WINAPI ServiceThread(PVOID /*Context*/)
{
DWORD halfbuffer = IrqStep*pages/2; // Ñîáèðàåì ïîëîâèíêàìè êîëüöåâîãî áóôåðà
DWORD fl2,fl1 = fl2 = (*sync<=halfbuffer)? 0:1; // Íàñòðîèëè ôëàãè
WORD *tmp, *tmp1;
for(int i=0;i<multi;i++) // Öèêë ïî íåîáõîäèìîììó êîëè÷åñòâó ïîëîâèíîê
{
while(fl2==fl1) fl2=(*sync<=halfbuffer)? 0:1;// Æäåì çàïîëíåíèÿ ïîëîâèíêè áóôåðà
tmp=fdata+(halfbuffer*i); // Íàñòðàèâàåì óêàçàòåëü â ôàéëå
tmp1=data+(halfbuffer*fl1); // Íàñòðàèâàåì óêàçàòåëü â êîëüöåâîì áóôåðå
CopyMemory(tmp,tmp1,halfbuffer*sizeof(WORD));// Çàïèñûâàåì äàííûå â ôàéë
fl1=(*sync<=halfbuffer)? 0:1; // Îáíîâëÿåì ôëàã
Sleep(0);
}
complete=1; // Ìû çàâåðøèëè ñáîð äàííûõ
return 0; // Âûøëè
}
Как в этой функции организовать вывод данных.
В том смысле, что на данные указывает адрес в памяти tmp, а мне нужны конкретные данные. Видимо это какой-то массив tmp[j] , но тогда какой диапазон должно пробегать j.(Данные нужны живые, а не Датовский фаил).
|
|
|
Re: Вывод данных L780
Как в этой функции организовать вывод данных.
В том смысле, что на данные указывает адрес в памяти tmp, а мне нужны конкретные данные. Видимо это какой-то массив tmp[j] , но тогда какой диапазон должно пробегать j.(Данные нужны живые, а не Датовский фаил).
WORD WINAPI ServiceThread(PVOID)
{
DWORD halfbuffer = IrqStep*pages/2;
DWORD fl2,fl1 = fl2 = (*sync<=halfbuffer)? 0:1;
WORD *tmp, *tmp1;
for(int i=0;i<multi;i++)
{
while(fl2==fl1) fl2=(*sync<=halfbuffer)? 0:1;
tmp=fdata+(halfbuffer*i);
tmp1=data+(halfbuffer*fl1);
CopyMemory(tmp,tmp1,halfbuffer*sizeof(WORD));
fl1=(*sync<=halfbuffer)? 0:1;
Sleep(0);
}
complete=1;
return 0;
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Вывод данных L780
Ну вы задаете же размер буфера в отсчетах. Вот такой индекс и бегает.
|
|
|
Re: Вывод данных L780
Ну а как это будет выглядеть. Я и так пробывал и так, получается какие-то не те данные.
Скажем я пишу в теле цикла while:
for(j=x1;j<x2;j++)
{
код вывода на экран и в фаил *.txt
}
так вот что конкретно должно стоять вместо х1, х2.
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Вывод данных L780
А что из кода не видно чтоли что там два вида значений от 0 до половины буфера и от половины буфера до конца в зависимости от того где счетчик заполнения находится
|
|
|
Re: Вывод данных L780
Как это в точности будет выглядеть
x1=halfbuffer*fl1 x2=halfbuffer*(fl1+1)
или x1=i*halfbuffer x2=(i+1)*halfbuffer
или как то иначе. Пробывал по разному, не получается.
В одном из случаев tmp[j] равны нулю начиная с некоторого j, помоему равного длине буфера.
И еще если я хочу увидеть график двух каналов, но не наложенный друг на друга, а один под други. Как развести данные на два канала.
Жду развернутого ответа . Спасибо.
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Вывод данных L780
Ну плата пишет циклически в буфер.
Из той половины в которую уже записала берете
tmp[0] - 1 канал tmp[1] второй tmp[2] опять первый и так от 0 до halbuffer. или от halfbuffer до 2*halfbuffer.
А так смотрите еще пример OSC.TST
|
|
|
Re: Вывод данных L780
DWORD WINAPI ServiceThread(PVOID /*Context*/)
{long int m=0;
int k = 0;
DWORD x,y;
CString str;
/*DWORD*/short halfbuffer=IrqStep*pages/2;
DWORD fl2,fl1 = fl2 = (*sync<=halfbuffer)?0:1;
short *tmp, *tmp1;
for(int i=0;multi;i++)
{
while(fl2==fl1)
fl2=(*sync<=halfbuffer)? 0:1;
tmp=fdata+(halfbuffer*i);
tmp1=data+(halfbuffer*fl1);
CopyMemory(tmp,tmp1,halfbuffer*sizeof(short));
fl1=(*sync<=halfbuffer)? 0:1;
///ПРАВИЛЬНО ЛИ ЭТО
for(long int j=halfbuffer*!fl1;
j<halfbuffer*!fl1+halfbuffer; j+=sizeof(short))
{ bUpdate = FALSE;
DataMassiv[m]=(120+tmp[j]/10);
y=(120+tmp[j]/10);
str.Format("i=%d ,j=%d,Massiv[j]=%d /n",i ,j,DataMassiv[m]);
m++;k++;
str.Format("i=%d j=%d *fdata=%d tmp=%d fl1=%d *sync=%d y=%d flag=%d /n",i,j,fdata[j],tmp[j],fl1,*sync,y,bUpdate);
m_CounterFile->WriteString(str);
mdc.SetPixel(k,y,RGB(0,255,0));
}
//почему-то в результате получается синусоида,
с участками нулей(в конце вторых половинок буфера), хотя
сигнал с генератора синусоида.
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Вывод данных L780
Правильно будет напечатать массив tmp1 от 0 до halfbuffer - тк он в этот момент готов.Тока ндао учесть что плата собирает попрежнему и если замешкаться то данные затруться.
|
|
|
Re: Вывод данных L780
А как поступить со второй половинкой буфера.
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Вывод данных L780
дык tmp1 перенастраивается по флагу то на data то на data+halfbuffer
|
|
|
Re: Вывод данных L780
Спасибо за помощь, но у меня ещё один вопрос.
У меня есть массив каналов (к плате подключено 4 канала под разным
напряжением в деферециальном режиме х1,Х2,У1,у2,
остальные 28 каналов подключены к земле т.е.17 выходу)
Далее хочу опросить каналы,
пишу:
WORD Chan[]={0x0,0x1,0x20,0x21,0x22,0x30,0x31};
в итоге на экране 5 синусоид.
word Chan[]={0x0,0x1} - одна синусоида
причем синусоида word Chan[]={0x0}
совпадает с синусоидой word Chan[]={0x1}
хотя сигналы подаются разные, и точно различимые.
word Chan[]={0x1,0x0} - а в этом варианте вообще прямая линия.
Что делать, чтобы вывести четыре канала, что должно стоять вместо
х1,х2,у1,у2, в выражение word chan[]={0xX1,0xX2,0Xy1,0XY2}.
И еще в выражении for(j=0;j<halfbuffer;j+=sizeof(short))
правильно ли написано третье условие или можно ограничиться j++?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Вывод данных L780
Написать массив на четыре канала которые надо ввести. И главное правильно подключить сигналы по диф схеме.
если индексация идет по tmp[j] где tmp - массив short то j++.
|