Forum: Mikrocontroller und Digitale Elektronik Definition der Interrupt-Vektoren weglassen?


von Johannes (Gast)


Lesenswert?

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

von Läubi (Gast)


Lesenswert?

ja. in der regel schon...

von Hannes L. (hannes)


Lesenswert?

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.

...

von Ulrich (Gast)


Lesenswert?

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...

von Peter D. (peda)


Lesenswert?

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

von Uwe (Gast)


Lesenswert?

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

von Falk (Gast)


Lesenswert?

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

von A.K. (Gast)


Lesenswert?

Kühlschrank ohne Watchdog? Sowas fängt der wieder ein.

von Peter D. (peda)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

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.

...

von Peter D. (peda)


Lesenswert?

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

von Uwe (Gast)


Lesenswert?

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



von Falk (Gast)


Lesenswert?

@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
Noch kein Account? Hier anmelden.