Hallo, was ist bei gcc für µc die maximale Stringlänge z.B für eine Serielle Übertragung?
So groß, wie du das Array dimensionieren kannst, in dem die Character gespeichert werden. Normalerweise also der Wertebereich eines size_t. Auf einem AVR ist allerdings aus praktischen Gründen, meist die Größe des Speichers das Limit.
David G. schrieb: > die maximale Stringlänge z.B für eine Serielle Übertragung? Die serielle Übertragung ist nicht an irgendwelche Stringlängen gebunden. Jedes Zeichen wird einzeln über die Schnittstelle übertragen und löst bei Bedarf z.B. einen Interrupt aus. Wie das Programm mit dem Zeichen umgeht, ist einzig und alleine seine Sache. Es kann die Zeichen einfach einzeln im WOM ablegen und braucht dann überhaupt keine Strings. Und in den WOM paßt mehr rein, als man so einem kleinen µC zutraut ;-)
ah, ok, sowas hatte ich jetzt schon gelesen. In Pascal wird einem das vom Compiler abgenommen, und ers tneuere Versionen können bis 2Gb, bei den alten ist bei 255 zeichen Schluß weil ShortString.. Also müßte ich es genauso umständlich wie in C machen, wenn es mehr werden sollen :-(
David G. schrieb: > In Pascal wird einem das vom Compiler abgenommen, und ers tneuere > Versionen können bis 2Gb, bei den alten ist bei 255 zeichen Schluß weil > ShortString.. > Also müßte ich es genauso umständlich wie in C machen, wenn es mehr > werden sollen :-( dafür kann Pascal auch eine \0 im String speichern.
David G. schrieb: > hilft mir das irgendwie? manchmal schon, damit kann man jeden Inhalt im einen String ablegen. > Der gesendete String ist ja festgelegt. keine Ahnung was bei dir festgelegt ist.
definiere 'umständlich'. Die Kunst besteht ja nicht darin einen String der Länge x zu übertragen. Das kann man jedem Affen beibringen (keine Beleidigung beabsichtigt). Die Kunst besteht darin, dass auch dann noch alles korrekt und fehlerfrei läuft, wenn die Putzfrau das Kabel der seriellen Schnittstelle abzieht und im laufenden Betrieb wieder ansteckt. Da trennt sich dann die Spreu vom Weizen. Und das kann auch dein Pascal nicht alleine handhaben.
und genau darum gehts es mir, das wenn es zu Übertragungsfehlern komt, nicht alles plözlich verschoben ist..hmm..nun gut
Wie geht man da am bestne vor? Ich habe jetzt nen Testarray aus 13 Chars. Ich habe hier Testwerte von 1.23;4.56endx Ich will nun als einzele Strings 1.23 4.56 haben. end ist das ende..x eine unwichtiges Zeicehn oder ein Fehler etc pp Einfach abzählen, ginge, sorgt aber sicher für Fehelrquellen? Z.B. bei Temperaturen könnte es ja 1.50 oder aber auch 23.0 sein Da würde es ja zum Fehler kommen
David G. schrieb: > Wie geht man da am bestne vor? indem man erst mal ein vernünftiges Protokoll definiert, so dass man anhand des nächsten erhaltenen Zeichens (ja, Zeichnes) entscheiden kann, wie es im Empfang weiter geht. > Ich habe jetzt nen Testarray aus 13 Chars. Und dann definiert man die Dinge nicht 'auf Knirsch', so dass man nur mit Gewalt und viel Glück einem String-Überlauf gerade noch so entkommt. > Ich habe hier Testwerte von 1.23;4.56endx Also Zahlen. Wenn möglich speichert man die überhaupt nicht als String, sondern wandelt die während des Einzelzeichen-Empfangs sofort in die Zahl um bzw. 'erweitert' eine Zahl um die Ziffer im nächsten erhaltenen Zeichen. Einzige Ausnahme: wenn am anderen Ende schon auch mal ein Mensch sitzt, der gerne auch mal mit Backspace bereits übertragene Zeichen zurücknimmt. Aber dann wird das mit einem 13-er char Array sowieso nichts vernünftiges werden.
David G. schrieb: > und genau darum gehts es mir, das wenn es zu Übertragungsfehlern komt, > nicht alles plözlich verschoben ist..hmm..nun gut FEC sollte dagegen helfen. Der Stecker darf allerdings nicht beliebig lange gezogen sein ;-) http://de.wikipedia.org/wiki/Vorw%C3%A4rtsfehlerkorrektur
?? ist ; kein entsprechendens Zeichen?!? Bei dem 13 Char handelt es sich um einen festen wert, da ist nicht auf Knirsch,d aich es testweise ohne Seriele übetragung gerade nachbaue...
David G. schrieb: > Bei dem 13 Char handelt es sich um einen festen wert, da ist nicht auf > Knirsch,d aich es testweise ohne Seriele übetragung gerade nachbaue... Blöderweise ist die REalität aber so, dass wegen Störungen oder sonstwas auf einemal mehr oder weniger als die 13 Zeichen kommen. Oder andere Zeichen als die erwarteten. Und dann muss dein Parser (das wäre jetzt so ein Stichwort für die weitere Recherche) damit zurechtkommen und sich wieder aufsynchronisieren können. David G. schrieb: > Ein starchar könnt ich noch einfüge. Also z.B. S Wenn du "noch was einfügen" kannst, dann hast du offenbar das Protokoll in der Hand. Und dann mach einfach etwas, was man z.B. auch am Terminal sinnvoll lesen kann. Statt das, was David G. schrieb: > 1.23;4.56endx also eher sowas: 00123;00456(CR)(LF) Auch das sind 13 Zeichen, aber jetzt hat jede Stelle immmer die selbe Bedeutung. Und wenn das CRLF empfangen wurde, musst du nur noch kontrollieren, wieviele Zeichen davor empfangen wurden und kannst sagen: wenn es nicht genau 12 waren, dann war da ein Fehler. Fertig. Wenn kein Fehler war, dann ist das erste Zeichen eine Hunderterstelle, das zweite die Zehnerstelle, das dritte eine Einerstelle, dann kommen Nachkommastellen. Dann muss ein ';' kommen, sonst: Fehler! Und so weiter...
das lässt sich aber vermutlich nicht, oder nur sehr viel Aufwand in der PC Software umsetzen, da ich hier mit Profilab arbeite und wahlweise der Empfänger ein µc oder eben der PC ist. Controllerseitig hätte ich es sonst natürlich so oder so ähnlich gemacht
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.