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!
hallo liebes forum,
ich habe wieder mal ein problem, bzw. eine frage die sich auf ein problem bezieht. ich habe in c eine 3D autokorrelationsfunktion geschrieben und möchte jetzt die daten in LV ploten. ich übergebe über den knoten die zu überprüfenden daten und erhalte als rückgabewert jeweils ein array für x,y und z korrdinaten. so jetzt mein problem: ich habe festgestellt, wenn die anzahl der daten über ca. 25000Xuint32 je dimension überschreitet, gibt LV eine fehlermeldung bezüglich des speichers heraus. unterhalb arraysize von 25000 ist alles in ordnung. kann es sein das der speicher in lv begrenzt ist? ich verstehe das nicht ganz, da doch von der dll ein pointer übergeben - und nicht das array nach lv kopiert wird. kann mir da vielleicht jemand eine aufklärung geben.... vielen dank im voraus
' schrieb:hallo liebes forum,
ich habe wieder mal ein problem, bzw. eine frage die sich auf ein problem bezieht. ich habe in c eine 3D autokorrelationsfunktion geschrieben und möchte jetzt die daten in LV ploten. ich übergebe über den knoten die zu überprüfenden daten und erhalte als rückgabewert jeweils ein array für x,y und z korrdinaten. so jetzt mein problem: ich habe festgestellt, wenn die anzahl der daten über ca. 25000Xuint32 je dimension überschreitet, gibt LV eine fehlermeldung bezüglich des speichers heraus. unterhalb arraysize von 25000 ist alles in ordnung. kann es sein das der speicher in lv begrenzt ist? ich verstehe das nicht ganz, da doch von der dll ein pointer übergeben - und nicht das array nach lv kopiert wird. kann mir da vielleicht jemand eine aufklärung geben.... vielen dank im voraus
gruß
dennis
ich hab nicht viel Ahnung von DLLs, aber wenn ich das so lese, dann sind das grad mal ca. 100kByte, die du übergeben willst, und das sollte nun überhaupt kein Problem sein ...
kannst du mal einen screenshot von der Fehlermeldung posten?
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Wieviele Daten kann man in einem Array schreiben?
Ich kann in meinem Beispiel (vgl. Anhang) keinen Fehler feststellen.
Lade doch mal Dein VI hoch.
Normal kannst Du 2^31 Werte in ein Array schreiben.
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
15.05.2007, 09:38 (Dieser Beitrag wurde zuletzt bearbeitet: 15.05.2007 09:39 von IchSelbst.)
' schrieb:da doch von der dll ein pointer übergeben - und nicht das array nach lv kopiert wird.
Die Übergabe eines Pointers schließt nicht aus, dass der DLL-Knoten selbständig und grundsätzlich die Daten, auf die der Pointer zeigt, in den Datenfluß kopiert, der den DLL-Knoten verläßt. Ich tippe eher auf ein Kopieren.
Tritt der Fehler grundsätzlich auf, oder erst, nachdem der DLL-Knoten des öfteren aufgerufen wurde?
Kuck im Fehlerfall mal im Taskmanager nach, was da der Speicherbedarf von LV bzw. der Applikation macht.
Eins hab ich vergessen: Wird der Speicher für die Rückgabedaten von der DLL oder von LV zur Verfügung gestellt?
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
ich habe mal die fehlermeldung und die programmteile als jpeg mit angehängt. zur erklärung des vi´s: im ersten schritt (links) wird aus den daten und der parametrierung des rasters die größe des array berechnet, um den rückgabewerten, definierten speicher zur verfügung zu stellen.
das koriose daran ist halt, dass es nur geht, wenn die rasterung groß genug ist --> ArraySize wird kleiner. sonst kommt die dargestellt fehlermeldung. wenn ich nach der fehlermeldung das programm nochmal ausführe, kommt manchmal auch die fehlermeldung das der lv speicher voll sei.
nur eine Vermutung, aber: könnte es sein, dass dein Fehler daher rührt, dass du nur einmal das "Array-Initialisieren" ausführst und dann sozudagen denselben Speicherbereich an drei Array-Eingänge der dll übergibst? Ich würde deine Ausgangsarrays intialisieren und dann als Ein- und Ausgang anschließen.
MfG, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
hallo jens...
deine vermutung gebe sinn; du meinst, das dass initialisierte array ein und das selbe array (von der adressierung) ist für die drei ausgabe arrays...
mmh nur ich habe leider deinen vorschlag nicht ganz verstanden. meinst du ich initialisiere drei arrays, ohne brücke??? ich versuchs einfach mal... melde mich wenn ich fortschritte gemacht habe... vorerst vielen dank
' schrieb:hallo jens...
deine vermutung gebe sinn; du meinst, das dass initialisierte array ein und das selbe array (von der adressierung) ist für die drei ausgabe arrays...
mmh nur ich habe leider deinen vorschlag nicht ganz verstanden. meinst du ich initialisiere drei arrays, ohne brücke??? ich versuchs einfach mal... melde mich wenn ich fortschritte gemacht habe... vorerst vielen dank
gruß
dennis
Genau, drei Arrays initialieren. Ist zumindest (denke ich) eine Versuch Wert.
MfG, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Eigentlich müsste ich ja sagen, aus der Fehlermeldung geht eindeutig hervor, dass der Fehler in der DLL liegt und nicht in LV.
Der Fehler in der DLL kann aber ein Folgefehler sein, infolge von Parametern, die von LV falsch vorgegeben werden.
Du könntest z.B. folgendes testen. Lass am DLL-Ausgang die Array-Ausgänge, also den Datenfluß am Ausgang, einfach mal weg, und schau ob es immernoch zu eine Fehler kommt.
Das mit dem initialisierten Array halte ich für richtig. Schließlich ist jede Linie ein Datenfluß - und da sollte dann für jeden Datenfluss nach dem Aufspaltungsknoten ein eigener Speicher geschafft worden sein. Außerdem wäre das schon aufgefallen, dann nämlich wären die Ergebnissdaten falsch.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
' schrieb:Das mit dem initialisierten Array halte ich für richtig. Schließlich ist jede Linie ein Datenfluß - und da sollte dann für jeden Datenfluss nach dem Aufspaltungsknoten ein eigener Speicher geschafft worden sein. Außerdem wäre das schon aufgefallen, dann nämlich wären die Ergebnissdaten falsch.
Auja, ich glaube, du hast recht. Dann war mein Vorschlag überflüssig. Da gibt es ein LV-internen Tool, um das zu testen. Muss ich mal bei Gelegenheit ausprobieren.
MfG, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!