Мониторинг температуры процессора дельта Т модуля ядра - PullRequest
0 голосов
/ 22 октября 2011

Я пытаюсь отслеживать температуру процессора и вычислять дельта Т в модуле ядра Linux.Я немного знаю о модуле ядра, но я использую do_div () для деления на целое число.Я не понимаю, почему я всегда получаю базу 1. Вот мой код:

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

Мой вывод всегда deltaT = 1 и остаток = x.Мой желаемый результат - deltaT = x и remainder = y.Моя формула для дельта Т:

(sfan_temp-sfan_temp_old)/sfan_temp * 100; 

Например, если sfan_temp = 75 ° C и sfan_temp_old = 65 ° C, тогда

(75-65)/75*100 = 13.3333333

1 Ответ

1 голос
/ 22 октября 2011

Я не знаю, стоит ли вам использовать 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
...