if Anweisung aus "uart_gets( Buffer );"

#1067339
Lesenswert?

Peter wrote:
> if(uart_gets( Buffer ))
> {
> ...
> }
>
> Das geht aber nicht weil das ja ne Abfrage Funktion ist.


Natürlich geht das.
Du kannst den Returnwert einer Funktion auf !=0 testen, wenn er nicht 
void oder float ist.

Ob das sinnvoll ist, kann natürlich keiner hellsehen.
Es kennt ja keiner die dahinter stehende Funktion, die auf irgendeinem 
Prozessor XY läuft.


Peter
Gast #1067398
Lesenswert?

Wenn ich das so mache schmeißst der mir nur den Fehler "../main.c:24: 
error: void value not ignored as it ought to be make" raus.
Das sollte dazu dienen wenn eine Zeile über die UART gesendet wird, dass 
dann ein bestimmter Prozess abläuft. Das ganze läuft auf einem Atmega32.
Gast #1067550
Lesenswert?

Ich möchte, dass wenn eine Zeile über die UART gesendet wird, dass diese 
dann ausgewertet wird. Das Problem ist wenn ich daraus keine IF 
Anweisung mache dann wartet der solange bis eine Zeile über die UART 
kommt und das restliche Programm wird nicht mehr ausgeführt. Oder liege 
ich da Falsch?
#1067556
Lesenswert?

jap, ganz genau. Du liegst da falsch. Dir fehlen leider grundlegende 
C-Kenntnisse, bitte geh das irgendwo lernen oder fang mit noch kleineren 
Projekten an..
Es heißt nicht umsonst:
if ([Bedingung])
[then]bla
<else
blub
>

([] -> kommentar, <> -> optional
Ob nun Bedingung da einfach so steht oder aber in einem If als Bedingung 
ist völlig unerheblich. In beiden Fällen wird die Funktion ganz normal 
aufgerufen (sofern da eine Funktion steht).

Wie gesagt: Noch genauer beschreiben was du erreichen willst, und MEHR 
CODE liefern! Um was für ne CPU gehts?

AVR: Du möchtest glaub ich mit dem If nur gucken, ob was zum empfangne 
anliegt? Naja dann teste doch auf das entsprechende Flag im Uart 
Register...
-> Datenblatt!
#1067557
Lesenswert?

Ja dann ist
1
if(uart_gets( Buffer ))
2
...
schon richtig eigentlich, denn uart_gets (wie auch immer das aussieht) 
sollte normaler weise auf ein \n, also Zeilenumbruch warten und also 
Rückgabewert den Pointer auf den String zurückgeben. Muss aber nicht so 
sein, kommt immer drauf an wie es Programmiert wurde, aber das behälst 
du uns ja vor.
#1067559
Lesenswert?

Peter wrote:
> Ich möchte, dass wenn eine Zeile über die UART gesendet wird, dass diese
> dann ausgewertet wird. Das Problem ist wenn ich daraus keine IF
> Anweisung mache dann wartet der solange bis eine Zeile über die UART
> kommt und das restliche Programm wird nicht mehr ausgeführt. Oder liege
> ich da Falsch?

Dann ist vermutlich Dein uns unbekanntes "uart_gets( Buffer );" nicht 
geeignet.

Denke doch erstmal nach, welche Informationen Du gibst (nämlich keine), 
wie damit jemand Dein Problem analysieren soll.


Peter
Gast #1067593
Lesenswert?

Sorry aber ich bin noch nicht lange hier. Und ich weiß daher auch nicht 
was genau ihr alles braucht.
Und zu dem Thema dann lern das doch…
Ich dachte dafür ist dieses Forum da um fragen zu stellen. Und ich weiß 
Ja leider nicht was ihr alles braucht um das zu Beantworten. Mit 
Mikrocontrollern beschäftige ich mich auch noch nicht so lange.
Und dann finde ich es richtig Klasse wenn man dann als Antwort einen 
blöden Link bekommt ohne irgendein Wort.
#1067602
Lesenswert?

Tut mir leid aber hast du meinen Beitrag überhaupt zu Ende gelesen?!? 
Ich habe dir eindeutig beschrieben wo dein Problem liegt, wie ich deine 
Fragestellung verstanden hab und was wir noch brauchen. Ebenso wie der 
mehrfache Hinweis der anderen auf die Funktion "uart_gets()" sollte dir 
das nun also die Möglichkeit geben, hier anstatt mit einer blöden 
Reaktion einen sinnvollen Nachtrag zu deinem ersten Post zu liefern, der 
dazu führen würde, dass du vermutlich nicht einmal 10 Minuten nach dem 
Absetzen des selben eine brauchbare Antwort hättest!

Und: Grundlagen kann man nicht in einem Forum lernen, dazu gibt es 
Tutorials.
Persönliche Seite #1067674
Lesenswert?

Peter wrote:
> Ich möchte, dass wenn eine Zeile über die UART gesendet wird, dass diese
> dann ausgewertet wird. Das Problem ist wenn ich daraus keine IF
> Anweisung mache dann wartet der solange bis eine Zeile über die UART
> kommt und das restliche Programm wird nicht mehr ausgeführt. Oder liege
> ich da Falsch?

Das kommt auf deine Empfangsfunktion uart_gets() an. Wenn sie sich am 
Vorbild gets() orientiert, wartet sie auf eine Eingabe.

Du kannst vor dem Aufruf einer solchen wartenden Empfangsfunktion 
nachsehen, ob ein Zeichen vorliegt () und falls ja, dann die Funktion 
aufrufen in der Hoffnung, dass dann auch eine komplette Zeile kommt.
Beitrag "Modemantwort von Siemens M20 verarbeiten ?"

Oder du benutzt eine nicht wartende Emfangsfunktion z.B. eine 
Empfangsfunktion die im RX-Interrupt läuft und einen Puffer füllt. Die 
Auswertefunktion schaut dann im Puffer nach, ob dort Daten drin stehen.
Man kann hier die Fleury-Library verwenden.

Für den Vergleich von Strings würde man in C eine Funktion benutzen z.B. 
strcmp() oder - sicherer, da längenbegrenzt - strncmp(). Näheres in 
jedem C Lehrbuch.
#1067876
Lesenswert?

Hast Du denn den Quellcode von "uart_gets()" oder ist das ne Blackbox 
von Deinem Compiler?
Und sag endlich mal, welcher Compiler.


Ich sag mal, mit "uart_gets()" gehts nicht.

Du brauchst ne Funktion, die testet, ob ein Zeichen empfangen wurde.
Und dann liest Du das Zeichen, packst es in nen Puffer und testest, ob 
es 0x0A ist (oder was Du sonst als Zeilenende festgelegt hast).
Und erst dann wertest Du den Text im Puffer aus.


Peter
Gast #1068676
Lesenswert?

Nabend
Also ich würde mich auch nicht wundern wenn Peter sich hier nicht mehr 
meldet.
Wenn man solche Antworten erhält hätte ich auch keine Lust mehr hier zu 
Posten. Jeder hat mal klein angefangen und ich finde da kann man dann 
etwas Rücksicht nehmen. Nun gut mag sein das er keine bzw. sehr wenig 
Ahnung hat was das Programmieren angeht. Aber dann nur einen Link zu 
Posten ohne weiteres Kommentar oder irgendwelche Blöden Sprüche ihm dann 
rein zu drücken. Finde ich nicht In Ordnung.
Das einigste Sinnvolle was hier gepostet wurde kam von Stefan B. und ich 
schließe mich seiner Meinung an.
Ich wünsche noch einen schönen Abend.

Mfg Heinz
Gast #1068692
Lesenswert?

Heinz K. wrote:

> Aber dann nur einen Link zu Posten ohne weiteres Kommentar

Wie Stefan richtig schrieb, sind wir alle freiwillig hier. Ich helfe 
freiwillig so, wie ich es fuer richtig halte. Wenn du meinst es ist 
anders richtig, dann hilf auf deine Art - aber spare dir deine 
Volksreden, die helfen naemlich kein Stueck.

Es ist eine ziemlich Unart heutzutage, dass Unbeteiligte und Schueler 
den Lehrern vorschreiben wollen, wie es richtig geht...
Gast #1068780
Lesenswert?

Das war keinesfalls ein angriff auf dich. Entschuldige bitte. Vielleicht 
habe ich mich da etwas falsch ausgedrückt.
Nur wenn du diese Antworten mal durchließt sind sie immer sehr launisch 
geschrieben. Und da hat man gleich das Gefühl das die sich hier gleich 
an den Hals springen.
Das ist mir schon bei mehreren Threads aufgefallen hier in diesem Forum.
Aber vielleicht sollte man das im Offtopic bereich weiter führen.
Mfg Heinz K.
Gast #1068993
Lesenswert?

Mal ehrlich, wenn ich als absoluter Anfänger die Grundlagen nicht kenne 
( nicht "nicht verstehe", sondern nicht kenne!) und dann die erste 
anlaufstelle ein Forum ist, anstatt mal nen Buch, Tutorial, etc. zu 
lesen, dann ist es doch nicht verwunderlich, dass etwas genervte 
Antworen kommen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren