www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik String via Usart senden (Xmega)


Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schönen guten Abend,

ich stehe gerade irgendwie auf dem Schlauch.

Ich versuche mit einem Xmega128A1 über den Usart einen String zu 
übertragen, das funktioniert aber nicht richtig.

Der Usart ist richtig initialisiert, ich kann einzelne Chars richtig 
übertragen und ich kann auch ein char-array (siehe unten b[]) 
übertragen, nicht aber das "Hello World". Ich nutze das Standard 
make-File von avrgcc. Ich hatte erst gedacht, das "Hello World" wird 
nicht beim Starten ins SRAM kopiert, das müsste aber der Fall sein. Nach 
dem kompilieren steht auch in der Statusteile:
Data:         24 bytes (0.3% Full)
(.data + .bss + .noinit)

(Im Programm ist noch einen String zum Testen, deshalb die 24 bytes)

Ich habe noch nie damit bei AVRs Probleme gehabt, gibts beim Xmega 
irgendwas zu beachten?

Für Tipps wäre ich dankbar.
Thorsten

char b[20];

b[0] = 'A';
b[1] = 'B';
b[2] = 'C';
b[3] = 'D';
b[4] = 'E';
b[5] = 0;

usart_sendstring(b);                   // geht

usart_sendstring("Hello world\n\r");   // geht nicht

void usart_sendstring(const char *s)
{
  while (*s)
  {  
    while((USARTC0.STATUS & USART_DREIF_bm) == 0) {};
    USARTC0.DATA = *s;
    s++;
  }
}

void usart_putc(char c)
{
    while((USARTC0.STATUS & USART_DREIF_bm) == 0) {};
    USARTC0.DATA = c;
}


Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thorsten,

Vorschlag :
void usart_sendstring(char *s)
{
  while (*s)
  {  
    while((USARTC0.STATUS & USART_DREIF_bm) == 0) {};
    USARTC0.DATA = *(s++);    
  }
}

Ohne dass ich jetzt getestet habe oder auf 1000 Dinge zu gucken.

Teste das mal aus.

Gruß
Helmut

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich versuche mit einem Xmega128A1 über den Usart einen String zu
> übertragen, das funktioniert aber nicht richtig.

Kannst du das etwas präzisieren? 'funktioniert nicht' ist die denkbar 
schlechteste aller Fehlerbeschreibungen.

Ansonsten würde ich noch vorschlagen in der usart_sendstring auf 
uasrt_putc zurückzugreifen. Das ist jetzt aber nicht dein Problem
void usart_sendstring(const char *s)
{
  while (*s)
  {  
    usart_putc( *s );
    s++;
  }
}

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ihr beiden,

wenn ich den string "Hello world" übertragen möchte, kommt eben nicht 
das an, was ankommen sollte. Das Array kommt allerdings richtig an und 
das verstehe ich nicht ganz, da ja eigentlich sowohl der String als auch 
das Array im SRAM des Mikrocontrollers liegen und es hier eigentlich 
keinen Unterschied bei der Ausgabe gibt, ausser vielleicht der 
Speicherinhalt und natürlich die Startadresse.

Ich habe erst vermutet, dass vielleicht der String nicht ins SRAM gelade 
wird, der ist aber dort. Das habe ich mit dem Simulator getestet, der 
String liegt an Adresse 0x2000, hier fängt beim Xmega das SRAM an. Das 
erste Byte, welches in das Usart-Datenregister kopiert wird, ist das "H" 
... kommt mir irgendwie unheimlich vor :-D

Ich werde das alles auch noch mal mit Hardwaresimulator testen, da ist 
bestimmt irgenwo ein blöder Denkfehler. Ich habe das alles schon x-mal 
mit AVRs gemacht. Naja, was bisher oft bei solchen Sachen geholfen hat, 
ein bisschen Abstand von der Sache, und plötzlich löst sich das Problem 
wie von selber ... kennt der eine oder andere von euch bestimmt auch ;-)

Thorsten

Autor: Manuel Kauf (mkauf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

naja was meinst du mit "kommt nicht das raus was soll" kommt irgendwas 
raus ? oder komms zu oft oder ..... ?!?

Gruß

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.