-         
Ergebnis 1 bis 6 von 6

Thema: Controller-RAM sparen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    16.02.2014
    Beiträge
    80

    Controller-RAM sparen

    Anzeige

    Hallo Leute,

    ich komme mit meinem derzeitigen Projekt (Ereignislogger) so langsam in einen Bereich wo ich mir Sorgen um den Platz im Controller-RAM mache. Der Compiler sprach von 1200 belegten Bytes der insgesamt 2048 beim Uno. Bin durch kürzen und durch Verwendung identisch gleicher Texte für Konsole- und LCD-Ausgabe (der Compiler optimiert da anscheinend fleißig) dann wieder immerhin auf 800 belegte Byte runtergekommen. Aber das Programm ist ja noch lange nicht vollendet.

    Daher meine Fragen:

    - Wieviel RAM sollte man eigentlich für die Laufzeit so Pi*Daumen noch frei haben?

    - Gibt's eine Möglichkeit den freien RAM zur Laufzeit zu bestimmen und zumindest eine kritische Knappheit zu erkennen?

    - Was verbraucht denn außer lokalen Variablen noch RAM? Ich glaube bei Interrupts und bei Funktionsaufrufen werden zumindest mal die Prozessorregister auf den Stapel gelegt - was sich dann bei mehrfach verschachtelten Aufrufen wohl auch zusammenläppert. Oder?

    - Kann man feste Texte nicht auch irgendwie im Programmcode "verstecken"? Im Flash habe ich noch reichlich Platz. Egal ob ich fest in den Programmcode getippte Texte verwende oder die als const char* übergebe - beides kostet RAM, und zwar gleich viel...

    Und ja - wenn ich hier im Arduino-Board nach "RAM" Suche bekomme ich keinen einzigen Treffer. Ist das normalerweise "kein Thema"....?

    Gruß, Dieter

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    4.571
    hallo,
    du kannst Variablen Im Flash speichern durch das keyword PROGMEM:
    const PROGMEM dataType variableName[] = {};
    https://www.arduino.cc/reference/en/...ities/progmem/

    mit F() kannst du ebenfalls einen cstring im Flash ablegen:
    #define Ausgabe F("Dies ist ein langer Satz.")
    http://shelvin.de/string-im-programm...-und-ausgeben/

    wenn es aber zu knapp wird mit RAM, hilft IMO langfristig nur ein besserer Prozessor.
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    16.02.2014
    Beiträge
    80
    Aha! Danke! Das hilft mir entscheidend weiter. In erster Linie habe ich wohl nur ein String-Problem - dann weiß ich ja jetzt wie ich mir helfen kann wenn's knapp wird.

    Bleibt aber noch die Frage WANN wird's denn knapp? Wieviel RAM sollte man sich für die Laufzeit frei halten?

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    4.571
    Zitat Zitat von cdk Beitrag anzeigen
    Aha! Danke! Das hilft mir entscheidend weiter. In erster Linie habe ich wohl nur ein String-Problem - dann weiß ich ja jetzt wie ich mir helfen kann wenn's knapp wird.

    Bleibt aber noch die Frage WANN wird's denn knapp? Wieviel RAM sollte man sich für die Laufzeit frei halten?
    da kenne ich keine Regel...
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    50
    Beiträge
    1.398
    Es gibt auch keine Regel- theoretisch kann der Ram nahezu voll sein- vorausgesetzt, es ergibt sich im Programmablauf nichts, was zusätzlichen verbraucht.
    Das kann durchaus vorkommen, gelegentlich hatte ich, bei einer Auslastung von über 80%, schon manches merkwürdige Verhalten- was sich mit sparsamerem Umgang beheben liess.

    Das hier: https://playground.arduino.cc/Code/AvailableMemory/ sollte helfen, den tatsächlichen Verbrauch zur Laufzeit mal zu ermitteln....wird aber im Programm mehrmals aufgerufen werden müssen, weil sich der aktuelle Verbrauch ja ändern könnte.
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    16.02.2014
    Beiträge
    80
    Super. Damit kann ich mir im Zweifelsfall dann auch weiterhelfen... obwohl ich teilweise nur Bahnhof verstehe wenn ich so manche Codezeile dort anschaue...

    Habe inzwischen auch mal ein bißchen mit dem F() Makro rumgespielt, das scheint aber etwas verbuggt zu sein. Früher oder später (d.h. umso öfter ich das verwende) tritt beim Compiler ein Segmentation Fault in der LCD-Library auf. Gut, kann natürlich auch an dieser Library liegen.
    Habe mich also auf ein paar "fette" Serial.print() Ausgaben beschränkt, bringt ja auch schon was - und damit läuft's.

Ähnliche Themen

  1. Geld sparen, Strom sparen?
    Von Herkules9987 im Forum Offtopic und Community Tratsch
    Antworten: 13
    Letzter Beitrag: 17.07.2019, 14:05
  2. NACHTLICHT - Strom sparen
    Von dj_cyborg im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 23.08.2014, 13:26
  3. Flag - Speicherplatz sparen
    Von Ali_Baba im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 24.02.2009, 12:27
  4. Übertragungsverluste sparen durch PWM
    Von Bernhard_ im Forum Elektronik
    Antworten: 0
    Letzter Beitrag: 30.08.2005, 11:40
  5. Interupt Port sparen
    Von im Forum Elektronik
    Antworten: 10
    Letzter Beitrag: 13.10.2004, 15:02

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •