Hallo,
habe mir gerade einen ATMEGA 48-20 geholt, der 4KB Speicher hat.
4KB sind nicht die Welt, sollten für meine Zwecke jedoch ausreichen.
Ich habe 3 LEDs an PORTB angeschlossen.
Diese will ich zum Test ein- und ausblenden.
Dafür habe ich folgenden kurzen Code geschrieben:
1 | #define F_CPU 1000000UL
|
2 |
|
3 | //-----------------------------------------------------------------------------
|
4 | // INCLUDES
|
5 | //-----------------------------------------------------------------------------
|
6 | #include <avr/io.h>
|
7 | // #include <avr/interrupt.h>
|
8 | // #include <avr/sleep.h>
|
9 | #include <util/delay.h>
|
10 |
|
11 |
|
12 | int main(void)
|
13 | {
|
14 | //directions
|
15 | DDRB = 0b00000111;
|
16 |
|
17 | PORTB |= 0b00000111;
|
18 |
|
19 | uint8_t up = 1; //Zaehlrichtung
|
20 | uint8_t counter = 0; //Zaehlvariable
|
21 |
|
22 | while(1)
|
23 | {
|
24 | _delay_us(counter); //warte 0-255us
|
25 | PORTB &= 0b11111000;
|
26 | _delay_us(255-counter); //warte 255-0us
|
27 | PORTB |= 0b00000111;
|
28 |
|
29 | if (counter == 255) up=0; //IF1
|
30 | if (counter == 0) up=1; //IF2
|
31 |
|
32 | if (up==1) //IF3
|
33 | {
|
34 | counter++;
|
35 | }
|
36 | else
|
37 | {
|
38 | counter--;
|
39 | }
|
40 | }
|
41 | }
|
Nach dem Kompilieren mit der (-Os)-Option kommt eine Code-Größe von 4602
Bytes raus. Das ist viel zu viel für meinen µC.
Zum test habe ich die drei IF-Abfragen mal auskommentiert. Größe nach
dem Kompilieren: 176 Bytes!
Was mache ich falsch???
Kann es sein, dass diese 3 IF-Abfragen wirklich den Code von 176 Bytes
auf 4602 Bytes aufblähen?
Danke für eure Tipps!