Anfängerfrage UART

OP #4003849
Lesenswert?
• ▲
▼
Guten Tag.

Ich Arbeite mich gerade in die UART-Schnittstelle ein und stehe auf'm 
Schaluch.

Ich verwende einen ATmega8 mit einem BTM222 Bluetooth-modul mit 
Android-App. Das Daten hin und her Senden mit der Lib von Peter Fleury 
funktioniert auch Wunderbar. Aber ich raff'einfach nicht, wie ich die 
Daten auswerte.

Im Testprogramm Steht folgende zeile:
1
uart_putc( (unsigned char)c );

Wenn ich das richtig verstanden habe übernimmt diese das Echo. Sendet 
also das zurück, was gerade angekommen ist. Hier der inhalt der Variable 
"c"

Was ich unter anderem nicht verstehe ist, dass Oben im Code die variable 
als
1
unsigned int c;

deklariert wurde. Was sagt jetzt
1
(unsigned char)c
aus?


Und wie werte ich die nachricht aus?
In meinem jugentlichem leichtsinn habe ich es einfach mal mit einem 
simplen
1
if((unsigned char)c == "g/0")
2
      {
3
        PORTB ^=(1<<1);
4
      }

versucht. Aber da meckert der compiler mit mir:

comparison between pointer and integer [enabled by default]
comparison with string literal results in unspecified behavior 
[-Waddress]


Ich bin gerade ziemlich Ratlos und brauche Hilfe.
Gast #4003852
Lesenswert?
• ▲
▼
irgendwie fehlen dir scheinbar ein paar Grundlagen.

> if((unsigned char)c == "g/0")
das hat erst mal nicht mit UART zu tun, das sind die Grundlagen von C. 
Diese sollte man als erstes gelernt haben.

> uart_putc( (unsigned char)c );
> Wenn ich das richtig verstanden habe übernimmt diese das Echo.
ganz bestimmt nicht. Der Name sagt schon alles, es sendet einfach ein 
Zeichen. Ob es sich dabei um das Echo oder etwas anders handelt ist der 
Funktion ziemlich egal.


> Ich bin gerade ziemlich Ratlos und brauche Hilfe.
du brauchst ein Buch.
Gast #4003854
Lesenswert?
• ▲
▼
Ich will es mal ein wenig gemäßigter formulieren:

Was Du als Probleme der Anwendung, nämlich des UARTs, präsentierst, sind 
Probleme mit der Sprache C. Dem Anschein nach, aber auch nicht nur 
Detailprobleme der etwas subtileren Art sondern Grundlagen.

Wir gehen auch gerne auf so etwas ein, aber lies erstmal ein gutes 
C-Buch und dann sehen wir weiter.
Gast #4003860
Lesenswert?
• ▲
▼
So ist es richtig:
1
if((unsigned char)c == 'g')
2
      {
3
        PORTB ^=(1<<1);
4
      }

Ein String so: "Hallo"
Ein Zeichen so: 'H'


Das (unsigned char)c bedeutet nur das die Variable c als unsigned char 
interpretiert wird.
#4014043
Lesenswert?
• ▲
▼
Christian S. schrieb:
> habe es jetzt dank dir geschafft. Ich habe nurnoch eine Frage: Wo ist
> der unterschied zwischen "x" und 'x'?

"x" ist ein nullterminierter C-String und entspricht im wesentlichen dem 
hier:
1
(char str[] = {'x','\0'}
Solche Daten werden über den Zeiger auf das erste Zeichen gehandhabt.

'x' ist ein 8 Bit breiter Ganzzahlwert.

Grundsätzlich ist ein C-Buch nicht verkehrt. Man kann auch diverse 
Tutorials durcharbeiten, um C-Grundlagen zu bekommen.

Grüße Oliver

Antwort schreiben

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.

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.