คำถามติดแท็ก progmem

1
ฉันสามารถเขียนไปยังหน่วยความจำแฟลชโดยใช้ PROGMEM ได้หรือไม่
ในเอกสารของ Arduino ฉันพูด: http://playground.arduino.cc/Learning/Memory หมายเหตุ: หน่วยความจำแบบแฟลช (PROGMEM) สามารถบรรจุได้ในเวลาที่โปรแกรมเขียนเท่านั้น คุณไม่สามารถเปลี่ยน> ค่าในแฟลชหลังจากที่โปรแกรมเริ่มทำงาน และในคำอธิบาย PROGMEM: http://arduino.cc/th/Reference/PROGMEM เก็บข้อมูลในหน่วยความจำแฟลช (โปรแกรม) แทน SRAM มีคำอธิบายของหน่วยความจำประเภทต่าง ๆ ที่มีอยู่ในบอร์ด Arduino คำหลัก PROGMEM เป็นตัวดัดแปลงตัวแปรควรใช้เฉพาะกับประเภทข้อมูลที่กำหนดไว้ใน pgmspace.h มันบอกคอมไพเลอร์ "ใส่ข้อมูลนี้ในหน่วยความจำแฟลช" แทนที่จะเป็น SRAM ซึ่งมันจะไปตามปกติ ดังนั้นเราสามารถหรือไม่เรา? หรือไม่ใช่สิ่งเดียวกัน

2
ทำไมฉันไม่สามารถใช้พอยน์เตอร์แทนการใช้อาเรย์กับ PROGMEM ได้?
ขณะนี้ฉันกำลังเปลี่ยนห้องสมุดบางแห่งให้ใช้แฟลชแทน RAM สำหรับการจัดเก็บสตริงเพื่อที่ฉันจะไม่หมด SRAM ในโครงการ สตริงบางตัวในไลบรารีถูกประกาศในลักษณะนี้: const char *testStringA = "ABC"; สิ่งนี้ต่างจากวิธีที่ฉันเห็นสิ่งนี้ตามปกติ: const char testStringB[] = "DEF"; อย่างไรก็ตามฉันคิดว่าทั้งสองนี้เท่ากันเมื่อประกาศ const และเริ่มต้นในการประกาศ ทำงานได้ดีทั้งในรหัส ฉันพยายามย้ายสิ่งเหล่านี้ไปยังแฟลช: const prog_char *testStringC PROGMEM = "GHI"; ฉันพบว่ามันใช้งานไม่ได้ มันกำลังผลิต gobbledegook เมื่อพิมพ์ อย่างไรก็ตามทำตามรูปแบบปกติของ: const prog_char testStringD[] PROGMEM = "JKL"; ทำงานได้ดี ฉันสามารถดูได้ในการถอด: 00000068 <testStringC>: 68: 04 01 .. 0000006a <_ZL11testStringD>: 6a: …
11 progmem  pointer 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.