bsuir.info
БГУИР: Дистанционное и заочное обучение
(неофициальный форум)
Вход (быстрый)
Регистрация
[ Новые сообщения · Правила форума · Поиск · RSS ]

  • Страница 1 из 1
  • 1
СПО
abominogДата: Пятница, 21.01.2011, 09:02 | Сообщение # 1
Группа: Удаленные





Такой вопрос по 3й лабе, там где CMOS. Сходится ли вообще у кого-нибудь вычисляемая контрольная сумма с той, что хранится в памяти?
Вычисляю так:
Code

unsigned int i, s = 0;
   for (i = 0x10; i<= 0x2D; i++) {
    outp(0x70, i);
    s += inp(0x71);
   }  

Из памяти извлекаю так:
Code

int check1, check2;
   int s;
   outp(0x70, 0x2E);
   check1 = inp(0x71);
   outp(0x71, 0x2F);
   check2 = inp(0x71);
   s = check1*255 + check2;

Вроде все правильно, но значения разные получаются. WTF?


Сообщение отредактировал abominog - Пятница, 21.01.2011, 09:03
 
GoodManДата: Суббота, 22.01.2011, 13:58 | Сообщение # 2
Пятикурсник
Группа: Проверенные
Сообщений: 160
Статус: Оффлайн
Есть такое. Тоже не совпадало. Вычислял также, получал чуть по-другому

Code
int checkSum = 0x0;  /* checksum from 2Eh and 2Fh bytes */

   printf("Reading CMOS control sum from bytes 2Eh and 2Fh: ");
   outp(0x70, 0x2E);
   checkSum = inp(0x71);  /* reading higher byte */
   checkSum <<= 8;   /* shifting before adding 2Fh value */
   outp(0x70, 0x2F);  /* reading lower byte */
   printf("%x\n", checkSum + inp(0x71)); /* adding 2Fh to checksum */

Не помню помогло это или нет smile Делал 3 года назад. Проверь, может сработает.

Сообщение отредактировал GoodMan - Суббота, 22.01.2011, 13:58
 
abominogДата: Вторник, 25.01.2011, 12:30 | Сообщение # 3
Группа: Удаленные





Только что с экзамена. Как выяснилось, эти значения и не должны совпадать. Начиная с win2000 в ОС используется некая прослойка для обращения к КМОП-памяти, поэтому значения и отличаются.
GoodMan, спасибо за участие )
 
  • Страница 1 из 1
  • 1
Поиск: