Apakah mungkin menggunakan C ++ untuk mengkode PIC?
Ya, itu mungkin sekarang. Untuk dsPIC, ada IAR Systems C ++ Compiler (meskipun sangat lama dan tidak didukung).
Pilihan lain adalah menggunakan konverter C ++ ke C. Menggunakan langkah pre-build, konversikan C ++ ke C, lalu berikan C (nasty looking) ke kompiler C normal Anda. Lihatlah LLVM atau kompiler C ++ Comeau yang keduanya melakukan itu. Comeau hanya $ 50, tetapi mungkin perlu upaya untuk membuat seluruh rantai alat dan perpustakaan berfungsi dengan baik.
Apakah ada batasan perangkat keras yang menghalangi kita untuk menggunakan C ++?
Jawaban singkat, tidak, tidak ada batasan perangkat keras. Jawaban panjangnya, C ++ tentu mendorong penggunaan heap dan / atau stack, yang mana MCU kecil dengan RAM terbatas akan kesulitan.
Mengapa mereka berjuang dengan tumpukan / tumpukan? Karena dua alasan: A) banyak MCU memiliki RAM terbatas, tidak cukup untuk tumpukan, dan hampir tidak cukup untuk tumpukan. B) banyak MCU tidak menangani pointer dengan baik, jadi penggunaan variabel pada stack benar-benar membunuh kinerja.
Ketika orang bertanya tentang menggunakan C ++ pada MCU, saya merasa konstruktif untuk membandingkan C ++ ke C. Pertanyaan yang sama persis adalah (dan masih) ditanyakan tentang C pada MCU. Orang-orang terbiasa menolak ide itu. Bahasa tingkat tinggi, pada 256 byte RAM MCU ?? Mustahil. Tapi sekarang kita semua tahu itu mungkin. Saya telah menulis C untuk PIC12. Tidak masalah. Itu mungkin karena A) pengembang perangkat lunak tahu bahwa mereka harus sedikit berhati-hati: jangan gunakan malloc () dll dan B) kompiler telah ditulis khusus untuk MCU. Kompiler juga akan ekstra hati-hati dengan alokasi memori, ia tidak akan mencoba membuat tumpukan dan mungkin tidak membuat tumpukan. Beberapa kompiler C tidak akan membiarkan Anda menulis kode re-entrant (recursive) yang benar-benar membutuhkan stack.
Mengetahui bahwa mungkin untuk menulis C untuk MCU, jawaban yang sama berlaku untuk pertanyaan menulis C ++ pada MCU. Selama kompiler memahami keterbatasan perangkat target, dan pengguna juga memahami bahasa, tidak ada masalah. Di C ++, Anda hanya membayar apa yang Anda gunakan. Sangat mungkin untuk menulis C ++ (dengan objek dan semuanya) yang menghasilkan output asm tepat yang akan Anda dapatkan jika Anda menggunakan C.
Sekarang, PIC32s tentu dapat mengatasi C ++. Mereka memiliki hingga 64kB RAM, dan didasarkan pada inti MIPS, yang merupakan prosesor 32-bit yang tumbuh dengan baik. Itu dapat menangani pointer dan tumpukan serta PC. Memang, ada PC berdasarkan MIPS (atau setidaknya, dulu).
Sayangnya, ada begitu banyak kesalahpahaman seputar C ++. Bahkan coders yang sangat berpengalaman tampaknya tidak tahu bagaimana bahasa itu bekerja. Lihat jawaban saya tentang mengapa C ++ cocok untuk CPU yang disematkan.
Berapa ukuran file .hex yang dihasilkan dan waktu menjalankan program meningkat ketika kita menggunakan C ++, bukan C?
Seperti yang saya katakan, mungkin tidak ada perbedaan. Bjarne Stroustrup melakukan perbandingan sekelompok kompiler C / C ++ untuk membandingkan waktu dan kinerja ruang untuk sejumlah operasi. Hasilnya sangat bervariasi. Dalam beberapa kasus, C ++ keluar lebih lambat dan lebih besar, beberapa kasus lebih lambat dan lebih kecil, atau lebih cepat dan lebih besar, dan bahkan lebih cepat dan lebih kecil! Jadi, jawaban untuk pertanyaan Anda adalah bahwa hal itu sangat tergantung pada kompiler, tetapi secara umum, tidak perlu membuat perbedaan sama sekali. Untuk lebih detail, lihat Laporan Teknis tentang Kinerja C ++
Apakah ada rencana masa depan atau pengembangan yang sedang berlangsung tentang ini?
Itu saya tidak tahu. Saya tahu bahwa kompiler Microchip C32 bersumber terbuka, dan Anda dapat mengunduh sumbernya. Saya juga tahu bahwa seseorang yang bekerja dengan saya benar-benar menemukan beberapa instruksi online dan berhasil mendapatkan kompiler untuk mengkompilasi kode C ++. Tetapi dia meninggalkan perusahaan sebelum dia dapat mengatur saya dengan rantai alat yang tepat.
MEMPERBARUI
Microchip sekarang memiliki kompiler C ++ yang tersedia untuk rentang MCU tertanam PIC32.