Integer auf serieller Schnittstelle ausgeben

Gast #3217905
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
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
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
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
"\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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.