เพิ่มประสิทธิภาพให้ Arduino ง่าย ๆ ด้วยการจัดการหน่วยความจำ

คอลัมน์ "แกะเกา ARDUINO by APPSOFTTECH"
ผู้เขียน: Prajin Palangsantikul (www.appsofttech.com)


        การพัฒนางานบนไมโครคอนโทรลเลอร์สิ่งสำคัญอย่างหนึ่งที่เราต้องให้ความสำคัญไม่น้อยกว่าการลดความผิดพลาดของโค้ดโปรแกรม (Bug) นั่นคือ “การจัดการกับหน่วยความจำข้อมูล” หรือที่เราเรียกว่า หน่วยความจำแรม (SRAM ใน AVR)

 
จากรูป
  • ** ทางด้านซ้าย (ผู้หญิงทานเค้ก) ใช้หน่วยความจำแรมไปในระหว่างการทำงานและเหลือหน่วยความจำให้เราใช้งานได้อีก 1755 ไบต์

  • ** ทางด้านขวา (ผู้หญิงทานผัก) ใช้หน่วยความจำแรมไปในระหว่างการทำงานและหรือหน่วยความจำให้เราใช้งานได้อีก 1789 ไบต์
***ทั้งสองด้าน *** มีความแตกต่างกันของหน่วยความจำเท่ากับ 34 ไบต์ ทำไมถึงแตกต่างกันได้มากถึง 34 ไบต์ ทั้งที่กระบวนการทำงานของโค้ดเหมือนกันด้วยวิธีการประกาศใช้งานตัวแปรแตกต่างกันนิดเดียวดังนี้

// in SRAM (data) Memory (การประกาศของรูปทางซ้าย)
const char AtoZ[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

// in Flash (program) Memory (การประกาศของรูปทางขวา)
PROGMEM prog_char AtoZ[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

คำถามก็คือมีอะไรที่แตกต่างกันอีกในเรื่อง การจัดการหน่วยความจำนี้?



คำตอบคือ กระบวนการจัดการหน่วยความจำ เนื่องจากข้อมูลตัวแปรอะเรย์ที่เราใช้งานเป็นค่าคงที่ เราจึงควรประกาศใช้งานตัวแปรดังกล่าวในหน่วยความจำของ FLASH ไปเลย ดีกว่าที่จะมาประกาศใช้งานในหน่วยความจำแรม ทำให้เราเหลือหน่วยความจำแรมเพื่อนำไปใช้งานในเรื่องอื่น ๆ ได้เพิ่มเติม :)

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

สร้างต้นคริสต์มาสด้วย JAVA

ฟังก์ชัน SerialEvent กับ Arduino

การใช้งาน PIC18Fxxxx กับ MPLAB X + XC8 ด้วย Peripheral Libraries (PLIBS)