Wie man eine Variable auf eine gegebene absolute Adresse im Speicher legt (mit GCC)
Den RealView von ARM-C-Compiler unterstützt platzieren einer variable an einer bestimmten Speicher-Adresse mit Hilfe des variable-Attribut at(address)
:
int var __attribute__((at(0x40001000)));
var = 4; //changes the memory located at 0x40001000
Macht GCC eine ähnliche variable-Attribut?
InformationsquelleAutor der Frage Bas van Dijk | 2010-11-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weiß ich nicht, aber Sie können leicht erstellen Sie einen workaround wie diese:
Es ist nicht genau das gleiche, aber in den meisten Situationen ein perfekter Ersatz. Es funktioniert mit jedem compiler, nicht nur GCC.
Wenn Sie GCC verwenden, ich nehme an, Sie verwenden auch GNU-ld (obwohl es ist nicht sicher, natürlich) und ld hat die Unterstützung für die überführung von Variablen überall dort, wo Sie Sie haben wollen.
Ich kann mir vorstellen, ließ der linker tun, dass der job ziemlich üblich.
Inspiriert durch die Antwort von @Rippe, ich werde hinzufügen, dass, wenn die absolute Adresse ist für einige control-register, ich möchte hinzufügen
volatile
auf die Zeiger-definition. Wenn es nur RAM ist, ist es egal.InformationsquelleAutor der Antwort Prof. Falken
Könnten Sie die Abschnitt Attribute und ein ld linker-Skript definieren Sie die gewünschte Adresse für diesen Abschnitt. Dies ist wahrscheinlich messier als Ihre alternativen, aber es ist eine option.
InformationsquelleAutor der Antwort Thomas M. DuBuisson
Ihnen Ihre Frage beantwortet,
In deinem link oben heißt es:
Mit dem GNU-GCC-Compiler verwenden, Sie können nur Zeiger-Definitionen zum Zugriff auf absolute Speicheradressen. Zum Beispiel:
Btw http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/Variable-Attributes.html#Variable%20Attributes
InformationsquelleAutor der Antwort rib
InformationsquelleAutor der Antwort user6409471