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
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.
Karl Heinz Buchegger schrieb: > Warum hast du 64 einzelne Variablen und kein Array? Weil der Code von "DAvE" erzeugt wurde.
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.
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.
>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.
Das Ganze war nur für ein Testprogramm und wird nicht weiter benötigt. Somit ist es egal, wieviele Ressourcen benötigt werden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.