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!

29.04.2009, 16:37
Beitrag #6

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
DLL optimieren
' schrieb:So, ich habe meinen Übeltäter glaube ich ausfindig gemacht. Es liegt nicht an der DLL selbst, sondern an dem Quellcode. Den sollte ich optimieren. Ich denke das wird auch der häufigste Grund sein, wesshalb eine DLL nicht so schnell arbeitet.

Ich hoffe es stört niemanden wenn ich an dieser Stelle mein Problem weiter vertiefe.

Ich habe wie gesagt eine Datenaufnahme mit einer C-Bibliothek geschrieben. Das eigentliche Herzstück ist die Processingfunktion, welche die Daten aufnimmt. Dies soll in Echtzeit geschehen. Dazu werden Speicher mit Funktionen der Bibliothek reserviert. Ich dachte mir das folgendermaßen:
Nach jedem Schuss (der Datenaufnahme) wird eine Funktion aufgerufen. In dieser Funktion möchte ich die aufgenommenen Daten nur an LabVIEW weiterleiten. Dort werden die aufgenommenen Daten in eine Queue geschoben und weiterverarbeitet. Soweit funtkioniert das auch. Allerdings macht mir die Funktion, welche mir die Daten in ein LabVIEW Array kopiert, einen strich durch die Rechnung. Diese ist nämlich zu langsam. Ich kann mir allerdings die Adresse des Puffers auslesen, in welchen die Daten abgelegt wurden. Jetzt war mein zweiter Gedanke ich übergebe diesen Pointer einfach der Funktion PostLVUserEvent, aber das führt zu einem Fehler (unexpected exception oder so ähnlich). Nun habe ich versucht mittels des MoveBlock die Daten in mein LVPuffer zu schieben. Das funktioniert noch, aber wenn ich dann dies versuche:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>(*Memory)->dimSize[0] = 1234;
(*Memory)->dimSize[1] = 1234;</div>
um es mit dem PostLVUserEvent an LV zu übergeben kommt selbe Fehlermeldung wie eben geschildert. In etwa sieht das ganze so aus:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>typedef struct{
int32 dimSize[2];
uInt16 elements;
} **UInt16HAndle;

UInt16Handle LVMemory = NULL;

// Variable zum Speichern der Pufferadresse.
unsigned long addr;
GetBufferInfo(EventID, MODIFIED_BUFFER_ID, &Buffer);
BufferInquire(Buffer, HOST_ADDRESS, &addr);
MoveBlock((void*)addr, (void*)LVMemory, sizeof(uInt16)*SizeX*SizeY);
(*LVMemory)->dimSize[0] = SizeY;
(*LVMemory)->dimSize[1} = SizeX;

PostLVUserEvent(LVUserEventRef, &LVMemory);</div>
Wie kann ich im Letzten Schritt die Daten an mein LV Array übergeben und das möglichst schnell.

Danke (wahrscheinlich an Rolf ;-) )

Also schau doch mal hier:

UInt16Handle LVMemory = NULL;

und dann hier:

MoveBlock((void*)addr, (void*)LVMemory, sizeof(uInt16)*SizeX*SizeY);

MoveBlock auf einen NULL pointer (Handle)? No

Da musst Du schon noch zuerst einen NumericArrayResize(uW, 2, &LVMemory, SizeX*SizeY); machen.

Und danach doch wirlklich bitte, bitte:

MoveBlock((void*)addr, (void*)(*LVMemory)->elements, sizeof(uInt16)*SizeX*SizeY);

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
30
Antwort schreiben 


Nachrichten in diesem Thema
DLL optimieren - abrissbirne - 26.04.2009, 16:21
DLL optimieren - rolfk - 27.04.2009, 08:01
DLL optimieren - abrissbirne - 27.04.2009, 09:06
DLL optimieren - rolfk - 27.04.2009, 09:48
DLL optimieren - abrissbirne - 29.04.2009, 16:22
DLL optimieren - rolfk - 29.04.2009 16:37
DLL optimieren - abrissbirne - 29.04.2009, 17:08
DLL optimieren - jg - 29.04.2009, 19:01
DLL optimieren - rolfk - 29.04.2009, 19:42
DLL optimieren - abrissbirne - 30.04.2009, 13:54
DLL optimieren - rolfk - 03.05.2009, 11:48
DLL optimieren - abrissbirne - 04.05.2009, 14:07
DLL optimieren - rolfk - 04.05.2009, 19:17
DLL optimieren - abrissbirne - 05.05.2009, 16:18

Gehe zu: