Có một số điều tôi không hiểu về quy trình khởi động của vi điều khiển STM32F4.
Hiểu biết của tôi là như sau:
- Các khởi động ARM Cortex-M4 mong đợi giá trị khởi tạo con trỏ ngăn xếp và các vectơ ngắt được bật
0x00000000 + SCB->VTOR
, trong khiSCB->VTOR
bị xóa khi thiết lập lại. - Không có bộ nhớ tại vị trí đó. Bộ nhớ flash bắt đầu lúc
0x08000000
, SRAM tại0x20000000
. - Để có thể khởi động được, có thể ánh xạ đèn flash hoặc phạm vi bộ nhớ SRAM
0x00000000
. Phạm vi bộ nhớ được ánh xạ được xác định bởi trạng thái của các chân khởi động.
Những câu hỏi của tôi:
Tại sao hướng dẫn tham khảo STM32F4 nói ở trang 69 rằng
Khi thiết bị khởi động từ SRAM, trong mã khởi tạo ứng dụng, bạn phải định vị lại bảng vectơ trong SRAM bằng bảng ngoại lệ NVIC và thanh ghi bù.
? Theo quan điểm của tôi thì điều này là không cần thiết, vì toàn bộ vùng nhớ được đặt bí danh. Điều thú vị là điều này dường như không được yêu cầu khi vùng flash được ánh xạ vào
0x0
không gian.Việc sử dụng duy nhất để khởi động từ SRAM tôi có thể nghĩ nếu là giảm chu kỳ ghi trên đèn flash trong quá trình phát triển. Trước khi bạn phát hành bản váC từ thiết lập lại, bạn viết chương trình cho SRAM bằng trình gỡ lỗi và sau đó khởi động từ đó. Tuy nhiên, khi bạn có quyền truy cập trình gỡ lỗi, sẽ không có bất kỳ hạn chế nào về việc khởi động từ đâu. Vậy tại sao có tính năng này?
Vị trí khởi động được lấy từ các chân cho biết (ít nhất là trong ý kiến của tôi) rằng tính năng này sẽ không được sử dụng trong quá trình phát triển mà trong hoạt động cuối cùng. Và trong hoạt động cuối cùng, SRAM rõ ràng tại thời điểm khởi động. Do đó, không có ý nghĩa để khởi động từ SRAM.