Array Konstante WINAVR

OP #455630
Lesenswert?

Hallo zusammen,

ich habe gerade folgendes versucht:

U08 CMD[] = {0x10,0x10,0x20,0x10,0x00,0x15};

leider wird dabei nur CMD[5] richtig gesetzt - im Rest stehen 
"Zufallszahlen".

So gehts:

U08 CMD[6];

CMD[0] = 0x10;
CMD[1] = 0x10;
....


Warum geht das obere so nicht?
Gibt es da einen Compilerschalter, den ich vergessen habe?

Viele Grüße
Bastelfix
Gast #455641
Lesenswert?

Also bei mir funktioniert auch die erste Methode, (verwende aber statt 
U08 unsigned char. Ich nehme an, das hast U08 irgendwo definiert, mit 
z.B.

#define U08 unsigned char

Falls Du nicht weiterkommst, müsstes Du schon den kompletten Code 
posten, der Fehler muss woanders liegen!

MfG Peter
Gast #455777
Lesenswert?

Hallo,
oder hast du schon so viele Arrays definiert das dein RAM voll ist? 
Hatte ich kürzlich, ein paar Tabellen mit Sinus und Cosinus, dann nach 
ein paar Zeichen für ein Grafikdisplay und schon war das RAM dem Mega8 
voll. Win AVR hat nicht expliziet diesen Fehler angemeckert. Dann habe 
ich die Tabellen etwas komprimiert, so das alles passt und die 
vermeindlichen Fehlinitialisierungen waren weg.

mfg
Stefan
Gast #455780
Lesenswert?

Normalerweise benutzt man dafür kein #define sondern ein typedef

typedef unsigned char U08;

http://www.num.math.uni-goettingen.de/Dokumentationen/C/Einfuehrung/komplex.html

Wie konntrollierst du den Inhalt des Arrays? Vielleicht gibt es dort 
Probleme? Gibt es andere Variablen (insbesondere Arrays) vor CMD, die 
ggf. über Arraygrenzen hinaus beschrieben werden und Teile von CMD 
überschreiben? Hast du bereits das Assemblerlisting (eventuell sogar den 
Flashinhalt) kontrolliert, ob die Daten dort noch korrekt eingetragen 
sind und ggf. beim Umkopieren vom Flash zum SRAM kaputtgehen? Mit einem 
prägnanten Inhalt von CMD müsste man die Werte leicht finden 
(0x10,0x34,0x56...)
OP #455805
Lesenswert?

>Wie konntrollierst du den Inhalt des Arrays?

Direkt per serieller Schnittstelle über eine selbstgebautes 
Terminalprogram,
welches ja auch bei Version 2 (siehe oberstes Posting) funktioniert.

>Vielleicht gibt es dort Probleme?
Glaub ich nicht, da es eben anders funktioniert.

>Gibt es andere Variablen (insbesondere Arrays) vor CMD, die
>ggf. über Arraygrenzen hinaus beschrieben werden und Teile von CMD
>überschreiben?

Nein.

>Hast du bereits das Assemblerlisting (eventuell sogar den
>Flashinhalt) kontrolliert, ob die Daten dort noch korrekt eingetragen
>sind und ggf. beim Umkopieren vom Flash zum SRAM kaputtgehen?

Flashinhalt nicht aber per AVR-Studio die hex-Datei deassembliert. Genau 
hier liegt das Problem -> es wird bei mir mit der 1. oben genannten 
Schreibweise nicht richtig compiliert (mit der 2. schon).

Ist übrigends per typedef deklariert ;). Was aber auch nichts ausmacht,
ich habe es ja auch als unsigned char cmd[6] probiert -> gleiches 
Phänomen.

Achso, habe 64kB RAM und davon werden gerade mal 12k benutzt. Sollte 
also passen.

Wie auch immer, anders geht es ja. Sieht halt nur nicht so schick aus.
Gast #455819
Lesenswert?

Auch die erste Deklaration ist korrekt und funktioniert bei mir 
fehlerfrei!

Glaube mir, der Hund lieg woanderst begraben! Aber solange Du nicht den 
ganzen Code bw. das Projekt postest, kann ich Dir nicht weiterhelfen, 
ich kann Dir bloss sagen, suche den Fehler an anderer Stelle!

Gibt es Warnings beim Compilieren? Welche Compiler, IDE, Version, CPU 
etc... verwendest Du?

Ich verwende die aktuelle WinAVR_20060421 und AvrStudio 4.12 SP-4

Gruss Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren