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?
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.