www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Textdatei über RS232 an µC frage wie erkennt man das Ende


Autor: Felix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallöle will mit einem AT89S8252 folgendes durchführen.

das Hyperterminal soll eine Textdatei an den µC schicken. dieser soll
die Textdatei im EPROM speichern. sobald der µC erkennt das die Datei
fertig gesendet wurde soll er diese Postwenden wieder eins zu eins
zurück schicken.

So nun die frage wie erkenne ich das die Date zuende ist?

Vielen Dank im voraus Felix

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Möglichkeit: Timeout. Wenn nach einer bestimmten Zeit keine
weiteren Zeichen ankommen, geht der µC davon aus, daß die Übertragung
beendet ist.

Andere Möglichkeit: Steuerzeichen zur Dateieendekennung. Bei
PC-Textdateien hat sich da aus CP/M-Zeiten das Ctrl-Z herübergerettet.

Dritte Möglichkeit: Dateiübertragungsprotokoll à la X-Modem oder
Z-Modem verwenden.

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
a) Timeout: Werden 1-2s lang keine Daten empfangen, ist die Datei
fertig.
b) Sonderzeichen ans Ende der Datei setzen
c) Vor der Datei die Länge an den uC senden.

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wobei sonderzeichen am ende insofern komplizierter sind, dass sie beim
auftreten im datenstrom escaped werden müssen

Autor: Felix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus Firefly

dei zweiter tip scheint mir sehr interessant kannt du denn etwas näher
ausarbeiten weil im prinzip geht es genau darum eine Textdatei ohne
irgendwelche änderungen an den µC zu schicken

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Beispiel:
Mach mal auf einem DOS/Windows-Rechner ein Kommandozeilenfenster auf
und tippe folgendes ein:

  copy con bla.txt

Danach schreibst Du irgendwelches Geblubber und gibst abschließend ein
Ctrl-Z ein.

Fertig.

Wie man das mit 'nem Terminalprogramm nachahmt, überlasse ich Deiner
Experimentierlust.

Einfacher und vom Verhalten her eindeutiger dürfte die Verwendung eines
Timeouts sein.


@Tobi: Ctrl-Z hat in normalen Textdateien nichts verloren, daher muss
das nicht unbedingt ausgefiltert werden.

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
auch wieder wahr, gilt aber nur, solange man die anforderung nicht auf
alle dateien ändert.

sollte man nicht, egal bei welcher methode irgendeine überprüfung auf
vollständigkeit machen. im einfachsten fall die anzahl zeichen
mitübertragen oder eine einfache prüfsumme

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Felix wollte anscheinend eine protokollose Textdateiübertragung haben.

Besser ist IMHO ein richtiges Übertragungsprotokoll wie beispielweise
Z- Modem, da das auch eine Fehlerkorrektur vorsieht.

Autor: Felix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich glaube wir schiessen grad etws am ziel vorbei ich wollte eigentlich
nur wissen ob es möglich ist eine Textdatei an einen µC zu schicken und
das ende der Datei irgendwie im µC festzutellen (ähnlich dem End Of File
befehl in Visual Basic) aber so wie es scheint gibt es da nichts

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
doch, es geht wie es hier schon erwähnt wurde ähnlich einfach

Autor: Felix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
natürlich geht es aber ich wollte nichts an der Textdatei ändern und ich
wollte im Microsoft Hyperterminal den Befehl Textdatei senden verwenden.
einzige möglichkeit die ich hier für dieses Problem sehe ist das man den
µC 5sec warten läßt wenn in der Zeit kein eingang da war aber vor den
5sec einer da war dann denn kompletten eprom zurückschicken. Oder geht
noch eine der anderen Versionen mit den beiden Vorraussetzungen wenn ja
bitte erklärend an mich gewannt

MfG Felix

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso überträgst du am Anfang nicht einfach die Byte-Größe der Datei?

Oder mit einem Sonderzeichen markieren, von den 256 Ascii Zeichen
benötigt eine Textdatei immer nur einen Bruchteil.
Du musst die Datei dafür ja auch nicht ändern, das Programm/der
Mikrocontroller muss das Sonderzeichen ja nur nach der Übertragung
anhängen.

Autor: Felix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Daniel wenn der µC das sonderzeichen hinten anhängen soll muß er dch
wissen wann das ende erreicht ist was somi das problem nicht lößt
sondern auf das gleiche Problem stößt oder lieg ich da Falsch

Aber trotzdem Dnke mal an alle

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Verwendung eines Timeouts ist bei Deiner Anwendung die einzige
Möglichkeit.

Was für eine Art von Textdatei überträgst Du denn da an den Controller?
Könnte das ein Intel-Hex-File für einen Programmierer sein? Dann kannst
Du das Hexfile selber als Endekriterium auffassen; im Hexdateiformat
gibt es nämlich eine "hier hört's auf"-Kennung.

Mal willkürlich eine Hexdatei angesehen:

  :100683006520504C2D323330350042696469726500
  :100693006B74696F6E616C657320447275636B650F
  :1006A300722D496E74657266616365207769652092
  :0806B300504C2D3233303500AC
  :00000001FF

Die letzte Zeile isses, das ist ein "End-of-File"-Record.

Im S19-Format sieht das nicht sehr anders aus.

Autor: Felix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja wenn das eine Hex Datei wäre wär es etwas leichter leider ist es eine
Textdatei mit völlig variablem Text und varibler länge/größe in sofern
wird mir wohl nix übrig bleiben als auf die zeitvariante überzugehen

als mal danke an alle wenn jemand noch ne klasse idee ht bitte posten

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hilf' mir doch mal auf die Sprünge: Was soll der µC mit einer Textdatei
anfangen, die völlig variablen Text enthält? Welchen Sinn hat das, so
eine Datei an einen µC zu übertragen?

BTW: Wenn Du übrigens in Hyperterminal statt "Textdatei senden" den
drei Menüeinträge weiter oben befindlichen Menüpunkt "Datei senden"
verwenden würdest, dann könntest Du auf Deinem µC das für diesen Zweck
sehr gut geeignete Z-Modem-Protokoll verwenden ... und damit auch
Binärdateien übertragen.
Dies nur mal so als Hinweis.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simples PC Programm schreiben, das der Datei wahlweise die Länge
voranstellt oder das erwähnte Ctrl-Z hinten dranhängt. Und dann das
Ergebnis übertragen.

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.