mikrocontroller.net

Forum: Compiler & IDEs Atiny2313 Problem mit AVR Studio?


Autor: Richard Brose (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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


Autor: Richard Brose (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier das Hex.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Richard Brose (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
$ avr-gcc -Os -mmcu=attiny2313 -o foo.elf foo.c
$ avr-size foo.hex
   text    data     bss     dec     hex filename
    208       0       0     208      d0 foo.elf

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Richard Brose (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, Danke lag wohl an der Optimierung ;-)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger wrote:

> Wie dieses?

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

Autor: Richard Brose (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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
for (A; B; C) {
  // ...
}
auch vorstellen als
A;
while (B) {
  // ...
  C;
}
Dann sollte es klar werden, warum deine Bedingung falsch ist.

Autor: Richard Brose (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ARG mein denkfehler. Danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.