www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programmgröße?


Autor: NrDesign (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, allerseits!

Ich habe (um eine grobe Software-PWM zu programmieren [und um das 
Prinzip dahinter zu verstehen]) mal folgendes programmiert:
#include <avr/io.h>
#include <util/delay.h>

int main(void){
DDRB=0xff;
char a=0;
char b=10;


while(1){

for (char c=0;c<10;c++)
  {

    PORTB=255;
    _delay_ms(a);
    PORTB=0;
    _delay_ms(b);
    
  a++;
  b--;
  } 
for (char c=0;c<10;c++)
  {
  
    PORTB=255;
    _delay_ms(a);
    PORTB=0;
    _delay_ms(b);
  
  a--;
  b++;
  }
}
return 0;
}

Das Programm macht genau was es soll, nämlich ein paar LEDs am PORTB 
ein- und ausfaden lassen. Allerdings bläst der Compiler das Programm 
ganz schön auf; für diese wenigen Schleifen gehen schonmal 4 KB ins Land 
:(

Woran könnte das ligen? am Compiler? (Ich habe -Os als Optimierung an)

Ich benutze das AVR-Studio in Version 4.13.

Danke für eventuelle Antworten!

Gruß,
NrDesign

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
delay_ms darf nur mit konstanten Werten aufgerufen werden. Ansonsten 
wird das Programm, wie beobachtet, riesen groß, und die Zeiten stimmen 
auch nicht mehr.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: NrDesign (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank! :)

Gruß,
NrDesign

Autor: NrDesign (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe den Code jetzt abgeändert, nun klappt alles.
[code}
#include <avr/io.h>
#include <util/delay.h>

void delay(char zeit) {
for (char x=0;x<zeit;x++)
 {
_delay_ms(1);
}
}
int main(void){
DDRB=0xff;
char a=0;
char b=10;



while(1){
for (char c=0;c<10;c++)
  {

    PORTB=255;
    delay(a);
    PORTB=0;
    delay(b);

  a++;
  b--;
  }
for (char c=0;c<10;c++)
  {

    PORTB=255;
    delay(a);
    PORTB=0;
    delay(b);

  a--;
  b++;
  }
}
return 0;
}
[/code]

Vielen Dank für eure Tipps!

Gruß,
NrDesign

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.