msm800 組み込みコンピュータのハードウェア ウォッチドッグを有効にする必要があります。
残念ながら、私はアセンブリ言語の使用についてほとんど何も知りません。
これは、デバイスのドキュメントに次のように記載されています。
機能: WATCHDOG
番号: EBh
説明:
ストロボを有効にし、ウォッチドッグを無効にします。電源投入後、ウォッチドッグは常に無効になっています。ウォッチドッグが有効になったら、ユーザー アプリケーションは少なくとも 800ms ごとにストローブを実行する必要があります。そうしないと、ウォッチドッグがハードウェア リセットを実行します。
入力値:
AH: 78h DLAG Int15 関数
AL: EBh 機能要求
BL: 00h 無効
BL: 01h 有効
BL:FFhストロボ
01h-FFh ウォッチドッグ / リトリガーを有効にする
BH: 00h = BL -> 秒数 / 01h = 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;
}
ただし、これは間違っています。実行するとセグメンテーション違反が発生します。レジスタには正しい値がありますが、関数を実際に実行する方法がわかりません。
何か助けはありますか?