Hallo Ich habe ein Problem mit meinem Atmega8 und zwar habe ich ein Programm geschrieben in dem in der While-Schleife einige Leds hin und her Schiften lasse, und wenn ein Externer Interrupt ausgelöst wird soll er in die Routine springen und diese ausführen. Das hinein springen funktioniert nur wenn die Routine eigentlich fertig ist fängt alles nochmal von vorne an und das immer wieder. Mfg Marcel
Mein lieber Marcel, vielen Dank für Deine Mitteilung. Mit freundlichen Grüßen Bitflüsterer
Der Fehler liegt in Zeile 42. Dort hast du nämlich eine Schliessende Klammer vergessen, was dann beim Kompilieren zu einem Pufferüberlauf der Statusvariable führt und so das Eeprom löscht. So werden die Portpins auf Eingang geschaltet. Der Controller zieht dann zu viel Spannung und das Netzteil kann so zu wenig Strom liefern. Deswegen schwingt der Quarz nicht mehr, also blinkt nichts mehr.
Guest schrieb: > Der Fehler liegt in Zeile 42. Noch nie gelesen und super witzig obendrein. Du bist ein toller Typ.
Marcel schrieb: > Das hinein springen funktioniert nur wenn > die Routine eigentlich fertig ist fängt alles nochmal von vorne an und > das immer wieder. Vielleicht glaubt der Prozessor, dass schon wieder der externe Interrupt ausgelöst wurde oder immer noch anliegt. Glaskugel sagt, da könnte ein Programmfehler vorlegen
Hutan schrieb: > Guest schrieb: > >> Der Fehler liegt in Zeile 42. > > Noch nie gelesen und super witzig obendrein. Du bist ein toller Typ. Das solltest Du aber mal, dort gibt es noch viel mehr Gags z.B. über die Gedanken eines Pottwals und eines Petunientopfes im freien Fall! Am besten: alle Teile lesen.
Also bei mir springen Interrupts immer exakt an die Stelle zurück, wo sie das Main unterbrochen haben. So wie es sich für einen Interrupt gehört. Man kann zwar mit setjmp/longjmp aus einem Interrupt herausspringen, aber sich ins eigene Knie zu schießen geht auch einfacher. Erfahrene Programmierer lassen setjmp/longjmp fest verschlossen in der Büchse der Pandora.
aus einem interrupt in eine schleife ?? würde ich nicht machen. Im interrupt ein volatile flag setzten. dieses in einer endlosschleife abfragen und nach Verarbeitung zurücksetzten. ein erneuter interrup sollte das flag nur setzten dürfen , wenn es durch die Verarbeitung bereits zurückgesetzt wurde ? Wenn ich Dich richtig verstanden habe....
Guest schrieb: > Der Fehler liegt in Zeile 42. Dort hast du nämlich eine Schliessende > Klammer vergessen, was dann beim Kompilieren zu einem Pufferüberlauf der > Statusvariable führt und so das Eeprom löscht. So werden die Portpins > auf Eingang geschaltet. Der Controller zieht dann zu viel Spannung und > das Netzteil kann so zu wenig Strom liefern. Deswegen schwingt der Quarz > nicht mehr, also blinkt nichts mehr. ;-) ;-) ;-).... ..selten so gelacht!. danke!
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.