www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Array Initialiserung


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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];

}

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
test? test1? test2? sooo viele tests...

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, ein test zuviel ... dennoch gleiches Problem :)

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


int main (void) {

  unsigned char var;

  var = array[2];

}

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem mit dem Programm ist evtl., daß es gleichbedeutend ist mit
const unsigned char array[] = 
{
      0x01,0x02,0x03
};

int main (void) 
{
}

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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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??

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wird die HEX-Datei erzeugt, mit der du den Chip programmierst?

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ??

Autor: Zwiebackfräser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ralf,

test2 = test[2];

müsste eigentlich

test2 = test1[2];

heissen oder nur ein Schreibfehler ?

Gruß
Jörg

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Link zu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:

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.