Saya ingin menulis sketsa saya sehingga saya bisa membuat / mengunggahnya menggunakan Arduino IDE, atau secara opsional menggunakan GCC dan makefile.
Saya tahu tentang menyertakan fungsi deklarasi di atas, tetapi apakah ada hal lain yang harus dilakukan agar sketsa saya dianggap valid C ++ oleh kompiler saya?
Perbarui 1
Memahami apa yang dilakukan Arduino IDE terhadap file .ino dan .pde baik-baik saja, tetapi tidak sesuai dengan pertanyaan saya, jadi ini bukan duplikat. Yang ingin saya ketahui adalah "bagaimana cara saya menulis sebuah program sehingga dianggap valid baik oleh IDE Arduino dan g ++.
Makefile resmi (?) Yang tersedia di sini menjelaskan apa yang harus dilakukan jika menggunakan makefile alih - alih IDE:
# 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);
... tapi ini tidak menjelaskan bagaimana penggunaan kedua IDE dan makefile.
Perbarui 2
Saya baru-baru ini menemukan PlatformIO yang tidak menjawab pertanyaan ini secara langsung, tetapi tidak mengotomatiskan banyak proses (menghasilkan file Scons untuk Anda) dan sejauh ini saya lebih suka alur kerja lebih dari Arduino IDE dan pendekatan sumber + makefile. Dukungan baik dari penulis juga.
sumber
Jawaban:
Dengan gcc / g ++ saya pikir Anda merujuk khusus untuk avr-gcc / avr-g ++. Kode arduino Anda mungkin tidak akan dianggap sebagai kode C / C ++ yang valid karena gcc akan mencoba mengkompilasi dengan PC Anda sebagai sistem target. Banyak makro di "WProgram.h" akan merujuk pada memori yang tidak dapat diakses di sistem target Anda.
Jika Anda menyertakan file header "WProgram.h" dan Anda membuat kode dengan Arduino Makefile di atas (yang menggunakan avr-g ++ bukan g ++), file cpp Anda harus dikompilasi dan dihubungkan dengan benar. Demikian juga, Anda akan dapat membuka kode Arduino Anda dalam IDE dan Verifikasi kode Anda di sana. IDE menempatkan dalam file "WProgram.h" untuk Anda, jadi secara teknis itu akan dimasukkan dua kali. Namun, penjaga sertakan akan mencegah kompilasi kode duplikat.
sumber
Secara umum Anda harus menyatakan
setup()
danloop()
fungsinya, mereka hanya pembungkus IDE:Ini berfungsi baik di IDE dan di baris perintah. Saat Anda menentukan Board dan SerialPort di IDE, Anda juga perlu menentukan keduanya di Makefile. Jadi Anda akan berakhir dengan dua konfigurasi.
Banyak orang meninggalkan IDE karena mereka lebih suka menggunakan editor yang berbeda atau memiliki lebih banyak opsi konfigurasi dengan mengatur sakelar kompiler dan tautan.
Untuk membuatnya sangat mudah, Anda dapat menggunakan Arduino Makefile . Hari ini dibintangi dengan 347.
Berikut contoh Makefile:
File '* .ino' tidak perlu diubah dan
Makefile
file tersebut harus ditempatkan di direktori yang sama.Sementara itu saya lebih suka
Makefile
jalannya, tapi saya masih menggunakan IDE untuk proyek kecil.sumber
Lihat: Cara menghindari kebiasaan pra-pemrosesan file sketsa IDE .
Mengabaikan saat apa Makefile akan terlihat seperti, jawaban sederhana untuk pertanyaan Anda, seperti yang dibahas dalam tautan di atas, adalah untuk meletakkan semuanya ke dalam tab .cpp dan .h di IDE, dan meninggalkan "sketsa" utama (.ino file) kosong. Itu masih akan dikompilasi di bawah IDE, dan karena itu juga akan menjadi C ++ normal.
Pastikan Anda memulai file .cpp Anda dengan:
Jika Anda menggunakan pustaka (misalnya, SPI) Anda harus memasukkannya dalam file sketsa utama, yang memicu IDE untuk menyalinnya ke file build proyek sementara. Makefile tidak akan peduli tentang itu, karena Anda akan memastikan Makefile Anda menyertakan semua file library yang diperlukan.
Lihat juga jawaban saya di sini: Kelas dan objek: berapa banyak dan jenis file mana yang saya perlukan untuk menggunakannya?
sumber