Attiny 4313 - gcc - Warum verbraucht eine einfache Addition soviel Speicherplatz?

Gast #2188337
Lesenswert?

Hallo,

ich spiele gerade ein wenig mit nem attiny 4313 herum und jetzt stell 
ich mir die Frage warum eine einfache Addition so viel Speicherplatz 
verbraucht.
Ich kann Unmengen an Zeilen schreiben ohne das viel Speicher verbraucht 
wird, aber kaum mach ich die Addition ist das Ding voll.
Ich hab versucht ne Antwort zu "ergooglen" aber ohne Erfolg.
Kann mir jemand sagen/erklären woran das liegt.

Vorab schon mal vielen Dank,

Jojo.
#2188363
Lesenswert?

abgesehen davon, dass das Programm nicht vollständig ist (zähl mal die { 
und die }), wo ist da jetzt die Addition?

t++ ist ein Inkrement. Ist zwar so ähnlich wie eine Addition, aber dann 
doch was anderes.

Aber ich rate mal weiter.
Im restlichen Code kommt dann irgendwann

   _delay_ms( t );

Tja. Und da hätten wir dann den Kandidaten. _delay_ms hätte gerne einen 
konstanten Ausdruck und keine Variable. Zuwiederhandeln wird mit 
Unmengen von Code und nicht stimmenden Wartezeiten bestraft.
Gast #2188375
Lesenswert?

Gibt es denn ne elegantere Möglichkeit sowas zu machen? Hier nochmal der 
Programmtext

#include <avr/io.h>

#include <util/delay.h>



 int main()
{


  DDRB = 0xff;
  DDRD = 0x00;

  int t=200;

 while (1)
 {


if ( PIND & (1<<PD0) )
{
 t++;
}






PORTB = 0b00000100;    //0
_delay_ms(t);
PORTB = 0b10011111;    //1
_delay_ms(t);
PORTB = 0b00100011;    //2
_delay_ms(t);
PORTB = 0b00001011;    //3
_delay_ms(t);
PORTB = 0b10011001;    //4
_delay_ms(t);
PORTB = 0b01001001;    //5
_delay_ms(t);
PORTB = 0b01000001;    //6
_delay_ms(t);
PORTB = 0b00011111;    //7
_delay_ms(t);
PORTB = 0b00000001;    //8
_delay_ms(t);
PORTB = 0b00001001;    //9
_delay_ms(t);
}
}


ich steuere damit ne 7 segment Anzeige an und übers delay die 
Geschwindigkeit mit der die 0-9 durchläuft.
Wenn ich jetzt mit nem Taster die Geschw. ändern möchte, wie könnte ich 
das machen?
Gast #2188385
Lesenswert?

> Gibt es denn ne elegantere Möglichkeit sowas zu machen?
1
void delay_var_ms(int t) { for (int i = 0; i < t; i++) _delay_ms(1); }
..oder so ähnlich. Für hinreichend kleine t hinreichend genau genug. Das 
restliche Feintuning überlasse ich dem geneigten Bastler.

HTH

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren