NI VideoMASTER and NI AudioMASTER

cancel
Showing results for 
Search instead for 
Did you mean: 

error -1 occurred at dma - fifo empty detected

Solved!
Go to solution

i seem to have a performance issue regarding the niDigAudio Output Write.vi

 

I have multiple DAQ acquisition/generation loops (producers) within a subVI that runs in its own thread, but called by the parent (GUI). This VI is passed various references (graphs, indicators) that get updated by consumer loops performing audio analysis.

 

Everything runs fine... except when I start moving a slider continuously in the main GUI for more than 3-5 secs. When moving the slider one can see interuptions in the flow of data to the graphs in the main GUI and eventually the FIFO buffer empties completely providing me with an error. see attachment.

 

Ive tried to change the execution system of the VIs: the MAIN GUI is running in the "standard" execution system as "normal priority" and the SubVI (supposedly) running in its own thread is set to the "data acquisition" execution system and i even tried setting the priority to "highest" but none of the above helped.

 

The user action (sliding the slider continuously) seems to interupting my DAQ/GEN loops and I dont know why. Could it be that my consumers that are feeding the MAIN GUI (using references) with data get stuck and in turn produce delays in the SubVI/Generation Thread???

 

Any expertise would be appreciated.

:. LV2010 SP1 ... W7 .:
0 Kudos
Message 1 of 3
(7,621 Views)
Solution
Accepted by topic author inversion

Hi, here is my input based on experience from developers in Multimedia group:

A VI is forced to run in the GUI execution thread when it is passed GUI object references or when it is set to update GUI objects such as indicators. The solution is to remove all UI activity in the high priority VI and communicate only to it via a queue or LabVIEW function (old-style) global.

 

Best regards,

Christian Koefoed

PSE Multimedia group (VMS, VideoMASTER and AudioMASTER)

0 Kudos
Message 2 of 3
(7,592 Views)

Hello ckoefoed,

 

That seems to work a treat! Thank you very much for your support.

 

All data that is sent to the thread is sent over notifiers that pass a cluster of data over. This data is also changed while the thread is running using the notifier... for example the frequency of the generator, amplitude etc... This producer thread now runs in the "data acquisition" execution system while the consumer runs in the "standard" execution system.

 

Data retrieved by the producer thread is sent over to a consumer VI also running as a thread that updates the GUI, graphs, indicators etc...

 

seems to run fine with no errors now... however I have one more question. as i move the slider in the GUI the indicator/graph update is slower that before. this is down to the slider and graph being in the same execution system. is there anyway to seperate these so that the when i move the slider it does not interupt any graph indicator updates!?

 

many thanks

:. LV2010 SP1 ... W7 .:
0 Kudos
Message 3 of 3
(7,581 Views)