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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Thomas (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> Serial.println(dir);

Print out:

0
0
0
0
0
0
0
0
0
0
211

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Das Problem liegt ausserhalb des gezeigten Codes.

Wie sind definiert:
xdiffs2, sequence2x, ydiffs2, i

Gruß, Stefan

von g457 (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Lothar M. schrieb:
> Zeig doch mal das gesamte Programm...

Nee ich kopier hier keine 2371 Zeilen rein

von Stefan K. (stefan64)


Bewertung
0 lesenswert
nicht lesenswert
Bei i = 11 liefert diese Zeile kein definiertes Ergebnis mehr:

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

Gruß, Stefan

von Lothar M. (lkmiller) (Moderator) Benutzerseite


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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.