Forum: Mikrocontroller und Digitale Elektronik Nested Interrupts mit dem AT91SAM7X


von Thomas D. (t0mmy)


Angehängte Dateien:

Lesenswert?

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?
von Thomas D. (t0mmy)


Lesenswert?

Problem gelöst. Atmel-Startup-Code und Keil-Compiler kommen sich mit der 
Stackposition etwas in die Quere.
Details: 
http://www.at91.com/forum/viewtopic.php/f,15/t,20500/p,35802/#p35802
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.