LabVIEWForum.de - DLL optimieren

LabVIEWForum.de

Normale Version: DLL optimieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
' schrieb:Ok, danke dafür.
Es funktioniert zwar, ist aber auch nicht wesentlich schneller. Gibt es keine Möglichkeit einen Pointer auf Daten direkt an LV zu übergeben? Die Daten die aufgenommen werden haben den Datentyp Unsigned+16. Oder kann man sogar anstallt PostLVUserEvent Daten direkt in die LV Queu schieben.

Danke

Nein, LabVIEW hat ganz spezifische Anforderungen an Speicherbereiche und da kommt man nicht umhin. Die einzige sinnvolle Möglichkeit ist wie schon gesagt das Allozieren eines LabVIEW Handles und dann die Übergabe des C Speicherpointers darin an Deine andere Library. Die muss dazu natürlich die Übergabe eines Heapspeichers zulassen. Wenn sie darauf besteht diesen selber anzulegen (ob onboard oder wie auch immer) dann ist's das Ende der Geschichte.

Da ist nichts zu machen. Da muss schon die Treiberbibliothek die Flexibilität mitbringen. Mit Visual Basic uns so ziemlich jeder anderen höheren Entwickelumgebung ausser C (wobei viele C als alles ausser höhere Programmiersprache einstufen) wäre das grundsätzlich nicht anders.

Rolf Kalbermatter
' schrieb:Nein, LabVIEW hat ganz spezifische Anforderungen an Speicherbereiche und da kommt man nicht umhin. Die einzige sinnvolle Möglichkeit ist wie schon gesagt das Allozieren eines LabVIEW Handles und dann die Übergabe des C Speicherpointers darin an Deine andere Library. Die muss dazu natürlich die Übergabe eines Heapspeichers zulassen. Wenn sie darauf besteht diesen selber anzulegen (ob onboard oder wie auch immer) dann ist's das Ende der Geschichte.

Da ist nichts zu machen. Da muss schon die Treiberbibliothek die Flexibilität mitbringen. Mit Visual Basic uns so ziemlich jeder anderen höheren Entwickelumgebung ausser C (wobei viele C als alles ausser höhere Programmiersprache einstufen) wäre das grundsätzlich nicht anders.

Rolf Kalbermatter
Ich habe gerade mal mit dem Support telefoniert. Ich kann wohl der Bibliothek einen Pointer Speicherbereich übergeben in den geschrieben werden soll. Allerdings muss dieser Speicher physicalisch linear sein und nicht fragmentiert. Das heißt doch das ich einen DMA Speicher reservieren müsste, oder? Das wird wohl mit dem LV Memory Manager nicht möglich sein? Ich habe dahingehend mal nichts in dem Handbuch entdeckt. Wäre das so eine Übergabe eines Heapspeichers? Kann ich sowas mit LV realisieren?

Danke
' schrieb:Ich habe gerade mal mit dem Support telefoniert. Ich kann wohl der Bibliothek einen Pointer Speicherbereich übergeben in den geschrieben werden soll. Allerdings muss dieser Speicher physicalisch linear sein und nicht fragmentiert. Das heißt doch das ich einen DMA Speicher reservieren müsste, oder? Das wird wohl mit dem LV Memory Manager nicht möglich sein? Ich habe dahingehend mal nichts in dem Handbuch entdeckt. Wäre das so eine Übergabe eines Heapspeichers? Kann ich sowas mit LV realisieren?

Danke

Ein Speicherblock auf dem Heap ist linear aber eben nur im virtuellen Speichermodell. Und ich denke mal dass die hier wohl einen linearen physikalischen Speicherbereich meinen, weil sie den wohl direkt als DMA Buffer verwenden wollen. Solche Speicherbereich lassen sich nur aus dem Kernel mit Kernelfunktionen anlegen und veränderen, also unmöglich für LabVIEW. Ohne komplizierte Unterstützung von ScatterGather DMA Logic ist die direkte Verwendung von Applikationsspeicher in einem Treiber für DMA Zwecke unmöglich und das Umgekehrte, die Verwendung von DMA Speicherbereichen direkt in einer modernen Multithreading Umgebung auf Applikationsebene noch viel mehr. Ohne Kopieren geht da eigentlich nichts.

Rolf Kalbermatter
' schrieb:Ein Speicherblock auf dem Heap ist linear aber eben nur im virtuellen Speichermodell. Und ich denke mal dass die hier wohl einen linearen physikalischen Speicherbereich meinen, weil sie den wohl direkt als DMA Buffer verwenden wollen. Solche Speicherbereich lassen sich nur aus dem Kernel mit Kernelfunktionen anlegen und veränderen, also unmöglich für LabVIEW. Ohne komplizierte Unterstützung von ScatterGather DMA Logic ist die direkte Verwendung von Applikationsspeicher in einem Treiber für DMA Zwecke unmöglich und das Umgekehrte, die Verwendung von DMA Speicherbereichen direkt in einer modernen Multithreading Umgebung auf Applikationsebene noch viel mehr. Ohne Kopieren geht da eigentlich nichts.

Rolf Kalbermatter
Danke. Ich hab es bereits befürchtet. Muss mal sehen wie weit ich mein Code noch optimieren kann um evt. doch auf die volle Datenrate zu kommen.

Gruß, Andreas
Seiten: 1 2
Referenz-URLs