Пытаюсь получить температуру процессора.
Уже пробовал использовать 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 или 29 декабря? это имеет большое значение
Других решений пока нет …