www.mikrocontroller.net

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


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich hab da mal eine kurze frage.

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

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Matthias Larisch (matze88)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja dann ist
if(uart_gets( Buffer ))
...
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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias Larisch (matze88)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank N. (arm-fan)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus (Gast)
Datum:

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

Autor: Timmo H. (masterfx)
Datum:

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Heinz K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Heinz K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias Larisch (matze88)
Datum:

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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.