mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Merkwuerdiges "!=" Ergebnis


Autor: Jup (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits,

ich glaube ich bin blind.
Kann mal jemand das Code Schnipsel ansehen und mir sagen warum nicht das 
rauskommt was ich erwarte.

uint8_t TWIM_Write (uint8_t byte) {
  uint8_t   i8_twst;

// Send data to the previous addressed device

  TWDR = byte;
  TWCR = (1<<TWINT)|(1<<TWEN);

// Wait until transmission completed

  while (!(TWCR & (1<<TWINT)));

// Check value of TWI Status Register. Mask prescaler bits

  i8_twst = (TWSR & 0xF8);
  if (i8_twst != 0x28 /*TWI_MTX_DATA_ACK*/) {
    printf("TWIM_Write expected %0X\n", 0x28/*TWI_MTX_DATA_ACK*/);
    printf("TWIM_Write status returned was %0X\n", i8_twst);
    printf("returning 1\n");
    return 1;
  } else {
    printf("TWIM_Write expected %0X\n", 0x28/*TWI_MTX_DATA_ACK*/);
    printf("TWIM_Write status returned was %0X\n", i8_twst);
    printf("returning 0\n");
    return 0;
  }
}


printf ist auf den UART umgelenkt und angezeigt wird :

TWIM_Write expected 28

TWIM_Write status returned was 28
returning 0


Compiler ist

avr-gcc (GCC) 4.3.4

auf einem UBUNTU 10.04

Controller ist ein m32

Danke schon mal
Ju

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
!(0x28 != 0x28) und folglich landest du im zweiten Zweig vom "if". 
Wundern tut mich nur was dich dran wundert.

Autor: Murkser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähm, und was erwartest Du?

Murkser

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Du brauchst ein 'Bitwise Not' -> ~.

MfG Spess

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:
> !(0x28 != 0x28) und folglich landest du im zweiten Zweig vom "if".


aber nur, weil dein erstes ! nicht vorhanden ist :-)

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, wenn i8_twst == 0x28 ist, würde ich die genannte Ausgabe erwarten.
Sieht doch korrekt aus.

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> aber nur, weil dein erstes ! nicht vorhanden ist :-)

Mit ! meint er wohl eher das ELSE.

Autor: Juergen G. (jup)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, 'Bitwise' war das Schluesselwort

jetzt tut's

Danke an die qualifizierten Antworter.

Ju

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>OK, 'Bitwise' war das Schluesselwort

Und dabei kann ich als notorischer Assemblerprogrammierer gar kein C.

MfG Spess

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Umso bemerkenswerter als ich immer noch nicht weiß, was er warum 
erwartet.
Aber im Nachhinein ja auch egal.

Autor: Jonas P. (jox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man könnte vermuten er hat ein "returning 1" erwartet. Dann wäre wohl 
ein "if (i8_twst == 0x28)" anstelle von "if (i8_twst != 0x28)" sinnvoll 
gewesen. Da nun ein 'Bitwise' das Problem gelöst hat, ist die Vermutung 
anscheinend falsch.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bleibt die Frage, ob das ominöse "bitwise" nun wirklich zielführend war, 
oder hier nur zufällig zum erwarteten Ergebnis führte.

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.