Попытка получить температуру процессора.
Вы уже пробовали использовать WQL (класс WMI MSAcpi_ThermalZoneTemperature
), но, по-видимому, он еще не реализован для всех платформ. На большинстве машин он просто возвращает каждое существующее сообщение об ошибке через возвращаемое значение HRESULT
. Сама температура не возвращается.
Идея состоит в том, чтобы прочитать эту температуру непосредственно через порт шины. Я нашел библиотеку, которая предоставляет функциональные возможности функций outp и inp, и с ним удалось запустить инициирование соединения (NTPort), однако вопрос становится тем, к какому порту подключиться, чтобы читать данные. Микроконтроллер IT8728F. SpeedFan (приложение, которое может читать температуру) в своих журналах говорит, что считывает данные с порта 0x290. Однако при подключении к нему данные, которые возвращаются, не выглядят как температура (он всегда возвращает 29).
Так что следующая вещь, которая была опробована, состояла в том, чтобы читать из любого порта, пытаясь определить, были ли какие-либо данные, которые прошли, выглядели как температура. Однако из каждого порта поступали некоторые данные, которые были либо слишком низкими, либо слишком высокими, чтобы быть реальной температурой.
int CPU_TEMP;
Outp(INDEX, BANK_SET);
Outp(DATA, Inp(DATA)|0x01);
for(CPU_TEMP=0x0;CPU_TEMP<0x999;CPU_TEMP++)
{
Outp(INDEX, CPU_TEMP);
printf("CPU temp: %iC\n", Inp(DATA));
}
возможно, ваш процессор составляет 29 градусов по Цельсию и стабилен. Это кажется законным для процессора.
Также: 0x00000029 или DEC 29? что имеет большое значение