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
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...
Schau mal im Linker Skript nach, ob die RAM Start Addresse stimmt, und wo der Stack liegt.
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
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.