www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik gcc Speicherverbrauch durch Berechnungen


Autor: Klaus K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits,

kann mir jemand den folgenden Effekt erklären? Wie kann ich diesen 
Mehrbedarf verhindern?
...
uint16_t w=300;
uint16_t i;
while(1) {                
  for(i=0;i<10;i++) {
    PORTD=pgm_read_byte(&charPattern[i]);
    weff=w+i;
    _delay_ms(w);    
  }
 }                  
...
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

Autor: Klaus K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der Beitrag oberhalb bezieht sich auf einen atmega48.

Autor: Zwölf Mal Acht (hacky)
Datum:

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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ziff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Klaus K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke

Autor: Prof. Dr. Delay (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: c-logic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: c-logic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe das jetzt mit einem  timer gelöst.
unter
http://www.avrfreaks.net/index.php?name=PNphpBB2&f...
gibt es eine ausführliche Anleitung.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.