Forum: Compiler & IDEs ASCI zeichen werden am Hyperterminal angezeigt


von Zeroeightfifteen (Gast)


Lesenswert?

Hallo
Immer wenn ich zum PC hin Daten sende dann zeigt dieser mir nur die ASCI 
zeichen an.

Ich will aber die Werte der Bytes in Zahlen anzeigen lassen.
1
unsigned char Tasterstellung = 3;
2
char buffer[32];
3
itoa( Tasterstellung , buffer, 10);
4
5
uart_putc((unsigned char)buffer );

funktioniert das nicht so? wenn ich statt die 32 etwas anderes rein 
schreibe dann empfange ich andere zeichen.

von Krachmanikov (Gast)


Lesenswert?

Du gibst den Inhalt eines Zeigers auf ein Zeichenfeld aus.
Da kann nix Gescheites rauskommen!
Probier doch mal:
1
char* p = &buffer[0];
2
while (*p++) uart_putc(*p);

  

von Karl H. (kbuchegg)


Lesenswert?

Zeroeightfifteen wrote:
> Hallo
> Immer wenn ich zum PC hin Daten sende dann zeigt dieser mir nur die ASCI
> zeichen an.
>
> Ich will aber die Werte der Bytes in Zahlen anzeigen lassen.
>
>
1
> unsigned char Tasterstellung = 3;
2
> char buffer[32];
3
> itoa( Tasterstellung , buffer, 10);
4
> 
5
> uart_putc((unsigned char)buffer );
>
> funktioniert das nicht so?

Doch.

Aber der cast hätte dich stutzig machen sollen.
Die Funktion uart_putc erwartet ein einzelnes
Zeichen, also einen einzelnen char.
Du hast aber keinen einzelnen char, du hast ein Array
davon und in diesem Array ist ein String gespeichert.
Das weis aber uart_putc nicht. Aber die Funktion uart_puts()
weis das und behandelt den String auch entsprechend.

Falls du keine Funktion uart_puts hast, kannst du ganz
leicht selbst eine bauen:
1
void uart_puts( char* Buffer )
2
{
3
  while( *Buffer )
4
    uart_putc( *Buffer++ );
5
}

uart_puts geht den String Zeichen für Zeichen durch und
schickt jedes einzelne Zeichen über uart_putc weg. Beendet
wird diese Schleife, sobald uart_puts auf ein '\0' Zeichen
trifft, dass in C das Stringende markiert.

Obiges ist die Experten Version. Eine entschärfte Newbie-Version
würde so aussehen:
1
void uart_puts( char* Buffer )
2
{
3
  char c;
4
  int i = 0;
5
6
  c = Buffer[i];
7
  while( c != '\0' ) {
8
    uart_putc( c );
9
    i++;
10
    c = Buffer[i];
11
  }
12
}

von Zeroeightfifteen (Gast)


Lesenswert?

so eine uart_puts routine habe ich schon.
wenn ich aber
1
uart_puts((unsigned char)buffer );
 schreibe, dann bekomme ich dies "øÞÞÞ" am PC ausgegeben.

von Karl H. (kbuchegg)


Lesenswert?

Zeroeightfifteen wrote:
> so eine uart_puts routine habe ich schon.
> wenn ich aber
1
uart_puts((unsigned char)buffer );
 schreibe, dann
> bekomme ich dies "øÞÞÞ" am PC ausgegeben.

Sagte ich nicht, dass dich der cast hätte stutzig machen sollen.

Lass ihn weg!
Du brauchst ihn nicht und in diesem konkreten Fall ist er auch
noch grundfalsch!

Ein cast ist eine Waffe und man sollte genau wissen was man
tut und vor allen Dingen warum man es tut.
1
  uart_puts(buffer );

  

von Zeroeightfifteen (Gast)


Lesenswert?

Danke für die Hilfe nun funktionierts.

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.