Forum: Mikrocontroller und Digitale Elektronik Abfrage von Bits in Register


von Großes F. (112)


Lesenswert?

sind folgende beiden Codezeilen gleichwertig?

if((IRQ_MASK != RX_START_EN))
{}


if(!RX_START_EN)
{}

mfg und danke!

von Tobi (Gast)


Lesenswert?

Um zu sagen ob diese beiden Zeilen gleichwertig, oder wenigstens korrekt 
sind, benötige ich mehr Informationen. Ohne weitere Informationen, wie 
diese Masken aussehen, würde ich sogar raten, dass es "if(IRQ_MASK & 
RX_START_EN)" heißen müsste.

von Gregor B. (gregor54321)


Lesenswert?

Nein.

if (5 ist ungleich 6) {}
if (nicht 6) {}

von Großes F. (112)


Lesenswert?

ooohh. Ich glaub du hast mich damit schon auf die richtige Fährte 
geführt.

Das Bit RX_START_EN befindet sich im Register IRQ_MASK.

von Tobi (Gast)


Lesenswert?

Großes Fragezeichen schrieb:
> Das Bit RX_START_EN befindet sich im Register IRQ_MASK.

Wenn RX_START_EN nur eine Bitnummer ist, dann solltest du dieses Macro 
verwenden, um eine 1 an die richtige Stelle zu schieben. Mit einem AND 
kann man dann einfach abfragen, ob das entsprechende Bit gesetzt ist

if(IRQ_MASK & (1 << RX_START_EN))

Wenn RX_START_EN eine Bitmaske ist, dann entfällt natürlich das shiften.

if(IRQ_MASK & RX_START_EN)

Eine weitere Möglichkeit wäre auch, dass RX_START_EN ein Makro ist, 
welches direkt das richtige Bit extrahiert. In diesem Fall fällt sogar 
die Verknüfung it IRQ_MASK weg.

if(RX_START_EN)

von Karl H. (kbuchegg)


Lesenswert?

Tobi schrieb:

@TO
Langer Rede kurzer Sinn:
Mann muss sich ansehen wie RX_START_EN definiert ist. Die Schreibweise 
mit alles Grossbuchstaben, deutet darauf hin, dass es sich dabei um ein 
Makro handelt und das muss es in irgendeinem Header File geben.

Also dieses Makro suchen, ansehen. Dann weiß man mehr.

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.