mikrocontroller.net

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


Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja. in der regel schon...

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kühlschrank ohne Watchdog? Sowas fängt der wieder ein.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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



Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.