Je pense que le compilateur IAR C utilise une extension non standard qui ressemble à
char foo @ 0x9000;
pour cela, au moins pour leur compilateur MSP430. Je n'ai jamais beaucoup utilisé GCC pour le MSP430, mais je pense qu'il a peut-être aussi supporté cela pour qu'il puisse être compatible avec le compilateur IAR.
Si vous voulez faire quelque chose qui fonctionnera sur tous les compilateurs sans vous tromper avec l'éditeur de liens, vous devrez travailler un peu plus fort à l'avant.
#define CONST_ADDR_VAR(type, name, address) type *const name##_addr =(type *)address
Après avoir appelé que pour chaque variable que vous souhaitez vous préciser devrez également faire #define var (* VAR_ADDR)
Ce serait bien si cela aurait pu être combiné avec la macro précédente, mais définir une macro dans une macro n'est pas standard. Je pense cependant qu'il existe un moyen de le faire avec le préprocesseur de GCC.
Si vous voulez singe autour avec votre éditeur de liens alors vous pourriez probablement trouver un moyen de dire où ces variables vivaient et simplement les utiliser comme extern
dans vos programmes C.
Vous pouvez également utiliser le __attribute__((section(...)))
de GCC pour ce faire, mais vous pourriez avoir besoin d'une section différente pour chaque variable dont vous souhaitez spécifier l'adresse. Il y avait d'autres choses qui semblaient un peu confuses à ce sujet, et il faudrait que vous disiez au linker où se trouvaient ces sections de toute façon.
http://www.ohse.de/uwe/articles/gcc-attributes.html#var-section
Bon point sur le pointeur 'const'. –
C'est ce que je cherchais. J'inverse un programme en utilisant l'injection DLL. Dans mon code DLL, je dois accéder aux variables qui appartiennent au processus cible. Afin d'y accéder SANS pointeurs, j'avais besoin d'un moyen de donner une variable externe à une adresse spécifique. Merci! – AndiNo
Très bien, alors si vous voulez changer les adresses de variables autour pour une raison quelconque, vous n'avez pas besoin de recompiler votre code, seulement relier :) – Artelius