ผมนี่… ต้องพอยน์เตอร์เลย

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

        ถ้าเราเขียนโปรแกรมด้วย Arduino เราอาจไม่เคยรู้เลยว่าเกิดอะไรขึ้นกับรีจิสเตอร์บ้าง แล้วรีจิสเตอร์คืออะไร? นั้นไงครับเล่น Arduino แล้วรีจิสเตอร์ก็หายไปจากชีวิตเรา ง่ายขึ้นก็ต้องพึ่งพิงคนอื่นมากขึ้น(ฝรั่ง) เมื่อเกิดปัญหาเราก็มีหนทางเดียวคือ รอ.. แล้วก็รอ ไลบรารีบางตัวก็จำกัดการใช้งานของเรา เช่น กำหนดช่องทางอินพุตหรือเอาต์พุตตายตัว บางก็ต้องใช้กับฮาร์ดแวร์นี้ใช้กับฮาร์ดแวร์อื่นไม่ได้ เป็นต้น

        OK ครับเรื่องนี้เราผ่านเรื่องนี้กันไปก่อน สิ่งที่ผมกำลังจะพูดถึงครั้งนี้คือเรื่องของ Pointer หรือตัวแปรพอยน์เตอร์ การเขียนโปรแกรมด้วย Arduino หรือ AVR บางครั้งเราก็แทบจะไม่ได้ใช้งานตัวแปรพอยน์เตอร์กันเลย (ถูกใช้เมื่องานนักยากจริง ๆ และต้องการจัดการหน่วยความจำ) สำหรับท่านที่อยากรู้จักตัวแปรพอยน์เตอร์อดใจรอกันนิดครับ หนังสือเล่มใหม่ของแอพซอฟต์แทคมีเรื่องนี้ที่ทำให้คุณเข้าใจได้ไม่อยากนัก


ตารางที่ 7.1 แสดงรีจิสเตอร์ของ PORTD อยู่ที่แอดเดรส 0x2B, รีจิสเตอร์ DDRD อยู่ที่แอดเดรส 0x2A และ รีจิสเตอร์ PIND อยู่ที่แอดเดรส 0x29 และขาพอร์ต Arduino UNO ที่หมายเลข 0, 1, 2, 3, 4, 5, 6, 7 คือขาพอร์ตที่เชื่อมต่ออยู่กับ PORTD เกิดอะไรขึ้นเมื่อท่านใช้คำสั่ง

pinMode(0, OUTPUT);
pinMode(2, OUTPUT);
pinMode(4, OUTPUT);
pinMode(6, OUTPUT);

        เมื่อท่านใช้คำสั่งนี้ ชุดคำสั่งดังกล่าวจะไปกำหนดค่าในรีจิสเตอร์ DDRD (รีจิสเตอร์กำหนดให้ขา PORTD เป็นเอาต์พุต) แล้วเราจะรู้ได้อย่างไรว่ารีจิสเตอร์นี้มีค่าเปลี่ยนแปลงไปตามที่ชุดคำสั่ง pinMode() ได้กระทำ ด้วยโค้ดโปรแกรมตัวอย่างสั้น ๆ นี้แหละครับ เราก็รู้การเปลี่ยนแปลงของรีจิสเตอร์แล้วด้วยตัวแปรแบบพอยน์เตอร์


ความคิดเห็น

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

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

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

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