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


von Felix (Gast)


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

von Rufus T. Firefly (Gast)


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.

von Benedikt (Gast)


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.

von Tobi (Gast)


Lesenswert?

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

von Felix (Gast)


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

von Rufus T. Firefly (Gast)


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.

von Tobi (Gast)


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

von Rufus T. Firefly (Gast)


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.

von Felix (Gast)


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

von Tobi (Gast)


Lesenswert?

doch, es geht wie es hier schon erwähnt wurde ähnlich einfach

von Felix (Gast)


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

von Daniel (Gast)


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.

von Felix (Gast)


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

von Rufus T. Firefly (Gast)


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.

von Felix (Gast)


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

von Rufus T. Firefly (Gast)


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.

von A.K. (Gast)


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.

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
Noch kein Account? Hier anmelden.