Hallo Forum, eine kleine Frage. Wenn ich einen STM32F4 habe mit externen SRAM und ich zusätzlich den internen benutzen möchte, ist es erforderlich noch was anzugeben? Oder schreibt er nur in den externen (Bank … bis …) und der interne bleibt ungenutzt? Mein Ziel wäre es wenn er selbst bei Überschreiten des internen Rams in den externen wechselt. Aber das müsste doch schon direkt so sein oder? Für was hat er denn sonst eine lückenlose Adressierung? Bzw. der erste Bereich wäre ja das interne RAM und darauf folgt das SRAM. VG Ersan
Der STM32 hat einen linearen Adressraum. Das heißt aber nicht, dass hinter jeder Adresse auch etwas steckt. Im Datenblatt findest du die Memory Map. Das externe RAM wird dort irgendwo eingeblendet. Das hängt von deiner Hardware ab. Die unterschiedlichen Bereiche im Speicher gibst du im Linker Script (ARM nennt es scatter file) an. Über die Angabe der Speicherklasse kannst du im Programm die Variablen gezielt im gewünschten Speicher ablegen, oder du überlässt es dem Locator.
Hi Ersan, nein, schau mal im Datenblatt. Der FSMC bildet den SRAM in einem speziellen Speicherbereich ab 0x6000000 ein. Damit darin Werte landen, muss du deinem Compiler mitteilen, dass es überhaupt Speicher an dieser Adresse gibt. Das müsstest du im Makefile bzw. in den Projekteinstellungen konfigurieren. Ich gehe aber mal davon aus, da der interne SRAM ja schon recht groß ist, du große Datenpakete o.ä. in den externen legen willst. Da kannst du dir auch behelfen, dass du die Adresse dann explizit angibst. Allerdings musst du das Speichermanagement dann selbst machen, sprich, drauf achten, wo du was hinschreibst ;) Liebe Grüße, Jan
Jan Berg schrieb: > Hi Ersan, > > nein, schau mal im Datenblatt. Der FSMC bildet den SRAM in einem > speziellen Speicherbereich ab 0x6000000 ein. > Damit darin Werte landen, muss du deinem Compiler mitteilen, dass es > überhaupt Speicher an dieser Adresse gibt. Das müsstest du im Makefile > bzw. in den Projekteinstellungen konfigurieren. Genau hab die Adressbereiche in der Scatterfile angegeben. Ich ging davon aus das der Mem.Locator automatisch die Speicherbereiche so verwaltet das wenn ich ein 300kb großes Paket in den Ram schreibe (Firmware update) nicht erst das interne Ram befüllt und dann das externe sondern direkt auf das externe schreibt. ... Macht er aber nicht, er befüllt scheinbar doch erst das interne und dann geht er auf das externe. Nur wenn ich explizit hinter der variable den speicherbereich angebe und diesen von anfang an reserviere gehts.
Wie soll es denn sonst gehen? Woher soll der Linker wissen, was du willst?
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.