Forum: Mikrocontroller und Digitale Elektronik Arduino Variabel Typ abfragen möglich? Boolean Variable über 1


von Thomas (Gast)


Lesenswert?

Hallo,

Folgender Bug / folgendes Problem:

Im Kopf des Codes definiere ich eine boolean Variable; Dies sollte 
logischerweise HIGH/LOW, TRUE/FALSE, 1/0 sein. Dies funktioniert soweit 
gut, wenn ich die Variable gezielt toggle. Bei einer for-Schleife, die 
absolut nichts mit dieser Variable macht, wird die boolean Variable beim 
letzten Durchlauf der for-schleife auf 211 gesetzt. Wie kann das sein 
und wieso?! Theoretisch doch gar nicht möglich? Ich weiss, dass eine 
boolean Variable 1 Byte beansprucht, nach mir sollte die aber trotzdem 
nicht so gesetzt werden können... Anyway, hier noch der Code in dem das 
Mysteriöse geschieht:

for(i=0;i<sizeof(sequence2x)/4;i++){
          xdiffs2[i] = sequence2x[i+1] - sequence2x[i];
          ydiffs2[i] = sequence2y[i] - sequence2y[i+1];
          Serial.println(dir);
}

"dir" ist meine boolean Variable.
Die Arrays haben jeweils 11 Werte a 4 Byte (long)

Jemand schonmal solche Probleme gehabt?

von Thomas (Gast)


Lesenswert?

Thomas schrieb:
> Serial.println(dir);

Print out:

0
0
0
0
0
0
0
0
0
0
211

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thomas schrieb:
> Jemand schonmal solche Probleme gehabt?
Ja, wenn ein amoklaufender Pointer/Index eines Arrays, das im Speicher 
davor liegt, Werte überschrieben hat.

Zeig doch mal das gesamte Programm...

: Bearbeitet durch Moderator
von Stefan K. (stefan64)


Lesenswert?

Das Problem liegt ausserhalb des gezeigten Codes.

Wie sind definiert:
xdiffs2, sequence2x, ydiffs2, i

Gruß, Stefan

von g457 (Gast)


Lesenswert?

> [..] beim letzten Durchlauf der for-schleife auf 211 gesetzt. Wie kann
> das sein und wieso?! Theoretisch doch gar nicht möglich?

Du schreibst höchstwahrscheinlich über das Ende von xdiffs2 oder ydiffs2 
raus.

> Die Arrays haben jeweils 11 Werte a 4 Byte (long)

Ich vermute Du beziehst Dich damit auf xdiffs2 und ydiffs2. Was genau 
ist sequence2x?

von Thomas (Gast)


Lesenswert?

g457 schrieb:
> Du schreibst höchstwahrscheinlich über das Ende von xdiffs2 oder ydiffs2
> raus.

Ayy, da hab ich doch glatt die Grösse von xdiffs2 & ydiffs2 auf "[10]" 
gehabt, danke, fixed!

g457 schrieb:
> Was genau
> ist sequence2x?

[11]

Stefan K. schrieb:
> Wie sind definiert:
> xdiffs2, sequence2x, ydiffs2, i

float xdiffs2[11] = {};
float ydiffs2[11] = {};
unsigned long sequence2x[11] = {0,2000000,....meine Werte};
unsigned long i = 0;

von Thomas (Gast)


Lesenswert?

Lothar M. schrieb:
> Zeig doch mal das gesamte Programm...

Nee ich kopier hier keine 2371 Zeilen rein

von Stefan K. (stefan64)


Lesenswert?

Bei i = 11 liefert diese Zeile kein definiertes Ergebnis mehr:

  ydiffs2[i] = sequence2y[i] - sequence2y[i+1];

Gruß, Stefan

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thomas schrieb:
> Nee ich kopier hier keine 2371 Zeilen rein
Du kannst einfach diese Datei anhängen, wie sie ist...

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.