PROGMEM Zeitdauer Zugriff auf Flash

Gast #3467512
Lesenswert?

Hallo,

mit PROGMEM ist ja der Zugriff auf Konstanten im Flash möglich wie im 
Tutorial beschrieben:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29

Nun stellt sich für mich die Frage, wie schnell der Zugriff ist. Ist die 
Zugriffszeit vergleichbar mit dem Zugriff im RAM? Im Tutorial habe ich 
dazu leider nichts gefunden.

Ich weiß, dass der Zugriff auf EEPROM Daten etwas Zeit benötigt, daher 
meine Frage, ob dies im Flash auch der Fall ist.

Danke.
#3467534
Lesenswert?

Hi,

eine LPM ("load program memory") Instruktion dauert z.B. beim ATTiny88 3 
Clockzyklen. Sowas steht in seinem Datenblatt in der "Instruction Set 
Summary"... Wieviele solche Instruktionen dann für Deine dort abgelegten 
Daten nötig sind, hängt sicherlich von der Datenmenge ab. ;)

Schreiben (solltest Du das wollen) dauert länger - da hilft vielleicht 
die Appnote AVR109, "Self Programming", weiter.

HTH & Besten Gruß,
  Thiemo
Gast #3467540
Lesenswert?

Hallo,

es geht mir wirklich nur um das Lesen auf einem Atmega8
Ich habe einen konstanten Array  mit 200 Werten mit dem Datentyp int32_t 
(Tabelle).
In einem Interrupt soll dann aus dieser Tabelle mit 200 Werten immer nur 
einer gelesen werden, aber eben zeitkritisch. Bei 3 Taktzyklen ist das 
in Ordnung.
Gast #3468070
Lesenswert?

Rolf Magnus schrieb:

> Da du einen Vergleich mit dem RAM wolltest: Ein Lesezugriff auf
> Flash
> braucht im Vergleich zu RAM pro Byte einen Taktzyklus mehr.

Korrekter: einen Taktzyklus PRO BYTE.

Leider gilt das nicht für jede Adressierungsart, denn einige gibt es 
einfach nicht für Zugriffe auf den Flashspace, insbesondere nicht die 
mit displacement, die Compiler gern für den Zugriff auf Datenstrukturen 
benutzen und auch keine mit predecrement.

Diese Sachverhalte können sich bezüglich des Mehrverbrauchs an 
Rechenzeit bei bestimmten Zugriffsmustern ziemlich fatal auswirken, 
besonders, wenn auch noch Flash oberhalb 64k benutzt werden soll.

Statt des absolut unvermeidlichen 50%igen Zuwachses können sich dann 
nämlich auch mal eben auch 200..300% ergeben.

Und das ist noch großzügig gerechnet, denn hier ist der typische 
Overhead einer Zählschleife (der sich bei RAM- und Flash-Zugriffen 
gleichermaßen negativ auswirkt) bereits eingerechnet.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren