คำตอบ:
นี่คือการเปรียบเทียบอย่างรวดเร็วของ FLASH, EEPROM และ SRAM บน AtMega328 ซึ่งเป็นไมโครคอนโทรลเลอร์ในบอร์ด Arduino หลาย ๆ รุ่นปัจจุบัน (ยกเว้น Due, Leonardo, Arduinos ที่เก่ากว่าและบอร์ดอื่น ๆ ที่ใช้งานร่วมกันได้)
PROGMEM
รหัสผ่านเข้าถึงดังนั้นผลลัพธ์เชิงลบที่สำคัญสมมุติฐานของการใช้ PROGMEM คือขีด จำกัด10,000 รอบการเขียน ผลกระทบเชิงลบที่สำคัญของการใช้ EEPROM คือความซับซ้อนของรหัสในการอ่าน / เขียน / คัดลอกข้อมูล SRAM ก็เพียงมากจำกัด ในความสามารถ
ความหมายหลักคือคุณไม่สามารถแก้ไขข้อมูลที่เก็บไว้ใน PROGMEM นอกจากนี้คุณยังจะได้รับประสิทธิภาพการทำงานที่น้อยมากเนื่องจากสตริงจะต้องคัดลอกทีละ 1 ไบต์
การเสื่อมสภาพของ FLASH ไม่ได้เป็นข้อกังวล (หลัก) เนื่องจากการเปลี่ยนแปลงโปรแกรมของคุณคุณจะต้องตั้งโปรแกรม FLASH ใหม่อีกครั้ง
ด้วยการแนะนำ IDE 1.x ทำให้แมโคร F () รวมอยู่ด้วย สิ่งนี้ทำให้ง่ายต่อการเก็บสตริงใน PROGMEM
ตัวอย่างเช่นแทนที่จะใช้: Serial.print ("Hello World!");
ตอนนี้คุณสามารถใช้:
Serial.print (F ("Hello World!");
โปรดทราบว่า F () ไม่ใช่ฟังก์ชั่นมันเป็นเพียงมาโครดังนั้นการใช้งานจึงค่อนข้าง จำกัด
PROGMEM ใช้ดีที่สุดสำหรับข้อมูลที่ไม่เปลี่ยนรูป หากคุณจะเก็บตัวแปรที่เปลี่ยนแปลงอย่างรวดเร็วฉันจะเก็บไว้ใน SRAM ในทางตรงกันข้ามหากคุณต้องการมีตัวแปรข้อความที่ไม่เปลี่ยนรูป (เช่นสิ่งที่จะแสดง) ที่จะไม่ถูกดึงบ่อยเกินไป PROGMEM เป็นความคิดที่ดี
เกี่ยวกับ EEPROM - ลองบันทึกสิ่งนี้เพื่อสิ่งที่คงอยู่ IIRC มันช้ากว่าในการดึงข้อมูลจาก EEPROM ผ่าน SRAM / PROGMEM โดยปกติฉัน (และอื่น ๆ ) คัดลอกข้อมูลจาก EEPROM ไปยัง SRAM (แม้แต่ตัวอย่างที่เป็นทางการทำเช่นนี้) ก่อนที่จะใช้