ultoa-Ausgabe 32-Bit-Zahl seriell

#3498393
Lesenswert?

Hallo,
stehe auf dem Schlauch bzgl. Ausgabe einer uint32_t auf der seriellen 
Schnittstelle:
1
uint32_t      Ergebnis; 
2
uint16_t      c_2 = 8910;
3
char          s[20];
4

5
int main (void) 
6
  {    
7
  Ergebnis =  (c_2 << 10);
8
  uart_puts(ultoa (Ergebnis , s, 10));
9
  }
10
  
11
void uart_puts (char *s)
12
  {
13
  while (*s)
14
    {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen(Terminator)" */
15
    uart_putc(*s);
16
    s++;
17
    }
18
  }  
19
  
20
int uart_putc(unsigned char c)
21
  {  
22
  while (!(UCSR0A & (1<<UDRE0)) )            // warten bis Senden moeglich
23
    {
24
    ;
25
    } 
26
  UDR0 = c;                                  // sende Zeichen    
27
    return 0;
28
  }

Es wird 14337 ausgegeben; das muß irgendwas mit der Umwandlung einer 
uint32_t zu tun haben, wenn ich nur c_2 ausgeben lasse, tut es.

Sieht jemand den Fehler?
Danke für hilfreiche Tips!
#3498453
Lesenswert?

Danke, beide Varianten haben funktioniert. Frage: Wenn die 
Ergebnis-Variable doch als uint32_t deklariert ist, warum muß ich dann 
casten? Offenbar ist meine Annahme falsch, dass es ausreicht, einen 
genügend großen Platz für das Ergebnis vorzuhalten.
Wird das Ergebnis einer Berechnung zunächst immer in dem Datentyp 
abgebildet, den die Inputs der Operation (hier c_2) haben?
#3498476
Lesenswert?

Roman S. schrieb:
> Danke, beide Varianten haben funktioniert. Frage: Wenn die
> Ergebnis-Variable doch als uint32_t deklariert ist, warum muß ich dann
> casten? Offenbar ist meine Annahme falsch, dass es ausreicht, einen
> genügend großen Platz für das Ergebnis vorzuhalten.

Der Datentyp der Ergebnisvariablen interessiert nicht, wenn es darum 
geht a<<5 zu berechnen. Denn erst das Ergebnis davon wird an die 
Variable zugewiesen und erst dann ist der Datentyp der Ergebnisvariablen 
interessant. Aber für die Operationen auf der rechten Seite eines = ist 
das völlig uninteressant. Da zählen nur die Typen der beteilgten 
Operanden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren