Forum: Mikrocontroller und Digitale Elektronik Wieso wurde SIGNAL(siglabel) durch ISR(verctorname) abgelöst?


von Jürgen H. (misteret)


Lesenswert?

Hallo,

ja die Frach hab ich ja schon in der Überschrift gestellt:

"Wieso wurde SIGNAL(siglabel) durch ISR(verctorname) abgelöst?"


Muss man diesen Trend denn mitmachen? Gibt es dafür überhaupt eine 
interessante Erklärung?

Habe schon gesucht, aber es steht überall nur, dass SIGNAL veraltet 
ist...wie zum Beispiel im Tutorial. Warum das Ganze Spektakel, steht 
nicht drin.

Weiß es jemand zufällig? Und sagt es mir?

Danke :-)

von Sven P. (Gast)


Lesenswert?

SIGNAL ist schlicht und einfach veraltet. Vielleicht hats dem 
Programmierer der Standardbibliothek nimmer gefallen oder er hat 
sonstwie nen Furz quersitzen.
Indem der Programmierer nun nen andren Namen benutzt, anstatt das 
Verhalten von SIGNAL einfach zu ändern, erlaubt er es, bestehenden Code, 
der noch SIGNAL benutzt, fehlerfrei zu übersetzen.

Was stört dich denn an der Änderung?
Und ja: Über kurz oder lang wirst du da nachziehen müssen. Also d.h., du 
musst das nicht, nur kanns nicht schaden, aufm aktuellen Stand zu 
sein... und so oft wird sich das nicht mehr ändern, falls das deine 
Bedenken sind.

von roboter (Gast)


Lesenswert?

....oder er hat
sonstwie nen Furz quersitzen....

Der ist bestimmt ein Querdenker, kurz vor dem Wahnsinn, also mehr als 
ein harmloser Furz , also Arzt aufsuchen !
Was das mit dem Aktuellen Stand zu tun hat...hmm...?

Aber es gab schon immer solche Neudenker in der EDV.

mfg

von ... .. (docean) Benutzerseite


Lesenswert?

Zitat:
Using the suffix _vect is intented to improve portability to other C 
compilers available for the AVR that use a similar naming convention.
/Zitat

Von: 
http://www.it.lth.se/digp/Avr-libc-1.4.3/group__avr__interrupts.html

Für mich sieht es so aus das andere AVR C Compiler ebenfalls mit ISR() 
und vect arbeiten, daher wurde das in avr-libc übernommen...

Und bei Signal steht dort:

Zitat:
This is the same as the ISR macro.

Note:
    Do not use anymore in new code, it will be deprecated in a future 
release.
/Zitat

Bei Makros erzeugen den gleichen Code! Aber irgendwann wird es Signal 
nicht mehr geben

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Der Terminus "signal" als Bezeichnung für einen Interrupt bzw.
Interrupthandler war von vornherein unglücklich, insbesondere da
der Makro INTERRUPT() sehr viele Nutzer dazu verleitet hat, diesen
zur Einleitung einer ISR zu benutzen, was tödlich ist, aber nur
bei ganz wenigen Interrupts so tödlich, dass man es sofort merkt.
Die potenzielle Erzeugung derart schwerwiegender Fehler in den
Applikationen durch eine Fehlbedienung war der wesentliche Grund,
der zu Handlungsbedarf geführt hatte.

Um die Konfusion zu beenden, haben wir daher sowohl SIGNAL als auch
INTERRUPT seinerzeit aus dem Verkehr gezogen und ISR stattdessen
favorisiert.  Damit kann jeder Programmierer sofort etwas anfangen,
da es eher der Terminologie entspricht, die man im embedded
programming gewohnt ist (und es eigentlich auch sehr exakt die
Funktion des folgenden Codeblocks beschreibt).

Die vormalige Funktion von INTERRUPT() ist jetzt eine optionale
Unterfunktion von ISR() geworden (ISR_NOBLOCK). Andere Optionen
("naked" ISRs, ISR aliases) wurden ebenfalls in den ISR-Makro
integriert.

Gleichzeitig damit haben wir die wahllos erfundenen SIG_xxx-Vektor-
namen abgelöst, deren Pflege für neue AVR-Modelle immer aufwändiger
wurde, und haben die Vektornamen stattdessen aus der Bezeichnung im
Datenblatt (genauer: in der XML-Datei) 1:1 abgeleitet, lediglich
unter Ersetzung nicht-C-fähiger Namensteile (wie Leerzeichen) durch
einen Unterstrich.  Angehängt wurde der Suffix _vect, da dieser
auch bei anderen Compilern für den AVR Verwendung findet.  Damit
sinkt der Portierungsaufwand zwischen verschiedenen AVR-Compilern,
wenngleich er nicht Null wird, da die Art und Weise, wie man eine
ISR dem Compiler bekannt macht, notgedrungen zwischen den Compilern
verschieden ist.

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.