Un problème avec C définit:C définit le bon usage
#define RANGE1_ms 64
#define FS 16000.0f
#define BS 64
#define COUNTER1_LIMIT ((RANGE1_ms/1000.0f)* FS/BS)
Cela donne 16.0
pour COUNTER1_LIMIT
.
Le débogage du code dans Eclipse montre que tout est OK. Cependant, lorsque je compile une version à partir d'un makefile, elle produit un résultat différent. J'ai réduit le problème à cette ligne:
if(counter1 == (uint16_t)COUNTER1_LIMIT)
{
...
}
où counter1
est uint16_t
. Qu'est-ce que je fais de mal avec ces définitions?
Cela résout le problème:
if(counter1 == 16)
mais ce n'est pas le chemin à parcourir.
Le 16.0 pourrait être converti en 15.999999 et en convertissant en uint16_t serait converti en 15. –
Je suggérerais aussi de promouvoir counter1 à 'float' et de vérifier si la différence absolue entre eux est inférieure à dire' 0.001'. –
Essayez #define COUNTER1_LIMIT ((uint16_t) ((RANGE1_ms/1000.0f) * 16000.0f/64)) –