监视CPU温度delta T内核模块

时间:2011-10-22 11:47:42

标签: c linux hardware sensor

我正在尝试监控CPU温度并计算Linux内核模块中的delta T.我对内核模块了解不多,但我使用do_div()来除以整数。 我不明白为什么我总是得到一个基础1.这是我的代码:

deltaT = sfan_temp - sfan_temp_old;
remainder = do_div ( deltaT, sfan_temp );

我的输出总是deltaT = 1且余数= x。 我想要的输出是deltaT = x和余数= y。 我对delta T的公式是:

(sfan_temp-sfan_temp_old)/sfan_temp * 100; 

例如,如果sfan_temp = 75°C且sfan_temp_old = 65°C,那么

(75-65)/75*100 = 13.3333333

1 个答案:

答案 0 :(得分:1)

我不知道你是否应该使用do_div()。但如果你使用它,那么:

来自div64.h

// the semantics of do_div() macros are:
uint32_t do_div(uint64_t *n, uint32_t base) {
  uint32_t remainder = *n % base;
  *n = *n / base;
  return remainder;
} 

在你的例子中:

n = 75 - 65 = 10
base = 75

// =>
remainder = 10 % 75 = 10
deltaT = n = 10 / 75 = 0

目前还不清楚在这种情况下如何为1获取0而不是deltaT

*100之前应用do_div()

n = (sfan_temp - sfan_temp_old)*100;
remainder = do_div(n, sfan_temp)

// =>
remainder = 1000 % 75 = 25 // remainder/sfan_temp = 0.3333
n = 1000/75 = 13
相关问题