mikrocontroller.net

Forum: Compiler & IDEs Frage zu Funktion in Lib für RFM69


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Hoffnung (Gast)
Datum:
Angehängte Dateien:
  • preview image for a.png
    a.png
    90,9 KB, 57 Downloads

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
nach laaanger Pause will ich mal wieder selber irgendwas programmieren, 
um nicht ganz einzurosten. Es geht um eine Verständnisfrage zu C (bzw. 
C++) bei der Lib zum RFM69. Der screenshot in der Anlage zeigt das 
Register, um das es geht.
#define RF_OPMODE_TRANSMITTER         0x0C     // also 00001100
...
writeReg(REG_OPMODE, (readReg(REG_OPMODE) & 0xE3) | RF_OPMODE_TRANSMITTER);

Hier wird der Inhalt des Registers REG_OPMODE mit 0xE3 verUNDet, danach 
mit 00001100 verODERert wieder zurückgeschrieben.

Warum das verUNDen? Kann man in diesem Fall nicht einfach den Inhalt von 
REG_OPMODE mit 00001100 verODERn? Es kommt doch das Selbe raus, da die 
Maske mit 00001100 auch 8 bit hat und bit 0 und 1 hier egal sind (RO, 
unused, allways read as 00). Oder etwa doch nicht??? Dann wird es wohl 
tatsächlich höchste Zeit, etwas gegen den Rost zu tun...

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

der eingestellte Sequencermode des Fifo soll erhalten bleiben, deshalb 
liest er die zurück. & 0xE0 hätte es auch getan, die Bits 0/1 sind ja 
immer 0.

Gruß aus Berlin
Michael

Autor: Sascha W. (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hoffnung schrieb:
>
> #define RF_OPMODE_TRANSMITTER         0x0C     // also 00001100
> ...
> writeReg(REG_OPMODE, (readReg(REG_OPMODE) & 0xE3) | 
> RF_OPMODE_TRANSMITTER);
> 
>
> Hier wird der Inhalt des Registers REG_OPMODE mit 0xE3 verUNDet, danach
> mit 00001100 verODERert wieder zurückgeschrieben.
>
> Warum das verUNDen? Kann man in diesem Fall nicht einfach den Inhalt von
> REG_OPMODE mit 00001100 verODERn?
Der Befehl soll den MODE einstellen, damit das unabhängig vom vorherigen 
Zustand der 3 Bits funktioniert müssen diese erst mal gelöscht werden.
Wenn der Mode zuvor Receiver war 100 und dann noch die Bits für 
Transmitter 011 gesetzt werden hast du eine ungültige Einstellung 111.

Sascha

Autor: Hoffnung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, o.k., so verstehe ich es. Danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.