mikrocontroller.net

Forum: Compiler & IDEs ATMega64 - Kehrt nicht aus Unterfunktion zurück


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bin gerade auf die Programmierung mit Win-AVR (20050214) umgestiegen
und stehe vor folgendem Problem:

<snip>
#include <avr/io.h>
#include <avr/interrupt.h>
volatile uint16_t i;
void test(void)
{
   //tu was harmloses mit i, was nicht wegopimiert wird
}
int main(void)
{
   cli();
   //[Punkt 1] LED1 an
   test();
   //[Punkt 2] LED1 aus
   for(;;);
}
</snip>

Sobald das Programm aus test() zurückkehrt, startet der Prozessor neu
(mit [Punkt 1]). Schreibe ich den Code aus test() hingegen direkt in
main(), läuft alles perfekt und auch [Punkt 2] wird ausgeführt. Woran
könnte das liegen?

Ebenso funktionierts nicht, wenn ich die globale Variable i zu einer
lokalen in test() mache. Da ich mich mit dem gcc noch nicht so recht
auskenne, wären ein paar Tipps hilfreich, worauf ich achten müsste.
Sind evtl. die Stack-Einstellungen irgendwie vermurkst?

Ich verwende den ATMega64L auf einem eigenen Board, das
Programmers-Notepad mit dem mitgelieferten examples/demo/Makefile von
Jörg Wunsch (nur das MCU_TARGET habe ich auf atmega64 eingestellt).

Vielen Dank im Voraus,
--
Sebastian

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist in den Fuses evtl. der Watchdog aktiviert ?

baue mal in die for(;;) - Schleife ein wdt_reset(); rein.

Include file = <avr/wdt.h>

Autor: AndreasH (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach mal deine "for(;;);" ans ende von "void test(void)"

Wenn er dann die Funktion in test ausführt, liegt es am Stack. Der
Controller findet die Rücksprungadresse nicht mehr. D.h. er greift
irgendwo drauf zu und springt ins Nirwana.

Benutz mal die Suchfunktion. So was hatte ich auch schon beim
Atmega162. Lag am einem der fuses für Komatibilitätsmodus.
Vielleicht ist es bei Dir auch sowas.

Grüße
Andreas

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... ist natürlich Quatsch - habe Fehlerbeschr. nochmal gelesen :(

Sieht nach einem Stack Problem aus.

Autor: AndreasH (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mist da war jemand schneller als ich :)

Ich meine mein Beitrag wäre im Elektronik-Forum oder GCC. Weiss ich
nicht mehr so genau.

Grüße
Andreas

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FAQ nicht gelesen?

M103C-Fuse nicht abgeschaltet?

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

okay - ich geb es zu, es war das M103C-Bit ... duck.

Also, für alle Deppen wie mich: Der ATMega64 wird mit
103-Kompatibilität geliefert. Extended Fuse auf 0xFD, dann klappts auch
mit dem Mega64.

*...* Damit hätte ich mir ja nun nicht die Nacht um die Ohren schlagen
müssen ... ~:(

Danke Jungs, ihr seid spitze!

@Jörg:
Ähm, welche der vielen FAQs meinst du?

Gruss,
--
Sebastian

Autor: Neudepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wen es nach dert langern Zeit noch interessiert. Ich hatte jetzt das 
gleiche Problem mit einem ATMEGA 64-16 TQ und verwende das AVR STudio 
Version 4.15.

Meine Lösung wahr: Kompatibilitätsmodus ausschalten, also Extended Fuse 
auf 0xFF!

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Name is bei dir Programm, oder? Genau das stand da doch schon. 
Volldepp!

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.