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
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.
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) |
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 | ... |
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.
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.
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!?
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.
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 :(
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.