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


Проблема в прерываний в Delphi для Е-330

Вы не вошли.

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

Rustam
18.06.2003 10:37:28
#1

Гость

Проблема в прерываний в Delphi для Е-330

Описываю обработчик прерывания

procedure IrqHandler(p:pointer);stdcall;
  Begin
   read_fifo(Data,HalfSize);
   reset_irq();
  End;

Далее описываю параметры
И пищу функцию
TIMER_INPUT_IRQ_START_E330(@IrqHandler);
происходить ошибка.

Как решить эту проблему?

18.06.2003 11:44:38
#2

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

Re: Проблема в прерываний в Delphi для Е-330

Чего за ошибка то?

Rustam
18.06.2003 12:30:19
#3

Гость

Re: Проблема в прерываний в Delphi для Е-330

Дословно!
Пишет
“Variable required” на строчку “TIMER_INPUT_IRQ_START_E330(@IrqHandler);”.
И
“Unsatisfied forward or external declaration: ‘TForm1.IrqHandler’. “
на  “procedure IrqHandler(p:pointer);stdcall;”

18.06.2003 14:43:59
#4

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

Re: Проблема в прерываний в Delphi для Е-330

Описали эту процедуру не там скорее всего.
IrqHandler должен быть глобальной процедурой а не методом класса.

Rustam
19.06.2003 10:12:14
#5

Гость

Re: Проблема в прерываний в Delphi для Е-330

Исправил! Но дальше…

Если я правильно понимаю то:
После генераций прерываний
TIMER_INPUT_IRQ_START_E330(@IrqHandler);
должен работать обработчик прерываний,
procedure IrqHandler(p:pointer);{stdcall;}
  Begin
   Read_Fifo(Data,HalfSize);
   Reset_IRQ();
  End;
но он у меня к нему не обращается. Почему?

19.06.2003 11:20:28
#6

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

Re: Проблема в прерываний в Delphi для Е-330

А stdcall зачем закомментировали?

Rustam
20.06.2003 08:17:33
#7

Гость

Re: Проблема в прерываний в Delphi для Е-330

В поисках истины предпринимал различные попытки.
Если убирать комментарий, и соответственно в описании процедуры, то обработчик все равно не срабатывает. Вы не могли бы посмотреть всю программу,  если я отправлю на Ваш E-Mail,  может это прояснить ситуацию?

20.06.2003 08:18:57
#8

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

Re: Проблема в прерываний в Delphi для Е-330

присылайте

Pavel
23.06.2003 15:58:40
#9

Гость

Re: Проблема в прерываний в Delphi для Е-330

Для платы Е330
Обработчик прерывания:

procedure PNIRQHandler(Hndl: THandle);stdcall;far;
begin
A := A + 1;
RESET_IRQ;
end;

Нажатие Кнопки

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  I: Cardinal;
begin
  A := 0;
//  Channels[0] := 0;
  SET_FIFO_PARAMETERS_E330(10, 0);
  SET_TIME_PARAMETERS_E330(100);
  TIMER_INPUT_IRQ_START_E330(@PNIRQHandler);
  I := GetTickCount + 5000;
  while GetTickCount < I do; //ждем 5 сек
  STOP_FUNC_E330;
  Form1.Memo1.Lines.Add(IntToStr(A));
end;

Выдает А=1
Почему так?

23.06.2003 16:00:32
#10

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

Re: Проблема в прерываний в Delphi для Е-330

Если данные не забирать то все встает. Потому и 1

Pavel
24.06.2003 12:37:47
#11

Гость

Re: Проблема в прерываний в Delphi для Е-330

var
  Buffer: array[0..1000] of char
......
Обработчик стал таким:

procedure PNIRQHandler(Hndl: THandle);stdcall;far;
begin
A := A + 1;
READ_FIFO(Buffer, 5);
RESET_IRQ;
end;

Все сработало, но только один раз!
Через некоторое время при запуску этой процедуры было выдано 0, а PLATA_TEST вернула 1.
Помогло только колное выключение питания компьютера... Но снова только на 1 раз.
Подскажите, пожалуйста, выход.

24.06.2003 13:45:31
#12

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

Re: Проблема в прерываний в Delphi для Е-330

Там не просто сколько-то считать а именно половинку буфера.

Pavel
24.06.2003 14:35:52
#13

Гость

Re: Проблема в прерываний в Delphi для Е-330

Но если
SET_FIFO_PARAMETERS_E330(10,0)
устанавливает размер FIFO=10, то
READ_FIFO(Buffer, 5)
читает половину, не так ли?

Сразу несколько доп.вопросов
1. По умолчанию размер FIFO=400?
2. Как работает STOP_FUNC_E330, нужно ли (и если да, то как) очищать буфер перед следующим запуском?

25.06.2003 08:15:19
#14

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

Re: Проблема в прерываний в Delphi для Е-330

1 да
2 просто останавливае сбор. нет

Pavel
30.06.2003 14:51:19
#15

Гость

Re: Проблема в прерываний в Delphi для Е-330

Почему после выполнения STOP_FUNC_E330 плата больше не отвечает при повторной попытки заного установить параметры и начать новое чтение данных, не проходит даже тест. Приходиться выключать питание компьютера.

Владимир
02.07.2003 12:41:07
#16

Гость

Re: Проблема в прерываний в Delphi для Е-330

Pavel, получил ли мой пример работы с E330 по IRQ?
Работает или нет?