mikrocontroller.net

Forum: Compiler & IDEs lange Liste bzw. Tabelle


Autor: mario (Gast)
Datum:

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

versteh ich nicht aber ziemlich nix

und das:
http://www.roboternetz.de/community/showthread.php...

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

Autor: Floh (Gast)
Datum:

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

Autor: mario (Gast)
Datum:

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

Autor: Floh (Gast)
Datum:

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

Autor: mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah ups merci

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.