mikrocontroller.net

Forum: Compiler & IDEs seltsames Verhalten eines Vektors


Autor: HansDampf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe einen Vektor

unsigned char time_buffer[18];

wenn ich ihn mit

while (j<12) time_buffer[j++]=1;

initialisieren will, stehen anschliessend falsche Werte drin (also keine 
1en).

Hingegen

time_buffer[0]=1;
time_buffer[1]=1;
time_buffer[2]=1;
time_buffer[3]=1;
time_buffer[4]=1;
time_buffer[5]=1;
time_buffer[6]=1;
time_buffer[7]=1;
time_buffer[8]=1;
time_buffer[9]=1;
time_buffer[10]=1;
time_buffer[11]=1;

funktioniert einwandfrei.

Weiss jemand, was da los sein kann?

Danke

Hans

Autor: Freizeitbastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde vor der Schleife
 j=0; 

schreiben. Der Rest sieht i. O. aus.

Autor: HansDampf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe ich schon. j ist deklariert als

unsigned char j=0;

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst ihn auch einfacher initialisieren.

memset(time_buffer,1,sizeof(time_buffer))

oder

memset(time_buffer,1,12);

Gruss Helmi

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann poste mal ein komplettes Beispiel und nicht nur ein paar 
Code-Bröckchen. Und tippe es nicht per Hand "aus dem Gedächtnis" ein, 
sondern füge den Code per Cut&Paste ein, oder poste gleich die ganze 
Datei als Anhang.

Autor: HansDampf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe die Lösung gefunden.

Wenn ich

unsigned char time_buffer[18];

global anlege und nicht in der main, geht alles wie es soll.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HansDampf wrote:

> ich habe die Lösung gefunden.

Nein, hast du nicht.  Solange du nicht weißt, warum das von dir
beobachtete Verhalten auftritt, doktorst du nur an den Symptomen
herum.

Vermutlich wird bei der lokalen Variablen der Optimizer feststellen,
dass du die initialisierten Werte gar nicht benutzt und das dann
gleich alles sein lassen, aber dann wäre es unlogisch, warum er es
in der Schleife wegoptimiert, bei entrollter Schleife jedoch nicht.

Autor: HansDampf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Solange du nicht weißt, warum das von dir
>beobachtete Verhalten auftritt, doktorst
>du nur an den Symptomen herum.

Das stimmt schon. Aber woran kann das liegen? Ich weise in main dem 
Vektor Werte zu, die ich für einen Funktionsaufruf (ausserhalb main 
natürlich)  benutze.

Ich dachte mir schon, dass der Compiler vermutlich was wegoptimiert.

Aber warum macht er das?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich weise in main dem Vektor Werte zu, die ich für einen
> Funktionsaufruf (ausserhalb main natürlich)  benutze.

Da wir weder sehen können, wo der "Vektor" deklariert ist, noch, wie 
die Funktion aufgerufen wird, geschweige denn, wie die Funktion auf 
den "Vektor" zugreift, kann ich hier nur Stefan zitieren:

Beitrag "Re: seltsames Verhalten eines Vektors"

Poste KOMPLETTEN Quellcode, keine zusammenhanglosen Schnipsel!

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.