適用先: ARM 開発ツール
回答
この記事に含まれている情報の適用先:
- MDK-ARM の全バージョン
- CARM の全バージョン
- GNU C Compiler for ARM の全バージョン
質問
変数を固定メモリアドレスに配置する必要があります。C ソース コードを使用して配置する方法を教えてください。
回答
GNU GCC Compiler では、ポインタ定義のみを使用して、絶対メモリ位置にアクセスすることができます。以下に例を示します。
/* General Purpose Input/Output (GPIO) */
#define IOPIN0 (*((volatile unsigned long *) 0xE0028000))
.
.
.
IOPIN0 = 0x4;
RealView ARM C Compiler では、(上記のように)ポインタ定義を使用して、あるいはキーワード __attribute__((at(address))) を使用して、固定メモリアドレスの変数を定義することができます。ポインタによる構成とは対照的に、下記の定義では、メモリ領域を二度使用できないように、適正なメモリ予約も行われます。
int var __attribute__((at(0x40001000)));
.
.
.
var = 4; // changes the memory location at 0x40001000
Keil CARM C Compiler では、(上記のように)ポインタ定義を使用して、あるいはキーワード _at_ を使用して、固定メモリアドレスの変数を定義することができます。RealView C Compiler と同様に、下記の定義では、メモリ領域を二度使用できないように、適正なメモリ予約も行われます。
int var _at_ 0x40001000;
.
.
.
var = 4; // changes the memory location at 0x40001000
詳細
- RealView Compiler Reference Guide の __attribute__((at(address))) を参照してください。