Forum: Mikrocontroller und Digitale Elektronik Programmgröße?


von NrDesign (Gast)


Lesenswert?

Hallo, allerseits!

Ich habe (um eine grobe Software-PWM zu programmieren [und um das 
Prinzip dahinter zu verstehen]) mal folgendes programmiert:
1
#include <avr/io.h>
2
#include <util/delay.h>
3
4
int main(void){
5
DDRB=0xff;
6
char a=0;
7
char b=10;
8
9
10
while(1){
11
12
for (char c=0;c<10;c++)
13
  {
14
15
    PORTB=255;
16
    _delay_ms(a);
17
    PORTB=0;
18
    _delay_ms(b);
19
    
20
  a++;
21
  b--;
22
  } 
23
for (char c=0;c<10;c++)
24
  {
25
  
26
    PORTB=255;
27
    _delay_ms(a);
28
    PORTB=0;
29
    _delay_ms(b);
30
  
31
  a--;
32
  b++;
33
  }
34
}
35
return 0;
36
}

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

von Klaus (Gast)


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.

von Falk B. (falk)


Lesenswert?


von NrDesign (Gast)


Lesenswert?

Vielen Dank! :)

Gruß,
NrDesign

von NrDesign (Gast)


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

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.