03-21-2012 11:34 AM
Hi all,
I'm using double-buffering DMA to transfer data into half of a locked buffer I allocated using viMemAlloc(...)
I want to process the first block of DMA data while the other half is being DMA'd in.
The tutorial (http://zone.ni.com/devzone/cda/tut/p/id/3251) suggests that I should be copying the whole buffer out to user memory using viMoveIn32(..., VI_PXI_ALLOC_SPACE, ...)
It seems like an unnecessary step when I can simply get a pointer to the buffer using viMapAddress.
Having said that, it seems that if I use the viMapAddress method once every few million DMA transfers my PC crashes with a blue screen of death.
Any suggestion why that should be happening?
Carlo
04-02-2012 07:56 AM
Hello Carlo,
Can you please provide some more information regarding the versions software that you are using and the hardware that makes up your system.
Kind regards,
04-02-2012 08:32 AM
Hi Daniel,
I'm using NI-VISA 4.6, our system uses a PLX 9056 device to implement the PCI interface and we DMA data by having the 9056 take control of the bus and write to a locked buffer as suggested in the tutorial above.
Looking better at what the code now does,I copied to a user buffer before a new DMA transaction is kicked off while before I had concurrent access to the locked buffer from the next DMA transaction and from the user threads (using a pointer provided by viMapAddress).
Carlo