Anweisungszeilen von "Build" in AVR-Studio sind unklar

Gast #430371
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
#430444
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.
Moderator Persönliche Seite #430633
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).
#430688
Lesenswert?
• ▲
▼
Warum sträubst du dich so gegen die Umlagerung deiner
konstanten Strings in das Flash.

Hier
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Vereinfachung_f.C3.BCr_Zeichenketten_.28Strings.29_im_Flash
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.