Forum: Mikrocontroller und Digitale Elektronik if Anweisung aus "uart_gets( Buffer );"


von Peter (Gast)


Lesenswert?

Hallo
Ich hab da mal eine kurze frage.

uart_gets( Buffer );
Wie kann ich daraus eine if anweisung machen?

von P. S. (Gast)


Lesenswert?


von Peter (Gast)


Lesenswert?

Das ist ja eine tolle hilfe...
Da steht warscheinlich auch nur drin

if(uart_gets( Buffer ))
{
...
}

Das geht aber nicht weil das ja ne Abfrage Funktion ist.

von Peter D. (peda)


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

von Peter (Gast)


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.

von Klaus (Gast)


Lesenswert?

Du, der Hinweis von  Peter Stegemann war gar nicht so schlecht. 
Programmieren lernt man am besten, indem man sich selber auch mal 
hinsetzt, Bücher und Tutorials liest  und dann was programmiert.

von ARM-Fan (Gast)


Lesenswert?

>uart_gets( Buffer );
>Wie kann ich daraus eine if anweisung machen?

???

Poste mal den Prototypen/Funktionsrumpf dieser Funktion.
Und vor allem: Was willst dut erreichen?

von Peter (Gast)


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?

von Matthias L. (matze88)


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!

von Timmo H. (masterfx)


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.

von Peter D. (peda)


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

von Peter (Gast)


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.

von Matthias L. (matze88)


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.

von Frank N. (arm-fan)


Lesenswert?

>Und ich weiß Ja leider nicht was ihr alles braucht um das zu Beantworten.

Dann beantworte doch wenigstens die Fragen, die dir schon gestellt 
wurden
und ignorier diese nicht.

von Stefan B. (stefan) Benutzerseite


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.

von Peter D. (peda)


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

von Klaus (Gast)


Lesenswert?

Das alles dürfte aber ziemlich schwierig werden, wen der OP nicht mal 
weiß was ein Rückgabe wert ist.

von Timmo H. (masterfx)


Lesenswert?

Er weiß scheinbar auch nicht was ein Quellcode ist, zumindest sehe ich 
hier immernoch nicht den Quellcode von uart_gets()

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Vorsicht Offtopic!

Oh, hört doch auf auf ihm rum zu hacken. Er macht euch doch nichts 
kaputt und  nimmt euch auch nix weg. Und eine "Bringschuld" hat sowieso 
auch keiner im Forum. Wir sind fast alle freiwillig hier. Heh, es ist 
Adventszeit und Feierabend für die meisten hier!

von Heinz K. (Gast)


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

von P. S. (Gast)


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...

von Heinz K. (Gast)


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.

von Matthias L. (matze88)


Lesenswert?

als hilfeerwartender muss man sich aber dann ttotzdem zusammenreissen, 
und auf die hilffsversucche eingehen. auch bei launischen beitraegen.

von Klaus (Gast)


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.

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.