Это как никогда
назначен ...
Нет никаких причин для компилятора присваивать значение от 0 до t в объявлении
float t = 0;
, поскольку он сразу назначается MotorSteps на следующей строке. Я предполагаю, что оптимизатор игнорирует присвоение нулю в объявлении, а отладчик просто отображает неинициализированное значение для памяти, где t находится в стеке.
Возможно, вы захотите полностью избавиться от формулы и использовать справочную таблицу для значений линейного изменения. Похоже, что есть только 51 значение, поэтому таблица будет относительно небольшой. Код для поиска значения будет на намного быстрее, чем использование библиотек с плавающей запятой на 8051.
#define NUM_RAMP_STEPS 51
unsigned char MotorSteps = 0; //"Global" variables
unsigned char MotorSpeed = 0;
const unsigned char RampTable[NUM_RAMP_STEPS] = {...appropriate values...};
bit RampUp()
{
if ( MotorSteps < NUM_RAMP_STEPS )
{
MotorSpeed = RampTable[MotorSteps];
return 0;
}
else return 1;
}
По крайней мере, вы можете проверить целое число, а не число с плавающей точкой, чтобы избежать библиотек с плавающей запятой, если они вам не нужны ...
unsigned **int** MotorSteps = 0; //"Global" variables
unsigned **int** MotorSpeed = 0;
bit RampUp()
{
if ( MotorSteps < 51 )
{
float t = MotorSteps;
t = (1-((50 - t)/50))*15;
t = (t * t);
MotorSpeed = 100 + t;
return 0;
}
else return 1;
}