03-02-2011 04:23 PM
I am performing RT data acquisition where I output a digital waveform and some boolean constants on port0 and acquire data on 16 channels. In the time-critical loop I acquire data, reshape it to 1D of SGL and it goes into RT FIFO. In the non-time-critical loop I buffer it so that a 2048000 long 1D array [7.81MB] is handed over to TCP to transmit it to the host.
The problem is that each time I run the target VI the load of the two cores of RT target goes up to 100% and the RT target becomes inaccessible on network, it doesn't respond to reboot command from MAX for example. As I checked it no TCP packets are sent out from the RT target to the host [or only a very few, I am unsure].
The time-critical loop executes in every 40us with priority 100, the non-time-critical loop executes in every 4us with priority 99. The LV automatically assigns the cores to the tasks.
The non-time-critical loop runs 10x faster than the time-critical one because I think it needs more time to buffer and say if the time-critical does its acquisition in x us then the rest of the time [40 - x us] is available for the non-time-critical loop to buffer the data and to tcp it to the host.
Can somebody please suggest how to get around this problem.
Thanks,
Krivan
03-03-2011 01:41 AM
You simply overstress your RT CPU. Have a look at your desktop RT performance monitor via the video out (VGA/DVI). If you use a multicore cpu you should see which timecritical loop goes to 100%. It's recommended to use one core per timecritical loop and you can assign them manually. Are you sure that you set a priority to a non time critical loop ???
For debug I suggest to slow down the loops and monitor the CPU load. Be aware that an untimed while loop takes 100% load by default.
Hope it helps
Christian