stm32 sram + internram

OP #3525020
Lesenswert?
• ▲
▼
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
Gast #3525029
Lesenswert?
• ▲
▼
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.
#3525042
Lesenswert?
• ▲
▼
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
OP #3525048
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.