2017-09-22 3 views
1

Je travaille sur un microcontrôleur STM8S avec IAR Compiler.Placement de variables dans un emplacement mémoire absolu (IAR C/C++)

Comment puis-je corriger l'emplacement de départ plus d'une variable en utilisant pragma ou une autre méthode.

Lorsque je tente ce code, le compilateur donne ce message d'erreur:

Erreur [Lp025]: .near.bss section absolue (main.o # 12) ([0x000100-0x000100]) chevauche section absolue (main.o # 8) ([0x000100-0x000100])

Je recherche sur les notes techniques IAR "Absolute situé variable" mais je ne pouvais pas faire.

#pragma location = 0x100 /* Start address of absolute location */ 

extern uint8_t  R0, 
         R1, 
         R2, 
         R3, 
extern uint16_t  M1;   
extern uint8_t  M2,  
         M3;  
+0

Peut-être que [this] (http://www.keil.com/support/docs/2829.htm) aide. –

+0

@ Michael Walz J'ai trouvé des instructions similaires pour IAR, sur le lien que vous envoyez. Je continue d'essayer. – mryldz

Répondre

1

Utilisez #pragma location = "my_abs" ou _Pragma("location=\"my_abs\"") pour placer les variables que vous voulez dans la région absolue dans le même elfe section. Puisque #pragma location ne s'applique qu'à la déclaration suivante, vous pouvez créer une définition que vous pouvez préfixer lors de la déclaration d'une variable dans le bloc absolu. Notez que seule la syntaxe _Pragma("location=\"my_abs\"") est autorisée dans les macros du préprocesseur. Ensuite, ajoutez une ligne à la configuration de l'éditeur de liens pour mettre cette section à l'adresse désignée.

#pragma section="my_abs" 
#define IN_ABS _Pragma("location=\"my_abs\"") 

IN_ABS char R0, R1, R2, R3; 
IN_ABS short M1;   
IN_ABS char M2, M3; 

int no_abs; 

place at address mem:0x100 { rw section my_abs };

Notez que vous ne pouvez pas mélanger initialisé et variables non initialisées dans la même section.