Trong quá khứ, tôi đã làm việc rất nhiều với 8 bit AVR và MSP430 nơi cả RAM và flash được lưu trữ trực tiếp trên chip. Khi bạn biên dịch và tải xuống chương trình của bạn, nó sắp xếp "chỉ hoạt động" và bạn không cần phải lo lắng về vị trí và cách các biến được lưu trữ thực sự.Cách sử dụng bộ nhớ ngoài trên vi điều khiển
Bây giờ tôi bắt đầu một dự án mà tôi muốn có thể thêm bộ nhớ ngoài vào bộ vi điều khiển (TI Stellaris LM3S9D92 nếu điều đó quan trọng) nhưng tôi không hoàn toàn chắc chắn cách bạn sử dụng mã của mình RAM bên ngoài. Tôi có thể thấy cách bạn cấu hình bus ngoài khá giống với bất kỳ thiết bị ngoại vi nào khác nhưng điều làm tôi bối rối là cách bộ xử lý theo dõi thời điểm nói chuyện với bộ nhớ ngoài và khi nào nói chuyện với bộ nhớ bên trong.
Từ những gì tôi có thể biết, RAM bên ngoài được ánh xạ tới cùng một không gian địa chỉ như SRAM nội bộ (khởi động nội bộ ở 0x20000000 và khởi động bên ngoài ở mức 0x60000000). Điều đó có nghĩa là nếu tôi đã viết một cái gì đó như thế này:
int* x= 0x20000000;
int* y= 0x60000000;
X và y sẽ trỏ đến 4 byte đầu tiên (giả định 32 bit int) của RAM nội bộ và bên ngoài tương ứng? Nếu vậy, những gì nếu tôi một cái gì đó như thế này:
int x[999999999999]; //some super big array that uses all the internal ram
int y[999999999999]; //this would have to be in external ram or it wouldn't fit
tôi tưởng tượng rằng tôi cần phải nói một cái gì đó về ranh giới của nơi từng loại bộ nhớ là hay tôi có nó tất cả các sai lầm và phần cứng tự nó ra sao? Các tập lệnh liên kết có giải quyết vấn đề này không? Tôi biết họ có cái gì đó để làm với bản đồ bộ nhớ nhưng tôi không biết chính xác những gì. Sau khi đọc về làm thế nào để thiết lập một trình biên dịch chéo ARM tôi có cảm giác rằng một cái gì đó như winavr (avr-gcc) đã làm rất nhiều thứ như thế này cho tôi đằng sau hậu trường vì vậy tôi sẽ không phải đối phó với nó.
Xin lỗi vì đã đánh bạc một chút nhưng tôi thực sự đánh giá cao nếu ai đó có thể cho tôi biết nếu tôi đang đi đúng hướng với nội dung này.
Cập nhật
Đối với bất kỳ độc giả tương lai Tôi thấy điều này sau một vài giờ googling http://www.bravegnu.org/gnu-eprog/index.html. Kết hợp với câu trả lời ở đây nó đã giúp tôi rất nhiều.
Bạn có thể muốn hỏi trên http://electronics.stackexchange.com/. Bạn cũng có thể muốn xem [Bảng dữ liệu Stellaris] (http://www.ti.com/lit/ds/spms257a/spms257a.pdf). –