ultoa-Ausgabe 32-Bit-Zahl seriell

OP #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!
OP #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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.