Je crée un script de lieur GNU .ld et je voudrais définir symboliquement l'origine de certaines sections de la mémoire. Ce qui suit ne fonctionne pas:Définition d'une constante symbolique pour l'origine du script GNU .ld
BASE_ADDR = 0x4000;
MEMORY
{
m_interrupts (RX) : ORIGIN = BASE_ADDR, LENGTH = 0x0200
m_bootloader_config (RX) : ORIGIN = BASE_ADDR + 0x3C0, LENGTH = 0x0040
m_text (RX) : ORIGIN = BASE_ADDR + 0x400, LENGTH = 0x10000 - (BASE_ADDR + 0x400)
m_data (RW) : ORIGIN = 0x1FFFF000, LENGTH = 0x4000
}
Il en résulte l'erreur suivante:
Invoking: Cross ARM C++ Linker
../MKL27Z64xxx4_flash.ld:67: nonconstant expression for origin
collect2: error: ld returned 1 exit status
L'erreur fait référence à la ligne qui se lit comme suit:
m_interrupts (RX) : ORIGIN = BASE_ADDR, LENGTH = 0x0200
Ce qui me déconcerte est que BASE_ADDR
semble assez constant pour moi. Y a-t-il une syntaxe spéciale que je dois invoquer pour convaincre ld
que BASE_ADDR
est constant?
Cela semble fonctionner avec binutils 2.26 Quelle version utilisez-vous – wds
Selon Eclipse, il utilise:.?" GNU ARM C/C++ compilateur croisé \t 2.4. 1.201704251808 \t ilg.gnuarmeclipse.managedbuild.cross.feature.group Liviu Ionescu " Vous ne savez pas quelle version particulière de l'éditeur de liens il utilise –