pointer, kleine Frage?

rumpelix

Level-1
Beiträge
26
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
hall leute,
hab in letzter zeit ein bisschen mit pointern rumgebastelt, hat auch alles soweit funktioniert wie ich mir das vorgestellt habe. nun die frage: warum " sld 3 " wenn ich den pointer erzeuge? funktioniert doch auch so und wenn ich "sld 3" progr. habe geht die cpu in stop ??? :confused:
 
das SLD 3 ist ganz einfach:

normal rechnet man ja der einfach heit halber in Byte wenn man eine Adressen angibt oder einen Bereich. Und wenn man dann eine schleife programmiert oder sonst oirgendwie einen Offset berechnen will nimmt man eben bytes als grundmass.
Bsp: Datenfeld breite 56 Byte / Datensatz Nr. 14 = 13*56 = 728 Adresse.
wenn du das in den Ponter lädst liest er das aber als Bit-Adresse.
Deshal musst du es vorher x8 nehmen (1byte x 8 = 8 Bit)...

Kurz gesagt wenn du im Pointer ab Byte 728(.0) was machen willst musst du P#728.0 draus machen .. das geht entweder mit SLD3 oder x8 oder xP#1.0.
Dezimal ist die Adresse dann 5824 = 728.0

Und SchiebeLinksDoppelwort 3 = mal 8 ;)...

Gruß Philip
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo phillip,
danke erstmal für die antwort.

L 4
L P#1.0
*D
T #pointer
L dbb[#pointer] // bedeutet lade inhalt vom dbx.dbb4

oder

L 4
SLD 3
T #pointer
L dbb[#pointer] // bedeutet lade inhalt vom dbx.dbb4

richtig ?

aber warum ist "SLD 3" = "x8" - versteh ich nicht !
 
Hm :) wie soll ich sagen...

also 4 ist ja Binär 2#100 wenn ich das 3 mal nach Links schiebe kommt dabei Binär gesehen das heraus 2#100 SLD 3 = 100000. und wenn ich nun wiedrum 2#100000 dazimal lese ist das 32 :). Das ist einfach so. Binärrechnung.

Bin da auch kein Experte drinnen ;)

Gruß Philip


PS.: Richtiger weise würde ich mir gleich angewöhnen immer L L#4 zu benutzen (nicht L 4) wenn ich hinterher mit 32 Bit Operationen arbeite. Es gibt doch hin und wieder Probleme oder Rechenfehler in der SPS wenn man da nicht exakt bleibt.
 
Hallo rumpelix

Bei der speicherindirekten Adressierung von Datentypen
sind Pointer 32 bit breit (lang)
Es besteht auch die Möglichkeit Bitaddressen zu addressieren.
Das wären die ersten 3 stellen im Pointer
Da du aber im DB das 4te Byte ansprechen willst musst du
den Wert 4 zuerst um 3 Stellen nach links Schieben =x8 bevor es in
den Pointer geladen wird, da du sonst die Bitaddresse mit 4 belegst
und nicht wie gewollt die Byteadressen
00000000 00000yyy yyyyyyyy yyyyyxxx <-- 3 Bitstellen

y = Byteadresse
x = Bitadresse
 
Zuletzt bearbeitet:
Zurück
Oben