小さな ARM (実際には Cortex) ターゲットである LPC1114 用にコンパイルします。RAM は ROM よりもはるかに制限されています。最新の Mentor (CodeBenchLite) GCC コンパイラ (GCC 4.6.3) を使用しています。ROMに入れたい定数オブジェクトがいくつかあります。私が理解している限り、以下のコードの ffx オブジェクトは ROM (コード) になるはずですが、代わりに DATA に配置されます。
class flop {
public:
int x;
constexpr flop( int x ) : x(x){}
};
extern constexpr flop ffx( 1 );
オブジェクトを事前に計算して ROM に配置するようにコンパイラを説得するにはどうすればよいですか?
または多分私は尋ねる必要があります:
- どうにかして、G++ コンパイラが ffx の ROMable データを生成することを期待できますか?
- もしそうなら、私のコードはこれに対して正しいですか
- もしそうなら、これがサポートされている G++ バージョンはどれですか (私は 4.6 を使用していますが、おそらく 4.7 が必要ですか?)
=======================================
このバグジラ エントリc++/49673は、私の既知の問題であり、おそらく GCC 4.7 で修正されていることを示しているようです。残念ながら、私は Mentor/CodeSourcery ビルドを使用することを好みますが、これはまだ 4.6.3 です。そのため、当分の間、バグに悩まされていると思います。:(