Hallo Ich hab da mal eine kurze frage. uart_gets( Buffer ); Wie kann ich daraus eine if anweisung machen?
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.
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
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.
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.
>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?
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?
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!
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.
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
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.
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.
>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.
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.
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
Das alles dürfte aber ziemlich schwierig werden, wen der OP nicht mal weiß was ein Rückgabe wert ist.
Er weiß scheinbar auch nicht was ein Quellcode ist, zumindest sehe ich hier immernoch nicht den Quellcode von uart_gets()
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!
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
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...
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.
als hilfeerwartender muss man sich aber dann ttotzdem zusammenreissen, und auf die hilffsversucche eingehen. auch bei launischen beitraegen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.