Hello,
I'm working on generating and acquiring data using the pci 6551 with visual c++.
Since I require a channel to go into high impedance during acquisition, im using writenamedwaveformwdt function. However , I don't quite understand what the 3rd parameter (samples to write) should be. According to the help file it is the number of channels multiplied by waveform size, but during debugging I get memory corruption error. Snippets of my code is as follows:
#define WAVEFORM_SIZE 100000#define WDT_SIZE 100000#define SAMPLES_TO_READ 50 ViRsrc deviceID = "Dev1"; ViConstString channelList = "0-3"; ViInt8 VoltageConfigurationSupported = 0; ViReal64 sampleClockRate; ViConstString triggerSource = "PFI2"; //generation trigger ViInt32 triggerEdge = 12; ViConstString triggerID = "ScriptTrigger0"; ViInt32 dataWidth = 4; ViUInt8 waveformData[WAVEFORM_SIZE]; ViConstString waveformName = "myWfm";for (bit = 0; bit < 1000 ;bit++) { waveformData[z] = 0; z++; waveformData[z] = 0; z++; waveformData[z] = 1; z++; waveformData[z] = 0; z++;
bit++; } /* Note: waveform names are referenced in script */ ViConstString script = "script myScript " " repeat forever " " wait until ScriptTrigger0 " " repeat 1 " " generate myWfm " " end repeat " " end repeat " "end script";
/* Initialize generation session */ checkErr(niHSDIO_InitGenerationSession( deviceID, VI_FALSE, VI_FALSE, VI_NULL, &gvi));
/* Reset Device */
checkErr(niHSDIO_ResetDevice (gvi));
/* Assign channels for dynamic generation */ checkErr(niHSDIO_AssignDynamicChannels (gvi, channelList)); /* Configure clocking parameters */ checkErr(niHSDIO_ConfigureSampleClock( gvi, NIHSDIO_VAL_ON_BOARD_CLOCK_STR, sampleClockRate));
/* Configure hardware script trigger */ checkErr(niHSDIO_ConfigureDigitalEdgeScriptTrigger( gvi, triggerID, triggerSource, triggerEdge)); /* Configure generation mode for scripted generation */ checkErr(niHSDIO_ConfigureGenerationMode(gvi, NIHSDIO_VAL_SCRIPTED));
checkErr(niHSDIO_WriteNamedWaveformWDT(gvi,waveformName,WDT_SIZE,NIHSDIO_VAL_GROUP_BY_SAMPLE,waveformData)); /* Write script to device */ checkErr(niHSDIO_WriteScript(gvi, script));
/* Initiate generation */ checkErr(niHSDIO_Initiate(gvi));
There isn't any error code, the program just terminates, unless running in debug mode.
When I reduce wdt_size to 8 the data isn't what im expecting...
Any suggestions?
Thanks,
Arifa