Forum: Compiler & IDEs Atiny2313 Problem mit AVR Studio?


von Richard Brose (Gast)


Angehängte Dateien:

Lesenswert?

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


von Richard Brose (Gast)


Angehängte Dateien:

Lesenswert?

Hier das Hex.

von johnny.m (Gast)


Lesenswert?

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.

von johnny.m (Gast)


Lesenswert?

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?

von Richard Brose (Gast)


Lesenswert?

habe den gleichen Code in Notepad 2 gemacht -> 1 kb Hexfiel ... jetzt 
passt es. Komisch

von johnny.m (Gast)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Richard Brose wrote:

> habe den gleichen Code in Notepad 2 gemacht -> 1 kb Hexfiel ... jetzt
> passt es. Komisch

AVR Studio schaltet die Optimierung aus.

von johnny.m (Gast)


Lesenswert?

> 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...)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Richard Brose (Gast)


Lesenswert?

ok, Danke lag wohl an der Optimierung ;-)

von Karl H. (kbuchegg)


Lesenswert?

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?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Karl heinz Buchegger wrote:

> Wie dieses?

https://savannah.nongnu.org/bugs/?3485

von Richard Brose (Gast)


Lesenswert?

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?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Richard Brose (Gast)


Lesenswert?

ARG mein denkfehler. Danke!

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.