Apakah mungkin menggunakan C ++ untuk mengkode PIC? Apakah ada batasan perangkat keras yang menghalangi kita untuk menggunakan C ++? Berapa ukuran file .hex yang dihasilkan dan waktu menjalankan program meningkat ketika kita menggunakan C ++, bukan C? Apakah mungkin untuk menggunakan C ++ untuk PIC saat ini? Apakah ada rencana masa depan atau pengembangan yang sedang berlangsung tentang ini?
pic
c
development-tools
c++
hkBattousai
sumber
sumber
Jawaban:
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.
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.
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 ++
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.
sumber
Tergantung fitur apa yang Anda gunakan. Jika Anda menggunakan fitur berorientasi objek inti (kelas + metode), kemungkinan memiliki efek yang sangat kecil (variabel variabel / nama fungsi lebih lama sehingga tabel simbol kemungkinan akan sedikit meningkat). Template juga tidak boleh menambahkan banyak dengan kompiler yang baik.
Jika Anda benar-benar gila dan melakukan hal-hal seperti Perpustakaan Template Standar, dan menggunakan alokasi dan pengecualian memori dinamis, maka Anda kemungkinan akan mengalami kode mengasapi.
sumber
Sudah ada c ++ compiler untuk pic, misalnya http://www.sourceboost.com/Products/BoostCpp/Overview.html
Saya belum pernah menggunakan ini dan tidak tahu apa-apa selain itu ada ...
sumber
Agak menggeneralisasi pertanyaan Anda, ada prosesor ARM yang dibuat untuk pasar tertanam yang berisi MMU (unit manajemen memori). Ukuran dan alokasi memori membuat bahasa seperti java dan c ++ pilihan yang disematkan buruk. Seiring prosesor yang tertanam terus menjadi lebih cepat dan lebih kuat, dan karena memori menjadi lebih padat dan lebih murah, pilihan bahasa yang tersedia untuk insinyur yang disematkan berubah secara dramatis. Prosesor ARM 32-bit 600MHz dengan MMU dan kartu Flash 64G adalah kandidat yang bagus untuk aplikasi c ++. Apakah itu sesuai dengan definisi prosesor tertanam klasik adalah masalah lain.
sumber
Mungkin ya .. tetapi Anda tidak seharusnya tetap ... C adalah bahasa yang disematkan dan tidak ada keuntungan menggunakan C ++. Atau lebih tepatnya, keunggulan C jauh melebihi keunggulan C ++ untuk disematkan. Jangan buang waktu Anda.
sumber