Как заставить GCC поместить constexpr C++ в ПЗУ?

Я компилировал для LPC1114, небольшой цели ARM (на самом деле Cortex). ОЗУ гораздо более ограничено, чем ПЗУ. Я использую последний компилятор Mentor (CodeBenchLite) GCC (GCC 4.6.3). У меня есть некоторые постоянные объекты, которые я хотел бы иметь в ПЗУ. Насколько я понимаю, объект fx в приведенном ниже коде должен оказаться в ROM (коде), но вместо этого он помещается в DATA.

class flop {
    public:
       int x;
       constexpr flop( int x ) : x(x){}
};

 extern constexpr flop ffx( 1 );

Как мне убедить компилятор предварительно вычислить объект и поместить его в ПЗУ?

или, может быть, я должен спросить:

  • могу ли я каким-то образом ожидать, что компилятор G++ сгенерирует ROM-данные для ffx
  • если да, то мой код подходит для этого
  • если да, то для какой версии G++ это поддерживается (использую 4.6, может надо 4.7?)

==================================== ===

Эта запись bugzilla c++/49673, по-видимому, указывает на то, что моя проблема является известной, вероятно, исправленной в GCC 4.7. К сожалению, я предпочитаю использовать встроенный Mentor/CodeSourcery, который все еще находится на уровне 4.6.3. Так что я думаю, что на данный момент я застрял с ошибкой. :(

6
задан Wouter van Ooijen 11 June 2012 в 17:31
поделиться