Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Узнать температуру


Автор: Delphist 20.4.2005, 15:45
Как узнать температуру проца + скорость вращения вентилятора.
Только не говорите что это не возможно. Внизу исходник на асме. Мож кто перевести его может!

Автор: chipset 21.4.2005, 00:33
Есть теги _asm вроде ;)

Автор: AISIN 4.5.2005, 23:42
Я знаю в компьютер вставляется микросхема LM79. Она может:
контролировать температуру, управлять вентиляторами, контроль вскрытия системного блока.
для определения вращения вентилятора.
номер базового порта base=0х290
получаем текущее значение счетчика outPort(Base+5,0х28.1)
//читаем значение регистра конфигурации
dwResult=0;
inPort(Base+5, 0x28,1)
uCur=dwResult;
//проверяем крутится ли вентилятор
if(uCur==0xFF)
return 0;
outPort(Base+5,0x47,1)///получим значение делителя
inPort(Base +6 ,&dwResult,1)//читаем значение делителя
switch(Cooler)
{
case 1:
uC=1<<((dwResult>>4)&0x03);
break;
case 2:
uC=1<<((dwResult>>6)&0x03);
break;
case 3:
uC=2
}
//считаем кол-во оборотов в мин для вентилятора(1350000/(uC*uCur));

Автор: Leksey 10.5.2005, 22:37
AISIN можно поподробнее о функциях: inPort и outPort

Автор: AISIN 10.5.2005, 23:24
Leksey программирование этих функций зависит от того какая у тебя операционка. Допустим в winde2000 нужно работать с драйверами устройства. А в winde98 необязательно использовать драйверы, а можно и использовать...
Аргументы inPort и outPort первый аргумент номер порта, второй передает или получает значение от порта, а третий определяет размер передаваемых данных. Допустим
Для 98
Код

#define IO32_WRITEPORT CTL_CODE(FILE_DEVICE_UNKNOWN,1\
                                          METHOD_NEITHER,FILE_ANY_ACCESS)
#define IO32_READPORT CTL_CODE(ILE_DEVICE_UNKNOWN,2,\
                                           METHOD_NEITHER,FILE_ANY_ACCESS)
включаем драйвер
hx=CreateFile("///")
//////////////////////////////
struct tagPort32
{
    USHORT wPort;
    ULONG   dwValue;
    UCHAR   bSize;
}
bool outPort(WORD wP,DWORD dw,BYTE size){
 if(hx==NULL)return false;
 DWORD Return;
 tagPort32 port; 
 port.bSize=size;
 port.dwValue=dw;
 port.wPort=wP;
 return DeviceIoControl(hx,IO32_WRITEPORT,    
     &port,sizeof(tagPort32),NULL,0,&dwReturn,NULL);
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)