Forum: Mikrocontroller und Digitale Elektronik For Schleife nur bestimmte Werte hochzählen lassen


von Christoph R. (nexor)


Lesenswert?

Hallo,

habe eine Software für einen Kabeltestet entwickelt. Soweit funktioniert 
diese auch. Aber nur wenn man eine 1 zu 1 Verbindung hat. Wenn man jezt 
Leitungen testen möchte die gewollt verdreht sind. Wie kann ich ihm 
sagen das er in der For-Schleife nicht von 1 bis 9 hoch zählen soll 
sondern z.b. erst 2 dann 5 dann 8 usw.

Schöne Grüße

Christoph

von Peter (Gast)


Lesenswert?

uint_8 x[] = {5,2,7,3,9,7,1,4};
for( uint_8 i = 0; i < sizeof(x) ++i ) {
   print("%d\n", x[i] );
}


aber ob die das was weiterhilft weiss ich nicht, du hast ja nicht mal 
die Programmiersprache verraten.

von R. F. (rfr)


Lesenswert?

Verpacke die zu verwendenden Werte in einem Array und schiebe den Index 
linear weiter.

Gruss

Robert

von Oliver (Gast)


Lesenswert?

Ganz einfach,
1
for i in 2 5 8

...wenn deine Programmiersprache diese Art der for-Schleife unterstützt. 
Du hast ja nicht verraten, welche Sprache du gerade verwendest.

Ansonsten heisst das Zauberword Array.

Oliver

von Christoph R. (nexor)


Lesenswert?

Ah sorry. ^^ Natürlich C. Ich programmiere im AVR Studio 4. AVR GCC. 
Controller ist ein AT90CAN128. Also vorher in einer Variablen die Werte 
hineinschreiben und in der Bedinung wieder aufrufen.

von Christoph R. (nexor)


Lesenswert?

Ok vielen Dank schonmal. Habe ein Script über Arrays gefunden. Ich denke 
damit werde ich es hinbekommen.

von Christoph R. (nexor)


Lesenswert?

Ich bin jetzt folgendermaßen vorgegangen:

...
int x[9]={9,2,3,4,5,6,7,8,1};
int i;
...
for(i=0; i<10; ++i){long_delay(5); i[z]; PORTC=i}

Er zählt von 1 bis 9 hoch. Bleibt bei 9 stehen. Wenn ich in die Klammer 
"i<sizeof(x)" schreibe zählt er bis 15.

von Karl H. (kbuchegg)


Lesenswert?

Christoph R. schrieb:
> Ich bin jetzt folgendermaßen vorgegangen:
>
> ...
> int x[9]={9,2,3,4,5,6,7,8,1};
> int i;
> ...
> for(i=0; i<10; ++i){long_delay(5); i[z]; PORTC=i}

Welche Werte nimmt denn i an?

  0 1 2 3 4 5 6 7 8 9


Zähl nach. Das sind 10 Werte, nicht 9

Dein Array hat aber nur 9 Elemente!

Merkregel
Bei einer Arraydefinition gibt man die Anzahl der Elemente an. Der 
höchste zulässige Index ist immer um 1 kleiner als diese Zahl

Ein Array

   int x[9]

besteht aus

  x[0]  x[1]  x[2]  x[3]  x[4]  x[5]  x[6]  x[7]  x[8]

zähl wieder nach. Das sind 9 Array-Elemente wie von der Definition 
gefordert. Beachte auch: Das letzte Array Element hat den Index 8!


>
> Er zählt von 1 bis 9 hoch. Bleibt bei 9 stehen. Wenn ich in die Klammer
> "i<sizeof(x)" schreibe zählt er bis 15.

kein Wunder. sizeof liefert die Größe in Bytes und nicht in int 
Einheiten

die Anzahl der Elemente in einem Array kann man so bestimmen

sizeof(x)/sizeof(x[0])

also: Gesamtgröße in Bytes / Größe eines Elementes in Bytes

von Karl H. (kbuchegg)


Lesenswert?

> Habe ein Script über Arrays gefunden

Besser wäre es, wenn du dir ein richtiges C-Buch kaufst und 
durcharbeitest.

von Frank B. (f-baer)


Lesenswert?

Christoph R. schrieb:
> Wie kann ich ihm
> sagen das er in der For-Schleife nicht von 1 bis 9 hoch zählen soll
> sondern z.b. erst 2 dann 5 dann 8 usw.
>
> Schöne Grüße
>
> Christoph

Ganz einfach: for(i=2 ; i<ENDE ; i+=3) {}


> int x[9]={9,2,3,4,5,6,7,8,1};
> int i;
> ...
> for(i=0; i<10; ++i){long_delay(5); i[z]; PORTC=i}

Der Code macht nicht nur keinen Sinn, er ist auch noch ziemlich 
bescheuert.

von Christoph R. (nexor)


Lesenswert?

Ja so zählt er immer um 3 hoch. Er soll aber flexibel sein. So dass ich 
ihm vorher sage zähle so und so hoch. Die For Schleifen sollen 
unverändert bleiben.

von Peter (Gast)


Lesenswert?

Frank Bär schrieb:
>> for(i=0; i<10; ++i){long_delay(5); i[z]; PORTC=i}
>
> Der Code macht nicht nur keinen Sinn, er ist auch noch ziemlich
> bescheuert.

ja das i[z]; sieht schon ein wenig merkwürdig aus.

von Christoph R. (nexor)


Lesenswert?

Habe da nur etwas rumgespielt. Es funktioniert ja auch nicht. Deswegen 
schreibe ich ja hier. ^^

von Frank B. (f-baer)


Lesenswert?

Christoph R. schrieb:
> Ja so zählt er immer um 3 hoch. Er soll aber flexibel sein. So dass ich
> ihm vorher sage zähle so und so hoch. Die For Schleifen sollen
> unverändert bleiben.

Er macht genau das, was dein Minimalbeispiel verlangte.

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.