Moin,Moin! Ich versuche NMEA-Daten via UART in einen AVR einzulesen. Dazu verwende ich zunächst ein Terminal, welches vorhandene Datensätze zum uC sendet. Zur Bestätigung soll der uC diese Datensätze zurücksenden. Mein bisheriger Code hat nicht richtig funktioniert. Was haltet Ihr davon? Kann ihn erst heute Nacht testen. Oder kann es auch daran liegen, daß irgendwann die Variable Datensatz voll ist und ausgegeben werden soll. Dabei wird aber weiterhin in ihr hinein geschrieben. Obwohl ich das als nicht unbedingt plausibel halte. Teilweise kam aber nach einen Reset der erste Datensatz richtig an und die folgenden zeigten nur noch Fragmente des Originals. Kennt jemand vieleicht eine Quelle für solchen Code? Dürfte ggf. Standardcode sein. Vielen Dank im Voraus, werde heute Nacht alles checken! Gruß Markus
> char Datensatz[100]; > Datensatz[100]='\0'; "Datensatz" hat 100 Elemente, numeriert von 0..99. Das Element 100 gibt's nicht => überschreibt das was dahinter steht. Und ein Test auf Pufferüberlauf muss natürlich noch rein.
Hi! Datensatz[100]=?0'; gibt nur eine Warnuns aus. Wenn ich 99 hineinschreibe, so ändert sich nichts. Wie sieht der Code für einen Pufferüberlauf aus? M.
Wie wärs damit den rückgabe wert von getchar auch zu verwenden Daten = getchar(); Gruss
In der if-Anweisung frage ich ab, ob ein Zeichen empfangen wurde. Was kann man mit getchar() noch "anstellen"?
Du hast aber schon nachgelesen, was genau getchar() eigentlich macht? Warum also ein "nackter" Aufruf vom getchar() zwar etwas bewirkt, aber mit an Sicherheit grenzender Wahrscheinlichkeit nicht das, was Du im Sinn hast.
Auch wenn's hier oft anders zu laufen scheint - ich denke dass ein Microcontroller nicht die beste Plattform für die ersten Schritte in der Programmierung mit C ist. Es sei denn man hat JTAG und weiss damit umzugehen, ansonsten ist das für Anfänger zu sehr Blindflug.
Hmmm? Nunja, ein Profi bin nun wirklich nicht. Aber nun ist es meine Aufgabe dies zu machen. Ich werde aber mal die Hilfe bemühen.
@Markus natürlich kannst du mit "getchar()" prüfen ob ein Zeichen da ist, (genauer du wartest auf das nächste Zeichen) dieses Zeichen wird als Rückgabewert zurückgegeben. Wenn das Zeichen nicht zufälligereise 0x00 ist geht das gut. Aber: danach hast du eine while schleife die dir den Hauptspeicher mit '$' auffüllt da an "Daten" nix mehr zugewiesen wird, Daten muß aber um zu dieser Stelle zu kommen '$' sein (if). => vermutlich neustart Prozesor da du dir früher oder später wichtige Daten überschreibst (Stack). Tip1: Klammern um Abfragen helfen ungemein beim Lesen des Codes Tip2: es gibt Debugger/Simulatoren die dir bei der Entwicklung helfen könnten. Wenns da nix gibt, nimm dir nicht benützten Pin(s) und gib da ein Signal aus (z.B: Bin jetzt innerhalb if () ) Gruss
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.