Hi, kann man die Definition der Interrupt-Vektoren weglassen, wenn man keine Interrupts verwendet, als nie das Interruptflag im SREG setzt und in allen Vektoren deshalb eh reti steht? Mfg, Johannes
Johannes wrote: > Hi, > > kann man die Definition der Interrupt-Vektoren weglassen, wenn man keine > Interrupts verwendet, als nie das Interruptflag im SREG setzt und in > allen Vektoren deshalb eh reti steht? > > Mfg, Johannes Du meinst vermutlich die Interrupt-Sprungtabelle... Die kannst Du ohne Weiteres weglassen. Aber: Willst Du Dir das antun, auf Interrupts zu verzichten? Durch Verwendung von Interrupts werden Programme nicht nur leistungsfähiger, sondern meist auch viel einfacher und (aus meiner Sicht) übersichtlicher. ...
kommt immer auf den rest des Programms an. Wenn man alles und viel zu viel inclusive delays usw. in Interuptvektoren macht dann wirds sicherlich unübersichlicher...
Johannes wrote: > kann man die Definition der Interrupt-Vektoren weglassen, wenn man keine > Interrupts verwendet, als nie das Interruptflag im SREG setzt und in > allen Vektoren deshalb eh reti steht? Überhaupt kein Problem, lasse ruhig weg. Und wenn Du später mal nen Interrupt benutzen willst, füge einfach den Einsprung ein, AVR-Code ist ja voll verschiebbar. Das mit den RETIs ist großer Quatsch, damit macht man sich nur selber das Leben schwer. Wenn man dann mal ein falsches Enable-Bit gesetzt hat, sitz man tagelang und grübelt, warum zum Teufel der verdammte Interrupt nicht ausgeführt wird. Der Programmierfehler wird damit also nur verschleiert. Will man es sorgfältig machen, dann trägt man kein RETIs ein, sondern einen Sprung zu einer Endlosschleife und setzt vielleicht noch ne LED auf an. Dann sieht man sofort, daß man nen falschen Interrupt freigegeben hat, weil das Programm steht wie ne Eins. Arbeitet man mit nem Debugger, setzt man noch nen Breakpoint in die Schleife. Peter
Hi! @Peter <Das mit den RETIs ist großer Quatsch, damit macht man sich nur selber <das Leben schwer. Das würde ich so nicht unterstützen wollen. Nehmen wir mal an du hast eine Schaltung die sehr lange laufen soll und es ungünstig ist wenn sie sich so nebenbei mal einen kleinen Fehler(Int) einfängt. Sowas solltest du eigentlich kennen? War da nicht was mit Hochspannung? Es muss ja nicht sofort ein Fehler auftreten, aber der Stack stimmt schonmal nichtmehr.... Gewöhnlich geschieht sowas im Urlaub... Du kommst nachhause und der Tiefkühlschrank ist abgetaut... Soll nur ein Dekanstoss sein. MFG Uwe
Ich würde die Interrupt-Vektoren immer drin lassen, einfach Copy&Paste. Alle nicht benutzten Interrupts laufen dann auf ein RETI. Die paar Bytes kann man so gut wie immer verschmerzen. MFG Falk
Kühlschrank ohne Watchdog? Sowas fängt der wieder ein.
Uwe wrote: > Das würde ich so nicht unterstützen wollen. Nehmen wir mal an du hast > eine Schaltung die sehr lange laufen soll und es ungünstig ist wenn sie > sich so nebenbei mal einen kleinen Fehler(Int) einfängt. Sowas solltest > du eigentlich kennen? War da nicht was mit Hochspannung? Daß ein Interruptvektor angesprungen wird, obwohl er nicht freigegeben war, ist mir noch nie passiert. Und falls es doch passiert, dann ist schon viel im Argen (Stack zerstört usw.), was ein RETI definitiv nicht reparieren kann. Da hilft dann nur der Watchdog und der wird ja durch die Endlosschleife ausgelöst. Nur in der Entwicklungsphase ohne Watchdog bleibt das Programm stehen, damit man es debuggen kann. Peter
Uwe wrote: > Hi! > @Peter > <Das mit den RETIs ist großer Quatsch, damit macht man sich nur selber > <das Leben schwer. > > Das würde ich so nicht unterstützen wollen. Nehmen wir mal an du hast > eine Schaltung die sehr lange laufen soll und es ungünstig ist wenn sie > sich so nebenbei mal einen kleinen Fehler(Int) einfängt. Sowas solltest > du eigentlich kennen? War da nicht was mit Hochspannung? Es muss ja > nicht sofort ein Fehler auftreten, aber der Stack stimmt schonmal > nichtmehr.... > Gewöhnlich geschieht sowas im Urlaub... Du kommst nachhause und der > Tiefkühlschrank ist abgetaut... > > Soll nur ein Dekanstoss sein. > > MFG Uwe Der Meinung war ich auch mal... Ältere Programme ändere ich allerdings nicht mehr um. Inzwischen setze ich statt des "reti" als Platzhalter ein "nix;" zwischen rjmp und Sprungziel, am Label "nix:" gibt es dann in der Entwicklungsphase eine Endlosschleife mit eventueller Fehleranzeige. Wenn das Programm dann "fertig" ist, steht da aber auch nur noch "reti" drin. Natürlich wird die Sprungtabelle per Copy&Paste erstellt. Das erste mal aus dem Datenblatt, dann aus einer Textdatei, in der ich "meine" Interrupt-Sprungtabellen sammele. Wohlgemerkt, meine, keine im Netz zusammengesuchten. ...
Falk wrote: > Alle nicht benutzten Interrupts laufen dann auf ein RETI. Die paar Bytes > kann man so gut wie immer verschmerzen. Du liest nicht, was da steht. Es geht nicht um die Bytes, sondern, daß man sich mit dem RETI nur selber die Fehlersuche unnütz erschwert. Aber es ist ja Dein Bier, wenn Du Zeit bei der Fehlersuche verschwenden willst. Peter
Hi! @Peter <Und falls es doch passiert, dann ist schon viel im Argen (Stack zerstört <usw.), was ein RETI definitiv nicht reparieren kann. Ich musste letzte Woche unsere Mutteruhr mal vom Netz nehmen weil die nur noch Mist machte, nach 8 Jahren Dauerlauf. Ob das jetzt ein nicht abgefangener Int. war kann ich nicht sagen, aber sollte man nicht versuchen soetwas zu vermeiden? MFG Uwe
@Peter Dannegger >Es geht nicht um die Bytes, sondern, daß man sich mit dem RETI nur >selber die Fehlersuche unnütz erschwert. Schon klar, ist bei mir angekommen. Und darauf schrieb ich, dss ich die Interrupt-Vektoren immer vollständig (mit richtigen rjmp int_abC) verwende. Wir reden von der gleichen Sache. >Aber es ist ja Dein Bier, wenn Du Zeit bei der Fehlersuche verschwenden >willst. ?? MFG Falk
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.