Makefile uyumlu çizimler nasıl yazılır?


9

Çizimlerimi Arduino IDE kullanarak veya isteğe bağlı olarak GCC ve bir makefile kullanarak oluşturabilmem / yükleyebilmem için yazmak istiyorum.

En üstteki işlev bildirimlerini dahil etmeyi biliyorum, ancak benim kroki derleyici tarafından geçerli C ++ olarak kabul edilmesi için başka bir şey var mı?

Güncelleme 1

Arduino IDE'nin .ino ve .pde dosyalarına ne yaptığını anlamak iyi, ancak sorum için yabancı, bu yüzden bu bir kopya değil. Bilmek istediğim şey "Arduino IDE hem de g ++ tarafından geçerli sayılan bir programı nasıl yazarım .

Burada bulunan resmi (?) Makefile , IDE yerine makefile kullanılırsa ne yapılacağını açıklar :

# 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);

... ancak bu hem IDE'nin hem de bir makefile'ın nasıl kullanılacağını açıklamıyor .

Güncelleme 2

Kısa süre önce bu soruya doğrudan cevap vermeyen, ancak sürecin çoğunu otomatikleştiren (sizin için Scons dosyaları oluşturur) PlatformIO'yu buldum ve şimdiye kadar hem Arduino IDE hem de kaynak + makefile yaklaşımına göre iş akışını tercih ediyorum. Yazarlardan da iyi destek aldık.


Bu yüzden soru bilgimin çok ötesinde, ancak dikkate almanız gereken bazı şeyler Arduino.h dosyasının dahil edilmesidir. Önyükleyicinin dahil edilmesi; ve başka ne varsa. Bu soruyu takip edeceğim :)
Madivad



1
Bir dizi fedakarlık yapmak istemediğiniz sürece, hem IDE hem de G ++ tarafından geçerli kabul edilen bir "program" yazamazsınız. Ino ile ilgilen.
Ignacio Vazquez-Abrams

1
Cevabımı burada , ekli makefile'ın yorumlarında buldum .
hoosierEE

Yanıtlar:


1

Gcc / g ++ ile özellikle avr-gcc / avr-g ++ 'dan bahsettiğinizi düşünüyorum. Arduino kodunuz muhtemelen geçerli C / C ++ kodu olarak kabul edilmeyecektir, çünkü gcc hedef sistem olarak PC'nizle derlemeye çalışacaktır. "WProgram.h" içindeki Makroların birçoğu, hedef sisteminizdeki erişilemeyen bellek anlamına gelir.

"WProgram.h" başlık dosyasını dahil etmenizi ve kodunuzu yukarıdaki Arduino Makefile ile (gr değil avr-g ++ kullanan) oluşturursanız, cpp dosyalarınızın derlenmesi ve doğru bir şekilde bağlanması gerekir. Benzer şekilde, Arduino kodunuzu IDE içinde açabilir ve kodunuzu orada doğrulayabilirsiniz. IDE sizin için "WProgram.h" dosyasını koyar, bu nedenle teknik olarak iki kez eklenir. Ancak, içerme korumaları yinelenen kodların derlenmesini önleyecektir.


1

Genellikle setup()ve loop()işlevlerini belirtmeniz gerekir , bunlar sadece IDE'nin sarmalayıcılarıdır:

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

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

  return 0; // never reached
}

Bu hem IDE'de hem de komut satırında çalışır. IDE'de Board ve SerialPort'u belirtirken, her ikisini de Makefile'de belirtmeniz gerekir. Böylece iki konfigürasyon elde edersiniz.

Birçok kişi IDE'den ayrılır çünkü farklı editörler kullanmayı tercih eder veya derleyici ve bağlayıcı anahtarlarını ayarlayarak daha fazla yapılandırma seçeneğine sahiptir.

Bunu gerçekten kolaylaştırmak için Arduino Makefile'yi kullanabilirsiniz . Bugün 347 ile oynadı.

İşte bir örnek Makefile:

# 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
#

'* .İno' dosyalarının değiştirilmesi gerekmez ve Makefiledosya aynı dizine yerleştirilir.

Bu arada Makefileyolu tercih ediyorum , ancak yine de IDE'yi küçük projeler için kullanıyorum.


1

Bilmek istediğim şey "Arduino IDE hem de g ++ tarafından geçerli sayılan bir programı nasıl yazarım.

Bkz: IDE taslak dosyası önişlemenin tuhaflıklarından kaçınma .

Makefile'in nasıl görüneceği anı göz ardı ederek, yukarıdaki bağlantıda tartışıldığı gibi sorunuzun basit cevabı, her şeyi IDE'deki .cpp ve .h sekmelerine koymak ve ana "kroki" yi (.ino) bırakmaktır. dosya) boş. Bu hala IDE altında derlenecek ve bu nedenle normal C ++ olacaktır.

.Cpp dosyalarınızı şunlarla başlattığınızdan emin olun:

#include <Arduino.h>

Kütüphaneler (örn. SPI) kullanıyorsanız, bunları ana taslak dosyasına eklemelisiniz, bu da IDE'yi geçici proje oluşturma dosyasına kopyalamak için tetikler. Makefile bununla ilgilenmez, çünkü Makefile'nizin gerekli tüm kütüphane dosyalarını içerdiğinden emin olursunuz.

Ayrıca cevabımı burada görebilirsiniz: Sınıflar ve nesneler: kaç tane ve hangi dosya türlerini kullanmam gerekiyor?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.