Definition der Interrupt-Vektoren weglassen?

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

...
#477779
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
Gast #478053
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
#478123
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
#478128
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.

...
#478145
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
Gast #478149
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


Gast #478151
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren