Hallo Leute, ich habe mir ein einfaches Programm erstellt(siehe Dateianhang). Das Problem ist das hex-File ist 12 kb Groß und nimmt bei PonyProg den ganzen EEprom und Flash ein? Das kann doch nicht war sein das so ein kleines Programm den tiny2313 voll macht :-( Benutze WinAVR-20070101 Gruß, Richard
Die Größe des Hex-Files hat zunächst mal überhaupt nichts mit der Größe dessen zu tun, was in den Speicher geschrieben wird! Hex-Dateien werden im ASCII-Format gespeichert und haben dadurch sehr viel Overhead.
Hab mir das Hex-File grad mal angeschaut... Da stimmt anscheinend wirklich was nicht. Das ist tatsächlich ein ganzes Stück mehr als in den Tiny reinpasst. Ich sehe aber, dass Du die delay-Routinen aus der delay.h benutzt. Hast Du die Optimierung eingeschaltet? Und v.a.: hast Du in den Configuration Options den korrekten Controllertyp (und die Taktfrequenz, die aber nicht der Grund für das Problem sein dürfte) angegeben?
habe den gleichen Code in Notepad 2 gemacht -> 1 kb Hexfiel ... jetzt passt es. Komisch
Ich hab es grad mal bei mir durchgejagt: Ohne Optimierung: 3932 Bytes Code (Speicher zu 192% gefüllt) Mit -Os: 242 Bytes (11,8% voll), Größe des Hex-Files: < 1KB Also: Schalte die Optimierung ein und es sollte gehen.
1 | $ avr-gcc -Os -mmcu=attiny2313 -o foo.elf foo.c |
2 | $ avr-size foo.hex |
3 | text data bss dec hex filename |
4 | 208 0 0 208 d0 foo.elf |
Richard Brose wrote: > habe den gleichen Code in Notepad 2 gemacht -> 1 kb Hexfiel ... jetzt > passt es. Komisch AVR Studio schaltet die Optimierung aus.
> Komisch
Nein, überhaupt nicht komisch. Nur wenn Du dem Compiler verbietest, zu
optimieren, dann werden die ganzen _delay_xx-Routinen komplett ins
Programm übernommen und die kosten Speicher (in diesem Falle mehr, als
Du zur Verfügung hast...)
Es würde übrigens selbst ohne Optimierungen noch in den ATtiny2313 passen, wenn denn AVR Studio wenigstens mal immer die math-Library mit linken würde (-lm). Da gibt's nun wahrlich keinen Grund, die nicht immer dabei zu haben.
Jörg Wunsch wrote: > Es würde übrigens selbst ohne Optimierungen noch in den ATtiny2313 > passen, wenn denn AVR Studio wenigstens mal immer die math-Library > mit linken würde (-lm). Wie dieses?
Hab wieder ein kleines Problem. uint8_t c_led[10] = {0b00111111, //0 0b00001100, //1 0b00011011, //2 0b01011110, //3 0b01101100, //4 0b01110110, //5 0b01110111, //6 0b00011100, //7 0b01111111, //8 0b01111110,};//9 Wenn ich PORTB es so zuweise, funktioniert es -> es leuchtet eine 0. PORTB = c_led[0]; wenn ich es so mache: uint8_t i; while(1) for(i=0;i>10;i++) { PORTB = c_led[i]; _delay_ms(200); _delay_ms(200); _delay_ms(200); _delay_ms(200); _delay_ms(200); } } funktioniert es nicht :-( einer eine Idee wieso?
Richard Brose wrote: > Hab wieder ein kleines Problem. Bitte fang einen neuen Thread an für ein neues Thema. > einer eine Idee wieso? Ja: > for(i=0;i>10;i++) Die Ende-Bedingung ist genau falsch herum. Du kannst dir
1 | for (A; B; C) { |
2 | // ...
|
3 | }
|
auch vorstellen als
1 | A; |
2 | while (B) { |
3 | // ...
|
4 | C; |
5 | }
|
Dann sollte es klar werden, warum deine Bedingung falsch ist.
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.