ผมนี่… ต้องพอยน์เตอร์เลย
คอลัมน์ "แกะเกา 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() ได้กระทำ ด้วยโค้ดโปรแกรมตัวอย่างสั้น ๆ นี้แหละครับ เราก็รู้การเปลี่ยนแปลงของรีจิสเตอร์แล้วด้วยตัวแปรแบบพอยน์เตอร์
ผู้เขียน: 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() ได้กระทำ ด้วยโค้ดโปรแกรมตัวอย่างสั้น ๆ นี้แหละครับ เราก็รู้การเปลี่ยนแปลงของรีจิสเตอร์แล้วด้วยตัวแปรแบบพอยน์เตอร์
ความคิดเห็น
แสดงความคิดเห็น