PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Komme mit P.Fleurys Uartlib nicht zurecht.



Charly_cs
12.11.2006, 13:52
Hi!

Ich möchte einen empfangenen String im µc auswerten, nur schaffe ich es einfach nicht. Laut Fleurys Angabe ist das Empfangene Zeichen ein "unsigned int" in diesem Fall die Variable "c". Jetzt würde ich "c" gerne mit strings vergleichen um eine Led leuchten zu lassen. Nur wie vergleiche ich ein unsigned int und einen String??

Hier ist mein Code:


#define F_CPU 16000000
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <avr/uart.h>

#define UART_BAUD_RATE 19200

unsigned int Empfangen(void);



int main(void)
{
DDRD = (1<<DDD5);

uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );

sei();
int i;
unsigned int c;
char d = "a";
for(;;)
{

_delay_ms(10);

c=Empfangen(); //Aufruf der Funktion Empfangen (steht nach der main-Funktion)

if (c==d) //Abgleich von c und d, hier steckt der Wurm drin
{
PORTD |= (1<<PD5);
for(i=0;i<100;i++)
{
_delay_ms(10);
}
PORTD &= ~(1<<PD5);
}

}
}

unsigned int Empfangen(void) //Uart Abfrage und Rückgabe von c
{
unsigned int c;

c = uart_getc();

return(c);
}



Gruß
Charly

PicNick
12.11.2006, 17:00
Wenn dein "string" eh nur aus einem Zeichen besteht, würd' ich das ganricht mit string machen


unsigned int d = 'a'; // EINFACHES HOCHKOMMA !!
...

if (c == d)
{

}

Charly_cs
12.11.2006, 19:42
Hi!

Danke erstmal! Es geht mir darum später aus einer empfangenen Zeichenfolge z.B. v120 (Vor mit geschwindigkeit 120) diese zu zerteilen und auszuwerten. Dazu müsste ich aber aus dem int ein string machen und das würde ich jetzt gerne mit einfachen Zeichenfolgen versuchen.
Was mich an deiner Variante interessieren würde, warum kann ich in eine intVariable einen Char schreiben??

gruß

Pascal
12.11.2006, 22:49
Was mich an deiner Variante interessieren würde, warum kann ich in eine intVariable einen Char schreiben??

Ein char besteht aus 8Bit, ein int aus 16Bit. In einem char kannst du also Zahlen im Bereich von 0 bis 255 darstellen. Jedes Zeichen (z.B. 'A' oder 'r') ist einer Zahl in diesem Bereich zugeordnet. In ein int passen größere Zahlen, aber natürlich auch wieder alle aus einem char. Also kannst du die Zahl aus einem char in ein int schreiben. Ein int hat einen größeren Wertebereich als ein char.

Charly_cs
13.11.2006, 20:44
Hi!

Danke! Das mit int und char ist mir mittlerweile klar...
Nun noch eine Frage:
Ich hab jetzt in der Variable c einen Integerwert z.B. 94 für 'a' und ich möchte ihn ohne casten in einen char wandeln. D.h. ich will kein 94 in der Charvariable stehen haben sondern ein "a". Hab schon nach Funktionen gesucht, die das machen, aber leider nichts gefunden. Kennt jemand von euch eine passende Fkt. dazu?

Gruß
Charly

Pascal
13.11.2006, 21:36
Hast du die Zahl selbst den verschiedenen Zeichen zugeordnet? Denn ein 'a' bestitzt nach ascii-Tabelle den Wert 97.



D.h. ich will kein 94 in der Charvariable stehen haben sondern ein "a".

Dazu wirst du auch keine Funktionen finden, weil es da nichts zum umwandeln gibt. Das 'a' ist quasi nur eine andere Repräsentation der ihr zugeordneten Zahl.

SprinterSB
13.11.2006, 21:51
Um das erste Zeichen von "a" zu bekommen, kannst du schreiben

char c = "a"[0];

oder

char * text = "a";
char c = text[0];

Ein String (Zeichenkette) ist ein Array von char-Werten. Allerdings bekommst du in C nie eine Zeichenkette, sondern immer nur ihre Anfangsadresse.
Mit dem text[0] bekommst du das erste Element der Kette, also 'a'. Numerierung beginnt immer bei 0.

Informatiker am Bahnhof:
0...1...2 WO IST MEIN DRITTER KOFFER?!!!

Charly_cs
13.11.2006, 23:33
Hi!

@Pascal
Du hast natürlich recht, hab mich mit der Zahl vertan.

@SprinterSB
Ich möchte ja ein Array bekommen. Bin immer noch am Uart-zeichenempfangen und diese dann zusammenzusetzen. Ich nutze die lib von Peter Fleury und empfange statt z.B. des Zeichens a, dessen ascii-nummer als unassigned int. Möchte jetzt nicht die Asciinummer ins char schreiben, sondern das zugehörige Zeichen, um mit Stringfunktionen arbeiten zu können, denn diese Fkt. unterstützen leider kein cast.

Kann mir jemand damit helfen?

Gruß