www.mikrocontroller.net

Forum: PC-Programmierung Stringlänge nur 255?


Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle,

Ich habe folgendes Problem:
Ich generiere in meinem Programm einen String (mit & in einer 
for-Schleife) der ca. 600 Zeichen lang ist. Zum Test gebe ich den String 
auch in einer Textbox aus. Dort hat er die korrekte Länge. Diesen String 
möchte ich dann über die RS232 übertragen. Doch es werden nur 255 
Zeichen übertragen. Auch wenn ich mir den String im Überwachungsfenster 
ansehe, ist er nur 255 Zeichen lang. Ich dachte Strings könnten bis zu 
2^31 Zeichen enthalten? Was ist da los?

Ich programmiere mit VisualBasic 6.

Danke für eure Hilfe!

mfg
Andy

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
ich bin kein programmiere, aber durch rs232 kannst du nur 8 bit senden 
also 255 zeichen.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ich bin kein programmiere

Das merkt man

> aber durch rs232 kannst du nur 8 bit senden also 255 zeichen.

Was hat das mit der max. Stringlänge in BASCOM zu tun?

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lies richtig was er geschrieben hat.
> Diesen String
> möchte ich dann über die RS232 übertragen. Doch es werden nur 255
> Zeichen übertragen.
 durch die RS232 kannst du kein 600 auf einmal senden, da musst du 2*255 
+ rest senden.



Autor: Marvin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Didi, sorry, aber das ist ja was völlig neues.
Was hat die Framelänge mit der Wortbreite zu tun?

@Andy: Wie stellst Du fest, wieviele Zeichen übertragen werden? 
Vielleicht liegt das Problem beim Empfänger.

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dachte die rs232 ist mit UART verbunden???

Autor: Wiesi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andy
Ein Code Snippet oder so wäre nicht schlecht, bzw. ob du die Stringlänge 
mit überträgst oder den string mit \0 oder was auch immer abschließt.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Didi

Ich muss mich entschuldigen.
Ich hab da 2 Threads durcheinandergebracht.
Da war noch so ein "Warum geht bei BASCOM mit mid kein
String mit mehr als 255 Zeichen" - Thread. Mit dem
hab ich diesen hier verwürfelt.
Tut mir leid.

Autor: Thomas B. (yahp) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Trotzdem bleibt es so, dass die Stringlänge mit der Wortbreite erstmal 
nichts zu tun hat.

Hardwarepuffer scheiden wahrscheinlich eh aus, da die wohl kaum 255 
Zeichen tief sind. Ist also eher ein Problem auf höherer Ebene.

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe es hardwaremässig erklärt. soweit ich weiss, die RS232 wird an 
UART einer µC angeschlossen dadurch werden die Daten seriell übertragen.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hat aber nichts damit zu tun.
Die UART hat keine Beschränkung hinsichtlich der Länge.
Das liegt vor allem daran, dass es auf der Ebene der UART
keine Datenpakete mehr gibt. Da ist alles nur
noch ein Bytestrom. Byte wird der UART übergeben -> Byte
wird gesendet. Byte wird empfangen -> Empfänger kann sich
das Byte abholen.

Eine RS232 ist normalerweise eine UART
UART steht für: Universal Asynchronous Receiver Transmitter.
Genau das trifft auf eine RS232 zu.
Das 'normalerweise' habe ich geschrieben, weil man eine RS232
theoretisch auch synchron betreiben kann. Ist mir allerdings
noch nie untergekommen (was nicht heist, dass es niemand
machen würde).

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@didi:

Genau.Und zwar immer ein wort fester Länge (üblicherweise 8 Bit) 
zusammen mit einem Start und einem (oder 1.5) Stopbit(s) und eventuell 
einem Paritätsbit.Das wäre dann 1 Byte,was in die UART geschrieben 
wird,in Hardware seriell herausgetaktet und wieder in Hardware im 
Empfänger zusammen gesetzt wird.Das ganze wird dann so oft wie nötig 
wiederholt,Byte für Byte.Mit einem Oszi kann man dann die Bits auf der 
Leitung springen sehen,im Sender/Empfänger wird allerdings nur Wortweise 
gearbeitet.Man kann damit natürlich deutlich mehr als 255 Bytes 
übertragen,allerdings benötigt jedes Byte eine fest definierte Zeit (bei 
9600Baud,1Stopbit,8Datenbits z.B etwas über 1ms pro Byte).

Der Fehler liegt dann eher an anderer Stelle.Ein Pascal-string z.B. hat 
die Länge im 1.Byte stehen und kann damit maximal 255 Zeichen lang 
sein.Oder im Empfänger ist ein Ringpuffer zu klein bzw. es wird in dem 
Empfangsarray nur mit einem char adressiert.Um das zu testen kannst du 
ja mal die com1 am PC per Nullkabel an die com2 hängen und im 
Terminalprogramm schauen,ob alles gesendet wird.Wenn ja muss das Problem 
beim Empfänger (Mikrocontroller? anderer PC?) liegen.

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Karl-Heinz:

Soweit ich weiss (man möge mich da korrigieren,falls ich mich irre),sind 
bei UART (universal asynchronous Receiver Transmitter) keine Pegel 
vorgegeben,lediglich eine grobe Vorgabe was Start/Stopbit und Parität 
angeht. Beim RS232 Standart hingegen sind dann die entsprechenden Pegel 
festgelegt und Empfehlungen für Steckerbelegungen,Kabellängen,etc 
gegeben.

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Karl
ist klar senden und empfangen.
deshalb habe ich ihn auch gesagt er sendet erstmal 255, dann nochmal 255 
das sind 500 dann der rest 100. damit hat er sein 600 schon komplt 
gesendet.

@Ronny
war professionel erklärt. :)

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Didi: Nein, man kann die 600 direkt senden. Die Begrenzung des 
Zahlenbereichs (0-255) von "8-Bit" hat nichts, aber auch garnichts damit 
zu tun, wieviele Bytes man senden möchte. Das ist alles eine Frage der 
Software, die Hardware beschränkt da nichts. Aber solange man von Andy 
nicht erfährt, welche Software er benutzt, kann man ihm leider nicht 
weiterhelfen.

Außerdem ist 255+255 immer noch 510 ;-)

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.