LittleJack86
Level-1
- Beiträge
- 44
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Guten Mogen allerseits!
Ich weiß schon, zur indirekten Adressierung gibts schon viele Fragen, habe nur nix gefunden was mich glücklich stimmen lässt.
Zur Problemstellung:
Ich habe einen multiinstazfähigen FB, in diesem gibt es u.a. als statische Variable ein Array of char mit 50 Zeichen.
Dieses Array möchte ich Byte für Byte kopieren bis ich ein bestimmtes Zeichen im Array erreicht habe.
Zur Frage:
Kann ich die statischen Variablen generell NUR mit Hilfe eines Any-Zeigers flexibel ansprechen?
...oder wäre es auch einfacher mit einem Pointer möglich?
Weiters, der lokale Bereich, welchen ich z.B. durch "L LB 0" ansprechen kann entspricht NUR den Temp Variablen oder irre ich da?
Ich hätte das mit dem Any-Zeiger mal folgendermaßen zusammengestöpselt (ich befinde mich hier in einem multiinstanzfähigen Baustein):
...die Variable #ByteAdrMeinArray kann ich ja nun jeweils um eins erhöhen um im Array of char zum nächsten Zeichen zu kommen, oder?
...und wo ich mir auch nicht sicher bin, ob Instaz DB beim Speicherbereich richtig ist, was macht in dem Fall den Unterschied, könnte ich nicht genau so einen Zeiger bauen mit einfach nur DB, und auf einen Instanz-DB zugreifen?
Ich danke euch schon mal für die Hilfe!
Liebe Grüße
LiJ
Ich weiß schon, zur indirekten Adressierung gibts schon viele Fragen, habe nur nix gefunden was mich glücklich stimmen lässt.
Zur Problemstellung:
Ich habe einen multiinstazfähigen FB, in diesem gibt es u.a. als statische Variable ein Array of char mit 50 Zeichen.
Dieses Array möchte ich Byte für Byte kopieren bis ich ein bestimmtes Zeichen im Array erreicht habe.
Zur Frage:
Kann ich die statischen Variablen generell NUR mit Hilfe eines Any-Zeigers flexibel ansprechen?
...oder wäre es auch einfacher mit einem Pointer möglich?
Weiters, der lokale Bereich, welchen ich z.B. durch "L LB 0" ansprechen kann entspricht NUR den Temp Variablen oder irre ich da?
Ich hätte das mit dem Any-Zeiger mal folgendermaßen zusammengestöpselt (ich befinde mich hier in einem multiinstanzfähigen Baustein):
Code:
//Nummer Instaz-DB ermitteln
L DINO //Nummer des Instanzdatenbausteins laden
T #MeinDB
//Adressregisterversatz ermitteln
L #MemAR2 //Sicherung von AR2 laden
SRD 3 //Bit-Adressbereich entfernen
T #ByteAdrAR2 //Byte-Versatz für MultiinstazCalls
//ByteAdresse von MeinArray ermitteln
L P##MeinArray //Pointer mit meinem Array laden
SRD 3 //Bit-Adressbereich entfernen
L #ByteAdrAR2 //Byte-Adresse des AR2 laden
+D //ByteAdr AR2 zur ByteAdr des Pointers addieren
INC 1 //Adresse um ein Byte erhöhen (Geradzahliges Bytemuster)
T #ByteAdrMeinArray //Ergibt die Byte-Adresse im Multiinstaz DB
//Pointer für MeinArray bauen
LAR1 P##MeinZeiger //Adresse des Zeigers ins Adressregister laden
L W#16#10
T LB [AR1,P#0.0]
L W#16#2 //Typ BYTE
T LB [AR1,P#1.0]
L 1 //ein Byte lang
T LW [AR1,P#2.0]
L #MeinDB //Aktueller Instanz-DB
T LW [AR1,P#4.0]
L #ByteAdrMeinArray // <<-- kann ich nun jeweils um 1 erhöhen um das Array Byte-weise zu durchlaufen
SLD 3
T LD [AR1,P#6.0]
L B#16#85 //Speicherbereich (hier Instanz-DB)
T LB [AR1,P#6.0]
//Zeichen in MeinArray-Indirekt prüfen
L P##MeinZeiger
L 'X'
==I //schauen ob das aktuelle Zeichen ein X ist
.
.
.
...die Variable #ByteAdrMeinArray kann ich ja nun jeweils um eins erhöhen um im Array of char zum nächsten Zeichen zu kommen, oder?
...und wo ich mir auch nicht sicher bin, ob Instaz DB beim Speicherbereich richtig ist, was macht in dem Fall den Unterschied, könnte ich nicht genau so einen Zeiger bauen mit einfach nur DB, und auf einen Instanz-DB zugreifen?
Ich danke euch schon mal für die Hilfe!
Liebe Grüße
LiJ