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
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.
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.
wobei sonderzeichen am ende insofern komplizierter sind, dass sie beim auftreten im datenstrom escaped werden müssen
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
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.
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
Felix wollte anscheinend eine protokollose Textdateiübertragung haben. Besser ist IMHO ein richtiges Übertragungsprotokoll wie beispielweise Z- Modem, da das auch eine Fehlerkorrektur vorsieht.
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
doch, es geht wie es hier schon erwähnt wurde ähnlich einfach
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
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.
@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
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.