Forum: Compiler & IDEs STM32 uint8_t if-Anweisung


von Sven A. (psykoman)


Lesenswert?

Bei meinem Interrupt Handler für den USART3 auf meinem STM32F4 habe ich 
ein kleines Problem in der if_abfrage, da meine 0xff, das ich an den STM 
sende, nicht korret interpretiert wird. Die Variable input ist ein 
uint8_t welches mein gesendetes entgegen nimmt. Wenn ich jedoch im if 
mein input mit 0xff vergleiche, wird das als False ausgewertet. Wenn ich 
jedoch mein input mit 127 vergleiche klappts. Wie kann ich dem if 
beibringen, dass er mit dem input kein int cast macht?
1
 
2
void USART3_IRQHandler(void){
3
  if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET){
4
    input = (USART_ReceiveData(USART3) & 0x7F); //Read one character
5
6
    switch (phase){
7
      case 0:  //get first 0xff
8
        putChar(USART3, input);
9
        if(input == 0xff){
10
          phase++;
11
          putString(USART3, "Incrementing phase");
12
        }

Gruß

von Stefan E. (sternst)


Lesenswert?

Sven Arnold schrieb:
> Wie kann ich dem if
> beibringen, dass er mit dem input kein int cast macht?

Das hat nichts mit "int cast" zu tun, sondern damit, dass du selber bei 
der Zuweisung an input ganz gezielt das höchste Bit ausmaskierst.

von Sven A. (psykoman)


Lesenswert?

Hallo Stefan,

vielleicht verstehe ich dich auch gerade falsch, aber bei dem uint8_t 
sollte doch normalerweise 0 -255 an Werten machbar sein. Woher kommt das 
Problem, dass er die empfangene 0xff mit 127 auswertet?

Gruß

von Oliver J. (skriptkiddy)


Lesenswert?

Sven Arnold schrieb:
> vielleicht verstehe ich dich auch gerade falsch, aber bei dem uint8_t
> sollte doch normalerweise 0 -255 an Werten machbar sein. Woher kommt das
> Problem, dass er die empfangene 0xff mit 127 auswertet?
Was denkst du, was diese Zeile tut?
1
input = (USART_ReceiveData(USART3) & 0x7F); //Read one character

Gruß Oliver

von Sven A. (psykoman)


Lesenswert?

Danke Oliver.
Ich hab schon ewig auf die Zeile geschaut und mir ist es net 
aufgefallen, dass ich des so mach. Kommt davon wenn man copy & paste von 
seinen anderen Projekten macht.

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.