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 :-)
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.
....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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.