Teil eines arrays kopieren

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??
 
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.
 
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
 
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.
 
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 ?
 
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.
 
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 ?
 
Zurück
Oben