C++に対応していますか。(Q&A形式の補足)
Posted: 2016年1月04日(月) 16:00
C++に対応していますか。
上記についての、Q&A形式の補足となります。
***
Q.1 フォーラム上ではC++は非対応とございました。μC3上でC++で作ったもの
が動いている、という例はあまり(全く?)ないのでしょうか。
A.1 使用されているお客様は、少ないですが、いらっしゃいます。
念のためですが、弊社では、C++言語を用いてμC3の動作検証を完全に行っていないため、
正式サポートをしておりません。また、μC3はμITRON仕様なので基本C++には正式に
対応していません。
Q.2 システムコールの時だけextern "C"をつける事と、その他いくつかの注意点
が挙げられておりましたが、それらに気を付けていれば、C++で実装された
ものでも動かす事は出来るのでしょうか。
A.2 注意点(C++に対応していますか。に記載)を守って頂ければ動かすことは可能です。
追加情報としましては、動作させることは可能ですが,C++の機能をフルに
使った場合に懸念(弊社では、詳細に調査できていないこともあります)があります。
また、TOPPERS/JSPにて公開されている「2.C++バインディングの機能」
を削除したC++のソースコードであれば一応利用可能と考えています。
Q.3 フォーラムの注意点の中に、new演算子、delete演算子につきまして、
マルチタスク環境では排他制御が必要になる場合がある、とございましたが、
これはどういう意味でしょうか。
A.3 new演算子、delete演算子では、mallocなどの処理が使用されている
可能性があり、コンパイラが用意している malloc関数はリエントラント
(再入可能)に作られていません。そのため、複数のタスクから呼び出され
ると mallocの管理領域が破壊されてしまいます。
その場合、複数のタスクで使う場合には排他制御が必要になります。
こちらは、参考情報ですが、メモリを取得する場合、uITRONではmallocは
なく、通常は固定長のメモリプールから取得・解放(get_mpf, rel_mpf)する
ことを推奨しています。
上記についての、Q&A形式の補足となります。
***
Q.1 フォーラム上ではC++は非対応とございました。μC3上でC++で作ったもの
が動いている、という例はあまり(全く?)ないのでしょうか。
A.1 使用されているお客様は、少ないですが、いらっしゃいます。
念のためですが、弊社では、C++言語を用いてμC3の動作検証を完全に行っていないため、
正式サポートをしておりません。また、μC3はμITRON仕様なので基本C++には正式に
対応していません。
Q.2 システムコールの時だけextern "C"をつける事と、その他いくつかの注意点
が挙げられておりましたが、それらに気を付けていれば、C++で実装された
ものでも動かす事は出来るのでしょうか。
A.2 注意点(C++に対応していますか。に記載)を守って頂ければ動かすことは可能です。
追加情報としましては、動作させることは可能ですが,C++の機能をフルに
使った場合に懸念(弊社では、詳細に調査できていないこともあります)があります。
また、TOPPERS/JSPにて公開されている「2.C++バインディングの機能」
を削除したC++のソースコードであれば一応利用可能と考えています。
Q.3 フォーラムの注意点の中に、new演算子、delete演算子につきまして、
マルチタスク環境では排他制御が必要になる場合がある、とございましたが、
これはどういう意味でしょうか。
A.3 new演算子、delete演算子では、mallocなどの処理が使用されている
可能性があり、コンパイラが用意している malloc関数はリエントラント
(再入可能)に作られていません。そのため、複数のタスクから呼び出され
ると mallocの管理領域が破壊されてしまいます。
その場合、複数のタスクで使う場合には排他制御が必要になります。
こちらは、参考情報ですが、メモリを取得する場合、uITRONではmallocは
なく、通常は固定長のメモリプールから取得・解放(get_mpf, rel_mpf)する
ことを推奨しています。