Tôi có một ứng dụng mà tôi đang chuyển từ IDE Kiel để xây dựng với chuỗi công cụ GNU do các vấn đề về giấy phép. Tôi đã thành công có thể thiết lập, xây dựng, flash và chạy ứng dụng trên thiết bị.STM32 WWDG ngắt kích hoạt khi không được cấu hình
Ứng dụng trên phía GNU là vì một lý do nào đó bị kẹt trong trình xử lý IRQ được liên kết yếu cho WWDG, đó là vòng lặp vô hạn. Ứng dụng không bật WWDG và ứng dụng này bị vô hiệu hóa khi đặt lại theo mặc định. Tôi cũng đã xác minh rằng các thanh ghi cấu hình có giá trị khởi động mặc định của chúng.
Sự khác biệt duy nhất, ngoài trình biên dịch, là tệp liên kết và tệp khởi động. Tuy nhiên, cả tệp khởi động và tệp liên kết được sử dụng bởi cả hai chuỗi công cụ đều là mặc định được tạo bởi STM.
Bất kỳ ý tưởng nào có thể gây ra điều này? Tôi sắp kết thúc ở đây.
Sử dụng stm32f103XX, hãy cho tôi biết nếu có bất kỳ thông tin nào khác hữu ích.
EDIT: Sử dụng các nhận xét bên dưới Tôi đã có thể khẳng định rằng trên thực tế, HardFault_Handler đang được kích hoạt. Tôi có bao gồm sản lượng backtrace dưới đây nếu mà bạn có thể giúp đỡ
GDB BT:
0 HardFault_Handler()
1 (xử lý tín hiệu gọi là)
2 0x720a3de tại ??()
3 0x80005534 trong foo()
backtrace ngừng: khung trước giống với khung này
2 điều nổi bật với tôi, mặc dù im không có chuyên môn gdb (stack tham nhũng?). 1) foo không phải là hàm, nó là mảng const của ký tự và 2) 0x0720a3de không phải là địa chỉ bộ nhớ hợp lệ phạm vi địa chỉ flash bắt đầu tại 0x08000000
Bạn có chắc chắn đó thực sự là WWDG không? Một 'while (1);' có thể đang chia sẻ mã đó do tối ưu hóa. Tệp bản đồ có chỉ hiển thị WWDG tại địa chỉ đó không? –
Bạn có thể đang gặp phải điều gì đó. Có vẻ như trong tập tin .elf tất cả các ký hiệu irq mặc định trỏ đến cùng một địa chỉ, mà tôi cho rằng nó chỉ là trùng hợp ngẫu nhiên rằng tên WWDG_IRQ là ues trong trình gỡ lỗi. Tôi sẽ thêm các chức năng liên kết stong cho irq của vì vậy tôi có thể tìm ra cái nào chính xác là thủ phạm. – gettingSmarter