Với số lượng lớn các biến văn bản, tôi thấy cần phải lưu trữ chúng trong bộ nhớ Flash bằng PROGMEM . Hậu quả tích cực và tiêu cực của việc lưu trữ các biến lớn trong Flash (sử dụng PROGMEM) so với SRAM so với EEPROM trên Arduino là gì?
Với số lượng lớn các biến văn bản, tôi thấy cần phải lưu trữ chúng trong bộ nhớ Flash bằng PROGMEM . Hậu quả tích cực và tiêu cực của việc lưu trữ các biến lớn trong Flash (sử dụng PROGMEM) so với SRAM so với EEPROM trên Arduino là gì?
Câu trả lời:
Dưới đây là so sánh nhanh về FLASH, EEPROM và SRAM trên AtMega328, bộ vi điều khiển trong nhiều bo mạch Arduino hiện tại (không bao gồm Do, Leonardo, Arduinos cũ và một số bảng tương thích khác).
PROGMEM
.Vì vậy, hậu quả tiêu cực giả định quan trọng của việc sử dụng PROGMEM là giới hạn chu kỳ 10.000 ghi . Hậu quả tiêu cực chính của việc sử dụng EEPROM là sự phức tạp của mã để đọc / ghi / sao chép dữ liệu. SRAM, nó chỉ rất hạn chế về năng lực .
Hàm ý chính là bạn không thể sửa đổi thông tin được lưu trữ trong PROGMEM. Bạn cũng sẽ đạt được hiệu năng (rất nhỏ) vì chuỗi cần được sao chép 1 byte mỗi lần.
Sự hao mòn của FLASH không phải là mối quan tâm (chính) vì để thay đổi chương trình của bạn, bạn phải lập trình lại FLASH bằng mọi cách.
Với IDE 1.x giới thiệu, macro F () đã được bao gồm. Điều này làm cho việc giữ các chuỗi trong PROGMEM dễ dàng hơn.
Ví dụ: thay vì sử dụng: serial.print ("Hello World!");
Bây giờ bạn có thể sử dụng:
Serial.print (F ("Xin chào thế giới!");
Lưu ý rằng F () không phải là một hàm, nó chỉ là một macro nên việc sử dụng nó có phần bị hạn chế.
PROGMEM được sử dụng tốt nhất cho dữ liệu bất biến. Nếu bạn sẽ tiếp tục thay đổi nhanh chóng các biến, tôi sẽ chỉ lưu nó trong SRAM. Mặt khác, nếu bạn muốn có một số biến văn bản không thay đổi (ví dụ: nội dung sẽ được hiển thị) sẽ không được tải quá thường xuyên, PROGMEM là một ý tưởng tuyệt vời.
Về EEPROM - cố gắng lưu cái này cho những thứ liên tục. IIRC việc lấy dữ liệu từ EEPROM qua SRAM / PROGMEM chậm hơn. Thông thường tôi (và những người khác) sao chép dữ liệu từ EEPROM sang SRAM (Ngay cả ví dụ chính thức cũng làm điều này) trước khi sử dụng nó.