www.mikrocontroller.net

Forum: Compiler & IDEs Verständnis-Problem bei Recode von C zu ASM


Autor: Marcel Papst (phpmysqlfreak)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum-Gemeinde,

Ich Arbeite zur Zeit daran, verschieden C-Projekte für Atmel-Controller 
(vorzugsweise ATTiny2313 und ATMega8) in Assembler umzuschreiben.

Darin sehe ich eigentlich auch keine weiteren Probleme.

Doch nun ist mir eine Verknüpfung in einer If-Bedingung aufgefallen, die 
ich
nicht richtig deuten kann.

Es geht um folgende Elemente

& => Logische Und-Verknüpfung.
~ => Negation (wenn ich richtig informiert bin.)

in der folgenden Verknüpfung:
if (USIDR == 0 || (USIDR & ~1) == slaveAddress)

slaveAddress ist uint8_t

der Kommentar hinter der Verknüpfung ist:
// If adress is either 0 or own address

Wie kann ich diese Verknüpfung korrekt deuten, wenn "slaveAddress" z. B. 
den binären Wert "0b01101001" (Dez.: 105) enthält?

Gruß,

Marcel

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So wie es auch der Compiler macht.
Ich denke dir fehlt die Precedence Table, in der geregelt ist, wie die 
Priorität der Operatoren sein muss

http://www.difranco.net/cop2220/op-prec.htm


> & => Logische Und-Verknüpfung.

falsch.
Binäre Und-Verknüpfung

> ~ => Negation (wenn ich richtig informiert bin.)

ja. und zwar binäre Negation

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcel Papst schrieb:
> Wie kann ich diese Verknüpfung korrekt deuten, wenn "slaveAddress" z. B.
> den binären Wert "0b01101001" (Dez.: 105) enthält?

Slaveadresse muss hier mit 0 enden, da beim Überprüfen das 0te Bit 
ausgeundet wird, ist bei i2c für Read/Write verantwortlich, hat also mit 
der Adresse an sich nix zu tun.

Marcel Papst schrieb:
> (USIDR & ~1) == slaveAddress

als Bsp: USIDR = 0b00110101
mit ~1 = 0b11111110 verundet wird das 0te Bit gelöscht. Daher darf die 
Vergleichsadresse nie das 0te Bit gesetzt haben, sonst wird die Abfrage 
nicht wahr.
:-)

Autor: Marcel Papst (phpmysqlfreak)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
>> & => Logische Und-Verknüpfung.
>
> falsch.
> Binäre Und-Verknüpfung


Sorry, das war mein Fehler - meinte eigentlich auch binäre Verknüpfung.

> Slaveadresse muss hier mit 0 enden, da beim Überprüfen das 0te Bit
> ausgeundet wird, ist bei i2c für Read/Write verantwortlich, hat also mit
> der Adresse an sich nix zu tun.
>


> als Bsp: USIDR = 0b00110101
> mit ~1 = 0b11111110 verundet wird das 0te Bit gelöscht. Daher darf die
> Vergleichsadresse nie das 0te Bit gesetzt haben, sonst wird die Abfrage
> nicht wahr.
> :-)



Alles Klar, vielen Dank für schnellen und ausführlichen Antworten.

Jetzt kann ich weiter machen ;)

Gruß,

Marcel

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcel Papst schrieb:
> Ich Arbeite zur Zeit daran, verschieden C-Projekte ...
> ... in Assembler umzuschreiben.

Das ist aber die falsche Richtung :-)


Peter

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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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