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.
Zeig doch mal etwas Code dazu.... Benutzt du vielleicht ein printf?
Lass mich raten: Du machst eine Floating Point Addition?
#include <avr/io.h> #include <util/delay.h> int main() { DDRB = 0xff; DDRD = 0x00; int t=200; while (1) { if ( PIND & (1<<PD0) ) { t++; }
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.
ja stimmt, ist nicht das komplette Programm. In dem Text ist die Zeile t++; mein Problem. Ich kann da ja auch t=t+1 schreiben.
He, du solltest Hellseher werden :-) genau das hab ich im weiteren Verlauf gemacht. Echt super! Tausend Dank!!
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?
> 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
Wenn der Tiny einen Timer hat, nimm den.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.