Forum: Mikrocontroller und Digitale Elektronik mega8 Flash Verwirrung


von t3h_new_one (Gast)


Angehängte Dateien:

Lesenswert?

Hallo liebe Forengemeinde,

ich spiel gerade ein bisschen mit dem mega8 rum und habe als erste 
kleine Übung eine Uhr geschrieben, welche die Uhrzeit auf einem LCD 
anzeigt. Das Projekt wofür ich es verwenden werde ist ein "Biercounter". 
Hintergrund ist ein Leiterwagen für 1. Mai + Vatertag auf welchem ein 
Buzzer installiert wird, der eben pro getrunkenes Bier liter/std. 
ausrechnet und sonstige Spielereien. :)

Config:

Aufbau auf Breadboard
HD44780 Display
Display an PortD
Taster(high aktiv) an PC3 & PC4
AVR Studio5
mk II programmer
mega8 mit internem 1MHz Takt

Was mich stutzig macht ist folgendes:

    AVR Memory Usage
    ----------------
    Device: atmega8
    Program:    7654 bytes (93.4% Full)
    (.text + .data + .bootloader)
    Data:         13 bytes (1.3% Full)
    (.data + .bss + .noinit)

wie man sieht bin ich bereits bei 93%. Da ich aber gerne noch ein paar 
features um das Program herumgebaut hätte, bekomm ich da relativ schnell 
Probleme. Die Sourcefiles sind schnell erklärt, zum einen die LCD 
Routine ausm Tut 
(http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung) 
zum anderen die Files im Anhang. Meine Frage ist nun folgende, habe ich 
mit dem neuen AVR Studio5 irgendwo einen Hund reingebracht oder ist der 
mega8 einfach so klein und damit ungeeignet für mein Projekt?

von Helfer (Gast)


Lesenswert?

Ich sehe auf Anhieb keine Ursache für den hohen Flashverbrauch. Es fehlt 
aber ein Codeteil (die LCD-Routinen) und die Einstellung beim 
Compilieren: Optimierung an/aus?

Ansonsten

> uint16_t millisekunden;
> uint8_t  sekunde, minute, stunde;
volatile und atomarer Zugriff fehlen siehe Artikel Interrupt

#include von *.c Dateien macht man nicht, die nimmt man anders in das 
Projekt auf.

von x6 (Gast)


Lesenswert?

Wo sitzt eigentlich der Programm Speicher oder der Dataspeicher ?

Im Datenblatt von einem µC hat man ja zum beispiel angegeben:

• High Endurance Non-volatile Memory segments
– 32K Bytes of In-System Self-programmable Flash program memory
– 1024 Bytes EEPROM
– 2K Byte Internal SRAM



Welches ist denn nun was?

Mein eigenes Programm ist doch in den 32K Flash und meine Variablen um 
EEPROM oder wie muss man das verstehn ?

von Helfer (Gast)


Lesenswert?

x6, du hast einen anderen µC als t3h_new_one. t3h_new_one hat einen 
Atmega8 und der Atmega8 hat keine "32K Bytes of In-System 
Self-programmable Flash program memory" sondern "8K Bytes of In-System 
Self-programmable Flash program memory". Die Berechnung Program: 7654 
bytes (93.4% Full) bezieht sich auf diese 8K (=100%)

von B. G. (smarti)


Lesenswert?

Hallo,

anhand des Codes scheint der hohe Speicherdarf nicht nachvollziehbar.

Häufige ursache ist die Verwendung von float Variablen und Berechungen 
mit diesen, beim überfliegen des Codes kann ich keine entsprechenden 
entdecken.

Auf was steht die Code optimierung?

von Oliver (Gast)


Lesenswert?

B. G. schrieb:
> anhand des Codes scheint der hohe Speicherdarf nicht nachvollziehbar

In den lcd-routinen wird _delay_ms() benutzt, ohne Optimierung zieht das 
die float-libs mit rein.

Oliver

von Barti (Gast)


Lesenswert?

Ich vermute es liegt an der lcd_routines.c und fehlender Optimierung. 
Ich wette da ist die stdlib.h eingebunden (siehe "itoa") und vielleicht 
noch andere Bibliotheken. Diese blähen den Code unwahrscheinlich auf.

Ist es überhaupt standard-konform wenn man eine .c Datei im Präprozessor 
einbindet statt einer Headerdatei?

MfG Barti

von t3h_new_one (Gast)


Angehängte Dateien:

Lesenswert?

Mahlzeit,

danke für die Hilfe bisher.

-funsigned-char -funsigned-bitfields -Os -fpack-struct -fshort-enums -g2 
-Wall -c -std=gnu99  -mmcu=atmega8

hab die Optimiziation jetzt auf "-optimize for size" gestellt und bin 
nun bei 11.4% gelandet:

    AVR Memory Usage
    ----------------
    Device: atmega8
    Program:     930 bytes (11.4% Full)
    (.text + .data + .bootloader)
    Data:          5 bytes (0.5% Full)
    (.data + .bss + .noinit)

Damit bin ich zufrieden. Danke für die Hilfe soweit! Um den Thread zu 
verfolständigen, im Anhang alle angepassten und veränderten Files. Den 
atomaren Zugriff werd ich mir heut Mittag noch anschauen.

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.