Forum: Mikrocontroller und Digitale Elektronik Schleife für Register


von haemme (Gast)


Lesenswert?

Hallo zusammen,

ich habe in meinem C-Code 64 Variablen mit folgender Bezeichnung:

GPTA1_LTCCTR00.I
...
GPTA1_LTCCTR63.I

Ich möchte auf diese Variablen mit einer Schleife zugereifen. Gibt es da 
eine Möglichkeit?

Schöne Grüße

von Karl H. (kbuchegg)


Lesenswert?

haemme schrieb:
> Hallo zusammen,
>
> ich habe in meinem C-Code 64 Variablen mit folgender Bezeichnung:
>
> GPTA1_LTCCTR00.I
> ...
> GPTA1_LTCCTR63.I
>
> Ich möchte auf diese Variablen mit einer Schleife zugereifen. Gibt es da
> eine Möglichkeit?

Nein.
Warum hast du 64 einzelne Variablen und kein Array?
Genau dafür ist ein Array gedacht: 64 Variablen die alle denselben Namen 
tragen und mit einer Nummer (die auch berechnet werden kann) 
unterschieden werden.

von haemme (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Warum hast du 64 einzelne Variablen und kein Array?

Weil der Code von "DAvE" erzeugt wurde.

von haemme (Gast)


Lesenswert?

Aber Danke für die Antwort :-)

von Der (Gast)


Lesenswert?

Du kannst ein Array von 64 Pointern anlegen. Jeder Pointer zeigt auf 
eine Variable. Dieses Array kannst du dann mit einer Schleife deiner 
Wahl durchgehen.

von haemme (Gast)


Lesenswert?

Danke für den Tipp - Hab es so gelöst.

von Peter D. (peda)


Lesenswert?

haemme schrieb:
> Danke für den Tipp - Hab es so gelöst.

Echt?

Na dann guck mal ins Listing, was für ein Wust an Code dafür erzeugt 
werden muß.
Und der RAM-Verbrauch ist auch nicht klein, der Laufzeitoverhead 
sowieso.

Ich hatte den Tipp als Scherz verstanden.

Sinvoller wäre zu ergründen, warum "DAvE" sone verrückten Sachen macht. 
Oder es gleich als Array in C zu schreiben.

von Matthias L. (Gast)


Lesenswert?

>Na dann guck mal ins Listing, was für ein Wust an Code dafür erzeugt
>werden muß.
>Und der RAM-Verbrauch ist auch nicht klein, der Laufzeitoverhead
>sowieso.

Na und? Wozu haben wir sonst POWER-PCs so was? IRgendwie muss doch die 
Rechenleistung verbraten werden...

Ach ja, die Zählvariable für die for-Schleife ist natürlich ein double 
real.

von haemme (Gast)


Lesenswert?

Das Ganze war nur für ein Testprogramm und wird nicht weiter benötigt. 
Somit ist es egal, wieviele Ressourcen benötigt werden.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Offenbar handelt es sich um SFRs eines Infoneon TriCore, die nicht 
direkt aufeinander folgen.  Eine Möglichkeit ist das bereits genannte 
Zeiger-Array mit uint32_t volatile*.

Zweite Möglichkeit ist Nachbilden der Local Timer Cell des GPTA als 
Struktur und casten der Adresse auf einen entsprechenden 
Structarray-Zeiger.  In dem Fall würde der Zugriff etwa so aussehen
1
typedef
2
{
3
    ...
4
    LTCCTR_t ctr;
5
    ...
6
} LTC_t;
7
8
void foo (void)
9
{
10
   LTC_t volatile *ltc = (LTC_t volatile*) & LTC00_erstes_Element;
11
12
   for (int i = 0; i < 64)
13
   {
14
       ltc[i].ctr.I = 0;
15
   }
16
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.