Problem mit AVR Studio 6 - ATMega64 funktioniert nicht mehr (speziell Aufruf von Unterfunktionen)

Gast #2983419
Lesenswert?
• ▲
▼
Hallo zusammen,

bin umgestiegen von AVR-Studio 4.12 auf 6.0.1843. Ich wollte ein altes 
Projekt, das bereits tatellos funktioniert hat, auf dem neuen Studio zum 
laufen bringen. Dazu habe ich ein neues Projekt erstellt (GCC C 
Executable Project) und dann den Inhalt der alten .c Datei in die neue 
.c Datei kopiert. Das Kompaillieren und Beschreiben des µC verlief 
fehler- und warnfrei.

Das Problem: Der µC bleibt plötzlich stehen und macht nichts mehr.

Folgendes habe ich bei der Fehlersuche entdeckt:
Sobald ich innerhalb von main() eine Funktion aufrufe, bleibt der µC am 
Ende der Funktion hängen und kommt nicht mehr heraus, so als würde er im 
Stack den Pointer für die Rücksprungadresse verlieren. Im konkreten Fall 
war das eine global deklarierte und definierte Funktion, die irgendwo 
innerhalb von main aufgerufen wird. Wie gesagt, beim AVR Studio 4.12 
lief dieser Quellcode tatellos, ich verwende genau die gleiche Hardware.

Die folgenden Punkte habe ich bereits gecheckt:
- µC Typ
- fuses
- clk Frequenz
- compiler-optimierung auf "-os"
- keine Fehler- oder Warnmeldungen beim kompilieren
- richtiges .hex file

Ich weiß im Moment nicht mehr weiter. Kann mir jemand bitte helfen?
Danke im Voraus.

Gruß Matthias
#2983437
Lesenswert?
• ▲
▼
Hi,

wieviel vom Arbeitsspeicher (SRAM) hast Du verwendet?

Solche Effekte hatte ich, als mein Stack mit dem Heap (d.h. dem 
Variablenspeicher vom C-Programm) kollidiert ist aufgrund von zuwenig 
SRAM.

Da Du jetzt ja eine neuere Version der Toolchain und wohl auch der libc 
verwendest, könnten da durchaus Unterschiede im Speicherverbrauch 
auftreten.

Grüße
Markus
#2983443
Lesenswert?
• ▲
▼
Matthias schrieb:
> Folgendes habe ich bei der Fehlersuche entdeckt:
> Sobald ich innerhalb von main() eine Funktion aufrufe, bleibt der µC am
> Ende der Funktion hängen und kommt nicht mehr heraus, so als würde er im
> Stack den Pointer für die Rücksprungadresse verlieren.

> Die folgenden Punkte habe ich bereits gecheckt:
> ...
> - fuses

Sicher? Klingt verdammt nach M103C-Fuse.
Gast #2983656
Lesenswert?
• ▲
▼
Hallo Stefan,

Du hattest absolut recht. Genau diese Fuse war aktiv. Nachdem ich die 
"CompMode" Fuse deaktivert habe, geht es jetzt. Super!!! Vielen Dank!
Gestern ist meine Konzentration halt einfach schon um 22 Uhr mit den 
Kindern ins Bett gegangen :-)

Danke auch an Markus für den interesanten Lösungsansatz!

Schöne Grüße,
Matthias

Antwort schreiben

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.

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.