เพิ่มประสิทธิภาพให้ Arduino ง่าย ๆ ด้วยการจัดการหน่วยความจำ
คอลัมน์ "แกะเกา ARDUINO by APPSOFTTECH"
ผู้เขียน: Prajin Palangsantikul (www.appsofttech.com)
การพัฒนางานบนไมโครคอนโทรลเลอร์สิ่งสำคัญอย่างหนึ่งที่เราต้องให้ความสำคัญไม่น้อยกว่าการลดความผิดพลาดของโค้ดโปรแกรม (Bug) นั่นคือ “การจัดการกับหน่วยความจำข้อมูล” หรือที่เราเรียกว่า หน่วยความจำแรม (SRAM ใน AVR)
จากรูป
// in SRAM (data) Memory (การประกาศของรูปทางซ้าย)
const char AtoZ[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
// in Flash (program) Memory (การประกาศของรูปทางขวา)
PROGMEM prog_char AtoZ[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
คำถามก็คือมีอะไรที่แตกต่างกันอีกในเรื่อง การจัดการหน่วยความจำนี้?
คำตอบคือ กระบวนการจัดการหน่วยความจำ เนื่องจากข้อมูลตัวแปรอะเรย์ที่เราใช้งานเป็นค่าคงที่ เราจึงควรประกาศใช้งานตัวแปรดังกล่าวในหน่วยความจำของ FLASH ไปเลย ดีกว่าที่จะมาประกาศใช้งานในหน่วยความจำแรม ทำให้เราเหลือหน่วยความจำแรมเพื่อนำไปใช้งานในเรื่องอื่น ๆ ได้เพิ่มเติม :)
ผู้เขียน: Prajin Palangsantikul (www.appsofttech.com)
การพัฒนางานบนไมโครคอนโทรลเลอร์สิ่งสำคัญอย่างหนึ่งที่เราต้องให้ความสำคัญไม่น้อยกว่าการลดความผิดพลาดของโค้ดโปรแกรม (Bug) นั่นคือ “การจัดการกับหน่วยความจำข้อมูล” หรือที่เราเรียกว่า หน่วยความจำแรม (SRAM ใน AVR)
จากรูป
- ** ทางด้านซ้าย (ผู้หญิงทานเค้ก) ใช้หน่วยความจำแรมไปในระหว่างการทำงานและเหลือหน่วยความจำให้เราใช้งานได้อีก 1755 ไบต์
- ** ทางด้านขวา (ผู้หญิงทานผัก) ใช้หน่วยความจำแรมไปในระหว่างการทำงานและหรือหน่วยความจำให้เราใช้งานได้อีก 1789 ไบต์
// in SRAM (data) Memory (การประกาศของรูปทางซ้าย)
const char AtoZ[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
// in Flash (program) Memory (การประกาศของรูปทางขวา)
PROGMEM prog_char AtoZ[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
คำถามก็คือมีอะไรที่แตกต่างกันอีกในเรื่อง การจัดการหน่วยความจำนี้?
คำตอบคือ กระบวนการจัดการหน่วยความจำ เนื่องจากข้อมูลตัวแปรอะเรย์ที่เราใช้งานเป็นค่าคงที่ เราจึงควรประกาศใช้งานตัวแปรดังกล่าวในหน่วยความจำของ FLASH ไปเลย ดีกว่าที่จะมาประกาศใช้งานในหน่วยความจำแรม ทำให้เราเหลือหน่วยความจำแรมเพื่อนำไปใช้งานในเรื่องอื่น ๆ ได้เพิ่มเติม :)
ความคิดเห็น
แสดงความคิดเห็น