Watchdog

Тема в разделе "WASM.OS.DEVEL", создана пользователем BarDimS, 2 июн 2010.

  1. BarDimS

    BarDimS New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2009
    Сообщения:
    4
    В Winbond W83627EHG есть функция "сторожевого пса".
    Задается интервал таймера, запускается таймер. Когда таймер сработал происходит перезагрузка системы. Мне это нужно для того, чтобы перезагружаться при зависании программы(программа постоянно сбрасывает таймер).
    Открыл прямой доступ к портам с помощью GIVEIO.sys.
    Написал на TASM вставку(вставка в программу на BCB 6.0), которая запускает таймер с 2-ух сек. интервалом:
    Код (Text):
    1.     _asm
    2.     {
    3.         // выбираем логическое устройство - WDTO#
    4.                 mov dx, 0x07 // 0x07
    5.                 mov al, 0x08
    6.                 out dx, al
    7.         // активируем WDTO#
    8.        mov dx, 0x30
    9.        mov al, 0x01
    10.        out dx, al
    11.         // настройка: нет ускорения счета, подсчет секунд
    12.                 mov dx, 0xf5
    13.                 mov al, 0x00 // 00000000
    14.                 out dx, al
    15.         // запрещаем сброс (не в 0, а в нач. зн.) счетчика по прерыванию от мыши и клавиатуры
    16.                 //mov dx, 0xf7
    17.                 //mov al, 0x00
    18.                 //out dx, al
    19.         // запускаем двухсекундный таймер
    20.                 mov dx, 0xf6
    21.                 mov al, 0x01
    22.                 out dx, al
    23.     }
    Вставка не сработала: система через две секунды не перезагрузилась.
    Пробовал использовать еще функцию ресета, но тоже не сработало.
    Подскажите пожалуйста в чем причина?
    PS:Ссылка на datasheet:
    http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/W83627EHF_W83627EHG.pdf
     
  2. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    BarDimS

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

    - Если ты настроил свою "сторожевую кошку" то что произойдет по истечении интервала? В приведенном тобой коде я не вижу установки какого-либо обработчега и самого обработчега тоже. Будет сгенерировано прерывание? Какое? Кто его будет обрабатывать и перезагружать систему в твоей схеме?

    - Ты пытаешься напейсать сразу весь комплекс но помни что винда может сбросить настройки какого-либо порта, она может получить это прерывание (если это прерывание) и просто подавить его... короче ожидай что в твой user32 код вмешается винда причем самым непредсказуемым способом. Лучше всего сначала все отладить в DOS;

    - Зачем открывать порты на доступ user32 приложению? Если ты так уверен что твои дела с этими портами абсалютна уникальны и ничему системному не помешают - почему бы не написать простой драйвер который ничего не делает окромя как на запуске устанавливает сторожа? Рекомендую простейшего бипера из одной из первых стотей Four-F. Скомпелять его на асме (FASM) не должно занять многа времени;

    - Если ты установил сторожа то как ты проверяешь что ты его действительно установил? Опять - проверка в DOS.
     
  3. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Есть-то она есть, а вот заведена ли нога на материнке правильно — вопрос.
     
  4. BarDimS

    BarDimS New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2009
    Сообщения:
    4
    Об этом я подумал только сейчас:dntknw:
    Нет возможности.
    Посмотрю!
     
  5. BarDimS

    BarDimS New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2009
    Сообщения:
    4
    Winbond W83627EHG - чипсет на IOWA-8522 от IEI Technology Corp. Срабатывает watchdog аппаратно: нет никаких прерываний и их обработчиков!
    Используя datasheet я что-то стабильно делаю неправильно: не сработал ресет, ChipID прочиталось не то которое нужно. Ошибка в чем-то основнопологающем!
     
  6. jabocrack

    jabocrack New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2010
    Сообщения:
    96
    кстати в винде есть файлик watchdog.sys
     
  7. skomarov

    skomarov New Member

    Публикаций:
    0
    Регистрация:
    14 май 2008
    Сообщения:
    389
    BarDimS
    Нужно проинициализировать pin77 как говорит baldr

    // set pin77 as WDT function
    mov dx, 0x2D
    in al, dx
    and al, 0xFE // ???????0
    out dx, al

    mov dx, 0x07
    mov al, 0x08
    out dx, al

    mov dx, 0x30
    mov al, 0x01
    out dx, al

    mov dx, 0xF5
    in al, dx
    and al, 0xE7 // ???00???
    out dx, al

    mov dx, 0xF6
    mov al, 0x05 // 5 sec
    out dx, al

    mov dx, 0xF7
    mov al, 0x00
    out dx, al

    Во время работы при большой нагрузке "таймера с 2-ух секундным интервалом" может быть мало.
     
  8. skomarov

    skomarov New Member

    Публикаций:
    0
    Регистрация:
    14 май 2008
    Сообщения:
    389
    BarDimS
    Да, сброс регистра состояний CR F7h лучше сделать перед запуском CR F6h.
     
  9. BarDimS

    BarDimS New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2009
    Сообщения:
    4
    Задача решена! Все оказалось не так просто, помог кусочек кода драйвера присланого производителями IOWA-8522.
    3-ех секундный watchdog:
    Код (Text):
    1.                         _asm
    2.                         {
    3.                                 // записали адрес, равный 0x87 (начальная стадия входа)
    4.                                 mov dx, 0x2e
    5.                                 mov al, 0x87
    6.                                 out dx, al
    7.  
    8.                                 // записали адрес, равный 0x87 (конечная стадия входа)
    9.                                 mov dx, 0x2e
    10.                                 mov al, 0x87
    11.                                 out dx, al
    12.  
    13.                                 // записали адрес, равный 0x07 (шаг 1 выбора устройства)
    14.                                 mov dx, 0x2e
    15.                                 mov al, 0x07
    16.                                 out dx, al
    17.                                 // записали по адресу 0x07 значение 0x08 (шаг 2 выбора устройства)
    18.                                 mov dx, 0x2f
    19.                                 mov al, 0x08
    20.                                 out dx, al
    21.  
    22.                                 // записали адрес, равный 0x30 (шаг 1 активации устройства)
    23.                                 mov dx, 0x2e
    24.                                 mov al, 0x30
    25.                                 out dx, al
    26.                                 mov dx, 0x2f
    27.                                 in al, dx
    28.                                 or al, 0x01
    29.                                 // записали по адресу 0x30 значение 0x01 (шаг 2 активации устройства)
    30.                                 out dx, al
    31.  
    32.                                 // записали адрес, равный 0xf5 (шаг 1 настройки устройства)
    33.                                 mov dx, 0x2e
    34.                                 mov al, 0xf5
    35.                                 out dx, al
    36.                                 mov dx, 0x2f
    37.                                 in al, dx
    38.                                 and al, 0xe7
    39.                                 // записали по адресу 0xf5 значение ???00??? (шаг 2 настройки устройства)
    40.                                 out dx, al
    41.                
    42.                                 // записали адрес, равный 0xf7 (шаг 1 запрета сброса от прерываний мыши и клавиатуры)
    43.                                 mov dx, 0x2e
    44.                                 mov al, 0xf7
    45.                                 out dx, al
    46.                                 mov dx, 0x2f
    47.                                 in al, dx
    48.                                 and al, 0x3F
    49.                                 // записали по адресу 0xf7 значение 00??????b (шаг 2 запрета сброса от прерываний мыши и клавиатуры)
    50.                                 out dx, al
    51.  
    52.                                 // записали адрес, равный 0xf6 (шаг 1 запуска устройства)
    53.                                 mov dx, 0x2e
    54.                                 mov al, 0xf6
    55.                                 out dx, al
    56.                                 // записали по адресу 0xf6 значение 0x03 (шаг 2 запуска устройства)
    57.                                 mov dx, 0x2f
    58.                                 mov al, 0x03
    59.                                 out dx, al
    60.  
    61.                                 // записали адрес, равный 0xAA = вышли
    62.                                 mov dx, 0x2e
    63.                                 mov al, 0xAA
    64.                                 out dx, al
    65.                         }