Mam aplikację, którą przesyłam z Kiel IDE do budowania z łańcuchem narzędzi GNU z powodu problemów licencyjnych. Z powodzeniem mogę konfigurować, budować, flashować i uruchamiać aplikację na urządzeniu.STM32 Wypalanie przerwań WWDG, gdy nie jest skonfigurowane
Aplikacja po stronie GNU z jakiegoś powodu utknęła w słabo połączonym programie obsługi przerwania dla WWDG, który jest nieskończoną pętlą. Aplikacja nie włącza WWDG i domyślnie jest wyłączona podczas resetowania. Zweryfikowałem również, że rejestry konfiguracyjne mają domyślne wartości startowe.
Jedyną różnicą, poza kompilatorami, są pliki łącznika i uruchamiania. Jednak zarówno pliki startowe, jak i pliki łączników używane przez oba łańcuchy narzędzi są domyślnie generowane przez STM.
Każdy pomysł, co może być przyczyną tego? Jestem tutaj na końcu mojego rozumu.
Korzystając ze stm32f103XX, proszę o kontakt w razie jakichkolwiek innych informacji.
EDYTOWANIE: Korzystając z poniższych komentarzy, udało mi się potwierdzić, że jest to wywoływany HardFault_Handler. mam to wyjście backtrace poniżej, czy to może być pomocne
GDB BT:
0 HardFault_Handler()
1 (obsługi sygnału nazywa)
2 0x720a3de w ??()
3 0x80005534 w foo()
Backtrace zatrzymane: poprzednią klatkę identyczną do tej ramy
2 rzeczy wyróżniać się do mnie, choć im nie ekspert gdb (uszkodzony stosu?). 1) foo nie jest funkcją, jest ciągiem znaków i 2) 0x0720a3de nie jest poprawnym adresem pamięci, zakres adresów flash zaczyna się od 0x08000000
Czy jesteś pewien, że to naprawdę WWDG? Innym 'while (1);' może dzielić ten kod ze względu na optymalizację. Czy plik mapy pokazuje tylko WWDG pod tym adresem? –
Możesz być na czymś. Wygląda na to, że w pliku .elf wszystkie domyślne symbole irq wskazują na ten sam adres, co przypuszczam, że to tylko zbieg okoliczności, że nazwa WWDG_IRQ jest w debugerze. Dodam funkcje łącznika stong do irqa, więc mogę dowiedzieć się, który dokładnie jest winowajcą. – gettingSmarter