mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anweisungszeilen 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: Burkhard Olfermann (olfi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Wo liegt der Stack?
MfG

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

Bewertung
0 lesenswert
nicht lesenswert
Im RAM.
Also in genau dem gleichen Speicher in dem auch deine Variablen
sind. Und von diesem Speicher sagt der Compiler, dass alleine
deine Variablen diesen Speicher bereits zu 95% dicht machen.

Autor: A.W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann ich mein RAM reduzieren?
Ich benutze hauptsächlich viele char Anweisungen. Diese sind folgend 
aufgebaut:

int uart_sende_zeichen(unsigned char zeichen)
{
  while (!(UCSRA & (1<<UDRE)));// warten bis Senden moeglich ist
  UDR = zeichen;   // sende Zeichen
  return 0;
}

// puts ist unabhaengig vom Controllertyp
void sende_string (char *text)
{
  while (*text)
  {                        uart_sende_zeichen(*text);
    text++;
  }
}

int main (void)
{
    usartinit();
    sende_string("\n\n\rWaehlen Sie bitte einen Modus aus:\n\n\r");
    return (0);
}

MFG

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du könntest die Strings in den Programmspeicher auslagern.

Stichwort: PROGMEM (siehe Wiki, oder GCC Manual).

Momentan werden die Strings bei Controllerstart in den Ram geladen, nur 
damit sie einmalig ausgegeben werden. Also bei dieser 
Prozessorarchitektur immense Speicherverschwendung.

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.