Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo Leo, > > > Ich möchte Variablen loggen. > > Um die Sache zu komplizieren möchte ich aus einen Set aus logbaren Variablen (ideal wäre natürlich, > > wenn zu diesem Set alle globalen Variablen zählen) zur Laufzeit auswählen, welche ich nun tatsächlich > > logen will. > > > > Ich denke, daß schon einige von Euch dieses Problem erfolgreich gelöst haben und bin auf Vorschläge > > gespannt. > > > > In C wäre die Sache natürlich einfach: Ich würde ein Array mit pointern auf die Speicherstellen machen, > > die ich loggen will. > > Direkte Pointer gibt es in C2 nicht. > Es werden z.B. bei Parameterübergbe bei Funktionen Arrays, Strings und eigene Datentypen > nur als Referenz übergeben, aber das ist sicher nicht das, was Du meinst. > > Wenn es nur darum geht, aus einem Datenarray bestimmte Werte mitteils eines > zweiten Arrays, in dem die Indizies stehen, herauszupicken, kann man > sehr einfach folgendes machen: > <code> > const Set1[]=0,5,8,9,12,13,-1; > const Set2[]=1,2,5,13,14,15,16,-1; > int Data[18]; > ... > > i=0; > while Set1[i]!=-1 > { > tuwas(Data[Set1[i]]); > i=i+1; > } > ... > while Set2[i]!=-1 > { > tuwas(Data[Set2[i]]); > i=i+1; > } > </code> > Wenn Du die Daten aus einzelnen Variablen holen willst, > wird's etwas schwieriger. > Dazu mußt Du erstmal die Speiceradressen der Variablen kennen. > Wenn die Variablen nacheinander definiert sind, liegen sie schonmal > alle in einer Reihe im RAM. > Um die Startadresse herauszufinden, ist die einfachste Möglichkeit, > ein Bytearray mit zwei Elementen unmittelbar vor den eigentlichen Variablen > zu definieren und die Adresse mittels <code>mem.getMemAddrByte()</code> zu ermitteln. > Der Wert plus zwei ist das die erste Variable. > Mit diesem Wert kann man mittels VM-Codes oder auch den Lesefunktionen > des Moduls flash.c2 direkt zugreifen. > In wieweit es einfacher geht, kann ich derzeit noch nicht sagen, da ich das OS > noch nicht komplett analysieren konnte. > > Wenn alle logbaren Daten aber immer dasselbe Datenformat besitzen, also z.B. Integer, > dann wäre es das einfachste, wenn Du einfach ein Array definierst und wie im Beispiel > oben beschrieben darauf zugreifst. > Da man natürlich lieber mit Namen, als mit Indizies arbeitet, ist es sinnvoll, für > die Indizies auch Konstanten zu definieren: > <code> > const Dies=0; > const Das=1; > const Nochwas=2; > const hoppla=3; > usw. > </code> > Beim obigen Konstantenarray Set1[] oder Set2[] kann man dann genauso verfahren: > <code>const Set1[]= Dies, Das, 5, 8, hoppla;</code> > Die Einzelkonstanten für die Indizies müssen in der Reihenfolge natürlich oberhalb > des Konstantenarrays definiert sein. > > Ich hoffe, das hilft Dir etwas weiter. > > MfG André H.