Hallo, ich möchte Daten fest mit dem C-Programm im Flash eines Mega8 speichern. Diese Daten (Bitmuster für ein Display) soll das Programm dann zur Laufzeit aus dem Speicher lesen. In Basic (VC20/C64) gab es imho mal so eine Art "Data" und "Read" Befehl. Es handelt sich um ca 2KB an Bitmustern, welche ich Byteweise auslesen und verarbeiten möchte. Wie löse ich so etwas in C ? Gruß Günter
Das kommt auf deinen Compiler an! Suche mal nach _flash oder so.
Ist es sinnvoll die Daten in Feldvariablen zu speichern ?
Nein, denn dazu brauchst Du RAM. Und dein µC hat bloß 1kB davon, deshalb passen Deine Daten da gar nicht rein. ".db" (oder so) ist dein Freund. Gruß Jonathan
> Ist es sinnvoll die Daten in Feldvariablen zu speichern ? > Nein, denn dazu brauchst Du RAM. Und dein µC hat bloß 1kB davon, deshalb > passen Deine Daten da gar nicht rein. ".db" (oder so) ist dein Freund. > > Wie löse ich so etwas in C ? Array anlegen und dieses ins Flash verbannen passt wunderbar. AVR-GCC-Tutorial Im Abschnitt über "Flash" nachlesen.
Gast
#2339149
Jonathan Strobl schrieb: > ".db" (oder so) ist dein Freund. Da hätte er mehr Freunde würde er Assembler benutzen, in C ist's PROGMEM und <avr/pgmspace.h>
Kenne mich leider nicht mit Atmel uC aus, aber meist reicht es, das Array mit den Daten einfach als "const" zu deklarieren. Die Compiler/Linker sollten dann automatisch erkennen, dass die Daten in diesem Array nur gelesen werden und daher im Flash bleiben können. Auf Nummer sicher geht man mit den anderen, oben beschriebenen Methoden (Array einer Section zuweisen und im Linker Script definieren, dass diese Section im Flash ist). Aber wenns mit "const" alleine auch geht, kann man sich die Mühe ja sparen. ;-)
Danke für die Hinweise. Ich werde mich mit dem Flash-Abschnitt und Progmem auseinandersetzen. Gruß Günter
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.