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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
=> je n'ai plus le problème.

De quoi pourrait venir le problème ? Bug du compilateur/linkeur ?

Merci d'avance