Мне нужно включить аппаратный сторожевой таймер встроенного компьютера msm800.
К сожалению, я почти ничего не знаю об использовании языков ассемблера.
Вот что написано в документации к устройству:
Функция: WATCHDOG
Номер: EBh
Описание:
Включает стробоскопы и отключает
Сторожевая собака. После включения сторожевой таймер
всегда отключен Когда-то сторожевой
было включено, пользовательское приложение
должен выполнять строб по крайней мере каждый
800мс, в противном случае сторожевой таймер выполняет
аппаратный сброс
Входные значения:
AH: 78 ч. Функция DLAG Int15
AL: EBh Запрос функции
BL: 00h Отключить
BL: 01h Включить
BL: строб FFh
01h-FFh Включить Watchdog / retrigger
ЧД: 00h = BL -> количество секунд. / 01ч =
BL -> количество мин.
Выходное значение: AL 01h сторожевой таймер
истекло время ожидания
И вот что я придумал:
#include <stdio.h>
int main() {
asm(
"movb $0x78, %ah\n\t"
"movb $0xEB, %al\n\t"
"movb $0x01, %bl\n\t"
"movb $0x00, %bh\n\t"
"int $0x80"
);
return 0;
}
Хотя это неправильно - выполнение приводит к ошибке сегментации, у меня правильные значения в регистрах, но я не знаю, как на самом деле запустить функцию.
Любая помощь?