www.mikrocontroller.net

Forum: Compiler & IDEs Anweisungszeilen von "Build" in AVR-Studio sind unklar


Autor: A.W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
ich benutze zum programmieren von ATMega16 AVR-Studio.
Ich kommuniziere mit ATMEGA16 und Terminal mittels Funktionen.
D.h. ich gebe Text am Terminal aus.

Beim drücken im AVR-Studio auf "BUILD AND RUN" kommt folgende Meldung:

********************************************
AVR Memory Usage
----------------
Device: atmega16
Program:    2894 bytes (17.7% Full)
(.text + .data + .bootloader)
Data:        972 bytes (94.9% Full)
(.data + .bss + .noinit)
*********************************************

Mein Problem ist dass sobald die (oben angegebene) vorletzte Zeile fast 
voll ist gibt mein Terminal-Programm zunächst das richtige aus dann aber 
nur Schrott.
Sobald ich ein paar übergebene Strings lösche dann zeigt das 
Terminal-Programm was richtiges an.
Kann mir bitte jemand erklären was die Zeile bedeuten.
MFG

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Zeile hat an sich nichts mit deinem Pgm zu tun.
Das ist lediglich die Zusammenfassung des Compilers,
wie voll dein Prozessor ist, wie stark dein Program
den Speicher belastet.
DIe Data Sektion ist vom Compiler zu run 95% ausegnutzt.
Da kommt jetzt aber zur Laufzeit noch was dazu, so dass
du wahrscheinlich zur Laufzeit einen Stack Overflow
produziert. Mit anderen Worten: Dein Programm geht etwas
zu verschwenderisch mit dem Speicher um.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A.W. wrote:

> Sobald ich ein paar übergebene Strings lösche dann zeigt das
> Terminal-Programm was richtiges an.

Die Strings brauchen RAM (und ROM natürlich auch).

Guck bitte ins AVR-Tutorial um zu lernen, wie man sie in den ROM
auslagert.

Autor: A.W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ich mit den Anweisungen "new" und "delete" den reservierten 
RAM-Speicher freigeben? Ich kenne dies Befehle von c++.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
new und delete sind derzeit nicht implementiert.

Würde dir außerdem nichts nützen, da es sich ja bei den string
literals nicht um dynamische Objekte handelt.

Nein, es führt kein Weg dran vorbei, dass du dir um die Auslagerung
von Daten in den ROM im AVR Gedanken machst, so wie das ...zig
Programmierer vor dir tun mussten.  Dafür ist der AVR halt eine
(echte) Harvard-Maschine mit dem Vorteil, dass das Befehlslesen
und die Datenzugriffe gleichzeitig von statten gehen können (weil
es zwei getrennte Busse sind).

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum sträubst du dich so gegen die Umlagerung deiner
konstanten Strings in das Flash.

Hier
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...
ist beschrieben was es damit auf sich hat und welche
Programmänderungen du machen musst.
Das ganze ist in null komma nichts durchgezogen und dann
hast du Ruhe.

Um es ganz klar zu sagen: Das ist deine einzige Möglichkeit
den RAM-Speicherverbrauch zu senken. Zumindest nach allem
was wir von deinem Pgm wissen. Da hilft kein malloc und
auch kein new. Deine einzige Chance ist es, Dinge nicht
im RAM anzulegen. Und die einfachste Variante dafür, ist
erst mal Sachen die eigentlich konstant sind (wie deine
Texte) aus dem RAM zu verbannen und direkt aus dem Flash
zu holen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.