このcコードは、メモリアドレスに値を返します。メモリアドレスに値を返すC#defineの理解
value = MemoryRead((ptr))
MemoryRead
#define
は
#define MemoryRead(A) (*(volatile unsigned char*)(A))
として定義されていますか?これはどのようにアドレスで値を返すかを誰かが説明できますか?
このcコードは、メモリアドレスに値を返します。メモリアドレスに値を返すC#defineの理解
value = MemoryRead((ptr))
MemoryRead
#define
は
#define MemoryRead(A) (*(volatile unsigned char*)(A))
として定義されていますか?これはどのようにアドレスで値を返すかを誰かが説明できますか?
*(addr)は、addr
に格納された値を返します。
上記コードは自明です。あなたが乾いたら走ります。
はvalue = MemoryRead((ptr))
がvalue = (*(volatile unsigned char*)((ptr)))
#define
になり考えてみましょう最初は本当に不可解に見えます。これを理解する方法は、それを断片に分解することです。as done here;
まず、
unsigned char
たちは、バイトサイズのメモリ・ロケーションを使用していることを意味します。バイトは8ビットである ワイドです。
unsigned char *
は、バイトサイズの位置を指すポインタを宣言していることを意味します。
(unsigned char *) (ptr)
は、アドレス
ptr
を指すバイトサイズのポインタを意味します。 Cコンパイラ は、アドレスptr
を参照します。アセンブリコードは、ロード(LD)およびストア(STR)命令でptr を使用して終了します。(*(unsigned char *)(ptr))
左から最初のアスタリスクは、我々はアドレス
ptr
で 値を操作することを意味します。 *は「 ポインタが指す値」を意味します。値がそれを知っているコンパイラ なく変更することがありますようvolatile
揮発性の力の負荷を発行したり、いつでも
MemoryRead
を保存するために、コンパイラがアクセスされます。
ptr
に入力された住所は、 コードで直接アクセスされます。 (アドレスがメモリ内にある場合)
今後は、http://stackoverflow.com/help/referencingでソースを明確に参照してください。 – Matt
私はソースに言及し、履歴をチェックしましたか? –
これまでに何百回も尋ねられ、説明されています。質問をする前に、SOに関するいくつかの調査をしてください。 – Lundin