Hi eine generelle Frage zu allen Microcontrollern: Wenn man eine sehr zeitkritische Sache erledigt, ist es sinnvoll das Programm im µC nach dem starten vom Flash ins RAM umzukopieren? Funktioniert das?
So der uC Programm aus dem SRAM ausführen kann (Von-Neumann Architektur). Die AVRs können das nicht (Harvard-Architektur). Aber C167 & CO, Power Quick etc. können das alle (und machen es auch). MfG Falk
Hallo Ist es nicht so, dass man dann zwar den Programmcode schneller (bzw. höher getaktet) auslesen kann, dafür allerdings eine Geschwindigkeitseinbusse in Kauf nehmen muss, weil nun der Speicherzugriff doppelt gebraucht wird? (So dass der Prozessor z.B. gewisse Befehle nicht mehr in einem Takt hinkriegt.) Gruss Michael
generelle antwort: jain. geht nicht mit jedem uc, da z.b. der avr keinen code ausm ram abspielen kann. bei einigen bringts was. musst halt sehen, wie die zugriffsgeschwindigkeit ist flash/ram
@ mr.chip > Ist es nicht so, dass man dann zwar den Programmcode schneller (bzw. > höher getaktet) auslesen kann, dafür allerdings eine > Geschwindigkeitseinbusse in Kauf nehmen muss, weil nun der > Speicherzugriff doppelt gebraucht wird? (So dass der Prozessor z.B. > gewisse Befehle nicht mehr in einem Takt hinkriegt.) Man muss ggf. Waitstates einfügen, was den Speicherzugriff langsamer macht. Allerdings ist heutiger SDRAM um Grössenordungen schneller als FLASH. MFG Falk
Armin Osäure wrote: > eine generelle Frage zu allen Microcontrollern: > > Wenn man eine sehr zeitkritische Sache erledigt, ist es sinnvoll das > Programm im µC nach dem starten vom Flash ins RAM umzukopieren? > Funktioniert das? Generell nein. MCs sind darauf optimiert, ihren Code aus dem internen Flash auszuführen. So holen die Silabs 8051-er bei 100MHz gleich immer 4 Byte ausm Flash, greifen also effektiv nur mit 25MHz zu. Externe SRAM-Zugriffe sind aber nur 8-bittig und benötigen Waitstates, sind also immer langsamer. Die AVRs könnens gleich garnicht. Die ARM7 (LPC2xxx) holen auch gleich immer 4 Langworte (128 Bit) ausm Flash. Nur in wenigen Ausnahmen (viele Sprünge, häufige kurze Interrupts) kann es leicht etwas bringen, was von dem kostbaren internen 16kB SRAM als Code abzuzweigen. Hauptsache, es müssen dann nicht Stack und wichtige Daten in langsamen externen SRAM ausgelagert werden. Peter
Bei den ARM7 hängt es von der Familie ab: Bei Philips/NXP LPC2xxx siehe oben. Bei anderen ARM7 (z.B. Atmel SAM7, Analog Devices ADuC7000) ist das Flash auf Thumb-Code optimiert und hat für ARM-Code nicht genug Bandbreite. Da kann sich ARM-Code im RAM durchaus lohnen.
PS: Bei solchen ARM7ern ist es daher nicht selten, dass ausgewählte Codefragmente im RAM landen. Schnelle Interrupt-Routinen sind ein typischer Kandidat.
Peter Dannegger (peda) > Wenn man eine sehr zeitkritische Sache erledigt, ist es sinnvoll das > Programm im µC nach dem starten vom Flash ins RAM umzukopieren? > Funktioniert das? > Generell nein. Einspruch, euer Ehren. Siehe mein erstes Posting. > MCs sind darauf optimiert, ihren Code aus dem internen Flash > auszuführen. Einige. Aber beileibe nicht alle! MfG Falk
Falk wrote:
> Einspruch, euer Ehren. Siehe mein erstes Posting.
Da steht nur, daß der C167 Code aus dem SRAM (intern, extern ?)
ausführen kann.
Ob das aber auch einen spürbaren Gewinn bringt, steht nicht da.
Peter
Hallo Peter, > > Einspruch, euer Ehren. Siehe mein erstes Posting. > Da steht nur, daß der C167 Code aus dem SRAM (intern, extern ?) > ausführen kann. Ob das aber auch einen spürbaren Gewinn bringt, steht > nicht da. Doch steht dort, wenn auch nicht explizit. Um es nochmal explizit zu sagen. JA, das Programm kann im SRAM schneller ausgeführt werden als im FLASH. MfG Falk
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.