Apa yang harus saya ketahui saat membuat perpustakaan untuk Arduino?

8

Terpikir oleh saya bahwa, di luar masalah saya saat ini, saya harus bertanya, "Apa yang harus saya ketahui ketika membuat perpustakaan untuk Arduino?"

Pertama, apa yang saya lakukan:

Saya menggunakan Eclipse sebagai editor dan kode penulisan di C ++. Saya telah menulis aplikasi Arduino sederhana yang menyertakan file header saya dan saya sedang mengerjakan kesalahan.

Masalah pertama: bagaimana cara melakukan 'build clean'? Saya melihat kesalahan yang saya pikir sudah saya perbaiki, hampir seolah-olah file header di-cache. (Ya, sangat mungkin saya melakukan sesuatu yang bodoh [ edit : saya], tetapi saya masih ingin tahu cara membersihkan perpustakaan, dan tidak tahu di mana file objek berada).

Kedua: konvensi apa yang harus saya waspadai? Saya belum pernah menggunakan Arduino seperti yang saya inginkan, dan rasanya senang bisa pemrograman di C ++, tapi saya tahu maksud perpustakaan adalah untuk menjaga hal-hal yang baik dan sederhana bagi pengguna. Apakah ada konvensi untuk nama fungsi? Membuat konstanta (sepertinya namespace global tercemar dengan #defines)? Dan seterusnya.

Terakhir, apakah ada hal lain yang harus saya ketahui?

Saya harus menyebutkan bahwa saya telah melihat Tutorial Perpustakaan Arduino , yang bagus, tetapi tidak terlalu jauh. Saya juga telah mengintip beberapa perpustakaan yang diinstal pada sistem saya.

Clinton Blackmore
sumber
1
Sudahkah Anda mencoba Arduino IDE dan menyerah? Saya tahu bahwa dengan set fitur produktivitas-programmer-umum Eclipse-as-IDE, Arduino-IDE memang pucat. Namun, dalam situasi ini, jika Anda belum mencoba Arduino-IDE, Anda mungkin ingin melakukannya. Meskipun saya merasa lamban, tetapi secara eksplisit mengkompilasi ulang berfungsi, seperti yang seharusnya.
icarus74

Jawaban:

3

Saya akan mengambil bacokan. Saya belum menulis kode untuk Arduino, tetapi saya telah melakukan banyak pemrograman C dan C ++. Akan membantu jika saya benar-benar melihat kesalahan Anda, tetapi tetap saja.

Hal utama yang Anda harus selalu ingat ketika menggunakan C ++ dengan kode C adalah bahwa kode C ++ Anda membutuhkan fungsi yang dideklarasikan dengan "extern" C "" jika Anda ingin kode C dapat terhubung dengan kode C ++. "Extern" C "" adalah yang memberitahu kompiler C ++ bahwa saya membuat kode yang dapat ditautkan untuk file C atau saya menggunakan kode dari file C. Jadi semua fungsi Anda di header API library harus berkorelasi dengan fungsi dalam file sumber yang didefinisikan seperti "extern" C "void dosomething ()". Jika Anda mencoba menggunakan kelas dalam C ++, ingat bahwa kode C tidak dapat memanggilnya, Anda harus membuat fungsi (extern "C") untuk mengakses objek. Sekarang, jika kode C Anda dikompilasi dengan kompiler C ++, maka jangan khawatir tentang "extern" C "".

Jika Anda ingin memanggil kode C di dalam kode C ++ Anda, maka Anda perlu membungkus header C dengan konstruksi seperti ini:

#ifdef ___cplusplus
extern "C" {
#endif

///all my C function declarations... yada yada

#ifdef __cplusplus
}  //end extern "C"
#endif

Jika Anda bekerja di C ++, jangan gunakan banyak definisi # kecuali Anda membuat flag waktu kompilasi seperti "DEBUG" atau "VERSION2" untuk membuat set kode khusus. Kalau tidak, gunakan "const int / char / float" untuk mendefinisikan angka untuk pemeriksaan tipe aman. Kompiler biasanya cukup pintar untuk mengoptimalkan ini, sehingga mereka berakhir di ruang ROM / kode (tergantung meskipun). Juga, jangan membuat MACROS, gunakan fungsi sebaris. Juga, jangan selalu mengikuti konvensi saat pemrograman jika itu bodoh seperti menggunakan banyak makro dan angka yang didefinisikan dalam C ++. Hal yang sama berlaku untuk versi C99 C, ia telah menambahkan hal-hal seperti fungsi inline dan const dari C ++. Industri menyadari betapa banyak kode kereta dan sulit untuk mempertahankan kode berasal dari penggunaan yang berlebihan dari bahasa preprosesor.

Eclipse biasanya menyimpan file obj dalam direktori di bawah proyek Anda. Jika Anda melakukan pembuatan "Debug", maka itu terletak di bawah folder "Debug" di bawah folder proyek Anda. Jika Anda melakukan build "Release", lihat di bawah "Release", dll. Biasanya build bersih hanya berfungsi untuk saya di Eclipse, jadi saya tidak tahu apa yang salah dengan pengaturan Anda. Saya kira pastikan Anda tidak membuat header yang dikompilasi.

Jay Atkinson
sumber