Forums Neueste Beiträge
 

MSP430F2xx Stack Phänomen

10/10/2012 - 19:09 von Roland Ertelt | Report spam
Ich habe hier gerade zwei MSPs am Wickel.
Einen MSP430F248 und einen MSP430F2617. Der letztere hat mehr RAM für
ein paar Experimente. Beide sitzen aber auf einer sonst 100% identischen
Entwicklungsumgebung.

Ich habe ein Programm (strictes C mit einigen Routinen ASM), welches ich
für beide Plattformen sauber kompilieren kann. Auf dem F248 (auf 24MHz
übertaktet) làuft das Programm problemlos. Tagelang...
Beim F2617 im serientrimm haut die main-Loop mit jedem Durchlauf ein
Element auf den Stack, bis er überlàuft. Ich habe jetzt schon alle IRQs
aus, bringt aber keine Besserung...

Hat jemand noch eine Idee, wo ich da weitersuchen kann?

Roland
 

Lesen sie die antworten

#1 Heiko Nocon
10/10/2012 - 20:02 | Warnen spam
Roland Ertelt wrote:

Beim F2617 im serientrimm haut die main-Loop mit jedem Durchlauf ein
Element auf den Stack, bis er überlàuft. Ich habe jetzt schon alle IRQs
aus, bringt aber keine Besserung...



Wenn du schon festgestellt hast, daß es eine so starke positive
Korrelation zwischen Stackwachstum und der Zahl der Durchlàufe der
Hauptschleife gibt, dann ist es ziemlicher Quatsch, den Fehler im
Interruptsystem zu suchen. Er wird sehr wahrscheinlich nicht dort,
sondern eben in der Hauptschleife stecken.

Hat jemand noch eine Idee, wo ich da weitersuchen kann?



In der Hauptschleife natürlich. Im Prinzip bilden alle von dort
aufgerufenen Funktionen einen Baum. Man geht also in die erste Ebene
(also die Hauptschleife selber) speichert zu Beginn den Stackpointer als
Referenzwert und prüft dann nach jedem Funktionsaufruf, ob sich der
Stackpointer geàndert hat. Hat er das, muß der Fehler in zuletzt
aufgerufenen Funktion oder den wiederum von dieser Funktion aufgerufenen
Funktionen liegen. Also baut man den Debugcode aus der Hauptschleife aus
und in die gefundene Funktion eine Ebene tiefer wieder ein. Das
wiederholt man immer wieder und steigt so in den Baum der Funktionen ab,
bis man eine gefunden hat, die ihrerseits keine Funktionen mehr aufruft.
Voíla: Die Funktion, die das Stackwachstum verursacht, ist gefunden.

Das heißt dann allerdings noch nicht notwendigerweise, daß der
eigentliche Fehler wirklich in dieser Funktion steckt. Aber er steckt
mit Sicherheit in dieser Funktion oder in einer der Funktionen, die die
Parameter dafür liefern.

Daß man sowas einem Programmierer erklàren muß, stimmt einigermaßen
traurig...

Ähnliche fragen