Forum: Mikrocontroller und Digitale Elektronik Ist das überhaupt ein String?


von Gast (Gast)


Lesenswert?

Hallo,

ich habe schon mal einen Thread begonnen, aber da wusste ich noch nicht 
so bescheid über das alles.

Also eine kurze Frage: Ist das überhaupt ein String, den man da im 
Terminal sehen kann?
Ein String mit 21 Bytes?
http://img120.imageshack.us/img120/6443/telegrammul2.jpg

Irgendwo habe ich mal gelesen, dass ein String am Ende mit irgendwas 
bestätigt wird.

Danke,
MFG Peter

von Jonas (Gast)


Lesenswert?

Ein String muss am Ende das Stringendezeichen 0x00 haben, ich sehe 
keines -> kein String denke ich

von Timmo H. (masterfx)


Lesenswert?

Ganz allgemein ist ein String eine Zeichenkette. Ein String enthält 
eigentlich nur lesbare Zeichen (ASCII). Ich selbst würde so eine 
Zeichenfolge mit 0xFF etc niemals als String bezeichnen.

>Irgendwo habe ich mal gelesen, dass ein String am Ende mit irgendwas
>bestätigt wird.
Joa, in C wird ein String mit einer binären Null ('\0') abgeschlossen. 
Diese Terminierung geschieht automatisch beim einfassen des Strings in ' 
" '.
Also z.B.
1
char test[] = "Ich bin ein String";
Im Speicher steht dann dieser String mit einer "\0" am ende. Daran kann 
bei der Ausgabe dann erkannt werden wo dieser zuende ist.
Das gleiches würde auch folgende Anweisung machen
1
char test[] = {'I','c','h',' ','b','i','n',' ','e','i','n',' ','S','t','r','i','n','g','\0'};
Auf dem Terminal wird diese Stringterminierung jedoch nicht ausgegeben.

von Spess53 (Gast)


Lesenswert?

Hi

Das ist eine Frage der Definition. Ein String besteht im allgemeinen aus 
einer Folge von lesbaren Zeichen + einige Sonderzeichen. In C wird ein 
String mit $00 abgeschlossen. In Pascal enthält das erste Byte die Länge 
des Strings (ohne Endekennzeichen). Textverarbeitungen benutzen '$0D 
$0A' als Zeilentrenner. Wird auch bei Datenübertragungen von Text auch 
sehr häufig benutzt.
Die Aufzählung ist mehr als unvollständig (habe jetzt keine Lust Romane 
zu schreiben). Sollte nur verschiedene Sichtweisen verdeutlichen.
Das was in deinem Anhang zu erkennen ist, sieht nach einer Folge von 
Hex-Werten aus. ASCII-Zeichen sind nicht so richtig zu erkennen.

MfG Spess

von Timbo (Gast)


Lesenswert?


von Peter (Gast)


Lesenswert?

Hallo,

jetzt bin ich mir noch immer nicht im klaren.

Jonas sagt ja NEIN.

Timmo:???Schon oder?

Die bessere Frage ist aber, wie ich diese Bytes in einen Mega8 bekomme 
mit Bascom?

String jetzt JA oder Nein?

Ihr müsst entschuldigen, ich bin Maschinenbauer....;o)

MFg Peter

von Peter (Gast)


Lesenswert?

Danke Spess,

das gibt schon eine gute Auskunft.

Aber Prinzipiell ist es möglich, die Werte in den Mega zu bekommen, 
oder?

MFG Peter

von Bender (Gast)


Lesenswert?


von Matthias Kölling (Gast)


Lesenswert?

Wie willst Du sie denn in Deinen Controller bekommen? Per UART - dann 
tus einfach! Die UART kennt keine Strings. Die kennt nur Zeichen. Du 
mußt nur wissen, wo das Ende ist. Das kann ein besonderes Zeichen sein 
oder Du kennst die Anzahl. Es kann aber auch sein, dass ständig Zeichen 
angepurzelt kommen. Dann schaufelst Du das Zeug einfach im Interrupt in 
einen Ringpuffer. Dazu benutzt Du einen Schreibzeiger. In der main-loop 
liest Du aus dem Ringpuffer aus bis die Zeiger gleich sind. Dann liegt 
es an Dir, was Du damit machst. Viel Spaß beim "Strings" empfangen.

Gruß Matthias

von Gast (Gast)


Lesenswert?

>Die bessere Frage ist aber, wie ich diese Bytes in einen Mega8 bekomme
z.B. mit Rx-Interrupt einlesen
Was diese Byte-Folge, nennen wir sie Telegramm, bedeutet
sollte in einem Protokoll definiert sein

>mit Bascom?
geht sicher auch mit Bascom

von Peter (Gast)


Lesenswert?

Danke Matthias,

genau das wars was ich gebraucht habe ;o) DANKE

Dann vesuch ich das morgen mal!

MFG Peter

von Spess53 (Gast)


Lesenswert?

Hi

Der Mega kennt von Haus aus keine Strings. Zeichen werden einzeln als 
Bytes empfangen. In Assembler hast du die volle Kontrolle, wie diese 
Bytes interpretiert werden. Wie die Bytes in 'höheren' 
Programmiersprachen verarbeitet werden ist unterschiedlich. U.U. kann 
auch ein Array der geeignete Empfangsort sein.
Ich weiss nicht, wo die Daten herkommen. Wenn es Pakete mit definierter 
Länge sind, sollte es machbar sein. Bei einem kontinuierlichen 
Datenstrom hast du natürlich ein Problem.

MfG Spess

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.