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...
Natürlich kann man progmem prinzipiell auch zur Laufzeit verändern. Aber nur recht umständlich seitenweise.
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?
Hi
>Du bist sicher, daß du mehr als 32 k Flash brauchst?
Man will ja auch für die (fernere) Zukunft gewappnet sein.
MfG Spess
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.
Bis man 32k Flash sinnvoll vollprogrammiert hat, hat man schon einige Zeit zu tun.
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.
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.