Forum: Compiler & IDEs lange Liste bzw. Tabelle


von mario (Gast)


Lesenswert?

hallo ich möchte eine Tabelle mit 365 Tagen jeweils einem int Wert in C 
schreiben.

mit
unsigned int A[365];

oben nach den #defines  wird der RAM überfüllt

das hab ich dazu gefunden
http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_flashstrings

versteh ich nicht aber ziemlich nix

und das:
http://www.roboternetz.de/community/showthread.php?51536-PROGMEM

kann ich das auch irgendwie für int statt char umbauen?

wie speichert man am besten eine große Tabelle voll mit festen Werten?

vielen dank
mario

von Floh (Gast)


Lesenswert?

mario schrieb:
> wie speichert man am besten eine große Tabelle voll mit festen Werten?

Wie groß sind diese Daten? Wenn 8 Bit reichen, kannst du char oder 
besser unsigned / signed char nehmen (um zu verduetlichen, dass es keine 
Zeichen sind).

So würde dein Speicherbedarf halbiert, du brauchst nur noch 365 Byte RAM 
für die Tabelle.

Notfalls kannste dir noch das EEPROM anschauen. :-)

von mario (Gast)


Lesenswert?

4-stellige zahlen sind das


ah ja:

int entspricht 2byte
char entspricht 1byte

1byte entsprechen 8bit bei attiny
?

toll super tipp! danke

365 bytes im RAM, sind immernoch zu viel.

zur Not würde ich mir auch einen größeren controller holen, doch sehr 
ungern.

die 365 Werte werden nicht verändert, sind also Konstanten! Was hat der 
Ram fürn Vorteil?
Das speicher ich doch besser im Flash, wo ich viel Platz habe ... ?


mit dieser Tabelle hier:

//...
#define blabla bla

unsigned int tag;
unsigned char A[365];
//...

int main (void)
{
//...
A[1]=5130;
A[2]=5325;
//...
A[365]=9864;
//...
}


kann ich ja z.B. so

if (a[tag] >= 5302)
{
// mach was
}


ganz einfach auf die Tabelle zugreifen und Werte vergleichen.


aber das ist garkeine echte Tabelle mehr, oder? da kann ich garnicht so 
einfach drin nachgucken, oder?

#define bla bla
const char a1[] PROGMEM = "9833";
const char a2[] PROGMEM = "1425";
const char a3[] PROGMEM = "5894";
const char a4[] PROGMEM = "6500";
//...
const char a365[] PROGMEM = "2140";


danke!
mario

von Floh (Gast)


Lesenswert?

mario schrieb:
> die 365 Werte werden nicht verändert, sind also Konstanten!

Das hast du vorher mit keinem Wort erwähnt.
Dann eignet sich dafür direkt eine Tabelle im Programmcode, also 
PROGMEM.
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29
:-)

von mario (Gast)


Lesenswert?

ah ups merci

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.