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
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.
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.
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?"; |
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.
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.
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.
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
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.
Meine Antwort bezog sich auf die Frage, ob es bequemer geht. Wenn deine Alternative bequemer ist, dann scheib die Sequenz doch hier rein.
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.
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.
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"?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.