PICのコーディングにC ++を使用することは可能でしょうか?C ++の使用を妨げるハードウェアの制限はありますか?Cの代わりにC ++を使用すると、生成された.hexファイルのサイズとプログラムの実行時間がどれだけ増加しますか?現在のPICにC ++を使用することは実際に可能ですか?これに関する将来の計画や進行中の開発はありますか?
PICのコーディングにC ++を使用することは可能でしょうか?C ++の使用を妨げるハードウェアの制限はありますか?Cの代わりにC ++を使用すると、生成された.hexファイルのサイズとプログラムの実行時間がどれだけ増加しますか?現在のPICにC ++を使用することは実際に可能ですか?これに関する将来の計画や進行中の開発はありますか?
回答:
PICのコーディングにC ++を使用することは可能でしょうか?
はい、それは今可能です。dsPICには、IARシステムのC ++コンパイラがあります(ただし、非常に古く、サポートされていません)。
別のオプションは、C ++からCへのコンバータを使用することです。ビルド前のステップを使用して、C ++をCに変換し、(厄介な)Cを通常のCコンパイラに渡します。見てみましょうLLVMやコモのC ++コンパイラの両方がそれを行います。Comeauの価格はたったの$ 50ですが、ツールチェーン全体とライブラリーを適切に機能させるには、おそらく多少の努力が必要です。
C ++の使用を妨げるハードウェアの制限はありますか?
短い答え、いいえ、ハードウェアの制限はありません。長い答えですが、C ++は確かにヒープやスタックの使用を奨励します。これは、RAMが限られている小型のMCUでは苦労します。
なぜ彼らはヒープ/スタックと格闘するのですか?2つの理由から:A)多くのMCUにはRAMが制限されており、ヒープには不十分であり、スタックには不十分です。B)多くのMCUはポインタを適切に処理しないため、スタックで変数を使用するとパフォーマンスが大幅に低下します。
人々がMCUでC ++を使用することについて尋ねるとき、C ++をCと比較することは建設的であると思います。MCUでのCについてまったく同じ質問が(そして今も)尋ねられました。人々はその考えをぼんやりさせていた。256バイトRAM MCUでの高水準言語?? 無理だよ。しかし、今ではそれが可能であることがわかっています。PIC12のCを書きました。問題ない。これは、A)ソフトウェア開発者が少し注意する必要があることを知っているため可能です。malloc()などを使用しないでください。B)コンパイラはMCU専用に作成されています。コンパイラは、メモリ割り当てにも特に注意を払います。ヒープを作成しようとせず、スタックを作成しない場合があります。一部のCコンパイラーは、スタックが絶対に必要な再入可能(再帰的)コードを作成できません。
MCUにCを書くことは可能であることを知っているので、MCUにC ++を書くという問題にも同じ答えが当てはまります。コンパイラがターゲットデバイスの制限を理解し、ユーザーが言語も理解している限り、問題はありません。C ++では、使用した分に対してのみ支払います。Cを使用した場合に得られるであろう正確なasm出力を生成するC ++(オブジェクトとすべてを含む)を書くことは完全に可能です。
現在、PIC32は確実にC ++に対応できます。最大64kBのRAMを搭載し、適切に成長した32ビットプロセッサであるMIPSコアに基づいています。ポインターとスタックだけでなく、PCも処理できます。実際、MIPSに基づくPCが存在します(少なくとも、以前は存在していました)。
悲しいことに、C ++については多くの誤解があります。非常に経験豊富なプログラマーでさえ、この言語がどのように機能するのかまったくわかりません。C ++が組み込みCPUに適している理由についての私の回答を参照してください。
Cの代わりにC ++を使用すると、生成された.hexファイルのサイズとプログラムの実行時間がどれだけ増加しますか?
私が言ったように、違いはないかもしれません。Bjarne Stroustrupは、多数のC / C ++コンパイラを比較して、いくつかの操作の時間とスペースのパフォーマンスを比較しました。結果は大きく異なりました。場合によっては、C ++が遅くて大きくなったり、遅くて小さくなったり、速くて大きくなったり、さらに速くて小さくなったりすることもあります。したがって、あなたの質問に対する答えは、コンパイラに大きく依存しているということですが、一般的に、それはまったく違いを生じる必要はありません。詳細については、C ++パフォーマンスに関するテクニカルレポートを参照してください。
これに関する将来の計画や進行中の開発はありますか?
わからない。Microchip C32コンパイラはオープンソースであり、ソースをダウンロードできます。また、私が一緒に働いた人が実際にオンラインでいくつかの命令を見つけ、コンパイラにC ++コードをコンパイルさせることができたことも知っています。しかし、適切なツールチェーンを設定する前に、彼は会社を辞めました。
更新
Microchipは、PIC32の組み込みMCUの範囲で利用可能なC ++コンパイラを備えています。
Cの代わりにC ++を使用すると、生成された.hexファイルのサイズとプログラムの実行時間がどれだけ増加しますか?
使用する機能によって異なります。コアのオブジェクト指向機能(クラス+メソッド)を使用する場合、ほとんど効果がありません(マングルされた変数/関数名が長くなるため、シンボルテーブルが多少増える可能性があります)。テンプレートは、優れたコンパイラーでもあまり追加すべきではありません。
夢中になって標準テンプレートライブラリなどを取り込み、動的メモリ割り当てと例外を使用すると、コードが膨大になる可能性があります。
pic用のc ++コンパイラはすでにあります。たとえば、http://www.sourceboost.com/Products/BoostCpp/Overview.html
私はこれを使用したことがなく、存在すること以外は何も知りません...
たぶんそうですが、とにかくそうすべきではありません... Cは組み込み言語であり、C ++を使用する利点はありません。むしろ、Cの利点は組み込み用のC ++の利点をはるかに上回ります。時間を無駄にしないでください。