[quote="Brands_Freund"]Hallo habe mal ein paar Fragen zum dem Artikel RC5-Decoder für ATMega im RN-Wissen.
Haufen Holz...
rc5 enthält alles, was zu RC5 gehört:Zitat von Brands_Freund
rc5.addr = Adresse
rc5.code = Tastencode
rc5.flip = Flip-Bit (falls != -1)
"Atomar" bedeutet, daß eine Code-Sequenz nicht von einer IRQ unterbrochen werden kann. Das ist oft nötig, um Datenintegrität zu waren, wenn ein Datum in einer ISR geändert werden kann.Zitat von Brands_Freund
Im SREG wird u.a. gemerkt, ob IRQs global aktiviert sind. Zuständig dafür ist das I-Flag im SREG (siehe Doku deines µC). Mit cli() wird dieses auf 0 gesetzt (IRQs aus). Mit sei wird I=1. Nach dem atomaren Block will ich aber das I-Flag auf den vorherigen Wert setzen, weder explizit 1 noch 0. Daher merke ich SREG und schreibe es später zurück.
Das mit dem I-Flag und SREG sollte eigentlich im Artikel erläutert sein...
Das bedeutet, daß der Programmierer des Codes (in diesem Fall ichZitat von Brands_Freund
) eine Anmerkung hinterlassen hat, daß ein Fehler beseitigt werden muss. In diesem Falls ist es kein Fehler, das Stück atomar zu machen. Ich denke aber, daß es ok ist, wenn dieses Codestück entgegen der vorliegenden Quelle unterbrechbar ist.
Das FIXME bezieht sich also nicht auf die Korrektheit des Codes (das ist er) sondern auf dessen Effizienz. Atomisierung ist ein kleiner Overhead und erhöht natürlich die IRQ-Latenz aller IRQs.
Es fehlt der Header, in dem itoa() deklariert wird (stdlib.h).Zitat von Brands_Freund
Das bezieht sich wohl auf den Vergleich (-1 == rc5.flip) ?Zitat von Brands_Freund
*GRRR* char ist signed. Zumindest in C!
Manche Makefile-Generatoren oder Spezialisten meinen, da was drehen zu müssenund char unsigned zu machen. Ein unsigned kann freilich niemals -1 sein!
Wie soll man da funktionierende Programme schreiben, wenn sich niemand an Standards hält???
Lesezeichen