Je suis très nouveau en programmation C et je travaille sur une application de firmware pour mon MCU. Cette méthode fonctionnait correctement lorsque j'utilisais le compilateur KEIL (Big Endian) mais lorsque je passais au compilateur SDCC (Little Endian), il ne fonctionnait pas correctement. Quelqu'un peut-il s'il vous plaît expliquer ce que je fais mal ???Quel est le problème avec cette arithmétique lors de l'utilisation du compilateur SDCC (Little Endian)?
Le périphérique cible est un Silicon Labs C8051F320 basé sur l'architecture 8051.
unsigned **int** MotorSteps = 0; //"Global" variables
unsigned **int** MotorSpeed = 0;
bit RampUp()
{
float t = 0;
t = MotorSteps;
if (t < 51)
{
t = (1-((50 - t)/50))*15;
t = (t * t);
MotorSpeed = 100 + t;
return 0;
}
else return 1;
}
AJOUTÉE: D'abord, je maintenant changé les MotorSteps et MotorSpeed être ints non signés. Dans mon débogueur, pour une raison quelconque, si je définissais un point d'arrêt sur la ligne if-statement, à la première entrée de cette fonction MotorSteps = 00, t devrait également être affecté à 0 mais le débogueur montre que t = 0.031497 (décimal). Si je commute le débogueur à afficher en hexadécimal, t = 0x3d010300. C'est comme si on ne l'assignait jamais ...
Il serait utile de savoir à quoi ressemblaient MotorSteps et SetSpeedHz. –
Il serait également utile de voir la déclaration pour MotorSpeed. – semaj
Il n'y a rien dans le code qui dépend de l'endian. Alors quel est le problème? – AnT