Forum: Mikrocontroller und Digitale Elektronik gcc Speicherverbrauch durch Berechnungen


von Klaus K. (Gast)


Lesenswert?

Hallo allerseits,

kann mir jemand den folgenden Effekt erklären? Wie kann ich diesen 
Mehrbedarf verhindern?
1
...
2
uint16_t w=300;
3
uint16_t i;
4
while(1) {                
5
  for(i=0;i<10;i++) {
6
    PORTD=pgm_read_byte(&charPattern[i]);
7
    weff=w+i;
8
    _delay_ms(w);    
9
  }
10
 }                  
11
...
ergibt
Program:     140 bytes (3.4% Full)
Data:          0 bytes (0.0% Full)

Nach Änderung von "_delay_ms(w)" nach "_delay_ms(w+i)":
Program:    3718 bytes (90.8% Full)
Data:        264 bytes (51.6% Full)


Danke

von Klaus K. (Gast)


Lesenswert?

der Beitrag oberhalb bezieht sich auf einen atmega48.

von Purzel H. (hacky)


Lesenswert?

Eine Library fuer etwas sehr Triviales ... man kann auch einen timer mit 
5 Statement programmieren fuer einen Delay.

von Simon K. (simon) Benutzerseite


Lesenswert?

Bor eh, benutzt eigentlich irgendeiner noch mal ein Manual (von der 
avr-libc) oder die Suchfunktion hier in diesem Forum? Ist ja ätzend!

_delay_xy(...) funktionieren nur mit konstantem Parameter.

von Ziff (Gast)


Lesenswert?


von Klaus K. (Gast)


Lesenswert?

Danke

von Prof. Dr. Delay (Gast)


Lesenswert?


von c-logic (Gast)


Lesenswert?

Prof. Dr. Delay schrieb:
> _delay_ms(w);

_delay_ms()  erwarten ein float

freundlicherweise nutzt der Compiler dann eine Funktion die aus dem 
(int)"w" ein float macht und das bläht auf, durch die 
int2float-Funktion.
ich hab beim erstenmal auch lang gesucht, bis ich diesen Fehler mal 
fand.

Gruß Dennis

von c-logic (Gast)


Lesenswert?

Eine Lösung wäre

statt "_delay_ms(w+i)"
das zu schreiben "for(int o=0;o<(w+i);o++)_delay_ms(1)"

Gruß Dennis

von Klaus K. (Gast)


Lesenswert?

Ich habe das jetzt mit einem  timer gelöst.
unter
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=50106
gibt es eine ausführliche Anleitung.

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.