Forum: Mikrocontroller und Digitale Elektronik AVR Studio 4 zeigt den Speicher nicht an.


von Bernd (Gast)


Lesenswert?

Hallo,

ich habe da ein Verständnisproblem und ein praktisches Problem mit dem 
Speicher des ATtiny88

Ich habe ein altes Projekt mit dem AVR Studio 4.19 Build 730 geöffnet 
und bekomme beim kompilieren nicht angezeigt, wie viel Speicher mein 
Programm verbraucht. Habe schon eine Weile gesucht, aber alles, was ich 
gefunden habe, hat bei mir nicht funktioniert. Wie kann ich mir anzeigen 
lassen, wie viel Speicher ich bereits verbraucht habe?

Und zum Verständnis:
Laut Datenblatt hat der ATtiny88 8K Flash Speicher.
Im AVR Studio steht unter Project/Configuration Options/Memory Settings, 
dass die Flash Size nur 0x1000 groß sei. Wären das nicht nur 4K?
Und mein Hex file wiederum kann nur bis 23K groß sein. Ab 24K bekomme 
ich eine Fehlermeldung. Kann mir da jemand Licht ins Dunkel bringen?

Grüße
Bernd

von c-hater (Gast)


Lesenswert?

Bernd schrieb:

> Laut Datenblatt hat der ATtiny88 8K Flash Speicher.

Hat er. 8k BYTE

> Im AVR Studio steht unter Project/Configuration Options/Memory Settings,
> dass die Flash Size nur 0x1000 groß sei. Wären das nicht nur 4K?

Nein, es sind 4k Worte á 2 Byte, also 8k Byte. Passt.

> Und mein Hex file wiederum kann nur bis 23K groß sein. Ab 24K bekomme
> ich eine Fehlermeldung.

Die Dateigröße eines Hexfiles ist völlig irrelevant. Sie steht erstens 
nicht zwingend in direkter Beziehung zum enthaltenen Binärcode (weil sie 
Overlaps enthalten kann, also mehrfachen Inhalt für die gleichen 
Zieladressen) und zweitens enthält sie einen Haufen Redundanz. Allein 
schon die Repräsentation der enthaltenen Binärdaten ist immer doppelt so 
groß wie die Binärdaten selber, dazu kommt der Overhead für 
Adressangaben, Prüfsummen, Trennzeichen und Zeilenumbrüche.

Lies' einfach mal auf Wikipedia nach, wie eine "Intel-Hex"-Datei 
aufgebaut und codiert ist.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Exportiere mal das Makefile für dein Projekt.
Im Abschnitt #Link sollte sich als letztes folgender Eintrag finden:
1
size: ${TARGET}
2
  @echo
3
  @avr-size -C --mcu=${MCU} ${TARGET}

Dann zeigt dir das Build Fenster Codegrösse, globale Variablen usw. an:
1
AVR Memory Usage
2
----------------
3
Device: attiny45
4
5
Program:    1138 bytes (27.8% Full)
6
(.text + .data + .bootloader)
7
8
Data:          6 bytes (2.3% Full)
9
(.data + .bss + .noinit)

von Bernd (Gast)


Lesenswert?

Vielen Dank für die Erklärungen!


Ich habe noch Probleme mit dem Makefile.


Zuerst habe ich es exportiert. Dann habe ich gesehen, dass ich die 
gleiche Datei erhalten habe, wie bereits im Projektverzeichnis im 
Unterordner default liegt.

Jedenfalls habe ich dann unter "Project/Configuration Options/General" 
den Haken "Use External Makefile" gesetzt und das Makefile aus dem 
Ordner default ausgewählt.
Das Makefile ist dann auch im AVR Studio in der Ordnerstruktur unter 
"Other Files" aufgetaucht. Zu diesem Zeitpunkt ließ sich das Projekt 
noch kompilieren. Dann habe ich das Makefile im AVR Studio geöffnet und 
den size-Befehl eingefügt. Leider bekomme ich nun aber beim Kompilieren 
noch die Fehlermeldung: *** missing separator.

Stimmt da noch etwas an der Syntax nicht?
1
...
2
##Link
3
$(TARGET): $(OBJECTS)
4
   $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)
5
6
%.hex: $(TARGET)
7
  avr-objcopy -O ihex $(HEX_FLASH_FLAGS)  $< $@
8
9
%.eep: $(TARGET)
10
  -avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0
11
12
%.lss: $(TARGET)
13
  avr-objdump -h -S $< > $@
14
15
size: ${TARGET}
16
  @echo
17
  @avr-size -C --mcu=${MCU} ${TARGET}
18
19
## Clean target
20
...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Angehängte Dateien:

Lesenswert?

Bernd schrieb:
> Stimmt da noch etwas an der Syntax nicht?

Sieht richtig aus. Aber du solltest nochmal in den 'Configuration 
Settings' schauen, welche Toolchain überhaupt benutzt wird. So sieht das 
bei mir aus.

von Stefan E. (sternst)


Lesenswert?

Bernd schrieb:
> Dann habe ich das Makefile im AVR Studio geöffnet und
> den size-Befehl eingefügt. Leider bekomme ich nun aber beim Kompilieren
> noch die Fehlermeldung: *** missing separator.

Sehr wahrscheinlich hast du statt eines TABs Leerzeichen am 
Zeilenanfang.

von Bernd (Gast)


Angehängte Dateien:

Lesenswert?

Tatsächlich waren Leerzeichen für die Fehlermeldung verantwortlich. 
Jetzt lässt sich das Projekt wieder kompilieren, aber ich bekomme 
trotzdem keine Speichergröße angezeigt.

Ich habe nun beides getestet. Mal war der Haken gesetzt und mal nicht. 
In beiden Fällen funktioniert das Kompilieren aber immer ohne Anzeige 
des Speichers.

Ansonsten fehlt bei mir das -DF_CPU. Es ist aber auch rechts alles 
ausgegraut!?

von Stefan E. (sternst)


Lesenswert?

Bernd schrieb:
> aber ich bekomme
> trotzdem keine Speichergröße angezeigt.

Nur die size-Regel anlegen reicht ja auch nicht. Du musst auch dafür 
sorgen, dass sie "aufgerufen" wird, also z.B. bei all eintragen.

Bernd schrieb:
> Es ist aber auch rechts alles ausgegraut!?

Bei "Use External Makefile" ist das ja auch alles ohne Funktion. Du 
musst diese Dinge dann direkt im Makefile ändern.

von Bernd (Gast)


Lesenswert?

Soweit ich es verstehe, habe ich zwei Möglichkeiten, die aber beide noch 
nicht funktionieren:

1. Externes Makefile verwenden
Dann muss ich
> diese Dinge dann direkt im Makefile ändern
Aber was muss ich denn dafür ändern?

2. Das "interne" Makefile verwenden
Jetzt könnte ich in den Custom Compilation Options die size-Regel 
aufrufen. Aber die size-Regel habe ich ja nur im externen Makefile 
eingefügt. Das ist also in diesem Fall gar nicht gültig.


Tut mir Leid, dass ich mich so anstelle, aber ich steige immer noch 
nicht durch. Das kann doch nicht so schwierig sein :(

von Bernd (Gast)


Lesenswert?

Geschafft! Jetzt habe ich verstanden, was du gemeint hast mit "bei all 
eintragen" :)

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.