mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik NMEA einlesen


Autor: Markus (Gast)
Datum:
Angehängte Dateien:

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

Autor: A.K. (Gast)
Datum:

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

Autor: Markus (Gast)
Datum:

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

Autor: T.Stütz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wärs damit den rückgabe wert von getchar auch zu verwenden

Daten = getchar();

Gruss

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der if-Anweisung frage ich ab, ob ein Zeichen empfangen wurde. Was
kann man mit getchar() noch "anstellen"?

Autor: A.K. (Gast)
Datum:

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

Autor: A.K. (Gast)
Datum:

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

Autor: Markus (Gast)
Datum:

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

Autor: T.Stütz (Gast)
Datum:

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

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.