Probleme mit dem AVR-GCC

Gast #74794
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
Angehängte Dateien:
Gast #74795
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
Gast #74796
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
Gast #74797
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.