PIC 16F pemula .. perbedaan dalam sintaks-program ketika menggunakan kompiler yang berbeda

9

Seperti yang saya sebutkan, saya baru saja memulai pemrograman pic16f877a. Sekarang saya dapat bekerja dengan 7 segmen tampilan. Saat ini saya menggunakan kompiler ccs. Tidak ada yang salah dengan itu. Tetapi saya lebih suka menjadi programmer kompiler independen. Jadi saya secara bersamaan ingin bekerja di kompiler lain seperti IAR atau Hitechc. Saya ingin tahu apakah "pernyataan pernyataan program dalam kompiler" selain ccs akan berbeda? Tolong bimbing saya bagaimana mendekati hal ini. Saya akan menyambut semua bentuk saran. Terima kasih sebelumnya.

VV Rao
sumber

Jawaban:

9

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.

smashtastic
sumber
Jika Anda dapat menangani tinggal di atau di atas pic18 maka Anda harus melihat pada kompiler c18. Ini memiliki sejumlah besar dukungan. IAR menjatuhkan dukungan PIC, mereka tidak akan lagi menjual lisensi dengan pemeliharaan.
Kortuk
Sudah pemahaman saya bahwa arsitektur PIC16 / 12/10 tidak memetakan dengan baik ke bahasa C. Oleh karena itu, kompiler C harus memiliki beberapa struktur yang tidak biasa & non-standar untuk mengimbangi arsitektur PIC. Hasil akhirnya adalah tidak ada kompiler yang beroperasi.
Connor Wolf
7

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.

mjh2007
sumber
c18 untuk pic18, c30 untuk pic24 dan dspic, c32 untuk pic32!
Kortuk
CCS bagus dalam hal-hal tertentu yang lebih mudah dilakukan (menyela dan timer, misalnya - semua contoh Microchip telah Anda tulis ASM untuk mendapatkan interupsi untuk bekerja tepat di C18), tetapi lebih dekat dengan ANSI C.
J. Polfer
Anda hanya perlu satu instruksi perakitan dan itu adalah GOTO yang digunakan untuk mengatur vektor interupsi untuk menunjuk ke rutinitas layanan interupsi.
mjh2007
3

Sayangnya Anda akan menemukan sangat sulit untuk menemukan program independen compiler untuk mikrokontroler. Ada beberapa masalah, hanya ada dua:

  1. Perbedaan periferal, penamaan SFR, dll (terutama di atas prosesor lain, tetapi bahkan dengan kompiler dari keluarga yang sama), dan;

  2. 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.

Thomas O
sumber
3

Lihatlah SDCC . Ini mendukung banyak perangkat PIC16 dan PIC18. GCC mendukung PIC24 dan dsPIC.

Toby Jaffey
sumber
saya bertanya tentang perbedaan dalam pernyataan saat menggunakan kompiler yang berbeda .. lagipula saya jadi tahu tentang 1 kompiler lagi 'sdcc' .. terima kasih banyak ..
VV Rao
2

Aspek yang paling mungkin bergantung pada kompiler adalah:

  • menggunakan bit tunggal (terutama di port IO)
  • ukuran bilangan bulat, dan karakter yang ditandatangani atau tidak ditandatangani
  • pointer lucu: C18 membedakan pointer rom dan ram :(
  • sekering konfigurasi
  • sibuk menunggu

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

Wouter van Ooijen
sumber