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 

RT Speicher Überlauf



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!

27.01.2009, 16:55
Beitrag #1

Peyotito Offline
LVF-Grünschnabel
*


Beiträge: 21
Registriert seit: Jan 2008

8.5
2007
kA

10247
Deutschland
RT Speicher Überlauf
Hallo!

Ich habe folgendes Problem:

Aufbau: ein RT Rechner wartet auch Befehle von einem Win-Host, die via Shared Variablen bekommt und liefert dann Ergebnisse ebenfalls via SVE zurück oder startet Aktionen via FPGA

Zu den Problemen mit der SVE und dem Datasocket lass mich hier jetzt erstmal nicht aus.

Laut RT System Manager verbraucht er ca. 4-5 KB /s Memory. Ich habe beim vi Start ca. 12900 KB frei und komme so auf ca. 50 Sek. Laufzeit.

Ich lese die SVE Befehlsvariablen in mehreren parallelen Schleifen aus, da manche Vorgänge auch etwas länger dauern können und der RT auch Sachen parallel abarbeitet.

Ich habe schon versucht gewisse Sachen wie Arrays so gut es geht zu vermeiden und den Speicherplatz anschliessend wieder frei zu geben.

Aber irgendwie komme ich auf keinen grünen Zweig.

Vielleicht hat jmd. Rat.?
Wie stelle ich z.B. fest, ob nicht der FPGA Code den Speicherplatz verbraucht?

Bei Bedarf lad ich auch gerne mal das vi hoch, sind allerdings 2,5 MB

Danke schon mal

P.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
27.01.2009, 17:12
Beitrag #2

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
RT Speicher Überlauf
' schrieb:Hallo!

Ich habe folgendes Problem:

Aufbau: ein RT Rechner wartet auch Befehle von einem Win-Host, die via Shared Variablen bekommt und liefert dann Ergebnisse ebenfalls via SVE zurück oder startet Aktionen via FPGA

Zu den Problemen mit der SVE und dem Datasocket lass mich hier jetzt erstmal nicht aus.

Laut RT System Manager verbraucht er ca. 4-5 KB /s Memory. Ich habe beim vi Start ca. 12900 KB frei und komme so auf ca. 50 Sek. Laufzeit.

Ich lese die SVE Befehlsvariablen in mehreren parallelen Schleifen aus, da manche Vorgänge auch etwas länger dauern können und der RT auch Sachen parallel abarbeitet.

Ich habe schon versucht gewisse Sachen wie Arrays so gut es geht zu vermeiden und den Speicherplatz anschliessend wieder frei zu geben.

Aber irgendwie komme ich auf keinen grünen Zweig.

Vielleicht hat jmd. Rat.?
Wie stelle ich z.B. fest, ob nicht der FPGA Code den Speicherplatz verbraucht?

Bei Bedarf lad ich auch gerne mal das vi hoch, sind allerdings 2,5 MB

Danke schon mal

P.

Der FPGA-Code an sich kann keinen Speicher verbrauchen, der Code läuft ja auf dem FPGA. IMHO kann sich der Speicher-Verbrauch NUR erhöhen, wenn man irgendwo Queues vollschreibt und keine max. Queue Size eingestellt hat oder man z.B. irgendwo eine "build array" Primitive verwendet. Das ständige Öffnen von Referenzen oder so OHNE diese nach Gebrauch wieder zu schließen kann auch eine Ursache sein.

Ansonsten gilt die Regel: Während der Laufzeit sollte unter RT man tunlichst vermeiden neuen Speicher anzufordern (womit auch immer) sondern alles beim Programm-Start zu allocieren und dann auf dem zur Verfügung stehenden Speicher zu arbeiten, also immer Replace Array subset verwenden wenn man was in ein Array schreibt usw ...

Ob das Problem nun durch die Shared Variables auftritt kann ich dir nicht sagen, ich benutz die Dinger nicht ...

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.01.2009, 08:08
Beitrag #3

Peyotito Offline
LVF-Grünschnabel
*


Beiträge: 21
Registriert seit: Jan 2008

8.5
2007
kA

10247
Deutschland
RT Speicher Überlauf
' schrieb:Der FPGA-Code an sich kann keinen Speicher verbrauchen, der Code läuft ja auf dem FPGA. IMHO kann sich der Speicher-Verbrauch NUR erhöhen, wenn man irgendwo Queues vollschreibt und keine max. Queue Size eingestellt hat oder man z.B. irgendwo eine "build array" Primitive verwendet. Das ständige Öffnen von Referenzen oder so OHNE diese nach Gebrauch wieder zu schließen kann auch eine Ursache sein.

Ansonsten gilt die Regel: Während der Laufzeit sollte unter RT man tunlichst vermeiden neuen Speicher anzufordern (womit auch immer) sondern alles beim Programm-Start zu allocieren und dann auf dem zur Verfügung stehenden Speicher zu arbeiten, also immer Replace Array subset verwenden wenn man was in ein Array schreibt usw ...

Ob das Problem nun durch die Shared Variables auftritt kann ich dir nicht sagen, ich benutz die Dinger nicht ...

Hallo!

Danke für dir schnelle Antwort!

Bezgl. FPGA: Ich hab gelesen, dass man dort Arrays tunlichst vermeiden soll?! Meinst du das mit Queues?

Bezgl. RT: Hm, ich benutze das Array eigentlich nur in ganz bestimmten Fällen/Cases und die werden auch manchmal garnicht aufgerufen. Trotzdem steigt der Speicherbedarf!
Scheint an den SVE Variablen zu liegen, nur wie kann ich das lösen?

P.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.01.2009, 08:33
Beitrag #4

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
RT Speicher Überlauf
' schrieb:Hallo!

Danke für dir schnelle Antwort!

Bezgl. FPGA: Ich hab gelesen, dass man dort Arrays tunlichst vermeiden soll?! Meinst du das mit Queues?

Bezgl. RT: Hm, ich benutze das Array eigentlich nur in ganz bestimmten Fällen/Cases und die werden auch manchmal garnicht aufgerufen. Trotzdem steigt der Speicherbedarf!
Scheint an den SVE Variablen zu liegen, nur wie kann ich das lösen?

P.

auf dem FPGA gibt es keine Queues, die gibt es nur auf dem RT-Host, und dort sollte man sie mit Vorsicht genießen und ggf. durch RT-FIFOs ersetzen (z.B. wenn man einen kontinuierlichen Datenstrom von einem zum anderen VI übertragen will)

Den Speicher von Queues kann man beim Start des Programms allocieren, in dem man dem Queue eine feste Größe gibt, ihn dann einmal "ganz voll macht" und anschließend eine Flush Queue Primitive ausführt. Man sollte auch darauf achten, dass - wenn man diese Methode so anwendet - man bei Einfüge-Operationen immer einen Timeout mit angibt, damit die Insert Into Queue Primitive mit einem Fehler abbricht, wenn die Queue voll ist ...

Arrays auf dem FPGA haben immer eine feste Größe, die man einstellen muss, dynamische Arrays wie auf dem PC oder dem RT-Host gibt es nicht, früher oder später würde der Compiler einen Fehler melden wenn man versucht sowas zu programmieren. Zudem hat der Speicher-Verbrauch auf dem FPGA rein gar nichts mit dem Speicher-Verbrauch auf dem RT-Host zu tun. Wenn das FPGA-VI kompiliert ist, ist das ein Bitfile an dem sich nichts mehr ändert.

Wie gesagt von diesen Shared Variables hab ich keine Ahnung, ich benutze Sie nicht, weil sie zum einen (als ich es getestet habe) sich nicht an Typedefs binden ließen und man sie zum anderen immer Pollen muß. Das finde ich total lästig und passt auch nicht in meine Art zu Programmieren. Für die Daten-Übertragung zwischen RT-Controller und PC habe ich mein eigenes Protokoll basierend auf TCP-IP entwickelt das super funktioniert. Zum einen habe ich damit eine sichere Datenübertragung (durch das TCP) zum anderen habe ich damit quasi soetwas wie ein Event: wenn eine Nachricht eingeht (ist egal auf welcher Seite) wird die Botschaft in eine Queue geschoben und von dem entsprechenden Modul verarbeitet ...

Wenn du das nun debuggen musst, würde ich einfach mal die Shared Variables eliminierenund zu Test-Zwecken z.B. durch Globale Variablen ersetzen. Dann kannst du das RT-VI laufen lassen und zur Laufzeit die Werte der GVs ändern und dir dabei mit dem RT-System-Manager den Speicher-Bedarf angucken. Steigt er immer noch lag's nicht an den SVs, ist es weg wird's das wohl gewesen seinWink

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Gehe zu: