Forum: Compiler & IDEs Array Konstante WINAVR


von Bastel F. (bastelfix)


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

von psavr (Gast)


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

von Bastel F. (bastelfix)


Lesenswert?

Genauso ist das definiert.

Ich glaube auch nicht, daß es am Code liegt, da es ja mit der anderen 
Schreibweise funktioniert.

Vielen Dank für den Denkanstoß.

Viele Grüße
Bastelfix

von Stefan (Gast)


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

von Stefan (Gast)


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...)

von Bastel F. (bastelfix)


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.

von psavr (Gast)


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

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.