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
) के साथ एक साथ जुड़े हुए हैं ।
इस सबका एक दुष्परिणाम यह है कि आप मुख्य स्केच (.ino फाइलें) को सभी अभिप्रायों और उद्देश्यों के लिए C ++ मान सकते हैं। यदि आप सावधान नहीं हैं तो फंक्शन प्रोटोटाइप पीढ़ी अस्पष्ट संदेश भेज सकती है।
प्री-प्रोसिजर क्वर्की से परहेज
इन idiosyncrasies से बचने का सबसे सरल तरीका है कि आप अपने मुख्य स्केच को खाली छोड़ दें (और किसी अन्य .ino
फाइल का उपयोग न करें )। फिर दूसरा टैब (एक .cpp
फ़ाइल) बनाएं और उसमें अपना सामान इस तरह डालें:
#include <Arduino.h>
// put your sketch here ...
void setup ()
{
} // end of setup
void loop ()
{
} // end of loop
ध्यान दें कि आपको शामिल करने की आवश्यकता है Arduino.h
। आईडीई मुख्य स्केच के लिए स्वचालित रूप से करता है, लेकिन अन्य संकलन इकाइयों के लिए, आपको यह करना होगा। अन्यथा यह स्ट्रिंग, हार्डवेयर रजिस्टरों आदि जैसी चीजों के बारे में नहीं जानता होगा।
सेटअप / मुख्य प्रतिमान से परहेज
आपको सेटअप / लूप अवधारणा के साथ नहीं चलना है। उदाहरण के लिए, आपकी .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 फ़ाइल को अपने मुख्य .ino फ़ाइल के समान नाम न दें। चूंकि .ino फाइल प्रभावी रूप से .cpp फाइल बन जाती है, इससे आपको एक नाम भी मिल जाएगा।
उसी, एकल .ino फ़ाइल में C ++ - शैली वर्ग की घोषणा (के बारे में सुना है, लेकिन कभी काम करते हुए नहीं देखा - यह भी संभव है?);
हां, यह ठीक है:
class foo {
public:
};
foo bar;
void setup () { }
void loop () { }
हालाँकि, आप सामान्य अभ्यास का पालन करने के लिए संभवतः सबसे अच्छा हैं: अपनी घोषणाओं को .h
फाइलों में और अपनी परिभाषाओं (कार्यान्वयन) को .cpp
(या .c
) फाइलों में डालें ।
"शायद" क्यों?
जैसा कि मेरा उदाहरण दिखाता है कि आप एक फ़ाइल में सब कुछ एक साथ रख सकते हैं । बड़ी परियोजनाओं के लिए अधिक संगठित होना बेहतर है। आखिरकार आप एक मध्यम से बड़े आकार की परियोजना में मंच पर पहुंच जाते हैं, जहां आप चीजों को "ब्लैक बॉक्स" में अलग करना चाहते हैं - अर्थात, एक वर्ग जो एक काम करता है, वह अच्छी तरह से करता है, परीक्षण किया जाता है, और स्व-निहित है ( जहां तक संभव हो)।
यदि यह वर्ग आपके प्रोजेक्ट में कई अन्य फ़ाइलों में उपयोग किया जाता है, तो यह वह जगह है जहाँ अलग .h
और .cpp
फ़ाइलें चलन में आती हैं।
.h
फ़ाइल वाणी वर्ग - यह है कि, यह पता करने के लिए यह क्या करता है अन्य फ़ाइलों के लिए पर्याप्त विस्तार, यह है क्या कार्य प्रदान करता है, और वे कैसे कहा जाता है।
.cpp
फ़ाइल परिभाषित करता है (औजार) वर्ग - यह है कि, यह वास्तव में काम करता है, और स्थिर वर्ग के सदस्यों को प्रदान करता है, उस वर्ग बनाने के अपने काम करते हैं। चूंकि आप केवल इसे एक बार लागू करना चाहते हैं, यह एक अलग फाइल में है।
.h
फ़ाइल क्या अन्य फ़ाइलों में शामिल हो जाता है। .cpp
फ़ाइल वर्ग कार्यों को लागू करने आईडीई द्वारा एक बार संकलित किया गया है।
पुस्तकालय
यदि आप इस प्रतिमान का पालन करते हैं, तो आप पूरी कक्षा ( .h
और .cpp
फाइलों) को एक पुस्तकालय में आसानी से स्थानांतरित करने के लिए तैयार हैं। फिर इसे कई परियोजनाओं के बीच साझा किया जा सकता है। सभी आवश्यक है कि एक फ़ोल्डर (जैसे। बनाने के लिए है myLibrary
) और डाल .h
और .cpp
इसे में फ़ाइलों (जैसे। myLibrary.h
और myLibrary.cpp
) और फिर अपने अंदर इस फ़ोल्डर में डाल दिया libraries
है, जहां आपके नमूने रखे गए हैं फ़ोल्डर (नोटबुक फ़ोल्डर) में फ़ोल्डर।
IDE को पुनरारंभ करें और यह अब इस लाइब्रेरी के बारे में जानता है। यह वास्तव में बहुत सरल है, और अब आप इस पुस्तकालय को कई परियोजनाओं पर साझा कर सकते हैं। मैं यह बहुत कुछ करता हूं।
थोड़ा और विस्तार यहाँ ।