Dim Eins As Byte At &H60
Dim Zwei As Byte At &H61
Dim Drei As Byte At &H62
Dim Vier As Byte At &H63
Dim Erg As Long At &H60 Overlay
Eins = 255
Zwei = 1
Drei = 0
Vier = 0
Erg = Erg + 1
Do
Print Erg
Loop
End
Möchte gern 4 aufeinander folgende Bytes in eine Long/Single Varible Wandeln
Von einem Gerät lese ich 16 Bytes per UART
in eine Indizierte Variable in den AT Mega 8
z.B Y(i); Y(i+1); Y(i+2); ... bis Y(i+n)
und habe nun Zugriff auf jedes einzelne Byte.
Die Betriefsfrequens des angeschlossenen Gerätes
liegt beispielsweise in den vier Bytes 2-5.
Meine Idee ist nun diese Information in einer
Größeren Long/Single Variablen weiter zu verarbeiten.
Wie also bringe ich die Information
aus vier einzel Bytes z.B
&B 00000010 10111110 11100001 10000000 = &d 4606400
in eine Long/Single Variable um sie dort durch 16
zu teilen und anschl mit 10 zu multiplizieren damit
ich die augelesene Frequenz von 28.790.000 zu erhalten
und anzuzeigen.
Oder bin ich da komplett auf dem Holzweg ??
Dim Eins As Byte At &H60
Dim Zwei As Byte At &H61
Dim Drei As Byte At &H62
Dim Vier As Byte At &H63
Dim Erg As Long At &H60 Overlay
Eins = 255
Zwei = 1
Drei = 0
Vier = 0
Erg = Erg + 1
Do
Print Erg
Loop
End
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
Vielen Dank, für Deinen Tipp. Habe nun das Problemchen lösen können.
Beste Gruesse aus Bad Honnef, Claus
Wie denn, so wie x-ryder meinte?Habe nun das Problemchen lösen können.
Könnte man nicht einfach so:
Single = byte
Single * 256
Single + byte
Single * 256
...
MFg moritz
...mehrfach habe ich versucht Deine Idee nachzuvollziehen... bislang ohne Erfolg, bitte sei so gut und formuliere ein bischen mehr Text.
Liegen die Informationen im übergebenen String im ASCII-Format (= Klartext) oder im Binärformat vor.
Nur mit dieser Information kann hier eine zielführende Information gegeben werden.
Viele Grüße
Josef
Sorry, ich dachte es wäre verständlicher, aber kein Problem. Also meine Idee ist, eine Single/Integer o.ä. Varialbe zu nehmen und sie jeweils mit einem Byte zu beschreiben. Als erstes nehmen ich z.B. das erse von 4 Bytes (Byte1) und schreibe es in die Single-Varaible:
Single=Byte1
Nun verschiebe ich das Byte innerhalb des Singles nach links, dafür gibt mit Sichherit auch eine andere Anweisung, ich mache es einfach rechnerisch:
Single = Single x 256
Im Single siehts dann also so aus:
[leeres Byte][leeres byte][byte 1][leeres byte]
Nun schreibe ich hinten wieder ein byte rein:
Single = Single + Byte 2
verschiebe es wieder...
Im Grunde mache ich dsa genau so wie x-ryder, nur das er den Speicher des Singles direkt anspricht.
Vielleicht geht es aber auch so:
Single.1 = Byte.1
Also bei Bytes kann man ja die einzelnen bits direkt ansprechen. Ob das auch mit Bytes geht, weiß ich nciht. Es wäre aber vermutlich zuviel Arbeit, wenn man jedes Bit einzelnd an die richtige Stelle schreiben würde.
@x-ryder:
Woher weißt du welchen Speicherplatz die Variable einnimt. Weiß man das z.B. dadurch, dass man sie als erste deklariert und Variablen einen bestimmten Speicherplatz (Adresse) haben?
MFG Moritz
Hi, Claus !
Es geht darum, daß ein Speicherbereich von zwei Funktionen einfach verschieden gesehen wird. "REDEFINE"
Die UART Rx/Tx kennt nur Byte-Folgen
Deine Anwendung sieht da aber eine Daten-Struktur.
Dazu gibt's eben eine Speicher-Redefinition mit AT xxx OVERLAY
Konkret (Beispiel):
Daten-Struktur:
dim Header as Byte ' steht z.B. auf addr. &H0060
dim Value as single ' steht z.B. auf addr. &H0061
dim Param as integer ' steht z.B. auf addr. &H0065
dim nochwas as word ' steht z.B. auf addr. &H0067
Und jetzt die re-definition als Byte-stream
dim Message(9) as byte AT Header OVERLAY
' steht jetzt auch auf addr. &H0060 und deckt mit länge 9 genau die obige Struktur ab
Die UART liest und schreibt message(n) (n= 1-9)
Die Applikation liest & schreibt aber header, value, param, etc.
@josef da ging's um "CONVERSION", das is was anderes
logo ? mfg robert
hehe piknick haste meinen beitrag übersehen???
Martin
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
@x-ryder: nein, hab ich nicht übersehen, hast ja recht, de facto isses eh dasselbe, *knieundbodenküssenderSmiley*
nur mit der UART hast du ja normalerweise einen Counter/Zeiger auf das aktuelle Byte, da kannst du mit EINS, ZWEI,... nix rechtes anfangen, oder willst einen case Select nehmen ?
mfg robert
Lesezeichen