Forum: Compiler & IDEs 3700 Byte für ein Blinklicht


von Guenter B. (gbl)


Lesenswert?

Hallo,

warum produziert dieser kurze Code 3700 Byte ?
Muss ich noch irgendwas im AVR-Studio einstellen ?
Text und Bootloader brauche ich normalerweise doch nicht.

Gruß

Günter


Device: attiny13

Program:    3780 bytes (369.1% Full)
(.text + .data + .bootloader)

Data:          8 bytes (12.5% Full)
(.data + .bss + .noinit)

Build succeeded with 0 Warnings...

von Andreas K. (a-k)


Lesenswert?

Angesichts von 0 Bytes Quellcode ist das tatsächlich recht viel.

von yalu (Gast)


Lesenswert?

Für die Delayfunktionen muss die Optimierung eingeschaltet werden.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Guenter B. wrote:

> Text und Bootloader brauche ich normalerweise doch nicht.

Wo willst du den Programmcode unterbringen, wenn du .text nicht
brauchst?

Ansonsten sagt mir meine Kristallkugel, dass du _delay_ms() benutzt
und vergessen hast, die Optimierung einzuschalten.  Die entsprechende
Compilerwarnung hast du dann auch gleich ignoriert.

von Andreas K. (a-k)


Lesenswert?

Scheint eine gute Zeit für Kristallkugeln zu sein - allein aus der 
Grösse des Programms auf die Ursache zu schliessen, das hat schon was 
;-).

von Oliver (Gast)


Lesenswert?

Ohne das Zauberwort "Blinklicht" im Titel hätte die Kristallkugel wohl 
auch versagt :-)

Oliver

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

vielleicht handelt es sich ja um eine "NOP Kette" das erklärte wohl 
selbst bei 1 khz externem takt noch die unglaublichen 3700 Byte und gäbe 
dann gerade mal ca 3,7 sec Periodendauer.


;-DDDD

von Benedikt K. (benedikt)


Lesenswert?

Winfried J. wrote:
> vielleicht handelt es sich ja um eine "NOP Kette" das erklärte wohl
> selbst bei 1 khz externem takt noch die unglaublichen 3700 Byte

Ein Befehl auf einem AVR ist aber 1 Word groß...

von Guenter B. (gbl)


Angehängte Dateien:

Lesenswert?

Ich war mir sicher den Quellcode angehängt zu haben.
Aber eure Kristalkugel schein gut zu funktionieren.
Ich habe wirklich _delay_ms() benutzt.
Wo schaltet man die Optimierung ein ?
Ich mache gerade meine ersten Gehversuche mit C.

Gruß

Günter

von Johannes M. (johnny-m)


Lesenswert?

Guenter B. wrote:
> Wo schaltet man die Optimierung ein ?
"Project | Configuration Options | General | Optimization"

von Guenter B. (gbl)


Lesenswert?

Danke

Ich habe testweise -0s eingestellt.
-> 117 Bytes

von Thomas B. (Firma: Druckerei Beste) (virtupic)


Lesenswert?

Damals, als ich angefangen habe, C zu programmieren... Okay, das war 
Atari ST oder PC oder irgendeine Workstation oder so..., da brachte es 
das niedliche Hello-World!-Progrämmchen auch auf ein Binary von ca. 8KB. 
Damals gab's noch keine dynamischen Libraries für den Compiler.

Na gut, nach dem "strip a.out" ist es immerhin auf ca. 2 KB geschrumpft.

virtuPIC
/ggadgets for tools & toys

von Bernhard (Gast)


Lesenswert?

@Benedikt:
>Ein Befehl auf einem AVR ist aber 1 Word groß...

Ist der AVR nicht ein 8-Bit RISC???

Bin grade verwirrt :-)

von Andreas K. (a-k)


Lesenswert?

Nach dieser Logik wäre Microchips dsPIC30 eine 24-Bit Architektur ;-).

Nö, die Breite eines Codewortes hat nichts mit der Breite der 
Datenverarbeitung zu tun. Zumindest nicht, wenn dabei getrennte 
Adressräume für Code und Daten im Spiel sind.

von Dahohl D. (dahohl)


Lesenswert?

Hallo zusammen,

habe im Quellcode folgende Zeile(n) gefunden:

_delay_ms(500);

Frage: Funktioniert das? Ich meinte diese Funktion ist auf 262.14 ms / 
F_CPU in MHz begrenzt (-> delay.h) oder hab ich da was nicht richtig 
verstanden?

Bsp: bei 16MHz wären es noch 16.38ms

Gruss dahohl

von Andreas K. (a-k)


Lesenswert?

Diese Grenze gab es in alten Versionen der avr-libc. Mittlerweise 
arbeiten diese Funktionen adaptiv, d.h. je nach Delay wird das 
unterschiedlich realisiert, mit unterschiedlicher Auflösung bis 6,5s.

Die Formulierung in der Doku ist allerdings nicht wirklich gelungen, 
denn da steht erst drin, dass nicht mehr als 262/MHz möglich ist, und 
dahinter dann dass es sehr wohl möglich ist.

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.