Bagus sekali bahwa Anda ingin menjadi kompiler independen! Sayangnya hitech dan CCS compiler untuk PIC low-end menggunakan banyak deklarasi preprocessor spesifik kompiler, rutinitas akses pin spesifik kompiler, dan dalam kasus rutin khusus kompiler CCS untuk fungsi inti akses seperti SPI, I2C, ADC dan sebagainya.
Tidak mungkin untuk menulis kode Anda menjadi non-kompiler spesifik tanpa banyak preprocessor #define, #ifdef, #ifndef dan seterusnya untuk mendapatkan akses ke bagian-bagian tertentu dari apa yang ditawarkan oleh setiap kompiler. Ini akan membuat kode Anda tidak dapat dibaca.
Hal terbaik yang dapat Anda tuju adalah menjadi IDE independen dan menggunakan sesuatu seperti gerhana, jadi setidaknya Anda menggunakan IDE yang sama. Ini akan mengakibatkan hilangnya CCS wizard untuk pengaturan fungsi inti, tetapi akan memberi Anda fleksibilitas yang lebih besar dalam menggunakan IDE yang sama.
Hal lain yang perlu dipertimbangkan adalah bahwa hitech dan CCS tidak memiliki (setidaknya di masa lalu) linker c compiler yang benar dan mengharuskan Anda untuk menggunakan "#include myfile.c" yang saya pribadi benci ... tapi itu cerita lain.
Saya belum mengomentari kompiler IAR karena saya hanya menggunakan CCS dan hitech. Keduanya bekerja dengan baik, tetapi saya tidak pernah benar-benar senang dengan baik setelah bermigrasi seberang dari platform Motorola (sekarang freescale) dan menggunakan kompiler metroworks yang lebih maju pada saat itu. Kompiler IAR terlihat bagus tetapi saya belum pernah menggunakannya.
Jika Anda menggunakan bagian PIC18 saya akan merekomendasikan kompiler C18 dari Microchip. Sesuai jauh lebih dekat dengan ANSI C daripada kompiler CCS. Saya tidak yakin tentang kompiler Hi-Tech karena saya belum menggunakannya. Seperti yang dikatakan sebelumnya jika Anda benar-benar perlu membuat kode independen compiler Anda harus menggunakan banyak arahan pre-compiler. Saya akan merekomendasikan untuk melihat beberapa contoh program Microchip yang mendukung banyak kompiler untuk mendapatkan ide bagaimana hal itu dilakukan.
sumber
Sayangnya Anda akan menemukan sangat sulit untuk menemukan program independen compiler untuk mikrokontroler. Ada beberapa masalah, hanya ada dua:
Perbedaan periferal, penamaan SFR, dll (terutama di atas prosesor lain, tetapi bahkan dengan kompiler dari keluarga yang sama), dan;
Fitur-fitur non-standar pada beberapa kompiler seperti pengaturan bit secara individu atau struktur yang berbeda untuk memanggil kode rakitan.
Seri 16F sangat terbatas dalam hal arsitektur dan tidak benar-benar dirancang untuk mendukung kompiler C. Itu sebabnya tidak ada GCC untuk itu.
sumber
Lihatlah SDCC . Ini mendukung banyak perangkat PIC16 dan PIC18. GCC mendukung PIC24 dan dsPIC.
sumber
Aspek yang paling mungkin bergantung pada kompiler adalah:
Cara yang saya sukai untuk menangani ini adalah dengan menulis makro untuk aspek-aspek ini, dan minta kompiler memilih makro yang benar berdasarkan pada makro yang telah ditentukan sebelumnya khusus-kompiler. Saya membuat perpustakaan RFM70 dan contoh aplikasi dengan cara ini yang berjalan pada PIC14 (HiTechC), PIC16 (C18) dan ARM (GCC).
(perbarui) perpustakaan RFM70 saya sekarang lengkap. Ini mendukung C pada PIC 16F (kompilator Hitech), C dan C ++ pada LPC11114 (Cortex) dan LPC2148 (ARM7TDMI) (kompiler GCC) dan Arduino (ATMega128, kompiler GCC). Ini dihasilkan (termasuk dokumentasi doxygen) dari sumber yang sama dengan melakukan beberapa preprocessing dalam skrip Python. Dukungan Jal sedang dalam pengembangan, mungkin ProtonBasic akan mengikuti. http://www.voti.nl/rfm70
sumber