วันอาทิตย์ที่ 11 พฤษภาคม พ.ศ. 2557

Arduino : Pass by Reference struct pointer แล้ว compiler error

Standard
     พอดีมีเหตุให้ตองใช้ struct ใน Arduino และก็ชอบเขียนแบบ pass by reference พอ คอมไฟล์ อ้าว error !!! งง เลยสิ หาตั้งนาน ปรากฏว่า Arduino IDE มันไม่ฉลาด (Version ที่ใช้ 1.0.5) ลองดู code




     ไฟล์แรก (arduino_code.c) เป็นไฟล์ที่เขียนที่ Arduino IDE เราเขียน struct ขึ้นก่อนจากนั้นค่อยสร้าง function my_fn
แต่ทีนี้พอ compile Arduino IDE จัดการกับ code เราใหม่ ดูจากไฟล์ที่ 2 (arduino_code2.c) Arduino IDE ได้ copy ชื่อ function ไปทำเป็น function prototype แล้วค่อย ประกาศ struct เวลาไป คอมไฟล์มันก็เลย error สิ

แล้ววิธีแก้ล่ะ จริงมันก็ทำได้หลายวิธี ผมเสนอ 2 วิธี

  • ใช้ void * แทนชื่อ struct แล้วใน function ก็ค่อย cast ค่าไปเป็น struct ของเรา (arduino_code3.c)
  • สร้างไฟล์ struct.h (arduino_code_st.h) มาเขียน struct ทั้งหมดในนั้น แล้วค่อย include เข้ามา (arduino_code4.c)


Note : ไฟล์ arduino_code_st.h ต้องไปสร้างไว้ที่ Folder Library ของ Arduino นะครับ แล้วก็สร้าง folder ชื่อเดียวกับชื่อไฟล์ ที่จะ include เข้ามาด้วย ซึ่งในตัวอย่างจะอยู่ที่ ARDUINO_LIBRARY/arduino_code_st/arduino_code_st.h

0 ความคิดเห็น:

แสดงความคิดเห็น