Forum: Mikrocontroller und Digitale Elektronik Array Initialiserung


von Ralf (Gast)


Lesenswert?

Hallo Leute,

Sorry für die triviale Frage aber ich habe ein Array mit festen Werten 
angelegt und möchte während dem Programm drauf zugreifen ... mein 
Atmega16 zeigt während dem Debuggen an, dass das Array mit 0x00en voll 
ist, obwohl ich es doch eigentlich mit Werten initialisiert habe ... 
auch test2 wird mit 0x00 geladen obwohl es eigentlich mit 0x03 geladen 
werden müsste.

Was mache ich falsch ?

const unsigned char test1[] = {
      0x01,0x02,0x03
      };


int main (void) {

  unsigned char test2;

  test2 = test[2];

}

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

test? test1? test2? sooo viele tests...

von Ralf (Gast)


Lesenswert?

Sorry, ein test zuviel ... dennoch gleiches Problem :)

const unsigned char array[] = {
      0x01,0x02,0x03
      };


int main (void) {

  unsigned char var;

  var = array[2];

}

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Das Problem mit dem Programm ist evtl., daß es gleichbedeutend ist mit
1
const unsigned char array[] = 
2
{
3
      0x01,0x02,0x03
4
};
5
6
int main (void) 
7
{
8
}

und ein Compiler es daher dahingehend optimieren darf, als würde die 
Quelle auch so aussehen.

von Ralf (Gast)


Lesenswert?

Hi,

ja das hatte ich auch zuerst gedacht, aber ich habe die Optimierung 
ausgestellt ... also auf -O0 ...

wenn ich das Array nicht als Konstante deklariere sondern mit in die 
MainFunktion nehme, dann geht es ???
Liegt es vielleicht an irgendwelchen verkurbelten 
Compilereinstellungen??

von Stefan E. (sternst)


Lesenswert?

Wie wird die HEX-Datei erzeugt, mit der du den Chip programmierst?

von Ralf (Gast)


Lesenswert?

Also es hat sich erledigt, ich habe ausversehen 2 andere Bufferarrays zu 
groß dimensioniert und so meine 1k SRAM gesprengt.

Aber warum bekomme ich keine Fehlermeldung oder zumindest eine Warning 
... die Chipinformation hat doch der Compiler, demnach sollte er doch 
auch über die Speicherressourcen bescheid wissen, oder ??

von Zwiebackfräser (Gast)


Lesenswert?

Hallo Ralf,

test2 = test[2];

müsste eigentlich

test2 = test1[2];

heissen oder nur ein Schreibfehler ?

Gruß
Jörg

von Karl H. (kbuchegg)


Lesenswert?

Wenn du endlich einmal dein richtiges Programm zeigen würdest, könnte 
man dir helfen.

Aber wenn sich hinten nach raus stellt, dass auch du der Fraktion
"Ich präsentiere unvollständige Daten und beschäftige damit mehrere 
Leute damit, nach Fehlern in Code zu suchen, den ich so gar nicht 
geschrieben habe"
angehörst, sinkt die Bereitschaft sich noch weiter Gedanken um dein 
Problem zu machen ganz gewaltig.

von Ralf (Gast)


Lesenswert?

@Zwiebackfräser
hatte ich bereits oben korrigiert, war ein Schreibfehler :)

@Karl heinz Buchegger
warum so genervt, der Fehler hat sich doch gefunden.
Natürlich hätte ich meinen kompletten Code posten können aber der ist 
auf sieben .c Files verteilt.
Und oben das war mein original Code den ich benutzt habe, mir ist nur 
ein kleiner Abschreibfehler passiert ... keine Ahnung warum ich die paar 
Zeilen nicht kopiert habe.

von Link zu (Gast)


Lesenswert?

Ralf schrieb:
> @Karl heinz Buchegger
> warum so genervt, der Fehler hat sich doch gefunden.
goto Grund1;

MininmalBeispiel1:
> Natürlich hätte ich meinen kompletten Code posten können aber der ist
> auf sieben .c Files verteilt.
Dann nimmt man ein Minimalbeispiel. Ja, Mühe darf man auch vom 
Fagesteller erwarten.

goto Ende;

Grund1:
> Und oben das war mein original Code den ich benutzt habe, mir ist nur
> ein kleiner Abschreibfehler passiert ... keine Ahnung warum ich die paar
> Zeilen nicht kopiert habe.
Nicht Abschreiben, sondern kopieren, ausnahmsweise ist das Fehler 
mitkopieren bei Cut'n'Paste erwünscht. Ansonsten beschäftigen wir uns 
mit der Suche nach deinen Abtippfehlern und nicht nach den eigentlichen 
Fehlern.

Damit du meinen Beitrag vollständig lesen kannst:
goto MininmalBeispiel1;

Ende:

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.