2011年11月10日木曜日

HEWで仮想関数を含むコードをビルドするときの注意

HEWのバージョンは4.08,コンパイラはRenesasのSH用C/C++コンパイラでバージョンは9.04.

HEW(High-performance Embedded Workshop)といえば,ルネサス系マイコンの定番開発環境.…なのだけど,C++で仮想関数を使いたいときには一手間必要なのでメモ的エントリ.

適当にプロジェクトを作成して,仮想関数を含むコードを書いてビルドすると普通に成功するのだけど,このファームは仮想関数を呼び出すところで落ちてしまう.
なぜなら,HEWのデフォルト設定では仮想関数テーブルにアドレスが割り当てられていないから.
仮想関数テーブルというのは仮想関数の継承関係をまとめた一覧表みたいなもので,C++のバイナリで仮想関数を実行する場合には絶対に必要なもの.

ファームのメモリセクションに仮想関数テーブルを配置する方法は次のとおり.

「ビルド」→「XXXX Toolchain」→「最適化リンカ(タブ)」→「セクション(プルダウン)」→「編集」→"C"あたりをクリックして「追加」→"C$VTBL"を選択して「OK」→「↑」「↓」でそれっぽいところに配置.

ちなみに,仮想関数の呼び出しはテーブルを参照する手間があるので,通常の関数呼び出しよりも少しだけオーバーヘッドが大きい.組み込み系で仮想関数を使うかどうかは個人の判断でどうぞ.

0 件のコメント:

コメントを投稿