Forum: Mikrocontroller und Digitale Elektronik Anweisungszeilen in AVR-Studio sind unklar


von A.W. (Gast)


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

von Burkhard O. (olfi)


Lesenswert?

Hi!

Wo liegt der Stack?
MfG

von Karl H. (kbuchegg)


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.

von A.W. (Gast)


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

von Simon K. (simon) Benutzerseite


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.