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


von Jup (Gast)


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

von (prx) A. K. (prx)


Lesenswert?

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

von Murkser (Gast)


Lesenswert?

Ähm, und was erwartest Du?

Murkser

von spess53 (Gast)


Lesenswert?

Hi

Du brauchst ein 'Bitwise Not' -> ~.

MfG Spess

von Klaus W. (mfgkw)


Lesenswert?

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


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

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

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

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

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

Mit ! meint er wohl eher das ELSE.

von Juergen G. (jup)


Lesenswert?

OK, 'Bitwise' war das Schluesselwort

jetzt tut's

Danke an die qualifizierten Antworter.

Ju

von spess53 (Gast)


Lesenswert?

Hi

>OK, 'Bitwise' war das Schluesselwort

Und dabei kann ich als notorischer Assemblerprogrammierer gar kein C.

MfG Spess

von Klaus W. (mfgkw)


Lesenswert?

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

von Jonas P. (jox)


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.

von (prx) A. K. (prx)


Lesenswert?

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

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.