Forum: Mikrocontroller und Digitale Elektronik Erkennung des Datenfeldendes


von eckel (Gast)


Lesenswert?

Hi Leute hab da ne Frage, hat jemand von euch ne Ahnung wie man 
rausbekommen kann ob das Datenfeld zuende ist sprich keine db´s mehr 
vorhanden sind?

von Daniel B. (und3rt4ker)


Lesenswert?

hi...

wie wärs denn mit einer von dir definierten Bytefolge am Datenfeldende, 
die du manuell überprüfst z.B: 0,255,0,254
Ein extra Befehl o.Ä ist mir nicht bekannt.


MfG und3rt4ker

von eckel (Gast)


Lesenswert?

hab ich auch schon überlegt is aber problematisch da ich ne Laufschrift 
programmiere und da so gut wie jede kombination vorkommen kann...
Hab von meinem ausbilder mal erfaren das es ne art routine gibt die man 
programmieren kann er is aber nich weiter drauf eingegangen, er meinte 
nur sei sehr schwer verständlich...

von Karl H. (kbuchegg)


Lesenswert?

Ich geh mal davon aus, dass du Assembler meinst. 'db' spricht
dafür.

> aber problematisch da ich ne Laufschrift
> programmiere und da so gut wie jede kombination vorkommen kann

mag sein. Aber da 0 keinem darstellbaren ASCII Zeichen
entspricht, wird das dann ja wohl in deinen Texten eher selten
vorkommen.

von Kai G. (runtimeterror)


Lesenswert?

@Karl heinz Buchegger
Hörte sich für mich eher an, als würde er Bit-Patterns übertragen... 
sonst auf jeden Fall mit 0 terminieren.

Was mir dazu einfällt:
- Ein Bit mehr als notwendig verwenden und damit das Ende signalisieren
- wenn das nicht geht: nur 7 der 8 Bits für Daten verwenden und das 
letzte Bit als Kennzeichen verwenden. Die Originaldaten müssen dann aus 
mehreren Bytes zusammengesetzt werden -> Aufwändig
- Einen bestimmten Wert 'Escapen' z.B. (255, 0) heißt Ende der Daten, 
(255, 255) heißt 255. Alle anderen Werte normal übertragen.
- Saubere Lösung: Daten zu Frames zusammenfassen und am Anfang eines 
jeden Frames die Länge ankündigen. (Streaming nicht ohne Weiteres 
möglich)
- Oder eine getrennte Interrupt- oder sonstwas-Leitung legen und damit 
das Ende signalisieren (entspricht etwa der ersten Lösung, ändert aber 
die Datenübertragung selbst nicht)

Hoffe da ist was brauchbares für dich bei - sonst noch mal melden ;)

Gruß

Kai

von eckel (Gast)


Lesenswert?

vielleicht für nen Buchstaben aber als leerzeichen brauch ichs dann 
schon ansonsten kann manns nur noch schwer lesen...

von Kai G. (runtimeterror)


Lesenswert?

Ich war jetzt eher von einer Datenfütterung von außen ausgegangen. Wenn 
die Daten intern als 'db' vorliegen, dann einfach die Länge als int 
danebenlegen.

>..., er meinte
>nur sei sehr schwer verständlich...

In die Kategorie fällt weder die 0-terminierung noch die explizite 
Längenangabe ;)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Definiere ein Symbol, das im Speicher hinter dem Datenfeld liegt. 
Vergleiche die Adresse dieses Symboles mit der (Anfangs-)Adresse des 
Datenfeldes und Du kennst die Länge des Datenfeldes.

Alternative: Das Datenfeld dürfte ja wohl Text enthalten (Laufschrift?), 
daher dürften bestimmte Zeichen darin nicht vorkommen. Halte Dich an die 
C-Konvention, verwende 0 als Stringendekennzeichnung.

0, nicht "0" (0x30).

von Kai G. (runtimeterror)


Lesenswert?

@eckel
Kannst du mal einen Beispieldatensatz nennen? Ist dann leichter zu 
diskutieren, danke.

von Daniel B. (und3rt4ker)


Lesenswert?

ich bin auch voll beim Laufschriftprogrammieren. g Und ich benutze die 
0 am Ende des Datenfeldes für den Lauftext, gab noch nie Probleme und 
ich wüsste spontan nicht, wofür man die 0 sonst dahin schreiben würde.

MfG
und3rt4ker

edit: @eckel: Das Leerzeichen entspricht im ASCII code nicht der 0 
sondern 32, oder war was anderes gemeint?

von Walter (Gast)


Lesenswert?

>..., er meinte
>nur sei sehr schwer verständlich...

d.h. dass er Null Ahnung hat, es aber sich nicht sagen traut ...

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.