NMEA einlesen

Gast #159020
Lesenswert?
• ▲
▼
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
Angehängte Dateien:
Gast #159021
Lesenswert?
• ▲
▼
> 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.
Gast #159025
Lesenswert?
• ▲
▼
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.
Gast #159026
Lesenswert?
• ▲
▼
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.
Gast #159028
Lesenswert?
• ▲
▼
@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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.