Forum: Compiler & IDEs GCC: Daten in Programmdatei integrieren


von Christopher C. (Gast)


Lesenswert?

Hallo,

ich müsste ein paar Daten auf meinem ATMega8 speichern. Die einfachste 
Methode wäre wahrscheinlich den EEPROM zu benutzen, allerdings ist der 
Speicher zu klein. Ich habe herausgefunden, dass ich die Daten auch 
einfach in den Flash also in den Programmspeicher schreiben könnte. Ich 
weiss allerdings nicht wie man das am besten anstellt und dann auch die 
Speicheradresse dieser Daten bekommt. Im Internet finde ich nur wie man 
den Flash zur Laufzeit beschreiben könnte, also mit einem Bootloader. 
Das nützt mir aber nicht viel. Von Assembler kenne ich die .Data 
section. Das müsste es doch für C auch geben oder? Man müsste dem 
Compiler einfach sagen können, welche dateien er anhängen möchte.

Vielen Dank für Eure Hilfe.

mfg

von (prx) A. K. (prx)


Lesenswert?

Wenn es im Binärdaten geht, dann musst du die Daten in ein Array 
umwandeln, das per PROGMEM ins Flash legen und mit pgm_read_xxx darauf 
zugreifen.

von Christopher C. (Gast)


Lesenswert?

Erstmal vielen Dank für die schnelle Antwort.
Das kommt dann praktisch in eine Header Datei, oder? Geht das nicht 
bequemer, wenn ich die Daten als rohe Binärdateien habe?
Gut, ein Programm wäre schnell geschrieben, dass mir die Arbeit abnimmt.

von Uwe (de0508)


Lesenswert?

Christopher ich denke dein Ansatz ist der falsche, keine Aussage welche 
Daten das sind.

Read Only
Read/Write
in welchem Zeitraster wird gelesn, geschrieben ?
wie viele Gbyte, MByte oder kByte beötigt werden.

Es gibt auch grössere Atmel mit mehr Speicher.

Vielleicht reicht Dir der Hinweis auf das Attribut PROGMEM.
1
const char pgmText[] PROGMEM = "what's up?";

von Christopher C. (Gast)


Lesenswert?

Die Daten müssen nur gelesen werden. Ich benutzte ich eine PWM um einen 
Motor zu regulieren. Die Daten sagen wie der Motor zu regeln ist.
Ich weiss zwar nicht genau wie groß die Daten werden, aber der EEPROM 
mit seinen 512 Byte wird da nicht ausreichen. Selbst wenn ich meinen 
ATMega32 benutzten würde, reicht es wahrscheinlich nicht aus. Der Flash 
dagegen ist ja sehr viel größer, mit dem lässt sich etwas anfangen. Die 
Geschwindigkeit müsste nach meiner Einschätzung völlig reichen.

von Uwe (de0508)


Lesenswert?

Ok,

sonst fällt mir noch ein Atmel µP mit externen XRAM ein, z.B. ein 
atMega162.
Die Daten könnten dabei vorher auch von einem ext. langsammen Flash ins 
XRAM geladen werden. Danach ist die Zugriffszeit minimal.

von (prx) A. K. (prx)


Lesenswert?

Christopher C. schrieb:

> Geht das nicht
> bequemer, wenn ich die Daten als rohe Binärdateien habe?

Nein.

> Gut, ein Programm wäre schnell geschrieben, dass mir die Arbeit abnimmt.

Eben.

von Oliver (Gast)


Lesenswert?

Christopher C. schrieb:
> Die Daten müssen nur gelesen werden.

A. K. schrieb:
> das per PROGMEM ins Flash legen und mit pgm_read_xxx darauf
> zugreifen.

So gehts.

Oliver

von Peter II (Gast)


Lesenswert?

A. K. schrieb:
>> Geht das nicht
>> bequemer, wenn ich die Daten als rohe Binärdateien habe?
>
> Nein.

doch geht. Wurde hier auch schon mehrfach besprochen. Man muss sie als 
Obj file umwandeln und dann einfach dem linker mitgeben.

von (prx) A. K. (prx)


Lesenswert?

Meine Antwort bezog sich auf die Frage, ob es bequemer geht. Wenn 
deine Alternative bequemer ist, dann scheib die Sequenz doch hier rein.

von Peter II (Gast)


Lesenswert?


von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Peter II schrieb:
> 
http://www.linuxjournal.com/content/embedding-file-executable-aka-hello-world-version-5967

Ist aber nur die halbe Miete. Man will ja auch angeben, in welcher 
Section das Zug landen soll.

von Peter II (Gast)


Lesenswert?

Johann L. schrieb:
> Ist aber nur die halbe Miete. Man will ja auch angeben, in welcher
> Section das Zug landen soll.

muss man das? Programmcode landet doch standardmäßig im Flash, und das 
obj wird als Programmcode gerwerted,

Aber zur not kann man ja immer noch den parameter angeben.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Peter II schrieb:
> Johann L. schrieb:
>> Ist aber nur die halbe Miete. Man will ja auch angeben, in welcher
>> Section das Zug landen soll.
>
> muss man das? Programmcode landet doch standardmäßig im Flash, und das
> obj wird als Programmcode gewerted,

Werden die wie Orphans behandelt?

Wo isn das dokumentiert: "Orphans landen immer im Flash"?

von Stefan E. (sternst)


Lesenswert?


von Christopher C. (Gast)


Lesenswert?

Na dann vielen Dank für eure Hilfe!
Der letzte Vorschlag wäre auch noch eine Alternative. Muss ich mir noch 
genauer anschauen ;).

mfg

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.