' 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 sein