Chạy thực thi từ SRAM bên ngoài


8

Tôi có bảng dev STM32 với một số SRAM bên ngoài. Tôi muốn thực thi mã của mình từ SRAM bên ngoài đó, nhưng bộ xử lý của tôi chỉ hỗ trợ khởi động từ Flash, SRAM bên trong hoặc bộ nhớ hệ thống (một phần của SRAM bên trong).

Cách dễ nhất để chạy mã từ SRAM bên ngoài là gì?

Lưu ý: Tôi tải mã bằng OpenOCD thông qua JTAG và tôi sử dụng GDB.


3
Làm thế nào là chương trình của bạn sẽ được đưa vào SRAM bên ngoài ở nơi đầu tiên?
Abbeyatcu

@vicatcu: Tôi có một tài xế làm việc viết bằng C.
Randomblue

Câu trả lời:


16

Trước khi bạn có thể bắt đầu thực thi mã từ RAM ngoài, trước tiên bạn phải khởi tạo FSMC và sao chép mã của mình vào RAM đó, do đó bạn phải khởi động từ flash. Một tập lệnh liên kết được viết đúng (với phần mã bổ sung được liên kết tại địa chỉ chính xác nhưng được đặt trong flash, như phần .data) sẽ giúp ích rất nhiều. Bạn sẽ có thể đánh dấu các chức năng bạn cần đặt trong RAM bằng thuộc tính phần chính xác . Sau khi FSMC được khởi tạo, sao chép phần đó vào RAM giống như cách .data được sao chép trong mã khởi động của bạn. Tất cả những gì còn lại là gọi các chức năng RAM của bạn theo cách thông thường.

Lưu ý hai vấn đề nghiêm trọng khi chạy từ SRAM bên ngoài:

  1. Nó sẽ chậm thôi. Giống như 6 ... chậm hơn 8 lần so với chạy từ flash hoặc thậm chí SRAM nội bộ theo điều này . Kiến trúc vi điều khiển này đơn giản là không được tối ưu hóa cho loại sử dụng này .

  2. Một số chip STM32 có lỗi silicon trong đó FSMC truy cập bởi hai chủ xe buýt làm hỏng chip. Điều này về cơ bản sẽ ngăn cản bạn sử dụng DMA. Điều này liên quan đến phiên bản STM32F103 Y IIRC, có lẽ các chip khác cũng vậy.

Vì vậy, tôi sẽ không làm điều này cá nhân. Một lần nữa tôi phải nhắc lại trên trang web này rằng vi điều khiển! = CPU ngay cả khi đó là ARM.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.