IDE işleri nasıl organize ediyor?
İlk olarak, IDE "çiziminizi" şu şekilde düzenler:
- Ana
.ino
. Dosyası, için, So bulunduğu klasörün aynı adı biridir foobar.ino
içinde foobar
klasörde - Ana dosya foobar.ino olduğunu.
.ino
Bu klasördeki diğer dosyalar, ana dosyanın sonunda alfabetik sırayla birleştirilir (ana dosyanın nerede olduğuna bakılmaksızın alfabetik olarak).
- Bu birleştirilmiş dosya bir
.cpp
dosya (örn. foobar.cpp
) Haline gelir - geçici bir derleme klasörüne yerleştirilir.
- Önişlemci "yardımcı olarak" bu dosyada bulduğu işlevler için işlev prototipleri oluşturur.
- Ana dosya
#include <libraryname>
yönergeler için taranır . Bu, IDE'yi her bir (belirtilen) kitaplıktaki tüm ilgili dosyaları geçici klasöre kopyalamak ve bunları derlemek için talimatlar oluşturmak üzere tetikler.
- Herhangi
.c
, .cpp
ya .asm
kroki klasördeki dosyaları (olduğunu, bunlar ayrı dosyalar olarak normal şekilde derlenmiştir) ayrı derleme birimleri olarak inşa sürecine eklenir
- Tüm
.h
dosyalar da geçici derleme klasörüne kopyalanır, böylece .c veya .cpp dosyalarınız tarafından başvurulabilir.
- Derleyici derleme işlemi standart dosyalarına ekler (gibi
main.cpp
)
- Derleme işlemi, yukarıdaki tüm dosyaları nesne dosyalarına derler.
- Derleme aşaması başarılı olursa, bunlar AVR standart kitaplıklarıyla (örneğin, size vermek
strcpy
vb.) Birlikte bağlanır.
Tüm bunların bir yan etkisi, ana çizimin (.ino dosyaları) tüm amaç ve amaçlar için C ++ olduğunu düşünebilirsiniz. Ancak işlev prototipi oluşturma, dikkatli değilseniz karanlık hata mesajlarına yol açabilir.
İşlemci öncesi tuhaflıklardan kaçınma
Bu özelliklerden kaçınmanın en basit yolu ana çiziminizi boş bırakmak (ve başka .ino
dosyalar kullanmamak ). Sonra başka bir sekme (bir .cpp
dosya) yapın ve dosyalarınızı şu şekilde içine yerleştirin:
#include <Arduino.h>
// put your sketch here ...
void setup ()
{
} // end of setup
void loop ()
{
} // end of loop
Eklemeniz gerektiğini unutmayın Arduino.h
. IDE bunu ana çizim için otomatik olarak yapar, ancak diğer derleme birimleri için bunu yapmanız gerekir. Aksi takdirde String, donanım kayıtları vb.
Kurulumdan / ana paradigmadan kaçınma
Setup / loop konseptiyle çalıştırmak zorunda değilsiniz. Örneğin, .cpp dosyanız şunlar olabilir:
#include <Arduino.h>
int main ()
{
init (); // initialize timers
Serial.begin (115200);
Serial.println ("Hello, world");
Serial.flush (); // let serial printing finish
} // end of main
Kütüphaneye dahil edilmeyi zorla
"Boş çizim" konseptiyle çalıştırıyorsanız, projenin başka bir yerinde, örneğin ana .ino
dosyanızda kullanılan kütüphaneleri de eklemeniz gerekir :
#include <Wire.h>
#include <SPI.h>
#include <EEPROM.h>
Bunun nedeni, IDE'nin ana dosyayı yalnızca kitaplık kullanımı için taramasıdır. Ana dosyayı etkin olarak, hangi harici kütüphanelerin kullanımda olduğunu belirleyen bir "proje" dosyası olarak düşünebilirsiniz.
Adlandırma sorunları
Ana çiziminize "main.cpp" adını vermeyin - IDE kendi main.cpp dosyasını içerir, böylece bunu yaparsanız bir kopyasına sahip olursunuz.
.Cpp dosyanızı ana .ino dosyanızla aynı adla adlandırmayın. .İno dosyası etkin bir şekilde bir .cpp dosyası haline geldiğinden, bu size bir ad çakışması da verir.
Aynı tek bir .ino dosyasında bir C ++ tarzı sınıf bildirmek (duymuş, ancak hiç çalışmadı - bu bile mümkün mü?);
Evet, bu TAMAM derler:
class foo {
public:
};
foo bar;
void setup () { }
void loop () { }
Bununla birlikte, muhtemelen normal uygulamayı takip etmek için en iyisiniz: Bildirimlerinizi .h
dosyalara ve tanımlarınızı (uygulamalarınızı) .cpp
(veya .c
) dosyalara koyun .
Neden "muhtemelen"?
Örneğim gibi her şeyi tek bir dosyada bir araya getirebilirsiniz . Daha büyük projeler için daha organize olmak daha iyidir. Sonunda, işleri "kara kutulara" ayırmak istediğiniz orta ila büyük boyutlu bir projede sahneye çıkıyorsunuz - yani, bir şeyi yapan, iyi yapan, test edilen ve kendi kendine yeten bir sınıf ( olabildiğince uzağa).
Bu sınıf daha sonra projenizdeki diğer birden fazla dosyada kullanılırsa, ayrı .h
ve .cpp
dosyaların oynatıldığı yer burasıdır .
.h
Dosya beyan sınıf - olduğunu, bunun neler işlevleri ne yaptığını bilmek diğer dosyalar için yeterli ayrıntı sağlar ve nasıl denir.
.cpp
Dosya tanımlar (uygular) sınıfı - sınıfını yapmak, aslında fonksiyonlar ve statik sınıf üyelerini içerir, onun şey. Yalnızca bir kez uygulamak istediğiniz için, bu ayrı bir dosyadadır.
.h
Dosya diğer dosyalar dahil olur şeydir. .cpp
Dosya sınıfı fonksiyonlarını uygulamak amacıyla IDE tarafından bir kez derlenmektedir.
Kütüphaneler
Bu paradigmayı izlerseniz, tüm sınıfı ( .h
ve .cpp
dosyaları) kolayca bir kütüphaneye taşımaya hazırsınız demektir . Daha sonra birden fazla proje arasında paylaşılabilir. Tek yapmanız gereken bir klasör (örn. myLibrary
) Oluşturmak ve .h
ve .cpp
dosyalarını içine yerleştirmek (örn. myLibrary.h
Ve myLibrary.cpp
) ve daha sonra bu klasörü libraries
skeçlerinizin bulunduğu klasörde (eskiz defteri klasörü) klasörünüze koymaktır .
IDE'yi yeniden başlatın ve artık bu kitaplığı biliyor. Bu gerçekten çok basit ve şimdi bu kütüphaneyi birden fazla proje üzerinde paylaşabilirsiniz. Bunu çok yapıyorum.
Daha detay bit burada .