Accéder aux symboles définis dans le script de l'éditeur de liens par application
Dans mon linker le fichier de script, j'ai défini deux symboles
define symbol _region_RAM_start__ = 0xC0000000;
define symbol _region_RAM_end__ = 0xC00fffff;
et puis j'ai exporté en tant que bien comme montré ci-dessous
export symbol _region_RAM_start__;
export symbol _region_RAM_end__;
De l'application du code, j'essaie d'accéder à ces symboles
extern const unsigned int _region_RAM_start__;
extern const unsigned int _region_RAM_end__;
....
int GetRAMSize()
{
int size = 0;
unsigned int address_1 = _region_RAM_start__;
unsigned int address_2 = _region_RAM_end__;
size = address_2 - address_1 + 1U;
return size;
}
Maintenant, j'attend le retour de la valeur de la 0x00100000, cependant, tout ce que je reçois est de 0.
Donc, quand je me suis tourné vers le débogueur, j'ai remarqué qu' _région_RAM_start__ et _région_RAM_fin__ ont les valeurs 0xC0000000 et 0xC00fffff respectivement, mais address_1 et address_2 ont la valeur 0.
L'optimisation du compilateur est réglé sur "None". Cela a été m'énerve pour un certain temps maintenant. Est là quelque chose de très évident, je suis absent ici (autre que je ne devrais pas faire cela en premier lieu)?
Solution
Grâce à n.m. pour la réponse
unsigned int address_1 = (unsigned int) (&_region_RAM_start__);
Sinon address_1 et address_2 les deux contiennent des ordures valeurs (valeurs disponibles à l'adresse 0xC0000000 et 0xC00fffff respectivement, mais les ordures du point de vue de ce code)
source d'informationauteur ka05
Vous devez vous connecter pour publier un commentaire.
C'est un peu vieux, mais je vais répondre à ça de toute façon...
De la
ld
manuel:Depuis qu'ils sont génériques adresse symboles que vous essayez d'accès et pas nécessairement des pointeurs vers un type spécifique, vous ne voulez pas de les déclarer unsigned int, au lieu de les déclarer comme
extern void _region_RAM_START;
puis &_region_RAM_START aura le type 'void *'.
Code ci-dessous devrait fonctionne comme prévu: