Ich kompiliere für LPC1114, ein kleines ARM (eigentlich Cortex) Ziel. RAM ist viel begrenzter als ROM. Ich benutze den neuesten Mentor (CodeBenchLite) GCC Compiler (GCC 4.6.3). Ich habe einige konstante Objekte, die ich gerne im ROM haben möchte. Soweit ich verstehe, sollte das ffx-Objekt im unten stehenden Code in ROM (Code) enden, aber stattdessen wird es in DATA platziert.Wie bekomme ich GCC, um ein C++ consExpr in ROM zu platzieren?
class flop {
public:
int x;
constexpr flop(int x) : x(x){}
};
extern constexpr flop ffx(1);
Wie kann ich den Compiler überzeugen das Objekt vorab zu berechnen und sie in ROM platzieren?
oder vielleicht soll ich fragen:
- kann ich irgendwie erwarten, dass die G ++ Compiler ROMable Daten für ffx
- wenn ja, ist mein Code korrekt für diesen
- wenn so zu erzeugen, für die G ++ Version wird dies unterstützt (ich benutze 4.6, vielleicht ich brauche 4.7?)
============================= ==========
Dieser Bugzilla-Eintrag c++/49673 scheint anzuzeigen, dass meins ein bekanntes Problem ist, das wahrscheinlich in GCC 4.7 behoben wurde. Leider benutze ich lieber die Mentor/CodeSourcery, die immer noch unter 4.6.3 steht. Ich denke, vorerst stecke ich mit dem Käfer fest. :(
Ich kenne die Architektur nicht, aber scheint es nicht ein Oxymoron zu sein, zu * schreiben * zu * schreibgeschütztem * Speicher zu versuchen? –
@JohnDibling: Es scheint so, aber du liegst falsch. Kleine Prozessoren haben oft eine Möglichkeit, Ihr Programm auf ROM zu flashen. –
Es gibt nichts, was Ihnen der C++ - Standard bietet. Sie können jedoch * scatterloading * wie hier beschrieben ausprobieren: [Ortung von Code und Daten im Speicher (Scatterloading)] (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc. faqs/ka3558.html). HTH! – dirkgently