1

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;
}

ただし、これは間違っています。実行するとセグメンテーション違反が発生します。レジスタには正しい値がありますが、関数を実際に実行する方法がわかりません。

何か助けはありますか?

4

5 に答える 5

1

gcc を使用している場合は、どのレジスタが破壊されているかを伝える必要があります。

asm(
    "movb           $0x78,          %ah\n\t"
    "movb           $0xEB,          %al\n\t"
    "movb           $0x01,          %bl\n\t"
    "movb           $0x00,          %bh\n\t"
    "int            $0x80"
    :
    :
    : "ax", "bx", //... and what else may be clobbered by the int $80
);
于 2009-10-06T10:20:51.353 に答える
0

通常、コンパイラ ベンダーは、C コードで CPU ペリフェラルを設定する方法を提供します。マニュアルで「WDT」または「Watchdog」を検索して、便利な方法が提供されているかどうかを確認してください。

于 2009-10-08T07:15:18.930 に答える
0

Cで特定のアドレスまたはレジスタを設定するためのコードを次に示します(GCCで動作します):

#define MICRO_PORT  (*(vuint8 *)(0x40100000))

これは、アドレス 0x40100000 で 8 ビット ポートまたはレジスタを定義し、他の変数として読み書きできます。

MICRO_PORT = 0xFF;
someval = MICRO_PORT;
于 2012-07-23T08:20:58.017 に答える
0

直面している問題は、コンテキストの切り替えに関連している可能性があります。割り込み命令を介して制御を転送します。これは、コンテキスト切り替え部分をコードで処理する必要があることを意味します。つまり、割り込みサービス ルーチンを作成し、メイン関数から呼び出す必要があります。

ルーチンは、実際にプロセッサに割り込む前に、プロセッサの状態を保存する必要があります。これは、割り込み処理によってレジスタの内容が変更される可能性があるためです。

終了時に、ルーチンはプロセッサの状態を復元する必要があります。割り込みサービス ルーチンは引数を取らず、値も返しません。

于 2009-11-06T02:28:32.617 に答える
0

ドキュメントでこれを見つけました:

ウォッチドッグ機能は INT15 関数に統合されています

したがって、0x80 ではなく int 0x15 を呼び出す必要があるようです。0x80 は Linux システムコールです。

また:

いくつかのプログラミング例が利用可能です: 製品 CD-ROM または顧客ダウンロード エリア: \tools\SM855\int15dl\…</p>

それらの例を見たことがありますか?

于 2012-07-23T11:10:04.393 に答える