Integer auf serieller Schnittstelle ausgeben

Gast #3217905
Lesenswert?

Hallo zusammen,

ich experimentiere derzeit mit einem DSP F28335 von Texas Instruments 
herum. Nun würde ich gerne den Inhalt einer Integer-Variablen über die 
serielle Schnittstelle ausgeben. Diese ist bereits konfiguriert und 
funktioniert. Allerdings ist es mit bisher noch nicht gelungen, einen 
Integer so zu wandeln, dass er als String übertragen werden kann.
1
// Beispiel-Inhalt, funktioniert
2
char message[] = {"The F28335 - UART is fine !\n\r"};
3

4
for(index = 0; index < sizeof(message);  index++)
5
{
6
  SciaRegs.SCITXBUF = message[index];
7
  do {
8
  } while(SciaRegs.SCICTL2.bit.TXEMPTY == 0);
9
}

Ich müsste also in der Variable message meinen Integer mit unterbringen. 
E soll eben möglich sein, auch Dinge wie "X = 12345" zu übertragen. Ich 
habe bislang mein Glück mit sprintf() versucht. War aber bisher 
erfolglos.

Freue mich über eure Lösungsvorschläge! Danke dafür schonmal!
Gast #3218192
Lesenswert?

n'abend,

versuchs mal so:
1
char message[20];
2
int x = 12345;
3
sprintf(message, "x = %d", i);
4

5
for(index = 0; index < sizeof(message);  index++)
6
{
7
  SciaRegs.SCITXBUF = message[index];
8
  do {
9
  } while(SciaRegs.SCICTL2.bit.TXEMPTY == 0);
10
}

--jmp
Gast #3219287
Lesenswert?

Auf genau diese Weise hab ich es auch probiert. Warum auch immer, jetzt 
gehts. Irgend eine Kleinigkeit war wohl unpässlich. Danke bis herher 
schonmal!

Und damit gleich zum nächsten Problem:

Ich habe nun meine Array mit char message[255]; initialisiert. Wenn ich 
nun aber z.b. nur wenige Zeichen übertragen möchte (z.B. mit 
sprintf(message,"%d\n",i);) ist der Rest des Arrays mit kryptischen 
Zeichen gefüllt. Wie erreiche ich am besten, dass immer nur so viele 
Zeichen übertragen werden, wie tatsächlich notwendig sind?

Leut Beschreibung setzt sprintf(); automatisch ein "\0" am Ende. Aber da 
ich das Array von 0 bis sizeof(message) lese, ist das wohl nicht 
wirksam?
Gast #3219400
Lesenswert?

o.O Manchmal muss man eben auch auf so etwas gestoßen werden... Logisch. 
Damit ist diese Baustelle erstmal erledigt. Danke!

So schaut's nun aus:
1
sprintf(message,"Variable x = %d\n\r",i);
2
index = 0;
3
    
4
do {
5
  SciaRegs.SCITXBUF = message[index];
6
  do {
7
    GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1;
8
  } while(SciaRegs.SCICTL2.bit.TXEMPTY == 0);
9
} while(message[index++] != '\0');

Gibt es eigentlich einen Unterschied in der Überprüfung gegen "\0" und 
'\0'? Jedenfalls bekomme ich im ersten Fall einen Fehler vom Compiler.
Gast #3219507
Lesenswert?

"\0" ist ein string und wird AUTOMATISCH ein '\0' char angehängt.
Also steht dann im Speicher 0x00 0x00.
Aber du kannst ja nur chars vergleichen, also ein einziges Byte.
"\0" sind aber zwei Byte, und das kann man nicht einfach mit einem 
Gleichheitszeichen verglecihen sondern nur in einer Schleife.

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