Teil eines arrays kopieren

nutellahase

Well-known member
Beiträge
180
Punkte Reaktionen
28
Also entweder kopierst du einfach byteweise oder du bildest dir einen ANY-Pointer auf dein Array mit entsprechenden Versatz und kopierst dann per Block Move falls ich mich jetzt nicht irre :confused:
Wo liegt den das Ziel dword?

Myarray: Array [1..6] of Byte

Myarray[3], Myarray[4], Myarray[5] und Myarray[6] möchtest du jetzt in dein dword kopieren? Verstehe ich das richtig??
 
OP
L

Limette

Well-known member
Beiträge
281
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
Also entweder kopierst du einfach byteweise oder du bildest dir einen ANY-Pointer auf dein Array mit entsprechenden Versatz und kopierst dann per Block Move falls ich mich jetzt nicht irre :confused:
Wo liegt den das Ziel dword?

Myarray: Array [1..6] of Byte

Myarray[3], Myarray[4], Myarray[5] und Myarray[6] möchtest du jetzt in dein dword kopieren? Verstehe ich das richtig??

genau, so habe ich es jetzt gemeint. wie bekomme ich die vier nun in ein dword.
 

nutellahase

Well-known member
Beiträge
180
Punkte Reaktionen
28
Vorweg, ich bin selber kein AWL Experte! Hab mich jetzt auch wieder kurz einlesen müssen. Also ich gehe davon aus dass du, wenn du von static Array schreibst, einen FB hast.
Dann brauchst du im Prinzip nur dein Array in das AR1 laden und dann das Doppelwort mit den Versatz von P#2.0 in dein Dword kopieren! Vorher die Register retten und nach Bearbeitung wiederherstellen. Und einen ev. Multiinstanzoffset miteinberechnen!

mfg
 

Thomas_v2.1

Well-known member
Beiträge
8.139
Punkte Reaktionen
2.461
Variante 1 mit Bit-Schieben und ein-verodern:
Code:
      L     #statArray[3]
      SLD   8
      L     #statArray[4]
      OD    
      SLD   8
      L     #statArray[5]
      OD    
      SLD   8
      L     #statArray[6]
      OD    
      T     #statDword

Variante 2 über indirekte Adressierung:
Code:
      L     P##statArray
      TAR2  
      UD    DW#16#FFFFFF
      +D    
      LAR1  
      L     D [AR1,P#2.0]
      T     #statDword
Wenn du keinen Multiinstanz-FB verwendest kannst du dir die AR2 Offset-Berechnung sparen.
 
OP
L

Limette

Well-known member
Beiträge
281
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
Variante 1 mit Bit-Schieben und ein-verodern:
Code:
      L     #statArray[3]
      SLD   8
      L     #statArray[4]
      OD    
      SLD   8
      L     #statArray[5]
      OD    
      SLD   8
      L     #statArray[6]
      OD    
      T     #statDword

Variante 2 über indirekte Adressierung:
Code:
      L     P##statArray
      TAR2  
      UD    DW#16#FFFFFF
      +D    
      LAR1  
      L     D [AR1,P#2.0]
      T     #statDword
Wenn du keinen Multiinstanz-FB verwendest kannst du dir die AR2 Offset-Berechnung sparen.

vielen dank. kann es leider nicht ausprobieren daher frage: wird bei deinen varianten high und low byte getauscht wie bei einem blkmove(4 byte array auf dword - soweit ich weiß ) oder müsste ich dazu variante 1 ein wenig modifizieren ?
 

Thomas_v2.1

Well-known member
Beiträge
8.139
Punkte Reaktionen
2.461
Die Bytereihenfolge ist in Varianten 1 und 2 gleich. Ob da was gedreht wird kann man nicht sagen, da es sowas in einem Array ja nicht gibt.

Die Bytes landen so wie ich es geschrieben habe in folgenden Bytes des Akkus
[3] in Akku HH
[4] in Akku HL
[5] in Akku LH
[6] in Akku LL

Wenn also in [6] eine 1 steht und in den anderen 3 Bytes 0, dann ergäbe diese Bytekombination wenn man das Dword als Dint interpretieren würde den Dezimalwert 1.
 
OP
L

Limette

Well-known member
Beiträge
281
Punkte Reaktionen
3
Die Bytereihenfolge ist in Varianten 1 und 2 gleich. Ob da was gedreht wird kann man nicht sagen, da es sowas in einem Array ja nicht gibt.

Die Bytes landen so wie ich es geschrieben habe in folgenden Bytes des Akkus
[3] in Akku HH
[4] in Akku HL
[5] in Akku LH
[6] in Akku LL

Wenn also in [6] eine 1 steht und in den anderen 3 Bytes 0, dann ergäbe diese Bytekombination wenn man das Dword als Dint interpretieren würde den Dezimalwert 1.

Ok, danke.
Kurze Hilfe noch: Angenommen in [6] würde immer noch eine 1 stehen und ich würde die Bytes tauschen:
Code:
      L     #statArray[5]
      SLD  8
      L     #statArray[6]
      OD           
      SLD  8      
      L     #statArray[3]
      OD           
      SLD  8     
      L     #statArray[4] 
      OD          
      T     #statDword
hätte das zur Folge:
0000 0000 0000 0001 0000 0000 0000 0000 ?
 
Oben