написал программу для этой карты, компилирую, запускаю и выскакивает 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; // ñîçäàåì ïåðåìåííóþ ïîä ñòðóêòóðó ïàðàìåòðîâ
//DAC_PAR dacPar; // ñîçäàåì ïåðåìåííóþ ïîä ñòðóêòóðó ïàðàìåòðîâ
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]; //êîðð. ñìåùåíèå 0 äëÿ x1
float A=pd.KoefADC[8]; //êîðð. ìàñøòàá äëÿ x1
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; // êîë-âî îïðàø êàíàëîâ
/* äèàïàçîí +/-10Â */
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; // (ñòð 29 ïîëüç)ðàçðåøåíî ïðåðûâàíèå ïî çàïèñè â áóôåð ÀÖÏ ÐÑ çàäàííîãî îòùåòà è ïî ïåðåïîëíåíèþ áóôôåðà ÀÖÏ(íà ïëàòå)
ap.t2.AdcEna = 1;//ðàçðåøàåì ÀÖÏ
// ìîæíî ïðåðûâàíèÿ ðàçðåøèòü òîãäà áóäåò ãåíåðèðîâàòüñÿ ñîáûòèå ñì OSC_L791.TST
pI->FillDAQparameters(&ap.t2);
tm = 12000; // ôóíêöèÿ âåðíåò âñåãäà 512Ê ñëîâ
// îíà âûäåëÿåò ïðè ïåðâîì âûçîâå äâà áóôåðà ïî 128Ê îòñ÷åòîâ äëÿ ÀÖÏ è ÖÀÏ
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); // çàäåðæêà íà 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(); // Îñòàíîâèëè ñáîð
pI->CloseLDevice();
pI->Release();
CloseHandle(hThread);
trace("Exit");
}