Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Watchdog Timer, не получается :( 
:(
    Опции темы
chaos
Дата 27.8.2007, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Здрасте!!!!
Возникла задача заставить кусок кода
Код

/*
; INITIAL TIMER PERIOD COUNTER 
; 
W_LOOP: 

MOV     AX, 6F02H    ;setting the time-out value 
MOV     BL, 30      ;time-out value is 48 seconds 
INT       15H 
; 
; ADD THE APPLICATION PROGRAM HERE 
; 
CMP      EXIT_AP, 1    ;is the application over? 
JNE       W_LOOP   ;No, restart the application 

MOV    AX, 6F02H   ;disable Watchdog Timer 
MOV    BL, 0      ; 
INT      15H 
; 
; EXIT ; */



выполняться. если собирать обычное приложение 
Код

int _tmain(int argc, _TCHAR* argv[])
{
    __asm
    {
        mov        ax, 6F02h
        mov        bl, 30
        int        15h
    }

    return 0;
}


то оно вылетает, попробовал собрать типо драйвер 
Код

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
    __asm
    {
        MOV        AX,    6F02h 
        MOV        BL, 30
        INT        15h
    }
  
    return status;
}

VOID DriverUnload(IN PDRIVER_OBJECT DriverObject)
{
    return;
}


- система перегружается smile те или синий экран или сразу сброс 

подскажите что не так.  smile 



Заранее благодарен!

Это сообщение отредактировал(а) chaos - 27.8.2007, 12:09
PM WWW   Вверх
MAKCim
Дата 27.8.2007, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: нет
Всего: 207



chaos, 
вообще говоря 15h - это прерывание BIOS
в DriverEntry инструкция
Код

int 15h

привела к попытке вызвать обработчик, указанный в дескрипторе IDT под номером 15h
соответствующий дескриптор оказался невалидным (P = 0), возникло исключение #NP, что привело к BSOD / перезагрузке
в _tmain эта инструкция вызвала #NP или #GP, что привело к краху приложения
что должна делать int 15h?
может стоит использовать Turbo C++?

Это сообщение отредактировал(а) MAKCim - 27.8.2007, 13:01


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
chaos
Дата 27.8.2007, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Цитата

Appendix A: Watchdog Timer
The Watchdog Timer is provided to ensure that standalone systems can always
recover from CPU crash caused by external EMI or a software bug. When the
CPU is not functioning normally, a hardware reset (cold boot) will be performed to
bring the system to a normal state.
A BIOS function call (INT 15H) is used to control the Watchdog Timer:
INT 15H:
AH – 6FH
Sub-function:
AL – 2: Set the Watchdog Timer period
BL : Time-out value (the time unit—second,
is dependent on Watchdog Timer unit
(selected in BIOS setup).
You have to call sub-function 2 to set the time-out period of Watchdog Timer first.
If the time-out value is not zero, Watchdog Timer will begin counting down.
When the timer value reaches zero, the system will reset. To ensure this reset
condition does not occur, Watchdog Timer must be periodically refreshed by
calling sub-function 2. However the Watchdog timer will be disabled if you set
the time-out value to be zero.
A tolerance of at least 10% must be maintained to avoid unknown routines within
the operating system (DOS), such as disk I/O that can be very time-consuming.
Note: When exiting a program, it is necessary to disable the Watchdog Timer.
Otherwise, the system will reset.



Example program:
; INITIAL TIMER PERIOD COUNTER
;
W_LOOP:
MOV AX, 6F02H ;setting the time-out value
MOV BL, 30 ;time-out value is 48 seconds
INT 15H
;
; ADD YOUR APPLICATION PROGRAM HERE
;
CMP EXIT_AP, 1 ;is your application over?
JNE W_LOOP ;No, restart your application
MOV AX, 6F02H ;disable Watchdog Timer
MOV BL, 0 ;
INT 15H
;
; EXIT


Добавлено через 1 минуту и 31 секунду
вообще задача обновлять значение вачдога, те необходимо заставить работать код

Код

MOV     AX, 6F02H    ;setting the time-out value 
MOV     BL, 30      ;time-out value is 30 seconds 
INT       15H 

PM WWW   Вверх
chaos
Дата 27.8.2007, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



MAKCim, собрал приложение 
Код

int main()
{
    asm mov ax, 6F02h
    asm mov bl, 5h
    asm int 15h
}

собрал в TCC. запустил и ничего smile такое ощущение что нет ни какого вачдога smile

MAKCim что думаешь по этому поводу?
PM WWW   Вверх
dumb
Дата 27.8.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 2
Всего: 158



chaos, а инфу по int 15/6f02 ты взял из документации на свое железо или как?
PM MAIL   Вверх
MAKCim
Дата 27.8.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: нет
Всего: 207



Цитата(chaos @  27.8.2007,  14:57 Найти цитируемый пост)
что думаешь по этому поводу? 

Windows эмулирует в режиме V86 16-ти битный код (который ты получил при использовании TCC)
той функциональности, которую реализует int 15h ты будучи в Windows (драйвер или пользовательский режим (обычный 32-ух битный код или V86)) не получишь
тут или DOS нужен, или что-то, что может вызывать напрямую сервисы BIOS
а кстати, можешь попробовать установить свой обработчик на SMI (System Management Interrupt)
и сгенерировать вручную SMI, в обработчике вызвать int 15h
(все это, естественно, из драйвера нужно делать)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
chaos
Дата 28.8.2007, 06:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Цитата(dumb @ 27.8.2007,  17:13)
chaos, а инфу по int 15/6f02 ты взял из документации на свое железо или как?

все верно
PM WWW   Вверх
chaos
Дата 3.9.2007, 06:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



а может можно где пример посмотреть? 
PM WWW   Вверх
MAKCim
Дата 3.9.2007, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: нет
Всего: 207



chaos,
вопрос ко мне? 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
chaos
Дата 4.9.2007, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



MAKCim, да smile наверно к тебе. ибо только ты тут мне пишешь. я просто с программированием в режиме ядра пока не очень. заказал книгу Солдатова(не реклама smile ) буду разбираться
PM WWW   Вверх
MAKCim
Дата 4.9.2007, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: нет
Всего: 207



chaos, 
если у тебя DOS и программа под DOS, то все понятно: делаешь
Код

MOV     AX, 6F02H   
MOV     BL, 30      
INT       15H 

и получаешь нужный результат
если Windows и защищенный режим то пишешь драйвер
при этом нужно обязательно знать, где располагается аппаратно поддерживаемая чипсетом
область SMRAM (обычно она расположена в диапозоне VGA (0xA0000-0xBFFFF))
далее активируешь доступ к SMRAM не в SMM (обычно через конфигурационное пространство PCI)
отображаешь 128КБ на виртуальное адресное пространство ядра и по адресу SMBASE + 0x8000
(SMBASE - определенный виртуальный адрес SMRAM) записываешь свой обработчик (16-ти битный код)
на всякий случай проделываешь эту же операцию, но с дефолтным SMBASE (физический адрес = 0x30000 (его тоже надо отобразить на виртуальное адресное пространство)) (на случай, если BIOS не изменил его в процессе инициализации)
далее генерируешь SMI (генерация возможна только через IPI)
управление перейдет на твой обработчик, который будет выполняться в Unreal Mode
далее изменяешь IDTR и вызываешь int 15h



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
chaos
Дата 18.9.2007, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



чото не нашел в книге не про SMI не про IPI чо эта такое  smile 
с этим разобрался.
не понятно как далее "генерируешь SMI (генерация возможна только через IPI)" те как это делается вообще


Это сообщение отредактировал(а) chaos - 18.9.2007, 11:13
PM WWW   Вверх
MAKCim
Дата 18.9.2007, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: нет
Всего: 207



Цитата(chaos @  18.9.2007,  10:13 Найти цитируемый пост)
не понятно как далее "генерируешь SMI (генерация возможна только через IPI)" те как это делается вообще

вообще просто
из драйвера
Код

...
PVOID ApicVirtualBase = MmMapIoSpace((PHYSICAL_ADDRESS)0xFEE00000, 4096, MmNonCached);
/* проверка ApicVirtualBase на валидность */
asm {
    mov ebx, ApicVirtualBase
    mov eax, dword ptr [eax + 20h]
    and eax, FF000000h
    mov dword ptr [eax + 310h], eax
    mov dword ptr [eax + 300h], 4200h
}
MmUnmapIoSpace(ApicVirtualBase, 4096);
...



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.