Russian Qt Forum

Qt => Общие вопросы => Тема начата: Alchazar от Ноябрь 06, 2009, 17:22



Название: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Ноябрь 06, 2009, 17:22
Два дня пытаюсь нагуглить как в QT узнать такие данные о компе (Windows):
1 Модель процессора
2 Кол. во ядер
3 Загрузка процессора
4 Температура процессора
5 Температура дисков
6 Количество и модели дисков
7 SMART инфо о дисках

Ничего стоящего найти не удалось, может подскажете в какую сторону копать?


Название: Re: Как получить данные о процессоре и диске?
Отправлено: lit-uriy от Ноябрь 06, 2009, 18:22
ни как, используй API целевой системы


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Ноябрь 09, 2009, 10:06
ни как, используй API целевой системы
А можно по подорбнее?


Название: Re: Как получить данные о процессоре и диске?
Отправлено: kuzulis от Ноябрь 09, 2009, 10:15
Вот в гугле для винды например (первая попавшаяся ссылка):

http://www.java2s.com/Code/VBA-Excel-Access-Word/Windows-API/CPU-Processor.htm

а вообще, см. MSDN

Для линуха и т.п. - много вариантов как получить то, что нужно. Одним из вариантов является парсинг в /proc


Название: Re: Как получить данные о процессоре и диске?
Отправлено: ecspertiza от Ноябрь 09, 2009, 11:00
Для винды юзай WMI а для линуха исходники dmidecoder если не ошибаюсь, я так информацию о железе получал))))


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Ноябрь 09, 2009, 11:17
Для начала надо с виндой разобраться, потом для линукса буду портировать. Вот только с QT я совсем недавно познакомился, так что мне ещё много предстоит узнать.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Январь 25, 2010, 16:08
Подниму тему. Вроде получилось придумать как найти инфо о параметрах компьютора.
Использовал WMI чтобы найти Модель процессора, Кол. во ядер, и т.п.
Всё это сделал в VS, собираюсь собрать dll и затем использовать его в своей программе. Правда не все диски определяются (только 2 из трёх, иногда видит только один диск), но с этим буду пожже разбираться.

Вот только WMI не даёт никакой информации о температурах. А мне надо ещё узнать температуру дисков и процессора/процессоров.
В гугле пишут, что windows такой информации не предоставляет, и её надо самому читать с датчиков.
Погуглив ещё немного, я нашёл, что температуру можно узнать из ACPI или SMBIOS. Нашёл даже описание 
ACPI http://www.acpi.info/DOWNLOADS/ACPIspec30b.pdf (http://www.acpi.info/DOWNLOADS/ACPIspec30b.pdf) (стр. 375)
и SMBIOS http://www.dmtf.org/standards/published_documents/DSP0134_2.6.1.pdf (http://www.dmtf.org/standards/published_documents/DSP0134_2.6.1.pdf) (стр. 67)

Но  к сожалению у меня нехватает опыта и знаний в таких делах (да и прогаммист я не очень, ещё только учюсь).
Мне нужна помощь. Сам я не очень понимаю как пользоваться той информацией, что я нашёл.
Буду очень признателен, за любую помощь.
Заранее Спасибо.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 25, 2010, 16:29
даташиты это хорошо. но что-то путевое по ним скодить - не просто.
я когда-то давно, писал то о чем ты говоришь, для вендавз. но мне нужно было читать два датчика температуры и скорость вращения двух кулеров. получилось. ввод-вывод с чипом написал при помощи http://www.internals.com/utilities/winio.zip
алгоритм взаимодействия с чипом я так до конца и не понял(что-то помоему не правильно считало), потому подглядел код и исходников линухового ядра. т.е. тот код использовать в первоначальном виде не получится, а вот для понимания он супер, даже комменты есть.
так что дерзай.

зы
определи номер чипа точно. чтоб обидно потом не было)


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Январь 25, 2010, 17:52
Спасибо огромное за помощь)
Разбираюсь теперь WinIo, если я правильно понял,
Код:
GetPortVal(0x378, &dwPortVal, 4);

читает данные, то есть тут (0x378) надо указать адрес с которого я хочу получить информацию. Или я не туда смотрю?

А как узнать по какому адресу находится информация которая мне необходима?
Я пытаюсь найти адрес в SMBIOS спецификации, или я вообще не в ту степь забрёл?


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 25, 2010, 18:46
Цитировать
то есть тут (0x378) надо указать адрес с которого я хочу получить информацию
верно.

Цитировать
А как узнать по какому адресу находится информация которая мне необходима?
в даташитах написано. при том, там наверняка мультиплексированный ввод/вывод как и в большинстве современных микроконтроллеров.

Цитировать
Я пытаюсь найти адрес в SMBIOS спецификации, или я вообще не в ту степь забрёл?
вскрываешь системник, ищешь микруху с ногами по ребрам, читаешь ее номер, забиваешь в гугл, ищешь даташит.
а лучше скажи модель материнки.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Январь 26, 2010, 09:35
То есть, если я хочу чтобы программа работала хотя бы на 80-90% комп. мне надо делать поддержку кучи различных чипов? Неужели нету одного стандарта?

Материнка у меня Intel d865glc.

Как понять "мультиплексированный ввод/вывод"?


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 26, 2010, 12:08
Цитировать
То есть, если я хочу чтобы программа работала хотя бы на 80-90% комп. мне надо делать поддержку кучи различных чипов?
именно.

Цитировать
Неужели нету одного стандарта?
нет.

Цитировать
Как понять "мультиплексированный ввод/вывод"?
т.е. для того чтоб чип тебе отдал какое-то значение, с ним нужно "пообщаться", сообщив ему что ты хочешь. для другого значения так же, только сообщаешь иначе.
как я и говорил, не тривиально сие.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 26, 2010, 12:17
не нашел ни одной нормальной картинки материнки, чтоб можно было прочитать номер чипа.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Январь 26, 2010, 12:45
Он большой или маленький должен быть? В каком углу (возле чего) его искать?


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 26, 2010, 12:50
сфоткай лучше материнку, нижнюю часть.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Январь 26, 2010, 13:45
Фотографировал с телефоном, так что качество не очень
(http://img63.imageshack.us/img63/2655/p2601100005.th.jpg) (http://img63.imageshack.us/i/p2601100005.jpg/)
(http://img687.imageshack.us/img687/857/p2601100004.th.jpg) (http://img687.imageshack.us/i/p2601100004.jpg/)
(http://img32.imageshack.us/img32/1808/p2601100002.th.jpg) (http://img32.imageshack.us/i/p2601100002.jpg/)


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 26, 2010, 15:36
на средней фотке, тот что выше. номер скажи.

есть еще виндовская прога, которая инфу о железе выводит. everest кажеться...
воспользуйся лучше ею. а то в нынешних материнках чип superIO могли уже в чип южного моста впихнуть.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: kuzulis от Январь 26, 2010, 16:32
Цитировать
есть еще виндовская прога, которая инфу о железе выводит. everest кажеться...
еще SiSoft Sandra :) .


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Январь 26, 2010, 17:16
Программ я знаю разных, но мне надо использовать эти данные в своей программе, и в моём случае вариант с Everest'ом не подходит.

чип:
82562E7
L335 sw74


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 26, 2010, 18:20
Цитировать
Программ я знаю разных, но мне надо использовать эти данные в своей программе, и в моём случае вариант с Everest'ом не подходит.
;D
я это сказал к тому, что еверест показывает номера чипов и биоса.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Январь 27, 2010, 09:33
Биос:
Manufacturer :   Intel Corp.
Version :   BF86510A.86A.0077.P25.0508040031
Date :   08/04/2005  (mm/dd/yyyy)
Address :   0x0 on 512 KB
DMI Version :   2.3

Материнка:
Manufacturer :   Intel Corporation (Intel)
Product :   D865GLC
Version :   AAC28906-406
Serial Number :   ABLC34432913
Support MP :   Yes, 1 CPU(s)
Version MPS :   1.4

Чипсет:
NorthBridge :   Intel i865PE
SouthBridge :   82801EB/ER (ICH5/ICH5R) LPC Interface Bridge

Сенсор:
Sensor :   Analog Devices ADT7463


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 27, 2010, 09:37
это не все.
мы с вами на определение номера чипа тратим столько времени, что могли бы уже написать весь код ;D


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Январь 27, 2010, 09:47
Это точно)
Но сначало надо во всём разобраться


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 27, 2010, 09:52
Цитировать
Sensor :   Analog Devices ADT7463
вот он!

даташит: http://docs.google.com/viewer?url=http://www.analog.com/static/imported-files/application_notes/3619620726148651766408599520AN612_0.pdf


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 27, 2010, 09:58
вот подробнейший даташит: http://www.datasheetcatalog.org/datasheet/analogdevices/15792721ADT7463_0.pdf


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Январь 27, 2010, 10:13
Я ещё нашёл такую вещь как CPUID
http://wiki.osdev.org/CPUID (http://wiki.osdev.org/CPUID)
http://sandpile.org/ia32/cpuid.htm (http://sandpile.org/ia32/cpuid.htm)

Тут вроде всё намного проще, нету првязки к конкреиным моделям. Или это не то?


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Январь 27, 2010, 12:26
Вот, нашёл в даташите:

Temperature Measurement Registers
Reg. 0x25 Remote 1 Temperature = 0x80 default
Reg. 0x26 Local Temperature = 0x80 default
Reg. 0x27 Remote 2 Temperature = 0x80 default

теперь при помощи ф-ции GetPortVal(0x25, &dwPortVal, 1); пробую получить значение по адресу 0x25, но получаю такой ответ - 4294967295
Разве не должно тут быть двоичное число (типо 01101100)?

Код
C++ (Qt)
GetPortVal(0x25, &dwPortVal, 1);
 
std::cout<< "val 00 " << dwPortVal<< std::endl;

внутренний голос мне подсказывает, что я пропускаю что-то очень важное... вот только что


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 27, 2010, 12:58
1. dwPortVal проинициализировали нулем?
2. "Разве не должно тут быть двоичное число (типо 01101100)?" - оно возможно там и есть, но вы выводите эту переменную как целое.
3. "внутренний голос мне подсказывает, что я пропускаю что-то очень важное... вот только что" - угу. настройку чипа для общения. читайте внимательно. еще гляньте в исходниках линуксового ядра(поиск по всем файлам ключевого слова ADT7463(без учета регистра)).
исходники тут: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.6.tar.bz2


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Январь 27, 2010, 13:08
1. dwPortVal проинициализировали нулем?
это  - dwPortVal = 0;?
если, да, тогда проинициализировал
Цитировать
2. "Разве не должно тут быть двоичное число (типо 01101100)?" - оно возможно там и есть, но вы выводите эту переменную как целое.
Как правильно вывести переменную, чтобы получить двоичное число?
Цитировать
3..... еще гляньте в исходниках линуксового ядра(поиск по всем файлам ключевого слова ADT7463(без учета регистра)).
исходники тут: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.6.tar.bz2
Займусь теперь чтением исходников, может найду то, что ищю )


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 27, 2010, 18:10
Цитировать
Как правильно вывести переменную, чтобы получить двоичное число?
посмотри QBitArray

коды тут: linux-2.6.32.6/drivers/hwmon/lm85.c
там все адреса портов, константы, понятен принцип инициализации, и т.д...

доп документация тут: linux-2.6.32.6/Documentation/hwmon/lm85
читать внимательно! и по ссылкам пройдись.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Январь 28, 2010, 10:41
Вот нашёл в lm85.c:
Код:
#define	LM85_REG_TEMP(nr)		(0x25 + (nr))
........
........
data->temp[i] =  lm85_read_value(client, LM85_REG_TEMP(i));
Тут он читает информацию с сенсора.
А что за переменная client? Не пойму, что она делает. Или она не нужна в моём случае?


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 28, 2010, 11:01
в твоем случае, этот код вообще нужно использовать как псевдокод.
но константы можно использовать по прямому назначению.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Январь 28, 2010, 14:36
Я вот чего не пойму, в спицификации пишут, что данные о температуре надо читать в регистрах по адресу 0х25, 0х26, 0х27. Значит эти регистры должны быть в памяти?
То есть сенсор должен положить в память данные?
Или всё таки, эти регистры находится в самом чипе? Тогда как обяснить GetPortVal(), что регистры читать надо не в памяти, а в чипе?
Что-то я чем больше пытаюсь разобраться, тем сильнее путаюсь


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 28, 2010, 14:47
Цитировать
Значит эти регистры должны быть в памяти?
нет.

Цитировать
То есть сенсор должен положить в память данные?
нет.

Цитировать
Или всё таки, эти регистры находится в самом чипе?
да.

Цитировать
Тогда как обяснить GetPortVal(), что регистры читать надо не в памяти, а в чипе?
ничего ему объяснять не нужно. функция и так их читает из регистров на железе. в данном случае по адресам: 0х25, 0х26, 0х27

Цитировать
Что-то я чем больше пытаюсь разобраться, тем сильнее путаюсь
ты так и не прочел даташит по чипу, раз не понимаешь, что прежде чем читать значения, нужно настроить чип на это. у чипа, так называемые многофункциональные порты. т.е. по одним и тем же портам он может отдавать разные значения, относящиеся к разным датчикам. а так же, выходы могут быть и входами. чип настраивать нужно.

зы
без прочтения даташита, ничего у тебя не получится. а судя по вопросам, ты его так и не прочел.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Январь 28, 2010, 17:01
Вот, что пишут в даташите:
Код:
When reading data from a register, there are two possibilities:
1. If the ADT7463’s Address Pointer Register value is unknown
or not the desired value, it is first necessary to set it to
the correct value before data can be read from the desired
data register. This is done by performing a write to the
ADT7463 as before, but only the data byte containing the
register address is sent as data is not to be written to the
register.
То есть надо в сенсор записать адрес регистра, значение которого я хочу получить.

Я так понимаю, его (сенсора) адрес один из 3-ёх:  0x2c, 0x2d, 0x2e(default)?
Значит я должен в 0x2e записать 0х25?
А потом узнавать температуру тоже по адресу 0х2e?





Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 28, 2010, 18:01
сейчас я буду читать.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: lit-uriy от Январь 28, 2010, 21:30
>>Как правильно вывести переменную, чтобы получить двоичное число?
Можно воспользоваться
QString & QString::setNum ( int n, int base = 10 )
и  base установить в 2. Тогда на выхлопе получится строка содержащая двоичное представление числа


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Январь 29, 2010, 14:22
Нашёл пример кода для считывания ChipID для чипа ITE-8712

Код
C++ (Qt)
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include "winio.h"
 
byte configPort[4]={0x87, 0x01, 0x55, 0x55};
WORD indexPort = 0x2e;
WORD dataPort = 0x2f;
WORD addressPortEC = 0, dataPortEC = 0;
 
DWORD readFromPort(WORD index) {
  bool result = false;
  DWORD portValue = 0;
 
  result = SetPortVal(indexPort, index, 1);
 
  if (result) {
     result = GetPortVal(dataPort, &portValue, 1);
     if (result) {
        return portValue;
     }
     printf("Ошибка при чтении значения из порта.\n");
     return 0;
  }
  else {
     printf("Ошибка при записи значения в порт.\n");
     return 0;
  }
}
 
bool writeToPort(WORD index, DWORD value, byte numBytes=1) {
  bool result = false;
  short a = 0;
 
  a = outp(indexPort, index);
 
  if (result) {
     result = SetPortVal(dataPort, value, 1);
     if (result) {
        return true;
     }
     printf("Ошибка при записи значения в порт.\n");
     return false;
  }
  else {
     printf("Ошибка при записи значения в порт.\n");
     return false;
  }
}
 
void main()
{
  bool bResult;
  DWORD res;
 
  bResult = InitializeWinIo();
 
  if (bResult)
  {
     for (int i=0; i<4; i++) {
         SetPortVal(0x2e, configPort[i], 1);
     }
 
     res = readFromPort(0x20);
     if ((byte)res==0x87) {
        res = readFromPort(0x21);
        if ((byte)res==0x12) {
           printf("Initialize ITE-8712 - OK.\n");
        }
        else {
           printf("Error during initialize ITE-8712.\n");
        }
     }
     else {
        printf("Error during initialize ITE-8712.\n");
     }
     ShutdownWinIo();
  }
  else
  {
     printf("Error during initialization of WinIo.\n");
     exit(1);
  }
}
Буду пробовать переделать его для моего чипа. Может что нибуть получиться.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 29, 2010, 19:24
попробуй вот что:
Код
C++ (Qt)
/* !ПСЕВДОКОД! */
int v = readbyte(0x40);
cout << "v = " << v;
if ( !(v & 0x01) ) {
  cout << "ok, " << v;
  writebyte(0x40, v | 0x01);
}
if ( v & 0x02 ) {
  cout << "locked";
}
if ( v & 0x04 ) {
  cout << "ready";
}
 

напиши код, запусти, выложи сюда код и скрин вывода программы.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 29, 2010, 19:31
>>Как правильно вывести переменную, чтобы получить двоичное число?
Можно воспользоваться
QString & QString::setNum ( int n, int base = 10 )
и  base установить в 2. Тогда на выхлопе получится строка содержащая двоичное представление числа
Юра, ты по моему электронщик? или я ошибаюсь? может тоже подскажешь что.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: ecspertiza от Январь 29, 2010, 20:47
Вот только WMI не даёт никакой информации о температурах. А мне надо ещё узнать температуру дисков и процессора/процессоров.

Секунду гражданин :) Знаю что поздновато подключаюсь к теме, но все же, читать данные с чипа это конечно здорово, но сколько их может быть моделей? для каждого свою ф-цию писать будешь? Пусть этим делом занимается ось, а ты юзай апи той оси на которой работает программа, ибо написать ф-ции под несколько осей проще нежели колупать каждый чип(ну это мое ИМХО). Покури WMI хорошенько там есть класс Win32_TemperatureProbe я думаю это именно то что тебе нужно, а под линь тоже вроде есть софт определения температуры, но тут есть еше и + под линь почти весь софт идет с исходниками :)


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 29, 2010, 21:00
Цитировать
для каждого свою ф-цию писать будешь?
придется. в лине для каждого чипа свой модуль ядра.

Цитировать
а под линь тоже вроде есть софт определения температуры
да. в лине с этим проще.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Январь 31, 2010, 01:13
Alchazar, ну что с результатом?


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Февраль 01, 2010, 09:36
что-то я никак не найду, что надо иклюдить чтобы использовать readbyte(), writebyte()


Название: Re: Как получить данные о процессоре и диске?
Отправлено: kuzulis от Февраль 01, 2010, 14:10
Цитировать
придется. в лине для каждого чипа свой модуль ядра.
а lm_sensors зачем тогда? :)

PS: и еще, раз упомянуто было выше про WMI - то в какой библиотеке в винде *.dll  лежат классы для работы с WMI? т.к. я тож хочу WMI использовть, но вот проблема с minGW ! Нету инклюдов и либ в нём! :(


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Февраль 01, 2010, 14:16
WMI Win32_TemperatureProbe не работает на большинстве случаев.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: kuzulis от Февраль 01, 2010, 14:18
Цитировать
WMI Win32_TemperatureProbe не работает на большинстве случаев.
Почему?


Название: Re: Как получить данные о процессоре и диске?
Отправлено: BRE от Февраль 01, 2010, 14:20
Цитировать
придется. в лине для каждого чипа свой модуль ядра.
а lm_sensors зачем тогда? :)
Так sensors использует информацию, которую предоставляет ядро. А в ядре есть специальные модули для поддержи этих чипов.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: kuzulis от Февраль 01, 2010, 14:25
Цитировать
Так sensors использует информацию, которую предоставляет ядро. А в ядре есть специальные модули для поддержи этих чипов.
Ну да! Я про это и говорю!

Согласен с ecspertiza что проще брать инфу с девайсов из самой ОС! В случае с линухом - использовать lm_sensors, в случае с виндой  - WMI (или что-то альтернативное)...

IMHO, делать код на отдельные чипы - это "изобретать велостпед" (с) :)


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Февраль 01, 2010, 14:55
На сколько я понял, ОС получает инфо только в том случае, если сам биос (сенсор или кто там ещё) высылает ОСи инфо, но это происходит не на всех материнках/процах, поэтому Win32_TemperatureProbe не всегда работает. В моём случае (на моём пк) Win32_TemperatureProbe не даёт информации о температуре.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: ecspertiza от Февраль 01, 2010, 15:09
PS: и еще, раз упомянуто было выше про WMI - то в какой библиотеке в винде *.dll  лежат классы для работы с WMI? т.к. я тож хочу WMI использовть, но вот проблема с minGW ! Нету инклюдов и либ в нём! :(

Если чесно WMI с MinGW неюзал, я писал длл-ку в студии мне так проще показалось, а вообще вот примеры http://msdn.microsoft.com/en-us/library/aa394558(VS.85).aspx


Название: Re: Как получить данные о процессоре и диске?
Отправлено: niXman от Февраль 01, 2010, 15:34
что-то я никак не найду, что надо иклюдить чтобы использовать readbyte(), writebyte()
написал же, что это псевдокод!
readbyte(), writebyte() - это функции чтения и записи байта.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Февраль 01, 2010, 16:13
Код
C++ (Qt)
#include <windows.h>
#include <stdio.h>
#include "winio.h"
#include <iostream>
 
 
 
void main()
{
 DWORD dwPortVal;
 DWORD dwMemVal;
 bool bResult;
 HANDLE hPhysicalMemory;
 PBYTE pbLinAddr;
 WORD port;
 int i;
 
 // Call InitializeWinIo to initialize the WinIo library.
 
 bResult = InitializeWinIo();
 
 if (bResult)
 {
       GetPortVal(0x40, &dwPortVal, 1);
if ( !(dwPortVal & 0x01) )
{
std::cout << "ok, " << dwPortVal;
SetPortVal(0x2E, dwPortVal | 0x01, 1);
}
if ( dwPortVal & 0x02 )
{
std::cout << "locked ";
}
if ( dwPortVal & 0x04 )
{
std::cout << "ready ";
}
       ShutdownWinIo();
 
 }
 else
 {
   printf("Error during initialization of WinIo.\n");
   //exit(1);
 }
 
 system("pause");
}
 
 
 

Вывод:
locked ready Press any key to continue . . .

Попробовал ещё пару раз запустить тот же код, теперь ответ получаю другой:
ok, 4294967280Press any key to continue . . .

ok, 78locked ready Press any key to continue . . .


Название: Re: Как получить данные о процессоре и диске?
Отправлено: Alchazar от Февраль 03, 2010, 17:45
Всё, что я понял перечитав несколько раз даташит на мой чип - вся работа с ним идёт через SMBus. Теперь читаю спецификации SMBus и I2C и прихожу к выводу что придётся подучить ассемблер.


Название: Re: Как получить данные о процессоре и диске?
Отправлено: lks от Июнь 17, 2018, 21:30
Ну что, у кого-нибудь получилось с температурой ЦП ?