Hallo!
Mittlerweile weiß ich, was der EEProm für ein Speicher ist. Dort kann
ich variablen erzeugen, oder Absolut addressierte Register permanent,
also auch nach Reset noch existent mit Daten beschreiben.
Was aber ist PROGMEM? Wo genau liegt der Unterschied?
Wann soll ich PROGMEM und wann EEPROM-Speicher nutzen?
Danke für kurze Hilfestellung
PROGMEM - also den Flash Speicher z.B. eines AVR - kannst du zur
Laufzeit nicht verändern, nur zur Kompilierzeit. Es eignet sich z.B. für
unveränderliche Texte oder Tabellen.
Das ist ja doof!
Dachte ich könnte während der Laufzeit ähnlich wie beim EEPROM die Werte
ändern. Schade. Naja konstante Werte/Größen/Strings kann man ja dann...
Der Vollständligkeit halber: Es gibt einen Weg, der aber bestimmte
Randbedingungen / Einschränkungen hat.
Ein Bootloader kann Flash Speicher beschreiben.
Wenn also dein eigentliches Programm in den Bootloaderbereich passt,
könntest du von dort aus z.B. den restlichen Flashbereich als permanente
Datenablage nutzen.
Timo P schrieb:> Das ist ja doof!
Nicht wirklich.
Wenn man mit allen Speichertypen das gleiche machen könnte, wäre es
reichlich sinnlos überhaupt unterschiedliche Speichertypen zu haben
naja, wenn man kurz vor dem RAM-ENDE steht, und mit der längeren
zugriffszeit von variablen in der Laufzeit leben kann, könnte man die
vars halt ins eeprom oder ins progmem auslagern, ohne einen anderen
Controller zu nutzen. Ich schließe mich also dem "ist ja doof" an :)
Problem ist, dass wir hier einen kleinen (Baugröße) Controller nutzen
müssen, der aber sehr viel speicher zur Verfügung stellt. Speicher für
code und RAM. Angenommen wir nutzen hier einen ATMEGA8, könnte man
seinen Bruder nehmen, der 32 statt 8 an speicher hat. Was tun, wenn dies
nicht ausreicht?
Hi
>Der Vollständligkeit halber: Es gibt einen Weg, der aber bestimmte>Randbedingungen / Einschränkungen hat.>Ein Bootloader kann Flash Speicher beschreiben.>Wenn also dein eigentliches Programm in den Bootloaderbereich passt,>könntest du von dort aus z.B. den restlichen Flashbereich als permanente>Datenablage nutzen.
Wenn die Bootlockbits unprogrammiert sind, gibt es keine Einschränkungen
für SPM/(E)LPM.
MfG Spess
Du bist sicher, daß du mehr als 32 k Flash brauchst?
Dann könnte man entweder auf noch größere AVR ausweichen
(mit mehr Beinchen dann halt), oder externes Flash anschließen.
"mehr Beinchen" ist untersagt! Wir müssen sehr klein bauen!
Der Funktionsumfang ist extrem! z.B. gibt es eine Umschaltmöglichkeit
von Master-Slave, wobei sich die Funktion komplett ändert. Diese
Umschaltung soll aber nicht beim flashen oder durch Auswahl der
Hardware, sondern duch den User WÄHREND der Laufzeit vollzogen werden
können.
Somit haben wir den Anspruch z.B. auf einen ATMEGA128, ABER: wir können
nur Baugrößen um den ATMEGA8 nutzen :(
Ideen?
Anfänger schrieb:> naja, wenn man kurz vor dem RAM-ENDE steht, und mit der längeren> zugriffszeit von variablen in der Laufzeit leben kann, könnte man die> vars halt ins eeprom oder ins progmem auslagern, ohne einen anderen> Controller zu nutzen.
Und wenn dann dieses ebenfalls aufgebraucht ist?
> code und RAM. Angenommen wir nutzen hier einen ATMEGA8, könnte man> seinen Bruder nehmen, der 32 statt 8 an speicher hat.
BIst du sicher, dass du verstanden hast worum es hier überhaupt geht?
Ein Mega8 hat keine 8k SRAM.
> Was tun, wenn dies> nicht ausreicht?
Wie gesagt den nächst größeren nehmen.
Allenfalls kann man darüber diskutieren, wie sinnvoll die von Atmel
vorgegebenen Speichergrößen sind. Es ist ja schliesslich nicht
gottgegeben, dass ein Mega8 nur 1k SRAM haben darf. Atmel hätte dem ja
auch 2k spendieren können.
Anfänger schrieb:> Der Funktionsumfang ist extrem! z.B. gibt es eine Umschaltmöglichkeit> von Master-Slave, wobei sich die Funktion komplett ändert. Diese> Umschaltung soll aber nicht beim flashen oder durch Auswahl der> Hardware, sondern duch den User WÄHREND der Laufzeit vollzogen werden> können.
Und?
In den meisten Fällen besteht gerade bei Programmen von Leuten mit
weniger als ein paar Jahren Erfahrung ein nicht ganz unerhebliche
Möglichkeit, durch geschicktere Programmierung einiges an Platz
einzusparen. Irgendwann ist natürlich immer Schluss, aber ein paar Bytes
kann man meistens immer noch irgendwo rausholen.
Karl heinz Buchegger schrieb:> Allenfalls kann man darüber diskutieren, wie sinnvoll die von Atmel> vorgegebenen Speichergrößen sind. Es ist ja schliesslich nicht> gottgegeben, dass ein Mega8 nur 1k SRAM haben darf. Atmel hätte dem ja> auch 2k spendieren können.
Von dem 1KB Ram brauchte ich meistens einen kleinen Bruchteil. Beim
letzen Profekt brauchte ich ca. 140B. Wenn man mehr braucht sollte man
halt einen größeren Chip einplanen. Und wenn der zu groß ist eine
kleinere Bauform wählen. Vielleicht sollte man auch gar keinen AVR
sondern etwas im 16-32bit Bereich nutzen - die haben meistens mehr Ram.