Maximale Stringlänge in C

Gast
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 ;-)
Gast
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 :-(
Gast
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.
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.
Gast
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.
Gast
??
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...
Moderator (Firma: Titel) Persönliche Seite
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...
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.