組み込みシステム (具体的には、PSoC Creator を使用する PSoC 5) のコードを開発し、C++ で記述しています。
C++ を使用してほとんどのハードルを克服しましたが、最初にコンパイラ フラグを使用して C++ でコンパイルし-x c++
、 new および delete 演算子を定義し、コンパイラ フラグで例外がスローされない-fno-exception
ようにしました。仮想関数を使用するようになります。
仮想関数を宣言しようとすると、コンパイラからエラーが返されますundefined reference to "vtable for __cxxabiv1::__class_type_info"
。これを回避する唯一の方法は、コンパイラ フラグを使用する-fno-rtti
ことです。これにより、エラーが回避され、正常にコンパイルされます。しかし、そうすると、オーバーロードされた仮想関数を実行しようとすると、組み込みプログラムがクラッシュします。これは、vtable が存在しないためだと思います。
組み込みプラットフォームで vtables を実装できない理由がわかりません。メンバー オブジェクトの前または後のメモリ内に余分なスペースがあるためです (正確なコンパイラによって異なります)。
私が仮想関数を使用しようとしている理由は、C++ で FreeRTOS を使用したいからであり、他の人は仮想関数を使用してこれを実装しています ( http://www.freertos.org/FreeRTOS_Support_Forum_Archive/July_2010/freertos_Is_it_possible_create_freertos_task_in_c_3778071.htmlを参照してください)。議論、およびよく書かれた組み込み C++ FreeRTOS フレームワークのhttps://github.com/yuriykulikov/Event-driven_Framework_for_Embedded_Systems )