1

私はマイクロコントローラープログラミング、特にPIC18F87J11の初心者で、MPLAB C18 コンパイラーを使用しています。メモリへの保存やタイマーの操作など、さまざまなトピックについてデータシートを読んでいました。例がアセンブリ言語で書かれていることに気付きましたが、アセンブリ言語の経験はほとんどありません。プロジェクトで Assembly と C の機能を一緒に使用する方法はありますか?

私はアセンブリをよく理解していません。そうでなければ、コードを C に変換しようとします。この場合は、ほとんど変更を加えずにアセンブリ コードを使用するだけです。

MPLAB C18 コンパイラを使用して C プログラムでアセンブリ関数を使用する方法の例を誰か教えてもらえますか?

アセンブリ関数は、hello world のように単純にすることができます。MPLAB で 2 つの異なる言語を組み合わせて使用​​するプロセスを理解する必要があるだけです。テスト用のクイック関数を作成しようとしましたが、アセンブリ コードをどこに置くべきかわかりませんでした。アセンブリ コードには、プロジェクトに独自のファイルを含める必要がありますか?

全体像を見ることができるように、誰かが完全に単純な例で私を啓発してくれることを願っています。事前に適切なサポートを提供します、ありがとう!

4

2 に答える 2

5

使用するコンパイラによっては、C 言語で asm を使用する方法があります (C で asm を使用する機能は標準の一部ではありません)。各コンパイラは同じ構文を使用しません。MPLAB C18 では、次のようになります。

void main()
{
     _asm
                movlw 0x57
                movwf PORTB
    _endasm
}

上記の例はこのリンクからのもので、MPLAB C18 で C で asm を使用する方法を説明しています。

于 2013-07-25T07:23:21.690 に答える
2

コンパイラにアクセスできなければこれをテストすることはできませんが、ここで見つけたMPLAB C18 C Compiler User's Guide and Release Notesには次のように記載されています。

2.8.2 インライン アセンブリ

MPLAB C18 は、MPASM アセンブラと同様の構文を使用する内部アセンブラを提供します。アセンブリ コードのブロックは で始まり、_asmで終わる必要があります_endasm。ブロック内の構文は次のとおりです。

[label:] [<instruction> [arg1[, arg2[, arg3]]]]

...

したがって、1つの解決策は、.Cファイルにこのようなものを埋め込むことであると思われます

void myAsmFunction()
{
  _asm
  // The asm code you've been looking at
  _endasm
}

次に、適切な場所から myAsmFunction を呼び出します。パラメータを含めて値を返したい場合は、少し複雑になります。

于 2013-07-25T07:23:56.240 に答える