problème : adresse d'une variable globale modifiée
Bonjour,
J'ai un problème sur un µControlleur 32bits (PIC32MX) avec le code suivant. L'adresse de la variable gblVar est modifiée lors d'appel de fonctions :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| extern STRUCT_GLB gblVar; // défini dans un autre fichier .c
int foo1(int a, int b, int c, int d);
int foo2(int a, int b, int c, int d, MY_STRUCT * e);
void init(void){
int a, b, c, d;
//...
printf("%p\n", &gblVar);
foo1(a, b, c, d);
printf("%p\n", &gblVar); // erreur : l'adresse a été modifiée (les deux octets de poids fort de l'adresse ont été mis à 0)
gblVar.x = 10; // le CPU génère une exception car l'adresse de la variable n'est plus valide
//...
} |
Dans un autre fichier .c, j'ai :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
int foo1(int a, int b, int c, int d);
int foo2(int a, int b, int c, int d, MY_STRUCT * e);
int foo1(int a, int b, int c, int d){
MY_STRUCT e;
e.a = 10;
// ...
e.z = 12;
return foo2(a, b, c, d, &e);
}
int foo2(int a, int b, int c, int d, MY_STRUCT * e){
// ...
return x;
} |
Dans la fonction foo1(), si je remplace :
Par :
Code:
static MY_STRUCT e;
=> je n'ai plus le problème.
De quoi pourrait venir le problème ? Bug du compilateur/linkeur ?
Merci d'avance