ページ 11

C++に対応していますか。(Q&A形式の補足)

Posted: 2016年1月04日(月) 16:00
by eForce技術担当
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)する
  ことを推奨しています。