Hallo zusammen, als Hobby habe ich in den letzten Monaten mit einem Arduino, FEZ Panda (ARM 7 von NXP, .Net Micro Framework) und anderen uC basierten Boards gespielt. Ich bin jetzt an einem Punkt an dem die standard .Net Microframework Klassen nicht das tun was ich möchte bzw weniger als der Prozessor kann bereitstellen. Zb unterstützt der im NXP ARM7 Prozessor eingebaute "Timer Peripheral" weitaus mehr Funktionen als man über .Net Microframework ansteuern kann. Ich lese also derzeit ARM Manuals, Manuals des Prozessoren, usw Dabei ist mir immer noch nicht verständlich wie bei einem uC Code ausgeführt wird: 1) Zum einen gibt es die uC mit nur internem SRAM und Flash. Flash ist meistens grösser als RAM. In Foren Beiträgen las ich dass der Code direkt aus Flash ausgeführt wird. Stimmt das? Kann ein uC direkt aus Flash Code ausführen? Oder ist damit nur gemeint, dass wann auch immer neuer Code ausgeführt werden muss dass sich auf Flash befindet, ein kleiner Teil in SRAM nachgeladen wird um anschliessend ausgeführt zu werden? Sprich bei einem solchen Prozessor wird ständig aus Flash in SRAM nachgeladen? 2) Zum anderen gibt es uC mit externen SDRAM und Flash (oder NAND oder oder). Bei den Board die ich bisher gesehen habe, war meisten mehr SDRAM als Flash vorhanden. Die Flash Anbindung kann über verschiedenste Wege ausgeführt werden, SPI oder EBI, etc. Je nach dem wie die Anbindung gemacht wird, ist jedoch zu erwarten dass diese sehr viel langsamer ist als bei einem uC mit integriertem Flash. Was macht man in solch einem Fall? Nach reset den gesamten Flash Inhalt (oder so viel wie möglich) in SDRAM kopieren damit möglichst selten, am bester gar nicht, aus Flash nachgeladen werden muss? 3) Kann Code direkt aus SDRAM ausgeführt werden, oder muss hier auch erst von SDRAM zum internen SRAM kopiert werden? Zu diesen Fragen konnte ich bisher keine Erklärung für Dummyes finden im Web finden. Kennt jemand ein Link zu dem Thema? Ein Buch? Grüsse mark
1) Ja, der µC führt den Code direkt aus dem Flash aus. Bei µCs mit sehr hoher Taktfrequenz (>> 50 MHz) allerdings ist das Flash dafür zu langsam, und dort wird daher üblicherweise im RAM gearbeitet - was natürlich ausreichend großes RAM voraussetzt. Das aber passiert nicht automatisch, sondern muss vom Programm selbst erledigt werden. 2) Diese Konstruktion (ext. Flash per SPI) dient in der Tat dazu, Programme aus dem Flash ins RAM zu kopieren. Ein direktes Abarbeiten aus dem Flash ist hier nicht möglich. 3) Wenn der µC einen SDRAM-Controller hat, dann verhält sich SDRAM weitestgehend so wie das interne SRAM. "Weitestgehend", da es i.d.R. langsamer ist und daher mit Waitstates angesteuert wird. Das interne SRAM hingegen kann mit vollem Prozessortakt betrieben werden, und deswegen werden geschwindigkeitsrelevante Teile durchaus auch bei so einer Konstellation aus dem SRAM ausgeführt. Die Punkte 2 und 3 aber sind nur für größere µCs mit Taktfrequenzen >> 50 MHz relevant. Auf größeren ARMen (wie ARM9 oder Cortex-M4) also ja, auf kleinen ARMen (ARM7-TDMI oder Cortex-M0) oder kleineren Architekturen wie AVR, MSP430, MSC-51 hingegen nicht.
Es gibt alle möglichen Varianten der Ausführung. Das hängt von konkreten uC ab.
Danke! Gibt es dazu eine gute Einstiegslektüre, irgend ein empfehlenswertes Buch? Vielleicht etwas das die verschiedenen Architekturen (PIC, ARM 7, ARM 9, ARX Cortex X, usw) und deren Besonderheiten skizziert?
Hi, die Zugriffsarten auf den Speicher, sei es nun Flash, embedded oder extern, sowie RAM und SDRAM hängen typischerweise NICHT von der Prozessorarchitektur sondern vielmehr von der Implementierung des Herstellers ab. Der Prozessor greift im wesentlichen auf eine Adresse zu und erwartet dort ausführbaren Programmkode oder Daten. Ob diese im RAM, Flash oder sonstwas stehen, ist dem Prozessor in diesem Moment "egal". Grundsätzlich will der Prozessor, im wesentlichen auch unabhängig von der Architektur, auf wahlfreienzugriffsspeicher ( random access memory ) zugreifen. Dies bedeutet im ersten Ansatz nur, dass der Speicher nicht seriell organisiert ist, wie Beispielsweise NAND-Flash oder Speicher der über eine serielle Schnittstelle angeschlossen ist. Deshalb kann, pauschal gesagt, ein Prozessor nicht direkt Programm aus NAND-Flash ausführen, sondern muß dieses erst in einen geeigneten Speicher, z.B. SRAM oder SDRAM kopieren. Und ja, es gibt Ausnahmen. Aus genannten Gründen biete sich an, einen bestimmten µC aussuchen und dort die Arten des Speicherzugriffs zu studieren.
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.