Saya bekerja dengan beberapa perpustakaan yang menyediakan API untuk berinteraksi dengan chip perangkat keras tertentu (yang membuat driver ini?). Namun, papan atau pelindung khusus yang berbeda akan memetakan chip ke pin yang berbeda yang berarti perpustakaan perlu dimodifikasi untuk setiap kasus. Perlu memodifikasi perpustakaan tidak berfungsi dengan baik dengan Arduino IDE Library Manager.
Apakah ada pola yang disukai / direkomendasikan untuk mengekspos konfigurasi ini sehingga perpustakaan itu sendiri tidak perlu diubah setiap waktu?
Jawaban:
Metode yang saya gunakan adalah menyediakan pin sebagai parameter untuk konstruktor. Nomor pin tersebut disimpan dalam variabel untuk digunakan nanti dalam
.begin()
fungsi dan di tempat lain.Sebagian besar waktu saya menggunakan daftar inisialisasi untuk menjaga hal-hal sederhana. Sebagai contoh:
sumber
Saya akan menggunakan salah satu dari dua kemungkinan berikut:
Gunakan variabel (kelas) dan atur di dalam konstruktor.
Keuntungan:
Gunakan metode terpisah (misalnya Init).
Keuntungan:
Catatan
Untuk pengaturan pin, sebagian besar sirkuit statis digunakan sehingga pendekatan pertama mungkin lebih baik.
Untuk pengaturan, sebagian besar metode kedua lebih baik.
Jika banyak pin terlibat (tidak mungkin), gunakan struktur atau kelas pengaturan pin terpisah.
Makro
Yang tidak akan saya sarankan adalah makro. Ketika pengguna perlu mengubah kode sumber sendiri, dan versi baru diinstal, mereka harus menggabungkan atau mengulangi perubahan lagi. Keuntungannya adalah kode (mesin) sedikit lebih sedikit, mungkin sedikit lebih cepat dan penggunaan memori sedikit, tetapi ketiga aspek minimal.
sumber
tergantung pada pendekatan Anda.
1) jika Anda hanya menyediakan file biner + header, Anda harus membuat variabel pin.
2) jika Anda memberikan kode sumber dan mengharapkan pengguna untuk mengkompilasi ulang kode sumber, gunakan makro.
sumber
Jika Anda akan menghindari hal-hal konstruktor C ++ yang cukup umum merupakan pembunuhan berlebihan pada Arduino, Anda dapat menggunakan
#define
(makro seperti objek).Seperti itu:
Preprocessor akan diganti
PIN_ONE
dengan mulus dengan angka 1 danPIN_TWO
2 dengan asumsi definisi tersebut ada dalam.h
file header perpustakaan . Ini kemungkinan besar akan membutuhkan sumber daya paling sedikit dibandingkan dengan solusi lain yang mungkin.sumber