สิ่งที่เกี่ยวข้อง

วันอังคารที่ ๑ มกราคม พ.ศ. ๒๕๕๑

Power of Macro for Embedded System Developer

Macro คืออะไร?

Macro นั้นเป็นการนำเอาความสามารถที่มีอยู่ของ Compiler ที่สามารถทำ Preprocessor มาใช้ในการช่วยพัฒนางาน หรือ รูปแบบการเขียนโปรแกรมให้สะดวกและง่ายขึ้น ตัวอย่างเช่น #define IRQ08 0x0099 เป็นต้น เมื่อมีการคำดังกล่าว ก็จะแทนด้วยคำที่ต่อท้ายนั้น

แล้วมีความสำคัญอย่างไรกับระบบฝังตัว?

ระบบฝังตัวนั้นประกอบด้วยอุปกรณ์ฝังตัวต่างๆ ทำงานร่วมกัน ซึ่งการที่อุปกรณ์ฝังตัวจะสามาถทำงานได้นั้นก็ต้องอาศัย การเขียนโปรแกรมซึ่งโดยส่วนใหญ่แล้ว มักจะไม่สามารถหลีกเลี่ยงการยุ่งเกี่ยวกับรายละเอียด ภายในตัวอุปกรณ์แบบฝังตัวได้ เราต้องมีการเข้าถึง Register ต่างๆเพื่อควบคุมการทำงาน ซึ่งแต่ละ Register นั้นก็จะประกอบด้วยกลุ่มบิตที่มีความหมาย ต่อการทำงานนั้น แล้วเราก็จะพบกับปัญหาเกี่ยวกับการใช้งานเนื่องจาก ภายในอุปกรณ์แบบฝังตัวมีข้อกำหนดมากมายที่ แสดงออกมาด้วยตัวเลข อย่างเช่น บิตที่ 7 ของ Register ตัวหนึ่งก็จะบอกถึงความหมายเฉพาะ เป็นต้น

แต่ด้วย Macro นี้ก็จะทำให้เราสามารถเปลี่ยนความหมายในเชิงตัวเลข ออกมาแทนด้วยตัวคำหรือกลุ่มอักษร เพื่อให้มันสามารถสื่อความหมาย และง่ายต่อความเข้าใจ เราจึงสามารถพัฒนางานบนระบบฝังตัวได้สะดวกและรวดเร็วมากขึ้น

ตัวอย่างการใช้
#define PWMMR0_IRQ_FLAG  (1 << 0)
เราจะพบว่ากลุ่มคำนี้สามารถสื่อความหมายได้มากกว่าตัวเลข

ปัญหาที่ตามมา
ข้อดีของ Macro นั้นก็มีประโยชน์ตรงที่ช่วยอำนวยความสะดวกให้กับนักพัฒนา แต่ก็เป็นธรรมดาว่ามันก็มักจะตรงข้ามกับความซับซ้อนที่เพิ่มขึ้น ตัวอย่างเช่น
#define PWMMCR_MRx_RESET(x)  (2 << (3*x))
ซึ่งช่วยในการกำหนดค่าที่สะดวกมากเพียงแค่เราส่งค่า ว่าเราต้องการใช้ Match Register อันที่เท่าไร แต่ถ้าหากเรามองอีกแง่หนึ่งเราก็จะพบว่าในการกำหนดค่าด้วย Macro นี้จะต้องใช้ตัว Operator สองตัวคือ Shift และ Multiply ซึ่งถ้าเรากำหนดด้วยค่าทางตัวเลขไปเลยไม่ต้องอาศัย Macro ก็ไม่จำเป็นต้องมี Operator ในการกำหนดค่า เพราะยิ่งมี Operator มากขึ้นจำนวนคำสั่งเมื่อถูก Compile ของโค้ดแบบเดียวกันก็จะเพิ่มขึ้นตามไปได้

สรุปปิดท้าย
Macro นั้นก็มีข้อดีและข้อเสีย หน้าที่ของนักพัฒนาคือ ใช้งานมันให้เหมาะสมกับงานครับ

Powered by ScribeFire.

ไม่มีความคิดเห็น:

ผู้สนับสนุน

จัดตามกลุ่ม