www.mikrocontroller.net

Forum: GCC seltsames Verhalten eines Vektors

Autor: HansDampf (Gast)
Datum: 02.07.2008 10:22

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: 02.07.2008 10:26

Ich würde vor der Schleife
 j=0; 

schreiben. Der Rest sieht i. O. aus.
Autor: HansDampf (Gast)
Datum: 02.07.2008 10:36

Habe ich schon. j ist deklariert als

unsigned char j=0;
Autor: Helmut Lenzen (helmi1)
Datum: 02.07.2008 10:41

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: 02.07.2008 10:50

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: 02.07.2008 10:53

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: 02.07.2008 11:58

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: 02.07.2008 13:49

>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 t. Firefly (rufus) (Moderator)
Datum: 02.07.2008 13:57

> 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 "seltsames Verhalten eines Vektors"

Poste KOMPLETTEN Quellcode, keine zusammenhanglosen Schnipsel!

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net