Forum: Mikrocontroller und Digitale Elektronik Anfängerfrage UART


von Christian S. (aldebaran22322)


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.

von Peter II (Gast)


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.

von Bitflüsterer (Gast)


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.

von Martin (Gast)


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.

von Christian S. (aldebaran22322)


Lesenswert?

Danke Martin!

habe es jetzt dank dir geschafft. Ich habe nurnoch eine Frage: Wo ist 
der unterschied zwischen "x" und 'x'?

von Mitlesa (Gast)


Lesenswert?

Christian S. schrieb:
> Wo ist der unterschied zwischen "x" und 'x'?

Martin hat's doch geschrieben:

Martin schrieb:
> Ein String so: "Hallo"
> Ein Zeichen so: 'H'

von Oliver J. (skriptkiddy)


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

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.