我正在尝试在嵌入式 C/C++ 环境中进行一些简单的变量操作。由于某种原因,我一直得到零。
这是代码
void Heater::setPower( int newpower )
{
printf("1 new power %d\n",newpower);
if(newpower != power)
power = newpower;
else
return;
printf("2 new power %d\n",power);
// Set Duty
long unsigned int newduty = 0;
// Protect from divide by zero
if(power <= 0)
{
printf("2.5 zeroed\n");
newduty = 0;
power = 0;
}
else
newduty = period*(power/100);
printf("3 setduty %lu period %lu\n", newduty, period);
setDuty(newduty);
}
这是我收到的输出
1 new power 76
2 new power 76
3 setduty 0 period 10000000
所以我知道收到的号码是 76。我知道它通过了第一个障碍和第二个障碍。但不知何故,在简单的数学方程中,它变成了零。“句点”也是一个 long unsigned int 并且在类 def 中声明,但您可以看到输出是合适的。
为什么这会一直下降到零?什么不见了?我是否需要为较大的数字添加一些特殊的东西,或者我不能在 long unsigned int 或其他东西上使用简单的运算符 * 和 /?
我正在处理大量数字(x<=10,000,000),因为我使用的是内核级 pwm。