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
!(0x28 != 0x28) und folglich landest du im zweiten Zweig vom "if". Wundern tut mich nur was dich dran wundert.
A. K. schrieb: > !(0x28 != 0x28) und folglich landest du im zweiten Zweig vom "if". aber nur, weil dein erstes ! nicht vorhanden ist :-)
Hmm, wenn i8_twst == 0x28 ist, würde ich die genannte Ausgabe erwarten. Sieht doch korrekt aus.
Klaus Wachtler schrieb: > aber nur, weil dein erstes ! nicht vorhanden ist :-) Mit ! meint er wohl eher das ELSE.
OK, 'Bitwise' war das Schluesselwort jetzt tut's Danke an die qualifizierten Antworter. Ju
Hi
>OK, 'Bitwise' war das Schluesselwort
Und dabei kann ich als notorischer Assemblerprogrammierer gar kein C.
MfG Spess
Umso bemerkenswerter als ich immer noch nicht weiß, was er warum erwartet. Aber im Nachhinein ja auch egal.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.