Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Daten loggen Kategorie: Programmierung (von André H. - 22.07.2006 16:01)
Als Antwort auf Daten loggen von Leo - 18.07.2006 12:57
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0, OSOPT V3.1
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:

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;
}

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 mem.getMemAddrByte() 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:

const Dies=0;
const Das=1;
const Nochwas=2;
const hoppla=3;
usw.

Beim obigen Konstantenarray Set1[] oder Set2[] kann man dann genauso verfahren:
const Set1[]= Dies, Das, 5, 8, hoppla;
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.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: Daten loggen (von Leo - 26.07.2006 10:14)
    Re: Daten loggen (von André H. - 2.09.2006 16:34)
        Re: Daten loggen (von Leo - 28.09.2006 16:59)