Ich habe eine Anwendung, die ich von der Kieler IDE portiere, um mit der GNU-Toolkette aufgrund von Lizenzproblemen zu bauen. Ich bin erfolgreich in der Lage, die Anwendung auf dem Gerät einzurichten, zu erstellen, zu flashen und auszuführen.STM32 WWDG Interrupt feuern, wenn nicht konfiguriert
Die Anwendung auf der GNU-Seite ist aus irgendeinem Grund in der schwachen verknüpften IRQ-Handler für die WWDG stecken, die eine Endlosschleife ist. Die Anwendung aktiviert die WWDG nicht, und sie ist beim Zurücksetzen standardmäßig deaktiviert. Ich habe auch überprüft, dass die Konfigurationsregister ihre Standardstartwerte haben.
Der einzige Unterschied, außer Compiler, sind die Linker und Startup-Dateien. Sowohl die Startdateien als auch die Linkerdateien, die von beiden Toolketten verwendet werden, sind jedoch Standardwerte, die von STM generiert werden.
Irgendeine Idee, was das verursachen könnte? Ich bin hier ungefähr am Ende.
Mit dem stm32f103XX, lassen Sie mich wissen, wenn andere Informationen hilfreich wären.
EDIT: Mit den Kommentaren unten konnte ich feststellen, dass es tatsächlich der HardFault_Handler ist, der ausgelöst wird. habe ich die Backtrace Ausgangs unten umfassen, wenn diese Hilfe sein kann
GDB BT:
0 HardFault_Handler()
1 (Signal-Handler genannt)
2 0x720a3de in ??()
3 0x80005534 in foo()
Backtrace gestoppt: vorherigen Frame identisch mit diesem Rahmen
2 Dinge stehen, um mich, obwohl im nicht GDB-Experten (korrupter Stack?). 1) foo ist keine Funktion, es ist ein const Array von Zeichen und 2) 0x0720a3de ist keine gültige Speicheradresse der Flash-Adressbereich beginnt bei 0x08000000
Sind Sie sicher, dass es wirklich die WWDG ist? Ein anderes 'while (1);' kann diesen Code aufgrund der Optimierung teilen. Zeigt die Kartendatei nur die WWDG an dieser Adresse an? –
Sie sind vielleicht auf etwas. Es scheint, dass in der .elf-Datei alle Standard-IRQ-Symbole auf die gleiche Adresse zeigen, was bedeutet, dass es nur ein Zufall ist, dass der WWDG_IRQ-Name im Debugger ist. Ich werde stong Link-Funktionen für die IRQ hinzufügen, damit ich herausfinden kann, welcher genau der Schuldige ist. – gettingSmarter