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


ошибка 0x0000000A при работе с картой L791

Вы не вошли.

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

Дмитрий
04.03.2013 11:55:27
#1

Гость

ошибка 0x0000000A при работе с картой L791

написал программу для этой карты, компилирую, запускаю и выскакивает BSOD 0x0000000A: IRQL_NOT_LESS_OR_EQUAL. В нете говорится что ошибка обращения к оперативке. Но как это исправить я не понимаю.
***
Вот код программы если нужно:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <objbase.h>
#include <fstream.h>
#include <iomanip.h>

#include <math.h>
#include <stdlib.h>

#include "include//ioctl.h"
#include "include//ifc_ldev.h"
#include "include//create.h"
#include "include//791cmd.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

int i, kta=0, ktsa=0, kp, n, PointCount;
double *adc_data_2, *adc_data=NULL, *dac_data=NULL, Chastota_global;
ULONG   *fdata, *fdata1;

long fsize,k;
ULONG *data, *data1;
ULONG *sync, *sync1;
ULONG status;
USHORT complete;
HANDLE hThread;
ULONG Tid;
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void trace(const char* msg)
{
        Form1->Memo1->Lines->Append(/*"Client 1:/t"*/ msg);
}
void __fastcall TForm1::Button5Click(TObject *Sender)
{
        Series1->Clear();
        Form1->Memo1->Clear();
        Form1->Memo2->Clear();

        ADC_PAR ap;            // &#241;&#238;&#231;&#228;&#224;&#229;&#236; &#239;&#229;&#240;&#229;&#236;&#229;&#237;&#237;&#243;&#254; &#239;&#238;&#228; &#241;&#242;&#240;&#243;&#234;&#242;&#243;&#240;&#243; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#238;&#226;
        //DAC_PAR dacPar;        // &#241;&#238;&#231;&#228;&#224;&#229;&#236; &#239;&#229;&#240;&#229;&#236;&#229;&#237;&#237;&#243;&#254; &#239;&#238;&#228; &#241;&#242;&#240;&#243;&#234;&#242;&#243;&#240;&#243; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#238;&#226;
        PLATA_DESCR_L791 pd;   // &#239;&#229;&#240;&#229;&#236;&#229;&#237;&#237;&#224;&#255; &#239;&#238;&#228; &#241;&#242;&#240;&#243;&#234;&#242;&#243;&#240;&#243; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#238;&#226; &#239;&#235;&#224;&#242;&#251;
        SLOT_PAR sl;           // &#239;&#229;&#240;&#229;&#236; &#239;&#238;&#228; &#241;&#242;&#240;-&#240;&#243; &#239;&#224;&#240;&#224;&#236; &#241;&#235;&#238;&#242;&#224;
        ULONG tm;              // &#239;&#229;&#240;&#229;&#236;&#229;&#237; &#239;&#238;&#228; &#239;&#224;&#236;&#255;&#242;&#252;
        ULONG slot = 0;        // &#225;&#229;&#240;&#229;&#236; &#237;&#243;&#235;&#229;&#226;&#238;&#233; &#241;&#235;&#238;&#242; &#239;&#235;&#224;&#242;&#251;

// &#239;&#238;&#228;&#234;&#235;&#254;&#247;&#229;&#237;&#232;&#229; &#232; &#240;&#224;&#225;&#238;&#242;&#224; &#241; &#225;&#232;&#225;&#235;&#232;&#238;&#242;&#229;&#234;&#238;&#233;
        CallCreateInstance("lcomp.dll");            // &#231;&#224;&#227;&#240;&#243;&#230;&#224;&#229;&#236; &#225;&#232;&#225;&#235;&#232;&#238;&#242;&#229;&#234;&#243;
        LUnknown* pIUnknown = CreateInstance(slot); // &#241;&#238;&#231;&#228;&#224;&#229;&#236; &#238;&#225;&#250;&#229;&#234;&#242; &#241;&#226;&#255;&#231; &#241; &#234;&#238;&#237;&#234;&#240;&#229;&#242;&#237;&#251;&#236; &#226;&#232;&#240;&#242; &#241;&#235;&#238;&#242;&#238;&#236;
        if(pIUnknown == NULL) { Form1->Memo1->Lines->Append("CallCreateInstance failed");}
        trace("Get IDaqLDevice interface");
        IDaqLDevice* pI;
        HRESULT hr = pIUnknown->QueryInterface(IID_ILDEV,(void**)&pI);// &#243;&#234;&#224;&#231;&#224;&#242;&#229;&#235;&#252; &#237;&#224; &#232;&#237;&#242;&#229;&#240;&#244;&#229;&#233;&#241;
        if(!SUCCEEDED(hr)) { trace("Get IDaqLDevice failed");}
        trace("IDaqLDevice get success");
        trace("Free IUnknown");
        pIUnknown->Release();

        // &#238;&#242;&#234;&#240;&#251;&#226;&#224;&#229;&#236; &#243;&#241;&#242;&#240;&#238;&#233;&#241;&#242;&#226;&#238;
        printf("/n handle %x",pI->OpenLDevice());
        printf("/n plata test %d",pI->PlataTest());

        pI->ReadPlataDescr(&pd);
        float B=pd.KoefADC[0]; //&#234;&#238;&#240;&#240;. &#241;&#236;&#229;&#249;&#229;&#237;&#232;&#229; 0 &#228;&#235;&#255; x1
        float A=pd.KoefADC[8]; //&#234;&#238;&#240;&#240;. &#236;&#224;&#241;&#248;&#242;&#224;&#225; &#228;&#235;&#255; x1
        pI->GetSlotParam(&sl);

        // &#231;&#224;&#239;&#238;&#235;&#237;&#255;&#229;&#236; &#241;&#242;&#240;&#243;&#234;&#242;&#243;&#240;&#243;  &#241; &#238;&#239;&#232;&#241;&#224;&#237;&#232;&#229;&#236; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#238;&#226; &#241;&#225;&#238;&#240;&#224; &#228;&#224;&#237;&#237;&#251;&#245; &#241; &#192;&#214;&#207;
        ap.t2.s_Type = L_ADC_PARAM;
        ap.t2.AutoInit = 1;         // &#246;&#232;&#234;&#235;&#232;&#247;&#229;&#241;&#234;&#232;&#233; &#238;&#239;&#240;&#238;&#241;
        ap.t2.dRate = 1;          // &#247;&#224;&#241;&#242;&#238;&#242;&#224; &#238;&#239;&#240;&#238;&#241;&#224; &#234;&#224;&#237;&#224;&#235;&#238;&#226; &#226; &#234;&#224;&#228;&#240;&#229;
        ap.t2.dKadr = 1;            // &#232;&#237;&#242; &#236;&#241; &#236;&#229;&#230; &#234;&#224;&#228;&#240;&#224;&#236;&#232;

        ap.t2.SynchroType = 0;      // &#226;&#237;&#243;&#242;&#240;&#229;&#237; &#241;&#232;&#237;&#245;&#240; - &#239;&#240;&#238;&#227;&#240;&#224;&#236;&#237; &#243;&#239;&#240;-&#229;
        ap.t2.SynchroSrc = 0;       // &#232;&#241;&#242; &#226;&#237;&#229;&#248; &#241;&#232;&#237;&#245; &#238;&#242;&#234;&#235;

        float k;
        ap.t2.NCh = 1;               // &#234;&#238;&#235;-&#226;&#238; &#238;&#239;&#240;&#224;&#248; &#234;&#224;&#237;&#224;&#235;&#238;&#226;

        /* &#228;&#232;&#224;&#239;&#224;&#231;&#238;&#237; +/-10&#194; */
        ap.t2.Chn[0] = 0x00;         // &#239;&#229;&#240;&#226;&#251;&#233; &#234;&#224;&#237;&#224;&#235; &#232; &#243;&#241;&#232;&#235;&#229;&#237;&#232;&#229;
        k=8191/10;

        ap.t2.FIFO = 1;
        int ktsa=100;
        ap.t2.IrqStep = ktsa;                //&#234;&#238;&#235;. &#238;&#241;&#247;&#229;&#242;&#238;&#226; &#226; &#241;&#242;&#240;&#224;&#237;&#232;&#246;&#229;
        int   kp = 200;       //&#234;&#238;&#235;. &#241;&#242;&#240;
        ap.t2.Pages = kp;
        kta=ktsa*kp;
        ap.t2.IrqEna = 0x8004000B; // (&#241;&#242;&#240; 29 &#239;&#238;&#235;&#252;&#231;)&#240;&#224;&#231;&#240;&#229;&#248;&#229;&#237;&#238; &#239;&#240;&#229;&#240;&#251;&#226;&#224;&#237;&#232;&#229; &#239;&#238; &#231;&#224;&#239;&#232;&#241;&#232; &#226; &#225;&#243;&#244;&#229;&#240; &#192;&#214;&#207; &#208;&#209; &#231;&#224;&#228;&#224;&#237;&#237;&#238;&#227;&#238; &#238;&#242;&#249;&#229;&#242;&#224; &#232; &#239;&#238; &#239;&#229;&#240;&#229;&#239;&#238;&#235;&#237;&#229;&#237;&#232;&#254; &#225;&#243;&#244;&#244;&#229;&#240;&#224; &#192;&#214;&#207;(&#237;&#224; &#239;&#235;&#224;&#242;&#229;)
        ap.t2.AdcEna = 1;//&#240;&#224;&#231;&#240;&#229;&#248;&#224;&#229;&#236; &#192;&#214;&#207;
        // &#236;&#238;&#230;&#237;&#238; &#239;&#240;&#229;&#240;&#251;&#226;&#224;&#237;&#232;&#255; &#240;&#224;&#231;&#240;&#229;&#248;&#232;&#242;&#252; &#242;&#238;&#227;&#228;&#224; &#225;&#243;&#228;&#229;&#242; &#227;&#229;&#237;&#229;&#240;&#232;&#240;&#238;&#226;&#224;&#242;&#252;&#241;&#255; &#241;&#238;&#225;&#251;&#242;&#232;&#229; &#241;&#236; OSC_L791.TST
        pI->FillDAQparameters(&ap.t2);
        tm = 12000;  // &#244;&#243;&#237;&#234;&#246;&#232;&#255; &#226;&#229;&#240;&#237;&#229;&#242; &#226;&#241;&#229;&#227;&#228;&#224; 512&#202; &#241;&#235;&#238;&#226;
        // &#238;&#237;&#224; &#226;&#251;&#228;&#229;&#235;&#255;&#229;&#242; &#239;&#240;&#232; &#239;&#229;&#240;&#226;&#238;&#236; &#226;&#251;&#231;&#238;&#226;&#229; &#228;&#226;&#224; &#225;&#243;&#244;&#229;&#240;&#224; &#239;&#238; 128&#202; &#238;&#242;&#241;&#247;&#229;&#242;&#238;&#226; &#228;&#235;&#255; &#192;&#214;&#207; &#232; &#214;&#192;&#207;
        pI->RequestBufferStream(&tm,L_STREAM_ADC);
        pI->SetParametersStream(&ap.t2, &tm, (void**)&data, (void**)&sync,L_STREAM_ADC);

        Form1->Memo1->Lines->Append(FloatToStr(A));
        Form1->Memo1->Lines->Append(FloatToStr(B));

        ////////////////////////////////////////////////////////////////

        // &#200;&#237;&#232;&#246;&#232;&#224;&#235;&#232;&#231;&#232;&#240;&#243;&#229;&#236; &#226;&#237;&#243;&#242;&#240;&#229;&#237;&#237;&#232;&#229; &#239;&#229;&#240;&#229;&#236;&#229;&#237;&#237;&#251;&#229; &#228;&#240;&#224;&#233;&#226;&#229;&#240;&#224;
        pI->InitStartLDevice();
        complete=0;
        // &#209;&#238;&#231;&#228;&#224;&#229;&#236; &#232; &#231;&#224;&#239;&#243;&#241;&#234;&#224;&#229;&#236; &#239;&#238;&#242;&#238;&#234; &#241;&#225;&#238;&#240;&#224; &#228;&#224;&#237;&#237;&#251;&#245;
        // &#199;&#224;&#239;&#243;&#241;&#234;&#224;&#229;&#236; &#241;&#225;&#238;&#240; &#226; &#228;&#240;&#224;&#233;&#226;&#229;&#240;&#229;
        status=pI->StartLDevice();
        //&#207;&#229;&#247;&#224;&#242;&#224;&#229;&#236; &#228;&#224;&#237;&#237;&#251;&#229; &#232;&#231; &#225;&#243;&#244;&#229;&#240;&#224; &#192;&#214;&#207;
        if(adc_data!=NULL)
        delete[] adc_data;
        adc_data= new double[kta];
        adc_data_2= new double[kta];
        Sleep(kta*1+100);      // &#231;&#224;&#228;&#229;&#240;&#230;&#234;&#224; &#237;&#224; kta+100
        for(i=0;i<kta;i++)
        {
                USHORT Buf_short;
                Buf_short = (data[i]&0x3FFF)<<2;
                adc_data[i] = *((short*)(&Buf_short))/4;
                adc_data[i] = ((adc_data[i])/k);
                adc_data_2[i] = adc_data[i];
                Form1->Memo2->Lines->Append(FloatToStr(ceil(adc_data[i]*1000)/1000)+/'//'+IntToStr(i));
                Series1->AddXY(i,(adc_data[i]),"", clBlue);
        }
        pI->StopLDevice(); // &#206;&#241;&#242;&#224;&#237;&#238;&#226;&#232;&#235;&#232; &#241;&#225;&#238;&#240;
        pI->CloseLDevice();
        pI->Release();
        CloseHandle(hThread);
        trace("Exit");
}

Дмитрий
04.03.2013 12:00:15
#2

Гость

Re: ошибка 0x0000000A при работе с картой L791

прошу прощения за некорректный текст

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <objbase.h>
#include <fstream.h>
#include <iomanip.h>

#include <math.h>
#include <stdlib.h>

#include "include//ioctl.h"
#include "include//ifc_ldev.h"
#include "include//create.h"
#include "include//791cmd.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

int i, kta=0, ktsa=0, kp, n, PointCount;
double *adc_data_2, *adc_data=NULL, *dac_data=NULL, Chastota_global;
ULONG   *fdata, *fdata1;

long fsize,k;
ULONG *data, *data1;
ULONG *sync, *sync1;
ULONG status;
USHORT complete;
HANDLE hThread;
ULONG Tid;
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void trace(const char* msg)
{
        Form1->Memo1->Lines->Append(/*"Client 1:/t"*/ msg);
}
void __fastcall TForm1::Button5Click(TObject *Sender)
{
        Series1->Clear();
        Form1->Memo1->Clear();
        Form1->Memo2->Clear();

        ADC_PAR ap;
        PLATA_DESCR_L791 pd;
        SLOT_PAR sl;
        ULONG tm;
        ULONG slot = 0;

        CallCreateInstance("lcomp.dll");
        LUnknown* pIUnknown = CreateInstance(slot);
        if(pIUnknown == NULL) { Form1->Memo1->Lines->Append("CallCreateInstance failed");}
        trace("Get IDaqLDevice interface");
        IDaqLDevice* pI;
        HRESULT hr = pIUnknown->QueryInterface(IID_ILDEV,(void**)&pI);
        if(!SUCCEEDED(hr)) { trace("Get IDaqLDevice failed");}
        trace("IDaqLDevice get success");
        trace("Free IUnknown");
        pIUnknown->Release();

        printf("/n handle %x",pI->OpenLDevice());
        printf("/n plata test %d",pI->PlataTest());

        pI->ReadPlataDescr(&pd);
        float B=pd.KoefADC[0];
        float A=pd.KoefADC[8];
        pI->GetSlotParam(&sl);

        ap.t2.s_Type = L_ADC_PARAM;
        ap.t2.AutoInit = 1;
        ap.t2.dRate = 1;
        ap.t2.dKadr = 1;

        ap.t2.SynchroType = 0;
        ap.t2.SynchroSrc = 0;

        float k;
        ap.t2.NCh = 1;

        ap.t2.Chn[0] = 0x00;
        k=8191/10;

        ap.t2.FIFO = 1;
        int ktsa=100;
        ap.t2.IrqStep = ktsa;
        int   kp = 200;
        ap.t2.Pages = kp;
        kta=ktsa*kp;
        ap.t2.IrqEna = 0x8004000B;
        ap.t2.AdcEna = 1;
        pI->FillDAQparameters(&ap.t2);
        tm = 12000;
        pI->RequestBufferStream(&tm,L_STREAM_ADC);
        pI->SetParametersStream(&ap.t2, &tm, (void**)&data, (void**)&sync,L_STREAM_ADC);

        Form1->Memo1->Lines->Append(FloatToStr(A));
        Form1->Memo1->Lines->Append(FloatToStr(B));

        ////////////////////////////////////////////////////////////////

        pI->InitStartLDevice();
        complete=0;
        status=pI->StartLDevice();
        if(adc_data!=NULL)
        delete[] adc_data;
        adc_data= new double[kta];
        adc_data_2= new double[kta];
        Sleep(kta*1+100);
        for(i=0;i<kta;i++)
        {
                USHORT Buf_short;
                Buf_short = (data[i]&0x3FFF)<<2;
                adc_data[i] = *((short*)(&Buf_short))/4;
                adc_data[i] = ((adc_data[i])/k);
                adc_data_2[i] = adc_data[i];
                Form1->Memo2->Lines->Append(FloatToStr(ceil(adc_data[i]*1000)/1000)+/'//'+IntToStr(i));
                Series1->AddXY(i,(adc_data[i]),"", clBlue);
        }
        pI->StopLDevice();
        pI->CloseLDevice();
        pI->Release();
        CloseHandle(hThread);
        trace("Exit");
}

04.03.2013 13:28:53
#3

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

Re: ошибка 0x0000000A при работе с картой L791

Пример из lcomp как работает? сколько оперативной памяти установлено на компе и какая операционная система?

Дмитрий
04.03.2013 14:05:09
#4

Гость

Re: ошибка 0x0000000A при работе с картой L791

512Мб, ХР SP3
пример здесь C:/Program Files/L-Card/LIBRARY/L791.TST ? если да то как его запустить? в подпапке Release_x86 запустил client, мелькнула консоль и все

04.03.2013 14:21:03
#5

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

Re: ошибка 0x0000000A при работе с картой L791

ну вот запустить чтобы не мелькнула. открыть консоль и там запустить. он там подсказку о параметрах запуска печатает емнип..

Дмитрий
04.03.2013 14:44:09
#6

Гость

Re: ошибка 0x0000000A при работе с картой L791

вот что выдало

C:/>"Program Files/L-Card/LIBRARY/L791.TST/Release_x86/client.exe"
L-791 simple example.
(c) 2010 L-Card.
Usage:
   client <slot number>
   <slot number> - 0... (if one board installed - 0);

04.03.2013 15:55:35
#7

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

Re: ошибка 0x0000000A при работе с картой L791

ну вот "client 0" и надо ее запустить