Ich bin gerade bei der Inbetriebnahme und Programmierung einer
selbstentwickelten IO-Box (4 Europlatinen). Kern ist ein SAM7X512,
dieser empfängt Kommandos über CAN und sendet aktuelle Eingangswerte der
anderen Schnittstellen über CAN.
Ich verwende Keil µVision4 und ein J-Link zum Programmieren. Das
Codeprojekt basiert auf einem Beispiel aus der Atmel at91lib.
Das Problem ist, dass sich der ARM aufhängt (Abort-Mode, Undefined
Instruction Vector), wenn ich nested Interrupts verwenden möchte. Im
angehängten Startup-File von Atmel ist eine Basis-Interruptroutine, mit
der das eigentlich möglich sein sollte. Setze ich alle Interrupts auf
die gleiche Priorität, funktioniert alles bestens. Das sagt mir, dass
das Problem durch die nested Interrupts verursacht wird.
Beim Durchsteppen durch eine Interruptroutine ist mir aufgefallen, dass
der ARM immer beim Rücksprung aus einer von der ISR aufgerufenen
Funktion (statische Klassenmethode) in den Fehlermodus geht.
Mit den Stack-Größen habe ich schon etwas gespielt, aber ohne Effekt.
Ich habe auch fast nur statische Variablen, der Stack sollte nicht so
voll sein.
Im AT91.com-Forum hat man mir empfohlen, die Stackverwendung zu
überprüfen, ich habe nur keine Ahnung wie ich den Stack mit einem
Default füllen kann, geschweige denn wo im Adressbereich er sich
befindet.
Kann mir jemand etwas auf die Sprünge helfen?