IDE จัดระเบียบสิ่งต่าง ๆ อย่างไร
สิ่งแรกคือวิธีที่ IDE จัด "สเก็ตช์" ของคุณ:
.ino
ไฟล์หลักเป็นชื่อเดียวกับโฟลเดอร์ที่มีอยู่ดังนั้นสำหรับfoobar.ino
ในfoobar
โฟลเดอร์ - ไฟล์หลักคือ foobar.ino
.ino
ไฟล์อื่น ๆในโฟลเดอร์นั้นต่อกันเข้าด้วยกันตามลำดับตัวอักษรท้ายไฟล์หลัก (ไม่ว่าไฟล์หลักจะเป็นตัวอักษรที่ใดก็ตาม)
- ไฟล์ที่ต่อกันนี้จะกลายเป็น
.cpp
ไฟล์ (เช่นfoobar.cpp
) - มันอยู่ในโฟลเดอร์การรวบรวมชั่วคราว
- ตัวประมวลผลล่วงหน้า "ช่วย" สร้างฟังก์ชันต้นแบบสำหรับฟังก์ชันที่พบในไฟล์นั้น
- สแกนไฟล์หลักสำหรับ
#include <libraryname>
คำสั่ง สิ่งนี้ทริกเกอร์ IDE เพื่อคัดลอกไฟล์ที่เกี่ยวข้องทั้งหมดจากแต่ละไลบรารี (ที่กล่าวถึง) ลงในโฟลเดอร์ชั่วคราวและสร้างคำแนะนำในการรวบรวม
- ใด ๆ
.c
, .cpp
หรือ.asm
ไฟล์ในโฟลเดอร์ร่างจะมีการเพิ่มการสร้างกระบวนการเป็นหน่วยรวบรวมแยกต่างหาก (นั่นคือพวกเขาจะรวบรวมในทางปกติเป็นไฟล์ที่แยกต่างหาก)
.h
ไฟล์ใด ๆจะถูกคัดลอกไปยังโฟลเดอร์การรวบรวมชั่วคราวด้วยดังนั้นไฟล์ดังกล่าวสามารถเรียกได้โดยไฟล์. c หรือ. cpp
- คอมไพเลอร์เพิ่มลงในไฟล์มาตรฐานกระบวนการสร้าง (เช่น
main.cpp
)
- กระบวนการสร้างจากนั้นรวบรวมไฟล์ทั้งหมดข้างต้นเป็นไฟล์วัตถุ
- หากขั้นตอนการคอมไพล์สำเร็จพวกเขาจะเชื่อมโยงเข้าด้วยกันพร้อมกับไลบรารีมาตรฐาน AVR (เช่นให้คุณ
strcpy
เป็นต้น)
ผลข้างเคียงของสิ่งนี้คือคุณสามารถพิจารณาภาพร่างหลัก (ไฟล์. io) ให้เป็น C ++ ตามความตั้งใจและวัตถุประสงค์ทั้งหมด การสร้างฟังก์ชันต้นแบบ แต่สามารถนำไปสู่ข้อความแสดงข้อผิดพลาดที่ชัดเจนหากคุณไม่ระวัง
หลีกเลี่ยงนิสัยที่ประมวลผลล่วงหน้า
วิธีที่ง่ายที่สุดในการหลีกเลี่ยงไอดีเหล่านี้คือปล่อยให้ร่างหลักของคุณว่างเปล่า (และไม่ใช้.ino
ไฟล์อื่น ๆ) จากนั้นให้แท็บอื่น (เป็น.cpp
ไฟล์) และนำสิ่งที่คุณเป็นมันเช่นนี้
#include <Arduino.h>
// put your sketch here ...
void setup ()
{
} // end of setup
void loop ()
{
} // end of loop
Arduino.h
โปรดทราบว่าคุณจำเป็นต้องมี IDE ทำเช่นนั้นโดยอัตโนมัติสำหรับร่างหลัก แต่สำหรับหน่วยการคอมไพล์อื่น ๆ คุณต้องทำ มิฉะนั้นจะไม่รู้เกี่ยวกับสิ่งต่าง ๆ เช่น String การลงทะเบียนฮาร์ดแวร์ ฯลฯ
หลีกเลี่ยงกระบวนทัศน์การติดตั้ง / หลัก
คุณไม่จำเป็นต้องรันด้วยแนวคิดเซ็ตอัพ / ลูป ตัวอย่างเช่นไฟล์. cpp ของคุณสามารถ:
#include <Arduino.h>
int main ()
{
init (); // initialize timers
Serial.begin (115200);
Serial.println ("Hello, world");
Serial.flush (); // let serial printing finish
} // end of main
รวมกำลังห้องสมุด
หากคุณเรียกใช้ด้วยแนวคิด "ภาพร่างว่างเปล่า" คุณยังคงต้องรวมไลบรารีที่ใช้ที่อื่นในโครงการตัวอย่างเช่นใน.ino
ไฟล์หลักของคุณ:
#include <Wire.h>
#include <SPI.h>
#include <EEPROM.h>
นี่เป็นเพราะ IDE สแกนเฉพาะไฟล์หลักเพื่อใช้งานไลบรารี อย่างมีประสิทธิภาพคุณสามารถพิจารณาไฟล์หลักเป็นไฟล์ "โครงการ" ซึ่งเสนอว่ามีการใช้งานไลบรารีภายนอกใด
ปัญหาการตั้งชื่อ
อย่าตั้งชื่อภาพร่างหลักของคุณ "main.cpp" - IDE จะรวม main.cpp ของตัวเองด้วยดังนั้นคุณจะมีซ้ำหากคุณทำเช่นนั้น
อย่าตั้งชื่อไฟล์. cpp ของคุณด้วยชื่อเดียวกับไฟล์. io ของคุณ เนื่องจากไฟล์. ini กลายเป็นไฟล์. cpp ได้อย่างมีประสิทธิภาพสิ่งนี้จะทำให้คุณมีการปะทะกันของชื่อ
ประกาศคลาส C ++ ในไฟล์. ini ไฟล์เดียว (เคยได้ยิน แต่ไม่เคยเห็นการทำงาน - เป็นไปได้ไหม?);
ใช่คอมไพล์นี้ตกลง:
class foo {
public:
};
foo bar;
void setup () { }
void loop () { }
อย่างไรก็ตามคุณอาจจะดีที่สุดที่จะปฏิบัติตามปกติ: ใส่การประกาศของคุณใน.h
ไฟล์และคำจำกัดความของคุณ (การใช้งาน) ใน.cpp
(หรือ.c
) ไฟล์
ทำไม "อาจจะ"
ตัวอย่างของฉันแสดงให้เห็นว่าคุณสามารถรวบรวมทุกอย่างไว้ในไฟล์เดียว สำหรับโครงการขนาดใหญ่จะดีกว่าที่จะจัดระเบียบมากขึ้น ในที่สุดคุณก็ขึ้นสู่เวทีในโครงการขนาดกลางถึงขนาดใหญ่ที่คุณต้องการแยกสิ่งต่าง ๆ ออกเป็น "กล่องดำ" - นั่นคือคลาสที่ทำสิ่งใดสิ่งหนึ่งทำได้ดีผ่านการทดสอบและอยู่ในตัวเอง ( เท่าที่จะทำได้)
หากคลาสนี้ถูกใช้ในไฟล์อื่นหลายไฟล์ในโครงการของคุณนี่คือที่ที่แยก.h
และ.cpp
ไฟล์เข้ามาเล่น
.h
ไฟล์ประกาศคลาส - นั่นคือจะให้รายละเอียดเพียงพอสำหรับไฟล์อื่น ๆ ที่จะรู้ว่าสิ่งที่มันไม่สิ่งที่ฟังก์ชั่นมันมีและวิธีการที่พวกเขาเรียกว่า
.cpp
ไฟล์กำหนด (การดำเนินการ) ชั้น - นั่นคือจริง ๆ แล้วมันยังมีฟังก์ชั่นและสมาชิกระดับคงที่ที่ทำให้ชั้นเรียนทำสิ่งที่ตน เนื่องจากคุณต้องการนำไปใช้เพียงครั้งเดียวนี่เป็นไฟล์แยกต่างหาก
.h
ไฟล์คือสิ่งที่ได้รับการรวมอยู่ในไฟล์อื่น ๆ .cpp
ไฟล์จะรวบรวมครั้งโดย IDE ที่จะใช้ฟังก์ชั่นการเรียน
ห้องสมุด
หากคุณทำตามกระบวนทัศน์นี้คุณก็พร้อมที่จะย้ายชั้นเรียนทั้งหมด ( .h
และ.cpp
ไฟล์) ไปยังไลบรารีได้อย่างง่ายดายมาก จากนั้นสามารถแชร์ระหว่างหลายโครงการ ทั้งหมดที่จำเป็นคือการทำให้โฟลเดอร์ (เช่น. myLibrary
) และใส่.h
และ.cpp
ไฟล์ลง (เช่น. myLibrary.h
และmyLibrary.cpp
) แล้วใส่โฟลเดอร์นี้ภายในของคุณlibraries
โฟลเดอร์ในโฟลเดอร์ที่สเก็ตช์ของคุณจะถูกเก็บไว้ (โฟลเดอร์สมุด) ที่
รีสตาร์ท IDE และตอนนี้รู้เกี่ยวกับไลบรารีนี้แล้ว มันง่ายมาก ๆ และตอนนี้คุณสามารถแชร์ไลบรารีนี้กับหลาย ๆ โครงการได้ ฉันทำสิ่งนี้มาก
รายละเอียดอีกเล็กน้อยที่นี่