Forum: Compiler & IDEs Probleme mit dem AVR-GCC


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Joachim Bonath (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich habe ein Problem mit dem AVR-GCC. Zum Testen habe ich kleines
C-Programm für einen AT90S8515 geschrieben. Der AVR-GCC übersetzt
dieses auch ohne Probleme. Der Mikrocontroller funktioniert allerdings
nicht mit dem erzeugten HEX-File. Nach mehreren erfolglosen Versuchen,
habe ich im AVR-Studio 3.56 das ganze mal mit dem Debugger unter die
Lupe genommen und festgestellt, dass es offensichtlich ein Problem mit
der Prozedur delay_1s gibt. Die Prozedur tut das, was sie tun soll.
Beim Rücksprung ins Hauptprogramm geht aber offensichtlich etwas
schief. Der Befehlszaehler geht den ganzen Flash-Speicher durch bis zum
bitteren Ende. Dann beginnt das Programm wieder von ganz vorne. Ich
habe den Quelltext (8515tmr1.c) das HEX-File, Objekt-File und die
MAKE.BAT im Anhang beigefügt, mit der Hoffnung, dass jemand das Problem
lösen kann. Ich bin noch recht unerfahren und verstehe nicht, was ich
hier falsch gemacht habe.
Aber man möchte ja dazulernen. Ich tippe auf ein STACK-Problem seitens
des Compilers.
Für Antworten möchte ich mich schon jetzt bedanken.

Gruß,
Joachim

von Matthias (Gast)


Lesenswert?

Hi

1.sbi(), cbi(), loop_..., outp() usw sollten nicht verwendet werden.
Normaler C-Syntax für Bitoperationen (z.B. PORTD|=(1<<2);) reicht.

2.Bei mir funktioniert der Code im AVRStudio4 problemlos.

3.Du solltest für C nicht den g++ starten

4.Warum den -O2? -Os und nichts anderes sollte man verwenden

5.Warum verwendest du kein makefile?

Matthias

von Joachim Bonath (Gast)


Lesenswert?

Hallo Matthias,

Vielen Dank fuer den Tip mit dem Makefile. Ich habe das bisher immer
ohne gemacht, da ich wie gesagt noch Anfänger bin. Jetzt habe ich mir
das mal näher angeschaut und festgestellt, dass es ja gar nicht so
schwer ist, das Makefile richtig abzustimmen. Das Problem ist übrigens
damit verschwunden. Das Programm funktioniert jetzt wunderbar.
Das mit den Bit-Operationen hab ich auch ausprobiert. Funktioniert
bestens und ist auch recht übersichtlich. Hab allerdings am Anfang
nicht verstanden was das (1<<2)genau bewirkt. Aber auch das ist
mittlerweile klar. Die 2 steht für das gewuenschte Bit, die 1 bedeutet,
dass dieses Bit durch verodern gesetzt wird - sprich: Die 1 wird um 2
Stellen nach links geschoben (ergibt 4) und das ganze dann mit dem
Inhalt von z.B. PORTD verodert. Hat natürlich den Vorteil, dass evtl.
bereits vorher gesetzte Bits nicht einfach überschrieben werden. Somit
ist diese Lösung natürlich sauberer als einfach mit outp einen Wert an
den Port auszugeben.

Gruß und Vielen Dank nochmals,
Joachim

von Michael (Gast)


Lesenswert?

Hi,

wie wäre es denn mit der AVREdit3.5 Version. Hier nach richtiger
Einstellung des Controllers und ein paar Daten das passendes Makefile
mit Compilierung erzeugt. Der Link ist bei den AVRfreaks zu finden.

Grüße

von Joerg Wunsch (Gast)


Lesenswert?

AVRedit gilt als völlig überaltert, was den Compiler/die Bibliotheken
betrifft.

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]
  • [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.