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
Ist in den Fuses evtl. der Watchdog aktiviert ? baue mal in die for(;;) - Schleife ein wdt_reset(); rein. Include file = <avr/wdt.h>
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
... ist natürlich Quatsch - habe Fehlerbeschr. nochmal gelesen :( Sieht nach einem Stack Problem aus.
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
FAQ nicht gelesen? M103C-Fuse nicht abgeschaltet?
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
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!
Dein Name is bei dir Programm, oder? Genau das stand da doch schon. Volldepp!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.