INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

DLL optimieren



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

03.05.2009, 11:48
Beitrag #11

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
DLL optimieren
' 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

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
04.05.2009, 14:07
Beitrag #12

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
DLL optimieren
' 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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.05.2009, 19:17
Beitrag #13

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
DLL optimieren
' 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

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.05.2009, 16:18
Beitrag #14

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
DLL optimieren
' 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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Gehe zu: