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
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.