Forum: Compiler & IDEs Probleme mit dem AVR-GCC


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.

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.