ทำไมไฟล์ '.ino` ต้องอยู่ในโฟลเดอร์ชื่อเดียวกัน?


12

ฉันพยายามจัดระเบียบโครงการที่ซับซ้อนมากและฉันต้องการวางโค้ดจริงทั้งหมดในโฟลเดอร์ชื่อsrc(ซอร์ส) แต่ฉันต้องการเก็บ.inoไฟล์หลักไว้เป็นmain.ino(มันจะอยู่ในsrc) จากนั้นเมื่อฉันพยายามที่จะเปิดรหัส IDE บอกว่าจะต้องมีในโฟลเดอร์ชื่อmain.inomain

ทำไมนี้

ฉันเข้าใจข้อความแสดงข้อผิดพลาด แต่ทำไมการตั้งชื่อไฟล์ใน Arduino จึงเป็นเช่นนั้น มีวิธีในการเปลี่ยนแปลงหรือไม่?

คำตอบ:


6

AFAIK ที่เป็นมุมแหลมที่สร้างขึ้นใน Arduino IDE วิธีแก้ปัญหาที่ดีที่สุดที่ฉันคิดได้คือโครงสร้างไฟล์ที่ชอบ:

ArduinoWorkspace --- /myproj/ ----+ /src/ --------+ myproj.cpp
                                  + myproj.ino    + sensor.h
                                                  + sensor.cpp
                                                  + (more files)

ที่ myproj.cpp เพียง#includemain.cpp สิ่งนี้จะทำให้ไฟล์โครงการของคุณ "สะอาด" เช่นที่ควรทำงานในสภาพแวดล้อมปกติเช่นกัน

ปรับปรุง:

ฉันยืมชื่อ "main" จากคำถามของคุณ แต่เมื่อพิจารณาแล้ว "main" เป็นชื่อที่สงวนไว้โดยเฉพาะทุกโปรแกรม C หรือ C ++ มี main.c หรือ main.cpp เป็นรหัสระดับสูงสุดโดยระบบหาก คุณไม่ได้ให้หนึ่ง ดังนั้นฉันจึงหลีกเลี่ยงการใช้มันเป็นโฟลเดอร์ - และชื่อโครงการ (แต่อย่าลังเลที่จะลอง) และฉันได้อัปเดตไดอะแกรมแล้ว สิ่งที่คุณต้องมีคือโฟลเดอร์โครงการและไฟล์. io ภายในชื่อเดียวกัน ไฟล์. ini สามารถ

#include <src/anything-else-you-like>

เช่นไฟล์รหัสระดับสูงสุดของคุณจึงดึงทุกอย่างอื่น คุณอาจต้องการ. ino ของคุณไป#includeยังไฟล์แต่ละไฟล์ในsrcโฟลเดอร์ถ้าคอมไพเลอร์ไม่ได้คิดออกเองว่าเป็นไฟล์อื่นของคุณ

BTW ถ้าคุณใช้ชื่อ main.cpp สำหรับไฟล์บนสุดของคุณมันจะต้องเรียกใช้ฟังก์ชั่น setup () และ loop () (และฟังก์ชั่นเหตุการณ์อนุกรมหากคุณใช้ไฟล์นั้น) อาจเป็นการดีที่สุดที่จะปล่อยให้ชื่อ 'main' อยู่ตามลำพังปล่อยให้ระบบนำเสนอหลักเดียวกันทุกโปรแกรม Arduino โดยค่าเริ่มต้นและเขียนรหัสโครงการของคุณตามวิธี Arduino โดยทั่วไป - เริ่มต้นด้วย setup () และ loop ()


myproj.cppคุณหมายถึงmyproj.inoอะไร เพราะฉันไม่เห็นว่าmyproj.cppอยู่ที่ไหน!
Dat Ha

ตกลงปัญหาเล็กน้อยถ้าฉันทำเช่นนี้ฟังก์ชั่นพื้นฐานบางอย่างของ Arduino (เช่น map () และ analogRead ()) ที่อยู่ใน sensor.cpp จะไม่รู้จักคอมไพเลอร์
Dat Ha

หรือถ้าทำงานบนกล่อง Windows ให้ใช้คำสั่ง junction และ "link" ไดเรกทอรีชื่ออย่างถูกต้องไปยังไดเรกทอรีที่มีชื่อที่ดีกว่า หรือหากทำงานบนกล่อง Linux ให้ใช้คำสั่ง symbolic link เพื่อทำสิ่งเดียวกัน
st2000

(ดูการอัปเดตของฉัน - ไฟล์. io ของคุณอาจต้องรวมไฟล์อื่น ๆ )
JRobert

3

เมื่อคุณมีโครงการที่ประกอบด้วย.INOไฟล์จำนวนหนึ่งIDE จะทราบได้อย่างไรว่าเป็น "หลัก" ระหว่างการคอมไพล์ IDE เชื่อม.INOไฟล์ทั้งหมดเข้าด้วยกันเป็นไฟล์เดียว มันเริ่มจากตัว "main" และต่อท้ายตัวอักษรอื่น ๆ ตามลำดับ

มันทำแบบนี้เพื่อให้ตัวแปร include และโกลบอลของคุณซึ่งคุณควรใส่ไว้ใน.INOไฟล์"main" เป็นจุดเริ่มต้นของโปรแกรมที่เสร็จสิ้นแล้ว

เพื่อที่จะทำสิ่งนี้ IDE ต้องรู้ว่าไฟล์ใดเป็นไฟล์ "main" และวิธีการทำงานที่ออกมาคือการหาสิ่งที่มีชื่อเดียวกันกับโฟลเดอร์ที่ร่างอยู่

ในUECIDEฉันก้าวไปอีกขั้นแล้วเปลี่ยนทั้งโฟลเดอร์เป็นเอกสารประกอบเพื่อให้คุณไม่ต้องเข้าโฟลเดอร์และเปิด.INOไฟล์เพื่อเปิดภาพร่างอีกต่อไป - โฟลเดอร์ที่แท้จริงคือโครงการร่างทั้งหมด มีการระบุโฟลเดอร์ประเภทนี้อีกครั้งว่ามี.INOไฟล์อยู่ภายในซึ่งมีชื่อเหมือนกับโฟลเดอร์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.