Bonjour tout le monde :

J'ai actuellement un souci,et je compte sur votre expertise pour pouvoir le résoudre :

J'ai un programme C ,avec des fichier .c et .h

J'ai déclaré une varibale globale : extern uint32_t STATUS;
et j'ai mis un # include du fichier dans le quel se trouve cette déclaration.
Ensuite dans main.c avant le "int main()",j'initialise cette variable ,donc j'estime qu'elle est allouée d'une façon statique.

Deux fonction dans d'autre fichiers utilisent cette variable globale pour la mettre à jour : ,et j'appelle une de ces fonction dans mon programme main.

Voila quelque bout de code :

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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
int32_t   write_spi_8(unsigned char data)
{
	uint32_t status;
	uint32_t commande_spi;
commande_spi=(0x80000010+ (data<<8));
 
 
 
	////lecture du status
 
 
 
							if(((*adr_status) & mask_status)==0x0 ) // est ce que je suis en wait??
												{
 
															*adr_decoder=commande_spi;	//commande spi
															//ici retour de status
															status=*adr_status;
 
 
 
												}
 
												while(((*adr_status) & mask_status)!=mask_status) //
												{
 
 
												}
 
 
 
												*adr_decoder=0x00000000;  // passe en wait alors ,et le status se remettra à '0'
 
 
 
 
 
return status;
 
 
}
Voilà LA deuxieme fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
uint32_t  FASTSPI_STROBE(unsigned char strobe)
{uint32_t status=0;
CS_low();
	//CC2420_SetReg(strobe,0x0000);    // a simple write
status=write_spi_8(strobe);
 
 
	CS_high();
	return status;
 
}
et voila le programme main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
while(1)
{
//commande oscillator
	do
	{
	STATUS=FASTSPI_STROBE(SXOSCON);
	}while(STATUS!=0x80004010);
	//read status
	//lire_status(&status);
}
Vous pouvez remarquer que les fonction intermédiaires utilisent des variables locales dont la valeur est retournée afin que dans le main la variable globale STATUS puisse récupérer cette valeur.

Le problème alors est le suivant : dans ma variable globale STATUS : j'ai toujours un 0!!Alors que je dois obtenir la valeur que j'attend !!

Merci pour votre compréhension