Re: RC5-Decoder für ATMega
[quote="Brands_Freund"]Hallo habe mal ein paar Fragen zum dem Artikel RC5-Decoder für ATMega im RN-Wissen.
Haufen Holz...
Zitat:
Zitat von Brands_Freund
Enthält Code die Geräteadresse oder nur die Tastencode?
rc5 enthält alles, was zu RC5 gehört:
rc5.addr = Adresse
rc5.code = Tastencode
rc5.flip = Flip-Bit (falls != -1)
Zitat:
Zitat von Brands_Freund
Was macht SREG, was beduetet Atomar machen...
"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.
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...
Zitat:
Zitat von Brands_Freund
...und FIXME?
Das bedeutet, daß der Programmierer des Codes (in diesem Fall ich :oops:) 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.
Zitat:
Zitat von Brands_Freund
main.c:50: warning: implicit declaration of function `itoa'
Es fehlt der Header, in dem itoa() deklariert wird (stdlib.h).
Zitat:
Zitat von Brands_Freund
main.c:30: warning: comparison is always false due to limited range of data type
Das bezieht sich wohl auf den Vergleich (-1 == rc5.flip) ?
*GRRR* char ist signed. Zumindest in C!
Manche Makefile-Generatoren oder Spezialisten meinen, da was drehen zu müssen :evil: und 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???