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

Ввод данных с помощью FIFO

Вы не вошли.

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

Виталий
17.12.2001 17:16:26
#1

Гость

Ввод данных с помощью FIFO

Можно ли организовать ввод данных при помощи FIFO без привлечения прерываний? Просто если судить по руководству то можно с помощью GET_FAST_SOFT_DATA.
Но при попытке выполнить пример приведенный в описании ничего не получается. Создается такое ощущение что эта функция не ждет накопления полубуфера данными и выдает не понятно какие значения.Вот и интересно , это я должен проверять заполненость буфера или функция должна делать это сама и я просто не правильно с ней работаю ?
Сам пример:
CONFIG_FIFO_CC(2,2)
SET_FIFO_SIZE_CC(8192)
LogChannel=CREATE_CHANNEL_LC111(1,0,0)
SOFT_CONFIG_CC(-1,1,LogChannel,Rate)
FAST_SOFT_START_CC()
GET_FAST_SOFT_DATA(Buffer,4096)
FAST_SOFT_STOP_CC() {Кстати это функции нет в lcard_32.dll }
Что здесь не правильно ? и Какого типа должен быть Buffer ? int16 или int32 ?

bkl
18.12.2001 12:46:29
#2

Гость

Re: Ввод данных с помощью FIFO

1. Buffer - надо трактовать как 16-ти битные знаковые числа.
2. FAST_SOFT_STOP_CC = SOFT_STOP_CC
3. А вы вызывали READ_CALIBR_CC и SET_CAIBR_MODE_CC после загрузки крейта?

Виталий
18.12.2001 12:58:34
#3

Гость

Re: Ввод данных с помощью FIFO

Да при инициализации я вызываю READ_CALIBR_CC и ставлю SET_CALIBR_MODE_CC(-1)
А вы не подскажите вообще ф-ция GET_FAST_SOFT_DATA сама ожидает накопления полубуфера или надо самому за этим следить ?

bkl
18.12.2001 13:31:05
#4

Гость

Re: Ввод данных с помощью FIFO

Ожидает сама

bkl
18.12.2001 13:39:04
#5

Гость

Re: Ввод данных с помощью FIFO

Вот фрагмент работающей на моем компьютере программы:

int NCh= 16;
WORD Channels[32];
  READ_CALIBR_CC();
  SET_CALIBR_MODE_CC(-1);
  for (j=0; j<Nch; j++) {
    Channels[j*2]=Slot;
    Channels[j*2+1]=CREATE_CHANNEL_LC111(j, 0, 0);
  };
  CONFIG_FIFO_CC(2, 2);
  SET_FIFO_SIZE_CC(8192);
  SOFT_CONFIG_CC(-1, Nch, Channels, 100*Nch);
  while(!kbhit()) {
   FAST_SOFT_START_CC();
   while(!kbhit()) {
       GET_FAST_SOFT_DATA(Buffer, 4096);
       DrawBuffer(Buffer, Nch, NPoint);
   };
   FAST_SOFT_STOP_CC();
  }

Виталий
18.12.2001 14:47:04
#6

Гость

Re: Ввод данных с помощью FIFO

Вот пример моей программы :
CONFIG_FIFO_CC(2,2);
SET_FIFO_SIZE_CC(8192);
SOFT_CONFIG_CC(-1,1,Channel,Rate);
FAST_SOFT_START_CC();
while(sizeofBuffer<NPoint){
GET_FAST_SOFT_DATA(Buffer,4096);
};
SOFT_STOP_CC();
Где sizeofBuffer размер Buffer
После запуска программа возвращает непонятное значение 19532 ... И если судить по времени исполнения то оно не равно NPoint*rate , а существенно меньше....rate я задаю 1000 , NPoint = 16384
Есть ли какие либо ограничения на rate (у Вас в примере rate = 100 это принципиально или нет ?)?
И напишите , пожалуйста , типы перемменных с какими Вы работаете(к примеру, типы Channels и Buffer)
Заранее спасибо.

bkl
18.12.2001 15:39:42
#7

Гость

Re: Ввод данных с помощью FIFO

Често говоря, ваша программа выглядит неработоспособной (как вычисляется sizeofBuffer ? - если это sizof(Buffer), то это число не более 4 !, и где это значение обновляется ?).
В ответе от 18.12.01 13:39 сказано, что Channels - это: WORD Channels[32];
А в ответе от 18.12.01 12:46 сказано: "Buffer - надо трактовать как 16-ти битные знаковые числа"
Да, и как могла работать конструкция 1)-2), где
1) LogChannel=CREATE_CHANNEL_LC111(1,0,0)
и 2) SOFT_CONFIG_CC(-1,1,LogChannel,Rate)
от 17.12.01 17:16 в Вашем примере? - ведь в SOFT_CONFIG_CC 3-ий параметр - вида WORD *.

Будьте, пожалуйста внимательнее. Думаю, Вам нужно взять за основу пример от 18.12.01 13:39 и попробовать, чтобы от заработал.
Rate может быть и > 100 - это не принципиально.

Виталий
18.12.2001 16:01:21
#8

Гость

Re: Ввод данных с помощью FIFO

Ладно я напишу подробнее как выглядит моя программа. Просто я пишу под LabView и не хотелось все подробно рассписывать под Cи
Если вернутся к Си, то она выглядела бы так:
NPoint=16384;
Rate=1000;
READ_CALIBR_CC();
SET_CALIBR_MODE_CC(-1);
Channel[0]=Slot_111;
Channel[1]=CREATE_CHANNEL_LC111(1,0,0);
CONFIG_FIFO_CC(2, 2);
SET_FIFO_SIZE_CC(8192);
SOFT_CONFIG_CC(-1, 1, Channel, Rate);
FAST_SOFT_START_CC();
while(sizeofBuffer<NPoint){
GET_FAST_SOFT_DATA(Buffer,4096);
далее вычисляется размер массива Buffer
(не помню как это делается в Си)
и присваивается переменной sizeofBuffer;
};
SOFT_STOP_CC();
Для Channel и Buffer я ставлю тип int16
Пробовал для Channel uint16(беззнаковое int16) не помогло.После выхода из цикла в Buffer лежит какая то ерунда (19532)...
Может ли это происходить из-за не верной последовательности инициализации ? И если да , то напишите, пожалуйста, в каком порядке тогда нужно производить инициализацию.
Хотя при работе с ф-цией SOFT_CC возращаются правильные значения...
И не могли бы Вы выслать мне пример работы с ф-цией GET_FAST_SOFT_DATA под LabView (конечно при ее наличии)?
Заранее спасибо.

Виталий
18.12.2001 16:57:14
#9

Гость

Re: Ввод данных с помощью FIFO

И еще вопрос : Могут ли такие глюки обьясняться старой весрией биоса или длл-ки?
У меня стоит биос под LC-014 lc_014.bio от 30 июля 1999 г. размер 29,2 Кб
и длл-ка lcard_32.dll от 5 марта 1998 г. размер 187 Кб
Заранее спасибо.

bkl
18.12.2001 17:47:46
#10

Гость

Re: Ввод данных с помощью FIFO

Для Lab-View примера нет, есть для BorlandC5.0 ->
См. E-mail

Виталий
19.12.2001 12:21:48
#11

Гость

Re: Ввод данных с помощью FIFO

Ваш пример вроде работает , но все равно иногда проскакивают некоторые не понятные значения ...
Я попробовал реализовать этот пример у себя и получилось что после первого считывания полубуфера возвращаются непонятные значения 19532 а уже второе считывание проходит нормально.То есть в полученном массиве первые 4096 элементов неверные а остальные правильные. Не подскажите с чем это может быть связано ?

Виталий
19.12.2001 12:30:49
#12

Гость

Re: Ввод данных с помощью FIFO

И еще оказалось что правильность данных зависит от rate, т.е. если Rate маленький (100 и меньше), то не правильно считывается где-то 4000 элементов ,а при больших rate их кол-во увеличивается.

bkl
19.12.2001 13:18:03
#13

Гость

Re: Ввод данных с помощью FIFO

Я такого у себя не вижу, и объяснить пока не могу

Виталий
19.12.2001 14:23:26
#14

Гость

Re: Ввод данных с помощью FIFO

Я отослал Вам пример обратно с моими параметрами.
У меня он работает не верно.Интересно как у Вас?

bkl
19.12.2001 16:29:55
#15

Гость

Re: Ввод данных с помощью FIFO

Буду смотреть. Скорее всего, смогу приступить к этому завтра вечером.

bkl
21.12.2001 16:24:21
#16

Гость

Re: Ввод данных с помощью FIFO

Проблема разрешилась, ответ - см. Email

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2

Многоканальный телефон:
+7 (495) 785-95-25

Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск