मेकफाइल-संगत स्केच कैसे लिखें?


9

मैं अपने रेखाचित्र लिखना चाहूंगा ताकि मैं Arduino IDE का उपयोग करके उन्हें बना / अपलोड कर सकूं या वैकल्पिक रूप से GCC और एक मेकफाइल का उपयोग कर सकूं।

मैं शीर्ष पर फ़ंक्शन घोषणाओं को शामिल करने के बारे में जानता हूं, लेकिन मेरे संकलक द्वारा मेरे संकलक को वैध सी ++ मानने के लिए कुछ और करना है?

अपडेट १

यह समझना कि Arduino IDE .ino और .pde फ़ाइलों के लिए क्या करता है, ठीक है, लेकिन मेरे प्रश्न के प्रति असंगत है, इसलिए यह कोई डुप्लिकेट नहीं है। जो मैं जानना चाहता हूं वह है "मैं एक प्रोग्राम कैसे लिखता हूं कि यह Arduino IDE और g ++ दोनों द्वारा मान्य माना जाता है ।

यहां उपलब्ध आधिकारिक (।) मेकफाइल बताता है कि आईडीई के बजाय मेकफाइल का उपयोग करने पर क्या करना है :

# The Arduino environment does preliminary processing on a sketch before
# compiling it.  If you're using this makefile instead, you'll need to do
# a few things differently:
#
#   - Give your program's file a .cpp extension (e.g. foo.cpp).
#
#   - Put this line at top of your code: #include <WProgram.h>
#
#   - Write prototypes for all your functions (or define them before you
#     call them).  A prototype declares the types of parameters a
#     function will take and what type of value it will return.  This
#     means that you can have a call to a function before the definition
#     of the function.  A function prototype looks like the first line of
#     the function, with a semi-colon at the end.  For example:
#     int digitalRead(int pin);

... लेकिन यह स्पष्ट नहीं करता है कि IDE और मेकफाइल दोनों का उपयोग कैसे करें ।

अपडेट २

मुझे हाल ही में PlatformIO मिला, जो सीधे इस सवाल का जवाब नहीं देता है, लेकिन बहुत सारी प्रक्रिया को स्वचालित करता है (आपके लिए स्कैन फ़ाइलें बनाता है) और अब तक मैं Arduino IDE और स्रोत + मेकफाइल दृष्टिकोण दोनों पर वर्कफ़्लो पसंद करता हूं। लेखकों से भी अच्छा सहयोग मिला।


इस प्रकार प्रश्न मेरे ज्ञान से परे है, लेकिन कुछ बातों पर आपको विचार करना होगा, जिसमें Arduino.h फ़ाइल शामिल है। बूटलोडर को शामिल करना; और जो भी हो। मैं इस प्रश्न का अनुसरण
करूंगा

मेरा सुझाव है कि आप Arduino-CMake ( github.com/queezythegreat/arduino-cmc ) पर एक नज़र डालें ।
jfpoilpret


1
आप एक "प्रोग्राम" नहीं लिख सकते हैं जिसे IDE और G ++ दोनों द्वारा सीधे माना जाता है जब तक कि आप कई बलिदान करने के लिए तैयार नहीं होते। इनो से निपटो।
इग्नासियो वाज़केज़-अब्राम्स

1
संलग्न मेकफाइल की टिप्पणियों में, यहाँ मेरा जवाब मिला ।
होसियरेई

जवाबों:


1

Gcc / g ++ से मुझे लगता है कि आप विशेष रूप से avr-gcc / avr-g ++ का उल्लेख कर रहे हैं। आपके arduino कोड को शायद वैध C / C ++ कोड नहीं माना जाएगा क्योंकि gcc आपके पीसी के साथ लक्ष्य प्रणाली के रूप में संकलित करने की कोशिश करेगा। "WProgram.h" में मैक्रों के कई आपके लक्ष्य प्रणाली पर दुर्गम स्मृति का उल्लेख करेंगे।

आपको हेडर फ़ाइल "WProgram.h" प्रदान करना और आप ऊपर कोड Arduino Makefile के साथ अपना कोड बनाते हैं (जो avr-g ++ not g ++ का उपयोग करता है), आपकी cpp फाइलें सही ढंग से संकलित और लिंक होनी चाहिए। इसी तरह, आप आईडीई के भीतर अपने Arduino कोड को खोलने और वहां अपने कोड को सत्यापित करने में सक्षम होंगे। IDE आपके लिए "WProgram.h" फाइल डालता है, इसलिए तकनीकी रूप से इसे दो बार शामिल किया जाएगा। हालांकि, शामिल गार्ड किसी भी डुप्लिकेट कोड को संकलित होने से रोकेंगे।


1

आम तौर पर आपको setup()और loop()कार्यों को बताने की आवश्यकता होगी , वे सिर्फ आईडीई के रैपर हैं:

void setup() {}
void loop() {}

int main() {
  setup();
  while (1)
    loop();

  return 0; // never reached
}

यह IDE और कमांड लाइन दोनों पर काम करता है। जैसा कि आप IDE में बोर्ड और SerialPort निर्दिष्ट करते हैं, आपको Makefile में दोनों को निर्दिष्ट करने की भी आवश्यकता होगी। तो आप दो कॉन्फ़िगरेशन के साथ समाप्त करेंगे।

बहुत से लोग आईडीई छोड़ देते हैं क्योंकि वे विभिन्न संपादकों का उपयोग करना पसंद करते हैं या कंपाइलर और लिंकर स्विच सेट करके अधिक कॉन्फ़िगरेशन विकल्प होते हैं।

इसे वास्तव में आसान बनाने के लिए, आप Arduino Makefile का उपयोग कर सकते हैं । आज 347 में अभिनय किया।

यहाँ एक उदाहरण मेकफाइल:

# try: make help
#
include /usr/share/arduino/Arduino.mk
ARDUINO_DIR = /usr/share/arduino
# list boards with: make show_boards
BOARD_TAG = promicro16
ARDUINO_LIBS = EEPROM 
# MONITOR_CMD = picocom -b 9600
MONITOR_CMD = moni -config ACM0-9600.cfg
ARDUINO_PORT = /dev/serial/by-id/usb-Arduino_LLC_Arduino_Leonardo-if00
# ARDUINO_PORT = /dev/ttyACM0
# ARDUINO_PORT = /dev/ttyUSB0
OPTIMIZATION_FLAGS = -Os -fexpensive-optimizations -fstrength-reduce
#

'* .Ino' फ़ाइलों को बदलने की आवश्यकता नहीं है और Makefileफ़ाइल को उसी निर्देशिका में रखा जाना है।

इस बीच मैं Makefileरास्ता पसंद करता हूं , लेकिन मैं अभी भी छोटी परियोजनाओं के लिए आईडीई का उपयोग करता हूं।


1

जो मैं जानना चाहता हूं वह है "मैं एक प्रोग्राम कैसे लिखता हूं कि यह Arduino IDE और g ++ दोनों द्वारा मान्य माना जाता है।

देखें: आईडीई स्केच फ़ाइल के प्री -प्रोसेसिंग के झगड़े से कैसे बचें

इस समय के लिए उपेक्षा करना कि मेकफाइल कैसा दिखेगा, आपके प्रश्न का सरल उत्तर, जैसा कि उपरोक्त लिंक में चर्चा की गई है, सब कुछ IDE में .cpp और .h टैब में डालना है और मुख्य "स्केच" (-ino) छोड़ना है। फ़ाइल) रिक्त। यह अभी भी आईडीई के तहत संकलित करेगा, और इसलिए सामान्य सी ++ भी होगा।

सुनिश्चित करें कि आप अपनी .cpp फाइलें शुरू करते हैं:

#include <Arduino.h>

यदि आप पुस्तकालयों का उपयोग करते हैं (उदाहरण के लिए, SPI) तो आपको उन्हें मुख्य स्केच फ़ाइल में शामिल करना होगा, जो कि IDE को अस्थायी प्रोजेक्ट बिल्ड फ़ाइल में कॉपी करने के लिए ट्रिगर करता है। Makefile उस बारे में परवाह नहीं करेगा, जैसा कि आप सुनिश्चित करेंगे कि आपके Makefile में सभी आवश्यक लाइब्रेरी फ़ाइलें शामिल हैं।

यहां मेरा उत्तर भी देखें: कक्षाएं और ऑब्जेक्ट्स: मुझे वास्तव में उनका उपयोग करने के लिए कितने और कौन से फ़ाइल प्रकार की आवश्यकता है?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.