Forum: Mikrocontroller und Digitale Elektronik Lookuptabelle mit Integer Array


von Matthias (Gast)


Lesenswert?

Hallo

Möchte eine Lookup-Tabelle verwenden.
Meine Deklaration sieht wie folgt aus:

uint16_t ana_value[] = {3258, 3232, ...., 122};

Leider sind die Initialwerte bei Laufzeit nicht richtig.
Ich verwende ein ATmega8 und AVR Studio 4.13.
Ich möchte das Array nicht mit einer Schleife während dem Ablauf des 
Programms initialisieren.

Hat jemand eine Idee?

Gruss & Dank Matthias

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Leider sind die Initialwerte bei Laufzeit nicht richtig.

Wie groß ist die Tabelle?
Wie sehen die Werte denn aus?
Womit hast Du das festgestellt?
Mal im Debugger nachgesehen?

Hast Du vor, die Werte zur Laufzeit zu verändern? Wenn nein, dann gehört 
die Tabelle ins Flash-ROM und nicht ins knappe RAM.

von Matthias (Gast)


Lesenswert?

Danke für die Antwort.

Die Tabelle hat 360 16-Bit Integer. Diese Werte will ich nie ändern zur 
Laufzeit. Die Werte sind zufällige Werte.
Wenn ich einzelne Elemente zur Laufzeit überschreibe/initialisiere, dann 
stimmen diese dann.

-> "uint16_t ana_value[] = {3258, 3232, ...., 122};" klappt nicht.

von I_ H. (i_h)


Lesenswert?

Denk dran, dass die Tabelle allein schon 640 Byte Speicher braucht.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Initialisierung sollte korrekt funktionieren, das klingt fast nach 
einem Compilerfehler.

Allerdings sind das 720 Bytes RAM, und der Mega8 hat nur 1024. 
Möglicherweise ist in Deinem Linkerskript die Sektion für initialisierte 
Variablen zu klein?

von Matthias (Gast)


Lesenswert?

Ich hab nicht nur eine solche Tabelle, sondern gleich 2 Stück davon :-D
Das RAM ist zu 106.5% Full

Dies Erklärt einiges. Danke Für eure Hilfe.

von Stefan (Gast)


Lesenswert?

Solche Tabellen packst Du besser ins Flash. Der Zugriff geht dann nur 
noch über Library-Funktionen (pgm_read_word?), schau mal in der 
libc-Doku nach.

Gruß, Stefan

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.