Schleife für Register

#3314986
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.
#3316513
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.
Gast #3316532
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.
Persönliche Seite #3323493
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren