Мне нужно включить аппаратное сторожевое устройство встроенного компьютера msm800.Включение аппаратного сторожевого таймера в msm800
К сожалению, я почти ничего не знаю об использовании языков ассемблера.
Это то, что документация для устройства говорит:
Функция: WATCHDOG
Номер: EBh
Описание:
Включает стробы и отключает Watchdog. После включения питания сторожевой таймер всегда отключен. После того, как сторожевого была включена, пользовательское приложение должен выполнить строб, по крайней мере каждый 800ms, в противном случае сторожевой выполняет аппаратный сброс
Входные значения:
AH: 78h функция DLAG INT15
AL: EBh запрос Функция
BL: 00h Отключить
BL: 01h Включить
BL: FFh Строб
01h-FFh Enable Watchdog/Retrigger
BH: 00h = BL -> число сек./01h = BL -> количество мин.
значение Выход: AL таймер 01ч Watchdog тайм-аут произошел
И это то, что я придумал:
#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;
}
Это неправильно, хотя - бег результатов в сбоем сегментации, у меня есть правильные значения в регистрах, но не знают, как реально запустить эту функцию.
Любая помощь?
Я никогда не работал с msm800 (я даже не знал, что он существует) , но можете ли вы написать команды asm в строке? В системах, которые я использовал asm, мне пришлось писать его напрямую, а не в строке. – nuriaion
Я тоже никогда не видел инструкции, написанные таким образом. – blak3r