Forum: Compiler & IDEs Großes Array über zwei Speicherbänke auf CortexM3


von Hennessy (Gast)


Lesenswert?

Hallo Zusammen,

ich habe ein Problem mit einem Fujitsu bzw. Spansion CortexM3 
MB9AF344LA.
Laut Datenblatt ausgestattet mit 32kB RAM in zwei Bänken a 16kB. 
Speicheradressen aber durchgehend.
Nun brauche ich ein relativ großes Array von 22500Byte welches 
gesampelte Daten doppelt gepuffert aufnimmt. Egal wie ich es drehe und 
wende, ich kann nicht mehr als 16k verwenden, sonst startet der 
Prozessor nicht sondern landet in einem Hardfault.
Habe schon versucht mit hilfe von ein paar Tricks im Linkerscript zwei 
Speicherbänke zu deklarieren und den Puffer in die zwei Blöcke zerlegt 
die ich zur doppelten Pufferung verwende. Laut Compiler auch alles 
korrekt gelaufen, bloß das Problem bleibt das Selbe. Verwende GNUCC 4.9 
2015Q1.
Ich habe bisher hauptsächlich mit MSP430 gearbeitet und da gabs das 
Problem nicht.
Vielleicht habe ich ja auch nur einen blöden Denkfehler im Kopf.

Gruß, Markus

von rmu (Gast)


Lesenswert?

Lässt sich der Startvorgang des Prozessors nicht debuggen? Das Ding wird 
ja nicht ausm Reset herauskommen und einen Takt darauf gleich im 
Hardfault landen. Ohne Code ists schwierig was Brauchbares zu sagen...

von Jim M. (turboj)


Lesenswert?

Schau mal im Linker Skript nach, ob die RAM Start Addresse stimmt, und 
wo der Stack liegt.

von huhu (Gast)


Lesenswert?

die standard likerscripts legen den stack ans ende der ersten bank

da schreibst du dann leider drüber


leg den ans ende der 2ten bank und du hast dann platz

von Hennessy (Gast)


Lesenswert?

Moin, moin,

Startvorgang lässt sich debuggen, wegen der Optimierungen ist aber nicht 
klar zu erkennen wo er aufgibt. Einige Male habe ich es aber 
nachvollziehen können, dass er bei der Initilisierung des .bss Bereichs 
weg ist (Programm ist übrigens ohne Optimierungen zu groß, bzw. läuft 
nicht mehr richtig), manchmal springt er auch irgendwo in den Code, ein 
anderes Mal steht der PC auf Adressen die jenseits von gut und böse 
liegen.
Das Linkerscript habe ich bereits angepasst. Adressen passten und passen 
noch. Der Stack lag original am Ende des gesamten RAM, habe ihn 
probehalber mal ans Ende der ersten Bank verschoben, hilft aber auch 
nix.

Ich weiß das es schwierig ist ohne Code Aussagen zu treffen, aber leider 
ist es bei größeren MCUs nicht mehr mit einem 10-Zeiler getan. Aber das 
bringt mich auf die Idee wirklich mal ein Minimal-Konstrukt zu 
schreiben.

Ich hatte mehr so auf eine Antwort gehofft: "Klar bist Du zu blöd, mach 
das so und so und dann läufts" ;-))
Manchmal ist es ja so einfach. Trotzdem schon mal DANKE!

Gruß, Markus

von (prx) A. K. (prx)


Lesenswert?

Ist DMA mit im Spiel? Bei dem ARMs gibts nicht selten den Fall, dass 
mehrere RAM Banks an verschiedenen Bussen hängen und davon nicht alle 
vom DMA Controller angesprochen werden können.

von Hennessy (Gast)


Lesenswert?

Nein, kein DMA.

von Guest (Gast)


Lesenswert?

Das Problem kenne ich von anderen Cortex M. Da sind die beiden 
Speicherberieche über verschiedene Busse angeschlossen (Daten-, 
Systembus), sprich der erste Bereich kann beides und der zweite z.B. nur 
Systembus. Wenn darauf dann über die Grenze hinweg mit Datenbus 
zugegriffen wird geht es schief.

von Hennessy (Gast)


Lesenswert?

Hallo Guest,

gibt's denn dafür 'ne Lösung?

von Hennessy (Gast)


Lesenswert?

Leute, Leute,

wie doof kann man sein!!!!
Ich hatte im Linkerscript eine falsche Startadresse fürs RAM da ich 
zwischenzeitlich den Prozessor mangels Resourcen gewechselt habe!!!


Sorry für die Umstände und Danke für die Unterstützung!

Gruß, Markus

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
Noch kein Account? Hier anmelden.