lange Liste bzw. Tabelle

Gast #2110547
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
Gast #2110557
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. :-)
Gast #2110609
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren