Atiny2313 Problem mit AVR Studio?

Gast #482759
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

Angehängte Dateien:
Gast #482788
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.
Gast #482797
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?
Gast #482809
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.
Gast #482814
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...)
Gast #482843
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?
Moderator Persönliche Seite #482849
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.

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