組み込み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であることを知っています。私はそれが最初のハードルと2番目のハードルを超えていることを知っています。しかし、どういうわけか、単純な数学の方程式では、それはゼロになります。「period」も長いunsignedintであり、クラスdefで宣言されていますが、出力が適切であることがわかります。
なぜこれが一貫してゼロに落ちるのですか?何が欠けている?大きな数のために特別なものを含める必要がありますか、それとも単純な演算子*および/を長いunsigned intなどで使用できませんか?
カーネルレベルのpwmを使用しているため、高い数値(x <= 10,000,000)を処理しています。