2

ねえ、私はWinAVRを使用していて、CでATMEGA32をプログラミングしています。
基本的に、Cプログラムを次の方法でasmにリンクしたいと思います。

asm( "")コマンド。

asmコマンドライン内でそれらにアクセスできるように、Cでメモリ位置を正確なメモリ位置に定義しようとしています。

私は5つの変数を持っています:

unsigned char var1、var2、var3、var4、var5;

メモリ位置へのポインタを使用できることは知っていますが、これを行う方法がわかりません。
どんな助けでもいただければ幸いです。
ありがとう、
オリバー。

4

2 に答える 2

3

GCCを使用したインラインアセンブラを使用して、C変数名でメモリ位置にアクセスできます。詳細については、 AVR-GCCインラインアセンブラクックブックを参照してください。コンパイラ拡張機能またはリンカスクリプトを使用して、C変数を正確なメモリ位置に配置することもできます。ただし、コンパイラとアセンブラの要点は、そのような面倒な詳細を管理する必要がないようにすることです。

于 2011-04-11T02:22:21.337 に答える
3

このメソッドは、完全にコンパイラに依存せず、単純で、簡単です。

#define var1 (*(volatile unsigned char *)0xDEADBEEF)
#define var2 (*(volatile unsigned char *)0xDECAFBAD)
#define var3 (*(volatile unsigned char *)0xBADC0DE)

于 2011-04-11T02:55:49.880 に答える