Forum: Digitale Signalverarbeitung / DSP / Machine Learning Integer auf serieller Schnittstelle ausgeben


von Philipp S. (Gast)


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!

von jmp (Gast)


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

von jmp (Gast)


Lesenswert?

grmbl

muss natürlich
1
sprintf(message, "x = %d", x);
heißen.

--jmp

von Philipp S. (Gast)


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?

von Peter II (Gast)


Lesenswert?

Philipp Seckel schrieb:
> 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?

richtig, dann lese doch nur bis zu 0.

von Philipp S. (Gast)


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.

von Uwe (Gast)


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.

von Peter II (Gast)


Lesenswert?

Uwe schrieb:
> "\0" sind aber zwei Byte, und das kann man nicht einfach mit einem
> Gleichheitszeichen verglecihen sondern nur in einer Schleife.

wo hat er dann das gemacht?

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.